<?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>21647</bug_id>
          
          <creation_ts>2008-10-16 11:14:12 -0700</creation_ts>
          <short_desc>RenderStyle should inherit from RefCounted</short_desc>
          <delta_ts>2008-10-16 17:26: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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>95551</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-16 11:14:12 -0700</bug_when>
    <thetext>RenderStyle needs to be taken out of the RenderArena and made to inherit from RefCounted so that RefPtr and PassRefPtr work with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95552</commentid>
    <comment_count>1</comment_count>
      <attachid>24399</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-16 11:15:27 -0700</bug_when>
    <thetext>Created attachment 24399
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95562</commentid>
    <comment_count>2</comment_count>
      <attachid>24403</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-16 12:37:04 -0700</bug_when>
    <thetext>Created attachment 24403
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95565</commentid>
    <comment_count>3</comment_count>
      <attachid>24403</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-10-16 13:01:23 -0700</bug_when>
    <thetext>Comment on attachment 24403
Patch

Your ChangeLog should at least include these two bits of information:

1) This patch makes RenderStyles not be allocated inside a RenderArena
2) (1) is OK to do because....

@@ RenderStyle* CSSStyleSelector::styleForE
11781165         m_style-&gt;setUnique();
11791166 
11801167     // Now return the style.
1181      return m_style;
 1168     return m_style.release();
11821169 }

This will set m_style to 0. The old code didn&apos;t do that. Why is that OK?

@@ RenderStyle* CSSStyleSelector::pseudoSty
13161300     if (m_fontDirty)
13171301         updateFont();
13181302     // Clean up our style object&apos;s display and text decorations (among other fixups).
1319      adjustRenderStyle(m_style, 0);
 1303     adjustRenderStyle(style(), 0);
13201304 
13211305     // Now return the style.
1322      return m_style;
 1306     return m_style.release();
13231307 }

Same question here.

Why are these two functions modifying m_style at all? Their names make it sound like they should be const member functions.

@@ inline void ElementRareData::resetComput
5251 {
5352     if (!m_computedStyle)
5453         return;
55      m_computedStyle-&gt;deref(element-&gt;document()-&gt;renderArena());
5654     m_computedStyle = 0;
5755 }

I think we prefer .clear() instead of = 0 for clearing RefPtrs. You have this in a few other places in this patch.

 1069 void Node::setRenderStyle(const PassRefPtr&lt;RenderStyle&gt;&amp; s)

Why are you using a const PassRefPtr&amp; instead of just a PassRefPtr? Ditto for all derived classes, of course.

@@ RenderStyle* AnimationController::update
234234     if ((!oldStyle || (!oldStyle-&gt;animations() &amp;&amp; !oldStyle-&gt;transitions())) &amp;&amp; (!newStyle-&gt;animations() &amp;&amp; !newStyle-&gt;transitions()))
235235         return newStyle;
236236 
237      RenderStyle* blendedStyle = newStyle;
 237     RefPtr&lt;RenderStyle&gt; blendedStyle = newStyle;

This will ref/deref where we didn&apos;t used to before. Why is this needed?

183183     virtual void animate(CompositeAnimation*, RenderObject*, const RenderStyle* currentStyle, 
184                           const RenderStyle* targetStyle, RenderStyle*&amp; animatedStyle) { }
 184                          const RenderStyle* targetStyle, RefPtr&lt;RenderStyle&gt;&amp; animatedStyle) { }

Is animatedStyle an out parameter? Why not just return a PassRefPtr?

 229 PassRefPtr&lt;RenderStyle&gt; CompositeAnimationPrivate::animate(RenderObject* renderer, RenderStyle* currentStyle, RenderStyle* targetStyle)
230230 {
231      RenderStyle* resultStyle = 0;
 231     RefPtr&lt;RenderStyle&gt; resultStyle;
232232 
233233     // Update animations first so we can see if any transitions are overridden
234234     updateKeyframeAnimations(renderer, currentStyle, targetStyle);

Somewhere you should have &quot;return resultStyle.release();&quot; But I don&apos;t see that in this patch.

 37 ImplicitAnimation::ImplicitAnimation(const Animation* transition, int animatingProperty, RenderObject* renderer, CompositeAnimation* compAnim, RenderStyle* fromStyle)
3838     : AnimationBase(transition, renderer, compAnim)
3939     , m_transitionProperty(transition-&gt;property())
4040     , m_animatingProperty(animatingProperty)
4141     , m_overridden(false)
42      , m_fromStyle(0)
43      , m_toStyle(0)
4442 {
4543     ASSERT(animatingProperty != cAnimateAll);
46      if (fromStyle) {
 44     if (fromStyle)
4745         m_fromStyle = fromStyle;
48          const_cast&lt;RenderStyle*&gt;(m_fromStyle)-&gt;ref();
49      }

You can just initialize m_fromStyle in the initializer list. The if isn&apos;t helping you at all.

 78         animatedStyle = RenderStyle::clone(targetStyle);

Maybe we should have a non-static copy() member function on RenderStyle?

 41 KeyframeAnimation::KeyframeAnimation(const Animation* animation, RenderObject* renderer, int index, CompositeAnimation* compAnim, RenderStyle* unanimatedStyle)
4242     : AnimationBase(animation, renderer, compAnim)
4343     , m_keyframes(renderer, animation-&gt;name())
4444     , m_index(index)
45      , m_unanimatedStyle(0)
4645 {
47      if (unanimatedStyle) {
48          const_cast&lt;RenderStyle*&gt;(unanimatedStyle)-&gt;ref();
 46     if (unanimatedStyle)
4947         m_unanimatedStyle = unanimatedStyle;
50      }

Again, you can just initialize in the initializer list. The if isn&apos;t helping.

@@ void InlineTextBox::paint(RenderObject::
376376             selectionFillColor = foreground;
377377         }
378378 
379          if (RenderStyle* pseudoStyle = object()-&gt;getPseudoStyle(RenderStyle::SELECTION)) {
 379         RefPtr&lt;RenderStyle&gt; pseudoStyle = object()-&gt;getPseudoStyle(RenderStyle::SELECTION);
 380         if (pseudoStyle) {

You can keep the declaration/assignment inside the if condition.

@@ void RenderContainer::addChild(RenderObj
113113             table = static_cast&lt;RenderTable*&gt;(afterChild);
114114         else {
115115             table = new (renderArena()) RenderTable(document() /* is anonymous */);
116              RenderStyle *newStyle = new (renderArena()) RenderStyle;
 116             RefPtr&lt;RenderStyle&gt; newStyle = RenderStyle::create();
117117             newStyle-&gt;inheritFrom(style());
118118             newStyle-&gt;setDisplay(TABLE);
119119             table-&gt;setStyle(newStyle);

Should you be passing newStyle.release() to setStyle? There are a number of places in this patch where you don&apos;t do this -- maybe you should do it everywhere?

 137 PassRefPtr&lt;RenderStyle&gt; RenderFileUploadControl::createButtonStyle(const RenderStyle* parentStyle) const
138138 {
139      RenderStyle* style = getPseudoStyle(RenderStyle::FILE_UPLOAD_BUTTON);
 139     RefPtr&lt;RenderStyle&gt; style = getPseudoStyle(RenderStyle::FILE_UPLOAD_BUTTON);

At some point you should be returning style.release(), but I don&apos;t see that in this patch.

 69     static RenderFlow* createAnonymousFlow(Document*, const PassRefPtr&lt;RenderStyle&gt;&amp;);

Why a const PassRefPtr&amp;?

@@ Color RenderObject::selectionForegroundC
20562056     if (style()-&gt;userSelect() == SELECT_NONE)
20572057         return color;
20582058 
2059      if (RenderStyle* pseudoStyle = getPseudoStyle(RenderStyle::SELECTION)) {
 2059     if (RefPtr&lt;RenderStyle&gt; pseudoStyle = getPseudoStyle(RenderStyle::SELECTION)) {

I don&apos;t understand why you had to add a RefPtr here. You didn&apos;t remove any calls to deref, so getPseudoStyle must not have been handing off ownership to the caller. So why use a RefPtr? There are other places in this patch where this happens, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95604</commentid>
    <comment_count>4</comment_count>
      <attachid>24422</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-16 14:21:42 -0700</bug_when>
    <thetext>Created attachment 24422
Patch #3

Address Adam&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95621</commentid>
    <comment_count>5</comment_count>
      <attachid>24422</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-10-16 15:07:18 -0700</bug_when>
    <thetext>Comment on attachment 24422
Patch #3

@@ inline void ElementRareData::resetComput
5251 {
5352     if (!m_computedStyle)
5453         return;
55      m_computedStyle-&gt;deref(element-&gt;document()-&gt;renderArena());
56      m_computedStyle = 0;
 54     m_computedStyle.clear();
5755 }

The if here isn&apos;t needed anymore.

152  void HTMLOptGroupElement::setRenderStyle(RenderStyle* newStyle)
 146 void HTMLOptGroupElement::setRenderStyle(PassRefPtr&lt;RenderStyle&gt; newStyle)
153147 {
154      RenderStyle* oldStyle = m_style;
155148     m_style = newStyle;
156      if (newStyle)
157          newStyle-&gt;ref();
158      if (oldStyle)
159          oldStyle-&gt;deref(document()-&gt;renderArena());
160149 }
161150     
162151 RenderStyle* HTMLOptGroupElement::nonRendererRenderStyle() const 
163152 { 
164      return m_style; 
 153     return m_style.get(); 
165154 }

You could even move these into the header now.

Ditto for HTMLOptionElement.

183183     virtual void animate(CompositeAnimation*, RenderObject*, const RenderStyle* currentStyle, 
184                           const RenderStyle* targetStyle, RenderStyle*&amp; animatedStyle) { }
 184                          const RenderStyle* targetStyle, RefPtr&lt;RenderStyle&gt;&amp; animatedStyle) { }

Why not just have this function return a PassRefPtr, rather than using an out parameter?

@@ RenderStyle* AnimationController::update
234234     if ((!oldStyle || (!oldStyle-&gt;animations() &amp;&amp; !oldStyle-&gt;transitions())) &amp;&amp; (!newStyle-&gt;animations() &amp;&amp; !newStyle-&gt;transitions()))
235235         return newStyle;
236236 
237      RenderStyle* blendedStyle = newStyle;
 237     RefPtr&lt;RenderStyle&gt; blendedStyle = newStyle;

I think you can remove this line of code and just declare blendedStyle the first time it&apos;s used a few lines later.

page/animation/AnimationController.h

2929 #ifndef AnimationController_h
3030 #define AnimationController_h
3131 
 32 #include &lt;wtf/PassRefPtr.h&gt;
 33 

I think you can use wtf/Forward.h here instead.

 229 PassRefPtr&lt;RenderStyle&gt; CompositeAnimationPrivate::animate(RenderObject* renderer, RenderStyle* currentStyle, RenderStyle* targetStyle)
230230 {
231      RenderStyle* resultStyle = 0;
 231     RefPtr&lt;RenderStyle&gt; resultStyle;

Seems like you&apos;re missing a .release() in this function.

@@ void RenderContainer::updateBeforeAfterC
324324                     genChild-&gt;setStyle(pseudoElementStyle);
325325                 else if (genChild-&gt;isImage()) {
326326                     // Images get an empty style that inherits from the pseudo.
327                      RenderStyle* style = new (renderArena()) RenderStyle;
 327                     RefPtr&lt;RenderStyle&gt; style = RenderStyle::create();
328328                     style-&gt;inheritFrom(pseudoElementStyle);
329329                     genChild-&gt;setStyle(style);
330330                 } else

@@ void RenderContainer::updateBeforeAfterC
353353                 break;
354354             case CONTENT_OBJECT: {
355355                 RenderImageGeneratedContent* image = new (renderArena()) RenderImageGeneratedContent(document()); // anonymous object
356                  RenderStyle* style = new (renderArena()) RenderStyle;
 356                 RefPtr&lt;RenderStyle&gt; style = RenderStyle::create();
357357                 style-&gt;inheritFrom(pseudoElementStyle);
358358                 image-&gt;setStyle(style);
359359                 if (StyleImage* styleImage = content-&gt;m_content.m_image)

Missing .release()s in both of these cases.

 2165 void RenderObject::setStyle(PassRefPtr&lt;RenderStyle&gt; style)
21662166 {
21672167     if (m_style == style)
21682168         return;
21692169 
21702170     RenderStyle::Diff diff = RenderStyle::Equal;
21712171     if (m_style)
2172          diff = m_style-&gt;diff(style);
 2172         diff = m_style-&gt;diff(style.get());
21732173 
21742174     // If we have no layer(), just treat a RepaintLayer hint as a normal Repaint.
21752175     if (diff == RenderStyle::RepaintLayer &amp;&amp; !hasLayer())
21762176         diff = RenderStyle::Repaint;
21772177 
2178      styleWillChange(diff, style);
 2178     styleWillChange(diff, style.get());
21792179     
2180      RenderStyle* oldStyle = m_style;
2181      m_style = const_cast&lt;RenderStyle*&gt;(style);
2182      if (m_style)
2183          m_style-&gt;ref();
 2180     RefPtr&lt;RenderStyle&gt; oldStyle = m_style;
 2181     m_style = style;

You can make this a little more efficient by doing:

RefPtr&lt;RenderStyle&gt; oldStyle = m_style.release();

 2192 void RenderObject::setStyleInternal(PassRefPtr&lt;RenderStyle&gt; style)
21992193 {
22002194     if (m_style == style)
22012195         return;
2202      if (m_style)
2203          m_style-&gt;deref(renderArena());
22042196     m_style = style;
2205      if (m_style)
2206          m_style-&gt;ref();
22072197 }

The if here isn&apos;t needed anymore.

 379     RenderStyle* getCachedPseudoStyle(RenderStyle::PseudoId, RenderStyle* parentStyle = 0) const;
 380     PassRefPtr&lt;RenderStyle&gt; getUncachedPseudoStyle(RenderStyle::PseudoId, RenderStyle* parentStyle = 0) const;

I think it&apos;s worth adding comments about how one should choose which of these two functions to call.

 38 void RenderSVGBlock::setStyle(PassRefPtr&lt;RenderStyle&gt; style) 
3939 {
40      const RenderStyle* useStyle = style;
 40     RefPtr&lt;RenderStyle&gt; useStyle = style;
4141 
4242     // SVG text layout code expects us to be a block-level style element.   
4343     if (useStyle-&gt;display() == NONE)
4444         setChildrenInline(false);
4545     else if (useStyle-&gt;isDisplayInlineType()) {
46          RenderStyle* newStyle = new (renderArena()) RenderStyle();
47          newStyle-&gt;inheritFrom(style);
 46         RefPtr&lt;RenderStyle&gt; newStyle = RenderStyle::create();
 47         newStyle-&gt;inheritFrom(useStyle.get());
4848         newStyle-&gt;setDisplay(BLOCK);
4949         useStyle = newStyle;
5050     }

You can do:

useStyle = newStyle.release();

 177 PassRefPtr&lt;RenderStyle&gt; RenderSlider::createThumbStyle(const RenderStyle* parentStyle, const RenderStyle* oldStyle)

I think you&apos;re missing a .release() in this function.

 36 inline RenderStyle* defaultStyle()
3937 {
40      return renderArena-&gt;allocate(sz);
 38     static RefPtr&lt;RenderStyle&gt; s_defaultStyle;
 39     if (!s_defaultStyle)
 40         s_defaultStyle = RenderStyle::createDefaultStyle();
 41     return s_defaultStyle.get();
4142 }

It would be better just to use a bare (leaked) pointer here so that we don&apos;t have to call deref() when the process is exiting. You also don&apos;t need the if -- you can just initialize on the same line you declare it on.

142121 RenderStyle::RenderStyle(const RenderStyle&amp; o)
143      : inherited_flags(o.inherited_flags)
 122     : RefCounted&lt;RenderStyle&gt;()

The RefCounted() shouldn&apos;t be necessary.

Have you tried run-webkit-tests --leaks?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95637</commentid>
    <comment_count>6</comment_count>
      <attachid>24435</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-16 15:44:52 -0700</bug_when>
    <thetext>Created attachment 24435
Patch #4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95640</commentid>
    <comment_count>7</comment_count>
      <attachid>24435</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-10-16 15:56:44 -0700</bug_when>
    <thetext>Comment on attachment 24435
Patch #4

 379     // The pseudo element style can be cached or uncached.  Use the cached method if the pseudo element doesn&apos;t respect
 380     // any pseudo classes (and therefore has no concept of changing state).
 381     RenderStyle* getCachedPseudoStyle(RenderStyle::PseudoId, RenderStyle* parentStyle = 0) const;
 382     PassRefPtr&lt;RenderStyle&gt; getUncachedPseudoStyle(RenderStyle::PseudoId, RenderStyle* parentStyle = 0) const;

Is it possible to assert that people are calling the right function?

 36 inline RenderStyle* defaultStyle()
3937 {
 38     RenderStyle* s_defaultStyle = RenderStyle::createDefaultStyle().releaseRef();
 39     return s_defaultStyle;
4140 }

I think you meant to declare s_defaultStyle static.

142119 RenderStyle::RenderStyle(const RenderStyle&amp; o)
143      : inherited_flags(o.inherited_flags)
 120     : RefCounted&lt;RenderStyle&gt;()
 121     , inherited_flags(o.inherited_flags)

The RefCounted() isn&apos;t necessary here.

Were we leaking RenderStyle::pseudoStyle before? I don&apos;t see any existing calls to deref() it.

r=me if you fix the defaultStyle() bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95666</commentid>
    <comment_count>8</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-16 17:22:26 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 24435 [edit])
&gt;  379     // The pseudo element style can be cached or uncached.  Use the cached
&gt; method if the pseudo element doesn&apos;t respect
&gt;  380     // any pseudo classes (and therefore has no concept of changing
&gt; state).
&gt;  381     RenderStyle* getCachedPseudoStyle(RenderStyle::PseudoId, RenderStyle*
&gt; parentStyle = 0) const;
&gt;  382     PassRefPtr&lt;RenderStyle&gt; getUncachedPseudoStyle(RenderStyle::PseudoId,
&gt; RenderStyle* parentStyle = 0) const;
&gt; 
&gt; Is it possible to assert that people are calling the right function?
&gt; 

I didn&apos;t want to make any assumptions about particular pseudo elements for now.

&gt;  36 inline RenderStyle* defaultStyle()
&gt; 3937 {
&gt;  38     RenderStyle* s_defaultStyle =
&gt; RenderStyle::createDefaultStyle().releaseRef();
&gt;  39     return s_defaultStyle;
&gt; 4140 }
&gt; 
&gt; I think you meant to declare s_defaultStyle static.
&gt; 

Indeed.

&gt; 142119 RenderStyle::RenderStyle(const RenderStyle&amp; o)
&gt; 143      : inherited_flags(o.inherited_flags)
&gt;  120     : RefCounted&lt;RenderStyle&gt;()
&gt;  121     , inherited_flags(o.inherited_flags)
&gt; 
&gt; The RefCounted() isn&apos;t necessary here.
&gt; 

Yes it is.

&gt; Were we leaking RenderStyle::pseudoStyle before? I don&apos;t see any existing calls
&gt; to deref() it.
&gt; 
&gt; r=me if you fix the defaultStyle() bug.
&gt; 

Thanks for the comments!

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95668</commentid>
    <comment_count>9</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-16 17:26:08 -0700</bug_when>
    <thetext>Fixed in r37637.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24399</attachid>
            <date>2008-10-16 11:15:27 -0700</date>
            <delta_ts>2008-10-16 12:37:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>133625</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM3NjM0
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg2IEBACisyMDA4LTEw
LTE2ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9hdHRhY2htZW50LmNnaT9idWdpZD0yMTY0NworCisgICAgICAgIE1ha2Ug
UmVuZGVyU3R5bGUgaW5oZXJpdCBmcm9tIFJlZkNvdW50ZWQgc28gdGhhdCBpdCB3b3JrcyB3aXRo
IFJlZlB0ci4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6fkNTU1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjp1cGRhdGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjptYXBGaWxsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpt
YXBGaWxsWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1h
cEZpbGxZUG9zaXRpb24pOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZSk6CisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZSk6Cisg
ICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c3R5
bGVGb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZWNhbGNTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpjb21wdXRlZFN0eWxlKToKKyAgICAgICAgKiBk
b20vRWxlbWVudC5oOgorICAgICAgICAqIGRvbS9FbGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6RWxlbWVudFJhcmVEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6cmVzZXRDb21wdXRlZFN0eWxlKToKKyAgICAgICAgKiBk
b20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkaWZmKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6c3R5bGVGb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRSZW5k
ZXJTdHlsZSk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKiBodG1sL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnNldEZvbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50OjphdHRhY2gpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudDo6ZGV0YWNoKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6OnNldFJlbmRlclN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6Om5vblJlbmRlcmVyUmVuZGVyU3R5bGUpOgorICAg
ICAgICAqIGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE9w
dGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmF0
dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6ZGV0YWNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpzZXRSZW5kZXJTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6bm9uUmVuZGVyZXJSZW5kZXJTdHlsZSk6
CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oOgorICAgICAgICAqIHBhZ2UvYW5p
bWF0aW9uL0FuaW1hdGlvbkJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6
OmFuaW1hdGUpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0
aW9ucyk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oOgor
ICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVUcmFuc2l0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVLZXlm
cmFtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uUHJp
dmF0ZTo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmFu
aW1hdGUpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oOgor
ICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjpJbXBsaWNpdEFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpJbXBsaWNpdEFuaW1hdGlvbjo6fkltcGxpY2l0QW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltcGxpY2l0QW5pbWF0aW9uOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNp
dEFuaW1hdGlvbjo6aXNUYXJnZXRQcm9wZXJ0eUVxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
cGxpY2l0QW5pbWF0aW9uOjpibGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKToKKyAgICAgICAgKiBw
YWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SW1w
bGljaXRBbmltYXRpb246OmNyZWF0ZSk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5ZnJh
bWVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246Oktl
eWZyYW1lQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjp+
S2V5ZnJhbWVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246
OmFuaW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OnZhbGlkYXRl
VHJhbnNmb3JtRnVuY3Rpb25MaXN0KToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlmcmFt
ZUFuaW1hdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6dW5hbmltYXRlZFN0eWxl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL01lZGlhQ29u
dHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFNoYWRvd1Jv
b3RFbGVtZW50OjpNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6Ok1lZGlhQ29udHJvbElucHV0RWxlbWVudCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6dXBkYXRlRmlyc3RMZXR0ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb250
YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29udGFpbmVyOjphZGRDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb250YWluZXI6OnVwZGF0ZUJlZm9yZUFmdGVyQ29u
dGVudEZvckNvbnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRD
b250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp1
cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6Y3JlYXRlQnV0dG9uU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxl
VXBsb2FkQ29udHJvbC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3c6OmNyZWF0ZUFub255bW91c0Zsb3cpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJGbG93Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmFkZENoaWxkVG9GbG93
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjp1cGRhdGVSZXNpemVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnVwZGF0ZVJlZmxlY3Rpb25TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxpc3RJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpz
dHlsZURpZENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpjcmVhdGVQYW5lbCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNZWRpYTo6Y3JlYXRlVGltZURpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWVkaWE6OmNoYW5nZU9wYWNpdHkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjcmVhdGVB
bm9ueW1vdXNCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldEFuaW1h
dGFibGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0U3R5bGVJbnRlcm5hbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFyZW5hRGVsZXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6Zmlyc3RMaW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjpnZXRQc2V1ZG9TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzdHlsZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR0Jsb2NrOjpzZXRTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2Nr
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTY3JvbGxiYXI6OmdldFNjcm9sbGJhclBzZXVkb1N0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNjcm9sbGJhcjo6dXBkYXRlU2Nyb2xsYmFyUGFydCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJTbGlkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjpzdHlsZURp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXI6OmNyZWF0ZVRodW1iU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjp1cGRhdGVGcm9tRWxlbWVudCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6YWRkQ2hp
bGQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0
aW9uOjphZGRDaGlsZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpzdHlsZURpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlSW5uZXJCbG9ja1N0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpjcmVhdGVJbm5lclRl
eHRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlUmVz
dWx0c0J1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpj
cmVhdGVDYW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbDo6Y3JlYXRlU3VidHJlZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHRDb250cm9sOjp1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbC5oOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0Q29udHJv
bElubmVyRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvbnRyb2xJbm5lckVs
ZW1lbnQ6OmF0dGFjaElubmVyRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxp
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVMaXN0OjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpLZXlmcmFtZUxpc3Q6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6
S2V5ZnJhbWVMaXN0OjppbnNlcnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9LZXlmcmFt
ZUxpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lVmFsdWU6OktleWZyYW1lVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZTo6fktleWZyYW1lVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZTo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6Oktl
eWZyYW1lVmFsdWU6OnN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN0eWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6
OmNyZWF0ZURlZmF1bHRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y2xv
bmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OlJlbmRlclN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpnZXRDYWNoZWRQc2V1ZG9TdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6YWRkQ2FjaGVkUHNldWRvU3R5bGUpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAg
ICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBz
dmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NsaXBQYXRo
RWxlbWVudDo6Y2FudmFzUmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9TVkdHcmFkaWVudEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpidWlsZFN0b3Bz
KToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdTdHlsZWRFbGVtZW50OjpyZXNvbHZlU3R5bGUpOgorICAgICAgICAqIHN2Zy9TVkdTdHls
ZWRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6cmVjYWxjU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVXNlRWxlbWVudDo6YXR0YWNoU2hhZG93VHJlZSk6CisKIDIwMDgtMTAtMTUgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgpJbmRleDogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyBjc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxOSw3ICs0MTksNyBAQCBDU1NTdHlsZVNl
bGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtCiAKICAgICBpZiAobV9yb290RGVmYXVsdFN0
eWxlICYmIHZpZXcpIHsKICAgICAgICAgZGVsZXRlIG1fbWVkaXVtOwotICAgICAgICBtX21lZGl1
bSA9IG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpLCB2aWV3LT5mcmFt
ZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUpOworICAgICAgICBtX21lZGl1bSA9IG5ldyBNZWRpYVF1
ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpLCB2aWV3LT5mcmFtZSgpLCBtX3Jvb3REZWZh
dWx0U3R5bGUuZ2V0KCkpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBUaGlzIHN1Y2tzISBUaGUg
dXNlciBzaGVldCBpcyByZXBhcnNlZCBldmVyeSB0aW1lIQpAQCAtNDY2LDcgKzQ2Niw2IEBAIENT
U1N0eWxlU2VsZWN0b3I6On5DU1NTdHlsZVNlbGVjdG9yKCkKIHsKICAgICBtX2ZvbnRTZWxlY3Rv
ci0+Y2xlYXJEb2N1bWVudCgpOwogICAgIGRlbGV0ZSBtX21lZGl1bTsKLSAgICA6OmRlbGV0ZSBt
X3Jvb3REZWZhdWx0U3R5bGU7CiAgICAgZGVsZXRlIG1fYXV0aG9yU3R5bGU7CiAgICAgZGVsZXRl
IG1fdXNlclN0eWxlOwogICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3ZpZXdwb3J0RGVwZW5kZW50TWVk
aWFRdWVyeVJlc3VsdHMpOwpAQCAtMTAwNiw3ICsxMDA1LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXRjaFVBUnVsZXMoaW50JgogLy8gSWYgcmVzb2x2ZUZvclJvb3REZWZhdWx0IGlzIHRy
dWUsIHN0eWxlIGJhc2VkIG9uIHVzZXIgYWdlbnQgc3R5bGUgc2hlZXQgb25seS4gVGhpcyBpcyB1
c2VkIGluIG1lZGlhIHF1ZXJpZXMsIHdoZXJlCiAvLyByZWxhdGl2ZSB1bml0cyBhcmUgaW50ZXJw
cmV0ZWQgYWNjb3JkaW5nIHRvIGRvY3VtZW50IHJvb3QgZWxlbWVudCBzdHlsZSwgc3R5bGVkIG9u
bHkgd2l0aCBVQSBzdHlsZXNoZWV0CiAKLVJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpz
dHlsZUZvckVsZW1lbnQoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIGRlZmF1bHRQYXJlbnQsIGJv
b2wgYWxsb3dTaGFyaW5nLCBib29sIHJlc29sdmVGb3JSb290RGVmYXVsdCkKK1Bhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBl
LCBSZW5kZXJTdHlsZSogZGVmYXVsdFBhcmVudCwgYm9vbCBhbGxvd1NoYXJpbmcsIGJvb2wgcmVz
b2x2ZUZvclJvb3REZWZhdWx0KQogewogICAgIC8vIE9uY2UgYW4gZWxlbWVudCBoYXMgYSByZW5k
ZXJlciwgd2UgZG9uJ3QgdHJ5IHRvIGRlc3Ryb3kgaXQsIHNpbmNlIG90aGVyd2lzZSB0aGUgcmVu
ZGVyZXIKICAgICAvLyB3aWxsIHZhbmlzaCBpZiBhIHN0eWxlIHJlY2FsYyBoYXBwZW5zIGR1cmlu
ZyBsb2FkaW5nLgpAQCAtMTAyNCwzMCArMTAyMywxOCBAQCBSZW5kZXJTdHlsZSogQ1NTU3R5bGVT
ZWxlY3Rvcjo6c3R5bGVGb3JFCiAKICAgICBpbml0RWxlbWVudEFuZFBzZXVkb1N0YXRlKGUpOwog
ICAgIGlmIChhbGxvd1NoYXJpbmcpIHsKLSAgICAgICAgbV9zdHlsZSA9IGxvY2F0ZVNoYXJlZFN0
eWxlKCk7Ci0jaWZkZWYgU1RZTEVfU0hBUklOR19TVEFUUwotICAgICAgICBmcmFjdGlvbiArPSBt
X3N0eWxlICE9IDA7Ci0gICAgICAgIHRvdGFsKys7Ci0gICAgICAgIHByaW50ZigiU2hhcmluZyAl
ZCBvdXQgb2YgJWRcbiIsIGZyYWN0aW9uLCB0b3RhbCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKG1f
c3R5bGUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnJlZigpOwotICAgICAgICAgICAgcmV0dXJu
IG1fc3R5bGU7Ci0gICAgICAgIH0KKyAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0g
bG9jYXRlU2hhcmVkU3R5bGUoKTsKKyAgICAgICAgaWYgKHNoYXJlZFN0eWxlKQorICAgICAgICAg
ICAgcmV0dXJuIHNoYXJlZFN0eWxlOwogICAgIH0KICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUs
IGRlZmF1bHRQYXJlbnQpOwogCi0gICAgaWYgKHJlc29sdmVGb3JSb290RGVmYXVsdCkgewotICAg
ICAgICBtX3N0eWxlID0gOjpuZXcgUmVuZGVyU3R5bGUoKTsKLSAgICAgICAgLy8gZG9uJ3QgcmVm
LCBiZWNhdXNlIHdlIHdhbnQgdG8gZGVsZXRlIHRoaXMsIGJ1dCB3ZSBjYW5ub3QgdW5yZWYgaXQK
LSAgICB9IGVsc2UgewotICAgICAgICBtX3N0eWxlID0gbmV3IChlLT5kb2N1bWVudCgpLT5yZW5k
ZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOwotICAgICAgICBtX3N0eWxlLT5yZWYoKTsKLSAgICB9
CisgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKwogICAgIGlmIChtX3BhcmVu
dFN0eWxlKQogICAgICAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShtX3BhcmVudFN0eWxlKTsKICAg
ICBlbHNlCi0gICAgICAgIG1fcGFyZW50U3R5bGUgPSBtX3N0eWxlOworICAgICAgICBtX3BhcmVu
dFN0eWxlID0gc3R5bGUoKTsKIAogICAgIGlmIChzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCAmJiAh
ZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRTdHlsZShlKSkKICAgICAgICAgbG9hZEZ1bGxEZWZh
dWx0U3R5bGUoKTsKQEAgLTExNjcsNyArMTE1NCw3IEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNl
bGVjdG9yOjpzdHlsZUZvckUKICAgICAgICAgdXBkYXRlRm9udCgpOwogICAgIAogICAgIC8vIENs
ZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChh
bW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxlKG1fc3R5bGUsIGUpOwor
ICAgIGFkanVzdFJlbmRlclN0eWxlKHN0eWxlKCksIGUpOwogCiAgICAgLy8gSWYgd2UgYXJlIGEg
bGluaywgY2FjaGUgdGhlIGRldGVybWluZWQgcHNldWRvLXN0YXRlLgogICAgIGlmIChlLT5pc0xp
bmsoKSkKQEAgLTExNzgsNyArMTE2NSw3IEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9y
OjpzdHlsZUZvckUKICAgICAgICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7CiAKICAgICAvLyBOb3cg
cmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gbV9zdHlsZTsKKyAgICByZXR1cm4gbV9zdHls
ZS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6a2V5ZnJhbWVTdHlsZXNG
b3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwg
S2V5ZnJhbWVMaXN0JiBsaXN0KQpAQCAtMTIwNiw4ICsxMTkzLDcgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjprZXlmcmFtZVN0eWxlc0ZvcgogICAgICAgICBBU1NFUlQoIW1fc3R5bGUpOwogCiAg
ICAgICAgIC8vIENyZWF0ZSB0aGUgc3R5bGUKLSAgICAgICAgbV9zdHlsZSA9IG5ldyAoZS0+ZG9j
dW1lbnQoKS0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKmVsZW1lbnRTdHlsZSk7Ci0gICAg
ICAgIG1fc3R5bGUtPnJlZigpOworICAgICAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25l
KGVsZW1lbnRTdHlsZSk7CiAgICAgICAgIAogICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7
CiAgICAgICAgIApAQCAtMTI0MywxOCArMTIyOSwxNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
OmtleWZyYW1lU3R5bGVzRm9yCiAgICAgICAgICAgICBmbG9hdCBrZXkgPSBrZXlzW2tleUluZGV4
XTsKICAgICAgICAgICAgIGxpc3QuaW5zZXJ0KGtleSwgbV9zdHlsZSk7CiAgICAgICAgIH0KLSAg
ICAgICAgbV9zdHlsZS0+ZGVyZWYoZS0+ZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSk7CiAgICAg
ICAgIG1fc3R5bGUgPSAwOwogICAgIH0KICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMg
YSAwJSBhbmQgYSAxMDAlIGtleWZyYW1lCi0gICAgZmxvYXQgZmlyc3QgPSBsaXN0LmJlZ2luS2V5
ZnJhbWVzKCktPmtleTsKLSAgICBmbG9hdCBsYXN0ID0gKGxpc3QuZW5kS2V5ZnJhbWVzKCktMSkt
PmtleTsKKyAgICBmbG9hdCBmaXJzdCA9IGxpc3QuYmVnaW5LZXlmcmFtZXMoKS0+a2V5KCk7Cisg
ICAgZmxvYXQgbGFzdCA9IChsaXN0LmVuZEtleWZyYW1lcygpLTEpLT5rZXkoKTsKICAgICBpZiAo
Zmlyc3QgIT0gMCB8fCBsYXN0ICE9IDEpCiAgICAgICAgIGxpc3QuY2xlYXIoKTsKIH0KIAotUmVu
ZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChSZW5kZXJT
dHlsZTo6UHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHls
ZUZvckVsZW1lbnQoUmVuZGVyU3R5bGU6OlBzZXVkb0lkIHBzZXVkbywgRWxlbWVudCogZSwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGlmICghZSkKICAgICAgICAgcmV0dXJuIDA7
CkBAIC0xMjc4LDggKzEyNjMsNyBAQCBSZW5kZXJTdHlsZSogQ1NTU3R5bGVTZWxlY3Rvcjo6cHNl
dWRvU3R5CiAgICAgaWYgKG1fbWF0Y2hlZERlY2xzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgCi0gICAgbV9zdHlsZSA9IG5ldyAoZS0+ZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEo
KSkgUmVuZGVyU3R5bGUoKTsKLSAgICBtX3N0eWxlLT5yZWYoKTsKKyAgICBtX3N0eWxlID0gUmVu
ZGVyU3R5bGU6OmNyZWF0ZSgpOwogICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgbV9zdHls
ZS0+aW5oZXJpdEZyb20ocGFyZW50U3R5bGUpOwogCkBAIC0xMzE2LDEwICsxMzAwLDEwIEBAIFJl
bmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHkKICAgICBpZiAobV9mb250RGly
dHkpCiAgICAgICAgIHVwZGF0ZUZvbnQoKTsKICAgICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUgb2Jq
ZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBzKS4K
LSAgICBhZGp1c3RSZW5kZXJTdHlsZShtX3N0eWxlLCAwKTsKKyAgICBhZGp1c3RSZW5kZXJTdHls
ZShzdHlsZSgpLCAwKTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVy
biBtX3N0eWxlOworICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKIH0KIAogc3RhdGljIHZv
aWQgYWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSogc3R5bGUpCkBAIC0xNTE3LDggKzE1
MDEsOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxlCiB2b2lkIENT
U1N0eWxlU2VsZWN0b3I6OnVwZGF0ZUZvbnQoKQogewogICAgIGNoZWNrRm9yVGV4dFNpemVBZGp1
c3QoKTsKLSAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9zdHlsZSwgbV9wYXJlbnRT
dHlsZSk7Ci0gICAgY2hlY2tGb3Jab29tQ2hhbmdlKG1fc3R5bGUsIG1fcGFyZW50U3R5bGUpOwor
ICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlKTsK
KyAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSk7CiAgICAgbV9z
dHlsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CiAgICAgbV9mb250RGlydHkgPSBm
YWxzZTsKIH0KQEAgLTE1NzcsNyArMTU2MSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hl
Y2tTZWxlY3RvcihDU1MKICAgICBtX2R5bmFtaWNQc2V1ZG8gPSBSZW5kZXJTdHlsZTo6Tk9QU0VV
RE87CiAKICAgICAvLyBDaGVjayB0aGUgc2VsZWN0b3IKLSAgICBTZWxlY3Rvck1hdGNoIG1hdGNo
ID0gbV9jaGVja2VyLmNoZWNrU2VsZWN0b3Ioc2VsLCBtX2VsZW1lbnQsICZtX3NlbGVjdG9yQXR0
cnMsIG1fZHluYW1pY1BzZXVkbywgdHJ1ZSwgZmFsc2UsIG1fc3R5bGUsIG1fcGFyZW50U3R5bGUp
OworICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tTZWxlY3RvcihzZWws
IG1fZWxlbWVudCwgJm1fc2VsZWN0b3JBdHRycywgbV9keW5hbWljUHNldWRvLCB0cnVlLCBmYWxz
ZSwgc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSk7CiAgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yTWF0
Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zMTIyLDcgKzMxMDYsNyBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgIEhBTkRMRV9JTkhF
UklUX0FORF9JTklUSUFMKGhvcml6b250YWxCb3JkZXJTcGFjaW5nLCBIb3Jpem9udGFsQm9yZGVy
U3BhY2luZykKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgc2hvcnQgc3BhY2luZyA9ICBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0
aFNob3J0KG1fc3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICBzaG9ydCBzcGFjaW5nID0gIHBy
aW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoU2hvcnQoc3R5bGUoKSwgem9vbUZhY3Rvcik7CiAg
ICAgICAgIG1fc3R5bGUtPnNldEhvcml6b250YWxCb3JkZXJTcGFjaW5nKHNwYWNpbmcpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMzEzMCw3ICszMTE0LDcgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5J
VElBTCh2ZXJ0aWNhbEJvcmRlclNwYWNpbmcsIFZlcnRpY2FsQm9yZGVyU3BhY2luZykKICAgICAg
ICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc2hv
cnQgc3BhY2luZyA9ICBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aFNob3J0KG1fc3R5bGUs
IHpvb21GYWN0b3IpOworICAgICAgICBzaG9ydCBzcGFjaW5nID0gIHByaW1pdGl2ZVZhbHVlLT5j
b21wdXRlTGVuZ3RoU2hvcnQoc3R5bGUoKSwgem9vbUZhY3Rvcik7CiAgICAgICAgIG1fc3R5bGUt
PnNldFZlcnRpY2FsQm9yZGVyU3BhY2luZyhzcGFjaW5nKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTMzMDUsNyArMzI4OSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQKICAgICAgICAgICAgIHdpZHRoID0gNTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENTU1ZhbHVlSW52YWxpZDoKLSAgICAgICAgICAgIHdpZHRoID0gcHJpbWl0aXZl
VmFsdWUtPmNvbXB1dGVMZW5ndGhTaG9ydChtX3N0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAg
ICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhTaG9ydChzdHlsZSgpLCB6
b29tRmFjdG9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMzM1OCw3ICszMzQyLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjphcHBseVByb3BlcnR5KGludAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCFw
cmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB3aWR0
aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50KG1fc3R5bGUsIHpvb21GYWN0b3Ip
OworICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludChz
dHlsZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKGlkKSB7CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nOgpAQCAtMzUwMiw3ICszNDg2LDcg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAg
aW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpOwogICAgICAgICAgICAg
aWYgKHR5cGUgPiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgJiYgdHlwZSA8IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKQogICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBvdXIg
cXVpcmt5IG1hcmdpbiB1bml0cyBpZiB3ZSBoYXZlIHRoZW0uCi0gICAgICAgICAgICAgICAgbCA9
IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChtX3N0eWxl
LCB6b29tRmFjdG9yKSwgRml4ZWQsIAorICAgICAgICAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0
aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoc3R5bGUoKSwgem9vbUZhY3Rvciks
IEZpeGVkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVlLT5pc1F1
aXJrVmFsdWUoKSk7CiAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2
ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKQEAgLTM2MDIsNyArMzU4Niw3IEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlICYmICFhcHBseSkgewogICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdHlw
ZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCk7CiAgICAgICAgICAgICBpZiAodHlw
ZSA+IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiB0eXBlIDwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19ERUcpCi0gICAgICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChtX3N0eWxlLCB6b29tRmFjdG9yKSwgRml4
ZWQpOworICAgICAgICAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVM
ZW5ndGhJbnRGb3JMZW5ndGgoc3R5bGUoKSwgem9vbUZhY3RvciksIEZpeGVkKTsKICAgICAgICAg
ICAgIGVsc2UgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQog
ICAgICAgICAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVl
KCksIFBlcmNlbnQpOwogICAgICAgICAgICAgZWxzZQpAQCAtMzY1OCw3ICszNjQyLDcgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgIGludCB0eXBl
ID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKICAgICAgICAgICBMZW5ndGggbDsK
ICAgICAgICAgICBpZiAodHlwZSA+IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAm
JiB0eXBlIDwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcpCi0gICAgICAgICAgICBsID0gTGVu
Z3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKG1fc3R5bGUsIHpv
b21GYWN0b3IpLCBGaXhlZCk7CisgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIHpvb21GYWN0b3IpLCBGaXhlZCk7
CiAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UpCiAgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVW
YWx1ZSgpLCBQZXJjZW50KTsKIApAQCAtMzc4OCw3ICszNzcyLDcgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAgZG91YmxlIG11bHRpcGxpZXIg
PSBtX3N0eWxlLT5lZmZlY3RpdmVab29tKCk7CiAgICAgICAgICAgICBpZiAobV9zdHlsZS0+dGV4
dFNpemVBZGp1c3QoKSAmJiBtX2NoZWNrZXIubV9kb2N1bWVudC0+ZnJhbWUoKSAmJiBtX2NoZWNr
ZXIubV9kb2N1bWVudC0+ZnJhbWUoKS0+c2hvdWxkQXBwbHlUZXh0Wm9vbSgpKQogICAgICAgICAg
ICAgICAgIG11bHRpcGxpZXIgKj0gbV9jaGVja2VyLm1fZG9jdW1lbnQtPmZyYW1lKCktPnRleHRa
b29tRmFjdG9yKCk7Ci0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKHByaW1pdGl2ZVZh
bHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKG1fc3R5bGUsIG11bHRpcGxpZXIpLCBGaXhl
ZCk7CisgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21w
dXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIG11bHRpcGxpZXIpLCBGaXhlZCk7CiAgICAg
ICAgIH0gZWxzZSBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0Up
CiAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKChtX3N0eWxlLT5mb250U2l6ZSgpICog
cHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7CiAgICAgICAgIGVs
c2UgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCkBAIC0zODQzLDEw
ICszODI3LDEwIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAg
ICAgICAgICAgIFJlY3QqIHJlY3QgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UmVjdFZhbHVlKCk7CiAg
ICAgICAgICAgICBpZiAoIXJlY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgdG9wID0gY29udmVydFRvTGVuZ3RoKHJlY3QtPnRvcCgpLCBtX3N0eWxlKTsKLSAgICAgICAg
ICAgIHJpZ2h0ID0gY29udmVydFRvTGVuZ3RoKHJlY3QtPnJpZ2h0KCksIG1fc3R5bGUpOwotICAg
ICAgICAgICAgYm90dG9tID0gY29udmVydFRvTGVuZ3RoKHJlY3QtPmJvdHRvbSgpLCBtX3N0eWxl
KTsKLSAgICAgICAgICAgIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgocmVjdC0+bGVmdCgpLCBtX3N0
eWxlKTsKKyAgICAgICAgICAgIHRvcCA9IGNvbnZlcnRUb0xlbmd0aChyZWN0LT50b3AoKSwgc3R5
bGUoKSk7CisgICAgICAgICAgICByaWdodCA9IGNvbnZlcnRUb0xlbmd0aChyZWN0LT5yaWdodCgp
LCBzdHlsZSgpKTsKKyAgICAgICAgICAgIGJvdHRvbSA9IGNvbnZlcnRUb0xlbmd0aChyZWN0LT5i
b3R0b20oKSwgc3R5bGUoKSk7CisgICAgICAgICAgICBsZWZ0ID0gY29udmVydFRvTGVuZ3RoKHJl
Y3QtPmxlZnQoKSwgc3R5bGUoKSk7CiAKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSAhPSBDU1NWYWx1ZUF1dG8pIHsKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTM5MjcsMTAgKzM5MTEsMTAgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5
KGludAogICAgIH0KIAogICAgIGNhc2UgQ1NTUHJvcGVydHlDb3VudGVySW5jcmVtZW50OgotICAg
ICAgICBhcHBseUNvdW50ZXJMaXN0KG1fc3R5bGUsIHZhbHVlLT5pc1ZhbHVlTGlzdCgpID8gc3Rh
dGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpIDogMCwgZmFsc2UpOworICAgICAgICBhcHBs
eUNvdW50ZXJMaXN0KHN0eWxlKCksIHZhbHVlLT5pc1ZhbHVlTGlzdCgpID8gc3RhdGljX2Nhc3Q8
Q1NTVmFsdWVMaXN0Kj4odmFsdWUpIDogMCwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUNvdW50ZXJSZXNldDoKLSAgICAgICAgYXBwbHlDb3VudGVyTGlzdCht
X3N0eWxlLCB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSA/IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+
KHZhbHVlKSA6IDAsIHRydWUpOworICAgICAgICBhcHBseUNvdW50ZXJMaXN0KHN0eWxlKCksIHZh
bHVlLT5pc1ZhbHVlTGlzdCgpID8gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpIDog
MCwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmFt
aWx5OiB7CkBAIC00Mzk4LDggKzQzODIsOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5
UHJvcGVydHkoaW50CiAgICAgICAgIGlmICghcGFpcikKICAgICAgICAgICAgIHJldHVybjsKIAot
ICAgICAgICBpbnQgd2lkdGggPSBwYWlyLT5maXJzdCgpLT5jb21wdXRlTGVuZ3RoSW50KG1fc3R5
bGUsIHpvb21GYWN0b3IpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gcGFpci0+c2Vjb25kKCktPmNv
bXB1dGVMZW5ndGhJbnQobV9zdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgIGludCB3aWR0aCA9
IHBhaXItPmZpcnN0KCktPmNvbXB1dGVMZW5ndGhJbnQoc3R5bGUoKSwgem9vbUZhY3Rvcik7Cisg
ICAgICAgIGludCBoZWlnaHQgPSBwYWlyLT5zZWNvbmQoKS0+Y29tcHV0ZUxlbmd0aEludChzdHls
ZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQog
ICAgICAgICAgICAgcmV0dXJuOwogCkBAIC00NDMxLDcgKzQ0MTUsNyBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAKICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGlu
ZU9mZnNldDoKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwob3V0bGluZU9mZnNl
dCwgT3V0bGluZU9mZnNldCkKLSAgICAgICAgbV9zdHlsZS0+c2V0T3V0bGluZU9mZnNldChwcmlt
aXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludChtX3N0eWxlLCB6b29tRmFjdG9yKSk7CisgICAg
ICAgIG1fc3R5bGUtPnNldE91dGxpbmVPZmZzZXQocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5n
dGhJbnQoc3R5bGUoKSwgem9vbUZhY3RvcikpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNl
IENTU1Byb3BlcnR5VGV4dFNoYWRvdzoKQEAgLTQ0NTEsOSArNDQzNSw5IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgaW50IGxlbiA9IGxpc3QtPmxl
bmd0aCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAg
ICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4obGlzdC0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7Ci0gICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngt
PmNvbXB1dGVMZW5ndGhJbnQobV9zdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICBpbnQg
eSA9IGl0ZW0tPnktPmNvbXB1dGVMZW5ndGhJbnQobV9zdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAg
ICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3Ro
SW50KG1fc3R5bGUsIHpvb21GYWN0b3IpIDogMDsKKyAgICAgICAgICAgIGludCB4ID0gaXRlbS0+
eC0+Y29tcHV0ZUxlbmd0aEludChzdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGlu
dCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aEludChzdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAg
ICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5n
dGhJbnQoc3R5bGUoKSwgem9vbUZhY3RvcikgOiAwOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7
CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCiAgICAgICAgICAgICAgICAgY29sb3IgPSBn
ZXRDb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CkBAIC00NDc5LDcg
KzQ0NjMsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAg
ICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCiAg
ICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KExlbmd0aChyZWZsZWN0VmFsdWUt
Pm9mZnNldCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KSk7CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KExlbmd0aChyZWZsZWN0VmFs
dWUtPm9mZnNldCgpLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKG1fc3R5bGUsIHpvb21GYWN0
b3IpLCBGaXhlZCkpOworICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChMZW5n
dGgocmVmbGVjdFZhbHVlLT5vZmZzZXQoKS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChzdHls
ZSgpLCB6b29tRmFjdG9yKSwgRml4ZWQpKTsKICAgICAgICAgfQogICAgICAgICBOaW5lUGllY2VJ
bWFnZSBtYXNrOwogICAgICAgICBtYXBOaW5lUGllY2VJbWFnZShyZWZsZWN0VmFsdWUtPm1hc2so
KSwgbWFzayk7CkBAIC00NTg2LDcgKzQ1NzAsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFw
cGx5UHJvcGVydHkoaW50CiAgICAgICAgICAgICBtX3N0eWxlLT5zZXRIYXNOb3JtYWxDb2x1bW5H
YXAoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX3N0eWxlLT5z
ZXRDb2x1bW5HYXAocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhGbG9hdChtX3N0eWxlLCB6
b29tRmFjdG9yKSk7CisgICAgICAgIG1fc3R5bGUtPnNldENvbHVtbkdhcChwcmltaXRpdmVWYWx1
ZS0+Y29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKCksIHpvb21GYWN0b3IpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uV2lkdGg6IHsKQEAg
LTQ2MDAsNyArNDU4NCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShp
bnQKICAgICAgICAgICAgIG1fc3R5bGUtPnNldEhhc0F1dG9Db2x1bW5XaWR0aCgpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fc3R5bGUtPnNldENvbHVtbldpZHRo
KHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoRmxvYXQobV9zdHlsZSwgem9vbUZhY3Rvcikp
OworICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5XaWR0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0
ZUxlbmd0aEZsb2F0KHN0eWxlKCksIHpvb21GYWN0b3IpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZVN0eWxlOgpAQCAtNDcwNyw3
ICs0NjkxLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAg
ICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7Ci0gICAg
ICAgICAgICBMZW5ndGggbCA9IGNvbnZlcnRUb0xlbmd0aChwcmltaXRpdmVWYWx1ZSwgbV9zdHls
ZSwgJm9rKTsKKyAgICAgICAgICAgIExlbmd0aCBsID0gY29udmVydFRvTGVuZ3RoKHByaW1pdGl2
ZVZhbHVlLCBzdHlsZSgpLCAmb2spOwogICAgICAgICAgICAgaWYgKG9rKQogICAgICAgICAgICAg
ICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQobCk7CiAgICAgICAgIH0KQEAgLTQ4MzAs
MTAgKzQ4MTQsMTAgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAog
ICAgICAgICAgICAgCiAgICAgICAgIERhc2hib2FyZFJlZ2lvbiAqZmlyc3QgPSByZWdpb247CiAg
ICAgICAgIHdoaWxlIChyZWdpb24pIHsKLSAgICAgICAgICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0
VG9MZW5ndGggKHJlZ2lvbi0+dG9wKCksIG1fc3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIHJp
Z2h0ID0gY29udmVydFRvTGVuZ3RoIChyZWdpb24tPnJpZ2h0KCksIG1fc3R5bGUpOwotICAgICAg
ICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0xlbmd0aCAocmVnaW9uLT5ib3R0b20oKSwg
bV9zdHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0xlbmd0aCAocmVn
aW9uLT5sZWZ0KCksIG1fc3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRU
b0xlbmd0aChyZWdpb24tPnRvcCgpLCBzdHlsZSgpKTsKKyAgICAgICAgICAgIExlbmd0aCByaWdo
dCA9IGNvbnZlcnRUb0xlbmd0aChyZWdpb24tPnJpZ2h0KCksIHN0eWxlKCkpOworICAgICAgICAg
ICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0xlbmd0aChyZWdpb24tPmJvdHRvbSgpLCBzdHls
ZSgpKTsKKyAgICAgICAgICAgIExlbmd0aCBsZWZ0ID0gY29udmVydFRvTGVuZ3RoKHJlZ2lvbi0+
bGVmdCgpLCBzdHlsZSgpKTsKICAgICAgICAgICAgIGlmIChyZWdpb24tPm1faXNDaXJjbGUpCiAg
ICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJk
UmVnaW9uOjpDaXJjbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0
LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwogICAgICAgICAgICAgZWxzZSBpZiAo
cmVnaW9uLT5tX2lzUmVjdGFuZ2xlKQpAQCAtNDg2NCwxMSArNDg0OCwxMSBAQCB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCAqPSAzOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlVGhpY2spCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAqPSA1Owot
ICAgICAgICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0aEZsb2F0KG1fc3R5bGUs
IHpvb21GYWN0b3IpOworICAgICAgICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0
aEZsb2F0KHN0eWxlKCksIHpvb21GYWN0b3IpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB3aWR0aCA9
IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoRmxvYXQobV9zdHlsZSwgem9vbUZhY3Rvcik7
CisgICAgICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEZs
b2F0KHN0eWxlKCksIHpvb21GYWN0b3IpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIG1fc3R5bGUtPnNldFRleHRTdHJva2VXaWR0aCh3aWR0aCk7CkBAIC00ODc3
LDcgKzQ4NjEsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybTogewogICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTCh0cmFuc2Zvcm0sIFRyYW5zZm9ybSk7CiAgICAgICAgIFRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9u
cyh2YWx1ZSwgbV9zdHlsZSwgb3BlcmF0aW9ucyk7CisgICAgICAgIGNyZWF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbnModmFsdWUsIHN0eWxlKCksIG9wZXJhdGlvbnMpOwogICAgICAgICBtX3N0eWxlLT5z
ZXRUcmFuc2Zvcm0ob3BlcmF0aW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00ODkx
LDcgKzQ4NzUsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAg
ICAgICAgIExlbmd0aCBsOwogICAgICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmlt
aXRpdmVUeXBlKCk7CiAgICAgICAgIGlmICh0eXBlID4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
RVJDRU5UQUdFICYmIHR5cGUgPCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRykKLSAgICAgICAg
ICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgo
bV9zdHlsZSwgem9vbUZhY3RvciksIEZpeGVkKTsKKyAgICAgICAgICAgIGwgPSBMZW5ndGgocHJp
bWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoc3R5bGUoKSwgem9vbUZhY3Rv
ciksIEZpeGVkKTsKICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BFUkNFTlRBR0UpCiAgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5n
ZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKICAgICAgICAgZWxzZQpAQCAtNDkwNSw3ICs0ODg5
LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICBM
ZW5ndGggbDsKICAgICAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlw
ZSgpOwogICAgICAgICBpZiAodHlwZSA+IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFH
RSAmJiB0eXBlIDwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcpCi0gICAgICAgICAgICBsID0g
TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKG1fc3R5bGUs
IHpvb21GYWN0b3IpLCBGaXhlZCk7CisgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZh
bHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIHpvb21GYWN0b3IpLCBGaXhl
ZCk7CiAgICAgICAgIGVsc2UgaWYodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UpCiAgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVW
YWx1ZSgpLCBQZXJjZW50KTsKICAgICAgICAgZWxzZQpAQCAtNTEzMCw3ICs1MTE0LDcgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsU2l6ZShGaWxsTAogICAgIGlmIChmaXJzdFR5cGUg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOKQogICAgICAgICBmaXJzdExlbmd0aCA9
IExlbmd0aChBdXRvKTsKICAgICBlbHNlIGlmIChmaXJzdFR5cGUgPiBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0UgJiYgZmlyc3RUeXBlIDwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19E
RUcpCi0gICAgICAgIGZpcnN0TGVuZ3RoID0gTGVuZ3RoKGZpcnN0LT5jb21wdXRlTGVuZ3RoSW50
Rm9yTGVuZ3RoKG1fc3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCk7CisgICAgICAgIGZpcnN0TGVu
Z3RoID0gTGVuZ3RoKGZpcnN0LT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIHpv
b21GYWN0b3IpLCBGaXhlZCk7CiAgICAgZWxzZSBpZiAoZmlyc3RUeXBlID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgZmlyc3RMZW5ndGggPSBMZW5ndGgoZmly
c3QtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwogICAgIGVsc2UKQEAgLTUxMzksNyArNTEy
Myw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFNpemUoRmlsbEwKICAgICBpZiAo
c2Vjb25kVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOS05PV04pCiAgICAgICAgIHNl
Y29uZExlbmd0aCA9IExlbmd0aChBdXRvKTsKICAgICBlbHNlIGlmIChzZWNvbmRUeXBlID4gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFICYmIHNlY29uZFR5cGUgPCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0RFRykKLSAgICAgICAgc2Vjb25kTGVuZ3RoID0gTGVuZ3RoKHNlY29uZC0+
Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChtX3N0eWxlLCB6b29tRmFjdG9yKSwgRml4ZWQpOwor
ICAgICAgICBzZWNvbmRMZW5ndGggPSBMZW5ndGgoc2Vjb25kLT5jb21wdXRlTGVuZ3RoSW50Rm9y
TGVuZ3RoKHN0eWxlKCksIHpvb21GYWN0b3IpLCBGaXhlZCk7CiAgICAgZWxzZSBpZiAoc2Vjb25k
VHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCiAgICAgICAgIHNlY29u
ZExlbmd0aCA9IExlbmd0aChzZWNvbmQtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwogICAg
IGVsc2UKQEAgLTUxNjYsNyArNTE1MCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmls
bFhQb3NpdGlvbigKICAgICBMZW5ndGggbDsKICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVl
LT5wcmltaXRpdmVUeXBlKCk7CiAgICAgaWYgKHR5cGUgPiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1BFUkNFTlRBR0UgJiYgdHlwZSA8IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKQotICAgICAg
ICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKG1f
c3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCk7CisgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZl
VmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoc3R5bGUoKSwgem9vbUZhY3RvciksIEZp
eGVkKTsKICAgICBlbHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VO
VEFHRSkKICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KSwgUGVyY2VudCk7CiAgICAgZWxzZQpAQCAtNTE5MCw3ICs1MTc0LDcgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjptYXBGaWxsWVBvc2l0aW9uKAogICAgIExlbmd0aCBsOwogICAgIGludCB0eXBl
ID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKICAgICBpZiAodHlwZSA+IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiB0eXBlIDwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19ERUcpCi0gICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5n
dGhJbnRGb3JMZW5ndGgobV9zdHlsZSwgem9vbUZhY3RvciksIEZpeGVkKTsKKyAgICAgICAgbCA9
IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChzdHlsZSgp
LCB6b29tRmFjdG9yKSwgRml4ZWQpOwogICAgIGVsc2UgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QRVJDRU5UQUdFKQogICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVl
LT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKICAgICBlbHNlCkluZGV4OiBjc3MvQ1NTU3R5
bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJldmlz
aW9uIDM3NTg2KQorKysgY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
ODMsMTYgKzgzLDE4IEBAIHB1YmxpYzoKIAogICAgICAgICB2b2lkIGluaXRFbGVtZW50QW5kUHNl
dWRvU3RhdGUoRWxlbWVudCopOwogICAgICAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxl
bWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFJlbmRlclN0eWxlOjpQc2V1ZG9J
ZCA9IFJlbmRlclN0eWxlOjpOT1BTRVVETyk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZUZv
ckVsZW1lbnQoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIGJvb2wgYWxs
b3dTaGFyaW5nID0gdHJ1ZSwgYm9vbCByZXNvbHZlRm9yUm9vdERlZmF1bHQgPSBmYWxzZSk7Cisg
ICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50Kiwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9vbCBhbGxvd1NoYXJpbmcgPSB0cnVlLCBi
b29sIHJlc29sdmVGb3JSb290RGVmYXVsdCA9IGZhbHNlKTsKICAgICAgICAgdm9pZCBrZXlmcmFt
ZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBLZXlmcmFt
ZUxpc3QmIGxpc3QpOwogCi0gICAgICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZUZvckVsZW1l
bnQoUmVuZGVyU3R5bGU6OlBzZXVkb0lkLCBFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gMCk7CisgICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHBzZXVkb1N0eWxlRm9y
RWxlbWVudChSZW5kZXJTdHlsZTo6UHNldWRvSWQsIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSAwKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlbmRlclN0eWxlKiBsb2Nh
dGVTaGFyZWRTdHlsZSgpOwogICAgICAgICBOb2RlKiBsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQq
IHBhcmVudCwgdW5zaWduZWQgZGVwdGggPSAxKTsKICAgICAgICAgYm9vbCBjYW5TaGFyZVN0eWxl
V2l0aEVsZW1lbnQoTm9kZSopOwogCisgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KKwogICAgIHB1YmxpYzoKICAgICAgICAgLy8gVGhl
c2UgbWV0aG9kcyB3aWxsIGdpdmUgYmFjayB0aGUgc2V0IG9mIHJ1bGVzIHRoYXQgbWF0Y2hlZCBm
b3IgYSBnaXZlbiBlbGVtZW50IChvciBhIHBzZXVkby1lbGVtZW50KS4KICAgICAgICAgUGFzc1Jl
ZlB0cjxDU1NSdWxlTGlzdD4gc3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCosIGJvb2wgYXV0
aG9yT25seSk7CkBAIC0yNDksMTMgKzI1MSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIFJlZlB0cjxD
U1NSdWxlTGlzdD4gbV9ydWxlTGlzdDsKIAogICAgICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yKiBt
X21lZGl1bTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIG1fcm9vdERlZmF1bHRTdHlsZTsKKyAgICAg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3Jvb3REZWZhdWx0U3R5bGU7CiAKICAgICAgICAgUmVu
ZGVyU3R5bGU6OlBzZXVkb0lkIG1fZHluYW1pY1BzZXVkbzsKIAogICAgICAgICBTZWxlY3RvckNo
ZWNrZXIgbV9jaGVja2VyOwogCi0gICAgICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOworICAgICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBtX3Bh
cmVudFN0eWxlOwogICAgICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7CiAgICAgICAgIFN0eWxlZEVs
ZW1lbnQqIG1fc3R5bGVkRWxlbWVudDsKSW5kZXg6IGRvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzc1OTEpCisrKyBkb20vRG9jdW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTI5LDIyICsxMTI5LDE4IEBAIHZvaWQgRG9jdW1lbnQ6
OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGMKICAgICAgICAgLy8gc3R5bGUgc2VsZWN0b3IgbWF5
IHNldCB0aGlzIGFnYWluIGR1cmluZyByZWNhbGMKICAgICAgICAgbV9oYXNOb2Rlc1dpdGhQbGFj
ZWhvbGRlclN0eWxlID0gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBSZW5kZXJTdHlsZSogb2xk
U3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOwotICAgICAgICBpZiAob2xkU3R5bGUpCi0gICAg
ICAgICAgICBvbGRTdHlsZS0+cmVmKCk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBfc3R5bGUgPSBu
ZXcgKG1fcmVuZGVyQXJlbmEpIFJlbmRlclN0eWxlKCk7Ci0gICAgICAgIF9zdHlsZS0+cmVmKCk7
Ci0gICAgICAgIF9zdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Ci0gICAgICAgIF9zdHlsZS0+c2V0
VmlzdWFsbHlPcmRlcmVkKHZpc3VhbGx5T3JkZXJlZCk7Ci0gICAgICAgIF9zdHlsZS0+c2V0Wm9v
bShmcmFtZSgpLT5wYWdlWm9vbUZhY3RvcigpKTsKLSAgICAgICAgbV9zdHlsZVNlbGVjdG9yLT5z
ZXRTdHlsZShfc3R5bGUpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGRvY3VtZW50U3R5
bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldERp
c3BsYXkoQkxPQ0spOworICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRWaXN1YWxseU9yZGVyZWQo
dmlzdWFsbHlPcmRlcmVkKTsKKyAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0Wm9vbShmcmFtZSgp
LT5wYWdlWm9vbUZhY3RvcigpKTsKKyAgICAgICAgbV9zdHlsZVNlbGVjdG9yLT5zZXRTdHlsZShk
b2N1bWVudFN0eWxlLmdldCgpKTsKICAgICAKICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbjsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KHBy
aW50aW5nKCkpOwogICAgICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gdGhpcy0+c2V0dGlu
Z3MoKSkgewogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0
dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOwogICAgICAgICAgICAgaWYgKHByaW50aW5nKCkg
JiYgIXNldHRpbmdzLT5zaG91bGRQcmludEJhY2tncm91bmRzKCkpCi0gICAgICAgICAgICAgICAg
X3N0eWxlLT5zZXRGb3JjZUJhY2tncm91bmRzVG9XaGl0ZSh0cnVlKTsKKyAgICAgICAgICAgICAg
ICBkb2N1bWVudFN0eWxlLT5zZXRGb3JjZUJhY2tncm91bmRzVG9XaGl0ZSh0cnVlKTsKICAgICAg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3RkZm9udCA9IHNldHRpbmdzLT5zdGFuZGFyZEZv
bnRGYW1pbHkoKTsKICAgICAgICAgICAgIGlmICghc3RkZm9udC5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoc3RkZm9u
dCk7CkBAIC0xMTU0LDIwICsxMTUwLDE2IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0eWxlKFN0
eWxlQ2hhbmdlIGMKICAgICAgICAgICAgIG1fc3R5bGVTZWxlY3Rvci0+c2V0Rm9udFNpemUoZm9u
dERlc2NyaXB0aW9uLCBtX3N0eWxlU2VsZWN0b3ItPmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1
ZU1lZGl1bSwgaW5Db21wYXRNb2RlKCksIGZhbHNlKSk7CiAgICAgICAgIH0KIAotICAgICAgICBf
c3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICBfc3R5
bGUtPmZvbnQoKS51cGRhdGUobV9zdHlsZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKSk7CisgICAg
ICAgIGRvY3VtZW50U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwor
ICAgICAgICBkb2N1bWVudFN0eWxlLT5mb250KCkudXBkYXRlKG1fc3R5bGVTZWxlY3Rvci0+Zm9u
dFNlbGVjdG9yKCkpOwogICAgICAgICBpZiAoaW5Db21wYXRNb2RlKCkpCi0gICAgICAgICAgICBf
c3R5bGUtPnNldEh0bWxIYWNrcyh0cnVlKTsgLy8gZW5hYmxlIGh0bWwgc3BlY2lmaWMgcmVuZGVy
aW5nIHRyaWNrcworICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0SHRtbEhhY2tzKHRydWUp
OyAvLyBlbmFibGUgaHRtbCBzcGVjaWZpYyByZW5kZXJpbmcgdHJpY2tzCiAKLSAgICAgICAgU3R5
bGVDaGFuZ2UgY2ggPSBkaWZmKF9zdHlsZSwgb2xkU3R5bGUpOworICAgICAgICBTdHlsZUNoYW5n
ZSBjaCA9IGRpZmYoZG9jdW1lbnRTdHlsZS5nZXQoKSwgcmVuZGVyZXIoKS0+c3R5bGUoKSk7CiAg
ICAgICAgIGlmIChyZW5kZXJlcigpICYmIGNoICE9IE5vQ2hhbmdlKQotICAgICAgICAgICAgcmVu
ZGVyZXIoKS0+c2V0U3R5bGUoX3N0eWxlKTsKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldFN0
eWxlKGRvY3VtZW50U3R5bGUuZ2V0KCkpOwogICAgICAgICBpZiAoY2hhbmdlICE9IEZvcmNlKQog
ICAgICAgICAgICAgY2hhbmdlID0gY2g7Ci0KLSAgICAgICAgX3N0eWxlLT5kZXJlZihtX3JlbmRl
ckFyZW5hKTsKLSAgICAgICAgaWYgKG9sZFN0eWxlKQotICAgICAgICAgICAgb2xkU3R5bGUtPmRl
cmVmKG1fcmVuZGVyQXJlbmEpOwogICAgIH0KIAogICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Q2hp
bGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCkluZGV4OiBkb20vRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIGRvbS9FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA5LDcgKzYwOSw3IEBAIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIEVsZW1lbnQ6OmltYWdlU291cmMKICAgICByZXR1cm4gc3JjQXR0cjsKIH0KIAotUmVu
ZGVyU3R5bGUqIEVsZW1lbnQ6OnN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBwYXJlbnRS
ZW5kZXJlcikKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IEVsZW1lbnQ6OnN0eWxlRm9yUmVuZGVy
ZXIoUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlcikKIHsKICAgICByZXR1cm4gZG9jdW1lbnQo
KS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQodGhpcyk7CiB9CkBAIC02OTQsMTcg
KzY5NCwxNSBAQCB2b2lkIEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoCiAgICAg
ICAgICAgICByYXJlRGF0YSgpLT5yZXNldENvbXB1dGVkU3R5bGUodGhpcyk7CiAgICAgfQogICAg
IGlmIChoYXNQYXJlbnRTdHlsZSAmJiAoY2hhbmdlID49IEluaGVyaXQgfHwgY2hhbmdlZCgpKSkg
ewotICAgICAgICBSZW5kZXJTdHlsZSAqbmV3U3R5bGUgPSBkb2N1bWVudCgpLT5zdHlsZVNlbGVj
dG9yKCktPnN0eWxlRm9yRWxlbWVudCh0aGlzKTsKLSAgICAgICAgU3R5bGVDaGFuZ2UgY2ggPSBk
aWZmKGN1cnJlbnRTdHlsZSwgbmV3U3R5bGUpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IG5ld1N0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQo
dGhpcyk7CisgICAgICAgIFN0eWxlQ2hhbmdlIGNoID0gZGlmZihjdXJyZW50U3R5bGUsIG5ld1N0
eWxlLmdldCgpKTsKICAgICAgICAgaWYgKGNoID09IERldGFjaCB8fCAhY3VycmVudFN0eWxlKSB7
CiAgICAgICAgICAgICBpZiAoYXR0YWNoZWQoKSkKICAgICAgICAgICAgICAgICBkZXRhY2goKTsK
LSAgICAgICAgICAgIC8vICMjIyBTdWJvcHRpbWFsLiBTdHlsZSBnZXRzIGNhbGN1bGF0ZWQgYWdh
aW4uCi0gICAgICAgICAgICBhdHRhY2goKTsKKyAgICAgICAgICAgIGF0dGFjaCgpOyAvLyBGSVhN
RTogVGhlIHN0eWxlIGdldHMgY29tcHV0ZWQgdHdpY2UgYnkgY2FsbGluZyBhdHRhY2guIFdlIGNv
dWxkIGRvIGJldHRlciBpZiB3ZSBwYXNzZWQgdGhlIHN0eWxlIGFsb25nLgogICAgICAgICAgICAg
Ly8gYXR0YWNoIHJlY2FsdWxhdGVzIHRoZSBzdHlsZSBmb3IgYWxsIGNoaWxkcmVuLiBObyBuZWVk
IHRvIGRvIGl0IHR3aWNlLgogICAgICAgICAgICAgc2V0Q2hhbmdlZChOb1N0eWxlQ2hhbmdlKTsK
ICAgICAgICAgICAgIHNldEhhc0NoYW5nZWRDaGlsZChmYWxzZSk7Ci0gICAgICAgICAgICBuZXdT
dHlsZS0+ZGVyZWYoZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIApAQCAtNzM3LDE0ICs3MzUsMTIgQEAgdm9pZCBFbGVtZW50OjpyZWNh
bGNTdHlsZShTdHlsZUNoYW5nZSBjaAogICAgICAgICAgICAgLy8gc2libGluZy9kZXNjZW5kYW50
IHJ1bGVzLCBzaW5jZSBvdGhlcndpc2UgaXQgaXNuJ3QgcG9zc2libGUgZm9yIGFuY2VzdG9yIHN0
eWxlcyB0byBhZmZlY3Qgc2hhcmluZyBvZgogICAgICAgICAgICAgLy8gZGVzY2VuZGFudHMuCiAg
ICAgICAgICAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5z
ZXRTdHlsZUludGVybmFsKG5ld1N0eWxlKTsKKyAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5z
ZXRTdHlsZUludGVybmFsKG5ld1N0eWxlLmdldCgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBzZXRSZW5kZXJTdHlsZShuZXdTdHlsZSk7CiAgICAgICAgIH0gZWxzZSBpZiAo
c3R5bGVDaGFuZ2VUeXBlKCkgPT0gQW5pbWF0aW9uU3R5bGVDaGFuZ2UpCiAgICAgICAgICAgICAg
c2V0UmVuZGVyU3R5bGUobmV3U3R5bGUpOwogCi0gICAgICAgIG5ld1N0eWxlLT5kZXJlZihkb2N1
bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKLQogICAgICAgICBpZiAoY2hhbmdlICE9IEZvcmNlKSB7
CiAgICAgICAgICAgICBpZiAoKGRvY3VtZW50KCktPnVzZXNEZXNjZW5kYW50UnVsZXMoKSB8fCBo
YXNQb3NpdGlvbmFsUnVsZXMpICYmIHN0eWxlQ2hhbmdlVHlwZSgpID49IEZ1bGxTdHlsZUNoYW5n
ZSkKICAgICAgICAgICAgICAgICBjaGFuZ2UgPSBGb3JjZTsKQEAgLTExODgsNyArMTE4NCw3IEBA
IFJlbmRlclN0eWxlKiBFbGVtZW50Ojpjb21wdXRlZFN0eWxlKCkKICAgICBFbGVtZW50UmFyZURh
dGEqIGRhdGEgPSBlbnN1cmVSYXJlRGF0YSgpOwogICAgIGlmICghZGF0YS0+bV9jb21wdXRlZFN0
eWxlKQogICAgICAgICBkYXRhLT5tX2NvbXB1dGVkU3R5bGUgPSBkb2N1bWVudCgpLT5zdHlsZVNl
bGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudCh0aGlzLCBwYXJlbnQoKSA/IHBhcmVudCgpLT5jb21w
dXRlZFN0eWxlKCkgOiAwKTsKLSAgICByZXR1cm4gZGF0YS0+bV9jb21wdXRlZFN0eWxlOworICAg
IHJldHVybiBkYXRhLT5tX2NvbXB1dGVkU3R5bGUuZ2V0KCk7CiB9CiAKIHZvaWQgRWxlbWVudDo6
Y2FuY2VsRm9jdXNBcHBlYXJhbmNlVXBkYXRlKCkKSW5kZXg6IGRvbS9FbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gZG9tL0VsZW1lbnQuaAkocmV2aXNpb24gMzc1ODYpCisrKyBkb20vRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNyArMTQwLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKLSAgICBSZW5kZXJT
dHlsZSogc3R5bGVGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHBhcmVudCk7CisgICAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHBhcmVudCk7
CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwg
UmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2Ug
PSBOb0NoYW5nZSk7CiAKSW5kZXg6IGRvbS9FbGVtZW50UmFyZURhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBkb20vRWxlbWVudFJhcmVEYXRhLmgJKHJldmlzaW9uIDM3NTg2KQorKysgZG9tL0VsZW1lbnRS
YXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHJlc2V0Q29tcHV0ZWRTdHlsZShFbGVtZW50Kik7CiAKICAgICBJbnRTaXplIG1fbWluaW11
bVNpemVGb3JSZXNpemluZzsKLSAgICBSZW5kZXJTdHlsZSogbV9jb21wdXRlZFN0eWxlOworICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9jb21wdXRlZFN0eWxlOwogfTsKIAogaW5saW5lIEludFNp
emUgZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKQpAQCAtNDQsNyArNDQsNiBAQCBpbmxp
bmUgSW50U2l6ZSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpCiAKIGlubGluZSBFbGVtZW50UmFy
ZURhdGE6OkVsZW1lbnRSYXJlRGF0YShFbGVtZW50KiBlKQogICAgIDogbV9taW5pbXVtU2l6ZUZv
clJlc2l6aW5nKGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkpCi0gICAgLCBtX2NvbXB1
dGVkU3R5bGUoMCkKIHsKIH0KIApAQCAtNTIsNyArNTEsNiBAQCBpbmxpbmUgdm9pZCBFbGVtZW50
UmFyZURhdGE6OnJlc2V0Q29tcHV0CiB7CiAgICAgaWYgKCFtX2NvbXB1dGVkU3R5bGUpCiAgICAg
ICAgIHJldHVybjsKLSAgICBtX2NvbXB1dGVkU3R5bGUtPmRlcmVmKGVsZW1lbnQtPmRvY3VtZW50
KCktPnJlbmRlckFyZW5hKCkpOwogICAgIG1fY29tcHV0ZWRTdHlsZSA9IDA7CiB9CiAKSW5kZXg6
IGRvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vTm9kZS5jcHAJKHJldmlzaW9uIDM3NTg2
KQorKysgZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMjAgKzExNSwyMCBAQCBO
b2RlOjpTdHlsZUNoYW5nZSBOb2RlOjpkaWZmKCBSZW5kZXJTdHlsCiAgICAgLy8gSWYgdGhlIHBz
ZXVkb1N0eWxlcyBoYXZlIGNoYW5nZWQsIHdlIHdhbnQgYW55IFN0eWxlQ2hhbmdlIHRoYXQgaXMg
bm90IE5vQ2hhbmdlCiAgICAgLy8gYmVjYXVzZSBzZXRTdHlsZSB3aWxsIGRvIHRoZSByaWdodCB0
aGluZyB3aXRoIGFueXRoaW5nIGVsc2UuCiAgICAgaWYgKGNoID09IE5vQ2hhbmdlICYmIHMxLT5o
YXNQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6QkVGT1JFKSkgewotICAgICAgICBSZW5kZXJTdHls
ZSogcHMyID0gczItPmdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpCRUZPUkUpOworICAgICAg
ICBSZW5kZXJTdHlsZSogcHMyID0gczItPmdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxl
OjpCRUZPUkUpOwogICAgICAgICBpZiAoIXBzMikKICAgICAgICAgICAgIGNoID0gTm9Jbmhlcml0
OwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwczEgPSBzMS0+Z2V0
UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkJFRk9SRSk7CisgICAgICAgICAgICBSZW5kZXJTdHls
ZSogcHMxID0gczEtPmdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpCRUZPUkUpOwog
ICAgICAgICAgICAgY2ggPSBwczEgJiYgKnBzMSA9PSAqcHMyID8gTm9DaGFuZ2UgOiBOb0luaGVy
aXQ7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGNoID09IE5vQ2hhbmdlICYmIHMxLT5oYXNQ
c2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6QUZURVIpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBw
czIgPSBzMi0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkFGVEVSKTsKKyAgICAgICAgUmVu
ZGVyU3R5bGUqIHBzMiA9IHMyLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6QUZU
RVIpOwogICAgICAgICBpZiAoIXBzMikKICAgICAgICAgICAgIGNoID0gTm9Jbmhlcml0OwogICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwczEgPSBzMS0+Z2V0UHNldWRv
U3R5bGUoUmVuZGVyU3R5bGU6OkFGVEVSKTsKKyAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwczEg
PSBzMS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkFGVEVSKTsKICAgICAgICAg
ICAgIGNoID0gcHMyICYmICpwczEgPT0gKnBzMiA/IE5vQ2hhbmdlIDogTm9Jbmhlcml0OwogICAg
ICAgICB9CiAgICAgfQpAQCAtMTAyOCwxMCArMTAyOCwxMCBAQCB2b2lkIE5vZGU6OmNyZWF0ZVJl
bmRlcmVySWZOZWVkZWQoKQogICAgICAgICAmJiBwYXJlbnQtPmNoaWxkU2hvdWxkQ3JlYXRlUmVu
ZGVyZXIodGhpcykKICNlbmRpZgogICAgICAgICApIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gc3R5bGVGb3JSZW5kZXJlcihwYXJlbnRSZW5kZXJlcik7Ci0gICAgICAgIGlmIChyZW5k
ZXJlcklzTmVlZGVkKHN0eWxlKSkgewotICAgICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogciA9
IGNyZWF0ZVJlbmRlcmVyKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCksIHN0eWxlKSkgewotICAg
ICAgICAgICAgICAgIGlmICghcGFyZW50UmVuZGVyZXItPmlzQ2hpbGRBbGxvd2VkKHIsIHN0eWxl
KSkKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHN0eWxlRm9yUmVuZGVyZXIo
cGFyZW50UmVuZGVyZXIpOworICAgICAgICBpZiAocmVuZGVyZXJJc05lZWRlZChzdHlsZS5nZXQo
KSkpIHsKKyAgICAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHIgPSBjcmVhdGVSZW5kZXJlcihk
b2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpLCBzdHlsZS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIXBhcmVudFJlbmRlcmVyLT5pc0NoaWxkQWxsb3dlZChyLCBzdHlsZS5nZXQoKSkpCiAg
ICAgICAgICAgICAgICAgICAgIHItPmRlc3Ryb3koKTsKICAgICAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgc2V0UmVuZGVyZXIocik7CkBAIC0xMDQwLDE3ICsxMDQwLDE0
IEBAIHZvaWQgTm9kZTo6Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCgpCiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHN0eWxlLT5kZXJlZihkb2N1bWVu
dCgpLT5yZW5kZXJBcmVuYSgpKTsKICAgICB9CiB9CiAKLVJlbmRlclN0eWxlKiBOb2RlOjpzdHls
ZUZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcGFyZW50KQorUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gTm9kZTo6c3R5bGVGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHBhcmVudCkKIHsKICAgICBp
ZiAoaXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gZG9jdW1lbnQoKS0+c3R5bGVTZWxl
Y3RvcigpLT5zdHlsZUZvckVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHRoaXMpKTsKLSAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSBwYXJlbnQtPnN0eWxlKCk7Ci0gICAgc3R5bGUtPnJlZigp
OwotICAgIHJldHVybiBzdHlsZTsKKyAgICByZXR1cm4gcGFyZW50LT5zdHlsZSgpOwogfQogCiBi
b29sIE5vZGU6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKQpAQCAtMTA2OSw3
ICsxMDY2LDcgQEAgUmVuZGVyU3R5bGUqIE5vZGU6Om5vblJlbmRlcmVyUmVuZGVyU3R5bAogICAg
IHJldHVybiAwOyAKIH0gICAKIAotdm9pZCBOb2RlOjpzZXRSZW5kZXJTdHlsZShSZW5kZXJTdHls
ZSogcykKK3ZvaWQgTm9kZTo6c2V0UmVuZGVyU3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
cykKIHsKICAgICBpZiAobV9yZW5kZXJlcikKICAgICAgICAgbV9yZW5kZXJlci0+c2V0QW5pbWF0
YWJsZVN0eWxlKHMpOyAKSW5kZXg6IGRvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL05vZGUu
aAkocmV2aXNpb24gMzc1ODYpCisrKyBkb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDgs
NyArNDA4LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmUoKTsKICAg
ICB2b2lkIGNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGVG
b3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHBhcmVudCk7CisgICAgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gc3R5bGVGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHBhcmVudCk7CiAgICAgdmlydHVh
bCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKICNpZiBFTkFCTEUoU1ZHKQog
ICAgIHZpcnR1YWwgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CkBAIC00MTcsNyArNDE3LDcgQEAgcHVibGljOgogICAgIAogICAgIC8v
IFdyYXBwZXIgZm9yIG5vZGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIHJlbmRlcmVyLCBidXQgc3RpbGwg
Y2FjaGUgdGhlIHN0eWxlIChsaWtlIEhUTUxPcHRpb25FbGVtZW50KS4KICAgICBSZW5kZXJTdHls
ZSogcmVuZGVyU3R5bGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVuZGVyU3R5bGUo
UmVuZGVyU3R5bGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVuZGVyU3R5bGUoUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4pOwogCiAgICAgdmlydHVhbCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHls
ZSgpOwogCkluZGV4OiBodG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAzNzU4NikK
KysrIGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE4MSwyMSArMTE4MSwxNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9u
dChjCiAgICAgCiAgICAgLy8gTWFwIHRoZSA8Y2FudmFzPiBmb250IGludG8gdGhlIHRleHQgc3R5
bGUuIElmIHRoZSBmb250IHVzZXMga2V5d29yZHMgbGlrZSBsYXJnZXIvc21hbGxlciwgdGhlc2Ug
d2lsbCB3b3JrCiAgICAgLy8gcmVsYXRpdmUgdG8gdGhlIGNhbnZhcy4KLSAgICBSZW5kZXJBcmVu
YSogYXJlbmEgPSBtX2NhbnZhcy0+ZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKTsKLSAgICBSZW5k
ZXJTdHlsZSogbmV3U3R5bGUgPSBuZXcgKGFyZW5hKSBSZW5kZXJTdHlsZSgpOwotICAgIG5ld1N0
eWxlLT5yZWYoKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5
bGU6OmNyZWF0ZSgpOwogICAgIGlmIChtX2NhbnZhcy0+Y29tcHV0ZWRTdHlsZSgpKQogICAgICAg
ICBuZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG1fY2FudmFzLT5jb21wdXRlZFN0eWxlKCkt
PmZvbnREZXNjcmlwdGlvbigpKTsKIAogICAgIC8vIE5vdyBtYXAgdGhlIGZvbnQgcHJvcGVydHkg
aW50byB0aGUgc3R5bGUuCiAgICAgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvciA9IG1f
Y2FudmFzLT5kb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7Ci0gICAgc3R5bGVTZWxlY3Rvci0+
YXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlGb250LCB0ZW1wRGVjbC0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnQpLmdldCgpLCBuZXdTdHlsZSk7CisgICAgc3R5bGVT
ZWxlY3Rvci0+YXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlGb250LCB0ZW1wRGVjbC0+
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnQpLmdldCgpLCBuZXdTdHlsZS5nZXQo
KSk7CiAgICAgCiAgICAgc3RhdGUoKS5tX2ZvbnQgPSBuZXdTdHlsZS0+Zm9udCgpOwogICAgIHN0
YXRlKCkubV9mb250LnVwZGF0ZShzdHlsZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKSk7CiAgICAg
c3RhdGUoKS5tX3JlYWxpemVkRm9udCA9IHRydWU7Ci0KLSAgICBuZXdTdHlsZS0+ZGVyZWYoYXJl
bmEpOwogICAgIAogICAgIC8vIFNldCB0aGUgZm9udCBpbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4K
ICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwpJbmRleDogaHRtbC9I
VE1MT3B0R3JvdXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxPcHRHcm91cEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiwzNiArMTMyLDI2IEBAIGJvb2wgSFRNTE9wdEdyb3Vw
RWxlbWVudDo6Y2hlY2tEVEQoY29uc3QKIAogdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50OjphdHRh
Y2goKQogewotICAgIGlmIChwYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCkpIHsKLSAgICAgICAg
UmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JSZW5kZXJlcigwKTsKLSAgICAgICAgc2V0UmVu
ZGVyU3R5bGUoc3R5bGUpOwotICAgICAgICBzdHlsZS0+ZGVyZWYoZG9jdW1lbnQoKS0+cmVuZGVy
QXJlbmEoKSk7Ci0gICAgfQorICAgIGlmIChwYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCkpCisg
ICAgICAgIHNldFJlbmRlclN0eWxlKHN0eWxlRm9yUmVuZGVyZXIoMCkpOwogICAgIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OmF0dGFjaCgpOwogfQogCiB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6
OmRldGFjaCgpCiB7Ci0gICAgaWYgKG1fc3R5bGUpIHsKLSAgICAgICAgbV9zdHlsZS0+ZGVyZWYo
ZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSk7CisgICAgaWYgKG1fc3R5bGUpCiAgICAgICAgIG1f
c3R5bGUgPSAwOwotICAgIH0KICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZXRhY2goKTsK
IH0KIAotdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50OjpzZXRSZW5kZXJTdHlsZShSZW5kZXJTdHls
ZSogbmV3U3R5bGUpCit2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6OnNldFJlbmRlclN0eWxlKFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlKQogewotICAgIFJlbmRlclN0eWxlKiBvbGRT
dHlsZSA9IG1fc3R5bGU7CiAgICAgbV9zdHlsZSA9IG5ld1N0eWxlOwotICAgIGlmIChuZXdTdHls
ZSkKLSAgICAgICAgbmV3U3R5bGUtPnJlZigpOwotICAgIGlmIChvbGRTdHlsZSkKLSAgICAgICAg
b2xkU3R5bGUtPmRlcmVmKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpOwogfQogICAgIAogUmVu
ZGVyU3R5bGUqIEhUTUxPcHRHcm91cEVsZW1lbnQ6Om5vblJlbmRlcmVyUmVuZGVyU3R5bGUoKSBj
b25zdCAKIHsgCi0gICAgcmV0dXJuIG1fc3R5bGU7IAorICAgIHJldHVybiBtX3N0eWxlLmdldCgp
OyAKIH0KIAogU3RyaW5nIEhUTUxPcHRHcm91cEVsZW1lbnQ6Omdyb3VwTGFiZWxUZXh0KCkgY29u
c3QKSW5kZXg6IGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwv
SFRNTE9wdEdyb3VwRWxlbWVudC5oCShyZXZpc2lvbiAzNzU4NikKKysrIGh0bWwvSFRNTE9wdEdy
b3VwRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopIHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRh
Y2goKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0UmVuZGVyU3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4pOwog
CiAgICAgdmlydHVhbCBib29sIGluc2VydEJlZm9yZShQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxk
LCBOb2RlKiByZWZDaGlsZCwgRXhjZXB0aW9uQ29kZSYsIGJvb2wgc2hvdWxkTGF6eUF0dGFjaCA9
IGZhbHNlKTsKICAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4g
bmV3Q2hpbGQsIE5vZGUqIG9sZENoaWxkLCBFeGNlcHRpb25Db2RlJiwgYm9vbCBzaG91bGRMYXp5
QXR0YWNoID0gZmFsc2UpOwpAQCAtNjIsNyArNjIsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZv
aWQgcmVjYWxjU2VsZWN0T3B0aW9ucygpOwogCi0gICAgUmVuZGVyU3R5bGUqIG1fc3R5bGU7Cisg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRl
eDogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MT3B0
aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgaHRtbC9IVE1MT3B0aW9uRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDIwICs1NywxNSBAQCBib29sIEhUTUxPcHRpb25F
bGVtZW50OjpjaGVja0RURChjb25zdCBOCiAKIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OmF0dGFj
aCgpCiB7Ci0gICAgaWYgKHBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKSkgewotICAgICAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclJlbmRlcmVyKDApOwotICAgICAgICBzZXRSZW5k
ZXJTdHlsZShzdHlsZSk7Ci0gICAgICAgIHN0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJB
cmVuYSgpKTsKLSAgICB9CisgICAgaWYgKHBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKSkKKyAg
ICAgICAgc2V0UmVuZGVyU3R5bGUoc3R5bGVGb3JSZW5kZXJlcigwKSk7CiAgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6YXR0YWNoKCk7CiB9CiAKIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OmRl
dGFjaCgpCiB7Ci0gICAgaWYgKG1fc3R5bGUpIHsKLSAgICAgICAgbV9zdHlsZS0+ZGVyZWYoZG9j
dW1lbnQoKS0+cmVuZGVyQXJlbmEoKSk7CisgICAgaWYgKG1fc3R5bGUpCiAgICAgICAgIG1fc3R5
bGUgPSAwOwotICAgIH0KICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZXRhY2goKTsKIH0K
IApAQCAtMjM1LDE5ICsyMzAsMTQgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0TGFiZWwo
Y29uc3QgUwogICAgIHNldEF0dHJpYnV0ZShsYWJlbEF0dHIsIHZhbHVlKTsKIH0KIAotdm9pZCBI
VE1MT3B0aW9uRWxlbWVudDo6c2V0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQor
dm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0UmVuZGVyU3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gbmV3U3R5bGUpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIG9sZFN0eWxlID0gbV9zdHlsZTsK
ICAgICBtX3N0eWxlID0gbmV3U3R5bGU7Ci0gICAgaWYgKG5ld1N0eWxlKQotICAgICAgICBuZXdT
dHlsZS0+cmVmKCk7Ci0gICAgaWYgKG9sZFN0eWxlKQotICAgICAgICBvbGRTdHlsZS0+ZGVyZWYo
ZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSk7CiB9CiAKIFJlbmRlclN0eWxlKiBIVE1MT3B0aW9u
RWxlbWVudDo6bm9uUmVuZGVyZXJSZW5kZXJTdHlsZSgpIGNvbnN0IAogeyAKLSAgICByZXR1cm4g
bV9zdHlsZTsgCisgICAgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IAogfQogCiBTdHJpbmcgSFRNTE9w
dGlvbkVsZW1lbnQ6Om9wdGlvblRleHQoKQpJbmRleDogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMzc1ODYp
CisrKyBodG1sL0hUTUxPcHRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0
eWxlKikgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAgICAg
dmlydHVhbCB2b2lkIGRldGFjaCgpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRSZW5kZXJTdHlsZShS
ZW5kZXJTdHlsZSopOworICAgIHZpcnR1YWwgdm9pZCBzZXRSZW5kZXJTdHlsZShQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPik7CiAgICAgCiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5
cGUoKSBjb25zdDsKIApAQCAtODYsNyArODYsNyBAQCBwcml2YXRlOgogICAgIAogICAgIFN0cmlu
ZyBtX3ZhbHVlOwogICAgIGJvb2wgbV9zZWxlY3RlZDsKLSAgICBSZW5kZXJTdHlsZSogbV9zdHls
ZTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7CiB9OwogCiB9IC8vbmFtZXNwYWNl
CkluZGV4OiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFn
ZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCShyZXZpc2lvbiAzNzU4NikKKysrIHBhZ2UvYW5p
bWF0aW9uL0FuaW1hdGlvbkJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBA
IHB1YmxpYzoKICAgICBkb3VibGUgcHJvZ3Jlc3MoZG91YmxlIHNjYWxlLCBkb3VibGUgb2Zmc2V0
LCBjb25zdCBUaW1pbmdGdW5jdGlvbiopIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGFuaW1h
dGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUq
IGN1cnJlbnRTdHlsZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5
bGUqIHRhcmdldFN0eWxlLCBSZW5kZXJTdHlsZSomIGFuaW1hdGVkU3R5bGUpIHsgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVmUHRy
PFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkRmlyZUV2ZW50cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKSW5kZXg6IHBhZ2UvYW5p
bWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvYW5pbWF0
aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHBhZ2UvYW5p
bWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNyAr
MjIzLDcgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpjYW5jZWxBbmltYXRpbwogICAgIH0K
IH0KIAotUmVuZGVyU3R5bGUqIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnMo
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQorUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyhSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpCiB7ICAgIAogICAgIC8v
IERvbid0IGRvIGFueXRoaW5nIGlmIHdlJ3JlIGluIHRoZSBjYWNoZQogICAgIGlmICghcmVuZGVy
ZXItPmRvY3VtZW50KCkgfHwgcmVuZGVyZXItPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpCkBA
IC0yMzQsNyArMjM0LDcgQEAgUmVuZGVyU3R5bGUqIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0
ZQogICAgIGlmICgoIW9sZFN0eWxlIHx8ICghb2xkU3R5bGUtPmFuaW1hdGlvbnMoKSAmJiAhb2xk
U3R5bGUtPnRyYW5zaXRpb25zKCkpKSAmJiAoIW5ld1N0eWxlLT5hbmltYXRpb25zKCkgJiYgIW5l
d1N0eWxlLT50cmFuc2l0aW9ucygpKSkKICAgICAgICAgcmV0dXJuIG5ld1N0eWxlOwogCi0gICAg
UmVuZGVyU3R5bGUqIGJsZW5kZWRTdHlsZSA9IG5ld1N0eWxlOworICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gYmxlbmRlZFN0eWxlID0gbmV3U3R5bGU7CiAgICAgCiAgICAgLy8gRmV0Y2ggb3VyIGN1
cnJlbnQgc2V0IG9mIGltcGxpY2l0IGFuaW1hdGlvbnMgZnJvbSBhIGhhc2h0YWJsZS4gIFdlIHRo
ZW4gY29tcGFyZSB0aGVtCiAgICAgLy8gYWdhaW5zdCB0aGUgYW5pbWF0aW9ucyBpbiB0aGUgc3R5
bGUgYW5kIG1ha2Ugc3VyZSB3ZSdyZSBpbiBzeW5jLiAgSWYgZGVzdGluYXRpb24gdmFsdWVzCklu
ZGV4OiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAzNzU4NikKKysr
IHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksOCBAQAogI2lmbmRlZiBBbmltYXRpb25Db250cm9sbGVyX2gKICNkZWZpbmUgQW5p
bWF0aW9uQ29udHJvbGxlcl9oCiAKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOwpAQCAt
NDMsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgfkFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKIAogICAg
IHZvaWQgY2FuY2VsQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqKTsKLSAgICBSZW5kZXJTdHlsZSog
dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpOwor
ICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHVwZGF0ZUFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0
KiwgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKIAogICAgIHZvaWQgc2V0QW5pbWF0aW9uU3RhcnRU
aW1lKFJlbmRlck9iamVjdCosIGRvdWJsZSB0KTsKICAgICB2b2lkIHNldFRyYW5zaXRpb25TdGFy
dFRpbWUoUmVuZGVyT2JqZWN0KiwgaW50IHByb3BlcnR5LCBkb3VibGUgdCk7CkluZGV4OiBwYWdl
L2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvYW5p
bWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgcGFnZS9h
bmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyAr
NTAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgfkNvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGUoKTsK
IAotICAgIFJlbmRlclN0eWxlKiBhbmltYXRlKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0
eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisgICAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZShSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogY3Vy
cmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOwogCiAgICAgdm9pZCBzZXRBbmlt
YXRpbmcoYm9vbCk7CiAgICAgYm9vbCBpc0FuaW1hdGluZygpIGNvbnN0OwpAQCAtNzksOCArNzks
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoYm9vbCk7
CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIHVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHls
ZSk7Ci0gICAgdm9pZCB1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsK
KyAgICB2b2lkIHVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBj
dXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisgICAgdm9pZCB1cGRhdGVL
ZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHls
ZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKIAogcHJpdmF0ZToKICAgICB0eXBlZGVmIEhh
c2hNYXA8aW50LCBSZWZQdHI8SW1wbGljaXRBbmltYXRpb24+ID4gQ1NTUHJvcGVydHlUcmFuc2l0
aW9uc01hcDsKQEAgLTEwMCw3ICsxMDAsNyBAQCBDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp+
Q29tcG9zaXRlQW5pCiAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2xlYXIoKTsKIH0KICAgICAK
LXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVy
T2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVy
U3R5bGUqIHRhcmdldFN0eWxlKQordm9pZCBDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRh
dGVUcmFuc2l0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVu
dFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCiB7CiAgICAgLy8gSWYgY3VycmVudFN0
eWxlIGlzIG51bGwsIHdlIGRvbid0IGRvIHRyYW5zaXRpb25zCiAgICAgaWYgKCFjdXJyZW50U3R5
bGUgfHwgIXRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygpKQpAQCAtMTMzLDcgKzEzMyw3IEBAIHZv
aWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6dXBkYXRlVHIKICAgICAgICAgICAgIC8vIGFu
ZCB3ZSBoYXZlIHRvIHVzZSB0aGUgdW5hbmltYXRlZFN0eWxlIGZyb20gdGhlIGFuaW1hdGlvbi4g
V2UgZG8gdGhlIHRlc3QKICAgICAgICAgICAgIC8vIGFnYWluc3QgdGhlIHVuYW5pbWF0ZWQgc3R5
bGUgaGVyZSwgYnV0IHdlICJvdmVycmlkZSIgdGhlIHRyYW5zaXRpb24gbGF0ZXIuCiAgICAgICAg
ICAgICBjb25zdCBLZXlmcmFtZUFuaW1hdGlvbioga2V5ZnJhbWVBbmltID0gZ2V0QW5pbWF0aW9u
Rm9yUHJvcGVydHkocHJvcCk7Ci0gICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogZnJvbVN0
eWxlID0ga2V5ZnJhbWVBbmltID8ga2V5ZnJhbWVBbmltLT51bmFuaW1hdGVkU3R5bGUoKSA6IGN1
cnJlbnRTdHlsZTsKKyAgICAgICAgICAgIFJlbmRlclN0eWxlKiBmcm9tU3R5bGUgPSBrZXlmcmFt
ZUFuaW0gPyBrZXlmcmFtZUFuaW0tPnVuYW5pbWF0ZWRTdHlsZSgpIDogY3VycmVudFN0eWxlOwog
CiAgICAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYSBjdXJyZW50IHRyYW5zaXRpb24gZm9y
IHRoaXMgcHJvcAogICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGltcGxBbmltID0gbV90
cmFuc2l0aW9ucy5nZXQocHJvcCkuZ2V0KCk7CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBDb21w
b3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVUcgogICAgIH0KIH0KIAotdm9pZCBDb21wb3Np
dGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUq
IHRhcmdldFN0eWxlKQordm9pZCBDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVLZXlm
cmFtZUFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJl
bnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQogewogICAgIC8vIE5vdGhpbmcgdG8g
ZG8gaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgYW5pbWF0aW9ucywgYW5kIGRpZG4ndCBoYXZlIGFueSBi
ZWZvcmUKICAgICBpZiAobV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpICYmICF0YXJnZXRT
dHlsZS0+aGFzQW5pbWF0aW9ucygpKQpAQCAtMjI2LDkgKzIyNiw5IEBAIHZvaWQgQ29tcG9zaXRl
QW5pbWF0aW9uUHJpdmF0ZTo6dXBkYXRlS2UKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMu
cmVtb3ZlKGFuaW1zVG9CZVJlbW92ZWRbal0pOwogfQogCi1SZW5kZXJTdHlsZSogQ29tcG9zaXRl
QW5pbWF0aW9uUHJpdmF0ZTo6YW5pbWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBS
ZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCitQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjphbmltYXRlKFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0
eWxlKiB0YXJnZXRTdHlsZSkKIHsKLSAgICBSZW5kZXJTdHlsZSogcmVzdWx0U3R5bGUgPSAwOwor
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVzdWx0U3R5bGU7CiAKICAgICAvLyBVcGRhdGUgYW5p
bWF0aW9ucyBmaXJzdCBzbyB3ZSBjYW4gc2VlIGlmIGFueSB0cmFuc2l0aW9ucyBhcmUgb3ZlcnJp
ZGRlbgogICAgIHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhyZW5kZXJlciwgY3VycmVudFN0eWxl
LCB0YXJnZXRTdHlsZSk7CkBAIC01MjEsNyArNTIxLDcgQEAgQ29tcG9zaXRlQW5pbWF0aW9uOjp+
Q29tcG9zaXRlQW5pbWF0aW9uKAogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKLVJlbmRlclN0eWxl
KiBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29u
c3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQor
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxl
KiB0YXJnZXRTdHlsZSkKIHsKICAgICByZXR1cm4gbV9kYXRhLT5hbmltYXRlKHJlbmRlcmVyLCBj
dXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKIH0KSW5kZXg6IHBhZ2UvYW5pbWF0aW9uL0NvbXBv
c2l0ZUFuaW1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFu
aW1hdGlvbi5oCShyZXZpc2lvbiAzNzU4NikKKysrIHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFu
aW1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBD
b21wb3NpdGVBbmltYXRpb24oQW5pbWF0aW9uQ29udHJvbGxlciogYW5pbWF0aW9uQ29udHJvbGxl
cik7CiAgICAgfkNvbXBvc2l0ZUFuaW1hdGlvbigpOwogCi0gICAgUmVuZGVyU3R5bGUqIGFuaW1h
dGUoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVy
U3R5bGUqIHRhcmdldFN0eWxlKTsKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBhbmltYXRl
KFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0
YXJnZXRTdHlsZSk7CiAgICAgYm9vbCBpc0FuaW1hdGluZygpIGNvbnN0OwogCiAgICAgdm9pZCBz
ZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoYm9vbCk7CkluZGV4OiBwYWdlL2FuaW1hdGlvbi9J
bXBsaWNpdEFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9hbmltYXRpb24vSW1wbGlj
aXRBbmltYXRpb24uY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHBhZ2UvYW5pbWF0aW9uL0ltcGxp
Y2l0QW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMjkgKzM0LDE5IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotSW1wbGljaXRBbmltYXRpb246OkltcGxpY2l0QW5pbWF0aW9u
KGNvbnN0IEFuaW1hdGlvbiogdHJhbnNpdGlvbiwgaW50IGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltLCBjb25zdCBS
ZW5kZXJTdHlsZSogZnJvbVN0eWxlKQorSW1wbGljaXRBbmltYXRpb246OkltcGxpY2l0QW5pbWF0
aW9uKGNvbnN0IEFuaW1hdGlvbiogdHJhbnNpdGlvbiwgaW50IGFuaW1hdGluZ1Byb3BlcnR5LCBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltLCBSZW5k
ZXJTdHlsZSogZnJvbVN0eWxlKQogICAgIDogQW5pbWF0aW9uQmFzZSh0cmFuc2l0aW9uLCByZW5k
ZXJlciwgY29tcEFuaW0pCiAgICAgLCBtX3RyYW5zaXRpb25Qcm9wZXJ0eSh0cmFuc2l0aW9uLT5w
cm9wZXJ0eSgpKQogICAgICwgbV9hbmltYXRpbmdQcm9wZXJ0eShhbmltYXRpbmdQcm9wZXJ0eSkK
ICAgICAsIG1fb3ZlcnJpZGRlbihmYWxzZSkKLSAgICAsIG1fZnJvbVN0eWxlKDApCi0gICAgLCBt
X3RvU3R5bGUoMCkKIHsKICAgICBBU1NFUlQoYW5pbWF0aW5nUHJvcGVydHkgIT0gY0FuaW1hdGVB
bGwpOwotICAgIGlmIChmcm9tU3R5bGUpIHsKKyAgICBpZiAoZnJvbVN0eWxlKQogICAgICAgICBt
X2Zyb21TdHlsZSA9IGZyb21TdHlsZTsKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+
KG1fZnJvbVN0eWxlKS0+cmVmKCk7Ci0gICAgfQogfQogCiBJbXBsaWNpdEFuaW1hdGlvbjo6fklt
cGxpY2l0QW5pbWF0aW9uKCkKIHsKLSAgICAvLyBHZXQgcmlkIG9mIHN0eWxlIHJlZnMKLSAgICBp
ZiAobV9mcm9tU3R5bGUpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX2Zyb21T
dHlsZSktPmRlcmVmKHJlbmRlcmVyKCktPnJlbmRlckFyZW5hKCkpOwotICAgIGlmIChtX3RvU3R5
bGUpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3RvU3R5bGUpLT5kZXJlZihy
ZW5kZXJlcigpLT5yZW5kZXJBcmVuYSgpKTsKLQogICAgIC8vIERvIHRoZSBjbGVhbnVwIGhlcmUg
aW5zdGVhZCBvZiBpbiB0aGUgYmFzZSBjbGFzcyBzbyB0aGUgc3BlY2lhbGl6ZWQgbWV0aG9kcyBn
ZXQgY2FsbGVkCiAgICAgaWYgKCFwb3N0QWN0aXZlKCkpCiAgICAgICAgIHVwZGF0ZVN0YXRlTWFj
aGluZShBbmltYXRpb25TdGF0ZUlucHV0RW5kQW5pbWF0aW9uLCAtMSk7CkBAIC02Nyw4ICs1Nyw4
IEBAIGJvb2wgSW1wbGljaXRBbmltYXRpb246OnNob3VsZFNlbmRFdmVudEYKICAgICByZXR1cm4g
bV9vYmplY3QtPmRvY3VtZW50KCktPmhhc0xpc3RlbmVyVHlwZShpbkxpc3RlbmVyVHlwZSk7CiB9
CiAKLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBh
bmltYXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJy
ZW50U3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0
eWxlKiB0YXJnZXRTdHlsZSwgUmVuZGVyU3R5bGUqJiBhbmltYXRlZFN0eWxlKQordm9pZCBJbXBs
aWNpdEFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qIGFuaW1hdGlvbiwgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8
UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKQogewogICAgIGlmIChwYXVzZWQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtODUsOSArNzUsOSBAQCB2b2lkIEltcGxpY2l0QW5pbWF0aW9uOjphbmlt
YXRlKENvbXBvc2l0CiAgICAgLy8gUnVuIGEgY3ljbGUgb2YgYW5pbWF0aW9uLgogICAgIC8vIFdl
IGtub3cgd2Ugd2lsbCBuZWVkIGEgbmV3IHJlbmRlciBzdHlsZSwgc28gbWFrZSBvbmUgaWYgbmVl
ZGVkCiAgICAgaWYgKCFhbmltYXRlZFN0eWxlKQotICAgICAgICBhbmltYXRlZFN0eWxlID0gbmV3
IChyZW5kZXJlci0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKnRhcmdldFN0eWxlKTsKKyAg
ICAgICAgYW5pbWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZSh0YXJnZXRTdHlsZSk7CiAK
LSAgICBpZiAoYmxlbmRQcm9wZXJ0aWVzKHRoaXMsIG1fYW5pbWF0aW5nUHJvcGVydHksIGFuaW1h
dGVkU3R5bGUsIG1fZnJvbVN0eWxlLCBtX3RvU3R5bGUsIHByb2dyZXNzKDEsIDAsIDApKSkKKyAg
ICBpZiAoYmxlbmRQcm9wZXJ0aWVzKHRoaXMsIG1fYW5pbWF0aW5nUHJvcGVydHksIGFuaW1hdGVk
U3R5bGUuZ2V0KCksIG1fZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHByb2dyZXNz
KDEsIDAsIDApKSkKICAgICAgICAgc2V0QW5pbWF0aW5nKCk7CiB9CiAKQEAgLTEzNSwxNyArMTI1
LDEzIEBAIGJvb2wgSW1wbGljaXRBbmltYXRpb246OnNlbmRUcmFuc2l0aW9uRXYKICAgICByZXR1
cm4gZmFsc2U7IC8vIERpZG4ndCBkaXNwYXRjaCBhbiBldmVudAogfQogCi12b2lkIEltcGxpY2l0
QW5pbWF0aW9uOjpyZXNldChjb25zdCBSZW5kZXJTdHlsZSogdG8pCit2b2lkIEltcGxpY2l0QW5p
bWF0aW9uOjpyZXNldChSZW5kZXJTdHlsZSogdG8pCiB7CiAgICAgQVNTRVJUKHRvKTsKICAgICBB
U1NFUlQobV9mcm9tU3R5bGUpOwogICAgIAotICAgIGlmIChtX3RvU3R5bGUpCi0gICAgICAgIGNv
bnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3RvU3R5bGUpLT5kZXJlZihyZW5kZXJlcigpLT5yZW5k
ZXJBcmVuYSgpKTsKIAotICAgIG1fdG9TdHlsZSA9IHRvOyAgICAgICAvLyBJdCBpcyByZWFkLW9u
bHksIG90aGVyIHRoYW4gdGhlIHJlZgotICAgIGlmIChtX3RvU3R5bGUpCi0gICAgICAgIGNvbnN0
X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3RvU3R5bGUpLT5yZWYoKTsKKyAgICBtX3RvU3R5bGUgPSB0
bzsKIAogICAgIC8vIFJlc3RhcnQgdGhlIHRyYW5zaXRpb24KICAgICBpZiAobV9mcm9tU3R5bGUg
JiYgbV90b1N0eWxlKQpAQCAtMTcxLDEyICsxNTcsMTIgQEAgYm9vbCBJbXBsaWNpdEFuaW1hdGlv
bjo6YWZmZWN0c1Byb3BlcnR5KAogCiBib29sIEltcGxpY2l0QW5pbWF0aW9uOjppc1RhcmdldFBy
b3BlcnR5RXF1YWwoaW50IHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKIHsK
LSAgICByZXR1cm4gcHJvcGVydGllc0VxdWFsKHByb3AsIG1fdG9TdHlsZSwgdGFyZ2V0U3R5bGUp
OworICAgIHJldHVybiBwcm9wZXJ0aWVzRXF1YWwocHJvcCwgbV90b1N0eWxlLmdldCgpLCB0YXJn
ZXRTdHlsZSk7CiB9CiAKIHZvaWQgSW1wbGljaXRBbmltYXRpb246OmJsZW5kUHJvcGVydHlWYWx1
ZUluU3R5bGUoaW50IHByb3AsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUpCiB7Ci0gICAgYmxl
bmRQcm9wZXJ0aWVzKHRoaXMsIHByb3AsIGN1cnJlbnRTdHlsZSwgbV9mcm9tU3R5bGUsIG1fdG9T
dHlsZSwgcHJvZ3Jlc3MoMSwgMCwgMCkpOworICAgIGJsZW5kUHJvcGVydGllcyh0aGlzLCBwcm9w
LCBjdXJyZW50U3R5bGUsIG1fZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHByb2dy
ZXNzKDEsIDAsIDApKTsKIH0KIAogdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6dmFsaWRhdGVUcmFu
c2Zvcm1GdW5jdGlvbkxpc3QoKQpJbmRleDogcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCShy
ZXZpc2lvbiAzNzU4NikKKysrIHBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gZm9y
IGEgc2luZ2xlIFJlbmRlck9iamVjdC4KIGNsYXNzIEltcGxpY2l0QW5pbWF0aW9uIDogcHVibGlj
IEFuaW1hdGlvbkJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltcGxpY2l0
QW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGludCBhbmltYXRp
bmdQcm9wZXJ0eSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBj
b21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUpCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW1wbGljaXRBbmltYXRpb24+IGNyZWF0ZShjb25zdCBBbmltYXRpb24q
IGFuaW1hdGlvbiwgaW50IGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgUmVuZGVyU3R5bGUqIGZy
b21TdHlsZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1wbGljaXRBbmlt
YXRpb24oYW5pbWF0aW9uLCBhbmltYXRpbmdQcm9wZXJ0eSwgcmVuZGVyZXIsIGNvbXBvc2l0ZUFu
aW1hdGlvbiwgZnJvbVN0eWxlKSk7CiAgICAgfTsKQEAgLTQ4LDggKzQ4LDggQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uRW5kKGRvdWJsZSBlbGFwc2VkVGltZSk7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmpl
Y3QqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSog
dGFyZ2V0U3R5bGUsIFJlbmRlclN0eWxlKiYgYW5pbWF0ZWRTdHlsZSk7Ci0gICAgdmlydHVhbCB2
b2lkIHJlc2V0KGNvbnN0IFJlbmRlclN0eWxlKiB0byk7CisgICAgdmlydHVhbCB2b2lkIGFuaW1h
dGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIGN1cnJl
bnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVyU3R5bGU+JiBh
bmltYXRlZFN0eWxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoUmVuZGVyU3R5bGUqIHRvKTsK
IAogICAgIHZvaWQgc2V0T3ZlcnJpZGRlbihib29sKTsKICAgICB2aXJ0dWFsIGJvb2wgb3ZlcnJp
ZGRlbigpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGRlbjsgfQpAQCAtNzEsNyArNzEsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgdm9pZCB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlzdCgpOwogCiBw
cml2YXRlOgotICAgIEltcGxpY2l0QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiosIGludCBhbmlt
YXRpbmdQcm9wZXJ0eSwgUmVuZGVyT2JqZWN0KiwgQ29tcG9zaXRlQW5pbWF0aW9uKiwgY29uc3Qg
UmVuZGVyU3R5bGUqIGZyb21TdHlsZSk7ICAgIAorICAgIEltcGxpY2l0QW5pbWF0aW9uKGNvbnN0
IEFuaW1hdGlvbiosIGludCBhbmltYXRpbmdQcm9wZXJ0eSwgUmVuZGVyT2JqZWN0KiwgQ29tcG9z
aXRlQW5pbWF0aW9uKiwgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSk7ICAgIAogICAgIHZpcnR1YWwg
fkltcGxpY2l0QW5pbWF0aW9uKCk7CiAKICAgICBpbnQgbV90cmFuc2l0aW9uUHJvcGVydHk7ICAg
Ly8gVHJhbnNpdGlvbiBwcm9wZXJ0eSBhcyBzcGVjaWZpZWQgaW4gdGhlIFJlbmRlclN0eWxlLiBN
YXkgYmUgY0FuaW1hdGVBbGwKQEAgLTc5LDggKzc5LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1f
b3ZlcnJpZGRlbjsgICAgICAgICAgLy8gdHJ1ZSB3aGVuIHRoZXJlIGlzIGEga2V5ZnJhbWUgYW5p
bWF0aW9uIHRoYXQgb3ZlcnJpZGVzIHRoZSB0cmFuc2l0aW9uaW5nIHByb3BlcnR5CiAKICAgICAv
LyBUaGUgdHdvIHN0eWxlcyB0aGF0IHdlIGFyZSBibGVuZGluZy4KLSAgICBjb25zdCBSZW5kZXJT
dHlsZSogbV9mcm9tU3R5bGU7Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIG1fdG9TdHlsZTsKKyAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fZnJvbVN0eWxlOworICAgIFJlZlB0cjxSZW5kZXJTdHls
ZT4gbV90b1N0eWxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogcGFnZS9h
bmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvYW5pbWF0
aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyBwYWdlL2FuaW1h
dGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDE2ICszOCwx
MyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUtleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFt
ZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciwgaW50IGluZGV4LCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltLCBjb25zdCBSZW5k
ZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQorS2V5ZnJhbWVBbmltYXRpb246OktleWZyYW1lQW5p
bWF0aW9uKGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBpbnQgaW5kZXgsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0sIFJlbmRlclN0eWxlKiB1
bmFuaW1hdGVkU3R5bGUpCiAgICAgOiBBbmltYXRpb25CYXNlKGFuaW1hdGlvbiwgcmVuZGVyZXIs
IGNvbXBBbmltKQogICAgICwgbV9rZXlmcmFtZXMocmVuZGVyZXIsIGFuaW1hdGlvbi0+bmFtZSgp
KQogICAgICwgbV9pbmRleChpbmRleCkKLSAgICAsIG1fdW5hbmltYXRlZFN0eWxlKDApCiB7Ci0g
ICAgaWYgKHVuYW5pbWF0ZWRTdHlsZSkgewotICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxl
Kj4odW5hbmltYXRlZFN0eWxlKS0+cmVmKCk7CisgICAgaWYgKHVuYW5pbWF0ZWRTdHlsZSkKICAg
ICAgICAgbV91bmFuaW1hdGVkU3R5bGUgPSB1bmFuaW1hdGVkU3R5bGU7Ci0gICAgfQogICAgIAog
ICAgIC8vIEdldCB0aGUga2V5ZnJhbWUgUmVuZGVyU3R5bGVzCiAgICAgaWYgKG1fb2JqZWN0ICYm
IG1fb2JqZWN0LT5lbGVtZW50KCkgJiYgbV9vYmplY3QtPmVsZW1lbnQoKS0+aXNFbGVtZW50Tm9k
ZSgpKQpAQCAtNjIsMTMgKzU5LDEwIEBAIEtleWZyYW1lQW5pbWF0aW9uOjp+S2V5ZnJhbWVBbmlt
YXRpb24oKQogICAgIC8vIERvIHRoZSBjbGVhbnVwIGhlcmUgaW5zdGVhZCBvZiBpbiB0aGUgYmFz
ZSBjbGFzcyBzbyB0aGUgc3BlY2lhbGl6ZWQgbWV0aG9kcyBnZXQgY2FsbGVkCiAgICAgaWYgKCFw
b3N0QWN0aXZlKCkpCiAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlu
cHV0RW5kQW5pbWF0aW9uLCAtMSk7Ci0KLSAgICBpZiAobV91bmFuaW1hdGVkU3R5bGUpCi0gICAg
ICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3VuYW5pbWF0ZWRTdHlsZSktPmRlcmVmKHJl
bmRlcmVyKCktPnJlbmRlckFyZW5hKCkpOwogfQogCiB2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjph
bmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVuZGVy
U3R5bGUqJiBhbmltYXRlZFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVyU3R5bGU+JiBh
bmltYXRlZFN0eWxlKQogewogICAgIC8vIElmIHdlIGhhdmUgbm90IHlldCBzdGFydGVkLCB3ZSB3
aWxsIG5vdCBoYXZlIGEgdmFsaWQgc3RhcnQgdGltZSwgc28ganVzdCBzdGFydCB0aGUgYW5pbWF0
aW9uIGlmIG5lZWRlZC4KICAgICBpZiAoaXNOZXcoKSAmJiBtX2FuaW1hdGlvbi0+cGxheVN0YXRl
KCkgPT0gQW5pbVBsYXlTdGF0ZVBsYXlpbmcpCkBAIC0xMDIsMjMgKzk2LDIzIEBAIHZvaWQgS2V5
ZnJhbWVBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXQKICAgICBpZiAobV9hbmltYXRpb24tPmRp
cmVjdGlvbigpICYmIChpICYgMSkpCiAgICAgICAgIHQgPSAxIC0gdDsKIAotICAgIFJlbmRlclN0
eWxlKiBmcm9tU3R5bGUgPSAwOwotICAgIFJlbmRlclN0eWxlKiB0b1N0eWxlID0gMDsKKyAgICBj
b25zdCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlID0gMDsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSog
dG9TdHlsZSA9IDA7CiAgICAgZG91YmxlIHNjYWxlID0gMTsKICAgICBkb3VibGUgb2Zmc2V0ID0g
MDsKICAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGVuZEtleWZyYW1l
cyA9IG1fa2V5ZnJhbWVzLmVuZEtleWZyYW1lcygpOwogICAgIGZvciAoVmVjdG9yPEtleWZyYW1l
VmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLmJlZ2luS2V5ZnJhbWVzKCk7
IGl0ICE9IGVuZEtleWZyYW1lczsgKytpdCkgewotICAgICAgICBpZiAodCA8IGl0LT5rZXkpIHsK
KyAgICAgICAgaWYgKHQgPCBpdC0+a2V5KCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBmaXJzdCBr
ZXkgc2hvdWxkIGFsd2F5cyBiZSAwLCBzbyB3ZSBzaG91bGQgbmV2ZXIgc3VjY2VlZCBvbiB0aGUg
Zmlyc3Qga2V5CiAgICAgICAgICAgICBpZiAoIWZyb21TdHlsZSkKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIHNjYWxlID0gMS4wIC8gKGl0LT5rZXkgLSBvZmZzZXQpOwotICAg
ICAgICAgICAgdG9TdHlsZSA9IGl0LT5zdHlsZTsKKyAgICAgICAgICAgIHNjYWxlID0gMS4wIC8g
KGl0LT5rZXkoKSAtIG9mZnNldCk7CisgICAgICAgICAgICB0b1N0eWxlID0gaXQtPnN0eWxlKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIG9mZnNldCA9IGl0LT5r
ZXk7Ci0gICAgICAgIGZyb21TdHlsZSA9IGl0LT5zdHlsZTsKKyAgICAgICAgb2Zmc2V0ID0gaXQt
PmtleSgpOworICAgICAgICBmcm9tU3R5bGUgPSBpdC0+c3R5bGUoKTsKICAgICB9CiAKICAgICAv
LyBJZiBlaXRoZXIgc3R5bGUgaXMgMCB3ZSBoYXZlIGFuIGludmFsaWQgY2FzZSwganVzdCBzdG9w
IHRoZSBhbmltYXRpb24uCkBAIC0xMzAsNyArMTI0LDcgQEAgdm9pZCBLZXlmcmFtZUFuaW1hdGlv
bjo6YW5pbWF0ZShDb21wb3NpdAogICAgIC8vIFJ1biBhIGN5Y2xlIG9mIGFuaW1hdGlvbi4KICAg
ICAvLyBXZSBrbm93IHdlIHdpbGwgbmVlZCBhIG5ldyByZW5kZXIgc3R5bGUsIHNvIG1ha2Ugb25l
IGlmIG5lZWRlZC4KICAgICBpZiAoIWFuaW1hdGVkU3R5bGUpCi0gICAgICAgIGFuaW1hdGVkU3R5
bGUgPSBuZXcgKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgqdGFyZ2V0U3R5
bGUpOworICAgICAgICBhbmltYXRlZFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKHRhcmdldFN0
eWxlKTsKIAogICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbiA9IDA7CiAg
ICAgaWYgKGZyb21TdHlsZS0+YW5pbWF0aW9ucygpICYmIGZyb21TdHlsZS0+YW5pbWF0aW9ucygp
LT5zaXplKCkgPiAwKQpAQCAtMTQwLDcgKzEzNCw3IEBAIHZvaWQgS2V5ZnJhbWVBbmltYXRpb246
OmFuaW1hdGUoQ29tcG9zaXQKIAogICAgIEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3IgZW5k
UHJvcGVydGllcyA9IG1fa2V5ZnJhbWVzLmVuZFByb3BlcnRpZXMoKTsKICAgICBmb3IgKEhhc2hT
ZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lcy5iZWdpblByb3BlcnRpZXMo
KTsgaXQgIT0gZW5kUHJvcGVydGllczsgKytpdCkgewotICAgICAgICBpZiAoYmxlbmRQcm9wZXJ0
aWVzKHRoaXMsICppdCwgYW5pbWF0ZWRTdHlsZSwgZnJvbVN0eWxlLCB0b1N0eWxlLCBwcm9nKSkK
KyAgICAgICAgaWYgKGJsZW5kUHJvcGVydGllcyh0aGlzLCAqaXQsIGFuaW1hdGVkU3R5bGUuZ2V0
KCksIGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZykpCiAgICAgICAgICAgICBzZXRBbmltYXRpbmco
KTsKICAgICB9CiB9CkBAIC0yNjQsNyArMjU4LDcgQEAgdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6
dmFsaWRhdGVUcmFuc2ZvcgogICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0
b3IgZmlyc3RJdCA9IGVuZDsKICAgICAKICAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lcy5iZWdpbktleWZyYW1lcygpOyBpdCAhPSBl
bmQ7ICsraXQsICsrZmlyc3RJbmRleCkgewotICAgICAgICBpZiAoaXQtPnN0eWxlLT50cmFuc2Zv
cm0oKS5vcGVyYXRpb25zKCkuc2l6ZSgpID4gMCkgeworICAgICAgICBpZiAoaXQtPnN0eWxlKCkt
PnRyYW5zZm9ybSgpLm9wZXJhdGlvbnMoKS5zaXplKCkgPiAwKSB7CiAgICAgICAgICAgICBmaXJz
dEl0ID0gaXQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjczLDExICsyNjcs
MTEgQEAgdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6dmFsaWRhdGVUcmFuc2ZvcgogICAgIGlmIChm
aXJzdEl0ID09IGVuZCkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb25zKiBmaXJzdFZhbCA9ICZmaXJzdEl0LT5zdHlsZS0+dHJhbnNmb3JtKCk7
CisgICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogZmlyc3RWYWwgPSAmZmlyc3RJdC0+c3R5
bGUoKS0+dHJhbnNmb3JtKCk7CiAgICAgCiAgICAgLy8gU2VlIGlmIHRoZSBrZXlmcmFtZXMgYXJl
IHZhbGlkCiAgICAgZm9yIChWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gZmlyc3RJdCsxOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9ucyogdmFsID0gJml0LT5zdHlsZS0+dHJhbnNmb3JtKCk7CisgICAgICAgIGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHZhbCA9ICZpdC0+c3R5bGUoKS0+dHJhbnNmb3JtKCk7CiAg
ICAgICAgIAogICAgICAgICAvLyBBIG51bGwgdHJhbnNmb3JtIG1hdGNoZXMgYW55dGhpbmcKICAg
ICAgICAgaWYgKHZhbC0+b3BlcmF0aW9ucygpLmlzRW1wdHkoKSkKSW5kZXg6IHBhZ2UvYW5pbWF0
aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9hbmltYXRpb24vS2V5
ZnJhbWVBbmltYXRpb24uaAkocmV2aXNpb24gMzc1ODYpCisrKyBwYWdlL2FuaW1hdGlvbi9LZXlm
cmFtZUFuaW1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMiArNDAsMTIgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogLy8gZm9yIGEgc2luZ2xlIFJlbmRlck9iamVjdC4KIGNsYXNzIEtleWZy
YW1lQW5pbWF0aW9uIDogcHVibGljIEFuaW1hdGlvbkJhc2UgewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uKiBh
bmltYXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGludCBpbmRleCwgQ29tcG9zaXRlQW5p
bWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiB1bmFuaW1hdGVk
U3R5bGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGNyZWF0ZShj
b25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgaW50IGlu
ZGV4LCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgUmVuZGVyU3R5bGUq
IHVuYW5pbWF0ZWRTdHlsZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5
ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCByZW5kZXJlciwgaW5kZXgsIGNvbXBvc2l0ZUFuaW1h
dGlvbiwgdW5hbmltYXRlZFN0eWxlKSk7CiAgICAgfTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQg
YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJT
dHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlbmRl
clN0eWxlKiYgYW5pbWF0ZWRTdHlsZSk7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoQ29tcG9z
aXRlQW5pbWF0aW9uKiwgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRT
dHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVyU3R5bGU+
JiBhbmltYXRlZFN0eWxlKTsKIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fa2V5ZnJhbWVzLmFuaW1hdGlvbk5hbWUoKTsgfQogICAgIGludCBpbmRleCgp
IGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAg
IAogICAgIGJvb2wgaGFzQW5pbWF0aW9uRm9yUHJvcGVydHkoaW50IHByb3BlcnR5KSBjb25zdDsK
ICAgICAKLSAgICBjb25zdCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmFuaW1hdGVkU3R5bGU7IH0KKyAgICBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV91bmFuaW1hdGVkU3R5bGUuZ2V0KCk7IH0KIAogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSBlbGFwc2VkVGlt
ZSk7CkBAIC03NCw3ICs3NCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHZhbGlkYXRlVHJhbnNm
b3JtRnVuY3Rpb25MaXN0KCk7CiAKIHByaXZhdGU6Ci0gICAgS2V5ZnJhbWVBbmltYXRpb24oY29u
c3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIFJlbmRlck9iamVjdCosIGludCBpbmRleCwgQ29tcG9z
aXRlQW5pbWF0aW9uKiwgY29uc3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSk7CisgICAg
S2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIFJlbmRlck9iamVj
dCosIGludCBpbmRleCwgQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVyU3R5bGUqIHVuYW5pbWF0
ZWRTdHlsZSk7CiAgICAgdmlydHVhbCB+S2V5ZnJhbWVBbmltYXRpb24oKTsKICAgICAKICAgICAv
LyBUaGUga2V5ZnJhbWVzIHRoYXQgd2UgYXJlIGJsZW5kaW5nLgpAQCAtODQsNyArODQsNyBAQCBw
cml2YXRlOgogICAgIGludCBtX2luZGV4OwogCiAgICAgLy8gVGhlIHN0eWxlIGp1c3QgYmVmb3Jl
IHdlIHN0YXJ0ZWQgYW5pbWF0aW9uCi0gICAgY29uc3QgUmVuZGVyU3R5bGUqIG1fdW5hbmltYXRl
ZFN0eWxlOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV91bmFuaW1hdGVkU3R5bGU7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAz
NzU4NikKKysrIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzc2LDcgKzM3Niw4IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjoK
ICAgICAgICAgICAgIHNlbGVjdGlvbkZpbGxDb2xvciA9IGZvcmVncm91bmQ7CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gb2JqZWN0KCktPmdldFBz
ZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTRUxFQ1RJT04pKSB7CisgICAgICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gcHNldWRvU3R5bGUgPSBvYmplY3QoKS0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5
bGU6OlNFTEVDVElPTik7CisgICAgICAgIGlmIChwc2V1ZG9TdHlsZSkgewogICAgICAgICAgICAg
U2hhZG93RGF0YSogc2hhZG93ID0gcGFpbnRJbmZvLmZvcmNlQmxhY2tUZXh0ID8gMCA6IHBzZXVk
b1N0eWxlLT50ZXh0U2hhZG93KCk7CiAgICAgICAgICAgICBpZiAoc2hhZG93ICE9IHNlbGVjdGlv
blNoYWRvdykgewogICAgICAgICAgICAgICAgIGlmICghcGFpbnRTZWxlY3RlZFRleHRPbmx5KQpJ
bmRleDogcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBy
ZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHJl
bmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcg
KzU0LDcgQEAgTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ6Ok1lZGlhQ29udAogICAgIDog
SFRNTERpdkVsZW1lbnQoZG9jKQogICAgICwgbV9tZWRpYUVsZW1lbnQobWVkaWFFbGVtZW50KSAK
IHsKLSAgICBSZW5kZXJTdHlsZSogcm9vdFN0eWxlID0gbmV3IChtZWRpYUVsZW1lbnQtPnJlbmRl
cmVyKCktPnJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCk7CisgICAgUmVmUHRyPFJlbmRlclN0
eWxlPiByb290U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgcm9vdFN0eWxlLT5p
bmhlcml0RnJvbShtZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPnN0eWxlKCkpOwogICAgIHJvb3RT
dHlsZS0+c2V0RGlzcGxheShCTE9DSyk7CiAgICAgcm9vdFN0eWxlLT5zZXRQb3NpdGlvbihSZWxh
dGl2ZVBvc2l0aW9uKTsKQEAgLTczLDggKzczLDggQEAgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50
OjpNZWRpYUNvbnRyb2xJbgogICAgICwgbV9tZWRpYUVsZW1lbnQobWVkaWFFbGVtZW50KQogewog
ICAgIHNldElucHV0VHlwZSh0eXBlKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX21lZGlh
RWxlbWVudC0+cmVuZGVyZXIoKS0+Z2V0UHNldWRvU3R5bGUocHNldWRvKTsKLSAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXIobV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVy
KCktPnJlbmRlckFyZW5hKCksIHN0eWxlKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxl
ID0gbV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPmdldFBzZXVkb1N0eWxlKHBzZXVkbyk7Cisg
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNyZWF0ZVJlbmRlcmVyKG1fbWVkaWFFbGVtZW50
LT5yZW5kZXJlcigpLT5yZW5kZXJBcmVuYSgpLCBzdHlsZS5nZXQoKSk7CiAgICAgaWYgKHJlbmRl
cmVyKSB7CiAgICAgICAgIHNldFJlbmRlcmVyKHJlbmRlcmVyKTsKICAgICAgICAgcmVuZGVyZXIt
PnNldFN0eWxlKHN0eWxlKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyBy
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5LDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFuZ2UoUmVuZGVyUwogICAgIC8vIEZJWE1F
OiBXZSBjb3VsZCBzYXZlIHRoaXMgY2FsbCB3aGVuIHRoZSBjaGFuZ2Ugb25seSBhZmZlY3RlZCBu
b24taW5oZXJpdGVkIHByb3BlcnRpZXMKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBm
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAg
ICAgIGlmIChjaGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpKSB7Ci0gICAgICAgICAgICBSZW5kZXJT
dHlsZSogbmV3U3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCk7CisgICAg
ICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0
ZSgpOwogICAgICAgICAgICAgbmV3U3R5bGUtPmluaGVyaXRGcm9tKHN0eWxlKCkpOwogICAgICAg
ICAgICAgbmV3U3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwogICAgICAgICAgICAgY2hpbGQtPnNl
dFN0eWxlKG5ld1N0eWxlKTsKQEAgLTQzNjgsOCArNDM2OCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OnVwZGF0ZUZpcnN0TGV0dGVyKCkKICAgICAvLyBJZiB0aGUgY2hpbGQgYWxyZWFkeSBoYXMgc3R5
bGUsIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLCBzbyB3ZSBqdXN0IHdhbnQKICAg
ICAvLyB0byB1cGRhdGUgaXQuCiAgICAgaWYgKGN1cnJDaGlsZC0+c3R5bGUoKS0+c3R5bGVUeXBl
KCkgPT0gUmVuZGVyU3R5bGU6OkZJUlNUX0xFVFRFUikgewotICAgICAgICBSZW5kZXJTdHlsZSog
cHNldWRvID0gZmlyc3RMZXR0ZXJCbG9jay0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkZJ
UlNUX0xFVFRFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5maXJzdExpbmVTdHlsZSgp
KTsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1ZG8gPSBmaXJzdExldHRlckJsb2Nr
LT5nZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6RklSU1RfTEVUVEVSLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpcnN0TGV0dGVyQ29udGFpbmVyLT5maXJzdExpbmVTdHlsZSgpKTsKICAgICAgICAgY3VyckNo
aWxkLT5zZXRTdHlsZShwc2V1ZG8pOwogICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogZ2VuQ2hp
bGQgPSBjdXJyQ2hpbGQtPmZpcnN0Q2hpbGQoKTsgZ2VuQ2hpbGQ7IGdlbkNoaWxkID0gZ2VuQ2hp
bGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChnZW5DaGlsZC0+aXNUZXh0KCkp
IApAQCAtNDM4Nyw4ICs0Mzg3LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlRmlyc3RMZXR0
ZXIoKQogICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0T2JqID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4
dCo+KGN1cnJDaGlsZCk7CiAgICAgICAgIAogICAgICAgICAvLyBDcmVhdGUgb3VyIHBzZXVkbyBz
dHlsZSBub3cgdGhhdCB3ZSBoYXZlIG91ciBmaXJzdExldHRlckNvbnRhaW5lciBkZXRlcm1pbmVk
LgotICAgICAgICBSZW5kZXJTdHlsZSogcHNldWRvU3R5bGUgPSBmaXJzdExldHRlckJsb2NrLT5n
ZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6RklSU1RfTEVUVEVSLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJz
dExldHRlckNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSk7CisgICAgICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gcHNldWRvU3R5bGUgPSBmaXJzdExldHRlckJsb2NrLT5nZXRQc2V1ZG9TdHlsZShS
ZW5kZXJTdHlsZTo6RklSU1RfTEVUVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RMZXR0ZXJD
b250YWluZXItPmZpcnN0TGluZVN0eWxlKCkpOwogICAgICAgICAKICAgICAgICAgLy8gRm9yY2Ug
aW5saW5lIGRpc3BsYXkgKGV4Y2VwdCBmb3IgZmxvYXRpbmcgZmlyc3QtbGV0dGVycykKICAgICAg
ICAgcHNldWRvU3R5bGUtPnNldERpc3BsYXkoIHBzZXVkb1N0eWxlLT5pc0Zsb2F0aW5nKCkgPyBC
TE9DSyA6IElOTElORSk7CkBAIC00NDI5LDggKzQ0MjksOCBAQCB2b2lkIFJlbmRlckJsb2NrOjp1
cGRhdGVGaXJzdExldHRlcigpCiAgICAgICAgICAgICAvLyBjb25zdHJ1Y3QgdGV4dCBmcmFnbWVu
dCBmb3IgdGhlIGZpcnN0IGxldHRlcgogICAgICAgICAgICAgUmVuZGVyVGV4dEZyYWdtZW50KiBs
ZXR0ZXIgPSAKICAgICAgICAgICAgICAgICBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclRleHRG
cmFnbWVudChyZW1haW5pbmdUZXh0LT5ub2RlKCksIG9sZFRleHQuZ2V0KCksIDAsIGxlbmd0aCk7
Ci0gICAgICAgICAgICBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkp
IFJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20ocHNldWRv
U3R5bGUpOworICAgICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdTdHlsZSA9IFJlbmRl
clN0eWxlOjpjcmVhdGUoKTsKKyAgICAgICAgICAgIG5ld1N0eWxlLT5pbmhlcml0RnJvbShwc2V1
ZG9TdHlsZS5nZXQoKSk7CiAgICAgICAgICAgICBsZXR0ZXItPnNldFN0eWxlKG5ld1N0eWxlKTsK
ICAgICAgICAgICAgIGZpcnN0TGV0dGVyLT5hZGRDaGlsZChsZXR0ZXIpOwogCkluZGV4OiByZW5k
ZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVy
Q29udGFpbmVyLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcvUmVuZGVyQ29udGFp
bmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3IEBAIHZvaWQgUmVuZGVyQ29u
dGFpbmVyOjphZGRDaGlsZChSZW5kZXJPYmoKICAgICAgICAgICAgIHRhYmxlID0gc3RhdGljX2Nh
c3Q8UmVuZGVyVGFibGUqPihhZnRlckNoaWxkKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICB0YWJsZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyVGFibGUoZG9jdW1lbnQoKSAvKiBp
cyBhbm9ueW1vdXMgKi8pOwotICAgICAgICAgICAgUmVuZGVyU3R5bGUgKm5ld1N0eWxlID0gbmV3
IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZTsKKyAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBuZXdT
dHlsZS0+aW5oZXJpdEZyb20oc3R5bGUoKSk7CiAgICAgICAgICAgICBuZXdTdHlsZS0+c2V0RGlz
cGxheShUQUJMRSk7CiAgICAgICAgICAgICB0YWJsZS0+c2V0U3R5bGUobmV3U3R5bGUpOwpAQCAt
MjYxLDcgKzI2MSw3IEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjp1cGRhdGVCZWZvcmVBZnRlckMK
ICAgICBpZiAoc3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gUmVuZGVyU3R5bGU6OkJFRk9SRSB8fCBz
dHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBSZW5kZXJTdHlsZTo6QUZURVIpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBSZW5kZXJTdHlsZSogcHNldWRvRWxlbWVudFN0eWxlID0gc3R5bGVkT2Jq
ZWN0LT5nZXRQc2V1ZG9TdHlsZSh0eXBlKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHBzZXVk
b0VsZW1lbnRTdHlsZSA9IHN0eWxlZE9iamVjdC0+Z2V0UHNldWRvU3R5bGUodHlwZSk7CiAgICAg
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IGJlZm9yZUFmdGVyQ29udGFpbmVyKHR5cGUpOwogCiAgICAg
Ly8gV2hldGhlciBvciBub3Qgd2UgY3VycmVudGx5IGhhdmUgZ2VuZXJhdGVkIGNvbnRlbnQgYXR0
YWNoZWQuCkBAIC0yODMsNyArMjgzLDcgQEAgdm9pZCBSZW5kZXJDb250YWluZXI6OnVwZGF0ZUJl
Zm9yZUFmdGVyQwogICAgIC8vIElmIHdlIGRvbid0IHdhbnQgZ2VuZXJhdGVkIGNvbnRlbnQgYW55
IGxvbmdlciwgb3IgaWYgd2UgaGF2ZSBnZW5lcmF0ZWQgY29udGVudCwgYnV0IGl0J3Mgbm8gbG9u
Z2VyCiAgICAgLy8gaWRlbnRpY2FsIHRvIHRoZSBuZXcgY29udGVudCBkYXRhIHdlIHdhbnQgdG8g
YnVpbGQgcmVuZGVyIG9iamVjdHMgZm9yLCB0aGVuIHdlIG51a2UgYWxsCiAgICAgLy8gb2YgdGhl
IG9sZCBnZW5lcmF0ZWQgY29udGVudC4KLSAgICBpZiAoIW5ld0NvbnRlbnRXYW50ZWQgfHwgKG9s
ZENvbnRlbnRQcmVzZW50ICYmIE5vZGU6OmRpZmYoY2hpbGQtPnN0eWxlKCksIHBzZXVkb0VsZW1l
bnRTdHlsZSkgPT0gTm9kZTo6RGV0YWNoKSkgeworICAgIGlmICghbmV3Q29udGVudFdhbnRlZCB8
fCAob2xkQ29udGVudFByZXNlbnQgJiYgTm9kZTo6ZGlmZihjaGlsZC0+c3R5bGUoKSwgcHNldWRv
RWxlbWVudFN0eWxlLmdldCgpKSA9PSBOb2RlOjpEZXRhY2gpKSB7CiAgICAgICAgIC8vIE51a2Ug
dGhlIGNoaWxkLiAKICAgICAgICAgaWYgKGNoaWxkICYmIGNoaWxkLT5zdHlsZSgpLT5zdHlsZVR5
cGUoKSA9PSB0eXBlKSB7CiAgICAgICAgICAgICBvbGRDb250ZW50UHJlc2VudCA9IGZhbHNlOwpA
QCAtMzI0LDggKzMyNCw4IEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjp1cGRhdGVCZWZvcmVBZnRl
ckMKICAgICAgICAgICAgICAgICAgICAgZ2VuQ2hpbGQtPnNldFN0eWxlKHBzZXVkb0VsZW1lbnRT
dHlsZSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZ2VuQ2hpbGQtPmlzSW1hZ2UoKSkgewog
ICAgICAgICAgICAgICAgICAgICAvLyBJbWFnZXMgZ2V0IGFuIGVtcHR5IHN0eWxlIHRoYXQgaW5o
ZXJpdHMgZnJvbSB0aGUgcHNldWRvLgotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlOwotICAgICAgICAgICAgICAg
ICAgICBzdHlsZS0+aW5oZXJpdEZyb20ocHNldWRvRWxlbWVudFN0eWxlKTsKKyAgICAgICAgICAg
ICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgc3R5bGUtPmluaGVyaXRGcm9tKHBzZXVkb0VsZW1lbnRT
dHlsZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGdlbkNoaWxkLT5zZXRTdHlsZShzdHls
ZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIC8vIE11c3Qg
YmUgYSBmaXJzdC1sZXR0ZXIgY29udGFpbmVyLiB1cGRhdGVGaXJzdExldHRlcigpIHdpbGwgdGFr
ZSBjYXJlIG9mIGl0LgpAQCAtMzUzLDggKzM1Myw4IEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjp1
cGRhdGVCZWZvcmVBZnRlckMKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgQ09OVEVOVF9PQkpFQ1Q6IHsKICAgICAgICAgICAgICAgICBSZW5kZXJJbWFnZUdlbmVyYXRl
ZENvbnRlbnQqIGltYWdlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJJbWFnZUdlbmVyYXRl
ZENvbnRlbnQoZG9jdW1lbnQoKSk7IC8vIGFub255bW91cyBvYmplY3QKLSAgICAgICAgICAgICAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlOwot
ICAgICAgICAgICAgICAgIHN0eWxlLT5pbmhlcml0RnJvbShwc2V1ZG9FbGVtZW50U3R5bGUpOwor
ICAgICAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgc3R5bGUtPmluaGVyaXRGcm9tKHBzZXVkb0VsZW1l
bnRTdHlsZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgaW1hZ2UtPnNldFN0eWxlKHN0eWxlKTsK
ICAgICAgICAgICAgICAgICBpZiAoU3R5bGVJbWFnZSogc3R5bGVJbWFnZSA9IGNvbnRlbnQtPm1f
Y29udGVudC5tX2ltYWdlKQogICAgICAgICAgICAgICAgICAgICBpbWFnZS0+c2V0U3R5bGVJbWFn
ZShzdHlsZUltYWdlKTsKQEAgLTM3MSw3ICszNzEsNyBAQCB2b2lkIFJlbmRlckNvbnRhaW5lcjo6
dXBkYXRlQmVmb3JlQWZ0ZXJDCiAgICAgICAgICAgICBpZiAoIWdlbmVyYXRlZENvbnRlbnRDb250
YWluZXIpIHsKICAgICAgICAgICAgICAgICAvLyBNYWtlIGEgZ2VuZXJhdGVkIGJveCB0aGF0IG1p
Z2h0IGJlIGFueSBkaXNwbGF5IHR5cGUgbm93IHRoYXQgd2UgYXJlIGFibGUgdG8gZHJpbGwgZG93
biBpbnRvIGNoaWxkcmVuCiAgICAgICAgICAgICAgICAgLy8gdG8gZmluZCB0aGUgb3JpZ2luYWwg
Y29udGVudCBwcm9wZXJseS4KLSAgICAgICAgICAgICAgICBnZW5lcmF0ZWRDb250ZW50Q29udGFp
bmVyID0gUmVuZGVyT2JqZWN0OjpjcmVhdGVPYmplY3QoZG9jdW1lbnQoKSwgcHNldWRvRWxlbWVu
dFN0eWxlKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZWRDb250ZW50Q29udGFpbmVyID0gUmVu
ZGVyT2JqZWN0OjpjcmVhdGVPYmplY3QoZG9jdW1lbnQoKSwgcHNldWRvRWxlbWVudFN0eWxlLmdl
dCgpKTsKICAgICAgICAgICAgICAgICBnZW5lcmF0ZWRDb250ZW50Q29udGFpbmVyLT5zZXRTdHls
ZShwc2V1ZG9FbGVtZW50U3R5bGUpOwogICAgICAgICAgICAgICAgIGFkZENoaWxkKGdlbmVyYXRl
ZENvbnRlbnRDb250YWluZXIsIGluc2VydEJlZm9yZSk7CiAgICAgICAgICAgICB9CkluZGV4OiBy
ZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRl
cmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgcmVu
ZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3
LDggKzEwNyw4IEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnVwZGF0ZUZyb20KICAg
ICAgICAgbV9idXR0b24gPSBuZXcgSFRNTEZpbGVVcGxvYWRJbm5lckJ1dHRvbkVsZW1lbnQoZG9j
dW1lbnQoKSwgaW5wdXRFbGVtZW50KTsKICAgICAgICAgbV9idXR0b24tPnNldElucHV0VHlwZSgi
YnV0dG9uIik7CiAgICAgICAgIG1fYnV0dG9uLT5zZXRWYWx1ZShmaWxlQnV0dG9uQ2hvb3NlRmls
ZUxhYmVsKCkpOwotICAgICAgICBSZW5kZXJTdHlsZSogYnV0dG9uU3R5bGUgPSBjcmVhdGVCdXR0
b25TdHlsZShzdHlsZSgpKTsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1fYnV0
dG9uLT5jcmVhdGVSZW5kZXJlcihyZW5kZXJBcmVuYSgpLCBidXR0b25TdHlsZSk7CisgICAgICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gYnV0dG9uU3R5bGUgPSBjcmVhdGVCdXR0b25TdHlsZShzdHls
ZSgpKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1fYnV0dG9uLT5jcmVhdGVS
ZW5kZXJlcihyZW5kZXJBcmVuYSgpLCBidXR0b25TdHlsZS5nZXQoKSk7CiAgICAgICAgIG1fYnV0
dG9uLT5zZXRSZW5kZXJlcihyZW5kZXJlcik7CiAgICAgICAgIHJlbmRlcmVyLT5zZXRTdHlsZShi
dXR0b25TdHlsZSk7CiAgICAgICAgIHJlbmRlcmVyLT51cGRhdGVGcm9tRWxlbWVudCgpOwpAQCAt
MTM0LDExICsxMzQsMTEgQEAgaW50IFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjptYXhGaWxlbmFt
ZQogICAgICAgICAtIChtX2ZpbGVDaG9vc2VyLT5pY29uKCkgPyBpY29uV2lkdGggKyBpY29uRmls
ZW5hbWVTcGFjaW5nIDogMCkpOwogfQogCi1SZW5kZXJTdHlsZSogUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2w6OmNyZWF0ZUJ1dHRvblN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkg
Y29uc3QKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpj
cmVhdGVCdXR0b25TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CiB7
Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZ2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkZJ
TEVfVVBMT0FEX0JVVFRPTik7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IGdldFBz
ZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpGSUxFX1VQTE9BRF9CVVRUT04pOwogICAgIGlmICghc3R5
bGUpIHsKLSAgICAgICAgc3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlOwor
ICAgICAgICBzdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKICAgICAgICAgaWYgKHBhcmVu
dFN0eWxlKQogICAgICAgICAgICAgc3R5bGUtPmluaGVyaXRGcm9tKHBhcmVudFN0eWxlKTsKICAg
ICB9CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAkocmV2aXNpb24gMzc1ODYp
CisrKyByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAkod29ya2luZyBjb3B5KQpA
QCAtNTcsNyArNTcsNyBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgaW50IG1heEZpbGVu
YW1lV2lkdGgoKSBjb25zdDsKLSAgICBSZW5kZXJTdHlsZSogY3JlYXRlQnV0dG9uU3R5bGUoY29u
c3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBjcmVhdGVCdXR0b25TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
IGNvbnN0OwogCiAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IG1fYnV0dG9uOwogICAgIFJl
ZlB0cjxGaWxlQ2hvb3Nlcj4gbV9maWxlQ2hvb3NlcjsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJG
bG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAJKHJldmlzaW9u
IDM3NTg2KQorKysgcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw3ICs0Nyw3IEBAIFJlbmRlckZsb3c6On5SZW5kZXJGbG93KCkKIAogI2VuZGlmCiAKLVJlbmRl
ckZsb3cqIFJlbmRlckZsb3c6OmNyZWF0ZUFub255bW91c0Zsb3coRG9jdW1lbnQqIGRvYywgUmVu
ZGVyU3R5bGUqIHN0eWxlKQorUmVuZGVyRmxvdyogUmVuZGVyRmxvdzo6Y3JlYXRlQW5vbnltb3Vz
RmxvdyhEb2N1bWVudCogZG9jLCBjb25zdCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiYgc3R5bGUp
CiB7CiAgICAgUmVuZGVyRmxvdyogcmVzdWx0OwogICAgIGlmIChzdHlsZS0+ZGlzcGxheSgpID09
IElOTElORSkKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJGbG93LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVu
ZGVyaW5nL1JlbmRlckZsb3cuaAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcvUmVuZGVy
Rmxvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgYWRkQ2hpbGRUb0Zsb3coUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJP
YmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAKLSAgICBz
dGF0aWMgUmVuZGVyRmxvdyogY3JlYXRlQW5vbnltb3VzRmxvdyhEb2N1bWVudCosIFJlbmRlclN0
eWxlKik7CisgICAgc3RhdGljIFJlbmRlckZsb3cqIGNyZWF0ZUFub255bW91c0Zsb3coRG9jdW1l
bnQqLCBjb25zdCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiYpOwogCiAgICAgdm9pZCBleHRyYWN0
TGluZUJveChJbmxpbmVGbG93Qm94Kik7CiAgICAgdm9pZCBhdHRhY2hMaW5lQm94KElubGluZUZs
b3dCb3gqKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgdm9p
ZCBSZW5kZXJJbmxpbmU6OmFkZENoaWxkVG9GbG93KFJlbmRlcgogICAgICAgICAvLyBpbmxpbmUg
aW50byBjb250aW51YXRpb25zLiAgVGhpcyBpbnZvbHZlcyBjcmVhdGluZyBhbiBhbm9ueW1vdXMg
YmxvY2sgYm94IHRvIGhvbGQKICAgICAgICAgLy8gfG5ld0NoaWxkfC4gIFdlIHRoZW4gbWFrZSB0
aGF0IGJsb2NrIGJveCBhIGNvbnRpbnVhdGlvbiBvZiB0aGlzIGlubGluZS4gIFdlIHRha2UgYWxs
IG9mCiAgICAgICAgIC8vIHRoZSBjaGlsZHJlbiBhZnRlciB8YmVmb3JlQ2hpbGR8IGFuZCBwdXQg
dGhlbSBpbiBhIGNsb25lIG9mIHRoaXMgb2JqZWN0LgotICAgICAgICBSZW5kZXJTdHlsZSogbmV3
U3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCk7CisgICAgICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgICAg
IG5ld1N0eWxlLT5pbmhlcml0RnJvbShzdHlsZSgpKTsKICAgICAgICAgbmV3U3R5bGUtPnNldERp
c3BsYXkoQkxPQ0spOwogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4MSw3ICsyNDgxLDcg
QEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFJlbmRlclN0eQogdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQogewogICAgIFJlbmRlck9iamVjdCogYWN0
dWFsUmVuZGVyZXIgPSBtX29iamVjdC0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkgPyBtX29iamVj
dC0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKS0+cmVuZGVyZXIoKSA6IG1fb2JqZWN0Owot
ICAgIFJlbmRlclN0eWxlKiBjb3JuZXIgPSBtX29iamVjdC0+aGFzT3ZlcmZsb3dDbGlwKCkgPyBh
Y3R1YWxSZW5kZXJlci0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNDUk9MTEJBUl9DT1JO
RVIsIGFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpLCBmYWxzZSkgOiAwOworICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gY29ybmVyID0gbV9vYmplY3QtPmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVu
ZGVyZXItPmdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTQ1JPTExCQVJfQ09STkVSLCBhY3R1
YWxSZW5kZXJlci0+c3R5bGUoKSwgZmFsc2UpIDogMDsKICAgICBpZiAoY29ybmVyKSB7CiAgICAg
ICAgIGlmICghbV9zY3JvbGxDb3JuZXIpIHsKICAgICAgICAgICAgIG1fc2Nyb2xsQ29ybmVyID0g
bmV3IChtX29iamVjdC0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU2Nyb2xsYmFyUGFydChtX29iamVj
dC0+ZG9jdW1lbnQoKSk7CkBAIC0yNDk3LDcgKzI0OTcsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVTY3JvbGxDb3JuZXJTdHlsCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVSZXNpemVyU3R5
bGUoKQogewogICAgIFJlbmRlck9iamVjdCogYWN0dWFsUmVuZGVyZXIgPSBtX29iamVjdC0+bm9k
ZSgpLT5pc0VsZW1lbnROb2RlKCkgPyBtX29iamVjdC0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5v
ZGUoKS0+cmVuZGVyZXIoKSA6IG1fb2JqZWN0OwotICAgIFJlbmRlclN0eWxlKiByZXNpemVyID0g
bV9vYmplY3QtPmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFBzZXVkb1N0
eWxlKFJlbmRlclN0eWxlOjpSRVNJWkVSLCBhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSwgZmFsc2Up
IDogMDsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlc2l6ZXIgPSBtX29iamVjdC0+aGFzT3Zl
cmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6
OlJFU0laRVIsIGFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpLCBmYWxzZSkgOiAwOwogICAgIGlmIChy
ZXNpemVyKSB7CiAgICAgICAgIGlmICghbV9yZXNpemVyKSB7CiAgICAgICAgICAgICBtX3Jlc2l6
ZXIgPSBuZXcgKG1fb2JqZWN0LT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTY3JvbGxiYXJQYXJ0KG1f
b2JqZWN0LT5kb2N1bWVudCgpKTsKQEAgLTI1MjQsNyArMjUyNCw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OmNyZWF0ZVJlZmxlY3Rpb24oKQogCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVSZWZsZWN0
aW9uU3R5bGUoKQogewotICAgIFJlbmRlclN0eWxlKiBuZXdTdHlsZSA9IG5ldyAocmVuZGVyZXIo
KS0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwogICAgIG5ld1N0eWxlLT5pbmhlcml0
RnJvbShyZW5kZXJlcigpLT5zdHlsZSgpKTsKICAgICAKICAgICAvLyBNYXAgaW4gb3VyIHRyYW5z
Zm9ybS4KSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJp
bmcvUmVuZGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxNSArNTQsMTMgQEAg
dm9pZCBSZW5kZXJMaXN0SXRlbTo6c3R5bGVEaWRDaGFuZ2UoUmVuZAogCiAgICAgaWYgKHN0eWxl
KCktPmxpc3RTdHlsZVR5cGUoKSAhPSBMTk9ORSB8fAogICAgICAgICAoc3R5bGUoKS0+bGlzdFN0
eWxlSW1hZ2UoKSAmJiAhc3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKS0+ZXJyb3JPY2N1cnJlZCgp
KSkgewotICAgICAgICBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkp
IFJlbmRlclN0eWxlOwotICAgICAgICBuZXdTdHlsZS0+cmVmKCk7CisgICAgICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgICAgIC8v
IFRoZSBtYXJrZXIgYWx3YXlzIGluaGVyaXRzIGZyb20gdGhlIGxpc3QgaXRlbSwgcmVnYXJkbGVz
cyBvZiB3aGVyZSBpdCBtaWdodCBlbmQKICAgICAgICAgLy8gdXAgKGUuZy4sIGluIHNvbWUgZGVl
cGx5IG5lc3RlZCBsaW5lIGJveCkuIFNlZSBDU1MzIHNwZWMuCiAgICAgICAgIG5ld1N0eWxlLT5p
bmhlcml0RnJvbShzdHlsZSgpKTsgCiAgICAgICAgIGlmICghbV9tYXJrZXIpCiAgICAgICAgICAg
ICBtX21hcmtlciA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyTGlzdE1hcmtlcih0aGlzKTsK
ICAgICAgICAgbV9tYXJrZXItPnNldFN0eWxlKG5ld1N0eWxlKTsKLSAgICAgICAgbmV3U3R5bGUt
PmRlcmVmKHJlbmRlckFyZW5hKCkpOwogICAgIH0gZWxzZSBpZiAobV9tYXJrZXIpIHsKICAgICAg
ICAgbV9tYXJrZXItPmRlc3Ryb3koKTsKICAgICAgICAgbV9tYXJrZXIgPSAwOwpJbmRleDogcmVu
ZGVyaW5nL1JlbmRlck1lZGlhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyTWVk
aWEuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0Niw5ICsxNDYsOSBAQCB2b2lkIFJlbmRlck1lZGlhOjpjcmVhdGVD
b250cm9sc1NoYWRvd1JvCiB2b2lkIFJlbmRlck1lZGlhOjpjcmVhdGVQYW5lbCgpCiB7CiAgICAg
QVNTRVJUKCFtX3BhbmVsKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBnZXRQc2V1ZG9TdHls
ZShSZW5kZXJTdHlsZTo6TUVESUFfQ09OVFJPTFNfUEFORUwpOworICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gc3R5bGUgPSBnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6TUVESUFfQ09OVFJPTFNf
UEFORUwpOwogICAgIG1fcGFuZWwgPSBuZXcgSFRNTERpdkVsZW1lbnQoZG9jdW1lbnQoKSk7Ci0g
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1fcGFuZWwtPmNyZWF0ZVJlbmRlcmVyKHJlbmRl
ckFyZW5hKCksIHN0eWxlKTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9wYW5lbC0+
Y3JlYXRlUmVuZGVyZXIocmVuZGVyQXJlbmEoKSwgc3R5bGUuZ2V0KCkpOwogICAgIGlmIChyZW5k
ZXJlcikgewogICAgICAgICBtX3BhbmVsLT5zZXRSZW5kZXJlcihyZW5kZXJlcik7CiAgICAgICAg
IHJlbmRlcmVyLT5zZXRTdHlsZShzdHlsZSk7CkBAIC0xOTcsOSArMTk3LDkgQEAgdm9pZCBSZW5k
ZXJNZWRpYTo6Y3JlYXRlVGltZWxpbmUoKQogdm9pZCBSZW5kZXJNZWRpYTo6Y3JlYXRlVGltZURp
c3BsYXkoKQogewogICAgIEFTU0VSVCghbV90aW1lRGlzcGxheSk7Ci0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gZ2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6Ok1FRElBX0NPTlRST0xTX1RJTUVf
RElTUExBWSk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IGdldFBzZXVkb1N0eWxl
KFJlbmRlclN0eWxlOjpNRURJQV9DT05UUk9MU19USU1FX0RJU1BMQVkpOwogICAgIG1fdGltZURp
c3BsYXkgPSBuZXcgSFRNTERpdkVsZW1lbnQoZG9jdW1lbnQoKSk7Ci0gICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IG1fdGltZURpc3BsYXktPmNyZWF0ZVJlbmRlcmVyKHJlbmRlckFyZW5hKCks
IHN0eWxlKTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV90aW1lRGlzcGxheS0+Y3Jl
YXRlUmVuZGVyZXIocmVuZGVyQXJlbmEoKSwgc3R5bGUuZ2V0KCkpOwogICAgIGlmIChyZW5kZXJl
cikgewogICAgICAgICBtX3RpbWVEaXNwbGF5LT5zZXRSZW5kZXJlcihyZW5kZXJlcik7CiAgICAg
ICAgIHJlbmRlcmVyLT5zZXRTdHlsZShzdHlsZSk7CkBAIC0zNDAsNyArMzQwLDcgQEAgdm9pZCBS
ZW5kZXJNZWRpYTo6Y2hhbmdlT3BhY2l0eShIVE1MRWxlbQogewogICAgIGlmICghZSB8fCAhZS0+
cmVuZGVyZXIoKSB8fCAhZS0+cmVuZGVyZXIoKS0+c3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIFJlbmRlclN0eWxlKiBzID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgqZS0+
cmVuZGVyZXIoKS0+c3R5bGUoKSk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzID0gUmVuZGVy
U3R5bGU6OmNsb25lKGUtPnJlbmRlcmVyKCktPnN0eWxlKCkpOwogICAgIHMtPnNldE9wYWNpdHko
b3BhY2l0eSk7CiAgICAgLy8gei1pbmRleCBjYW4ndCBiZSBhdXRvIGlmIG9wYWNpdHkgaXMgdXNl
ZAogICAgIHMtPnNldFpJbmRleCgwKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAzNzU4
NikKKysrIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDM4
LDcgKzIwMzgsNyBAQCBDb2xvciBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkJhY2tncm91bmRDCiB7
CiAgICAgQ29sb3IgY29sb3I7CiAgICAgaWYgKHN0eWxlKCktPnVzZXJTZWxlY3QoKSAhPSBTRUxF
Q1RfTk9ORSkgewotICAgICAgICBSZW5kZXJTdHlsZSogcHNldWRvU3R5bGUgPSBnZXRQc2V1ZG9T
dHlsZShSZW5kZXJTdHlsZTo6U0VMRUNUSU9OKTsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBwc2V1ZG9TdHlsZSA9IGdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTRUxFQ1RJT04pOwog
ICAgICAgICBpZiAocHNldWRvU3R5bGUgJiYgcHNldWRvU3R5bGUtPmJhY2tncm91bmRDb2xvcigp
LmlzVmFsaWQoKSkKICAgICAgICAgICAgIGNvbG9yID0gcHNldWRvU3R5bGUtPmJhY2tncm91bmRD
b2xvcigpLmJsZW5kV2l0aFdoaXRlKCk7CiAgICAgICAgIGVsc2UKQEAgLTIwNTYsNyArMjA1Niw3
IEBAIENvbG9yIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uRm9yZWdyb3VuZEMKICAgICBpZiAoc3R5
bGUoKS0+dXNlclNlbGVjdCgpID09IFNFTEVDVF9OT05FKQogICAgICAgICByZXR1cm4gY29sb3I7
CiAKLSAgICBpZiAoUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gZ2V0UHNldWRvU3R5bGUoUmVu
ZGVyU3R5bGU6OlNFTEVDVElPTikpIHsKKyAgICBpZiAoUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1
ZG9TdHlsZSA9IGdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTRUxFQ1RJT04pKSB7CiAgICAg
ICAgIGNvbG9yID0gcHNldWRvU3R5bGUtPnRleHRGaWxsQ29sb3IoKTsKICAgICAgICAgaWYgKCFj
b2xvci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBjb2xvciA9IHBzZXVkb1N0eWxlLT5jb2xvcigp
OwpAQCAtMjExMCw4ICsyMTEwLDggQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvblN0YXJ0
RW5kKGludAogCiBSZW5kZXJCbG9jayogUmVuZGVyT2JqZWN0OjpjcmVhdGVBbm9ueW1vdXNCbG9j
aygpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIG5ld1N0eWxlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBS
ZW5kZXJTdHlsZSgpOwotICAgIG5ld1N0eWxlLT5pbmhlcml0RnJvbShtX3N0eWxlKTsKKyAgICBS
ZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAg
IG5ld1N0eWxlLT5pbmhlcml0RnJvbShtX3N0eWxlLmdldCgpKTsKICAgICBuZXdTdHlsZS0+c2V0
RGlzcGxheShCTE9DSyk7CiAKICAgICBSZW5kZXJCbG9jayogbmV3Qm94ID0gbmV3IChyZW5kZXJB
cmVuYSgpKSBSZW5kZXJCbG9jayhkb2N1bWVudCgpIC8qIGFub255bW91cyBib3ggKi8pOwpAQCAt
MjE1NCwzMyArMjE1NCwzMSBAQCB2b2lkIFJlbmRlck9iamVjdDo6aGFuZGxlRHluYW1pY0Zsb2F0
UG9zCiAgICAgfQogfQogCi12b2lkIFJlbmRlck9iamVjdDo6c2V0QW5pbWF0YWJsZVN0eWxlKFJl
bmRlclN0eWxlKiBzdHlsZSkKK3ZvaWQgUmVuZGVyT2JqZWN0OjpzZXRBbmltYXRhYmxlU3R5bGUo
Y29uc3QgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4mIHN0eWxlKQogewogICAgIGlmICghaXNUZXh0
KCkgJiYgc3R5bGUpCi0gICAgICAgIHN0eWxlID0gYW5pbWF0aW9uKCktPnVwZGF0ZUFuaW1hdGlv
bnModGhpcywgc3R5bGUpOwotCi0gICAgc2V0U3R5bGUoc3R5bGUpOworICAgICAgICBzZXRTdHls
ZShhbmltYXRpb24oKS0+dXBkYXRlQW5pbWF0aW9ucyh0aGlzLCBzdHlsZS5nZXQoKSkpOworICAg
IGVsc2UKKyAgICAgICAgc2V0U3R5bGUoc3R5bGUpOwogfQogCi12b2lkIFJlbmRlck9iamVjdDo6
c2V0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQordm9pZCBSZW5kZXJPYmplY3Q6OnNl
dFN0eWxlKGNvbnN0IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+JiBzdHlsZSkKIHsKICAgICBpZiAo
bV9zdHlsZSA9PSBzdHlsZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVuZGVyU3R5bGU6OkRp
ZmYgZGlmZiA9IFJlbmRlclN0eWxlOjpFcXVhbDsKICAgICBpZiAobV9zdHlsZSkKLSAgICAgICAg
ZGlmZiA9IG1fc3R5bGUtPmRpZmYoc3R5bGUpOworICAgICAgICBkaWZmID0gbV9zdHlsZS0+ZGlm
ZihzdHlsZS5nZXQoKSk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIG5vIGxheWVyKCksIGp1c3QgdHJl
YXQgYSBSZXBhaW50TGF5ZXIgaGludCBhcyBhIG5vcm1hbCBSZXBhaW50LgogICAgIGlmIChkaWZm
ID09IFJlbmRlclN0eWxlOjpSZXBhaW50TGF5ZXIgJiYgIWhhc0xheWVyKCkpCiAgICAgICAgIGRp
ZmYgPSBSZW5kZXJTdHlsZTo6UmVwYWludDsKIAotICAgIHN0eWxlV2lsbENoYW5nZShkaWZmLCBz
dHlsZSk7CisgICAgc3R5bGVXaWxsQ2hhbmdlKGRpZmYsIHN0eWxlLmdldCgpKTsKICAgICAKLSAg
ICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSBtX3N0eWxlOwotICAgIG1fc3R5bGUgPSBjb25zdF9j
YXN0PFJlbmRlclN0eWxlKj4oc3R5bGUpOwotICAgIGlmIChtX3N0eWxlKQotICAgICAgICBtX3N0
eWxlLT5yZWYoKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG9sZFN0eWxlID0gbV9zdHlsZTsK
KyAgICBtX3N0eWxlID0gc3R5bGU7CiAKICAgICB1cGRhdGVGaWxsSW1hZ2VzKG9sZFN0eWxlID8g
b2xkU3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSA6IDAsIG1fc3R5bGUgPyBtX3N0eWxlLT5iYWNr
Z3JvdW5kTGF5ZXJzKCkgOiAwKTsKICAgICB1cGRhdGVGaWxsSW1hZ2VzKG9sZFN0eWxlID8gb2xk
U3R5bGUtPm1hc2tMYXllcnMoKSA6IDAsIG1fc3R5bGUgPyBtX3N0eWxlLT5tYXNrTGF5ZXJzKCkg
OiAwKTsKQEAgLTIxODgsMjIgKzIxODYsMTQgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNldFN0eWxl
KGNvbnN0IFJlbmRlcgogICAgIHVwZGF0ZUltYWdlKG9sZFN0eWxlID8gb2xkU3R5bGUtPmJvcmRl
ckltYWdlKCkuaW1hZ2UoKSA6IDAsIG1fc3R5bGUgPyBtX3N0eWxlLT5ib3JkZXJJbWFnZSgpLmlt
YWdlKCkgOiAwKTsKICAgICB1cGRhdGVJbWFnZShvbGRTdHlsZSA/IG9sZFN0eWxlLT5tYXNrQm94
SW1hZ2UoKS5pbWFnZSgpIDogMCwgbV9zdHlsZSA/IG1fc3R5bGUtPm1hc2tCb3hJbWFnZSgpLmlt
YWdlKCkgOiAwKTsKIAotICAgIHN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKLQotICAg
IGlmIChvbGRTdHlsZSkgewotICAgICAgICBvbGRTdHlsZS0+ZGVyZWYocmVuZGVyQXJlbmEoKSk7
Ci0gICAgfQorICAgIHN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlLmdldCgpKTsKIH0KIAot
dm9pZCBSZW5kZXJPYmplY3Q6OnNldFN0eWxlSW50ZXJuYWwoUmVuZGVyU3R5bGUqIHN0eWxlKQor
dm9pZCBSZW5kZXJPYmplY3Q6OnNldFN0eWxlSW50ZXJuYWwoY29uc3QgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4mIHN0eWxlKQogewogICAgIGlmIChtX3N0eWxlID09IHN0eWxlKQogICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKG1fc3R5bGUpCi0gICAgICAgIG1fc3R5bGUtPmRlcmVmKHJlbmRlckFy
ZW5hKCkpOwogICAgIG1fc3R5bGUgPSBzdHlsZTsKLSAgICBpZiAobV9zdHlsZSkKLSAgICAgICAg
bV9zdHlsZS0+cmVmKCk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpzdHlsZVdpbGxDaGFuZ2Uo
UmVuZGVyU3R5bGU6OkRpZmYgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQpAQCAt
MjU4MSw4ICsyNTcxLDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFyZW5hRGVsZXRlKFJlbmRlckFy
ZQogCiAgICAgICAgIGlmIChTdHlsZUltYWdlKiBtYXNrQm94SW1hZ2UgPSBtX3N0eWxlLT5tYXNr
Qm94SW1hZ2UoKS5pbWFnZSgpKQogICAgICAgICAgICAgbWFza0JveEltYWdlLT5yZW1vdmVDbGll
bnQodGhpcyk7Ci0KLSAgICAgICAgbV9zdHlsZS0+ZGVyZWYoYXJlbmEpOwogICAgIH0KIAogI2lm
bmRlZiBOREVCVUcKQEAgLTI4MDIsMjcgKzI3OTAsMjcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRl
bGV0ZUxpbmVCb3hXcmFwcGVyKAogUmVuZGVyU3R5bGUqIFJlbmRlck9iamVjdDo6Zmlyc3RMaW5l
U3R5bGUoKSBjb25zdAogewogICAgIGlmICghZG9jdW1lbnQoKS0+dXNlc0ZpcnN0TGluZVJ1bGVz
KCkpCi0gICAgICAgIHJldHVybiBtX3N0eWxlOworICAgICAgICByZXR1cm4gbV9zdHlsZS5nZXQo
KTsKIAotICAgIFJlbmRlclN0eWxlKiBzID0gbV9zdHlsZTsKKyAgICBSZW5kZXJTdHlsZSogcyA9
IG1fc3R5bGUuZ2V0KCk7CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmogPSBpc1RleHQoKSA/
IHBhcmVudCgpIDogdGhpczsKICAgICBpZiAob2JqLT5pc0Jsb2NrRmxvdygpKSB7CiAgICAgICAg
IFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jayA9IG9iai0+Zmlyc3RMaW5lQmxvY2soKTsKICAg
ICAgICAgaWYgKGZpcnN0TGluZUJsb2NrKQotICAgICAgICAgICAgcyA9IGZpcnN0TGluZUJsb2Nr
LT5nZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6RklSU1RfTElORSwgc3R5bGUoKSk7CisgICAg
ICAgICAgICBzID0gZmlyc3RMaW5lQmxvY2stPmdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpG
SVJTVF9MSU5FLCBzdHlsZSgpKS5nZXQoKTsKICAgICB9IGVsc2UgaWYgKCFvYmotPmlzQW5vbnlt
b3VzKCkgJiYgb2JqLT5pc0lubGluZUZsb3coKSkgewogICAgICAgICBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSBvYmotPnBhcmVudCgpLT5maXJzdExpbmVTdHlsZSgpOwogICAgICAgICBpZiAo
cGFyZW50U3R5bGUgIT0gb2JqLT5wYXJlbnQoKS0+c3R5bGUoKSkgewogICAgICAgICAgICAgLy8g
QSBmaXJzdC1saW5lIHN0eWxlIGlzIGluIGVmZmVjdC4gV2UgbmVlZCB0byBjYWNoZSBhIGZpcnN0
LWxpbmUgc3R5bGUKICAgICAgICAgICAgIC8vIGZvciBvdXJzZWx2ZXMuCiAgICAgICAgICAgICBz
dHlsZSgpLT5zZXRIYXNQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6RklSU1RfTElORV9JTkhFUklU
RUQpOwotICAgICAgICAgICAgcyA9IG9iai0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkZJ
UlNUX0xJTkVfSU5IRVJJVEVELCBwYXJlbnRTdHlsZSk7CisgICAgICAgICAgICBzID0gb2JqLT5n
ZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6RklSU1RfTElORV9JTkhFUklURUQsIHBhcmVudFN0
eWxlKS5nZXQoKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gczsKIH0KIAotUmVuZGVy
U3R5bGUqIFJlbmRlck9iamVjdDo6Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlBzZXVkb0lk
IHBzZXVkbywgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBib29sIHVzZUNhY2hlZFN0eWxlKSBj
b25zdAorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyT2JqZWN0OjpnZXRQc2V1ZG9TdHls
ZShSZW5kZXJTdHlsZTo6UHNldWRvSWQgcHNldWRvLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUs
IGJvb2wgdXNlQ2FjaGVkU3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKHBzZXVkbyA8IFJlbmRlclN0
eWxlOjpGSVJTVF9JTlRFUk5BTF9QU0VVRE9JRCAmJiAhc3R5bGUoKS0+aGFzUHNldWRvU3R5bGUo
cHNldWRvKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yODMwLDkgKzI4MTgsMTMgQEAgUmVuZGVy
U3R5bGUqIFJlbmRlck9iamVjdDo6Z2V0UHNldWRvU3R5bAogICAgIGlmICghcGFyZW50U3R5bGUp
CiAgICAgICAgIHBhcmVudFN0eWxlID0gc3R5bGUoKTsKIAotICAgIFJlbmRlclN0eWxlKiByZXN1
bHQgPSB1c2VDYWNoZWRTdHlsZSA/IHN0eWxlKCktPmdldFBzZXVkb1N0eWxlKHBzZXVkbykgOiAw
OwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgaWYgKHVzZUNh
Y2hlZFN0eWxlKSB7CisgICAgICAgIFJlbmRlclN0eWxlKiBjYWNoZWRTdHlsZSA9IHN0eWxlKCkt
PmdldENhY2hlZFBzZXVkb1N0eWxlKHBzZXVkbyk7CisgICAgICAgIGlmIChjYWNoZWRTdHlsZSkK
KyAgICAgICAgICAgIHJldHVybiBjYWNoZWRTdHlsZTsKKyAgICB9CisgICAgCisgICAgUmVmUHRy
PFJlbmRlclN0eWxlPiByZXN1bHQ7CiAKICAgICBOb2RlKiBub2RlID0gZWxlbWVudCgpOwogICAg
IHdoaWxlIChub2RlICYmICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCkBAIC0yODQ1LDEwICsyODM3
LDEwIEBAIFJlbmRlclN0eWxlKiBSZW5kZXJPYmplY3Q6OmdldFBzZXVkb1N0eWwKICAgICAgICAg
cmVzdWx0LT5zZXRTdHlsZVR5cGUoUmVuZGVyU3R5bGU6OkZJUlNUX0xJTkVfSU5IRVJJVEVEKTsK
ICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0ID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rvcigp
LT5wc2V1ZG9TdHlsZUZvckVsZW1lbnQocHNldWRvLCBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9k
ZSksIHBhcmVudFN0eWxlKTsKLSAgICBpZiAocmVzdWx0ICYmIHVzZUNhY2hlZFN0eWxlKSB7Ci0g
ICAgICAgIHN0eWxlKCktPmFkZFBzZXVkb1N0eWxlKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdC0+
ZGVyZWYoZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSk7Ci0gICAgfQorICAgIAorICAgIGlmIChy
ZXN1bHQgJiYgdXNlQ2FjaGVkU3R5bGUpCisgICAgICAgIHN0eWxlKCktPmFkZENhY2hlZFBzZXVk
b1N0eWxlKHJlc3VsdCk7CisKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMzc2LDcgKzM3Niw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpbmNsdWRlSG9yaXpv
bnRhbFNjcm9sbGJhclNpemUoKSBjb25zdCB7IHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiAo
c3R5bGUoKS0+b3ZlcmZsb3dYKCkgPT0gT1NDUk9MTCB8fCBzdHlsZSgpLT5vdmVyZmxvd1goKSA9
PSBPQVVUTyk7IH0KIAogcHVibGljOgotICAgIFJlbmRlclN0eWxlKiBnZXRQc2V1ZG9TdHlsZShS
ZW5kZXJTdHlsZTo6UHNldWRvSWQsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIGJvb2wg
dXNlQ2FjaGVkU3R5bGUgPSB0cnVlKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6UHNldWRvSWQsIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSA9IDAsIGJvb2wgdXNlQ2FjaGVkU3R5bGUgPSB0cnVlKSBjb25zdDsKIAogICAgIHZv
aWQgdXBkYXRlRHJhZ1N0YXRlKGJvb2wgZHJhZ09uKTsKIApAQCAtNTM5LDE0ICs1MzksMTQgQEAg
cHVibGljOgogICAgIC8vIENhbGxlZCB0byB1cGRhdGUgYSBzdHlsZSB0aGF0IGlzIGFsbG93ZWQg
dG8gdHJpZ2dlciBhbmltYXRpb25zLgogICAgIC8vIEZJWE1FOiBSaWdodCBub3cgdGhpcyB3aWxs
IHR5cGljYWxseSBiZSBjYWxsZWQgb25seSB3aGVuIHVwZGF0aW5nIGhhcHBlbnMgZnJvbSB0aGUg
RE9NIG9uIGV4cGxpY2l0IGVsZW1lbnRzLgogICAgIC8vIFdlIGRvbid0IHlldCBoYW5kbGUgZ2Vu
ZXJhdGVkIGNvbnRlbnQgYW5pbWF0aW9uIHN1Y2ggYXMgZmlyc3QtbGV0dGVyIG9yIGJlZm9yZS9h
ZnRlciAod2UnbGwgd29ycnkgYWJvdXQgdGhpcyBsYXRlcikuCi0gICAgdm9pZCBzZXRBbmltYXRh
YmxlU3R5bGUoUmVuZGVyU3R5bGUqKTsKKyAgICB2b2lkIHNldEFuaW1hdGFibGVTdHlsZShjb25z
dCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiYpOwogCiAgICAgLy8gU2V0IHRoZSBzdHlsZSBvZiB0
aGUgb2JqZWN0IGFuZCB1cGRhdGUgdGhlIHN0YXRlIG9mIHRoZSBvYmplY3QgYWNjb3JkaW5nbHku
Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKik7CisgICAgdmly
dHVhbCB2b2lkIHNldFN0eWxlKGNvbnN0IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+Jik7CiAKICAg
ICAvLyBVcGRhdGVzIG9ubHkgdGhlIGxvY2FsIHN0eWxlIHB0ciBvZiB0aGUgb2JqZWN0LiAgRG9l
cyBub3QgdXBkYXRlIHRoZSBzdGF0ZSBvZiB0aGUgb2JqZWN0LAogICAgIC8vIGFuZCBzbyBvbmx5
IHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgc3R5bGUgaXMga25vd24gbm90IHRvIGhhdmUgY2hh
bmdlZCAob3IgZnJvbSBzZXRTdHlsZSkuCi0gICAgdm9pZCBzZXRTdHlsZUludGVybmFsKFJlbmRl
clN0eWxlKik7CisgICAgdm9pZCBzZXRTdHlsZUludGVybmFsKGNvbnN0IFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+Jik7CiAKICAgICAvLyByZXR1cm5zIHRoZSBjb250YWluaW5nIGJsb2NrIGxldmVs
IGVsZW1lbnQgZm9yIHRoaXMgZWxlbWVudC4KICAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Js
b2NrKCkgY29uc3Q7CkBAIC02OTUsNyArNjk1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50
IG1pblByZWZXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIGludCBtYXhQ
cmVmV2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQogICAgIFJlbmRlclN0eWxlKiBmaXJzdExpbmVT
dHlsZSgpIGNvbnN0OwogICAgIFJlbmRlclN0eWxlKiBzdHlsZShib29sIGZpcnN0TGluZSkgY29u
c3QgeyByZXR1cm4gZmlyc3RMaW5lID8gZmlyc3RMaW5lU3R5bGUoKSA6IHN0eWxlKCk7IH0KIApA
QCAtOTExLDcgKzkxMSw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGFyZW5hRGVsZXRlKFJlbmRl
ckFyZW5hKiwgdm9pZCogb2JqZWN0QmFzZSk7CiAKIHByaXZhdGU6Ci0gICAgUmVuZGVyU3R5bGUq
IG1fc3R5bGU7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwogCiAgICAgTm9kZSog
bV9ub2RlOwogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHJlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgcmVu
ZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTYgKzM1LDE2
IEBAIFJlbmRlclNWR0Jsb2NrOjpSZW5kZXJTVkdCbG9jayhTVkdFbGVtZW4KIHsKIH0KIAotdm9p
ZCBSZW5kZXJTVkdCbG9jazo6c2V0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSAKK3Zv
aWQgUmVuZGVyU1ZHQmxvY2s6OnNldFN0eWxlKGNvbnN0IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
JiBzdHlsZSkgCiB7Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIHVzZVN0eWxlID0gc3R5bGU7Cisg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiB1c2VTdHlsZSA9IHN0eWxlOwogCiAgICAgLy8gU1ZHIHRl
eHQgbGF5b3V0IGNvZGUgZXhwZWN0cyB1cyB0byBiZSBhIGJsb2NrLWxldmVsIHN0eWxlIGVsZW1l
bnQuICAgCiAgICAgaWYgKHVzZVN0eWxlLT5kaXNwbGF5KCkgPT0gTk9ORSkKICAgICAgICAgc2V0
Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOwogICAgIGVsc2UgaWYgKHVzZVN0eWxlLT5pc0Rpc3BsYXlJ
bmxpbmVUeXBlKCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIG5ld1N0eWxlID0gbmV3IChyZW5k
ZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOwotICAgICAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20o
c3R5bGUpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5
bGU6OmNyZWF0ZSgpOworICAgICAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20odXNlU3R5bGUuZ2V0
KCkpOwogICAgICAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7CiAgICAgICAgIHVzZVN0
eWxlID0gbmV3U3R5bGU7CiAgICAgfQpJbmRleDogcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmgJKHJldmlzaW9uIDM3NTg2
KQorKysgcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDcgQEAgY2xhc3MgU1ZHRWxlbWVudDsKIGNsYXNzIFJlbmRlclNWR0Jsb2NrIDogcHVibGlj
IFJlbmRlckJsb2NrIHsKIHB1YmxpYzoKICAgICBSZW5kZXJTVkdCbG9jayhTVkdFbGVtZW50Kik7
Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKik7CisgICAgdmly
dHVhbCB2b2lkIHNldFN0eWxlKGNvbnN0IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+Jik7CiB9Owog
CiB9CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBy
ZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gMzc2MTQpCisrKyByZW5kZXJp
bmcvUmVuZGVyU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDEzICsxMTcsMTEg
QEAgU2Nyb2xsYmFyUGFydCBSZW5kZXJTY3JvbGxiYXI6OnBhcnRGb3JTdAogICAgIHJldHVybiBz
X3N0eWxlUmVzb2x2ZVBhcnQ7CiB9CiAKLVJlbmRlclN0eWxlKiBSZW5kZXJTY3JvbGxiYXI6Omdl
dFNjcm9sbGJhclBzZXVkb1N0eWxlKFNjcm9sbGJhclBhcnQgcGFydFR5cGUsIFJlbmRlclN0eWxl
OjpQc2V1ZG9JZCBwc2V1ZG9JZCkKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclNjcm9s
bGJhcjo6Z2V0U2Nyb2xsYmFyUHNldWRvU3R5bGUoU2Nyb2xsYmFyUGFydCBwYXJ0VHlwZSwgUmVu
ZGVyU3R5bGU6OlBzZXVkb0lkIHBzZXVkb0lkKQogewogICAgIHNfc3R5bGVSZXNvbHZlUGFydCA9
IHBhcnRUeXBlOwogICAgIHNfc3R5bGVSZXNvbHZlU2Nyb2xsYmFyID0gdGhpczsKLSAgICBSZW5k
ZXJTdHlsZSogcmVzdWx0ID0gbV9vd25lci0+Z2V0UHNldWRvU3R5bGUocHNldWRvSWQsIG1fb3du
ZXItPnN0eWxlKCksIGZhbHNlKTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICByZXN1bHQtPnJl
ZigpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVzdWx0ID0gbV9vd25lci0+Z2V0UHNldWRv
U3R5bGUocHNldWRvSWQsIG1fb3duZXItPnN0eWxlKCksIGZhbHNlKTsKICAgICBzX3N0eWxlUmVz
b2x2ZVBhcnQgPSBOb1BhcnQ7CiAgICAgc19zdHlsZVJlc29sdmVTY3JvbGxiYXIgPSAwOwogICAg
IHJldHVybiByZXN1bHQ7CkBAIC0xODUsNyArMTgzLDcgQEAgdm9pZCBSZW5kZXJTY3JvbGxiYXI6
OnVwZGF0ZVNjcm9sbGJhclBhcgogICAgIGlmIChwYXJ0VHlwZSA9PSBOb1BhcnQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlKiBwYXJ0U3R5bGUgPSAhZGVzdHJveSA/IGdldFNj
cm9sbGJhclBzZXVkb1N0eWxlKHBhcnRUeXBlLCAgcHNldWRvRm9yU2Nyb2xsYmFyUGFydChwYXJ0
VHlwZSkpIDogMDsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHBhcnRTdHlsZSA9ICFkZXN0cm95
ID8gZ2V0U2Nyb2xsYmFyUHNldWRvU3R5bGUocGFydFR5cGUsICBwc2V1ZG9Gb3JTY3JvbGxiYXJQ
YXJ0KHBhcnRUeXBlKSkgOiAwOwogICAgIAogICAgIGJvb2wgbmVlZFJlbmRlcmVyID0gIWRlc3Ry
b3kgJiYgcGFydFN0eWxlICYmIHBhcnRTdHlsZS0+ZGlzcGxheSgpICE9IE5PTkUgJiYgcGFydFN0
eWxlLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRTsKICAgICAKQEAgLTIyNCw5ICsyMjIsNiBAQCB2
b2lkIFJlbmRlclNjcm9sbGJhcjo6dXBkYXRlU2Nyb2xsYmFyUGFyCiAgICAgCiAgICAgaWYgKHBh
cnRSZW5kZXJlcikKICAgICAgICAgcGFydFJlbmRlcmVyLT5zZXRTdHlsZShwYXJ0U3R5bGUpOwot
ICAgICAgICAKLSAgICBpZiAocGFydFN0eWxlKQotICAgICAgICBwYXJ0U3R5bGUtPmRlcmVmKG1f
b3duZXItPnJlbmRlckFyZW5hKCkpOwogfQogCiB2b2lkIFJlbmRlclNjcm9sbGJhcjo6cGFpbnRQ
YXJ0KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBTY3JvbGxiYXJQYXJ0IHBhcnRU
eXBlLCBjb25zdCBJbnRSZWN0JiByZWN0KQpJbmRleDogcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJh
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaAkocmV2aXNpb24g
Mzc1ODYpCisrKyByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAgIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoKTsKIAog
cHJpdmF0ZToKLSAgICBSZW5kZXJTdHlsZSogZ2V0U2Nyb2xsYmFyUHNldWRvU3R5bGUoU2Nyb2xs
YmFyUGFydCwgUmVuZGVyU3R5bGU6OlBzZXVkb0lkKTsKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBnZXRTY3JvbGxiYXJQc2V1ZG9TdHlsZShTY3JvbGxiYXJQYXJ0LCBSZW5kZXJTdHlsZTo6
UHNldWRvSWQpOwogICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyUGFydChTY3JvbGxiYXJQYXJ0LCBi
b29sIGRlc3Ryb3kgPSBmYWxzZSk7CiAKICAgICBSZW5kZXJPYmplY3QqIG1fb3duZXI7CkluZGV4
OiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVu
ZGVyU2xpZGVyLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcvUmVuZGVyU2xpZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDI0ICsxNjgsMjEgQEAgdm9pZCBSZW5kZXJTbGlk
ZXI6OnN0eWxlRGlkQ2hhbmdlKFJlbmRlcgogewogICAgIFJlbmRlckJsb2NrOjpzdHlsZURpZENo
YW5nZShkaWZmLCBvbGRTdHlsZSk7CiAgICAgCi0gICAgaWYgKG1fdGh1bWIpIHsKLSAgICAgICAg
UmVuZGVyU3R5bGUqIHRodW1iU3R5bGUgPSBjcmVhdGVUaHVtYlN0eWxlKHN0eWxlKCksIG1fdGh1
bWItPnJlbmRlcmVyKCktPnN0eWxlKCkpOwotICAgICAgICBtX3RodW1iLT5yZW5kZXJlcigpLT5z
ZXRTdHlsZSh0aHVtYlN0eWxlKTsKLSAgICB9CisgICAgaWYgKG1fdGh1bWIpCisgICAgICAgIG1f
dGh1bWItPnJlbmRlcmVyKCktPnNldFN0eWxlKGNyZWF0ZVRodW1iU3R5bGUoc3R5bGUoKSwgbV90
aHVtYi0+cmVuZGVyZXIoKS0+c3R5bGUoKSkpOwogICAgICAgICAKICAgICBzZXRSZXBsYWNlZChp
c0lubGluZSgpKTsKIH0KIAotUmVuZGVyU3R5bGUqIFJlbmRlclNsaWRlcjo6Y3JlYXRlVGh1bWJT
dHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclNsaWRlcjo6Y3JlYXRlVGh1
bWJTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHlsZSkKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGU7Ci0KLSAgICBSZW5kZXJTdHls
ZSogcHNldWRvU3R5bGUgPSBnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6U0xJREVSX1RIVU1C
KTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlOworICAgIFJlZlB0cjxSZW5kZXJTdHls
ZT4gcHNldWRvU3R5bGUgPSBnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6U0xJREVSX1RIVU1C
KTsKICAgICBpZiAocHNldWRvU3R5bGUpCiAgICAgICAgIC8vIFdlIG1heSBiZSBzaGFyaW5nIHN0
eWxlIHdpdGggYW5vdGhlciBzbGlkZXIsIGJ1dCB3ZSBtdXN0IG5vdCBzaGFyZSB0aGUgdGh1bWIg
c3R5bGUuCi0gICAgICAgIHN0eWxlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgq
cHNldWRvU3R5bGUpOworICAgICAgICBzdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShwc2V1ZG9T
dHlsZS5nZXQoKSk7CiAgICAgZWxzZQotICAgICAgICBzdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEo
KSkgUmVuZGVyU3R5bGUoKTsKKyAgICAgICAgc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7
CiAKICAgICBpZiAocGFyZW50U3R5bGUpCiAgICAgICAgIHN0eWxlLT5pbmhlcml0RnJvbShwYXJl
bnRTdHlsZSk7CkBAIC0yNDQsOCArMjQxLDggQEAgdm9pZCBSZW5kZXJTbGlkZXI6OnVwZGF0ZUZy
b21FbGVtZW50KCkKIHsKICAgICBpZiAoIW1fdGh1bWIpIHsKICAgICAgICAgbV90aHVtYiA9IG5l
dyBIVE1MU2xpZGVyVGh1bWJFbGVtZW50KGRvY3VtZW50KCksIG5vZGUoKSk7Ci0gICAgICAgIFJl
bmRlclN0eWxlKiB0aHVtYlN0eWxlID0gY3JlYXRlVGh1bWJTdHlsZShzdHlsZSgpKTsKLSAgICAg
ICAgbV90aHVtYi0+c2V0UmVuZGVyZXIobV90aHVtYi0+Y3JlYXRlUmVuZGVyZXIocmVuZGVyQXJl
bmEoKSwgdGh1bWJTdHlsZSkpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHRodW1iU3R5
bGUgPSBjcmVhdGVUaHVtYlN0eWxlKHN0eWxlKCkpOworICAgICAgICBtX3RodW1iLT5zZXRSZW5k
ZXJlcihtX3RodW1iLT5jcmVhdGVSZW5kZXJlcihyZW5kZXJBcmVuYSgpLCB0aHVtYlN0eWxlLmdl
dCgpKSk7CiAgICAgICAgIG1fdGh1bWItPnJlbmRlcmVyKCktPnNldFN0eWxlKHRodW1iU3R5bGUp
OwogICAgICAgICBtX3RodW1iLT5zZXRBdHRhY2hlZCgpOwogICAgICAgICBtX3RodW1iLT5zZXRJ
bkRvY3VtZW50KHRydWUpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuaAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5k
ZXJpbmcvUmVuZGVyU2xpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoUmVu
ZGVyU3R5bGU6OkRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAgICAgCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgUmVuZGVyU3R5bGUqIGNyZWF0ZVRodW1iU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSAwKTsK
KyAgICAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlVGh1bWJTdHlsZShjb25zdCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSA9IDAp
OwogICAgICAgICBpbnQgdHJhY2tTaXplKCk7CiAKICAgICAgICAgUmVmUHRyPEhUTUxTbGlkZXJU
aHVtYkVsZW1lbnQ+IG1fdGh1bWI7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHJldmlzaW9uIDM3NTg2KQor
KysgcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDcgKzIw
MCw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OmFkZENoaWxkKFJlbmRlck9iamVjdCoKICAgICBpZiAo
YmVmb3JlQ2hpbGQgJiYgIWJlZm9yZUNoaWxkLT5pc1RhYmxlU2VjdGlvbigpICYmIGJlZm9yZUNo
aWxkLT5zdHlsZSgpLT5kaXNwbGF5KCkgIT0gVEFCTEVfQ0FQVElPTiAmJiBiZWZvcmVDaGlsZC0+
c3R5bGUoKS0+ZGlzcGxheSgpICE9IFRBQkxFX0NPTFVNTl9HUk9VUCkKICAgICAgICAgYmVmb3Jl
Q2hpbGQgPSAwOwogICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9IG5ldyAocmVuZGVy
QXJlbmEoKSkgUmVuZGVyVGFibGVTZWN0aW9uKGRvY3VtZW50KCkgLyogYW5vbnltb3VzICovKTsK
LSAgICBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0
eWxlKCk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpj
cmVhdGUoKTsKICAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20oc3R5bGUoKSk7CiAgICAgbmV3U3R5
bGUtPnNldERpc3BsYXkoVEFCTEVfUk9XX0dST1VQKTsKICAgICBzZWN0aW9uLT5zZXRTdHlsZShu
ZXdTdHlsZSk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgcmVu
ZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBA
QCB2b2lkIFJlbmRlclRhYmxlUm93OjphZGRDaGlsZChSZW5kZXJPYmplCiAgICAgICAgIH0KIAog
ICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRl
clRhYmxlQ2VsbChkb2N1bWVudCgpIC8qIGFub255bW91cyBvYmplY3QgKi8pOwotICAgICAgICBS
ZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCk7
CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3Jl
YXRlKCk7CiAgICAgICAgIG5ld1N0eWxlLT5pbmhlcml0RnJvbShzdHlsZSgpKTsKICAgICAgICAg
bmV3U3R5bGUtPnNldERpc3BsYXkoVEFCTEVfQ0VMTCk7CiAgICAgICAgIGNlbGwtPnNldFN0eWxl
KG5ld1N0eWxlKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiAzNzU4
NikKKysrIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTIsNyArMTEyLDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKFJlbmRl
cgogICAgICAgICB9CiAKICAgICAgICAgUmVuZGVyT2JqZWN0KiByb3cgPSBuZXcgKHJlbmRlckFy
ZW5hKCkpIFJlbmRlclRhYmxlUm93KGRvY3VtZW50KCkgLyogYW5vbnltb3VzIHRhYmxlICovKTsK
LSAgICAgICAgUmVuZGVyU3R5bGUqIG5ld1N0eWxlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5k
ZXJTdHlsZSgpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVy
U3R5bGU6OmNyZWF0ZSgpOwogICAgICAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20oc3R5bGUoKSk7
CiAgICAgICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KFRBQkxFX1JPVyk7CiAgICAgICAgIHJvdy0+
c2V0U3R5bGUobmV3U3R5bGUpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lv
biAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpzdHlsZURpZENo
YW5nZShSCiAKICAgICBpZiAobV9pbm5lclRleHQpIHsKICAgICAgICAgUmVuZGVyQmxvY2sqIHRl
eHRCbG9ja1JlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihtX2lubmVyVGV4dC0+
cmVuZGVyZXIoKSk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiB0ZXh0QmxvY2tTdHlsZSA9IGNyZWF0
ZUlubmVyVGV4dFN0eWxlKHN0eWxlKCkpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHRl
eHRCbG9ja1N0eWxlID0gY3JlYXRlSW5uZXJUZXh0U3R5bGUoc3R5bGUoKSk7CiAgICAgICAgIC8v
IFdlIG1heSBoYXZlIHNldCB0aGUgd2lkdGggYW5kIHRoZSBoZWlnaHQgaW4gdGhlIG9sZCBzdHls
ZSBpbiBsYXlvdXQoKS4gUmVzZXQgdGhlbSBub3cgdG8gYXZvaWQKICAgICAgICAgLy8gZ2V0dGlu
ZyBhIHNwdXJpb3VzIGxheW91dCBoaW50LgogICAgICAgICB0ZXh0QmxvY2tSZW5kZXJlci0+c3R5
bGUoKS0+c2V0SGVpZ2h0KExlbmd0aCgpKTsKQEAgLTE0Myw5ICsxNDMsOSBAQCB2b2lkIFJlbmRl
clRleHRDb250cm9sOjpzdHlsZURpZENoYW5nZShSCiAgICAgc2V0UmVwbGFjZWQoaXNJbmxpbmUo
KSk7CiB9CiAKLVJlbmRlclN0eWxlKiBSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlSW5uZXJCbG9j
a1N0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKQorUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gUmVuZGVyVGV4dENvbnRyb2w6OmNyZWF0ZUlubmVyQmxvY2tTdHlsZShjb25zdCBSZW5k
ZXJTdHlsZSogc3RhcnRTdHlsZSkKIHsKLSAgICBSZW5kZXJTdHlsZSogaW5uZXJCbG9ja1N0eWxl
ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOworICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gaW5uZXJCbG9ja1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwogCiAgICAgaW5u
ZXJCbG9ja1N0eWxlLT5pbmhlcml0RnJvbShzdGFydFN0eWxlKTsKICAgICBpbm5lckJsb2NrU3R5
bGUtPnNldERpc3BsYXkoQkxPQ0spOwpAQCAtMTUzLDIwICsxNTMsMjAgQEAgUmVuZGVyU3R5bGUq
IFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVJbgogICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIHNo
YWRvdyBkb20gdG8gYmUgZWRpdGFibGUsIHNvIHdlIHNldCB0aGlzIGJsb2NrIHRvIHJlYWQtb25s
eSBpbiBjYXNlIHRoZSBpbnB1dCBpdHNlbGYgaXMgZWRpdGFibGUuCiAgICAgaW5uZXJCbG9ja1N0
eWxlLT5zZXRVc2VyTW9kaWZ5KFJFQURfT05MWSk7CiAKLSAgICByZXR1cm4gaW5uZXJCbG9ja1N0
eWxlOworICAgIHJldHVybiBpbm5lckJsb2NrU3R5bGUucmVsZWFzZSgpOwogfQogCi1SZW5kZXJT
dHlsZSogUmVuZGVyVGV4dENvbnRyb2w6OmNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRl
clN0eWxlKiBzdGFydFN0eWxlKQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENv
bnRyb2w6OmNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxl
KQogewogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4obm9kZSgpKTsKICAgICBib29sIHBsYWNlaG9sZGVyU2hv
dWxkQmVWaXNpYmxlID0gIW1fbXVsdGlMaW5lICYmIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1l
bnQqPihlbGVtZW50KS0+cGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKTsKIAotICAgIFJlbmRl
clN0eWxlKiB0ZXh0QmxvY2tTdHlsZSA9IDA7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiB0ZXh0
QmxvY2tTdHlsZTsKICAgICBpZiAocGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUpIHsKLSAgICAg
ICAgUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gZ2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6
OklOUFVUX1BMQUNFSE9MREVSKTsKLSAgICAgICAgdGV4dEJsb2NrU3R5bGUgPSBuZXcgKHJlbmRl
ckFyZW5hKCkpIFJlbmRlclN0eWxlKCpwc2V1ZG9TdHlsZSk7CisgICAgICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gcHNldWRvU3R5bGUgPSBnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6SU5QVVRf
UExBQ0VIT0xERVIpOworICAgICAgICB0ZXh0QmxvY2tTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9u
ZShwc2V1ZG9TdHlsZS5nZXQoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdGV4dEJsb2NrU3R5
bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCk7ICAgIAorICAgICAgICB0ZXh0
QmxvY2tTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsgICAKICAgICAgICAgdGV4dEJsb2Nr
U3R5bGUtPmluaGVyaXRGcm9tKHN0YXJ0U3R5bGUpOwogICAgIH0KICAgICAKQEAgLTIyMywxNCAr
MjIzLDE0IEBAIFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlSW4KICAgICBp
ZiAoIWVsZW1lbnQtPmlzRW5hYmxlZCgpKQogICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0Q29s
b3IoZGlzYWJsZWRUZXh0Q29sb3IodGV4dEJsb2NrU3R5bGUtPmNvbG9yKCksIHN0YXJ0U3R5bGUt
PmJhY2tncm91bmRDb2xvcigpKSk7CiAKLSAgICByZXR1cm4gdGV4dEJsb2NrU3R5bGU7CisgICAg
cmV0dXJuIHRleHRCbG9ja1N0eWxlLnJlbGVhc2UoKTsKIH0KIAotUmVuZGVyU3R5bGUqIFJlbmRl
clRleHRDb250cm9sOjpjcmVhdGVSZXN1bHRzQnV0dG9uU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUq
IHN0YXJ0U3R5bGUpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbDo6
Y3JlYXRlUmVzdWx0c0J1dHRvblN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKQog
ewogICAgIEFTU0VSVCghbV9tdWx0aUxpbmUpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgUmVuZGVyU3R5
bGUqIHJlc3VsdHNCbG9ja1N0eWxlOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVzdWx0c0Js
b2NrU3R5bGU7CiAgICAgaWYgKGlucHV0LT5tYXhSZXN1bHRzKCkgPCAwKQogICAgICAgICByZXN1
bHRzQmxvY2tTdHlsZSA9IGdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTRUFSQ0hfREVDT1JB
VElPTik7CiAgICAgZWxzZSBpZiAoIWlucHV0LT5tYXhSZXN1bHRzKCkpCkBAIC0yMzksMzAgKzIz
OSwzMCBAQCBSZW5kZXJTdHlsZSogUmVuZGVyVGV4dENvbnRyb2w6OmNyZWF0ZVJlCiAgICAgICAg
IHJlc3VsdHNCbG9ja1N0eWxlID0gZ2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNFQVJDSF9S
RVNVTFRTX0JVVFRPTik7CiAKICAgICBpZiAoIXJlc3VsdHNCbG9ja1N0eWxlKQotICAgICAgICBy
ZXN1bHRzQmxvY2tTdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsKKyAg
ICAgICAgcmVzdWx0c0Jsb2NrU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAKICAgICBp
ZiAoc3RhcnRTdHlsZSkKICAgICAgICAgcmVzdWx0c0Jsb2NrU3R5bGUtPmluaGVyaXRGcm9tKHN0
YXJ0U3R5bGUpOwogCi0gICAgcmV0dXJuIHJlc3VsdHNCbG9ja1N0eWxlOworICAgIHJldHVybiBy
ZXN1bHRzQmxvY2tTdHlsZS5yZWxlYXNlKCk7CiB9CiAKLVJlbmRlclN0eWxlKiBSZW5kZXJUZXh0
Q29udHJvbDo6Y3JlYXRlQ2FuY2VsQnV0dG9uU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0
U3R5bGUpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRl
Q2FuY2VsQnV0dG9uU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpCiB7Ci0gICAg
UmVuZGVyU3R5bGUqIGNhbmNlbEJsb2NrU3R5bGU7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBj
YW5jZWxCbG9ja1N0eWxlOwogICAgIAotICAgIGlmIChSZW5kZXJTdHlsZSogcHNldWRvU3R5bGUg
PSBnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6U0VBUkNIX0NBTkNFTF9CVVRUT04pKQorICAg
IGlmIChSZWZQdHI8UmVuZGVyU3R5bGU+IHBzZXVkb1N0eWxlID0gZ2V0UHNldWRvU3R5bGUoUmVu
ZGVyU3R5bGU6OlNFQVJDSF9DQU5DRUxfQlVUVE9OKSkKICAgICAgICAgLy8gV2UgbWF5IGJlIHNo
YXJpbmcgc3R5bGUgd2l0aCBhbm90aGVyIHNlYXJjaCBmaWVsZCwgYnV0IHdlIG11c3Qgbm90IHNo
YXJlIHRoZSBjYW5jZWwgYnV0dG9uIHN0eWxlLgotICAgICAgICBjYW5jZWxCbG9ja1N0eWxlID0g
bmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgqcHNldWRvU3R5bGUpOworICAgICAgICBj
YW5jZWxCbG9ja1N0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKHBzZXVkb1N0eWxlLmdldCgpKTsK
ICAgICBlbHNlCi0gICAgICAgIGNhbmNlbEJsb2NrU3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkp
IFJlbmRlclN0eWxlKCk7CisgICAgICAgIGNhbmNlbEJsb2NrU3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y3JlYXRlKCk7CiAKICAgICBpZiAoc3RhcnRTdHlsZSkKICAgICAgICAgY2FuY2VsQmxvY2tTdHls
ZS0+aW5oZXJpdEZyb20oc3RhcnRTdHlsZSk7CiAKLSAgICB1cGRhdGVDYW5jZWxCdXR0b25WaXNp
YmlsaXR5KGNhbmNlbEJsb2NrU3R5bGUpOworICAgIHVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxp
dHkoY2FuY2VsQmxvY2tTdHlsZS5nZXQoKSk7CiAKLSAgICByZXR1cm4gY2FuY2VsQmxvY2tTdHls
ZTsKKyAgICByZXR1cm4gY2FuY2VsQmxvY2tTdHlsZS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgUmVu
ZGVyVGV4dENvbnRyb2w6OmNyZWF0ZVN1YnRyZWVJZk5lZWRlZCgpCkBAIC0yNzEsMTggKzI3MSwx
MiBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVTdWJ0cmVlSWZOCiAgICAgaWYgKGlz
U2VhcmNoRmllbGQgJiYgIW1faW5uZXJCbG9jaykgewogICAgICAgICAvLyBDcmVhdGUgdGhlIGlu
bmVyIGJsb2NrIGVsZW1lbnQKICAgICAgICAgbV9pbm5lckJsb2NrID0gbmV3IFRleHRDb250cm9s
SW5uZXJFbGVtZW50KGRvY3VtZW50KCksIG5vZGUoKSk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBp
bm5lckJsb2NrU3R5bGUgPSBjcmVhdGVJbm5lckJsb2NrU3R5bGUoc3R5bGUoKSk7Ci0gICAgICAg
IGlubmVyQmxvY2tTdHlsZS0+cmVmKCk7Ci0gICAgICAgIG1faW5uZXJCbG9jay0+YXR0YWNoSW5u
ZXJFbGVtZW50KG5vZGUoKSwgaW5uZXJCbG9ja1N0eWxlLCByZW5kZXJBcmVuYSgpKTsKLSAgICAg
ICAgaW5uZXJCbG9ja1N0eWxlLT5kZXJlZihyZW5kZXJBcmVuYSgpKTsKKyAgICAgICAgbV9pbm5l
ckJsb2NrLT5hdHRhY2hJbm5lckVsZW1lbnQobm9kZSgpLCBjcmVhdGVJbm5lckJsb2NrU3R5bGUo
c3R5bGUoKSksIHJlbmRlckFyZW5hKCkpOwogICAgIH0KICAgICBpZiAoaXNTZWFyY2hGaWVsZCAm
JiAhbV9yZXN1bHRzQnV0dG9uKSB7CiAgICAgICAgIC8vIENyZWF0ZSB0aGUgc2VhcmNoIHJlc3Vs
dHMgYnV0dG9uIGVsZW1lbnQKICAgICAgICAgbV9yZXN1bHRzQnV0dG9uID0gbmV3IFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQoZG9jdW1lbnQoKSk7Ci0gICAgICAgIFJlbmRlclN0eWxl
KiByZXN1bHRzQnV0dG9uU3R5bGUgPSBjcmVhdGVSZXN1bHRzQnV0dG9uU3R5bGUobV9pbm5lckJs
b2NrLT5yZW5kZXJlcigpLT5zdHlsZSgpKTsKLSAgICAgICAgcmVzdWx0c0J1dHRvblN0eWxlLT5y
ZWYoKTsKLSAgICAgICAgbV9yZXN1bHRzQnV0dG9uLT5hdHRhY2hJbm5lckVsZW1lbnQobV9pbm5l
ckJsb2NrLmdldCgpLCByZXN1bHRzQnV0dG9uU3R5bGUsIHJlbmRlckFyZW5hKCkpOwotICAgICAg
ICByZXN1bHRzQnV0dG9uU3R5bGUtPmRlcmVmKHJlbmRlckFyZW5hKCkpOworICAgICAgICBtX3Jl
c3VsdHNCdXR0b24tPmF0dGFjaElubmVyRWxlbWVudChtX2lubmVyQmxvY2suZ2V0KCksIGNyZWF0
ZVJlc3VsdHNCdXR0b25TdHlsZShtX2lubmVyQmxvY2stPnJlbmRlcmVyKCktPnN0eWxlKCkpLCBy
ZW5kZXJBcmVuYSgpKTsKICAgICB9CiAgICAgaWYgKCFtX2lubmVyVGV4dCkgewogICAgICAgICAv
LyBDcmVhdGUgdGhlIHRleHQgYmxvY2sgZWxlbWVudApAQCAtMjkyLDE5ICsyODYsMTMgQEAgdm9p
ZCBSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlU3VidHJlZUlmTgogICAgICAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUgPSBzdHlsZSgpOwogICAgICAgICBpZiAobV9pbm5lckJsb2NrKQogICAg
ICAgICAgICAgcGFyZW50U3R5bGUgPSBtX2lubmVyQmxvY2stPnJlbmRlcmVyKCktPnN0eWxlKCk7
Ci0gICAgICAgIFJlbmRlclN0eWxlKiB0ZXh0QmxvY2tTdHlsZSA9IGNyZWF0ZUlubmVyVGV4dFN0
eWxlKHBhcmVudFN0eWxlKTsKLSAgICAgICAgdGV4dEJsb2NrU3R5bGUtPnJlZigpOwogICAgICAg
ICBtX2lubmVyVGV4dCA9IG5ldyBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQoZG9jdW1lbnQo
KSwgbV9pbm5lckJsb2NrID8gMCA6IG5vZGUoKSk7Ci0gICAgICAgIG1faW5uZXJUZXh0LT5hdHRh
Y2hJbm5lckVsZW1lbnQobV9pbm5lckJsb2NrID8gbV9pbm5lckJsb2NrLmdldCgpIDogbm9kZSgp
LCB0ZXh0QmxvY2tTdHlsZSwgcmVuZGVyQXJlbmEoKSk7Ci0gICAgICAgIHRleHRCbG9ja1N0eWxl
LT5kZXJlZihyZW5kZXJBcmVuYSgpKTsKKyAgICAgICAgbV9pbm5lclRleHQtPmF0dGFjaElubmVy
RWxlbWVudChtX2lubmVyQmxvY2sgPyBtX2lubmVyQmxvY2suZ2V0KCkgOiBub2RlKCksIGNyZWF0
ZUlubmVyVGV4dFN0eWxlKHBhcmVudFN0eWxlKSwgcmVuZGVyQXJlbmEoKSk7CiAgICAgfQogICAg
IGlmIChpc1NlYXJjaEZpZWxkICYmICFtX2NhbmNlbEJ1dHRvbikgewogICAgICAgICAvLyBDcmVh
dGUgdGhlIGNhbmNlbCBidXR0b24gZWxlbWVudAogICAgICAgICBtX2NhbmNlbEJ1dHRvbiA9IG5l
dyBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQoKSk7Ci0gICAgICAgIFJl
bmRlclN0eWxlKiBjYW5jZWxCdXR0b25TdHlsZSA9IGNyZWF0ZUNhbmNlbEJ1dHRvblN0eWxlKG1f
aW5uZXJCbG9jay0+cmVuZGVyZXIoKS0+c3R5bGUoKSk7Ci0gICAgICAgIGNhbmNlbEJ1dHRvblN0
eWxlLT5yZWYoKTsKLSAgICAgICAgbV9jYW5jZWxCdXR0b24tPmF0dGFjaElubmVyRWxlbWVudCht
X2lubmVyQmxvY2suZ2V0KCksIGNhbmNlbEJ1dHRvblN0eWxlLCByZW5kZXJBcmVuYSgpKTsKLSAg
ICAgICAgY2FuY2VsQnV0dG9uU3R5bGUtPmRlcmVmKHJlbmRlckFyZW5hKCkpOworICAgICAgICBt
X2NhbmNlbEJ1dHRvbi0+YXR0YWNoSW5uZXJFbGVtZW50KG1faW5uZXJCbG9jay5nZXQoKSwgY3Jl
YXRlQ2FuY2VsQnV0dG9uU3R5bGUobV9pbm5lckJsb2NrLT5yZW5kZXJlcigpLT5zdHlsZSgpKSwg
cmVuZGVyQXJlbmEoKSk7CiAgICAgfQogfQogCkBAIC0xMTkwLDE0ICsxMTc4LDEyIEBAIEZvbnRT
ZWxlY3RvciogUmVuZGVyVGV4dENvbnRyb2w6OmZvbnRTZWwKIHZvaWQgUmVuZGVyVGV4dENvbnRy
b2w6OnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSgpCiB7CiAgICAgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlID0gbV9pbm5lckJsb2NrID8gbV9pbm5lckJsb2NrLT5yZW5kZXJlcigpLT5zdHls
ZSgpIDogc3R5bGUoKTsKLSAgICBSZW5kZXJTdHlsZSogdGV4dEJsb2NrU3R5bGUgPSBjcmVhdGVJ
bm5lclRleHRTdHlsZShwYXJlbnRTdHlsZSk7Ci0gICAgdGV4dEJsb2NrU3R5bGUtPnJlZigpOwor
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gdGV4dEJsb2NrU3R5bGUgPSBjcmVhdGVJbm5lclRleHRT
dHlsZShwYXJlbnRTdHlsZSk7CiAgICAgbV9pbm5lclRleHQtPnJlbmRlcmVyKCktPnNldFN0eWxl
KHRleHRCbG9ja1N0eWxlKTsKICAgICBmb3IgKE5vZGUqIG4gPSBtX2lubmVyVGV4dC0+Zmlyc3RD
aGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShtX2lubmVyVGV4dC5nZXQoKSkpIHsK
ICAgICAgICAgaWYgKG4tPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICBuLT5yZW5kZXJlcigpLT5z
ZXRTdHlsZSh0ZXh0QmxvY2tTdHlsZSk7CiAgICAgfQotICAgIHRleHRCbG9ja1N0eWxlLT5kZXJl
ZihyZW5kZXJBcmVuYSgpKTsKICAgICB1cGRhdGVGcm9tRWxlbWVudCgpOwogfQogCkluZGV4OiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuaAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDEwICsxMzIsMTAgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdDsKICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50Kiwg
U2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplKTsKIAotICAgIFJlbmRl
clN0eWxlKiBjcmVhdGVJbm5lckJsb2NrU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5
bGUpOwotICAgIFJlbmRlclN0eWxlKiBjcmVhdGVJbm5lclRleHRTdHlsZShjb25zdCBSZW5kZXJT
dHlsZSogc3RhcnRTdHlsZSk7Ci0gICAgUmVuZGVyU3R5bGUqIGNyZWF0ZUNhbmNlbEJ1dHRvblN0
eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKTsKLSAgICBSZW5kZXJTdHlsZSogY3Jl
YXRlUmVzdWx0c0J1dHRvblN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKTsKKyAg
ICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjcmVhdGVJbm5lckJsb2NrU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUqIHN0YXJ0U3R5bGUpOworICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0
ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKTsKKyAgICBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBjcmVhdGVDYW5jZWxCdXR0b25TdHlsZShjb25zdCBSZW5kZXJT
dHlsZSogc3RhcnRTdHlsZSk7CisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlUmVz
dWx0c0J1dHRvblN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKTsKIAogICAgIHZv
aWQgY3JlYXRlU3VidHJlZUlmTmVlZGVkKCk7CiAgICAgdm9pZCB1cGRhdGVDYW5jZWxCdXR0b25W
aXNpYmlsaXR5KFJlbmRlclN0eWxlKik7CkluZGV4OiByZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnRzLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMTMgKzU5LDEzIEBAIFRleHRDb250
cm9sSW5uZXJFbGVtZW50OjpUZXh0Q29udHJvbElubmUKIHsKIH0KIAotdm9pZCBUZXh0Q29udHJv
bElubmVyRWxlbWVudDo6YXR0YWNoSW5uZXJFbGVtZW50KE5vZGUqIHBhcmVudCwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBSZW5kZXJBcmVuYSogYXJlbmEpCit2b2lkIFRleHRDb250cm9sSW5uZXJFbGVt
ZW50OjphdHRhY2hJbm5lckVsZW1lbnQoTm9kZSogcGFyZW50LCBjb25zdCBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBzdHlsZSwgUmVuZGVyQXJlbmEqIGFyZW5hKQogewogICAgIC8vIFdoZW4gYWRk
aW5nIHRoZXNlIGVsZW1lbnRzLCBjcmVhdGUgdGhlIHJlbmRlcmVyICYgc3R5bGUgZmlyc3QgYmVm
b3JlIGFkZGluZyB0byB0aGUgRE9NLgogICAgIC8vIE90aGVyd2lzZSwgdGhlIHJlbmRlciB0cmVl
IHdpbGwgY3JlYXRlIHNvbWUgYW5vbnltb3VzIGJsb2NrcyB0aGF0IHdpbGwgbWVzcyB1cCBvdXIg
bGF5b3V0LgogCiAgICAgLy8gQ3JlYXRlIHRoZSByZW5kZXJlciB3aXRoIHRoZSBzcGVjaWZpZWQg
c3R5bGUKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXIoYXJlbmEs
IHN0eWxlKTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXIoYXJl
bmEsIHN0eWxlLmdldCgpKTsKICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgc2V0UmVuZGVy
ZXIocmVuZGVyZXIpOwogICAgICAgICByZW5kZXJlci0+c2V0U3R5bGUoc3R5bGUpOwpJbmRleDog
cmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRl
cmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5k
ZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcg
KzQxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1NoYWRvd05vZGUoKSBjb25zdCB7
IHJldHVybiBtX3NoYWRvd1BhcmVudDsgfQogICAgIHZpcnR1YWwgTm9kZSogc2hhZG93UGFyZW50
Tm9kZSgpIHsgcmV0dXJuIG1fc2hhZG93UGFyZW50OyB9CiAgICAgdm9pZCBzZXRTaGFkb3dQYXJl
bnROb2RlKE5vZGUqIG5vZGUpIHsgbV9zaGFkb3dQYXJlbnQgPSBub2RlOyB9Ci0gICAgdm9pZCBh
dHRhY2hJbm5lckVsZW1lbnQoTm9kZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyQXJlbmEqKTsKKyAg
ICB2b2lkIGF0dGFjaElubmVyRWxlbWVudChOb2RlKiwgY29uc3QgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4sIFJlbmRlckFyZW5hKik7CiAgICAgCiBwcml2YXRlOgogICAgIE5vZGUqIG1fc2hhZG93
UGFyZW50OwpJbmRleDogcmVuZGVyaW5nL3N0eWxlL0tleWZyYW1lTGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcmVuZGVyaW5nL3N0eWxlL0tleWZyYW1lTGlzdC5jcHAJKHJldmlzaW9uIDM3NTg2KQor
KysgcmVuZGVyaW5nL3N0eWxlL0tleWZyYW1lTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDEwICszMiw2IEBAIEtleWZyYW1lTGlzdDo6fktleWZyYW1lTGlzdCgpCiAKIHZvaWQgS2V5ZnJh
bWVMaXN0OjpjbGVhcigpCiB7Ci0gICAgZm9yIChWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXMuYmVnaW4oKTsgaXQgIT0gbV9rZXlmcmFtZXMuZW5k
KCk7ICsraXQpCi0gICAgICAgIGlmIChpdC0+c3R5bGUpCi0gICAgICAgICAgICBpdC0+c3R5bGUt
PmRlcmVmKG1fcmVuZGVyZXItPnJlbmRlckFyZW5hKCkpOwotCiAgICAgbV9rZXlmcmFtZXMuY2xl
YXIoKTsKICAgICBtX3Byb3BlcnRpZXMuY2xlYXIoKTsKIH0KQEAgLTQ3LDExICs0MywxMSBAQCBi
b29sIEtleWZyYW1lTGlzdDo6b3BlcmF0b3I9PShjb25zdCBLZXlmCiAKICAgICBWZWN0b3I8S2V5
ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGl0MiA9IG8ubV9rZXlmcmFtZXMuYmVnaW4oKTsK
ICAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgaXQxID0gbV9r
ZXlmcmFtZXMuYmVnaW4oKTsgaXQxICE9IG1fa2V5ZnJhbWVzLmVuZCgpOyArK2l0MSkgewotICAg
ICAgICBpZiAoaXQxLT5rZXkgIT0gaXQyLT5rZXkpCisgICAgICAgIGlmIChpdDEtPm1fa2V5ICE9
IGl0Mi0+bV9rZXkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZTEgPSBpdDEtPnN0eWxlOwotICAgICAgICBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUyID0gaXQyLT5zdHlsZTsKLSAgICAgICAgaWYgKCEoc3R5bGUxID09IHN0eWxlMikp
CisgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZTEgPSAqaXQxLT5tX3N0eWxlOworICAg
ICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUyID0gKml0Mi0+bV9zdHlsZTsKKyAgICAgICAg
aWYgKHN0eWxlMSAhPSBzdHlsZTIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICsraXQyOwogICAgIH0KQEAgLTU5LDcgKzU1LDcgQEAgYm9vbCBLZXlmcmFtZUxpc3Q6Om9wZXJh
dG9yPT0oY29uc3QgS2V5ZgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEtleWZyYW1lTGlz
dDo6aW5zZXJ0KGZsb2F0IGtleSwgUmVuZGVyU3R5bGUqIHN0eWxlKQordm9pZCBLZXlmcmFtZUxp
c3Q6Omluc2VydChmbG9hdCBrZXksIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKQogewog
ICAgIGlmIChrZXkgPCAwIHx8IGtleSA+IDEpCiAgICAgICAgIHJldHVybjsKQEAgLTY3LDExICs2
MywxMSBAQCB2b2lkIEtleWZyYW1lTGlzdDo6aW5zZXJ0KGZsb2F0IGtleSwgUmVuCiAgICAgaW50
IGluZGV4ID0gLTE7CiAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2tleWZyYW1l
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9rZXlmcmFtZXNbaV0ua2V5ID09IGtleSkg
eworICAgICAgICBpZiAobV9rZXlmcmFtZXNbaV0ubV9rZXkgPT0ga2V5KSB7CiAgICAgICAgICAg
ICBpbmRleCA9IChpbnQpIGk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICBpZiAobV9rZXlmcmFtZXNbaV0ua2V5ID4ga2V5KSB7CisgICAgICAgIGlmIChtX2tleWZyYW1l
c1tpXS5tX2tleSA+IGtleSkgewogICAgICAgICAgICAgLy8gaW5zZXJ0IGJlZm9yZQogICAgICAg
ICAgICAgbV9rZXlmcmFtZXMuaW5zZXJ0KGksIEtleWZyYW1lVmFsdWUoKSk7CiAgICAgICAgICAg
ICBpbmRleCA9IChpbnQpIGk7CkBAIC04NSwxMiArODEsOCBAQCB2b2lkIEtleWZyYW1lTGlzdDo6
aW5zZXJ0KGZsb2F0IGtleSwgUmVuCiAgICAgICAgIG1fa2V5ZnJhbWVzLmFwcGVuZChLZXlmcmFt
ZVZhbHVlKCkpOwogICAgIH0KICAgICAKLSAgICBpZiAoc3R5bGUpCi0gICAgICAgIHN0eWxlLT5y
ZWYoKTsKLSAgICBpZiAobV9rZXlmcmFtZXNbaW5kZXhdLnN0eWxlKQotICAgICAgICBtX2tleWZy
YW1lc1tpbmRleF0uc3R5bGUtPmRlcmVmKG1fcmVuZGVyZXItPnJlbmRlckFyZW5hKCkpOwotICAg
IG1fa2V5ZnJhbWVzW2luZGV4XS5rZXkgPSBrZXk7Ci0gICAgbV9rZXlmcmFtZXNbaW5kZXhdLnN0
eWxlID0gc3R5bGU7CisgICAgbV9rZXlmcmFtZXNbaW5kZXhdLm1fa2V5ID0ga2V5OworICAgIG1f
a2V5ZnJhbWVzW2luZGV4XS5tX3N0eWxlID0gc3R5bGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IHJlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSByZW5kZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0LmgJKHJldmlzaW9uIDM3NTg2KQorKysgcmVu
ZGVyaW5nL3N0eWxlL0tleWZyYW1lTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM3LDEzICszOCwxOSBAQCBjbGFzcyBSZW5kZXJTdHlsZTsK
IGNsYXNzIEtleWZyYW1lVmFsdWUgewogcHVibGljOgogICAgIEtleWZyYW1lVmFsdWUoKQotICAg
ICAgICA6IGtleSgtMSkKLSAgICAgICAgLCBzdHlsZSgwKQorICAgICAgICA6IG1fa2V5KC0xKQog
ICAgIHsKICAgICB9CiAKLSAgICBmbG9hdCBrZXk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlOwor
ICAgIH5LZXlmcmFtZVZhbHVlKCkKKyAgICB7CisgICAgfQorCisgICAgZmxvYXQga2V5KCkgY29u
c3QgeyByZXR1cm4gbV9rZXk7IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CisKKyAgICBmbG9hdCBtX2tleTsKKyAgICBSZWZQ
dHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7CiB9OwogCiBjbGFzcyBLZXlmcmFtZUxpc3QgewpAQCAt
NjIsNyArNjksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhbmlt
YXRpb25OYW1lKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25OYW1lOyB9CiAgICAgCi0gICAg
dm9pZCBpbnNlcnQoZmxvYXQga2V5LCBSZW5kZXJTdHlsZSogc3R5bGUpOworICAgIHZvaWQgaW5z
ZXJ0KGZsb2F0IGtleSwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUpOwogICAgIAogICAg
IHZvaWQgYWRkUHJvcGVydHkoaW50IHByb3ApIHsgbV9wcm9wZXJ0aWVzLmFkZChwcm9wKTsgfQog
ICAgIGJvb2wgY29udGFpbnNQcm9wZXJ0eShpbnQgcHJvcCkgY29uc3QgeyByZXR1cm4gbV9wcm9w
ZXJ0aWVzLmNvbnRhaW5zKHByb3ApOyB9CkluZGV4OiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJl
dmlzaW9uIDM3NTg2KQorKysgcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNTUgKzMzLDM3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3Rh
dGljIFJlbmRlclN0eWxlKiBkZWZhdWx0U3R5bGU7Ci0KLXZvaWQqIFJlbmRlclN0eWxlOjpvcGVy
YXRvciBuZXcoc2l6ZV90IHN6LCBSZW5kZXJBcmVuYSogcmVuZGVyQXJlbmEpIHRocm93KCkKK2lu
bGluZSBSZW5kZXJTdHlsZSogZGVmYXVsdFN0eWxlKCkKIHsKLSAgICByZXR1cm4gcmVuZGVyQXJl
bmEtPmFsbG9jYXRlKHN6KTsKKyAgICBzdGF0aWMgUmVmUHRyPFJlbmRlclN0eWxlPiBzX2RlZmF1
bHRTdHlsZTsKKyAgICBpZiAoIXNfZGVmYXVsdFN0eWxlKQorICAgICAgICBzX2RlZmF1bHRTdHls
ZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVEZWZhdWx0U3R5bGUoKTsKKyAgICByZXR1cm4gc19kZWZh
dWx0U3R5bGUuZ2V0KCk7CiB9CiAKLXZvaWQgUmVuZGVyU3R5bGU6Om9wZXJhdG9yIGRlbGV0ZSh2
b2lkKiBwdHIsIHNpemVfdCBzeikKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclN0eWxl
OjpjcmVhdGUoKQogewotICAgIC8vIFN0YXNoIHNpemUgd2hlcmUgZGVzdHJveSBjYW4gZmluZCBp
dC4KLSAgICAqKHNpemVfdCAqKXB0ciA9IHN6OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVu
ZGVyU3R5bGUoKSk7CiB9CiAKLXZvaWQgUmVuZGVyU3R5bGU6OmFyZW5hRGVsZXRlKFJlbmRlckFy
ZW5hICphcmVuYSkKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclN0eWxlOjpjcmVhdGVE
ZWZhdWx0U3R5bGUoKQogewotICAgIFJlbmRlclN0eWxlKiBwcyA9IHBzZXVkb1N0eWxlOwotICAg
IFJlbmRlclN0eWxlKiBwcmV2ID0gMDsKLQotICAgIHdoaWxlIChwcykgewotICAgICAgICBwcmV2
ID0gcHM7Ci0gICAgICAgIHBzID0gcHMtPnBzZXVkb1N0eWxlOwotICAgICAgICAvLyB0byBwcmV2
ZW50IGEgZG91YmxlIGRlbGV0aW9uLgotICAgICAgICAvLyB0aGlzIHdvcmtzIG9ubHkgYmVjYXVz
ZSB0aGUgc3R5bGVzIGJlbG93IGFyZW4ndCByZWFsbHkgc2hhcmVkCi0gICAgICAgIC8vIERpcmsg
c2FpZCB3ZSBuZWVkIGFub3RoZXIgY29uc3RydWN0IGFzIHNvb24gYXMgdGhlc2UgYXJlIHNoYXJl
ZAotICAgICAgICBwcmV2LT5wc2V1ZG9TdHlsZSA9IDA7Ci0gICAgICAgIHByZXYtPmRlcmVmKGFy
ZW5hKTsKLSAgICB9Ci0gICAgZGVsZXRlIHRoaXM7Ci0KLSAgICAvLyBSZWNvdmVyIHRoZSBzaXpl
IGxlZnQgdGhlcmUgZm9yIHVzIGJ5IG9wZXJhdG9yIGRlbGV0ZSBhbmQgZnJlZSB0aGUgbWVtb3J5
LgotICAgIGFyZW5hLT5mcmVlKCooc2l6ZV90ICopdGhpcywgdGhpcyk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBSZW5kZXJTdHlsZSh0cnVlKSk7CiB9CiAKLWlubGluZSBSZW5kZXJTdHlsZSog
aW5pdERlZmF1bHRTdHlsZSgpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJTdHlsZTo6
Y2xvbmUoY29uc3QgUmVuZGVyU3R5bGUqIG90aGVyKQogewotICAgIGlmICghZGVmYXVsdFN0eWxl
KQotICAgICAgICBkZWZhdWx0U3R5bGUgPSA6Om5ldyBSZW5kZXJTdHlsZSh0cnVlKTsKLSAgICBy
ZXR1cm4gZGVmYXVsdFN0eWxlOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVuZGVyU3R5bGUo
Km90aGVyKSk7CiB9CiAKIFJlbmRlclN0eWxlOjpSZW5kZXJTdHlsZSgpCi0gICAgOiBib3goaW5p
dERlZmF1bHRTdHlsZSgpLT5ib3gpCi0gICAgLCB2aXN1YWwoZGVmYXVsdFN0eWxlLT52aXN1YWwp
Ci0gICAgLCBiYWNrZ3JvdW5kKGRlZmF1bHRTdHlsZS0+YmFja2dyb3VuZCkKLSAgICAsIHN1cnJv
dW5kKGRlZmF1bHRTdHlsZS0+c3Vycm91bmQpCi0gICAgLCByYXJlTm9uSW5oZXJpdGVkRGF0YShk
ZWZhdWx0U3R5bGUtPnJhcmVOb25Jbmhlcml0ZWREYXRhKQotICAgICwgcmFyZUluaGVyaXRlZERh
dGEoZGVmYXVsdFN0eWxlLT5yYXJlSW5oZXJpdGVkRGF0YSkKLSAgICAsIGluaGVyaXRlZChkZWZh
dWx0U3R5bGUtPmluaGVyaXRlZCkKLSAgICAsIHBzZXVkb1N0eWxlKDApCisgICAgOiBib3goZGVm
YXVsdFN0eWxlKCktPmJveCkKKyAgICAsIHZpc3VhbChkZWZhdWx0U3R5bGUoKS0+dmlzdWFsKQor
ICAgICwgYmFja2dyb3VuZChkZWZhdWx0U3R5bGUoKS0+YmFja2dyb3VuZCkKKyAgICAsIHN1cnJv
dW5kKGRlZmF1bHRTdHlsZSgpLT5zdXJyb3VuZCkKKyAgICAsIHJhcmVOb25Jbmhlcml0ZWREYXRh
KGRlZmF1bHRTdHlsZSgpLT5yYXJlTm9uSW5oZXJpdGVkRGF0YSkKKyAgICAsIHJhcmVJbmhlcml0
ZWREYXRhKGRlZmF1bHRTdHlsZSgpLT5yYXJlSW5oZXJpdGVkRGF0YSkKKyAgICAsIGluaGVyaXRl
ZChkZWZhdWx0U3R5bGUoKS0+aW5oZXJpdGVkKQogICAgICwgbV9wc2V1ZG9TdGF0ZShQc2V1ZG9V
bmtub3duKQogICAgICwgbV9hZmZlY3RlZEJ5QXR0cmlidXRlU2VsZWN0b3JzKGZhbHNlKQogICAg
ICwgbV91bmlxdWUoZmFsc2UpCkBAIC05NywxNSArNzksMTQgQEAgUmVuZGVyU3R5bGU6OlJlbmRl
clN0eWxlKCkKICAgICAsIG1fY2hpbGRJbmRleCgwKQogICAgICwgbV9yZWYoMCkKICNpZiBFTkFC
TEUoU1ZHKQotICAgICwgbV9zdmdTdHlsZShkZWZhdWx0U3R5bGUtPm1fc3ZnU3R5bGUpCisgICAg
LCBtX3N2Z1N0eWxlKGRlZmF1bHRTdHlsZSgpLT5tX3N2Z1N0eWxlKQogI2VuZGlmCiB7CiAgICAg
c2V0Qml0RGVmYXVsdHMoKTsgLy8gV291bGQgaXQgYmUgZmFzdGVyIHRvIGNvcHkgdGhpcyBmcm9t
IHRoZSBkZWZhdWx0IHN0eWxlPwogfQogCiBSZW5kZXJTdHlsZTo6UmVuZGVyU3R5bGUoYm9vbCkK
LSAgICA6IHBzZXVkb1N0eWxlKDApCi0gICAgLCBtX3BzZXVkb1N0YXRlKFBzZXVkb1Vua25vd24p
CisgICAgOiBtX3BzZXVkb1N0YXRlKFBzZXVkb1Vua25vd24pCiAgICAgLCBtX2FmZmVjdGVkQnlB
dHRyaWJ1dGVTZWxlY3RvcnMoZmFsc2UpCiAgICAgLCBtX3VuaXF1ZShmYWxzZSkKICAgICAsIG1f
YWZmZWN0ZWRCeUVtcHR5KGZhbHNlKQpAQCAtMTQwLDcgKzEyMSw4IEBAIFJlbmRlclN0eWxlOjpS
ZW5kZXJTdHlsZShib29sKQogfQogCiBSZW5kZXJTdHlsZTo6UmVuZGVyU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUmIG8pCi0gICAgOiBpbmhlcml0ZWRfZmxhZ3Moby5pbmhlcml0ZWRfZmxhZ3MpCisg
ICAgOiBSZWZDb3VudGVkPFJlbmRlclN0eWxlPigpCisgICAgLCBpbmhlcml0ZWRfZmxhZ3Moby5p
bmhlcml0ZWRfZmxhZ3MpCiAgICAgLCBub25pbmhlcml0ZWRfZmxhZ3Moby5ub25pbmhlcml0ZWRf
ZmxhZ3MpCiAgICAgLCBib3goby5ib3gpCiAgICAgLCB2aXN1YWwoby52aXN1YWwpCkBAIC0xNDks
NyArMTMxLDcgQEAgUmVuZGVyU3R5bGU6OlJlbmRlclN0eWxlKGNvbnN0IFJlbmRlclN0eQogICAg
ICwgcmFyZU5vbkluaGVyaXRlZERhdGEoby5yYXJlTm9uSW5oZXJpdGVkRGF0YSkKICAgICAsIHJh
cmVJbmhlcml0ZWREYXRhKG8ucmFyZUluaGVyaXRlZERhdGEpCiAgICAgLCBpbmhlcml0ZWQoby5p
bmhlcml0ZWQpCi0gICAgLCBwc2V1ZG9TdHlsZSgwKQorICAgICwgbV9jYWNoZWRQc2V1ZG9TdHls
ZSgwKQogICAgICwgbV9wc2V1ZG9TdGF0ZShvLm1fcHNldWRvU3RhdGUpCiAgICAgLCBtX2FmZmVj
dGVkQnlBdHRyaWJ1dGVTZWxlY3RvcnMoZmFsc2UpCiAgICAgLCBtX3VuaXF1ZShmYWxzZSkKQEAg
LTIyNywyMyArMjA5LDIyIEBAIHZvaWQgUmVuZGVyU3R5bGU6OnNldEhhc1BzZXVkb1N0eWxlKFBz
ZXUKICAgICBub25pbmhlcml0ZWRfZmxhZ3MuX3BzZXVkb0JpdHMgfD0gcHNldWRvQml0KHBzZXVk
byk7CiB9CiAKLVJlbmRlclN0eWxlKiBSZW5kZXJTdHlsZTo6Z2V0UHNldWRvU3R5bGUoUHNldWRv
SWQgcGlkKQorUmVuZGVyU3R5bGUqIFJlbmRlclN0eWxlOjpnZXRDYWNoZWRQc2V1ZG9TdHlsZShQ
c2V1ZG9JZCBwaWQpCiB7Ci0gICAgaWYgKCFwc2V1ZG9TdHlsZSB8fCBzdHlsZVR5cGUoKSAhPSBO
T1BTRVVETykKKyAgICBpZiAoIW1fY2FjaGVkUHNldWRvU3R5bGUgfHwgc3R5bGVUeXBlKCkgIT0g
Tk9QU0VVRE8pCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlbmRlclN0eWxlKiBwcyA9IHBzZXVk
b1N0eWxlOworICAgIFJlbmRlclN0eWxlKiBwcyA9IG1fY2FjaGVkUHNldWRvU3R5bGUuZ2V0KCk7
CiAgICAgd2hpbGUgKHBzICYmIHBzLT5zdHlsZVR5cGUoKSAhPSBwaWQpCi0gICAgICAgIHBzID0g
cHMtPnBzZXVkb1N0eWxlOworICAgICAgICBwcyA9IHBzLT5tX2NhY2hlZFBzZXVkb1N0eWxlLmdl
dCgpOwogICAgIHJldHVybiBwczsKIH0KIAotdm9pZCBSZW5kZXJTdHlsZTo6YWRkUHNldWRvU3R5
bGUoUmVuZGVyU3R5bGUqIHBzZXVkbykKK3ZvaWQgUmVuZGVyU3R5bGU6OmFkZENhY2hlZFBzZXVk
b1N0eWxlKGNvbnN0IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+JiBwc2V1ZG8pCiB7CiAgICAgaWYg
KCFwc2V1ZG8pCiAgICAgICAgIHJldHVybjsKLSAgICBwc2V1ZG8tPnJlZigpOwotICAgIHBzZXVk
by0+cHNldWRvU3R5bGUgPSBwc2V1ZG9TdHlsZTsKLSAgICBwc2V1ZG9TdHlsZSA9IHBzZXVkbzsK
KyAgICBwc2V1ZG8tPm1fY2FjaGVkUHNldWRvU3R5bGUgPSBtX2NhY2hlZFBzZXVkb1N0eWxlOwor
ICAgIG1fY2FjaGVkUHNldWRvU3R5bGUgPSBwc2V1ZG87CiB9CiAKIGJvb2wgUmVuZGVyU3R5bGU6
OmluaGVyaXRlZE5vdEVxdWFsKFJlbmRlclN0eWxlKiBvdGhlcikgY29uc3QKSW5kZXg6IHJlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NywxMSArOTcsMTAgQEAgY2xhc3MgQ1NTU3R5bGVT
ZWxlY3RvcjsKIGNsYXNzIENTU1ZhbHVlTGlzdDsKIGNsYXNzIENhY2hlZEltYWdlOwogY2xhc3Mg
UGFpcjsKLWNsYXNzIFJlbmRlckFyZW5hOwogY2xhc3MgU3RyaW5nSW1wbDsKIGNsYXNzIFN0eWxl
SW1hZ2U7CiAKLWNsYXNzIFJlbmRlclN0eWxlIHsKK2NsYXNzIFJlbmRlclN0eWxlOiBwdWJsaWMg
UmVmQ291bnRlZDxSZW5kZXJTdHlsZT4gewogICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZVNlbGVj
dG9yOwogCiBwdWJsaWM6CkBAIC0xMTMsMjcgKzExMiw2IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgU0NST0xMQkFSX1RIVU1CLCBTQ1JPTExCQVJfQlVUVE9OLCBTQ1JPTExCQVJfVFJB
Q0ssIFNDUk9MTEJBUl9UUkFDS19QSUVDRSwgU0NST0xMQkFSX0NPUk5FUiwgUkVTSVpFUiB9Owog
ICAgIHN0YXRpYyBjb25zdCBpbnQgRklSU1RfSU5URVJOQUxfUFNFVURPSUQgPSBGSUxFX1VQTE9B
RF9CVVRUT047CiAKLSAgICB2b2lkIHJlZigpIHsgbV9yZWYrKzsgfQotICAgIHZvaWQgZGVyZWYo
UmVuZGVyQXJlbmEqIGFyZW5hKQotICAgIHsKLSAgICAgICAgaWYgKG1fcmVmKQotICAgICAgICAg
ICAgbV9yZWYtLTsKLSAgICAgICAgaWYgKCFtX3JlZikKLSAgICAgICAgICAgIGFyZW5hRGVsZXRl
KGFyZW5hKTsKLSAgICB9Ci0gICAgYm9vbCBoYXNPbmVSZWYoKSB7IHJldHVybiBtX3JlZiA9PSAx
OyB9Ci0gICAgaW50IHJlZkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9yZWY7IH0KLQotICAgIC8v
IE92ZXJsb2FkZWQgbmV3IG9wZXJhdG9yLiAgRGVyaXZlZCBjbGFzc2VzIG11c3Qgb3ZlcnJpZGUg
b3BlcmF0b3IgbmV3Ci0gICAgLy8gaW4gb3JkZXIgdG8gYWxsb2NhdGUgb3V0IG9mIHRoZSBSZW5k
ZXJBcmVuYS4KLSAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBSZW5kZXJBcmVuYSog
cmVuZGVyQXJlbmEpIHRocm93KCk7Ci0KLSAgICAvLyBPdmVycmlkZGVuIHRvIHByZXZlbnQgdGhl
IG5vcm1hbCBkZWxldGUgZnJvbSBiZWluZyBjYWxsZWQuCi0gICAgdm9pZCBvcGVyYXRvciBkZWxl
dGUodm9pZCogcHRyLCBzaXplX3Qgc3opOwotCi1wcml2YXRlOgotICAgIHZvaWQgYXJlbmFEZWxl
dGUoUmVuZGVyQXJlbmEqKTsKLQogcHJvdGVjdGVkOgogCiAvLyAhU1RBUlQgU1lOQyE6IEtlZXAg
dGhpcyBpbiBzeW5jIHdpdGggdGhlIGNvcHkgY29uc3RydWN0b3IgaW4gUmVuZGVyU3R5bGUuY3Bw
CkBAIC0yNDEsNyArMjE5LDcgQEAgcHJvdGVjdGVkOgogICAgIERhdGFSZWY8U3R5bGVJbmhlcml0
ZWREYXRhPiBpbmhlcml0ZWQ7CiAKICAgICAvLyBsaXN0IG9mIGFzc29jaWF0ZWQgcHNldWRvIHN0
eWxlcwotICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IG1fY2FjaGVkUHNldWRvU3R5bGU7CiAKICAgICB1bnNpZ25lZCBtX3BzZXVkb1N0YXRlIDog
MzsgLy8gUHNldWRvU3RhdGUKICAgICBib29sIG1fYWZmZWN0ZWRCeUF0dHJpYnV0ZVNlbGVjdG9y
cyA6IDE7CkBAIC0zMDgsMTIgKzI4NiwxNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG5vbmluaGVy
aXRlZF9mbGFncy5fdW5pY29kZUJpZGkgPSBpbml0aWFsVW5pY29kZUJpZGkoKTsKICAgICB9CiAK
LXB1YmxpYzoKK3Byb3RlY3RlZDoKICAgICBSZW5kZXJTdHlsZSgpOwogICAgIC8vIHVzZWQgdG8g
Y3JlYXRlIHRoZSBkZWZhdWx0IHN0eWxlLgogICAgIFJlbmRlclN0eWxlKGJvb2wpOwogICAgIFJl
bmRlclN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJik7CiAKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IGNyZWF0ZURlZmF1bHRTdHlsZSgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBjbG9uZShjb25zdCBSZW5kZXJTdHlsZSopOworCiAgICAgflJlbmRlclN0eWxl
KCk7CiAKICAgICB2b2lkIGluaGVyaXRGcm9tKGNvbnN0IFJlbmRlclN0eWxlKiBpbmhlcml0UGFy
ZW50KTsKQEAgLTMyMSw4ICszMDQsOCBAQCBwdWJsaWM6CiAgICAgUHNldWRvSWQgc3R5bGVUeXBl
KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UHNldWRvSWQ+KG5vbmluaGVyaXRlZF9mbGFncy5fc3R5
bGVUeXBlKTsgfQogICAgIHZvaWQgc2V0U3R5bGVUeXBlKFBzZXVkb0lkIHN0eWxlVHlwZSkgeyBu
b25pbmhlcml0ZWRfZmxhZ3MuX3N0eWxlVHlwZSA9IHN0eWxlVHlwZTsgfQogCi0gICAgUmVuZGVy
U3R5bGUqIGdldFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBpKTsKLSAgICB2b2lkIGFkZFBzZXVkb1N0
eWxlKFJlbmRlclN0eWxlKiBwc2V1ZG8pOworICAgIFJlbmRlclN0eWxlKiBnZXRDYWNoZWRQc2V1
ZG9TdHlsZShQc2V1ZG9JZCk7CisgICAgdm9pZCBhZGRDYWNoZWRQc2V1ZG9TdHlsZShjb25zdCBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiYpOwogCiAgICAgYm9vbCBhZmZlY3RlZEJ5SG92ZXJSdWxl
cygpIGNvbnN0IHsgcmV0dXJuIG5vbmluaGVyaXRlZF9mbGFncy5fYWZmZWN0ZWRCeUhvdmVyOyB9
CiAgICAgYm9vbCBhZmZlY3RlZEJ5QWN0aXZlUnVsZXMoKSBjb25zdCB7IHJldHVybiBub25pbmhl
cml0ZWRfZmxhZ3MuX2FmZmVjdGVkQnlBY3RpdmU7IH0KQEAgLTMzMyw2ICszMTYsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRBZmZlY3RlZEJ5RHJhZ1J1bGVzKGJvb2wgYikgeyBub25pbmhlcml0
ZWRfZmxhZ3MuX2FmZmVjdGVkQnlEcmFnID0gYjsgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFJlbmRlclN0eWxlJiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFJlbmRlclN0eWxlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0K
ICAgICBib29sIGlzRmxvYXRpbmcoKSBjb25zdCB7IHJldHVybiAhKG5vbmluaGVyaXRlZF9mbGFn
cy5fZmxvYXRpbmcgPT0gRk5PTkUpOyB9CiAgICAgYm9vbCBoYXNNYXJnaW4oKSBjb25zdCB7IHJl
dHVybiBzdXJyb3VuZC0+bWFyZ2luLm5vblplcm8oKTsgfQogICAgIGJvb2wgaGFzQm9yZGVyKCkg
Y29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5oYXNCb3JkZXIoKTsgfQpJbmRleDogc3Zn
L1NWR0NsaXBQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3ZnL1NWR0NsaXBQYXRoRWxl
bWVudC5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk4LDE3ICs5OCwxNiBAQCBTVkdSZXNvdXJjZSogU1ZHQ2xpcFBh
dGhFbGVtZW50OjpjYW52YXNSCiAKICAgICBib29sIGJib3ggPSBjbGlwUGF0aFVuaXRzKCkgPT0g
U1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwogCi0gICAgUmVu
ZGVyU3R5bGUqIGNsaXBQYXRoU3R5bGUgPSBzdHlsZUZvclJlbmRlcmVyKHBhcmVudCgpLT5yZW5k
ZXJlcigpKTsgLy8gRklYTUU6IE1hbnVhbCBzdHlsZSByZXNvbHV0aW9uIGlzIGEgaGFjaworICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gY2xpcFBhdGhTdHlsZSA9IHN0eWxlRm9yUmVuZGVyZXIocGFy
ZW50KCktPnJlbmRlcmVyKCkpOyAvLyBGSVhNRTogTWFudWFsIHN0eWxlIHJlc29sdXRpb24gaXMg
YSBoYWNrCiAgICAgZm9yIChOb2RlKiBuID0gZmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNp
YmxpbmcoKSkgewogICAgICAgICBpZiAobi0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8
U1ZHRWxlbWVudCo+KG4pLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkgewogICAgICAgICAgICAg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIHN0eWxlZCA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICBSZW5kZXJTdHlsZSog
cGF0aFN0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQo
c3R5bGVkLCBjbGlwUGF0aFN0eWxlKTsKKyAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
cGF0aFN0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQo
c3R5bGVkLCBjbGlwUGF0aFN0eWxlLmdldCgpKTsKICAgICAgICAgICAgIGlmIChwYXRoU3R5bGUt
PmRpc3BsYXkoKSAhPSBOT05FKSB7CiAgICAgICAgICAgICAgICAgUGF0aCBwYXRoRGF0YSA9IHN0
eWxlZC0+dG9DbGlwUGF0aCgpOwogICAgICAgICAgICAgICAgIGlmICghcGF0aERhdGEuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgICAgICBtX2NsaXBwZXItPmFkZENsaXBEYXRhKHBhdGhEYXRh
LCBwYXRoU3R5bGUtPnN2Z1N0eWxlKCktPmNsaXBSdWxlKCksIGJib3gpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgcGF0aFN0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgp
KTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAobV9jbGlwcGVyLT5jbGlwRGF0YSgpLmlzRW1w
dHkoKSkgewpAQCAtMTE2LDcgKzExNSw2IEBAIFNWR1Jlc291cmNlKiBTVkdDbGlwUGF0aEVsZW1l
bnQ6OmNhbnZhc1IKICAgICAgICAgcGF0aERhdGEuYWRkUmVjdChGbG9hdFJlY3QoKSk7CiAgICAg
ICAgIG1fY2xpcHBlci0+YWRkQ2xpcERhdGEocGF0aERhdGEsIFJVTEVfRVZFTk9ERCwgYmJveCk7
CiAgICAgfQotICAgIGNsaXBQYXRoU3R5bGUtPmRlcmVmKGRvY3VtZW50KCktPnJlbmRlckFyZW5h
KCkpOwogICAgIHJldHVybiBtX2NsaXBwZXIuZ2V0KCk7CiB9CiAKSW5kZXg6IHN2Zy9TVkdHcmFk
aWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAzNzU4NikKKysrIHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgU1ZHUmVzb3VyY2UqIFNWR0dyYWRpZW50RWxlbWVu
dDo6Y2FudmFzUgogVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4gU1ZHR3JhZGllbnRFbGVtZW50Ojpi
dWlsZFN0b3BzKCkgY29uc3QKIHsKICAgICBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiBzdG9wczsK
LSAgICBSZW5kZXJTdHlsZSogZ3JhZGllbnRTdHlsZSA9IDA7CisgICAgUmVmUHRyPFJlbmRlclN0
eWxlPiBncmFkaWVudFN0eWxlOwogCiAgICAgZm9yIChOb2RlKiBuID0gZmlyc3RDaGlsZCgpOyBu
OyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0g
bi0+aXNTVkdFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obikgOiAwOwpAQCAt
MTUxLDIxICsxNTEsMTYgQEAgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4gU1ZHR3JhZGllbnRFbGVt
ZQogICAgICAgICAgICAgICAgIGlmICghZ3JhZGllbnRTdHlsZSkKICAgICAgICAgICAgICAgICAg
ICAgZ3JhZGllbnRTdHlsZSA9IGNvbnN0X2Nhc3Q8U1ZHR3JhZGllbnRFbGVtZW50Kj4odGhpcykt
PnN0eWxlRm9yUmVuZGVyZXIocGFyZW50KCktPnJlbmRlcmVyKCkpOwogCi0gICAgICAgICAgICAg
ICAgUmVuZGVyU3R5bGUqIHN0b3BTdHlsZSA9IHN0b3AtPnJlc29sdmVTdHlsZShncmFkaWVudFN0
eWxlKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0b3BTdHlsZSA9IHN0
b3AtPnJlc29sdmVTdHlsZShncmFkaWVudFN0eWxlLmdldCgpKTsKIAogICAgICAgICAgICAgICAg
IGNvbG9yID0gc3RvcFN0eWxlLT5zdmdTdHlsZSgpLT5zdG9wQ29sb3IoKTsKICAgICAgICAgICAg
ICAgICBvcGFjaXR5ID0gc3RvcFN0eWxlLT5zdmdTdHlsZSgpLT5zdG9wT3BhY2l0eSgpOwotCi0g
ICAgICAgICAgICAgICAgc3RvcFN0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgp
KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RvcHMuYXBwZW5kKG1ha2VHcmFkaWVu
dFN0b3Aoc3RvcE9mZnNldCwgbWFrZVJHQkEoY29sb3IucmVkKCksIGNvbG9yLmdyZWVuKCksIGNv
bG9yLmJsdWUoKSwgaW50KG9wYWNpdHkgKiAyNTUuKSkpKTsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGlmIChncmFkaWVudFN0eWxlKQotICAgICAgICBncmFkaWVudFN0eWxlLT5kZXJlZihkb2N1
bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKLQogICAgIHJldHVybiBzdG9wczsKIH0KIApJbmRleDog
c3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdTdHlsZWRFbGVt
ZW50LmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzMSwxNCArMjMxLDEwIEBAIHZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6
Y2hpbGRyZW5DaGFuZ2VkKGIKICAgICBTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJ
bnN0YW5jZXNPZkVsZW1lbnQodGhpcyk7CiB9CiAKLVJlbmRlclN0eWxlKiBTVkdTdHlsZWRFbGVt
ZW50OjpyZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gU1ZHU3R5bGVkRWxlbWVudDo6cmVzb2x2ZVN0eWxlKFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSkKIHsKLSAgICBpZiAocmVuZGVyZXIoKSkgewotICAgICAgICBSZW5kZXJTdHls
ZSogcmVuZGVyU3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOwotICAgICAgICByZW5kZXJTdHls
ZS0+cmVmKCk7Ci0gICAgICAgIHJldHVybiByZW5kZXJTdHlsZTsKLSAgICB9Ci0KKyAgICBpZiAo
cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIHJlbmRlcmVyKCktPnN0eWxlKCk7CiAgICAgcmV0
dXJuIGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMsIHBh
cmVudFN0eWxlKTsKIH0KIApJbmRleDogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBzdmcvU1ZHU3R5bGVkRWxlbWVudC5oCShyZXZpc2lvbiAzNzU4NikKKysrIHN2Zy9TVkdT
dHlsZWRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hh
bmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVy
Q2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOwogCiAgICAgICAgIC8vIENlbnRy
YWxpemVkIHBsYWNlIHRvIGZvcmNlIGEgbWFudWFsIHN0eWxlIHJlc29sdXRpb24uIEhhY2t5IGJ1
dCBuZWVkZWQgZm9yIG5vdy4KLSAgICAgICAgUmVuZGVyU3R5bGUqIHJlc29sdmVTdHlsZShSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAgICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBy
ZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAogICAgICAgICB2b2lkIGlu
dmFsaWRhdGVSZXNvdXJjZXNJbkFuY2VzdG9yQ2hhaW4oKSBjb25zdDsgICAgICAgIAogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CkluZGV4OiBzdmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHN2
Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDggKzE4Nyw4IEBAIHZv
aWQgU1ZHVXNlRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGEKICAgICAvLyBzaGFkb3cgdHJl
ZSByb290IGVsZW1lbnQsIGJ1dCBjYWxsIGF0dGFjaFNoYWRvd1RyZWUoKSBoZXJlLiBDYWxsaW5n
IGF0dGFjaCgpIHdpbGwgY3Jhc2gKICAgICAvLyBhcyB0aGUgc2hhZG93IHRyZWUgcm9vdCBlbGVt
ZW50IGhhcyBubyAoZGlyZWN0KSBwYXJlbnQgbm9kZS4gWWVzLCBzaGFkb3cgdHJlZXMgYXJlIHRy
aWNreS4KICAgICBpZiAoY2hhbmdlID49IEluaGVyaXQgfHwgbV9zaGFkb3dUcmVlUm9vdEVsZW1l
bnQtPmNoYW5nZWQoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBkb2N1bWVu
dCgpLT5zdHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudChtX3NoYWRvd1RyZWVSb290RWxl
bWVudC5nZXQoKSk7Ci0gICAgICAgIFN0eWxlQ2hhbmdlIGNoID0gTm9kZTo6ZGlmZihtX3NoYWRv
d1RyZWVSb290RWxlbWVudC0+cmVuZGVyU3R5bGUoKSwgbmV3U3R5bGUpOworICAgICAgICBSZWZQ
dHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5z
dHlsZUZvckVsZW1lbnQobV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQuZ2V0KCkpOworICAgICAgICBT
dHlsZUNoYW5nZSBjaCA9IE5vZGU6OmRpZmYobV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQtPnJlbmRl
clN0eWxlKCksIG5ld1N0eWxlLmdldCgpKTsKICAgICAgICAgaWYgKGNoID09IERldGFjaCkgewog
ICAgICAgICAgICAgQVNTRVJUKG1fc2hhZG93VHJlZVJvb3RFbGVtZW50LT5hdHRhY2hlZCgpKTsK
ICAgICAgICAgICAgIG1fc2hhZG93VHJlZVJvb3RFbGVtZW50LT5kZXRhY2goKTsKQEAgLTE5Nywx
MSArMTk3LDggQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYQogICAg
ICAgICAgICAgLy8gYXR0YWNoIHJlY2FsdWxhdGVzIHRoZSBzdHlsZSBmb3IgYWxsIGNoaWxkcmVu
LiBObyBuZWVkIHRvIGRvIGl0IHR3aWNlLgogICAgICAgICAgICAgbV9zaGFkb3dUcmVlUm9vdEVs
ZW1lbnQtPnNldENoYW5nZWQoTm9TdHlsZUNoYW5nZSk7CiAgICAgICAgICAgICBtX3NoYWRvd1Ry
ZWVSb290RWxlbWVudC0+c2V0SGFzQ2hhbmdlZENoaWxkKGZhbHNlKTsKLSAgICAgICAgICAgIG5l
d1N0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotCi0gICAgICAgIG5ld1N0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5y
ZW5kZXJBcmVuYSgpKTsKICAgICB9CiAKICAgICAvLyBPbmx5IGNoYW5nZT09RGV0YWNoIG5lZWRz
IHNwZWNpYWwgdHJlYXRtZW50LCBmb3IgYW55dGhpbmcgZWxzZSByZWNhbGNTdHlsZSgpIHdvcmtz
LgpAQCAtNzQ0LDEwICs3NDEsMTAgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjphdHRhY2hTaGFkb3dU
cmVlKCkKIAogICAgIC8vIEluc3BpcmVkIGJ5IFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVTdWJ0
cmVlSWZOZWVkZWQoKS4gCiAgICAgaWYgKHJlbmRlcmVyKCktPmNhbkhhdmVDaGlsZHJlbigpICYm
IGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIobV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQuZ2V0KCkp
KSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fc2hhZG93VHJlZVJvb3RFbGVtZW50
LT5zdHlsZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IHN0eWxlID0gbV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQtPnN0eWxlRm9yUmVuZGVyZXIocmVu
ZGVyZXIoKSk7CiAKLSAgICAgICAgaWYgKG1fc2hhZG93VHJlZVJvb3RFbGVtZW50LT5yZW5kZXJl
cklzTmVlZGVkKHN0eWxlKSkgewotICAgICAgICAgICAgbV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQt
PnNldFJlbmRlcmVyKG1fc2hhZG93VHJlZVJvb3RFbGVtZW50LT5jcmVhdGVSZW5kZXJlcihkb2N1
bWVudCgpLT5yZW5kZXJBcmVuYSgpLCBzdHlsZSkpOworICAgICAgICBpZiAobV9zaGFkb3dUcmVl
Um9vdEVsZW1lbnQtPnJlbmRlcmVySXNOZWVkZWQoc3R5bGUuZ2V0KCkpKSB7CisgICAgICAgICAg
ICBtX3NoYWRvd1RyZWVSb290RWxlbWVudC0+c2V0UmVuZGVyZXIobV9zaGFkb3dUcmVlUm9vdEVs
ZW1lbnQtPmNyZWF0ZVJlbmRlcmVyKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCksIHN0eWxlLmdl
dCgpKSk7CiAgICAgICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBzaGFkb3dSZW5kZXJlciA9IG1f
c2hhZG93VHJlZVJvb3RFbGVtZW50LT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICAgICAgc2hh
ZG93UmVuZGVyZXItPnNldFN0eWxlKHN0eWxlKTsKICAgICAgICAgICAgICAgICByZW5kZXJlcigp
LT5hZGRDaGlsZChzaGFkb3dSZW5kZXJlciwgbV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQtPm5leHRS
ZW5kZXJlcigpKTsKQEAgLTc1NSw4ICs3NTIsNiBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6OmF0dGFj
aFNoYWRvd1RyZWUoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgc3R5bGUt
PmRlcmVmKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpOwotCiAgICAgICAgIC8vIFRoaXMgd2ls
bCB0YWtlIGNhcmUgb2YgYXR0YWNoaW5nIGFsbCBzaGFkb3cgdHJlZSBjaGlsZCBub2Rlcy4KICAg
ICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IG1fc2hhZG93VHJlZVJvb3RFbGVtZW50LT5maXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICAgICAg
Y2hpbGQtPmF0dGFjaCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24403</attachid>
            <date>2008-10-16 12:37:04 -0700</date>
            <delta_ts>2008-10-16 14:21:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>134327</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM3NjM0
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg2IEBACisyMDA4LTEw
LTE2ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9hdHRhY2htZW50LmNnaT9idWdpZD0yMTY0NworCisgICAgICAgIE1ha2Ug
UmVuZGVyU3R5bGUgaW5oZXJpdCBmcm9tIFJlZkNvdW50ZWQgc28gdGhhdCBpdCB3b3JrcyB3aXRo
IFJlZlB0ci4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6fkNTU1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6OmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjp1cGRhdGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjptYXBGaWxsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpt
YXBGaWxsWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1h
cEZpbGxZUG9zaXRpb24pOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZSk6CisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZSk6Cisg
ICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c3R5
bGVGb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZWNhbGNTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpjb21wdXRlZFN0eWxlKToKKyAgICAgICAgKiBk
b20vRWxlbWVudC5oOgorICAgICAgICAqIGRvbS9FbGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6RWxlbWVudFJhcmVEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6cmVzZXRDb21wdXRlZFN0eWxlKToKKyAgICAgICAgKiBk
b20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkaWZmKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6c3R5bGVGb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRSZW5k
ZXJTdHlsZSk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKiBodG1sL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnNldEZvbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50OjphdHRhY2gpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudDo6ZGV0YWNoKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6OnNldFJlbmRlclN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6Om5vblJlbmRlcmVyUmVuZGVyU3R5bGUpOgorICAg
ICAgICAqIGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE9w
dGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmF0
dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6ZGV0YWNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpzZXRSZW5kZXJTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6bm9uUmVuZGVyZXJSZW5kZXJTdHlsZSk6
CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oOgorICAgICAgICAqIHBhZ2UvYW5p
bWF0aW9uL0FuaW1hdGlvbkJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6
OmFuaW1hdGUpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0
aW9ucyk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oOgor
ICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVUcmFuc2l0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVLZXlm
cmFtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uUHJp
dmF0ZTo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmFu
aW1hdGUpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oOgor
ICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjpJbXBsaWNpdEFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpJbXBsaWNpdEFuaW1hdGlvbjo6fkltcGxpY2l0QW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltcGxpY2l0QW5pbWF0aW9uOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNp
dEFuaW1hdGlvbjo6aXNUYXJnZXRQcm9wZXJ0eUVxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
cGxpY2l0QW5pbWF0aW9uOjpibGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKToKKyAgICAgICAgKiBw
YWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SW1w
bGljaXRBbmltYXRpb246OmNyZWF0ZSk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5ZnJh
bWVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246Oktl
eWZyYW1lQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjp+
S2V5ZnJhbWVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246
OmFuaW1hdGUpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OnZhbGlkYXRl
VHJhbnNmb3JtRnVuY3Rpb25MaXN0KToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlmcmFt
ZUFuaW1hdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6dW5hbmltYXRlZFN0eWxl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL01lZGlhQ29u
dHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFNoYWRvd1Jv
b3RFbGVtZW50OjpNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6Ok1lZGlhQ29udHJvbElucHV0RWxlbWVudCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6dXBkYXRlRmlyc3RMZXR0ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb250
YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29udGFpbmVyOjphZGRDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb250YWluZXI6OnVwZGF0ZUJlZm9yZUFmdGVyQ29u
dGVudEZvckNvbnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRD
b250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp1
cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6Y3JlYXRlQnV0dG9uU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxl
VXBsb2FkQ29udHJvbC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3c6OmNyZWF0ZUFub255bW91c0Zsb3cpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJGbG93Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklu
bGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmFkZENoaWxkVG9GbG93
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjp1cGRhdGVSZXNpemVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnVwZGF0ZVJlZmxlY3Rpb25TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxpc3RJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpz
dHlsZURpZENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpjcmVhdGVQYW5lbCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNZWRpYTo6Y3JlYXRlVGltZURpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWVkaWE6OmNoYW5nZU9wYWNpdHkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjcmVhdGVB
bm9ueW1vdXNCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldEFuaW1h
dGFibGVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0U3R5bGVJbnRlcm5hbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFyZW5hRGVsZXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6Zmlyc3RMaW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjpnZXRQc2V1ZG9TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzdHlsZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR0Jsb2NrOjpzZXRTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2Nr
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTY3JvbGxiYXI6OmdldFNjcm9sbGJhclBzZXVkb1N0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNjcm9sbGJhcjo6dXBkYXRlU2Nyb2xsYmFyUGFydCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJTbGlkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjpzdHlsZURp
ZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXI6OmNyZWF0ZVRodW1iU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjp1cGRhdGVGcm9tRWxlbWVudCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6YWRkQ2hp
bGQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0
aW9uOjphZGRDaGlsZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpzdHlsZURpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlSW5uZXJCbG9ja1N0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpjcmVhdGVJbm5lclRl
eHRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlUmVz
dWx0c0J1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpj
cmVhdGVDYW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbDo6Y3JlYXRlU3VidHJlZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHRDb250cm9sOjp1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbC5oOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0Q29udHJv
bElubmVyRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvbnRyb2xJbm5lckVs
ZW1lbnQ6OmF0dGFjaElubmVyRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxp
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVMaXN0OjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpLZXlmcmFtZUxpc3Q6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6
S2V5ZnJhbWVMaXN0OjppbnNlcnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9LZXlmcmFt
ZUxpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lVmFsdWU6OktleWZyYW1lVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZTo6fktleWZyYW1lVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZTo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6Oktl
eWZyYW1lVmFsdWU6OnN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN0eWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6
OmNyZWF0ZURlZmF1bHRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y2xv
bmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OlJlbmRlclN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpnZXRDYWNoZWRQc2V1ZG9TdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6YWRkQ2FjaGVkUHNldWRvU3R5bGUpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAg
ICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBz
dmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NsaXBQYXRo
RWxlbWVudDo6Y2FudmFzUmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9TVkdHcmFkaWVudEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpidWlsZFN0b3Bz
KToKKyAgICAgICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdTdHlsZWRFbGVtZW50OjpyZXNvbHZlU3R5bGUpOgorICAgICAgICAqIHN2Zy9TVkdTdHls
ZWRFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6cmVjYWxjU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVXNlRWxlbWVudDo6YXR0YWNoU2hhZG93VHJlZSk6CisKIDIwMDgtMTAtMTUgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgpJbmRleDogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyBjc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxOSw3ICs0MTksNyBAQCBDU1NTdHlsZVNl
bGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtCiAKICAgICBpZiAobV9yb290RGVmYXVsdFN0
eWxlICYmIHZpZXcpIHsKICAgICAgICAgZGVsZXRlIG1fbWVkaXVtOwotICAgICAgICBtX21lZGl1
bSA9IG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpLCB2aWV3LT5mcmFt
ZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUpOworICAgICAgICBtX21lZGl1bSA9IG5ldyBNZWRpYVF1
ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpLCB2aWV3LT5mcmFtZSgpLCBtX3Jvb3REZWZh
dWx0U3R5bGUuZ2V0KCkpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBUaGlzIHN1Y2tzISBUaGUg
dXNlciBzaGVldCBpcyByZXBhcnNlZCBldmVyeSB0aW1lIQpAQCAtNDY2LDcgKzQ2Niw2IEBAIENT
U1N0eWxlU2VsZWN0b3I6On5DU1NTdHlsZVNlbGVjdG9yKCkKIHsKICAgICBtX2ZvbnRTZWxlY3Rv
ci0+Y2xlYXJEb2N1bWVudCgpOwogICAgIGRlbGV0ZSBtX21lZGl1bTsKLSAgICA6OmRlbGV0ZSBt
X3Jvb3REZWZhdWx0U3R5bGU7CiAgICAgZGVsZXRlIG1fYXV0aG9yU3R5bGU7CiAgICAgZGVsZXRl
IG1fdXNlclN0eWxlOwogICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3ZpZXdwb3J0RGVwZW5kZW50TWVk
aWFRdWVyeVJlc3VsdHMpOwpAQCAtMTAwNiw3ICsxMDA1LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXRjaFVBUnVsZXMoaW50JgogLy8gSWYgcmVzb2x2ZUZvclJvb3REZWZhdWx0IGlzIHRy
dWUsIHN0eWxlIGJhc2VkIG9uIHVzZXIgYWdlbnQgc3R5bGUgc2hlZXQgb25seS4gVGhpcyBpcyB1
c2VkIGluIG1lZGlhIHF1ZXJpZXMsIHdoZXJlCiAvLyByZWxhdGl2ZSB1bml0cyBhcmUgaW50ZXJw
cmV0ZWQgYWNjb3JkaW5nIHRvIGRvY3VtZW50IHJvb3QgZWxlbWVudCBzdHlsZSwgc3R5bGVkIG9u
bHkgd2l0aCBVQSBzdHlsZXNoZWV0CiAKLVJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpz
dHlsZUZvckVsZW1lbnQoRWxlbWVudCogZSwgUmVuZGVyU3R5bGUqIGRlZmF1bHRQYXJlbnQsIGJv
b2wgYWxsb3dTaGFyaW5nLCBib29sIHJlc29sdmVGb3JSb290RGVmYXVsdCkKK1Bhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBl
LCBSZW5kZXJTdHlsZSogZGVmYXVsdFBhcmVudCwgYm9vbCBhbGxvd1NoYXJpbmcsIGJvb2wgcmVz
b2x2ZUZvclJvb3REZWZhdWx0KQogewogICAgIC8vIE9uY2UgYW4gZWxlbWVudCBoYXMgYSByZW5k
ZXJlciwgd2UgZG9uJ3QgdHJ5IHRvIGRlc3Ryb3kgaXQsIHNpbmNlIG90aGVyd2lzZSB0aGUgcmVu
ZGVyZXIKICAgICAvLyB3aWxsIHZhbmlzaCBpZiBhIHN0eWxlIHJlY2FsYyBoYXBwZW5zIGR1cmlu
ZyBsb2FkaW5nLgpAQCAtMTAyNCwzMCArMTAyMywxOCBAQCBSZW5kZXJTdHlsZSogQ1NTU3R5bGVT
ZWxlY3Rvcjo6c3R5bGVGb3JFCiAKICAgICBpbml0RWxlbWVudEFuZFBzZXVkb1N0YXRlKGUpOwog
ICAgIGlmIChhbGxvd1NoYXJpbmcpIHsKLSAgICAgICAgbV9zdHlsZSA9IGxvY2F0ZVNoYXJlZFN0
eWxlKCk7Ci0jaWZkZWYgU1RZTEVfU0hBUklOR19TVEFUUwotICAgICAgICBmcmFjdGlvbiArPSBt
X3N0eWxlICE9IDA7Ci0gICAgICAgIHRvdGFsKys7Ci0gICAgICAgIHByaW50ZigiU2hhcmluZyAl
ZCBvdXQgb2YgJWRcbiIsIGZyYWN0aW9uLCB0b3RhbCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKG1f
c3R5bGUpIHsKLSAgICAgICAgICAgIG1fc3R5bGUtPnJlZigpOwotICAgICAgICAgICAgcmV0dXJu
IG1fc3R5bGU7Ci0gICAgICAgIH0KKyAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0g
bG9jYXRlU2hhcmVkU3R5bGUoKTsKKyAgICAgICAgaWYgKHNoYXJlZFN0eWxlKQorICAgICAgICAg
ICAgcmV0dXJuIHNoYXJlZFN0eWxlOwogICAgIH0KICAgICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUs
IGRlZmF1bHRQYXJlbnQpOwogCi0gICAgaWYgKHJlc29sdmVGb3JSb290RGVmYXVsdCkgewotICAg
ICAgICBtX3N0eWxlID0gOjpuZXcgUmVuZGVyU3R5bGUoKTsKLSAgICAgICAgLy8gZG9uJ3QgcmVm
LCBiZWNhdXNlIHdlIHdhbnQgdG8gZGVsZXRlIHRoaXMsIGJ1dCB3ZSBjYW5ub3QgdW5yZWYgaXQK
LSAgICB9IGVsc2UgewotICAgICAgICBtX3N0eWxlID0gbmV3IChlLT5kb2N1bWVudCgpLT5yZW5k
ZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOwotICAgICAgICBtX3N0eWxlLT5yZWYoKTsKLSAgICB9
CisgICAgbV9zdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKwogICAgIGlmIChtX3BhcmVu
dFN0eWxlKQogICAgICAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShtX3BhcmVudFN0eWxlKTsKICAg
ICBlbHNlCi0gICAgICAgIG1fcGFyZW50U3R5bGUgPSBtX3N0eWxlOworICAgICAgICBtX3BhcmVu
dFN0eWxlID0gc3R5bGUoKTsKIAogICAgIGlmIChzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCAmJiAh
ZWxlbWVudENhblVzZVNpbXBsZURlZmF1bHRTdHlsZShlKSkKICAgICAgICAgbG9hZEZ1bGxEZWZh
dWx0U3R5bGUoKTsKQEAgLTExNjcsNyArMTE1NCw3IEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNl
bGVjdG9yOjpzdHlsZUZvckUKICAgICAgICAgdXBkYXRlRm9udCgpOwogICAgIAogICAgIC8vIENs
ZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChh
bW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxlKG1fc3R5bGUsIGUpOwor
ICAgIGFkanVzdFJlbmRlclN0eWxlKHN0eWxlKCksIGUpOwogCiAgICAgLy8gSWYgd2UgYXJlIGEg
bGluaywgY2FjaGUgdGhlIGRldGVybWluZWQgcHNldWRvLXN0YXRlLgogICAgIGlmIChlLT5pc0xp
bmsoKSkKQEAgLTExNzgsNyArMTE2NSw3IEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9y
OjpzdHlsZUZvckUKICAgICAgICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7CiAKICAgICAvLyBOb3cg
cmV0dXJuIHRoZSBzdHlsZS4KLSAgICByZXR1cm4gbV9zdHlsZTsKKyAgICByZXR1cm4gbV9zdHls
ZS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6a2V5ZnJhbWVTdHlsZXNG
b3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwg
S2V5ZnJhbWVMaXN0JiBsaXN0KQpAQCAtMTIwNiw4ICsxMTkzLDcgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjprZXlmcmFtZVN0eWxlc0ZvcgogICAgICAgICBBU1NFUlQoIW1fc3R5bGUpOwogCiAg
ICAgICAgIC8vIENyZWF0ZSB0aGUgc3R5bGUKLSAgICAgICAgbV9zdHlsZSA9IG5ldyAoZS0+ZG9j
dW1lbnQoKS0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKmVsZW1lbnRTdHlsZSk7Ci0gICAg
ICAgIG1fc3R5bGUtPnJlZigpOworICAgICAgICBtX3N0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25l
KGVsZW1lbnRTdHlsZSk7CiAgICAgICAgIAogICAgICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7
CiAgICAgICAgIApAQCAtMTI0MywxOCArMTIyOSwxNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
OmtleWZyYW1lU3R5bGVzRm9yCiAgICAgICAgICAgICBmbG9hdCBrZXkgPSBrZXlzW2tleUluZGV4
XTsKICAgICAgICAgICAgIGxpc3QuaW5zZXJ0KGtleSwgbV9zdHlsZSk7CiAgICAgICAgIH0KLSAg
ICAgICAgbV9zdHlsZS0+ZGVyZWYoZS0+ZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSk7CiAgICAg
ICAgIG1fc3R5bGUgPSAwOwogICAgIH0KICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMg
YSAwJSBhbmQgYSAxMDAlIGtleWZyYW1lCi0gICAgZmxvYXQgZmlyc3QgPSBsaXN0LmJlZ2luS2V5
ZnJhbWVzKCktPmtleTsKLSAgICBmbG9hdCBsYXN0ID0gKGxpc3QuZW5kS2V5ZnJhbWVzKCktMSkt
PmtleTsKKyAgICBmbG9hdCBmaXJzdCA9IGxpc3QuYmVnaW5LZXlmcmFtZXMoKS0+a2V5KCk7Cisg
ICAgZmxvYXQgbGFzdCA9IChsaXN0LmVuZEtleWZyYW1lcygpLTEpLT5rZXkoKTsKICAgICBpZiAo
Zmlyc3QgIT0gMCB8fCBsYXN0ICE9IDEpCiAgICAgICAgIGxpc3QuY2xlYXIoKTsKIH0KIAotUmVu
ZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChSZW5kZXJT
dHlsZTo6UHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHls
ZUZvckVsZW1lbnQoUmVuZGVyU3R5bGU6OlBzZXVkb0lkIHBzZXVkbywgRWxlbWVudCogZSwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlKQogewogICAgIGlmICghZSkKICAgICAgICAgcmV0dXJuIDA7
CkBAIC0xMjc4LDggKzEyNjMsNyBAQCBSZW5kZXJTdHlsZSogQ1NTU3R5bGVTZWxlY3Rvcjo6cHNl
dWRvU3R5CiAgICAgaWYgKG1fbWF0Y2hlZERlY2xzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgCi0gICAgbV9zdHlsZSA9IG5ldyAoZS0+ZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEo
KSkgUmVuZGVyU3R5bGUoKTsKLSAgICBtX3N0eWxlLT5yZWYoKTsKKyAgICBtX3N0eWxlID0gUmVu
ZGVyU3R5bGU6OmNyZWF0ZSgpOwogICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgbV9zdHls
ZS0+aW5oZXJpdEZyb20ocGFyZW50U3R5bGUpOwogCkBAIC0xMzE2LDEwICsxMzAwLDEwIEBAIFJl
bmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHkKICAgICBpZiAobV9mb250RGly
dHkpCiAgICAgICAgIHVwZGF0ZUZvbnQoKTsKICAgICAvLyBDbGVhbiB1cCBvdXIgc3R5bGUgb2Jq
ZWN0J3MgZGlzcGxheSBhbmQgdGV4dCBkZWNvcmF0aW9ucyAoYW1vbmcgb3RoZXIgZml4dXBzKS4K
LSAgICBhZGp1c3RSZW5kZXJTdHlsZShtX3N0eWxlLCAwKTsKKyAgICBhZGp1c3RSZW5kZXJTdHls
ZShzdHlsZSgpLCAwKTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVy
biBtX3N0eWxlOworICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKIH0KIAogc3RhdGljIHZv
aWQgYWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSogc3R5bGUpCkBAIC0xNTE3LDggKzE1
MDEsOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxlCiB2b2lkIENT
U1N0eWxlU2VsZWN0b3I6OnVwZGF0ZUZvbnQoKQogewogICAgIGNoZWNrRm9yVGV4dFNpemVBZGp1
c3QoKTsKLSAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9zdHlsZSwgbV9wYXJlbnRT
dHlsZSk7Ci0gICAgY2hlY2tGb3Jab29tQ2hhbmdlKG1fc3R5bGUsIG1fcGFyZW50U3R5bGUpOwor
ICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlKTsK
KyAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSk7CiAgICAgbV9z
dHlsZS0+Zm9udCgpLnVwZGF0ZShtX2ZvbnRTZWxlY3Rvcik7CiAgICAgbV9mb250RGlydHkgPSBm
YWxzZTsKIH0KQEAgLTE1NzcsNyArMTU2MSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hl
Y2tTZWxlY3RvcihDU1MKICAgICBtX2R5bmFtaWNQc2V1ZG8gPSBSZW5kZXJTdHlsZTo6Tk9QU0VV
RE87CiAKICAgICAvLyBDaGVjayB0aGUgc2VsZWN0b3IKLSAgICBTZWxlY3Rvck1hdGNoIG1hdGNo
ID0gbV9jaGVja2VyLmNoZWNrU2VsZWN0b3Ioc2VsLCBtX2VsZW1lbnQsICZtX3NlbGVjdG9yQXR0
cnMsIG1fZHluYW1pY1BzZXVkbywgdHJ1ZSwgZmFsc2UsIG1fc3R5bGUsIG1fcGFyZW50U3R5bGUp
OworICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tTZWxlY3RvcihzZWws
IG1fZWxlbWVudCwgJm1fc2VsZWN0b3JBdHRycywgbV9keW5hbWljUHNldWRvLCB0cnVlLCBmYWxz
ZSwgc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSk7CiAgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yTWF0
Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zMTIyLDcgKzMxMDYsNyBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgIEhBTkRMRV9JTkhF
UklUX0FORF9JTklUSUFMKGhvcml6b250YWxCb3JkZXJTcGFjaW5nLCBIb3Jpem9udGFsQm9yZGVy
U3BhY2luZykKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgc2hvcnQgc3BhY2luZyA9ICBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0
aFNob3J0KG1fc3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICBzaG9ydCBzcGFjaW5nID0gIHBy
aW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoU2hvcnQoc3R5bGUoKSwgem9vbUZhY3Rvcik7CiAg
ICAgICAgIG1fc3R5bGUtPnNldEhvcml6b250YWxCb3JkZXJTcGFjaW5nKHNwYWNpbmcpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMzEzMCw3ICszMTE0LDcgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5J
VElBTCh2ZXJ0aWNhbEJvcmRlclNwYWNpbmcsIFZlcnRpY2FsQm9yZGVyU3BhY2luZykKICAgICAg
ICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc2hv
cnQgc3BhY2luZyA9ICBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aFNob3J0KG1fc3R5bGUs
IHpvb21GYWN0b3IpOworICAgICAgICBzaG9ydCBzcGFjaW5nID0gIHByaW1pdGl2ZVZhbHVlLT5j
b21wdXRlTGVuZ3RoU2hvcnQoc3R5bGUoKSwgem9vbUZhY3Rvcik7CiAgICAgICAgIG1fc3R5bGUt
PnNldFZlcnRpY2FsQm9yZGVyU3BhY2luZyhzcGFjaW5nKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTMzMDUsNyArMzI4OSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQKICAgICAgICAgICAgIHdpZHRoID0gNTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENTU1ZhbHVlSW52YWxpZDoKLSAgICAgICAgICAgIHdpZHRoID0gcHJpbWl0aXZl
VmFsdWUtPmNvbXB1dGVMZW5ndGhTaG9ydChtX3N0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAg
ICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhTaG9ydChzdHlsZSgpLCB6
b29tRmFjdG9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMzM1OCw3ICszMzQyLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjphcHBseVByb3BlcnR5KGludAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKCFw
cmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB3aWR0
aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50KG1fc3R5bGUsIHpvb21GYWN0b3Ip
OworICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludChz
dHlsZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKGlkKSB7CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nOgpAQCAtMzUwMiw3ICszNDg2LDcg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAg
aW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpOwogICAgICAgICAgICAg
aWYgKHR5cGUgPiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgJiYgdHlwZSA8IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKQogICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBvdXIg
cXVpcmt5IG1hcmdpbiB1bml0cyBpZiB3ZSBoYXZlIHRoZW0uCi0gICAgICAgICAgICAgICAgbCA9
IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChtX3N0eWxl
LCB6b29tRmFjdG9yKSwgRml4ZWQsIAorICAgICAgICAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0
aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoc3R5bGUoKSwgem9vbUZhY3Rvciks
IEZpeGVkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVlLT5pc1F1
aXJrVmFsdWUoKSk7CiAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2
ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKQEAgLTM2MDIsNyArMzU4Niw3IEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlICYmICFhcHBseSkgewogICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdHlw
ZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCk7CiAgICAgICAgICAgICBpZiAodHlw
ZSA+IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiB0eXBlIDwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19ERUcpCi0gICAgICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChtX3N0eWxlLCB6b29tRmFjdG9yKSwgRml4
ZWQpOworICAgICAgICAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVM
ZW5ndGhJbnRGb3JMZW5ndGgoc3R5bGUoKSwgem9vbUZhY3RvciksIEZpeGVkKTsKICAgICAgICAg
ICAgIGVsc2UgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQog
ICAgICAgICAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVl
KCksIFBlcmNlbnQpOwogICAgICAgICAgICAgZWxzZQpAQCAtMzY1OCw3ICszNjQyLDcgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgIGludCB0eXBl
ID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKICAgICAgICAgICBMZW5ndGggbDsK
ICAgICAgICAgICBpZiAodHlwZSA+IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAm
JiB0eXBlIDwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcpCi0gICAgICAgICAgICBsID0gTGVu
Z3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKG1fc3R5bGUsIHpv
b21GYWN0b3IpLCBGaXhlZCk7CisgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIHpvb21GYWN0b3IpLCBGaXhlZCk7
CiAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UpCiAgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVW
YWx1ZSgpLCBQZXJjZW50KTsKIApAQCAtMzc4OCw3ICszNzcyLDcgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAgZG91YmxlIG11bHRpcGxpZXIg
PSBtX3N0eWxlLT5lZmZlY3RpdmVab29tKCk7CiAgICAgICAgICAgICBpZiAobV9zdHlsZS0+dGV4
dFNpemVBZGp1c3QoKSAmJiBtX2NoZWNrZXIubV9kb2N1bWVudC0+ZnJhbWUoKSAmJiBtX2NoZWNr
ZXIubV9kb2N1bWVudC0+ZnJhbWUoKS0+c2hvdWxkQXBwbHlUZXh0Wm9vbSgpKQogICAgICAgICAg
ICAgICAgIG11bHRpcGxpZXIgKj0gbV9jaGVja2VyLm1fZG9jdW1lbnQtPmZyYW1lKCktPnRleHRa
b29tRmFjdG9yKCk7Ci0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKHByaW1pdGl2ZVZh
bHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKG1fc3R5bGUsIG11bHRpcGxpZXIpLCBGaXhl
ZCk7CisgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21w
dXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIG11bHRpcGxpZXIpLCBGaXhlZCk7CiAgICAg
ICAgIH0gZWxzZSBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0Up
CiAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKChtX3N0eWxlLT5mb250U2l6ZSgpICog
cHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7CiAgICAgICAgIGVs
c2UgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCkBAIC0zODQzLDEw
ICszODI3LDEwIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAg
ICAgICAgICAgIFJlY3QqIHJlY3QgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UmVjdFZhbHVlKCk7CiAg
ICAgICAgICAgICBpZiAoIXJlY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgdG9wID0gY29udmVydFRvTGVuZ3RoKHJlY3QtPnRvcCgpLCBtX3N0eWxlKTsKLSAgICAgICAg
ICAgIHJpZ2h0ID0gY29udmVydFRvTGVuZ3RoKHJlY3QtPnJpZ2h0KCksIG1fc3R5bGUpOwotICAg
ICAgICAgICAgYm90dG9tID0gY29udmVydFRvTGVuZ3RoKHJlY3QtPmJvdHRvbSgpLCBtX3N0eWxl
KTsKLSAgICAgICAgICAgIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgocmVjdC0+bGVmdCgpLCBtX3N0
eWxlKTsKKyAgICAgICAgICAgIHRvcCA9IGNvbnZlcnRUb0xlbmd0aChyZWN0LT50b3AoKSwgc3R5
bGUoKSk7CisgICAgICAgICAgICByaWdodCA9IGNvbnZlcnRUb0xlbmd0aChyZWN0LT5yaWdodCgp
LCBzdHlsZSgpKTsKKyAgICAgICAgICAgIGJvdHRvbSA9IGNvbnZlcnRUb0xlbmd0aChyZWN0LT5i
b3R0b20oKSwgc3R5bGUoKSk7CisgICAgICAgICAgICBsZWZ0ID0gY29udmVydFRvTGVuZ3RoKHJl
Y3QtPmxlZnQoKSwgc3R5bGUoKSk7CiAKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSAhPSBDU1NWYWx1ZUF1dG8pIHsKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTM5MjcsMTAgKzM5MTEsMTAgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5
KGludAogICAgIH0KIAogICAgIGNhc2UgQ1NTUHJvcGVydHlDb3VudGVySW5jcmVtZW50OgotICAg
ICAgICBhcHBseUNvdW50ZXJMaXN0KG1fc3R5bGUsIHZhbHVlLT5pc1ZhbHVlTGlzdCgpID8gc3Rh
dGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpIDogMCwgZmFsc2UpOworICAgICAgICBhcHBs
eUNvdW50ZXJMaXN0KHN0eWxlKCksIHZhbHVlLT5pc1ZhbHVlTGlzdCgpID8gc3RhdGljX2Nhc3Q8
Q1NTVmFsdWVMaXN0Kj4odmFsdWUpIDogMCwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUNvdW50ZXJSZXNldDoKLSAgICAgICAgYXBwbHlDb3VudGVyTGlzdCht
X3N0eWxlLCB2YWx1ZS0+aXNWYWx1ZUxpc3QoKSA/IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+
KHZhbHVlKSA6IDAsIHRydWUpOworICAgICAgICBhcHBseUNvdW50ZXJMaXN0KHN0eWxlKCksIHZh
bHVlLT5pc1ZhbHVlTGlzdCgpID8gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpIDog
MCwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmFt
aWx5OiB7CkBAIC00Mzk4LDggKzQzODIsOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5
UHJvcGVydHkoaW50CiAgICAgICAgIGlmICghcGFpcikKICAgICAgICAgICAgIHJldHVybjsKIAot
ICAgICAgICBpbnQgd2lkdGggPSBwYWlyLT5maXJzdCgpLT5jb21wdXRlTGVuZ3RoSW50KG1fc3R5
bGUsIHpvb21GYWN0b3IpOwotICAgICAgICBpbnQgaGVpZ2h0ID0gcGFpci0+c2Vjb25kKCktPmNv
bXB1dGVMZW5ndGhJbnQobV9zdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgIGludCB3aWR0aCA9
IHBhaXItPmZpcnN0KCktPmNvbXB1dGVMZW5ndGhJbnQoc3R5bGUoKSwgem9vbUZhY3Rvcik7Cisg
ICAgICAgIGludCBoZWlnaHQgPSBwYWlyLT5zZWNvbmQoKS0+Y29tcHV0ZUxlbmd0aEludChzdHls
ZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQog
ICAgICAgICAgICAgcmV0dXJuOwogCkBAIC00NDMxLDcgKzQ0MTUsNyBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAKICAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGlu
ZU9mZnNldDoKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwob3V0bGluZU9mZnNl
dCwgT3V0bGluZU9mZnNldCkKLSAgICAgICAgbV9zdHlsZS0+c2V0T3V0bGluZU9mZnNldChwcmlt
aXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludChtX3N0eWxlLCB6b29tRmFjdG9yKSk7CisgICAg
ICAgIG1fc3R5bGUtPnNldE91dGxpbmVPZmZzZXQocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5n
dGhJbnQoc3R5bGUoKSwgem9vbUZhY3RvcikpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNl
IENTU1Byb3BlcnR5VGV4dFNoYWRvdzoKQEAgLTQ0NTEsOSArNDQzNSw5IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgaW50IGxlbiA9IGxpc3QtPmxl
bmd0aCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAg
ICAgICBTaGFkb3dWYWx1ZSogaXRlbSA9IHN0YXRpY19jYXN0PFNoYWRvd1ZhbHVlKj4obGlzdC0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7Ci0gICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngt
PmNvbXB1dGVMZW5ndGhJbnQobV9zdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAgICAgICAgICBpbnQg
eSA9IGl0ZW0tPnktPmNvbXB1dGVMZW5ndGhJbnQobV9zdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAg
ICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3Ro
SW50KG1fc3R5bGUsIHpvb21GYWN0b3IpIDogMDsKKyAgICAgICAgICAgIGludCB4ID0gaXRlbS0+
eC0+Y29tcHV0ZUxlbmd0aEludChzdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGlu
dCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aEludChzdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAg
ICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5n
dGhJbnQoc3R5bGUoKSwgem9vbUZhY3RvcikgOiAwOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7
CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCiAgICAgICAgICAgICAgICAgY29sb3IgPSBn
ZXRDb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CkBAIC00NDc5LDcg
KzQ0NjMsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAg
ICAgICAgICBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCiAg
ICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KExlbmd0aChyZWZsZWN0VmFsdWUt
Pm9mZnNldCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KSk7CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KExlbmd0aChyZWZsZWN0VmFs
dWUtPm9mZnNldCgpLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKG1fc3R5bGUsIHpvb21GYWN0
b3IpLCBGaXhlZCkpOworICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChMZW5n
dGgocmVmbGVjdFZhbHVlLT5vZmZzZXQoKS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChzdHls
ZSgpLCB6b29tRmFjdG9yKSwgRml4ZWQpKTsKICAgICAgICAgfQogICAgICAgICBOaW5lUGllY2VJ
bWFnZSBtYXNrOwogICAgICAgICBtYXBOaW5lUGllY2VJbWFnZShyZWZsZWN0VmFsdWUtPm1hc2so
KSwgbWFzayk7CkBAIC00NTg2LDcgKzQ1NzAsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFw
cGx5UHJvcGVydHkoaW50CiAgICAgICAgICAgICBtX3N0eWxlLT5zZXRIYXNOb3JtYWxDb2x1bW5H
YXAoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX3N0eWxlLT5z
ZXRDb2x1bW5HYXAocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhGbG9hdChtX3N0eWxlLCB6
b29tRmFjdG9yKSk7CisgICAgICAgIG1fc3R5bGUtPnNldENvbHVtbkdhcChwcmltaXRpdmVWYWx1
ZS0+Y29tcHV0ZUxlbmd0aEZsb2F0KHN0eWxlKCksIHpvb21GYWN0b3IpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uV2lkdGg6IHsKQEAg
LTQ2MDAsNyArNDU4NCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShp
bnQKICAgICAgICAgICAgIG1fc3R5bGUtPnNldEhhc0F1dG9Db2x1bW5XaWR0aCgpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fc3R5bGUtPnNldENvbHVtbldpZHRo
KHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoRmxvYXQobV9zdHlsZSwgem9vbUZhY3Rvcikp
OworICAgICAgICBtX3N0eWxlLT5zZXRDb2x1bW5XaWR0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0
ZUxlbmd0aEZsb2F0KHN0eWxlKCksIHpvb21GYWN0b3IpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZVN0eWxlOgpAQCAtNDcwNyw3
ICs0NjkxLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAg
ICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7Ci0gICAg
ICAgICAgICBMZW5ndGggbCA9IGNvbnZlcnRUb0xlbmd0aChwcmltaXRpdmVWYWx1ZSwgbV9zdHls
ZSwgJm9rKTsKKyAgICAgICAgICAgIExlbmd0aCBsID0gY29udmVydFRvTGVuZ3RoKHByaW1pdGl2
ZVZhbHVlLCBzdHlsZSgpLCAmb2spOwogICAgICAgICAgICAgaWYgKG9rKQogICAgICAgICAgICAg
ICAgIG1fc3R5bGUtPnNldE1hcnF1ZWVJbmNyZW1lbnQobCk7CiAgICAgICAgIH0KQEAgLTQ4MzAs
MTAgKzQ4MTQsMTAgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAog
ICAgICAgICAgICAgCiAgICAgICAgIERhc2hib2FyZFJlZ2lvbiAqZmlyc3QgPSByZWdpb247CiAg
ICAgICAgIHdoaWxlIChyZWdpb24pIHsKLSAgICAgICAgICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0
VG9MZW5ndGggKHJlZ2lvbi0+dG9wKCksIG1fc3R5bGUpOwotICAgICAgICAgICAgTGVuZ3RoIHJp
Z2h0ID0gY29udmVydFRvTGVuZ3RoIChyZWdpb24tPnJpZ2h0KCksIG1fc3R5bGUpOwotICAgICAg
ICAgICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0xlbmd0aCAocmVnaW9uLT5ib3R0b20oKSwg
bV9zdHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0xlbmd0aCAocmVn
aW9uLT5sZWZ0KCksIG1fc3R5bGUpOworICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRU
b0xlbmd0aChyZWdpb24tPnRvcCgpLCBzdHlsZSgpKTsKKyAgICAgICAgICAgIExlbmd0aCByaWdo
dCA9IGNvbnZlcnRUb0xlbmd0aChyZWdpb24tPnJpZ2h0KCksIHN0eWxlKCkpOworICAgICAgICAg
ICAgTGVuZ3RoIGJvdHRvbSA9IGNvbnZlcnRUb0xlbmd0aChyZWdpb24tPmJvdHRvbSgpLCBzdHls
ZSgpKTsKKyAgICAgICAgICAgIExlbmd0aCBsZWZ0ID0gY29udmVydFRvTGVuZ3RoKHJlZ2lvbi0+
bGVmdCgpLCBzdHlsZSgpKTsKICAgICAgICAgICAgIGlmIChyZWdpb24tPm1faXNDaXJjbGUpCiAg
ICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0RGFzaGJvYXJkUmVnaW9uKFN0eWxlRGFzaGJvYXJk
UmVnaW9uOjpDaXJjbGUsIHJlZ2lvbi0+bV9sYWJlbCwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0
LCByZWdpb24gPT0gZmlyc3QgPyBmYWxzZSA6IHRydWUpOwogICAgICAgICAgICAgZWxzZSBpZiAo
cmVnaW9uLT5tX2lzUmVjdGFuZ2xlKQpAQCAtNDg2NCwxMSArNDg0OCwxMSBAQCB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCAqPSAzOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpID09IENTU1ZhbHVlVGhpY2spCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAqPSA1Owot
ICAgICAgICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0aEZsb2F0KG1fc3R5bGUs
IHpvb21GYWN0b3IpOworICAgICAgICAgICAgICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0
aEZsb2F0KHN0eWxlKCksIHpvb21GYWN0b3IpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB3aWR0aCA9
IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoRmxvYXQobV9zdHlsZSwgem9vbUZhY3Rvcik7
CisgICAgICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEZs
b2F0KHN0eWxlKCksIHpvb21GYWN0b3IpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIG1fc3R5bGUtPnNldFRleHRTdHJva2VXaWR0aCh3aWR0aCk7CkBAIC00ODc3
LDcgKzQ4NjEsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybTogewogICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTCh0cmFuc2Zvcm0sIFRyYW5zZm9ybSk7CiAgICAgICAgIFRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICAgICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9u
cyh2YWx1ZSwgbV9zdHlsZSwgb3BlcmF0aW9ucyk7CisgICAgICAgIGNyZWF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbnModmFsdWUsIHN0eWxlKCksIG9wZXJhdGlvbnMpOwogICAgICAgICBtX3N0eWxlLT5z
ZXRUcmFuc2Zvcm0ob3BlcmF0aW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00ODkx
LDcgKzQ4NzUsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAg
ICAgICAgIExlbmd0aCBsOwogICAgICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmlt
aXRpdmVUeXBlKCk7CiAgICAgICAgIGlmICh0eXBlID4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
RVJDRU5UQUdFICYmIHR5cGUgPCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRykKLSAgICAgICAg
ICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgo
bV9zdHlsZSwgem9vbUZhY3RvciksIEZpeGVkKTsKKyAgICAgICAgICAgIGwgPSBMZW5ndGgocHJp
bWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoc3R5bGUoKSwgem9vbUZhY3Rv
ciksIEZpeGVkKTsKICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BFUkNFTlRBR0UpCiAgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5n
ZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKICAgICAgICAgZWxzZQpAQCAtNDkwNSw3ICs0ODg5
LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICBM
ZW5ndGggbDsKICAgICAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlw
ZSgpOwogICAgICAgICBpZiAodHlwZSA+IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFH
RSAmJiB0eXBlIDwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcpCi0gICAgICAgICAgICBsID0g
TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKG1fc3R5bGUs
IHpvb21GYWN0b3IpLCBGaXhlZCk7CisgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZh
bHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIHpvb21GYWN0b3IpLCBGaXhl
ZCk7CiAgICAgICAgIGVsc2UgaWYodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UpCiAgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVW
YWx1ZSgpLCBQZXJjZW50KTsKICAgICAgICAgZWxzZQpAQCAtNTEzMCw3ICs1MTE0LDcgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsU2l6ZShGaWxsTAogICAgIGlmIChmaXJzdFR5cGUg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOKQogICAgICAgICBmaXJzdExlbmd0aCA9
IExlbmd0aChBdXRvKTsKICAgICBlbHNlIGlmIChmaXJzdFR5cGUgPiBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0UgJiYgZmlyc3RUeXBlIDwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19E
RUcpCi0gICAgICAgIGZpcnN0TGVuZ3RoID0gTGVuZ3RoKGZpcnN0LT5jb21wdXRlTGVuZ3RoSW50
Rm9yTGVuZ3RoKG1fc3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCk7CisgICAgICAgIGZpcnN0TGVu
Z3RoID0gTGVuZ3RoKGZpcnN0LT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIHpv
b21GYWN0b3IpLCBGaXhlZCk7CiAgICAgZWxzZSBpZiAoZmlyc3RUeXBlID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgZmlyc3RMZW5ndGggPSBMZW5ndGgoZmly
c3QtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwogICAgIGVsc2UKQEAgLTUxMzksNyArNTEy
Myw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmlsbFNpemUoRmlsbEwKICAgICBpZiAo
c2Vjb25kVHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOS05PV04pCiAgICAgICAgIHNl
Y29uZExlbmd0aCA9IExlbmd0aChBdXRvKTsKICAgICBlbHNlIGlmIChzZWNvbmRUeXBlID4gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFICYmIHNlY29uZFR5cGUgPCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0RFRykKLSAgICAgICAgc2Vjb25kTGVuZ3RoID0gTGVuZ3RoKHNlY29uZC0+
Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChtX3N0eWxlLCB6b29tRmFjdG9yKSwgRml4ZWQpOwor
ICAgICAgICBzZWNvbmRMZW5ndGggPSBMZW5ndGgoc2Vjb25kLT5jb21wdXRlTGVuZ3RoSW50Rm9y
TGVuZ3RoKHN0eWxlKCksIHpvb21GYWN0b3IpLCBGaXhlZCk7CiAgICAgZWxzZSBpZiAoc2Vjb25k
VHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCiAgICAgICAgIHNlY29u
ZExlbmd0aCA9IExlbmd0aChzZWNvbmQtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwogICAg
IGVsc2UKQEAgLTUxNjYsNyArNTE1MCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwRmls
bFhQb3NpdGlvbigKICAgICBMZW5ndGggbDsKICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZhbHVl
LT5wcmltaXRpdmVUeXBlKCk7CiAgICAgaWYgKHR5cGUgPiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1BFUkNFTlRBR0UgJiYgdHlwZSA8IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKQotICAgICAg
ICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKG1f
c3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCk7CisgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZl
VmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoc3R5bGUoKSwgem9vbUZhY3RvciksIEZp
eGVkKTsKICAgICBlbHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VO
VEFHRSkKICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KSwgUGVyY2VudCk7CiAgICAgZWxzZQpAQCAtNTE5MCw3ICs1MTc0LDcgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjptYXBGaWxsWVBvc2l0aW9uKAogICAgIExlbmd0aCBsOwogICAgIGludCB0eXBl
ID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKICAgICBpZiAodHlwZSA+IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiB0eXBlIDwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19ERUcpCi0gICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5n
dGhJbnRGb3JMZW5ndGgobV9zdHlsZSwgem9vbUZhY3RvciksIEZpeGVkKTsKKyAgICAgICAgbCA9
IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChzdHlsZSgp
LCB6b29tRmFjdG9yKSwgRml4ZWQpOwogICAgIGVsc2UgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QRVJDRU5UQUdFKQogICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVl
LT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKICAgICBlbHNlCkluZGV4OiBjc3MvQ1NTU3R5
bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJldmlz
aW9uIDM3NTg2KQorKysgY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
ODMsMTYgKzgzLDE4IEBAIHB1YmxpYzoKIAogICAgICAgICB2b2lkIGluaXRFbGVtZW50QW5kUHNl
dWRvU3RhdGUoRWxlbWVudCopOwogICAgICAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxl
bWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFJlbmRlclN0eWxlOjpQc2V1ZG9J
ZCA9IFJlbmRlclN0eWxlOjpOT1BTRVVETyk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZUZv
ckVsZW1lbnQoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIGJvb2wgYWxs
b3dTaGFyaW5nID0gdHJ1ZSwgYm9vbCByZXNvbHZlRm9yUm9vdERlZmF1bHQgPSBmYWxzZSk7Cisg
ICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50Kiwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9vbCBhbGxvd1NoYXJpbmcgPSB0cnVlLCBi
b29sIHJlc29sdmVGb3JSb290RGVmYXVsdCA9IGZhbHNlKTsKICAgICAgICAgdm9pZCBrZXlmcmFt
ZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBLZXlmcmFt
ZUxpc3QmIGxpc3QpOwogCi0gICAgICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZUZvckVsZW1l
bnQoUmVuZGVyU3R5bGU6OlBzZXVkb0lkLCBFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlID0gMCk7CisgICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHBzZXVkb1N0eWxlRm9y
RWxlbWVudChSZW5kZXJTdHlsZTo6UHNldWRvSWQsIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSAwKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlbmRlclN0eWxlKiBsb2Nh
dGVTaGFyZWRTdHlsZSgpOwogICAgICAgICBOb2RlKiBsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQq
IHBhcmVudCwgdW5zaWduZWQgZGVwdGggPSAxKTsKICAgICAgICAgYm9vbCBjYW5TaGFyZVN0eWxl
V2l0aEVsZW1lbnQoTm9kZSopOwogCisgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KKwogICAgIHB1YmxpYzoKICAgICAgICAgLy8gVGhl
c2UgbWV0aG9kcyB3aWxsIGdpdmUgYmFjayB0aGUgc2V0IG9mIHJ1bGVzIHRoYXQgbWF0Y2hlZCBm
b3IgYSBnaXZlbiBlbGVtZW50IChvciBhIHBzZXVkby1lbGVtZW50KS4KICAgICAgICAgUGFzc1Jl
ZlB0cjxDU1NSdWxlTGlzdD4gc3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCosIGJvb2wgYXV0
aG9yT25seSk7CkBAIC0yNDksMTMgKzI1MSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIFJlZlB0cjxD
U1NSdWxlTGlzdD4gbV9ydWxlTGlzdDsKIAogICAgICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yKiBt
X21lZGl1bTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIG1fcm9vdERlZmF1bHRTdHlsZTsKKyAgICAg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3Jvb3REZWZhdWx0U3R5bGU7CiAKICAgICAgICAgUmVu
ZGVyU3R5bGU6OlBzZXVkb0lkIG1fZHluYW1pY1BzZXVkbzsKIAogICAgICAgICBTZWxlY3RvckNo
ZWNrZXIgbV9jaGVja2VyOwogCi0gICAgICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOworICAgICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBtX3Bh
cmVudFN0eWxlOwogICAgICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7CiAgICAgICAgIFN0eWxlZEVs
ZW1lbnQqIG1fc3R5bGVkRWxlbWVudDsKSW5kZXg6IGRvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzc1OTEpCisrKyBkb20vRG9jdW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTI5LDIyICsxMTI5LDE4IEBAIHZvaWQgRG9jdW1lbnQ6
OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGMKICAgICAgICAgLy8gc3R5bGUgc2VsZWN0b3IgbWF5
IHNldCB0aGlzIGFnYWluIGR1cmluZyByZWNhbGMKICAgICAgICAgbV9oYXNOb2Rlc1dpdGhQbGFj
ZWhvbGRlclN0eWxlID0gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBSZW5kZXJTdHlsZSogb2xk
U3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOwotICAgICAgICBpZiAob2xkU3R5bGUpCi0gICAg
ICAgICAgICBvbGRTdHlsZS0+cmVmKCk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBfc3R5bGUgPSBu
ZXcgKG1fcmVuZGVyQXJlbmEpIFJlbmRlclN0eWxlKCk7Ci0gICAgICAgIF9zdHlsZS0+cmVmKCk7
Ci0gICAgICAgIF9zdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Ci0gICAgICAgIF9zdHlsZS0+c2V0
VmlzdWFsbHlPcmRlcmVkKHZpc3VhbGx5T3JkZXJlZCk7Ci0gICAgICAgIF9zdHlsZS0+c2V0Wm9v
bShmcmFtZSgpLT5wYWdlWm9vbUZhY3RvcigpKTsKLSAgICAgICAgbV9zdHlsZVNlbGVjdG9yLT5z
ZXRTdHlsZShfc3R5bGUpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGRvY3VtZW50U3R5
bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldERp
c3BsYXkoQkxPQ0spOworICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXRWaXN1YWxseU9yZGVyZWQo
dmlzdWFsbHlPcmRlcmVkKTsKKyAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0Wm9vbShmcmFtZSgp
LT5wYWdlWm9vbUZhY3RvcigpKTsKKyAgICAgICAgbV9zdHlsZVNlbGVjdG9yLT5zZXRTdHlsZShk
b2N1bWVudFN0eWxlLmdldCgpKTsKICAgICAKICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbjsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KHBy
aW50aW5nKCkpOwogICAgICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gdGhpcy0+c2V0dGlu
Z3MoKSkgewogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFJlbmRlcmluZ01vZGUoc2V0
dGluZ3MtPmZvbnRSZW5kZXJpbmdNb2RlKCkpOwogICAgICAgICAgICAgaWYgKHByaW50aW5nKCkg
JiYgIXNldHRpbmdzLT5zaG91bGRQcmludEJhY2tncm91bmRzKCkpCi0gICAgICAgICAgICAgICAg
X3N0eWxlLT5zZXRGb3JjZUJhY2tncm91bmRzVG9XaGl0ZSh0cnVlKTsKKyAgICAgICAgICAgICAg
ICBkb2N1bWVudFN0eWxlLT5zZXRGb3JjZUJhY2tncm91bmRzVG9XaGl0ZSh0cnVlKTsKICAgICAg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc3RkZm9udCA9IHNldHRpbmdzLT5zdGFuZGFyZEZv
bnRGYW1pbHkoKTsKICAgICAgICAgICAgIGlmICghc3RkZm9udC5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoc3RkZm9u
dCk7CkBAIC0xMTU0LDIwICsxMTUwLDE2IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0eWxlKFN0
eWxlQ2hhbmdlIGMKICAgICAgICAgICAgIG1fc3R5bGVTZWxlY3Rvci0+c2V0Rm9udFNpemUoZm9u
dERlc2NyaXB0aW9uLCBtX3N0eWxlU2VsZWN0b3ItPmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1
ZU1lZGl1bSwgaW5Db21wYXRNb2RlKCksIGZhbHNlKSk7CiAgICAgICAgIH0KIAotICAgICAgICBf
c3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAgICAgICBfc3R5
bGUtPmZvbnQoKS51cGRhdGUobV9zdHlsZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKSk7CisgICAg
ICAgIGRvY3VtZW50U3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwor
ICAgICAgICBkb2N1bWVudFN0eWxlLT5mb250KCkudXBkYXRlKG1fc3R5bGVTZWxlY3Rvci0+Zm9u
dFNlbGVjdG9yKCkpOwogICAgICAgICBpZiAoaW5Db21wYXRNb2RlKCkpCi0gICAgICAgICAgICBf
c3R5bGUtPnNldEh0bWxIYWNrcyh0cnVlKTsgLy8gZW5hYmxlIGh0bWwgc3BlY2lmaWMgcmVuZGVy
aW5nIHRyaWNrcworICAgICAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0SHRtbEhhY2tzKHRydWUp
OyAvLyBlbmFibGUgaHRtbCBzcGVjaWZpYyByZW5kZXJpbmcgdHJpY2tzCiAKLSAgICAgICAgU3R5
bGVDaGFuZ2UgY2ggPSBkaWZmKF9zdHlsZSwgb2xkU3R5bGUpOworICAgICAgICBTdHlsZUNoYW5n
ZSBjaCA9IGRpZmYoZG9jdW1lbnRTdHlsZS5nZXQoKSwgcmVuZGVyZXIoKS0+c3R5bGUoKSk7CiAg
ICAgICAgIGlmIChyZW5kZXJlcigpICYmIGNoICE9IE5vQ2hhbmdlKQotICAgICAgICAgICAgcmVu
ZGVyZXIoKS0+c2V0U3R5bGUoX3N0eWxlKTsKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldFN0
eWxlKGRvY3VtZW50U3R5bGUuZ2V0KCkpOwogICAgICAgICBpZiAoY2hhbmdlICE9IEZvcmNlKQog
ICAgICAgICAgICAgY2hhbmdlID0gY2g7Ci0KLSAgICAgICAgX3N0eWxlLT5kZXJlZihtX3JlbmRl
ckFyZW5hKTsKLSAgICAgICAgaWYgKG9sZFN0eWxlKQotICAgICAgICAgICAgb2xkU3R5bGUtPmRl
cmVmKG1fcmVuZGVyQXJlbmEpOwogICAgIH0KIAogICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Q2hp
bGQoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCkluZGV4OiBkb20vRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIGRvbS9FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA5LDcgKzYwOSw3IEBAIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIEVsZW1lbnQ6OmltYWdlU291cmMKICAgICByZXR1cm4gc3JjQXR0cjsKIH0KIAotUmVu
ZGVyU3R5bGUqIEVsZW1lbnQ6OnN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBwYXJlbnRS
ZW5kZXJlcikKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IEVsZW1lbnQ6OnN0eWxlRm9yUmVuZGVy
ZXIoUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlcikKIHsKICAgICByZXR1cm4gZG9jdW1lbnQo
KS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQodGhpcyk7CiB9CkBAIC02OTQsMTcg
KzY5NCwxNSBAQCB2b2lkIEVsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0eWxlQ2hhbmdlIGNoCiAgICAg
ICAgICAgICByYXJlRGF0YSgpLT5yZXNldENvbXB1dGVkU3R5bGUodGhpcyk7CiAgICAgfQogICAg
IGlmIChoYXNQYXJlbnRTdHlsZSAmJiAoY2hhbmdlID49IEluaGVyaXQgfHwgY2hhbmdlZCgpKSkg
ewotICAgICAgICBSZW5kZXJTdHlsZSAqbmV3U3R5bGUgPSBkb2N1bWVudCgpLT5zdHlsZVNlbGVj
dG9yKCktPnN0eWxlRm9yRWxlbWVudCh0aGlzKTsKLSAgICAgICAgU3R5bGVDaGFuZ2UgY2ggPSBk
aWZmKGN1cnJlbnRTdHlsZSwgbmV3U3R5bGUpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IG5ld1N0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQo
dGhpcyk7CisgICAgICAgIFN0eWxlQ2hhbmdlIGNoID0gZGlmZihjdXJyZW50U3R5bGUsIG5ld1N0
eWxlLmdldCgpKTsKICAgICAgICAgaWYgKGNoID09IERldGFjaCB8fCAhY3VycmVudFN0eWxlKSB7
CiAgICAgICAgICAgICBpZiAoYXR0YWNoZWQoKSkKICAgICAgICAgICAgICAgICBkZXRhY2goKTsK
LSAgICAgICAgICAgIC8vICMjIyBTdWJvcHRpbWFsLiBTdHlsZSBnZXRzIGNhbGN1bGF0ZWQgYWdh
aW4uCi0gICAgICAgICAgICBhdHRhY2goKTsKKyAgICAgICAgICAgIGF0dGFjaCgpOyAvLyBGSVhN
RTogVGhlIHN0eWxlIGdldHMgY29tcHV0ZWQgdHdpY2UgYnkgY2FsbGluZyBhdHRhY2guIFdlIGNv
dWxkIGRvIGJldHRlciBpZiB3ZSBwYXNzZWQgdGhlIHN0eWxlIGFsb25nLgogICAgICAgICAgICAg
Ly8gYXR0YWNoIHJlY2FsdWxhdGVzIHRoZSBzdHlsZSBmb3IgYWxsIGNoaWxkcmVuLiBObyBuZWVk
IHRvIGRvIGl0IHR3aWNlLgogICAgICAgICAgICAgc2V0Q2hhbmdlZChOb1N0eWxlQ2hhbmdlKTsK
ICAgICAgICAgICAgIHNldEhhc0NoYW5nZWRDaGlsZChmYWxzZSk7Ci0gICAgICAgICAgICBuZXdT
dHlsZS0+ZGVyZWYoZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIApAQCAtNzM3LDE0ICs3MzUsMTIgQEAgdm9pZCBFbGVtZW50OjpyZWNh
bGNTdHlsZShTdHlsZUNoYW5nZSBjaAogICAgICAgICAgICAgLy8gc2libGluZy9kZXNjZW5kYW50
IHJ1bGVzLCBzaW5jZSBvdGhlcndpc2UgaXQgaXNuJ3QgcG9zc2libGUgZm9yIGFuY2VzdG9yIHN0
eWxlcyB0byBhZmZlY3Qgc2hhcmluZyBvZgogICAgICAgICAgICAgLy8gZGVzY2VuZGFudHMuCiAg
ICAgICAgICAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5z
ZXRTdHlsZUludGVybmFsKG5ld1N0eWxlKTsKKyAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5z
ZXRTdHlsZUludGVybmFsKG5ld1N0eWxlLmdldCgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBzZXRSZW5kZXJTdHlsZShuZXdTdHlsZSk7CiAgICAgICAgIH0gZWxzZSBpZiAo
c3R5bGVDaGFuZ2VUeXBlKCkgPT0gQW5pbWF0aW9uU3R5bGVDaGFuZ2UpCiAgICAgICAgICAgICAg
c2V0UmVuZGVyU3R5bGUobmV3U3R5bGUpOwogCi0gICAgICAgIG5ld1N0eWxlLT5kZXJlZihkb2N1
bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKLQogICAgICAgICBpZiAoY2hhbmdlICE9IEZvcmNlKSB7
CiAgICAgICAgICAgICBpZiAoKGRvY3VtZW50KCktPnVzZXNEZXNjZW5kYW50UnVsZXMoKSB8fCBo
YXNQb3NpdGlvbmFsUnVsZXMpICYmIHN0eWxlQ2hhbmdlVHlwZSgpID49IEZ1bGxTdHlsZUNoYW5n
ZSkKICAgICAgICAgICAgICAgICBjaGFuZ2UgPSBGb3JjZTsKQEAgLTExODgsNyArMTE4NCw3IEBA
IFJlbmRlclN0eWxlKiBFbGVtZW50Ojpjb21wdXRlZFN0eWxlKCkKICAgICBFbGVtZW50UmFyZURh
dGEqIGRhdGEgPSBlbnN1cmVSYXJlRGF0YSgpOwogICAgIGlmICghZGF0YS0+bV9jb21wdXRlZFN0
eWxlKQogICAgICAgICBkYXRhLT5tX2NvbXB1dGVkU3R5bGUgPSBkb2N1bWVudCgpLT5zdHlsZVNl
bGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudCh0aGlzLCBwYXJlbnQoKSA/IHBhcmVudCgpLT5jb21w
dXRlZFN0eWxlKCkgOiAwKTsKLSAgICByZXR1cm4gZGF0YS0+bV9jb21wdXRlZFN0eWxlOworICAg
IHJldHVybiBkYXRhLT5tX2NvbXB1dGVkU3R5bGUuZ2V0KCk7CiB9CiAKIHZvaWQgRWxlbWVudDo6
Y2FuY2VsRm9jdXNBcHBlYXJhbmNlVXBkYXRlKCkKSW5kZXg6IGRvbS9FbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gZG9tL0VsZW1lbnQuaAkocmV2aXNpb24gMzc1ODYpCisrKyBkb20vRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNyArMTQwLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKLSAgICBSZW5kZXJT
dHlsZSogc3R5bGVGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHBhcmVudCk7CisgICAgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHBhcmVudCk7
CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwg
UmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2Ug
PSBOb0NoYW5nZSk7CiAKSW5kZXg6IGRvbS9FbGVtZW50UmFyZURhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBkb20vRWxlbWVudFJhcmVEYXRhLmgJKHJldmlzaW9uIDM3NTg2KQorKysgZG9tL0VsZW1lbnRS
YXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHJlc2V0Q29tcHV0ZWRTdHlsZShFbGVtZW50Kik7CiAKICAgICBJbnRTaXplIG1fbWluaW11
bVNpemVGb3JSZXNpemluZzsKLSAgICBSZW5kZXJTdHlsZSogbV9jb21wdXRlZFN0eWxlOworICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9jb21wdXRlZFN0eWxlOwogfTsKIAogaW5saW5lIEludFNp
emUgZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKQpAQCAtNDQsNyArNDQsNiBAQCBpbmxp
bmUgSW50U2l6ZSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpCiAKIGlubGluZSBFbGVtZW50UmFy
ZURhdGE6OkVsZW1lbnRSYXJlRGF0YShFbGVtZW50KiBlKQogICAgIDogbV9taW5pbXVtU2l6ZUZv
clJlc2l6aW5nKGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkpCi0gICAgLCBtX2NvbXB1
dGVkU3R5bGUoMCkKIHsKIH0KIApAQCAtNTIsNyArNTEsNiBAQCBpbmxpbmUgdm9pZCBFbGVtZW50
UmFyZURhdGE6OnJlc2V0Q29tcHV0CiB7CiAgICAgaWYgKCFtX2NvbXB1dGVkU3R5bGUpCiAgICAg
ICAgIHJldHVybjsKLSAgICBtX2NvbXB1dGVkU3R5bGUtPmRlcmVmKGVsZW1lbnQtPmRvY3VtZW50
KCktPnJlbmRlckFyZW5hKCkpOwogICAgIG1fY29tcHV0ZWRTdHlsZSA9IDA7CiB9CiAKSW5kZXg6
IGRvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vTm9kZS5jcHAJKHJldmlzaW9uIDM3NTg2
KQorKysgZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMjAgKzExNSwyMCBAQCBO
b2RlOjpTdHlsZUNoYW5nZSBOb2RlOjpkaWZmKCBSZW5kZXJTdHlsCiAgICAgLy8gSWYgdGhlIHBz
ZXVkb1N0eWxlcyBoYXZlIGNoYW5nZWQsIHdlIHdhbnQgYW55IFN0eWxlQ2hhbmdlIHRoYXQgaXMg
bm90IE5vQ2hhbmdlCiAgICAgLy8gYmVjYXVzZSBzZXRTdHlsZSB3aWxsIGRvIHRoZSByaWdodCB0
aGluZyB3aXRoIGFueXRoaW5nIGVsc2UuCiAgICAgaWYgKGNoID09IE5vQ2hhbmdlICYmIHMxLT5o
YXNQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6QkVGT1JFKSkgewotICAgICAgICBSZW5kZXJTdHls
ZSogcHMyID0gczItPmdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpCRUZPUkUpOworICAgICAg
ICBSZW5kZXJTdHlsZSogcHMyID0gczItPmdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxl
OjpCRUZPUkUpOwogICAgICAgICBpZiAoIXBzMikKICAgICAgICAgICAgIGNoID0gTm9Jbmhlcml0
OwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwczEgPSBzMS0+Z2V0
UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkJFRk9SRSk7CisgICAgICAgICAgICBSZW5kZXJTdHls
ZSogcHMxID0gczEtPmdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpCRUZPUkUpOwog
ICAgICAgICAgICAgY2ggPSBwczEgJiYgKnBzMSA9PSAqcHMyID8gTm9DaGFuZ2UgOiBOb0luaGVy
aXQ7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGNoID09IE5vQ2hhbmdlICYmIHMxLT5oYXNQ
c2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6QUZURVIpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBw
czIgPSBzMi0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkFGVEVSKTsKKyAgICAgICAgUmVu
ZGVyU3R5bGUqIHBzMiA9IHMyLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6QUZU
RVIpOwogICAgICAgICBpZiAoIXBzMikKICAgICAgICAgICAgIGNoID0gTm9Jbmhlcml0OwogICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwczEgPSBzMS0+Z2V0UHNldWRv
U3R5bGUoUmVuZGVyU3R5bGU6OkFGVEVSKTsKKyAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwczEg
PSBzMS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkFGVEVSKTsKICAgICAgICAg
ICAgIGNoID0gcHMyICYmICpwczEgPT0gKnBzMiA/IE5vQ2hhbmdlIDogTm9Jbmhlcml0OwogICAg
ICAgICB9CiAgICAgfQpAQCAtMTAyOCwxMCArMTAyOCwxMCBAQCB2b2lkIE5vZGU6OmNyZWF0ZVJl
bmRlcmVySWZOZWVkZWQoKQogICAgICAgICAmJiBwYXJlbnQtPmNoaWxkU2hvdWxkQ3JlYXRlUmVu
ZGVyZXIodGhpcykKICNlbmRpZgogICAgICAgICApIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gc3R5bGVGb3JSZW5kZXJlcihwYXJlbnRSZW5kZXJlcik7Ci0gICAgICAgIGlmIChyZW5k
ZXJlcklzTmVlZGVkKHN0eWxlKSkgewotICAgICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogciA9
IGNyZWF0ZVJlbmRlcmVyKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCksIHN0eWxlKSkgewotICAg
ICAgICAgICAgICAgIGlmICghcGFyZW50UmVuZGVyZXItPmlzQ2hpbGRBbGxvd2VkKHIsIHN0eWxl
KSkKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHN0eWxlRm9yUmVuZGVyZXIo
cGFyZW50UmVuZGVyZXIpOworICAgICAgICBpZiAocmVuZGVyZXJJc05lZWRlZChzdHlsZS5nZXQo
KSkpIHsKKyAgICAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHIgPSBjcmVhdGVSZW5kZXJlcihk
b2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpLCBzdHlsZS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIXBhcmVudFJlbmRlcmVyLT5pc0NoaWxkQWxsb3dlZChyLCBzdHlsZS5nZXQoKSkpCiAg
ICAgICAgICAgICAgICAgICAgIHItPmRlc3Ryb3koKTsKICAgICAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgc2V0UmVuZGVyZXIocik7CkBAIC0xMDQwLDE3ICsxMDQwLDE0
IEBAIHZvaWQgTm9kZTo6Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCgpCiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHN0eWxlLT5kZXJlZihkb2N1bWVu
dCgpLT5yZW5kZXJBcmVuYSgpKTsKICAgICB9CiB9CiAKLVJlbmRlclN0eWxlKiBOb2RlOjpzdHls
ZUZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcGFyZW50KQorUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gTm9kZTo6c3R5bGVGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHBhcmVudCkKIHsKICAgICBp
ZiAoaXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gZG9jdW1lbnQoKS0+c3R5bGVTZWxl
Y3RvcigpLT5zdHlsZUZvckVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHRoaXMpKTsKLSAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSBwYXJlbnQtPnN0eWxlKCk7Ci0gICAgc3R5bGUtPnJlZigp
OwotICAgIHJldHVybiBzdHlsZTsKKyAgICByZXR1cm4gcGFyZW50LT5zdHlsZSgpOwogfQogCiBi
b29sIE5vZGU6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKQpAQCAtMTA2OSw3
ICsxMDY2LDcgQEAgUmVuZGVyU3R5bGUqIE5vZGU6Om5vblJlbmRlcmVyUmVuZGVyU3R5bAogICAg
IHJldHVybiAwOyAKIH0gICAKIAotdm9pZCBOb2RlOjpzZXRSZW5kZXJTdHlsZShSZW5kZXJTdHls
ZSogcykKK3ZvaWQgTm9kZTo6c2V0UmVuZGVyU3R5bGUoY29uc3QgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4mIHMpCiB7CiAgICAgaWYgKG1fcmVuZGVyZXIpCiAgICAgICAgIG1fcmVuZGVyZXItPnNl
dEFuaW1hdGFibGVTdHlsZShzKTsgCkluZGV4OiBkb20vTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRv
bS9Ob2RlLmgJKHJldmlzaW9uIDM3NTg2KQorKysgZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDA4LDcgKzQwOCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3Zl
KCk7CiAgICAgdm9pZCBjcmVhdGVSZW5kZXJlcklmTmVlZGVkKCk7Ci0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBwYXJlbnQpOworICAgIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IHN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBwYXJlbnQpOwogICAg
IHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAjaWYgRU5BQkxF
KFNWRykKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlKikg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNDE3LDcgKzQxNyw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICAvLyBXcmFwcGVyIGZvciBub2RlcyB0aGF0IGRvbid0IGhhdmUgYSByZW5kZXJlciwgYnV0
IHN0aWxsIGNhY2hlIHRoZSBzdHlsZSAobGlrZSBIVE1MT3B0aW9uRWxlbWVudCkuCiAgICAgUmVu
ZGVyU3R5bGUqIHJlbmRlclN0eWxlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJlbmRl
clN0eWxlKFJlbmRlclN0eWxlKik7CisgICAgdmlydHVhbCB2b2lkIHNldFJlbmRlclN0eWxlKGNv
bnN0IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+Jik7CiAKICAgICB2aXJ0dWFsIFJlbmRlclN0eWxl
KiBjb21wdXRlZFN0eWxlKCk7CiAKSW5kZXg6IGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBodG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJl
dmlzaW9uIDM3NTg2KQorKysgaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTgxLDIxICsxMTgxLDE3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzZXRGb250KGMKICAgICAKICAgICAvLyBNYXAgdGhlIDxjYW52YXM+IGZvbnQgaW50
byB0aGUgdGV4dCBzdHlsZS4gSWYgdGhlIGZvbnQgdXNlcyBrZXl3b3JkcyBsaWtlIGxhcmdlci9z
bWFsbGVyLCB0aGVzZSB3aWxsIHdvcmsKICAgICAvLyByZWxhdGl2ZSB0byB0aGUgY2FudmFzLgot
ICAgIFJlbmRlckFyZW5hKiBhcmVuYSA9IG1fY2FudmFzLT5kb2N1bWVudCgpLT5yZW5kZXJBcmVu
YSgpOwotICAgIFJlbmRlclN0eWxlKiBuZXdTdHlsZSA9IG5ldyAoYXJlbmEpIFJlbmRlclN0eWxl
KCk7Ci0gICAgbmV3U3R5bGUtPnJlZigpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5
bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgaWYgKG1fY2FudmFzLT5jb21wdXRlZFN0
eWxlKCkpCiAgICAgICAgIG5ld1N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24obV9jYW52YXMtPmNv
bXB1dGVkU3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkpOwogCiAgICAgLy8gTm93IG1hcCB0aGUg
Zm9udCBwcm9wZXJ0eSBpbnRvIHRoZSBzdHlsZS4KICAgICBDU1NTdHlsZVNlbGVjdG9yKiBzdHls
ZVNlbGVjdG9yID0gbV9jYW52YXMtPmRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKTsKLSAgICBz
dHlsZVNlbGVjdG9yLT5hcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUZvbnQsIHRlbXBE
ZWNsLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udCkuZ2V0KCksIG5ld1N0eWxl
KTsKKyAgICBzdHlsZVNlbGVjdG9yLT5hcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUZv
bnQsIHRlbXBEZWNsLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udCkuZ2V0KCks
IG5ld1N0eWxlLmdldCgpKTsKICAgICAKICAgICBzdGF0ZSgpLm1fZm9udCA9IG5ld1N0eWxlLT5m
b250KCk7CiAgICAgc3RhdGUoKS5tX2ZvbnQudXBkYXRlKHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxl
Y3RvcigpKTsKICAgICBzdGF0ZSgpLm1fcmVhbGl6ZWRGb250ID0gdHJ1ZTsKLQotICAgIG5ld1N0
eWxlLT5kZXJlZihhcmVuYSk7CiAgICAgCiAgICAgLy8gU2V0IHRoZSBmb250IGluIHRoZSBncmFw
aGljcyBjb250ZXh0LgogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7
CkluZGV4OiBodG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwv
SFRNTE9wdEdyb3VwRWxlbWVudC5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgaHRtbC9IVE1MT3B0
R3JvdXBFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDM2ICsxMzIsMjUgQEAgYm9v
bCBIVE1MT3B0R3JvdXBFbGVtZW50OjpjaGVja0RURChjb25zdAogCiB2b2lkIEhUTUxPcHRHcm91
cEVsZW1lbnQ6OmF0dGFjaCgpCiB7Ci0gICAgaWYgKHBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUo
KSkgewotICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclJlbmRlcmVyKDApOwot
ICAgICAgICBzZXRSZW5kZXJTdHlsZShzdHlsZSk7Ci0gICAgICAgIHN0eWxlLT5kZXJlZihkb2N1
bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKLSAgICB9CisgICAgaWYgKHBhcmVudE5vZGUoKS0+cmVu
ZGVyU3R5bGUoKSkKKyAgICAgICAgc2V0UmVuZGVyU3R5bGUoc3R5bGVGb3JSZW5kZXJlcigwKSk7
CiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0YWNoKCk7CiB9CiAKIHZvaWQgSFRNTE9w
dEdyb3VwRWxlbWVudDo6ZGV0YWNoKCkKIHsKLSAgICBpZiAobV9zdHlsZSkgewotICAgICAgICBt
X3N0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKLSAgICAgICAgbV9zdHls
ZSA9IDA7Ci0gICAgfQorICAgIG1fc3R5bGUuY2xlYXIoKTsKICAgICBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpkZXRhY2goKTsKIH0KIAotdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50OjpzZXRSZW5k
ZXJTdHlsZShSZW5kZXJTdHlsZSogbmV3U3R5bGUpCit2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6
OnNldFJlbmRlclN0eWxlKGNvbnN0IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+JiBuZXdTdHlsZSkK
IHsKLSAgICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSBtX3N0eWxlOwogICAgIG1fc3R5bGUgPSBu
ZXdTdHlsZTsKLSAgICBpZiAobmV3U3R5bGUpCi0gICAgICAgIG5ld1N0eWxlLT5yZWYoKTsKLSAg
ICBpZiAob2xkU3R5bGUpCi0gICAgICAgIG9sZFN0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5k
ZXJBcmVuYSgpKTsKIH0KICAgICAKIFJlbmRlclN0eWxlKiBIVE1MT3B0R3JvdXBFbGVtZW50Ojpu
b25SZW5kZXJlclJlbmRlclN0eWxlKCkgY29uc3QgCiB7IAotICAgIHJldHVybiBtX3N0eWxlOyAK
KyAgICByZXR1cm4gbV9zdHlsZS5nZXQoKTsgCiB9CiAKIFN0cmluZyBIVE1MT3B0R3JvdXBFbGVt
ZW50Ojpncm91cExhYmVsVGV4dCgpIGNvbnN0CkluZGV4OiBodG1sL0hUTUxPcHRHcm91cEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuaAkocmV2aXNpb24g
Mzc1ODYpCisrKyBodG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQo
UmVuZGVyU3R5bGUqKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2go
KTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJlbmRl
clN0eWxlKFJlbmRlclN0eWxlKik7CisgICAgdmlydHVhbCB2b2lkIHNldFJlbmRlclN0eWxlKGNv
bnN0IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+Jik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW5zZXJ0
QmVmb3JlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBFeGNlcHRp
b25Db2RlJiwgYm9vbCBzaG91bGRMYXp5QXR0YWNoID0gZmFsc2UpOwogICAgIHZpcnR1YWwgYm9v
bCByZXBsYWNlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogb2xkQ2hpbGQs
IEV4Y2VwdGlvbkNvZGUmLCBib29sIHNob3VsZExhenlBdHRhY2ggPSBmYWxzZSk7CkBAIC02Miw3
ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCByZWNhbGNTZWxlY3RPcHRpb25zKCk7
CiAKLSAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1f
c3R5bGU7CiB9OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBodG1sL0hUTUxPcHRpb25FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24g
Mzc1ODYpCisrKyBodG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcsMjAgKzU3LDE0IEBAIGJvb2wgSFRNTE9wdGlvbkVsZW1lbnQ6OmNoZWNrRFREKGNvbnN0IE4K
IAogdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6YXR0YWNoKCkKIHsKLSAgICBpZiAocGFyZW50Tm9k
ZSgpLT5yZW5kZXJTdHlsZSgpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHN0eWxl
Rm9yUmVuZGVyZXIoMCk7Ci0gICAgICAgIHNldFJlbmRlclN0eWxlKHN0eWxlKTsKLSAgICAgICAg
c3R5bGUtPmRlcmVmKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpOwotICAgIH0KKyAgICBpZiAo
cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpKQorICAgICAgICBzZXRSZW5kZXJTdHlsZShzdHls
ZUZvclJlbmRlcmVyKDApKTsKICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjphdHRhY2goKTsK
IH0KIAogdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6ZGV0YWNoKCkKIHsKLSAgICBpZiAobV9zdHls
ZSkgewotICAgICAgICBtX3N0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsK
LSAgICAgICAgbV9zdHlsZSA9IDA7Ci0gICAgfQorICAgIG1fc3R5bGUuY2xlYXIoKTsKICAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZXRhY2goKTsKIH0KIApAQCAtMjM1LDE5ICsyMjksMTQg
QEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0TGFiZWwoY29uc3QgUwogICAgIHNldEF0dHJp
YnV0ZShsYWJlbEF0dHIsIHZhbHVlKTsKIH0KIAotdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0
UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQordm9pZCBIVE1MT3B0aW9uRWxlbWVu
dDo6c2V0UmVuZGVyU3R5bGUoY29uc3QgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4mIG5ld1N0eWxl
KQogewotICAgIFJlbmRlclN0eWxlKiBvbGRTdHlsZSA9IG1fc3R5bGU7CiAgICAgbV9zdHlsZSA9
IG5ld1N0eWxlOwotICAgIGlmIChuZXdTdHlsZSkKLSAgICAgICAgbmV3U3R5bGUtPnJlZigpOwot
ICAgIGlmIChvbGRTdHlsZSkKLSAgICAgICAgb2xkU3R5bGUtPmRlcmVmKGRvY3VtZW50KCktPnJl
bmRlckFyZW5hKCkpOwogfQogCiBSZW5kZXJTdHlsZSogSFRNTE9wdGlvbkVsZW1lbnQ6Om5vblJl
bmRlcmVyUmVuZGVyU3R5bGUoKSBjb25zdCAKIHsgCi0gICAgcmV0dXJuIG1fc3R5bGU7IAorICAg
IHJldHVybiBtX3N0eWxlLmdldCgpOyAKIH0KIAogU3RyaW5nIEhUTUxPcHRpb25FbGVtZW50Ojpv
cHRpb25UZXh0KCkKSW5kZXg6IGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBodG1sL0hUTUxPcHRpb25FbGVtZW50LmgJKHJldmlzaW9uIDM3NTg2KQorKysgaHRtbC9IVE1M
T3B0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopIHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBk
ZXRhY2goKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVuZGVyU3R5bGUoY29uc3QgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4mKTsKICAgICAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNv
bnN0OwogCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgU3RyaW5nIG1fdmFs
dWU7CiAgICAgYm9vbCBtX3NlbGVjdGVkOwotICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOworICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6
IHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25CYXNlLmgJKHJldmlzaW9uIDM3NTg2KQorKysgcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNyArMTgxLDcgQEAgcHVibGlj
OgogICAgIGRvdWJsZSBwcm9ncmVzcyhkb3VibGUgc2NhbGUsIGRvdWJsZSBvZmZzZXQsIGNvbnN0
IFRpbWluZ0Z1bmN0aW9uKikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShDb21w
b3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVu
dFN0eWxlLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogdGFy
Z2V0U3R5bGUsIFJlbmRlclN0eWxlKiYgYW5pbWF0ZWRTdHlsZSkgeyB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVy
U3R5bGU+JiBhbmltYXRlZFN0eWxlKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGaXJl
RXZlbnRzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIApJbmRleDogcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9hbmltYXRpb24vQW5p
bWF0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMyw3ICsyMjMsNyBA
QCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbmNlbEFuaW1hdGlvCiAgICAgfQogfQogCi1S
ZW5kZXJTdHlsZSogQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpCitQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVBbmltYXRpb25zKFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKIHsgICAgCiAgICAgLy8gRG9uJ3Qg
ZG8gYW55dGhpbmcgaWYgd2UncmUgaW4gdGhlIGNhY2hlCiAgICAgaWYgKCFyZW5kZXJlci0+ZG9j
dW1lbnQoKSB8fCByZW5kZXJlci0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkKQEAgLTIzNCw3
ICsyMzQsNyBAQCBSZW5kZXJTdHlsZSogQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlCiAgICAg
aWYgKCghb2xkU3R5bGUgfHwgKCFvbGRTdHlsZS0+YW5pbWF0aW9ucygpICYmICFvbGRTdHlsZS0+
dHJhbnNpdGlvbnMoKSkpICYmICghbmV3U3R5bGUtPmFuaW1hdGlvbnMoKSAmJiAhbmV3U3R5bGUt
PnRyYW5zaXRpb25zKCkpKQogICAgICAgICByZXR1cm4gbmV3U3R5bGU7CiAKLSAgICBSZW5kZXJT
dHlsZSogYmxlbmRlZFN0eWxlID0gbmV3U3R5bGU7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBi
bGVuZGVkU3R5bGUgPSBuZXdTdHlsZTsKICAgICAKICAgICAvLyBGZXRjaCBvdXIgY3VycmVudCBz
ZXQgb2YgaW1wbGljaXQgYW5pbWF0aW9ucyBmcm9tIGEgaGFzaHRhYmxlLiAgV2UgdGhlbiBjb21w
YXJlIHRoZW0KICAgICAvLyBhZ2FpbnN0IHRoZSBhbmltYXRpb25zIGluIHRoZSBzdHlsZSBhbmQg
bWFrZSBzdXJlIHdlJ3JlIGluIHN5bmMuICBJZiBkZXN0aW5hdGlvbiB2YWx1ZXMKSW5kZXg6IHBh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDM3NTg2KQorKysgcGFnZS9h
bmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw4IEBACiAjaWZuZGVmIEFuaW1hdGlvbkNvbnRyb2xsZXJfaAogI2RlZmluZSBBbmltYXRpb25D
b250cm9sbGVyX2gKIAorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU7CkBAIC00Myw3ICs0
NSw3IEBAIHB1YmxpYzoKICAgICB+QW5pbWF0aW9uQ29udHJvbGxlcigpOwogCiAgICAgdm9pZCBj
YW5jZWxBbmltYXRpb25zKFJlbmRlck9iamVjdCopOwotICAgIFJlbmRlclN0eWxlKiB1cGRhdGVB
bmltYXRpb25zKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CisgICAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gdXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqLCBSZW5k
ZXJTdHlsZSogbmV3U3R5bGUpOwogCiAgICAgdm9pZCBzZXRBbmltYXRpb25TdGFydFRpbWUoUmVu
ZGVyT2JqZWN0KiwgZG91YmxlIHQpOwogICAgIHZvaWQgc2V0VHJhbnNpdGlvblN0YXJ0VGltZShS
ZW5kZXJPYmplY3QqLCBpbnQgcHJvcGVydHksIGRvdWJsZSB0KTsKSW5kZXg6IHBhZ2UvYW5pbWF0
aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9hbmltYXRpb24v
Q29tcG9zaXRlQW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyBwYWdlL2FuaW1hdGlv
bi9Db21wb3NpdGVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBA
IHB1YmxpYzoKICAgICAKICAgICB+Q29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZSgpOwogCi0gICAg
UmVuZGVyU3R5bGUqIGFuaW1hdGUoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1
cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKKyAgICBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBhbmltYXRlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5
bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CiAKICAgICB2b2lkIHNldEFuaW1hdGluZyhi
b29sKTsKICAgICBib29sIGlzQW5pbWF0aW5nKCkgY29uc3Q7CkBAIC03OSw4ICs3OSw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZShib29sKTsKIAogcHJv
dGVjdGVkOgotICAgIHZvaWQgdXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKLSAg
ICB2b2lkIHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOworICAgIHZv
aWQgdXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIGN1cnJlbnRT
dHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZUtleWZyYW1l
QW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5k
ZXJTdHlsZSogdGFyZ2V0U3R5bGUpOwogCiBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxp
bnQsIFJlZlB0cjxJbXBsaWNpdEFuaW1hdGlvbj4gPiBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
OwpAQCAtMTAwLDcgKzEwMCw3IEBAIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6On5Db21wb3Np
dGVBbmkKICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jbGVhcigpOwogfQogICAgIAotdm9pZCBD
b21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSog
dGFyZ2V0U3R5bGUpCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OnVwZGF0ZVRyYW5z
aXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUs
IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKIHsKICAgICAvLyBJZiBjdXJyZW50U3R5bGUgaXMg
bnVsbCwgd2UgZG9uJ3QgZG8gdHJhbnNpdGlvbnMKICAgICBpZiAoIWN1cnJlbnRTdHlsZSB8fCAh
dGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCkpCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBDb21w
b3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVUcgogICAgICAgICAgICAgLy8gYW5kIHdlIGhh
dmUgdG8gdXNlIHRoZSB1bmFuaW1hdGVkU3R5bGUgZnJvbSB0aGUgYW5pbWF0aW9uLiBXZSBkbyB0
aGUgdGVzdAogICAgICAgICAgICAgLy8gYWdhaW5zdCB0aGUgdW5hbmltYXRlZCBzdHlsZSBoZXJl
LCBidXQgd2UgIm92ZXJyaWRlIiB0aGUgdHJhbnNpdGlvbiBsYXRlci4KICAgICAgICAgICAgIGNv
bnN0IEtleWZyYW1lQW5pbWF0aW9uKiBrZXlmcmFtZUFuaW0gPSBnZXRBbmltYXRpb25Gb3JQcm9w
ZXJ0eShwcm9wKTsKLSAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUgPSBr
ZXlmcmFtZUFuaW0gPyBrZXlmcmFtZUFuaW0tPnVuYW5pbWF0ZWRTdHlsZSgpIDogY3VycmVudFN0
eWxlOworICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSA9IGtleWZyYW1lQW5pbSA/
IGtleWZyYW1lQW5pbS0+dW5hbmltYXRlZFN0eWxlKCkgOiBjdXJyZW50U3R5bGU7CiAKICAgICAg
ICAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhIGN1cnJlbnQgdHJhbnNpdGlvbiBmb3IgdGhpcyBw
cm9wCiAgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogaW1wbEFuaW0gPSBtX3RyYW5zaXRp
b25zLmdldChwcm9wKS5nZXQoKTsKQEAgLTE2OCw3ICsxNjgsNyBAQCB2b2lkIENvbXBvc2l0ZUFu
aW1hdGlvblByaXZhdGU6OnVwZGF0ZVRyCiAgICAgfQogfQogCi12b2lkIENvbXBvc2l0ZUFuaW1h
dGlvblByaXZhdGU6OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRl
cmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0
U3R5bGUpCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OnVwZGF0ZUtleWZyYW1lQW5p
bWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCiB7CiAgICAgLy8gTm90aGluZyB0byBkbyBpZiB3
ZSBkb24ndCBoYXZlIGFueSBhbmltYXRpb25zLCBhbmQgZGlkbid0IGhhdmUgYW55IGJlZm9yZQog
ICAgIGlmIChtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkgJiYgIXRhcmdldFN0eWxlLT5o
YXNBbmltYXRpb25zKCkpCkBAIC0yMjYsOSArMjI2LDkgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRp
b25Qcml2YXRlOjp1cGRhdGVLZQogICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5yZW1vdmUo
YW5pbXNUb0JlUmVtb3ZlZFtqXSk7CiB9CiAKLVJlbmRlclN0eWxlKiBDb21wb3NpdGVBbmltYXRp
b25Qcml2YXRlOjphbmltYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0
eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKK1Bhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OmFuaW1hdGUoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRh
cmdldFN0eWxlKQogewotICAgIFJlbmRlclN0eWxlKiByZXN1bHRTdHlsZSA9IDA7CisgICAgUmVm
UHRyPFJlbmRlclN0eWxlPiByZXN1bHRTdHlsZTsKIAogICAgIC8vIFVwZGF0ZSBhbmltYXRpb25z
IGZpcnN0IHNvIHdlIGNhbiBzZWUgaWYgYW55IHRyYW5zaXRpb25zIGFyZSBvdmVycmlkZGVuCiAg
ICAgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdl
dFN0eWxlKTsKQEAgLTUyMSw3ICs1MjEsNyBAQCBDb21wb3NpdGVBbmltYXRpb246On5Db21wb3Np
dGVBbmltYXRpb24oCiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotUmVuZGVyU3R5bGUqIENvbXBv
c2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5k
ZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCitQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdl
dFN0eWxlKQogewogICAgIHJldHVybiBtX2RhdGEtPmFuaW1hdGUocmVuZGVyZXIsIGN1cnJlbnRT
dHlsZSwgdGFyZ2V0U3R5bGUpOwogfQpJbmRleDogcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5p
bWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9u
LmgJKHJldmlzaW9uIDM3NTg2KQorKysgcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIENvbXBvc2l0
ZUFuaW1hdGlvbihBbmltYXRpb25Db250cm9sbGVyKiBhbmltYXRpb25Db250cm9sbGVyKTsKICAg
ICB+Q29tcG9zaXRlQW5pbWF0aW9uKCk7CiAKLSAgICBSZW5kZXJTdHlsZSogYW5pbWF0ZShSZW5k
ZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSog
dGFyZ2V0U3R5bGUpOworICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGUoUmVuZGVy
T2JqZWN0KiwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0
eWxlKTsKICAgICBib29sIGlzQW5pbWF0aW5nKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFdhaXRp
bmdGb3JTdHlsZUF2YWlsYWJsZShib29sKTsKSW5kZXg6IHBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0
QW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1h
dGlvbi5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmlt
YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwyOSArMzQsMTkgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1JbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24oY29uc3Qg
QW5pbWF0aW9uKiB0cmFuc2l0aW9uLCBpbnQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0sIGNvbnN0IFJlbmRlclN0
eWxlKiBmcm9tU3R5bGUpCitJbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24oY29u
c3QgQW5pbWF0aW9uKiB0cmFuc2l0aW9uLCBpbnQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlck9i
amVjdCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0sIFJlbmRlclN0eWxl
KiBmcm9tU3R5bGUpCiAgICAgOiBBbmltYXRpb25CYXNlKHRyYW5zaXRpb24sIHJlbmRlcmVyLCBj
b21wQW5pbSkKICAgICAsIG1fdHJhbnNpdGlvblByb3BlcnR5KHRyYW5zaXRpb24tPnByb3BlcnR5
KCkpCiAgICAgLCBtX2FuaW1hdGluZ1Byb3BlcnR5KGFuaW1hdGluZ1Byb3BlcnR5KQogICAgICwg
bV9vdmVycmlkZGVuKGZhbHNlKQotICAgICwgbV9mcm9tU3R5bGUoMCkKLSAgICAsIG1fdG9TdHls
ZSgwKQogewogICAgIEFTU0VSVChhbmltYXRpbmdQcm9wZXJ0eSAhPSBjQW5pbWF0ZUFsbCk7Ci0g
ICAgaWYgKGZyb21TdHlsZSkgeworICAgIGlmIChmcm9tU3R5bGUpCiAgICAgICAgIG1fZnJvbVN0
eWxlID0gZnJvbVN0eWxlOwotICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4obV9mcm9t
U3R5bGUpLT5yZWYoKTsKLSAgICB9CiB9CiAKIEltcGxpY2l0QW5pbWF0aW9uOjp+SW1wbGljaXRB
bmltYXRpb24oKQogewotICAgIC8vIEdldCByaWQgb2Ygc3R5bGUgcmVmcwotICAgIGlmIChtX2Zy
b21TdHlsZSkKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KG1fZnJvbVN0eWxlKS0+
ZGVyZWYocmVuZGVyZXIoKS0+cmVuZGVyQXJlbmEoKSk7Ci0gICAgaWYgKG1fdG9TdHlsZSkKLSAg
ICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KG1fdG9TdHlsZSktPmRlcmVmKHJlbmRlcmVy
KCktPnJlbmRlckFyZW5hKCkpOwotCiAgICAgLy8gRG8gdGhlIGNsZWFudXAgaGVyZSBpbnN0ZWFk
IG9mIGluIHRoZSBiYXNlIGNsYXNzIHNvIHRoZSBzcGVjaWFsaXplZCBtZXRob2RzIGdldCBjYWxs
ZWQKICAgICBpZiAoIXBvc3RBY3RpdmUoKSkKICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFu
aW1hdGlvblN0YXRlSW5wdXRFbmRBbmltYXRpb24sIC0xKTsKQEAgLTY3LDggKzU3LDggQEAgYm9v
bCBJbXBsaWNpdEFuaW1hdGlvbjo6c2hvdWxkU2VuZEV2ZW50RgogICAgIHJldHVybiBtX29iamVj
dC0+ZG9jdW1lbnQoKS0+aGFzTGlzdGVuZXJUeXBlKGluTGlzdGVuZXJUeXBlKTsKIH0KIAotdm9p
ZCBJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qIGFuaW1hdGlv
biwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHls
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRh
cmdldFN0eWxlLCBSZW5kZXJTdHlsZSomIGFuaW1hdGVkU3R5bGUpCit2b2lkIEltcGxpY2l0QW5p
bWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlZlB0cjxSZW5kZXJT
dHlsZT4mIGFuaW1hdGVkU3R5bGUpCiB7CiAgICAgaWYgKHBhdXNlZCgpKQogICAgICAgICByZXR1
cm47CkBAIC04NSw5ICs3NSw5IEBAIHZvaWQgSW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoQ29t
cG9zaXQKICAgICAvLyBSdW4gYSBjeWNsZSBvZiBhbmltYXRpb24uCiAgICAgLy8gV2Uga25vdyB3
ZSB3aWxsIG5lZWQgYSBuZXcgcmVuZGVyIHN0eWxlLCBzbyBtYWtlIG9uZSBpZiBuZWVkZWQKICAg
ICBpZiAoIWFuaW1hdGVkU3R5bGUpCi0gICAgICAgIGFuaW1hdGVkU3R5bGUgPSBuZXcgKHJlbmRl
cmVyLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgqdGFyZ2V0U3R5bGUpOworICAgICAgICBh
bmltYXRlZFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKHRhcmdldFN0eWxlKTsKIAotICAgIGlm
IChibGVuZFByb3BlcnRpZXModGhpcywgbV9hbmltYXRpbmdQcm9wZXJ0eSwgYW5pbWF0ZWRTdHls
ZSwgbV9mcm9tU3R5bGUsIG1fdG9TdHlsZSwgcHJvZ3Jlc3MoMSwgMCwgMCkpKQorICAgIGlmIChi
bGVuZFByb3BlcnRpZXModGhpcywgbV9hbmltYXRpbmdQcm9wZXJ0eSwgYW5pbWF0ZWRTdHlsZS5n
ZXQoKSwgbV9mcm9tU3R5bGUuZ2V0KCksIG1fdG9TdHlsZS5nZXQoKSwgcHJvZ3Jlc3MoMSwgMCwg
MCkpKQogICAgICAgICBzZXRBbmltYXRpbmcoKTsKIH0KIApAQCAtMTM1LDE3ICsxMjUsMTMgQEAg
Ym9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6c2VuZFRyYW5zaXRpb25FdgogICAgIHJldHVybiBmYWxz
ZTsgLy8gRGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50CiB9CiAKLXZvaWQgSW1wbGljaXRBbmltYXRp
b246OnJlc2V0KGNvbnN0IFJlbmRlclN0eWxlKiB0bykKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246
OnJlc2V0KFJlbmRlclN0eWxlKiB0bykKIHsKICAgICBBU1NFUlQodG8pOwogICAgIEFTU0VSVCht
X2Zyb21TdHlsZSk7CiAgICAgCi0gICAgaWYgKG1fdG9TdHlsZSkKLSAgICAgICAgY29uc3RfY2Fz
dDxSZW5kZXJTdHlsZSo+KG1fdG9TdHlsZSktPmRlcmVmKHJlbmRlcmVyKCktPnJlbmRlckFyZW5h
KCkpOwogCi0gICAgbV90b1N0eWxlID0gdG87ICAgICAgIC8vIEl0IGlzIHJlYWQtb25seSwgb3Ro
ZXIgdGhhbiB0aGUgcmVmCi0gICAgaWYgKG1fdG9TdHlsZSkKLSAgICAgICAgY29uc3RfY2FzdDxS
ZW5kZXJTdHlsZSo+KG1fdG9TdHlsZSktPnJlZigpOworICAgIG1fdG9TdHlsZSA9IHRvOwogCiAg
ICAgLy8gUmVzdGFydCB0aGUgdHJhbnNpdGlvbgogICAgIGlmIChtX2Zyb21TdHlsZSAmJiBtX3Rv
U3R5bGUpCkBAIC0xNzEsMTIgKzE1NywxMiBAQCBib29sIEltcGxpY2l0QW5pbWF0aW9uOjphZmZl
Y3RzUHJvcGVydHkoCiAKIGJvb2wgSW1wbGljaXRBbmltYXRpb246OmlzVGFyZ2V0UHJvcGVydHlF
cXVhbChpbnQgcHJvcCwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQogewotICAgIHJl
dHVybiBwcm9wZXJ0aWVzRXF1YWwocHJvcCwgbV90b1N0eWxlLCB0YXJnZXRTdHlsZSk7CisgICAg
cmV0dXJuIHByb3BlcnRpZXNFcXVhbChwcm9wLCBtX3RvU3R5bGUuZ2V0KCksIHRhcmdldFN0eWxl
KTsKIH0KIAogdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0eVZhbHVlSW5TdHls
ZShpbnQgcHJvcCwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSkKIHsKLSAgICBibGVuZFByb3Bl
cnRpZXModGhpcywgcHJvcCwgY3VycmVudFN0eWxlLCBtX2Zyb21TdHlsZSwgbV90b1N0eWxlLCBw
cm9ncmVzcygxLCAwLCAwKSk7CisgICAgYmxlbmRQcm9wZXJ0aWVzKHRoaXMsIHByb3AsIGN1cnJl
bnRTdHlsZSwgbV9mcm9tU3R5bGUuZ2V0KCksIG1fdG9TdHlsZS5nZXQoKSwgcHJvZ3Jlc3MoMSwg
MCwgMCkpOwogfQogCiB2b2lkIEltcGxpY2l0QW5pbWF0aW9uOjp2YWxpZGF0ZVRyYW5zZm9ybUZ1
bmN0aW9uTGlzdCgpCkluZGV4OiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgJKHJldmlzaW9u
IDM3NTg2KQorKysgcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBmb3IgYSBzaW5n
bGUgUmVuZGVyT2JqZWN0LgogY2xhc3MgSW1wbGljaXRBbmltYXRpb24gOiBwdWJsaWMgQW5pbWF0
aW9uQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW1wbGljaXRBbmltYXRp
b24+IGNyZWF0ZShjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgaW50IGFuaW1hdGluZ1Byb3Bl
cnR5LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0
ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSkKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJbXBsaWNpdEFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0
aW9uLCBpbnQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIENvbXBv
c2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBSZW5kZXJTdHlsZSogZnJvbVN0eWxl
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbXBsaWNpdEFuaW1hdGlvbihh
bmltYXRpb24sIGFuaW1hdGluZ1Byb3BlcnR5LCByZW5kZXJlciwgY29tcG9zaXRlQW5pbWF0aW9u
LCBmcm9tU3R5bGUpKTsKICAgICB9OwpAQCAtNDgsOCArNDgsOCBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIHZvaWQgb25BbmltYXRpb25FbmQoZG91YmxlIGVsYXBzZWRUaW1lKTsKIAotICAgIHZp
cnR1YWwgdm9pZCBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRT
dHlsZSwgUmVuZGVyU3R5bGUqJiBhbmltYXRlZFN0eWxlKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXQoY29uc3QgUmVuZGVyU3R5bGUqIHRvKTsKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShDb21w
b3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlZlB0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVk
U3R5bGUpOworICAgIHZpcnR1YWwgdm9pZCByZXNldChSZW5kZXJTdHlsZSogdG8pOwogCiAgICAg
dm9pZCBzZXRPdmVycmlkZGVuKGJvb2wpOwogICAgIHZpcnR1YWwgYm9vbCBvdmVycmlkZGVuKCkg
Y29uc3QgeyByZXR1cm4gbV9vdmVycmlkZGVuOyB9CkBAIC03MSw3ICs3MSw3IEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIHZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rpb25MaXN0KCk7CiAKIHByaXZhdGU6
Ci0gICAgSW1wbGljaXRBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiwgaW50IGFuaW1hdGluZ1By
b3BlcnR5LCBSZW5kZXJPYmplY3QqLCBDb21wb3NpdGVBbmltYXRpb24qLCBjb25zdCBSZW5kZXJT
dHlsZSogZnJvbVN0eWxlKTsgICAgCisgICAgSW1wbGljaXRBbmltYXRpb24oY29uc3QgQW5pbWF0
aW9uKiwgaW50IGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5kZXJPYmplY3QqLCBDb21wb3NpdGVBbmlt
YXRpb24qLCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlKTsgICAgCiAgICAgdmlydHVhbCB+SW1wbGlj
aXRBbmltYXRpb24oKTsKIAogICAgIGludCBtX3RyYW5zaXRpb25Qcm9wZXJ0eTsgICAvLyBUcmFu
c2l0aW9uIHByb3BlcnR5IGFzIHNwZWNpZmllZCBpbiB0aGUgUmVuZGVyU3R5bGUuIE1heSBiZSBj
QW5pbWF0ZUFsbApAQCAtNzksOCArNzksOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9vdmVycmlk
ZGVuOyAgICAgICAgICAvLyB0cnVlIHdoZW4gdGhlcmUgaXMgYSBrZXlmcmFtZSBhbmltYXRpb24g
dGhhdCBvdmVycmlkZXMgdGhlIHRyYW5zaXRpb25pbmcgcHJvcGVydHkKIAogICAgIC8vIFRoZSB0
d28gc3R5bGVzIHRoYXQgd2UgYXJlIGJsZW5kaW5nLgotICAgIGNvbnN0IFJlbmRlclN0eWxlKiBt
X2Zyb21TdHlsZTsKLSAgICBjb25zdCBSZW5kZXJTdHlsZSogbV90b1N0eWxlOworICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gbV9mcm9tU3R5bGU7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3Rv
U3R5bGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBwYWdlL2FuaW1hdGlv
bi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9hbmltYXRpb24vS2V5
ZnJhbWVBbmltYXRpb24uY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHBhZ2UvYW5pbWF0aW9uL0tl
eWZyYW1lQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTYgKzM4LDEzIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotS2V5ZnJhbWVBbmltYXRpb246OktleWZyYW1lQW5pbWF0
aW9uKGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBp
bnQgaW5kZXgsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0sIGNvbnN0IFJlbmRlclN0eWxl
KiB1bmFuaW1hdGVkU3R5bGUpCitLZXlmcmFtZUFuaW1hdGlvbjo6S2V5ZnJhbWVBbmltYXRpb24o
Y29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGludCBp
bmRleCwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSwgUmVuZGVyU3R5bGUqIHVuYW5pbWF0
ZWRTdHlsZSkKICAgICA6IEFuaW1hdGlvbkJhc2UoYW5pbWF0aW9uLCByZW5kZXJlciwgY29tcEFu
aW0pCiAgICAgLCBtX2tleWZyYW1lcyhyZW5kZXJlciwgYW5pbWF0aW9uLT5uYW1lKCkpCiAgICAg
LCBtX2luZGV4KGluZGV4KQotICAgICwgbV91bmFuaW1hdGVkU3R5bGUoMCkKIHsKLSAgICBpZiAo
dW5hbmltYXRlZFN0eWxlKSB7Ci0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPih1bmFu
aW1hdGVkU3R5bGUpLT5yZWYoKTsKKyAgICBpZiAodW5hbmltYXRlZFN0eWxlKQogICAgICAgICBt
X3VuYW5pbWF0ZWRTdHlsZSA9IHVuYW5pbWF0ZWRTdHlsZTsKLSAgICB9CiAgICAgCiAgICAgLy8g
R2V0IHRoZSBrZXlmcmFtZSBSZW5kZXJTdHlsZXMKICAgICBpZiAobV9vYmplY3QgJiYgbV9vYmpl
Y3QtPmVsZW1lbnQoKSAmJiBtX29iamVjdC0+ZWxlbWVudCgpLT5pc0VsZW1lbnROb2RlKCkpCkBA
IC02MiwxMyArNTksMTAgQEAgS2V5ZnJhbWVBbmltYXRpb246On5LZXlmcmFtZUFuaW1hdGlvbigp
CiAgICAgLy8gRG8gdGhlIGNsZWFudXAgaGVyZSBpbnN0ZWFkIG9mIGluIHRoZSBiYXNlIGNsYXNz
IHNvIHRoZSBzcGVjaWFsaXplZCBtZXRob2RzIGdldCBjYWxsZWQKICAgICBpZiAoIXBvc3RBY3Rp
dmUoKSkKICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXRFbmRB
bmltYXRpb24sIC0xKTsKLQotICAgIGlmIChtX3VuYW5pbWF0ZWRTdHlsZSkKLSAgICAgICAgY29u
c3RfY2FzdDxSZW5kZXJTdHlsZSo+KG1fdW5hbmltYXRlZFN0eWxlKS0+ZGVyZWYocmVuZGVyZXIo
KS0+cmVuZGVyQXJlbmEoKSk7CiB9CiAKIHZvaWQgS2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUo
Q29tcG9zaXRlQW5pbWF0aW9uKiBhbmltYXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZW5kZXJTdHlsZSom
IGFuaW1hdGVkU3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlZlB0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVk
U3R5bGUpCiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBub3QgeWV0IHN0YXJ0ZWQsIHdlIHdpbGwgbm90
IGhhdmUgYSB2YWxpZCBzdGFydCB0aW1lLCBzbyBqdXN0IHN0YXJ0IHRoZSBhbmltYXRpb24gaWYg
bmVlZGVkLgogICAgIGlmIChpc05ldygpICYmIG1fYW5pbWF0aW9uLT5wbGF5U3RhdGUoKSA9PSBB
bmltUGxheVN0YXRlUGxheWluZykKQEAgLTEwMiwyMyArOTYsMjMgQEAgdm9pZCBLZXlmcmFtZUFu
aW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdAogICAgIGlmIChtX2FuaW1hdGlvbi0+ZGlyZWN0aW9u
KCkgJiYgKGkgJiAxKSkKICAgICAgICAgdCA9IDEgLSB0OwogCi0gICAgUmVuZGVyU3R5bGUqIGZy
b21TdHlsZSA9IDA7Ci0gICAgUmVuZGVyU3R5bGUqIHRvU3R5bGUgPSAwOworICAgIGNvbnN0IFJl
bmRlclN0eWxlKiBmcm9tU3R5bGUgPSAwOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0b1N0eWxl
ID0gMDsKICAgICBkb3VibGUgc2NhbGUgPSAxOwogICAgIGRvdWJsZSBvZmZzZXQgPSAwOwogICAg
IFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgZW5kS2V5ZnJhbWVzID0gbV9r
ZXlmcmFtZXMuZW5kS2V5ZnJhbWVzKCk7CiAgICAgZm9yIChWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXMuYmVnaW5LZXlmcmFtZXMoKTsgaXQgIT0g
ZW5kS2V5ZnJhbWVzOyArK2l0KSB7Ci0gICAgICAgIGlmICh0IDwgaXQtPmtleSkgeworICAgICAg
ICBpZiAodCA8IGl0LT5rZXkoKSkgewogICAgICAgICAgICAgLy8gVGhlIGZpcnN0IGtleSBzaG91
bGQgYWx3YXlzIGJlIDAsIHNvIHdlIHNob3VsZCBuZXZlciBzdWNjZWVkIG9uIHRoZSBmaXJzdCBr
ZXkKICAgICAgICAgICAgIGlmICghZnJvbVN0eWxlKQogICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgc2NhbGUgPSAxLjAgLyAoaXQtPmtleSAtIG9mZnNldCk7Ci0gICAgICAgICAg
ICB0b1N0eWxlID0gaXQtPnN0eWxlOworICAgICAgICAgICAgc2NhbGUgPSAxLjAgLyAoaXQtPmtl
eSgpIC0gb2Zmc2V0KTsKKyAgICAgICAgICAgIHRvU3R5bGUgPSBpdC0+c3R5bGUoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgb2Zmc2V0ID0gaXQtPmtleTsKLSAg
ICAgICAgZnJvbVN0eWxlID0gaXQtPnN0eWxlOworICAgICAgICBvZmZzZXQgPSBpdC0+a2V5KCk7
CisgICAgICAgIGZyb21TdHlsZSA9IGl0LT5zdHlsZSgpOwogICAgIH0KIAogICAgIC8vIElmIGVp
dGhlciBzdHlsZSBpcyAwIHdlIGhhdmUgYW4gaW52YWxpZCBjYXNlLCBqdXN0IHN0b3AgdGhlIGFu
aW1hdGlvbi4KQEAgLTEzMCw3ICsxMjQsNyBAQCB2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjphbmlt
YXRlKENvbXBvc2l0CiAgICAgLy8gUnVuIGEgY3ljbGUgb2YgYW5pbWF0aW9uLgogICAgIC8vIFdl
IGtub3cgd2Ugd2lsbCBuZWVkIGEgbmV3IHJlbmRlciBzdHlsZSwgc28gbWFrZSBvbmUgaWYgbmVl
ZGVkLgogICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKLSAgICAgICAgYW5pbWF0ZWRTdHlsZSA9IG5l
dyAocmVuZGVyZXItPnJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCp0YXJnZXRTdHlsZSk7Cisg
ICAgICAgIGFuaW1hdGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUodGFyZ2V0U3R5bGUpOwog
CiAgICAgY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uID0gMDsKICAgICBpZiAo
ZnJvbVN0eWxlLT5hbmltYXRpb25zKCkgJiYgZnJvbVN0eWxlLT5hbmltYXRpb25zKCktPnNpemUo
KSA+IDApCkBAIC0xNDAsNyArMTM0LDcgQEAgdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6YW5pbWF0
ZShDb21wb3NpdAogCiAgICAgSGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBlbmRQcm9wZXJ0
aWVzID0gbV9rZXlmcmFtZXMuZW5kUHJvcGVydGllcygpOwogICAgIGZvciAoSGFzaFNldDxpbnQ+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLmJlZ2luUHJvcGVydGllcygpOyBpdCAh
PSBlbmRQcm9wZXJ0aWVzOyArK2l0KSB7Ci0gICAgICAgIGlmIChibGVuZFByb3BlcnRpZXModGhp
cywgKml0LCBhbmltYXRlZFN0eWxlLCBmcm9tU3R5bGUsIHRvU3R5bGUsIHByb2cpKQorICAgICAg
ICBpZiAoYmxlbmRQcm9wZXJ0aWVzKHRoaXMsICppdCwgYW5pbWF0ZWRTdHlsZS5nZXQoKSwgZnJv
bVN0eWxlLCB0b1N0eWxlLCBwcm9nKSkKICAgICAgICAgICAgIHNldEFuaW1hdGluZygpOwogICAg
IH0KIH0KQEAgLTI2NCw3ICsyNTgsNyBAQCB2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjp2YWxpZGF0
ZVRyYW5zZm9yCiAgICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBmaXJz
dEl0ID0gZW5kOwogICAgIAogICAgIGZvciAoVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLmJlZ2luS2V5ZnJhbWVzKCk7IGl0ICE9IGVuZDsgKytp
dCwgKytmaXJzdEluZGV4KSB7Ci0gICAgICAgIGlmIChpdC0+c3R5bGUtPnRyYW5zZm9ybSgpLm9w
ZXJhdGlvbnMoKS5zaXplKCkgPiAwKSB7CisgICAgICAgIGlmIChpdC0+c3R5bGUoKS0+dHJhbnNm
b3JtKCkub3BlcmF0aW9ucygpLnNpemUoKSA+IDApIHsKICAgICAgICAgICAgIGZpcnN0SXQgPSBp
dDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNzMsMTEgKzI2NywxMSBAQCB2
b2lkIEtleWZyYW1lQW5pbWF0aW9uOjp2YWxpZGF0ZVRyYW5zZm9yCiAgICAgaWYgKGZpcnN0SXQg
PT0gZW5kKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbnMqIGZpcnN0VmFsID0gJmZpcnN0SXQtPnN0eWxlLT50cmFuc2Zvcm0oKTsKKyAgICBj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBmaXJzdFZhbCA9ICZmaXJzdEl0LT5zdHlsZSgpLT50
cmFuc2Zvcm0oKTsKICAgICAKICAgICAvLyBTZWUgaWYgdGhlIGtleWZyYW1lcyBhcmUgdmFsaWQK
ICAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmaXJz
dEl0KzE7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b25zKiB2YWwgPSAmaXQtPnN0eWxlLT50cmFuc2Zvcm0oKTsKKyAgICAgICAgY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyogdmFsID0gJml0LT5zdHlsZSgpLT50cmFuc2Zvcm0oKTsKICAgICAgICAg
CiAgICAgICAgIC8vIEEgbnVsbCB0cmFuc2Zvcm0gbWF0Y2hlcyBhbnl0aGluZwogICAgICAgICBp
ZiAodmFsLT5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQpJbmRleDogcGFnZS9hbmltYXRpb24vS2V5
ZnJhbWVBbmltYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFu
aW1hdGlvbi5oCShyZXZpc2lvbiAzNzU4NikKKysrIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5p
bWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEyICs0MCwxMiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAvLyBmb3IgYSBzaW5nbGUgUmVuZGVyT2JqZWN0LgogY2xhc3MgS2V5ZnJhbWVBbmlt
YXRpb24gOiBwdWJsaWMgQW5pbWF0aW9uQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGNyZWF0ZShjb25zdCBBbmltYXRpb24qIGFuaW1hdGlv
biwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgaW50IGluZGV4LCBDb21wb3NpdGVBbmltYXRpb24q
IGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSkK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFu
aW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBpbnQgaW5kZXgsIENv
bXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBSZW5kZXJTdHlsZSogdW5hbmlt
YXRlZFN0eWxlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBLZXlmcmFtZUFu
aW1hdGlvbihhbmltYXRpb24sIHJlbmRlcmVyLCBpbmRleCwgY29tcG9zaXRlQW5pbWF0aW9uLCB1
bmFuaW1hdGVkU3R5bGUpKTsKICAgICB9OwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRl
KENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiBj
dXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVuZGVyU3R5bGUq
JiBhbmltYXRlZFN0eWxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShDb21wb3NpdGVBbmlt
YXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBj
b25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlZlB0cjxSZW5kZXJTdHlsZT4mIGFuaW1h
dGVkU3R5bGUpOwogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1
cm4gbV9rZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpOyB9CiAgICAgaW50IGluZGV4KCkgY29uc3Qg
eyByZXR1cm4gbV9pbmRleDsgfQpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCBoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNvbnN0OwogICAgIAot
ICAgIGNvbnN0IFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X3VuYW5pbWF0ZWRTdHlsZTsgfQorICAgIFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3VuYW5pbWF0ZWRTdHlsZS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uU3RhcnQoZG91YmxlIGVsYXBzZWRUaW1lKTsKQEAg
LTc0LDcgKzc0LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgdmFsaWRhdGVUcmFuc2Zvcm1GdW5j
dGlvbkxpc3QoKTsKIAogcHJpdmF0ZToKLSAgICBLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmlt
YXRpb24qIGFuaW1hdGlvbiwgUmVuZGVyT2JqZWN0KiwgaW50IGluZGV4LCBDb21wb3NpdGVBbmlt
YXRpb24qLCBjb25zdCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKTsKKyAgICBLZXlmcmFt
ZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgUmVuZGVyT2JqZWN0KiwgaW50
IGluZGV4LCBDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxl
KTsKICAgICB2aXJ0dWFsIH5LZXlmcmFtZUFuaW1hdGlvbigpOwogICAgIAogICAgIC8vIFRoZSBr
ZXlmcmFtZXMgdGhhdCB3ZSBhcmUgYmxlbmRpbmcuCkBAIC04NCw3ICs4NCw3IEBAIHByaXZhdGU6
CiAgICAgaW50IG1faW5kZXg7CiAKICAgICAvLyBUaGUgc3R5bGUganVzdCBiZWZvcmUgd2Ugc3Rh
cnRlZCBhbmltYXRpb24KLSAgICBjb25zdCBSZW5kZXJTdHlsZSogbV91bmFuaW1hdGVkU3R5bGU7
CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3VuYW5pbWF0ZWRTdHlsZTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDM3NTg2KQor
KysgcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzYsNyAr
Mzc2LDggQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChSZW5kZXJPYmplY3Q6OgogICAgICAg
ICAgICAgc2VsZWN0aW9uRmlsbENvbG9yID0gZm9yZWdyb3VuZDsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChSZW5kZXJTdHlsZSogcHNldWRvU3R5bGUgPSBvYmplY3QoKS0+Z2V0UHNldWRvU3R5
bGUoUmVuZGVyU3R5bGU6OlNFTEVDVElPTikpIHsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBwc2V1ZG9TdHlsZSA9IG9iamVjdCgpLT5nZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6U0VM
RUNUSU9OKTsKKyAgICAgICAgaWYgKHBzZXVkb1N0eWxlKSB7CiAgICAgICAgICAgICBTaGFkb3dE
YXRhKiBzaGFkb3cgPSBwYWludEluZm8uZm9yY2VCbGFja1RleHQgPyAwIDogcHNldWRvU3R5bGUt
PnRleHRTaGFkb3coKTsKICAgICAgICAgICAgIGlmIChzaGFkb3cgIT0gc2VsZWN0aW9uU2hhZG93
KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFwYWludFNlbGVjdGVkVGV4dE9ubHkpCkluZGV4OiBy
ZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmlu
Zy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgcmVuZGVyaW5n
L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBA
QCBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudDo6TWVkaWFDb250CiAgICAgOiBIVE1MRGl2
RWxlbWVudChkb2MpCiAgICAgLCBtX21lZGlhRWxlbWVudChtZWRpYUVsZW1lbnQpIAogewotICAg
IFJlbmRlclN0eWxlKiByb290U3R5bGUgPSBuZXcgKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+
cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJv
b3RTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKICAgICByb290U3R5bGUtPmluaGVyaXRG
cm9tKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKSk7CiAgICAgcm9vdFN0eWxlLT5z
ZXREaXNwbGF5KEJMT0NLKTsKICAgICByb290U3R5bGUtPnNldFBvc2l0aW9uKFJlbGF0aXZlUG9z
aXRpb24pOwpAQCAtNzMsOCArNzMsOCBAQCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6Ok1lZGlh
Q29udHJvbEluCiAgICAgLCBtX21lZGlhRWxlbWVudChtZWRpYUVsZW1lbnQpCiB7CiAgICAgc2V0
SW5wdXRUeXBlKHR5cGUpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fbWVkaWFFbGVtZW50
LT5yZW5kZXJlcigpLT5nZXRQc2V1ZG9TdHlsZShwc2V1ZG8pOwotICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihtX21lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+cmVu
ZGVyQXJlbmEoKSwgc3R5bGUpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBtX21l
ZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+Z2V0UHNldWRvU3R5bGUocHNldWRvKTsKKyAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXIobV9tZWRpYUVsZW1lbnQtPnJlbmRl
cmVyKCktPnJlbmRlckFyZW5hKCksIHN0eWxlLmdldCgpKTsKICAgICBpZiAocmVuZGVyZXIpIHsK
ICAgICAgICAgc2V0UmVuZGVyZXIocmVuZGVyZXIpOwogICAgICAgICByZW5kZXJlci0+c2V0U3R5
bGUoc3R5bGUpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTksNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZShSZW5kZXJTCiAgICAgLy8gRklYTUU6IFdlIGNv
dWxkIHNhdmUgdGhpcyBjYWxsIHdoZW4gdGhlIGNoYW5nZSBvbmx5IGFmZmVjdGVkIG5vbi1pbmhl
cml0ZWQgcHJvcGVydGllcwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYg
KGNoaWxkLT5pc0Fub255bW91c0Jsb2NrKCkpIHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBu
ZXdTdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAg
ICAgICAgICAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20oc3R5bGUoKSk7CiAgICAgICAgICAgICBu
ZXdTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7CiAgICAgICAgICAgICBjaGlsZC0+c2V0U3R5bGUo
bmV3U3R5bGUpOwpAQCAtNDM2OCw4ICs0MzY4LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRl
Rmlyc3RMZXR0ZXIoKQogICAgIC8vIElmIHRoZSBjaGlsZCBhbHJlYWR5IGhhcyBzdHlsZSwgdGhl
biBpdCBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQsIHNvIHdlIGp1c3Qgd2FudAogICAgIC8vIHRv
IHVwZGF0ZSBpdC4KICAgICBpZiAoY3VyckNoaWxkLT5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBS
ZW5kZXJTdHlsZTo6RklSU1RfTEVUVEVSKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBwc2V1ZG8g
PSBmaXJzdExldHRlckJsb2NrLT5nZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6RklSU1RfTEVU
VEVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmlyc3RMZXR0ZXJDb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkpOworICAg
ICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHBzZXVkbyA9IGZpcnN0TGV0dGVyQmxvY2stPmdldFBz
ZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpGSVJTVF9MRVRURVIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RM
ZXR0ZXJDb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkpOwogICAgICAgICBjdXJyQ2hpbGQtPnNl
dFN0eWxlKHBzZXVkbyk7CiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBnZW5DaGlsZCA9IGN1
cnJDaGlsZC0+Zmlyc3RDaGlsZCgpOyBnZW5DaGlsZDsgZ2VuQ2hpbGQgPSBnZW5DaGlsZC0+bmV4
dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgaWYgKGdlbkNoaWxkLT5pc1RleHQoKSkgCkBAIC00
Mzg3LDggKzQzODcsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExldHRlcigpCiAg
ICAgICAgIFJlbmRlclRleHQqIHRleHRPYmogPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4oY3Vy
ckNoaWxkKTsKICAgICAgICAgCiAgICAgICAgIC8vIENyZWF0ZSBvdXIgcHNldWRvIHN0eWxlIG5v
dyB0aGF0IHdlIGhhdmUgb3VyIGZpcnN0TGV0dGVyQ29udGFpbmVyIGRldGVybWluZWQuCi0gICAg
ICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IGZpcnN0TGV0dGVyQmxvY2stPmdldFBzZXVk
b1N0eWxlKFJlbmRlclN0eWxlOjpGSVJTVF9MRVRURVIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0TGV0dGVy
Q29udGFpbmVyLT5maXJzdExpbmVTdHlsZSgpKTsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBwc2V1ZG9TdHlsZSA9IGZpcnN0TGV0dGVyQmxvY2stPmdldFBzZXVkb1N0eWxlKFJlbmRlclN0
eWxlOjpGSVJTVF9MRVRURVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdExldHRlckNvbnRhaW5l
ci0+Zmlyc3RMaW5lU3R5bGUoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBGb3JjZSBpbmxpbmUg
ZGlzcGxheSAoZXhjZXB0IGZvciBmbG9hdGluZyBmaXJzdC1sZXR0ZXJzKQogICAgICAgICBwc2V1
ZG9TdHlsZS0+c2V0RGlzcGxheSggcHNldWRvU3R5bGUtPmlzRmxvYXRpbmcoKSA/IEJMT0NLIDog
SU5MSU5FKTsKQEAgLTQ0MjksOCArNDQyOSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUZp
cnN0TGV0dGVyKCkKICAgICAgICAgICAgIC8vIGNvbnN0cnVjdCB0ZXh0IGZyYWdtZW50IGZvciB0
aGUgZmlyc3QgbGV0dGVyCiAgICAgICAgICAgICBSZW5kZXJUZXh0RnJhZ21lbnQqIGxldHRlciA9
IAogICAgICAgICAgICAgICAgIG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyVGV4dEZyYWdtZW50
KHJlbWFpbmluZ1RleHQtPm5vZGUoKSwgb2xkVGV4dC5nZXQoKSwgMCwgbGVuZ3RoKTsKLSAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBuZXdTdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVy
U3R5bGUoKTsKLSAgICAgICAgICAgIG5ld1N0eWxlLT5pbmhlcml0RnJvbShwc2V1ZG9TdHlsZSk7
CisgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6
OmNyZWF0ZSgpOworICAgICAgICAgICAgbmV3U3R5bGUtPmluaGVyaXRGcm9tKHBzZXVkb1N0eWxl
LmdldCgpKTsKICAgICAgICAgICAgIGxldHRlci0+c2V0U3R5bGUobmV3U3R5bGUpOwogICAgICAg
ICAgICAgZmlyc3RMZXR0ZXItPmFkZENoaWxkKGxldHRlcik7CiAKSW5kZXg6IHJlbmRlcmluZy9S
ZW5kZXJDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJDb250YWlu
ZXIuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBSZW5kZXJDb250YWluZXI6
OmFkZENoaWxkKFJlbmRlck9iagogICAgICAgICAgICAgdGFibGUgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJUYWJsZSo+KGFmdGVyQ2hpbGQpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHRhYmxl
ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJUYWJsZShkb2N1bWVudCgpIC8qIGlzIGFub255
bW91cyAqLyk7Ci0gICAgICAgICAgICBSZW5kZXJTdHlsZSAqbmV3U3R5bGUgPSBuZXcgKHJlbmRl
ckFyZW5hKCkpIFJlbmRlclN0eWxlOworICAgICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBu
ZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKICAgICAgICAgICAgIG5ld1N0eWxlLT5p
bmhlcml0RnJvbShzdHlsZSgpKTsKICAgICAgICAgICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KFRB
QkxFKTsKICAgICAgICAgICAgIHRhYmxlLT5zZXRTdHlsZShuZXdTdHlsZSk7CkBAIC0yNjEsNyAr
MjYxLDcgQEAgdm9pZCBSZW5kZXJDb250YWluZXI6OnVwZGF0ZUJlZm9yZUFmdGVyQwogICAgIGlm
IChzdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBSZW5kZXJTdHlsZTo6QkVGT1JFIHx8IHN0eWxlKCkt
PnN0eWxlVHlwZSgpID09IFJlbmRlclN0eWxlOjpBRlRFUikKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9FbGVtZW50U3R5bGUgPSBzdHlsZWRPYmplY3QtPmdl
dFBzZXVkb1N0eWxlKHR5cGUpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRvRWxlbWVu
dFN0eWxlID0gc3R5bGVkT2JqZWN0LT5nZXRQc2V1ZG9TdHlsZSh0eXBlKTsKICAgICBSZW5kZXJP
YmplY3QqIGNoaWxkID0gYmVmb3JlQWZ0ZXJDb250YWluZXIodHlwZSk7CiAKICAgICAvLyBXaGV0
aGVyIG9yIG5vdCB3ZSBjdXJyZW50bHkgaGF2ZSBnZW5lcmF0ZWQgY29udGVudCBhdHRhY2hlZC4K
QEAgLTI4Myw3ICsyODMsNyBAQCB2b2lkIFJlbmRlckNvbnRhaW5lcjo6dXBkYXRlQmVmb3JlQWZ0
ZXJDCiAgICAgLy8gSWYgd2UgZG9uJ3Qgd2FudCBnZW5lcmF0ZWQgY29udGVudCBhbnkgbG9uZ2Vy
LCBvciBpZiB3ZSBoYXZlIGdlbmVyYXRlZCBjb250ZW50LCBidXQgaXQncyBubyBsb25nZXIKICAg
ICAvLyBpZGVudGljYWwgdG8gdGhlIG5ldyBjb250ZW50IGRhdGEgd2Ugd2FudCB0byBidWlsZCBy
ZW5kZXIgb2JqZWN0cyBmb3IsIHRoZW4gd2UgbnVrZSBhbGwKICAgICAvLyBvZiB0aGUgb2xkIGdl
bmVyYXRlZCBjb250ZW50LgotICAgIGlmICghbmV3Q29udGVudFdhbnRlZCB8fCAob2xkQ29udGVu
dFByZXNlbnQgJiYgTm9kZTo6ZGlmZihjaGlsZC0+c3R5bGUoKSwgcHNldWRvRWxlbWVudFN0eWxl
KSA9PSBOb2RlOjpEZXRhY2gpKSB7CisgICAgaWYgKCFuZXdDb250ZW50V2FudGVkIHx8IChvbGRD
b250ZW50UHJlc2VudCAmJiBOb2RlOjpkaWZmKGNoaWxkLT5zdHlsZSgpLCBwc2V1ZG9FbGVtZW50
U3R5bGUuZ2V0KCkpID09IE5vZGU6OkRldGFjaCkpIHsKICAgICAgICAgLy8gTnVrZSB0aGUgY2hp
bGQuIAogICAgICAgICBpZiAoY2hpbGQgJiYgY2hpbGQtPnN0eWxlKCktPnN0eWxlVHlwZSgpID09
IHR5cGUpIHsKICAgICAgICAgICAgIG9sZENvbnRlbnRQcmVzZW50ID0gZmFsc2U7CkBAIC0zMjQs
OCArMzI0LDggQEAgdm9pZCBSZW5kZXJDb250YWluZXI6OnVwZGF0ZUJlZm9yZUFmdGVyQwogICAg
ICAgICAgICAgICAgICAgICBnZW5DaGlsZC0+c2V0U3R5bGUocHNldWRvRWxlbWVudFN0eWxlKTsK
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChnZW5DaGlsZC0+aXNJbWFnZSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIEltYWdlcyBnZXQgYW4gZW1wdHkgc3R5bGUgdGhhdCBpbmhlcml0cyBm
cm9tIHRoZSBwc2V1ZG8uCi0gICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGU7Ci0gICAgICAgICAgICAgICAgICAgIHN0
eWxlLT5pbmhlcml0RnJvbShwc2V1ZG9FbGVtZW50U3R5bGUpOworICAgICAgICAgICAgICAgICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAg
ICAgICAgICAgICAgICAgICBzdHlsZS0+aW5oZXJpdEZyb20ocHNldWRvRWxlbWVudFN0eWxlLmdl
dCgpKTsKICAgICAgICAgICAgICAgICAgICAgZ2VuQ2hpbGQtPnNldFN0eWxlKHN0eWxlKTsKICAg
ICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgLy8gTXVzdCBiZSBhIGZp
cnN0LWxldHRlciBjb250YWluZXIuIHVwZGF0ZUZpcnN0TGV0dGVyKCkgd2lsbCB0YWtlIGNhcmUg
b2YgaXQuCkBAIC0zNTMsOCArMzUzLDggQEAgdm9pZCBSZW5kZXJDb250YWluZXI6OnVwZGF0ZUJl
Zm9yZUFmdGVyQwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDT05U
RU5UX09CSkVDVDogewogICAgICAgICAgICAgICAgIFJlbmRlckltYWdlR2VuZXJhdGVkQ29udGVu
dCogaW1hZ2UgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlckltYWdlR2VuZXJhdGVkQ29udGVu
dChkb2N1bWVudCgpKTsgLy8gYW5vbnltb3VzIG9iamVjdAotICAgICAgICAgICAgICAgIFJlbmRl
clN0eWxlKiBzdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGU7Ci0gICAgICAg
ICAgICAgICAgc3R5bGUtPmluaGVyaXRGcm9tKHBzZXVkb0VsZW1lbnRTdHlsZSk7CisgICAgICAg
ICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUo
KTsKKyAgICAgICAgICAgICAgICBzdHlsZS0+aW5oZXJpdEZyb20ocHNldWRvRWxlbWVudFN0eWxl
LmdldCgpKTsKICAgICAgICAgICAgICAgICBpbWFnZS0+c2V0U3R5bGUoc3R5bGUpOwogICAgICAg
ICAgICAgICAgIGlmIChTdHlsZUltYWdlKiBzdHlsZUltYWdlID0gY29udGVudC0+bV9jb250ZW50
Lm1faW1hZ2UpCiAgICAgICAgICAgICAgICAgICAgIGltYWdlLT5zZXRTdHlsZUltYWdlKHN0eWxl
SW1hZ2UpOwpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjp1cGRhdGVC
ZWZvcmVBZnRlckMKICAgICAgICAgICAgIGlmICghZ2VuZXJhdGVkQ29udGVudENvbnRhaW5lcikg
ewogICAgICAgICAgICAgICAgIC8vIE1ha2UgYSBnZW5lcmF0ZWQgYm94IHRoYXQgbWlnaHQgYmUg
YW55IGRpc3BsYXkgdHlwZSBub3cgdGhhdCB3ZSBhcmUgYWJsZSB0byBkcmlsbCBkb3duIGludG8g
Y2hpbGRyZW4KICAgICAgICAgICAgICAgICAvLyB0byBmaW5kIHRoZSBvcmlnaW5hbCBjb250ZW50
IHByb3Blcmx5LgotICAgICAgICAgICAgICAgIGdlbmVyYXRlZENvbnRlbnRDb250YWluZXIgPSBS
ZW5kZXJPYmplY3Q6OmNyZWF0ZU9iamVjdChkb2N1bWVudCgpLCBwc2V1ZG9FbGVtZW50U3R5bGUp
OworICAgICAgICAgICAgICAgIGdlbmVyYXRlZENvbnRlbnRDb250YWluZXIgPSBSZW5kZXJPYmpl
Y3Q6OmNyZWF0ZU9iamVjdChkb2N1bWVudCgpLCBwc2V1ZG9FbGVtZW50U3R5bGUuZ2V0KCkpOwog
ICAgICAgICAgICAgICAgIGdlbmVyYXRlZENvbnRlbnRDb250YWluZXItPnNldFN0eWxlKHBzZXVk
b0VsZW1lbnRTdHlsZSk7CiAgICAgICAgICAgICAgICAgYWRkQ2hpbGQoZ2VuZXJhdGVkQ29udGVu
dENvbnRhaW5lciwgaW5zZXJ0QmVmb3JlKTsKICAgICAgICAgICAgIH0KSW5kZXg6IHJlbmRlcmlu
Zy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1Jl
bmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcv
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3
LDggQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dXBkYXRlRnJvbQogICAgICAgICBt
X2J1dHRvbiA9IG5ldyBIVE1MRmlsZVVwbG9hZElubmVyQnV0dG9uRWxlbWVudChkb2N1bWVudCgp
LCBpbnB1dEVsZW1lbnQpOwogICAgICAgICBtX2J1dHRvbi0+c2V0SW5wdXRUeXBlKCJidXR0b24i
KTsKICAgICAgICAgbV9idXR0b24tPnNldFZhbHVlKGZpbGVCdXR0b25DaG9vc2VGaWxlTGFiZWwo
KSk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBidXR0b25TdHlsZSA9IGNyZWF0ZUJ1dHRvblN0eWxl
KHN0eWxlKCkpOwotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9idXR0b24tPmNy
ZWF0ZVJlbmRlcmVyKHJlbmRlckFyZW5hKCksIGJ1dHRvblN0eWxlKTsKKyAgICAgICAgUmVmUHRy
PFJlbmRlclN0eWxlPiBidXR0b25TdHlsZSA9IGNyZWF0ZUJ1dHRvblN0eWxlKHN0eWxlKCkpOwor
ICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9idXR0b24tPmNyZWF0ZVJlbmRlcmVy
KHJlbmRlckFyZW5hKCksIGJ1dHRvblN0eWxlLmdldCgpKTsKICAgICAgICAgbV9idXR0b24tPnNl
dFJlbmRlcmVyKHJlbmRlcmVyKTsKICAgICAgICAgcmVuZGVyZXItPnNldFN0eWxlKGJ1dHRvblN0
eWxlKTsKICAgICAgICAgcmVuZGVyZXItPnVwZGF0ZUZyb21FbGVtZW50KCk7CkBAIC0xMzQsMTEg
KzEzNCwxMSBAQCBpbnQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6Om1heEZpbGVuYW1lCiAgICAg
ICAgIC0gKG1fZmlsZUNob29zZXItPmljb24oKSA/IGljb25XaWR0aCArIGljb25GaWxlbmFtZVNw
YWNpbmcgOiAwKSk7CiB9CiAKLVJlbmRlclN0eWxlKiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6
Y3JlYXRlQnV0dG9uU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAor
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNyZWF0ZUJ1
dHRvblN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKIHsKLSAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSBnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6RklMRV9VUExP
QURfQlVUVE9OKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gZ2V0UHNldWRvU3R5
bGUoUmVuZGVyU3R5bGU6OkZJTEVfVVBMT0FEX0JVVFRPTik7CiAgICAgaWYgKCFzdHlsZSkgewot
ICAgICAgICBzdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGU7CisgICAgICAg
IHN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwogICAgICAgICBpZiAocGFyZW50U3R5bGUp
CiAgICAgICAgICAgICBzdHlsZS0+aW5oZXJpdEZyb20ocGFyZW50U3R5bGUpOwogICAgIH0KSW5k
ZXg6IHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJl
bmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCShyZXZpc2lvbiAzNzU4NikKKysrIHJl
bmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3
ICs1Nyw3IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICBpbnQgbWF4RmlsZW5hbWVXaWR0
aCgpIGNvbnN0OwotICAgIFJlbmRlclN0eWxlKiBjcmVhdGVCdXR0b25TdHlsZShjb25zdCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IGNyZWF0ZUJ1dHRvblN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3Q7
CiAKICAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gbV9idXR0b247CiAgICAgUmVmUHRyPEZp
bGVDaG9vc2VyPiBtX2ZpbGVDaG9vc2VyOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZsb3cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJGbG93LmNwcAkocmV2aXNpb24gMzc1ODYp
CisrKyByZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3
LDcgQEAgUmVuZGVyRmxvdzo6flJlbmRlckZsb3coKQogCiAjZW5kaWYKIAotUmVuZGVyRmxvdyog
UmVuZGVyRmxvdzo6Y3JlYXRlQW5vbnltb3VzRmxvdyhEb2N1bWVudCogZG9jLCBSZW5kZXJTdHls
ZSogc3R5bGUpCitSZW5kZXJGbG93KiBSZW5kZXJGbG93OjpjcmVhdGVBbm9ueW1vdXNGbG93KERv
Y3VtZW50KiBkb2MsIGNvbnN0IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+JiBzdHlsZSkKIHsKICAg
ICBSZW5kZXJGbG93KiByZXN1bHQ7CiAgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0gSU5MSU5F
KQpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZsb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcv
UmVuZGVyRmxvdy5oCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJGbG93LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBhZGRDaGlsZFRvRmxvdyhSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCog
bmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKIAotICAgIHN0YXRpYyBS
ZW5kZXJGbG93KiBjcmVhdGVBbm9ueW1vdXNGbG93KERvY3VtZW50KiwgUmVuZGVyU3R5bGUqKTsK
KyAgICBzdGF0aWMgUmVuZGVyRmxvdyogY3JlYXRlQW5vbnltb3VzRmxvdyhEb2N1bWVudCosIGNv
bnN0IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+Jik7CiAKICAgICB2b2lkIGV4dHJhY3RMaW5lQm94
KElubGluZUZsb3dCb3gqKTsKICAgICB2b2lkIGF0dGFjaExpbmVCb3goSW5saW5lRmxvd0JveCop
OwpJbmRleDogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgcmVuZGVyaW5nL1JlbmRl
cklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIFJlbmRl
cklubGluZTo6YWRkQ2hpbGRUb0Zsb3coUmVuZGVyCiAgICAgICAgIC8vIGlubGluZSBpbnRvIGNv
bnRpbnVhdGlvbnMuICBUaGlzIGludm9sdmVzIGNyZWF0aW5nIGFuIGFub255bW91cyBibG9jayBi
b3ggdG8gaG9sZAogICAgICAgICAvLyB8bmV3Q2hpbGR8LiAgV2UgdGhlbiBtYWtlIHRoYXQgYmxv
Y2sgYm94IGEgY29udGludWF0aW9uIG9mIHRoaXMgaW5saW5lLiAgV2UgdGFrZSBhbGwgb2YKICAg
ICAgICAgLy8gdGhlIGNoaWxkcmVuIGFmdGVyIHxiZWZvcmVDaGlsZHwgYW5kIHB1dCB0aGVtIGlu
IGEgY2xvbmUgb2YgdGhpcyBvYmplY3QuCi0gICAgICAgIFJlbmRlclN0eWxlKiBuZXdTdHlsZSA9
IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsKKyAgICAgICAgUmVmUHRyPFJlbmRl
clN0eWxlPiBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKICAgICAgICAgbmV3U3R5
bGUtPmluaGVyaXRGcm9tKHN0eWxlKCkpOwogICAgICAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShC
TE9DSyk7CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgxLDcgKzI0ODEsNyBAQCB2b2lk
IFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoUmVuZGVyU3R5CiB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpCiB7CiAgICAgUmVuZGVyT2JqZWN0KiBhY3R1YWxSZW5k
ZXJlciA9IG1fb2JqZWN0LT5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSA/IG1fb2JqZWN0LT5ub2Rl
KCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpLT5yZW5kZXJlcigpIDogbV9vYmplY3Q7Ci0gICAgUmVu
ZGVyU3R5bGUqIGNvcm5lciA9IG1fb2JqZWN0LT5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJl
bmRlcmVyLT5nZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6U0NST0xMQkFSX0NPUk5FUiwgYWN0
dWFsUmVuZGVyZXItPnN0eWxlKCksIGZhbHNlKSA6IDA7CisgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBjb3JuZXIgPSBtX29iamVjdC0+aGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+
Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNDUk9MTEJBUl9DT1JORVIsIGFjdHVhbFJlbmRl
cmVyLT5zdHlsZSgpLCBmYWxzZSkgOiAwOwogICAgIGlmIChjb3JuZXIpIHsKICAgICAgICAgaWYg
KCFtX3Njcm9sbENvcm5lcikgewogICAgICAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBuZXcgKG1f
b2JqZWN0LT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTY3JvbGxiYXJQYXJ0KG1fb2JqZWN0LT5kb2N1
bWVudCgpKTsKQEAgLTI0OTcsNyArMjQ5Nyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNj
cm9sbENvcm5lclN0eWwKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCiB7
CiAgICAgUmVuZGVyT2JqZWN0KiBhY3R1YWxSZW5kZXJlciA9IG1fb2JqZWN0LT5ub2RlKCktPmlz
RWxlbWVudE5vZGUoKSA/IG1fb2JqZWN0LT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpLT5y
ZW5kZXJlcigpIDogbV9vYmplY3Q7Ci0gICAgUmVuZGVyU3R5bGUqIHJlc2l6ZXIgPSBtX29iamVj
dC0+aGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0UHNldWRvU3R5bGUoUmVu
ZGVyU3R5bGU6OlJFU0laRVIsIGFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpLCBmYWxzZSkgOiAwOwor
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVzaXplciA9IG1fb2JqZWN0LT5oYXNPdmVyZmxvd0Ns
aXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6UkVTSVpF
UiwgYWN0dWFsUmVuZGVyZXItPnN0eWxlKCksIGZhbHNlKSA6IDA7CiAgICAgaWYgKHJlc2l6ZXIp
IHsKICAgICAgICAgaWYgKCFtX3Jlc2l6ZXIpIHsKICAgICAgICAgICAgIG1fcmVzaXplciA9IG5l
dyAobV9vYmplY3QtPnJlbmRlckFyZW5hKCkpIFJlbmRlclNjcm9sbGJhclBhcnQobV9vYmplY3Qt
PmRvY3VtZW50KCkpOwpAQCAtMjUyNCw3ICsyNTI0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y3Jl
YXRlUmVmbGVjdGlvbigpCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVJlZmxlY3Rpb25TdHls
ZSgpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIG5ld1N0eWxlID0gbmV3IChyZW5kZXJlcigpLT5yZW5k
ZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5
bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgbmV3U3R5bGUtPmluaGVyaXRGcm9tKHJl
bmRlcmVyKCktPnN0eWxlKCkpOwogICAgIAogICAgIC8vIE1hcCBpbiBvdXIgdHJhbnNmb3JtLgpJ
bmRleDogcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJp
bmcvUmVuZGVyTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5k
ZXJMaXN0SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDE1ICs1NCwxMyBAQCB2b2lkIFJl
bmRlckxpc3RJdGVtOjpzdHlsZURpZENoYW5nZShSZW5kCiAKICAgICBpZiAoc3R5bGUoKS0+bGlz
dFN0eWxlVHlwZSgpICE9IExOT05FIHx8CiAgICAgICAgIChzdHlsZSgpLT5saXN0U3R5bGVJbWFn
ZSgpICYmICFzdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpLT5lcnJvck9jY3VycmVkKCkpKSB7Ci0g
ICAgICAgIFJlbmRlclN0eWxlKiBuZXdTdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVy
U3R5bGU7Ci0gICAgICAgIG5ld1N0eWxlLT5yZWYoKTsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0
eWxlPiBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKICAgICAgICAgLy8gVGhlIG1h
cmtlciBhbHdheXMgaW5oZXJpdHMgZnJvbSB0aGUgbGlzdCBpdGVtLCByZWdhcmRsZXNzIG9mIHdo
ZXJlIGl0IG1pZ2h0IGVuZAogICAgICAgICAvLyB1cCAoZS5nLiwgaW4gc29tZSBkZWVwbHkgbmVz
dGVkIGxpbmUgYm94KS4gU2VlIENTUzMgc3BlYy4KICAgICAgICAgbmV3U3R5bGUtPmluaGVyaXRG
cm9tKHN0eWxlKCkpOyAKICAgICAgICAgaWYgKCFtX21hcmtlcikKICAgICAgICAgICAgIG1fbWFy
a2VyID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJMaXN0TWFya2VyKHRoaXMpOwogICAgICAg
ICBtX21hcmtlci0+c2V0U3R5bGUobmV3U3R5bGUpOwotICAgICAgICBuZXdTdHlsZS0+ZGVyZWYo
cmVuZGVyQXJlbmEoKSk7CiAgICAgfSBlbHNlIGlmIChtX21hcmtlcikgewogICAgICAgICBtX21h
cmtlci0+ZGVzdHJveSgpOwogICAgICAgICBtX21hcmtlciA9IDA7CkluZGV4OiByZW5kZXJpbmcv
UmVuZGVyTWVkaWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAJ
KHJldmlzaW9uIDM3NTg2KQorKysgcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ2LDkgKzE0Niw5IEBAIHZvaWQgUmVuZGVyTWVkaWE6OmNyZWF0ZUNvbnRyb2xz
U2hhZG93Um8KIHZvaWQgUmVuZGVyTWVkaWE6OmNyZWF0ZVBhbmVsKCkKIHsKICAgICBBU1NFUlQo
IW1fcGFuZWwpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGdldFBzZXVkb1N0eWxlKFJlbmRl
clN0eWxlOjpNRURJQV9DT05UUk9MU19QQU5FTCk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBz
dHlsZSA9IGdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpNRURJQV9DT05UUk9MU19QQU5FTCk7
CiAgICAgbV9wYW5lbCA9IG5ldyBIVE1MRGl2RWxlbWVudChkb2N1bWVudCgpKTsKLSAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gbV9wYW5lbC0+Y3JlYXRlUmVuZGVyZXIocmVuZGVyQXJlbmEo
KSwgc3R5bGUpOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBtX3BhbmVsLT5jcmVhdGVS
ZW5kZXJlcihyZW5kZXJBcmVuYSgpLCBzdHlsZS5nZXQoKSk7CiAgICAgaWYgKHJlbmRlcmVyKSB7
CiAgICAgICAgIG1fcGFuZWwtPnNldFJlbmRlcmVyKHJlbmRlcmVyKTsKICAgICAgICAgcmVuZGVy
ZXItPnNldFN0eWxlKHN0eWxlKTsKQEAgLTE5Nyw5ICsxOTcsOSBAQCB2b2lkIFJlbmRlck1lZGlh
OjpjcmVhdGVUaW1lbGluZSgpCiB2b2lkIFJlbmRlck1lZGlhOjpjcmVhdGVUaW1lRGlzcGxheSgp
CiB7CiAgICAgQVNTRVJUKCFtX3RpbWVEaXNwbGF5KTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6TUVESUFfQ09OVFJPTFNfVElNRV9ESVNQTEFZ
KTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gZ2V0UHNldWRvU3R5bGUoUmVuZGVy
U3R5bGU6Ok1FRElBX0NPTlRST0xTX1RJTUVfRElTUExBWSk7CiAgICAgbV90aW1lRGlzcGxheSA9
IG5ldyBIVE1MRGl2RWxlbWVudChkb2N1bWVudCgpKTsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gbV90aW1lRGlzcGxheS0+Y3JlYXRlUmVuZGVyZXIocmVuZGVyQXJlbmEoKSwgc3R5bGUp
OworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBtX3RpbWVEaXNwbGF5LT5jcmVhdGVSZW5k
ZXJlcihyZW5kZXJBcmVuYSgpLCBzdHlsZS5nZXQoKSk7CiAgICAgaWYgKHJlbmRlcmVyKSB7CiAg
ICAgICAgIG1fdGltZURpc3BsYXktPnNldFJlbmRlcmVyKHJlbmRlcmVyKTsKICAgICAgICAgcmVu
ZGVyZXItPnNldFN0eWxlKHN0eWxlKTsKQEAgLTM0MCw3ICszNDAsNyBAQCB2b2lkIFJlbmRlck1l
ZGlhOjpjaGFuZ2VPcGFjaXR5KEhUTUxFbGVtCiB7CiAgICAgaWYgKCFlIHx8ICFlLT5yZW5kZXJl
cigpIHx8ICFlLT5yZW5kZXJlcigpLT5zdHlsZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgUmVu
ZGVyU3R5bGUqIHMgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCplLT5yZW5kZXJl
cigpLT5zdHlsZSgpKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHMgPSBSZW5kZXJTdHlsZTo6
Y2xvbmUoZS0+cmVuZGVyZXIoKS0+c3R5bGUoKSk7CiAgICAgcy0+c2V0T3BhY2l0eShvcGFjaXR5
KTsKICAgICAvLyB6LWluZGV4IGNhbid0IGJlIGF1dG8gaWYgb3BhY2l0eSBpcyB1c2VkCiAgICAg
cy0+c2V0WkluZGV4KDApOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysg
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMzgsNyArMjAz
OCw3IEBAIENvbG9yIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uQmFja2dyb3VuZEMKIHsKICAgICBD
b2xvciBjb2xvcjsKICAgICBpZiAoc3R5bGUoKS0+dXNlclNlbGVjdCgpICE9IFNFTEVDVF9OT05F
KSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IGdldFBzZXVkb1N0eWxlKFJl
bmRlclN0eWxlOjpTRUxFQ1RJT04pOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHBzZXVk
b1N0eWxlID0gZ2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNFTEVDVElPTik7CiAgICAgICAg
IGlmIChwc2V1ZG9TdHlsZSAmJiBwc2V1ZG9TdHlsZS0+YmFja2dyb3VuZENvbG9yKCkuaXNWYWxp
ZCgpKQogICAgICAgICAgICAgY29sb3IgPSBwc2V1ZG9TdHlsZS0+YmFja2dyb3VuZENvbG9yKCku
YmxlbmRXaXRoV2hpdGUoKTsKICAgICAgICAgZWxzZQpAQCAtMjA1Niw3ICsyMDU2LDcgQEAgQ29s
b3IgUmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25Gb3JlZ3JvdW5kQwogICAgIGlmIChzdHlsZSgpLT51
c2VyU2VsZWN0KCkgPT0gU0VMRUNUX05PTkUpCiAgICAgICAgIHJldHVybiBjb2xvcjsKIAotICAg
IGlmIChSZW5kZXJTdHlsZSogcHNldWRvU3R5bGUgPSBnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHls
ZTo6U0VMRUNUSU9OKSkgeworICAgIGlmIChSZWZQdHI8UmVuZGVyU3R5bGU+IHBzZXVkb1N0eWxl
ID0gZ2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNFTEVDVElPTikpIHsKICAgICAgICAgY29s
b3IgPSBwc2V1ZG9TdHlsZS0+dGV4dEZpbGxDb2xvcigpOwogICAgICAgICBpZiAoIWNvbG9yLmlz
VmFsaWQoKSkKICAgICAgICAgICAgIGNvbG9yID0gcHNldWRvU3R5bGUtPmNvbG9yKCk7CkBAIC0y
MTEwLDggKzIxMTAsOCBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uU3RhcnRFbmQoaW50
CiAKIFJlbmRlckJsb2NrKiBSZW5kZXJPYmplY3Q6OmNyZWF0ZUFub255bW91c0Jsb2NrKCkKIHsK
LSAgICBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0
eWxlKCk7Ci0gICAgbmV3U3R5bGUtPmluaGVyaXRGcm9tKG1fc3R5bGUpOworICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgbmV3U3R5
bGUtPmluaGVyaXRGcm9tKG1fc3R5bGUuZ2V0KCkpOwogICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5
KEJMT0NLKTsKIAogICAgIFJlbmRlckJsb2NrKiBuZXdCb3ggPSBuZXcgKHJlbmRlckFyZW5hKCkp
IFJlbmRlckJsb2NrKGRvY3VtZW50KCkgLyogYW5vbnltb3VzIGJveCAqLyk7CkBAIC0yMTU0LDMz
ICsyMTU0LDMxIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpoYW5kbGVEeW5hbWljRmxvYXRQb3MKICAg
ICB9CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpzZXRBbmltYXRhYmxlU3R5bGUoUmVuZGVyU3R5
bGUqIHN0eWxlKQordm9pZCBSZW5kZXJPYmplY3Q6OnNldEFuaW1hdGFibGVTdHlsZShjb25zdCBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiYgc3R5bGUpCiB7CiAgICAgaWYgKCFpc1RleHQoKSAmJiBz
dHlsZSkKLSAgICAgICAgc3R5bGUgPSBhbmltYXRpb24oKS0+dXBkYXRlQW5pbWF0aW9ucyh0aGlz
LCBzdHlsZSk7Ci0KLSAgICBzZXRTdHlsZShzdHlsZSk7CisgICAgICAgIHNldFN0eWxlKGFuaW1h
dGlvbigpLT51cGRhdGVBbmltYXRpb25zKHRoaXMsIHN0eWxlLmdldCgpKSk7CisgICAgZWxzZQor
ICAgICAgICBzZXRTdHlsZShzdHlsZSk7CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTdHls
ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCit2b2lkIFJlbmRlck9iamVjdDo6c2V0U3R5bGUo
Y29uc3QgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4mIHN0eWxlKQogewogICAgIGlmIChtX3N0eWxl
ID09IHN0eWxlKQogICAgICAgICByZXR1cm47CiAKICAgICBSZW5kZXJTdHlsZTo6RGlmZiBkaWZm
ID0gUmVuZGVyU3R5bGU6OkVxdWFsOwogICAgIGlmIChtX3N0eWxlKQotICAgICAgICBkaWZmID0g
bV9zdHlsZS0+ZGlmZihzdHlsZSk7CisgICAgICAgIGRpZmYgPSBtX3N0eWxlLT5kaWZmKHN0eWxl
LmdldCgpKTsKIAogICAgIC8vIElmIHdlIGhhdmUgbm8gbGF5ZXIoKSwganVzdCB0cmVhdCBhIFJl
cGFpbnRMYXllciBoaW50IGFzIGEgbm9ybWFsIFJlcGFpbnQuCiAgICAgaWYgKGRpZmYgPT0gUmVu
ZGVyU3R5bGU6OlJlcGFpbnRMYXllciAmJiAhaGFzTGF5ZXIoKSkKICAgICAgICAgZGlmZiA9IFJl
bmRlclN0eWxlOjpSZXBhaW50OwogCi0gICAgc3R5bGVXaWxsQ2hhbmdlKGRpZmYsIHN0eWxlKTsK
KyAgICBzdHlsZVdpbGxDaGFuZ2UoZGlmZiwgc3R5bGUuZ2V0KCkpOwogICAgIAotICAgIFJlbmRl
clN0eWxlKiBvbGRTdHlsZSA9IG1fc3R5bGU7Ci0gICAgbV9zdHlsZSA9IGNvbnN0X2Nhc3Q8UmVu
ZGVyU3R5bGUqPihzdHlsZSk7Ci0gICAgaWYgKG1fc3R5bGUpCi0gICAgICAgIG1fc3R5bGUtPnJl
ZigpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gb2xkU3R5bGUgPSBtX3N0eWxlOworICAgIG1f
c3R5bGUgPSBzdHlsZTsKIAogICAgIHVwZGF0ZUZpbGxJbWFnZXMob2xkU3R5bGUgPyBvbGRTdHls
ZS0+YmFja2dyb3VuZExheWVycygpIDogMCwgbV9zdHlsZSA/IG1fc3R5bGUtPmJhY2tncm91bmRM
YXllcnMoKSA6IDApOwogICAgIHVwZGF0ZUZpbGxJbWFnZXMob2xkU3R5bGUgPyBvbGRTdHlsZS0+
bWFza0xheWVycygpIDogMCwgbV9zdHlsZSA/IG1fc3R5bGUtPm1hc2tMYXllcnMoKSA6IDApOwpA
QCAtMjE4OCwyMiArMjE4NiwxNCBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2V0U3R5bGUoY29uc3Qg
UmVuZGVyCiAgICAgdXBkYXRlSW1hZ2Uob2xkU3R5bGUgPyBvbGRTdHlsZS0+Ym9yZGVySW1hZ2Uo
KS5pbWFnZSgpIDogMCwgbV9zdHlsZSA/IG1fc3R5bGUtPmJvcmRlckltYWdlKCkuaW1hZ2UoKSA6
IDApOwogICAgIHVwZGF0ZUltYWdlKG9sZFN0eWxlID8gb2xkU3R5bGUtPm1hc2tCb3hJbWFnZSgp
LmltYWdlKCkgOiAwLCBtX3N0eWxlID8gbV9zdHlsZS0+bWFza0JveEltYWdlKCkuaW1hZ2UoKSA6
IDApOwogCi0gICAgc3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwotCi0gICAgaWYgKG9s
ZFN0eWxlKSB7Ci0gICAgICAgIG9sZFN0eWxlLT5kZXJlZihyZW5kZXJBcmVuYSgpKTsKLSAgICB9
CisgICAgc3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUuZ2V0KCkpOwogfQogCi12b2lkIFJl
bmRlck9iamVjdDo6c2V0U3R5bGVJbnRlcm5hbChSZW5kZXJTdHlsZSogc3R5bGUpCit2b2lkIFJl
bmRlck9iamVjdDo6c2V0U3R5bGVJbnRlcm5hbChjb25zdCBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiYgc3R5bGUpCiB7CiAgICAgaWYgKG1fc3R5bGUgPT0gc3R5bGUpCiAgICAgICAgIHJldHVybjsK
LSAgICBpZiAobV9zdHlsZSkKLSAgICAgICAgbV9zdHlsZS0+ZGVyZWYocmVuZGVyQXJlbmEoKSk7
CiAgICAgbV9zdHlsZSA9IHN0eWxlOwotICAgIGlmIChtX3N0eWxlKQotICAgICAgICBtX3N0eWxl
LT5yZWYoKTsKIH0KIAogdm9pZCBSZW5kZXJPYmplY3Q6OnN0eWxlV2lsbENoYW5nZShSZW5kZXJT
dHlsZTo6RGlmZiBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpCkBAIC0yNTgxLDgg
KzI1NzEsNiBAQCB2b2lkIFJlbmRlck9iamVjdDo6YXJlbmFEZWxldGUoUmVuZGVyQXJlCiAKICAg
ICAgICAgaWYgKFN0eWxlSW1hZ2UqIG1hc2tCb3hJbWFnZSA9IG1fc3R5bGUtPm1hc2tCb3hJbWFn
ZSgpLmltYWdlKCkpCiAgICAgICAgICAgICBtYXNrQm94SW1hZ2UtPnJlbW92ZUNsaWVudCh0aGlz
KTsKLQotICAgICAgICBtX3N0eWxlLT5kZXJlZihhcmVuYSk7CiAgICAgfQogCiAjaWZuZGVmIE5E
RUJVRwpAQCAtMjgwMiwyNyArMjc5MCwyNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6ZGVsZXRlTGlu
ZUJveFdyYXBwZXIoCiBSZW5kZXJTdHlsZSogUmVuZGVyT2JqZWN0OjpmaXJzdExpbmVTdHlsZSgp
IGNvbnN0CiB7CiAgICAgaWYgKCFkb2N1bWVudCgpLT51c2VzRmlyc3RMaW5lUnVsZXMoKSkKLSAg
ICAgICAgcmV0dXJuIG1fc3R5bGU7CisgICAgICAgIHJldHVybiBtX3N0eWxlLmdldCgpOwogCi0g
ICAgUmVuZGVyU3R5bGUqIHMgPSBtX3N0eWxlOworICAgIFJlbmRlclN0eWxlKiBzID0gbV9zdHls
ZS5nZXQoKTsKICAgICBjb25zdCBSZW5kZXJPYmplY3QqIG9iaiA9IGlzVGV4dCgpID8gcGFyZW50
KCkgOiB0aGlzOwogICAgIGlmIChvYmotPmlzQmxvY2tGbG93KCkpIHsKICAgICAgICAgUmVuZGVy
QmxvY2sqIGZpcnN0TGluZUJsb2NrID0gb2JqLT5maXJzdExpbmVCbG9jaygpOwogICAgICAgICBp
ZiAoZmlyc3RMaW5lQmxvY2spCi0gICAgICAgICAgICBzID0gZmlyc3RMaW5lQmxvY2stPmdldFBz
ZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpGSVJTVF9MSU5FLCBzdHlsZSgpKTsKKyAgICAgICAgICAg
IHMgPSBmaXJzdExpbmVCbG9jay0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkZJUlNUX0xJ
TkUsIHN0eWxlKCkpLmdldCgpOwogICAgIH0gZWxzZSBpZiAoIW9iai0+aXNBbm9ueW1vdXMoKSAm
JiBvYmotPmlzSW5saW5lRmxvdygpKSB7CiAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSA9IG9iai0+cGFyZW50KCktPmZpcnN0TGluZVN0eWxlKCk7CiAgICAgICAgIGlmIChwYXJlbnRT
dHlsZSAhPSBvYmotPnBhcmVudCgpLT5zdHlsZSgpKSB7CiAgICAgICAgICAgICAvLyBBIGZpcnN0
LWxpbmUgc3R5bGUgaXMgaW4gZWZmZWN0LiBXZSBuZWVkIHRvIGNhY2hlIGEgZmlyc3QtbGluZSBz
dHlsZQogICAgICAgICAgICAgLy8gZm9yIG91cnNlbHZlcy4KICAgICAgICAgICAgIHN0eWxlKCkt
PnNldEhhc1BzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpGSVJTVF9MSU5FX0lOSEVSSVRFRCk7Ci0g
ICAgICAgICAgICBzID0gb2JqLT5nZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6RklSU1RfTElO
RV9JTkhFUklURUQsIHBhcmVudFN0eWxlKTsKKyAgICAgICAgICAgIHMgPSBvYmotPmdldFBzZXVk
b1N0eWxlKFJlbmRlclN0eWxlOjpGSVJTVF9MSU5FX0lOSEVSSVRFRCwgcGFyZW50U3R5bGUpLmdl
dCgpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBzOwogfQogCi1SZW5kZXJTdHlsZSog
UmVuZGVyT2JqZWN0OjpnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6UHNldWRvSWQgcHNldWRv
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGJvb2wgdXNlQ2FjaGVkU3R5bGUpIGNvbnN0CitQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJPYmplY3Q6OmdldFBzZXVkb1N0eWxlKFJlbmRl
clN0eWxlOjpQc2V1ZG9JZCBwc2V1ZG8sIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgYm9vbCB1
c2VDYWNoZWRTdHlsZSkgY29uc3QKIHsKICAgICBpZiAocHNldWRvIDwgUmVuZGVyU3R5bGU6OkZJ
UlNUX0lOVEVSTkFMX1BTRVVET0lEICYmICFzdHlsZSgpLT5oYXNQc2V1ZG9TdHlsZShwc2V1ZG8p
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTI4MzAsOSArMjgxOCwxMyBAQCBSZW5kZXJTdHlsZSog
UmVuZGVyT2JqZWN0OjpnZXRQc2V1ZG9TdHlsCiAgICAgaWYgKCFwYXJlbnRTdHlsZSkKICAgICAg
ICAgcGFyZW50U3R5bGUgPSBzdHlsZSgpOwogCi0gICAgUmVuZGVyU3R5bGUqIHJlc3VsdCA9IHVz
ZUNhY2hlZFN0eWxlID8gc3R5bGUoKS0+Z2V0UHNldWRvU3R5bGUocHNldWRvKSA6IDA7Ci0gICAg
aWYgKHJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAodXNlQ2FjaGVkU3R5
bGUpIHsKKyAgICAgICAgUmVuZGVyU3R5bGUqIGNhY2hlZFN0eWxlID0gc3R5bGUoKS0+Z2V0Q2Fj
aGVkUHNldWRvU3R5bGUocHNldWRvKTsKKyAgICAgICAgaWYgKGNhY2hlZFN0eWxlKQorICAgICAg
ICAgICAgcmV0dXJuIGNhY2hlZFN0eWxlOworICAgIH0KKyAgICAKKyAgICBSZWZQdHI8UmVuZGVy
U3R5bGU+IHJlc3VsdDsKIAogICAgIE5vZGUqIG5vZGUgPSBlbGVtZW50KCk7CiAgICAgd2hpbGUg
KG5vZGUgJiYgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKQEAgLTI4NDUsMTAgKzI4MzcsMTAgQEAg
UmVuZGVyU3R5bGUqIFJlbmRlck9iamVjdDo6Z2V0UHNldWRvU3R5bAogICAgICAgICByZXN1bHQt
PnNldFN0eWxlVHlwZShSZW5kZXJTdHlsZTo6RklSU1RfTElORV9JTkhFUklURUQpOwogICAgIH0g
ZWxzZQogICAgICAgICByZXN1bHQgPSBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPnBzZXVk
b1N0eWxlRm9yRWxlbWVudChwc2V1ZG8sIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKSwgcGFy
ZW50U3R5bGUpOwotICAgIGlmIChyZXN1bHQgJiYgdXNlQ2FjaGVkU3R5bGUpIHsKLSAgICAgICAg
c3R5bGUoKS0+YWRkUHNldWRvU3R5bGUocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0LT5kZXJlZihk
b2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKLSAgICB9CisgICAgCisgICAgaWYgKHJlc3VsdCAm
JiB1c2VDYWNoZWRTdHlsZSkKKyAgICAgICAgc3R5bGUoKS0+YWRkQ2FjaGVkUHNldWRvU3R5bGUo
cmVzdWx0KTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlz
aW9uIDM3NTg2KQorKysgcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNzYsNyArMzc2LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGluY2x1ZGVIb3Jpem9udGFsU2Ny
b2xsYmFyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIChzdHlsZSgp
LT5vdmVyZmxvd1goKSA9PSBPU0NST0xMIHx8IHN0eWxlKCktPm92ZXJmbG93WCgpID09IE9BVVRP
KTsgfQogCiBwdWJsaWM6Ci0gICAgUmVuZGVyU3R5bGUqIGdldFBzZXVkb1N0eWxlKFJlbmRlclN0
eWxlOjpQc2V1ZG9JZCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9vbCB1c2VDYWNo
ZWRTdHlsZSA9IHRydWUpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGdldFBz
ZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpQc2V1ZG9JZCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
ID0gMCwgYm9vbCB1c2VDYWNoZWRTdHlsZSA9IHRydWUpIGNvbnN0OwogCiAgICAgdm9pZCB1cGRh
dGVEcmFnU3RhdGUoYm9vbCBkcmFnT24pOwogCkBAIC01MzksMTQgKzUzOSwxNCBAQCBwdWJsaWM6
CiAgICAgLy8gQ2FsbGVkIHRvIHVwZGF0ZSBhIHN0eWxlIHRoYXQgaXMgYWxsb3dlZCB0byB0cmln
Z2VyIGFuaW1hdGlvbnMuCiAgICAgLy8gRklYTUU6IFJpZ2h0IG5vdyB0aGlzIHdpbGwgdHlwaWNh
bGx5IGJlIGNhbGxlZCBvbmx5IHdoZW4gdXBkYXRpbmcgaGFwcGVucyBmcm9tIHRoZSBET00gb24g
ZXhwbGljaXQgZWxlbWVudHMuCiAgICAgLy8gV2UgZG9uJ3QgeWV0IGhhbmRsZSBnZW5lcmF0ZWQg
Y29udGVudCBhbmltYXRpb24gc3VjaCBhcyBmaXJzdC1sZXR0ZXIgb3IgYmVmb3JlL2FmdGVyICh3
ZSdsbCB3b3JyeSBhYm91dCB0aGlzIGxhdGVyKS4KLSAgICB2b2lkIHNldEFuaW1hdGFibGVTdHls
ZShSZW5kZXJTdHlsZSopOworICAgIHZvaWQgc2V0QW5pbWF0YWJsZVN0eWxlKGNvbnN0IFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+Jik7CiAKICAgICAvLyBTZXQgdGhlIHN0eWxlIG9mIHRoZSBvYmpl
Y3QgYW5kIHVwZGF0ZSB0aGUgc3RhdGUgb2YgdGhlIG9iamVjdCBhY2NvcmRpbmdseS4KLSAgICB2
aXJ0dWFsIHZvaWQgc2V0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0U3R5bGUoY29uc3QgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4mKTsKIAogICAgIC8vIFVw
ZGF0ZXMgb25seSB0aGUgbG9jYWwgc3R5bGUgcHRyIG9mIHRoZSBvYmplY3QuICBEb2VzIG5vdCB1
cGRhdGUgdGhlIHN0YXRlIG9mIHRoZSBvYmplY3QsCiAgICAgLy8gYW5kIHNvIG9ubHkgc2hvdWxk
IGJlIGNhbGxlZCB3aGVuIHRoZSBzdHlsZSBpcyBrbm93biBub3QgdG8gaGF2ZSBjaGFuZ2VkIChv
ciBmcm9tIHNldFN0eWxlKS4KLSAgICB2b2lkIHNldFN0eWxlSW50ZXJuYWwoUmVuZGVyU3R5bGUq
KTsKKyAgICB2b2lkIHNldFN0eWxlSW50ZXJuYWwoY29uc3QgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4mKTsKIAogICAgIC8vIHJldHVybnMgdGhlIGNvbnRhaW5pbmcgYmxvY2sgbGV2ZWwgZWxlbWVu
dCBmb3IgdGhpcyBlbGVtZW50LgogICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2soKSBj
b25zdDsKQEAgLTY5NSw3ICs2OTUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgbWluUHJl
ZldpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgaW50IG1heFByZWZXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3R5bGU7IH0KKyAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0eWxlLmdldCgpOyB9CiAgICAgUmVuZGVyU3R5bGUqIGZpcnN0TGluZVN0eWxlKCkg
Y29uc3Q7CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKGJvb2wgZmlyc3RMaW5lKSBjb25zdCB7IHJl
dHVybiBmaXJzdExpbmUgPyBmaXJzdExpbmVTdHlsZSgpIDogc3R5bGUoKTsgfQogCkBAIC05MTEs
NyArOTExLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgYXJlbmFEZWxldGUoUmVuZGVyQXJlbmEq
LCB2b2lkKiBvYmplY3RCYXNlKTsKIAogcHJpdmF0ZToKLSAgICBSZW5kZXJTdHlsZSogbV9zdHls
ZTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7CiAKICAgICBOb2RlKiBtX25vZGU7
CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVu
ZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcv
UmVuZGVyU1ZHQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNiArMzUsMTYgQEAgUmVu
ZGVyU1ZHQmxvY2s6OlJlbmRlclNWR0Jsb2NrKFNWR0VsZW1lbgogewogfQogCi12b2lkIFJlbmRl
clNWR0Jsb2NrOjpzZXRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIAordm9pZCBSZW5k
ZXJTVkdCbG9jazo6c2V0U3R5bGUoY29uc3QgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4mIHN0eWxl
KSAKIHsKLSAgICBjb25zdCBSZW5kZXJTdHlsZSogdXNlU3R5bGUgPSBzdHlsZTsKKyAgICBSZWZQ
dHI8UmVuZGVyU3R5bGU+IHVzZVN0eWxlID0gc3R5bGU7CiAKICAgICAvLyBTVkcgdGV4dCBsYXlv
dXQgY29kZSBleHBlY3RzIHVzIHRvIGJlIGEgYmxvY2stbGV2ZWwgc3R5bGUgZWxlbWVudC4gICAK
ICAgICBpZiAodXNlU3R5bGUtPmRpc3BsYXkoKSA9PSBOT05FKQogICAgICAgICBzZXRDaGlsZHJl
bklubGluZShmYWxzZSk7CiAgICAgZWxzZSBpZiAodXNlU3R5bGUtPmlzRGlzcGxheUlubGluZVR5
cGUoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBuZXcgKHJlbmRlckFyZW5h
KCkpIFJlbmRlclN0eWxlKCk7Ci0gICAgICAgIG5ld1N0eWxlLT5pbmhlcml0RnJvbShzdHlsZSk7
CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3Jl
YXRlKCk7CisgICAgICAgIG5ld1N0eWxlLT5pbmhlcml0RnJvbSh1c2VTdHlsZS5nZXQoKSk7CiAg
ICAgICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKICAgICAgICAgdXNlU3R5bGUgPSBu
ZXdTdHlsZTsKICAgICB9CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suaAkocmV2aXNpb24gMzc1ODYpCisrKyBy
ZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBA
QCBjbGFzcyBTVkdFbGVtZW50OwogY2xhc3MgUmVuZGVyU1ZHQmxvY2sgOiBwdWJsaWMgUmVuZGVy
QmxvY2sgewogcHVibGljOgogICAgIFJlbmRlclNWR0Jsb2NrKFNWR0VsZW1lbnQqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0U3R5bGUoY29uc3QgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4mKTsKIH07CiAKIH0KSW5k
ZXg6IHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmlu
Zy9SZW5kZXJTY3JvbGxiYXIuY3BwCShyZXZpc2lvbiAzNzYxNCkKKysrIHJlbmRlcmluZy9SZW5k
ZXJTY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsMTMgKzExNywxMSBAQCBTY3Jv
bGxiYXJQYXJ0IFJlbmRlclNjcm9sbGJhcjo6cGFydEZvclN0CiAgICAgcmV0dXJuIHNfc3R5bGVS
ZXNvbHZlUGFydDsKIH0KIAotUmVuZGVyU3R5bGUqIFJlbmRlclNjcm9sbGJhcjo6Z2V0U2Nyb2xs
YmFyUHNldWRvU3R5bGUoU2Nyb2xsYmFyUGFydCBwYXJ0VHlwZSwgUmVuZGVyU3R5bGU6OlBzZXVk
b0lkIHBzZXVkb0lkKQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyU2Nyb2xsYmFyOjpn
ZXRTY3JvbGxiYXJQc2V1ZG9TdHlsZShTY3JvbGxiYXJQYXJ0IHBhcnRUeXBlLCBSZW5kZXJTdHls
ZTo6UHNldWRvSWQgcHNldWRvSWQpCiB7CiAgICAgc19zdHlsZVJlc29sdmVQYXJ0ID0gcGFydFR5
cGU7CiAgICAgc19zdHlsZVJlc29sdmVTY3JvbGxiYXIgPSB0aGlzOwotICAgIFJlbmRlclN0eWxl
KiByZXN1bHQgPSBtX293bmVyLT5nZXRQc2V1ZG9TdHlsZShwc2V1ZG9JZCwgbV9vd25lci0+c3R5
bGUoKSwgZmFsc2UpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIHJlc3VsdC0+cmVmKCk7Cisg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZXN1bHQgPSBtX293bmVyLT5nZXRQc2V1ZG9TdHlsZShw
c2V1ZG9JZCwgbV9vd25lci0+c3R5bGUoKSwgZmFsc2UpOwogICAgIHNfc3R5bGVSZXNvbHZlUGFy
dCA9IE5vUGFydDsKICAgICBzX3N0eWxlUmVzb2x2ZVNjcm9sbGJhciA9IDA7CiAgICAgcmV0dXJu
IHJlc3VsdDsKQEAgLTE4NSw3ICsxODMsNyBAQCB2b2lkIFJlbmRlclNjcm9sbGJhcjo6dXBkYXRl
U2Nyb2xsYmFyUGFyCiAgICAgaWYgKHBhcnRUeXBlID09IE5vUGFydCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUmVuZGVyU3R5bGUqIHBhcnRTdHlsZSA9ICFkZXN0cm95ID8gZ2V0U2Nyb2xsYmFy
UHNldWRvU3R5bGUocGFydFR5cGUsICBwc2V1ZG9Gb3JTY3JvbGxiYXJQYXJ0KHBhcnRUeXBlKSkg
OiAwOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcGFydFN0eWxlID0gIWRlc3Ryb3kgPyBnZXRT
Y3JvbGxiYXJQc2V1ZG9TdHlsZShwYXJ0VHlwZSwgIHBzZXVkb0ZvclNjcm9sbGJhclBhcnQocGFy
dFR5cGUpKSA6IDA7CiAgICAgCiAgICAgYm9vbCBuZWVkUmVuZGVyZXIgPSAhZGVzdHJveSAmJiBw
YXJ0U3R5bGUgJiYgcGFydFN0eWxlLT5kaXNwbGF5KCkgIT0gTk9ORSAmJiBwYXJ0U3R5bGUtPnZp
c2liaWxpdHkoKSA9PSBWSVNJQkxFOwogICAgIApAQCAtMjI0LDkgKzIyMiw2IEBAIHZvaWQgUmVu
ZGVyU2Nyb2xsYmFyOjp1cGRhdGVTY3JvbGxiYXJQYXIKICAgICAKICAgICBpZiAocGFydFJlbmRl
cmVyKQogICAgICAgICBwYXJ0UmVuZGVyZXItPnNldFN0eWxlKHBhcnRTdHlsZSk7Ci0gICAgICAg
IAotICAgIGlmIChwYXJ0U3R5bGUpCi0gICAgICAgIHBhcnRTdHlsZS0+ZGVyZWYobV9vd25lci0+
cmVuZGVyQXJlbmEoKSk7CiB9CiAKIHZvaWQgUmVuZGVyU2Nyb2xsYmFyOjpwYWludFBhcnQoR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIFNjcm9sbGJhclBhcnQgcGFydFR5cGUsIGNv
bnN0IEludFJlY3QmIHJlY3QpCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5oCShyZXZpc2lvbiAzNzU4NikK
KysrIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyAr
NzEsNyBAQCBwdWJsaWM6CiAgICAgaW50IG1pbmltdW1UaHVtYkxlbmd0aCgpOwogCiBwcml2YXRl
OgotICAgIFJlbmRlclN0eWxlKiBnZXRTY3JvbGxiYXJQc2V1ZG9TdHlsZShTY3JvbGxiYXJQYXJ0
LCBSZW5kZXJTdHlsZTo6UHNldWRvSWQpOworICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGdl
dFNjcm9sbGJhclBzZXVkb1N0eWxlKFNjcm9sbGJhclBhcnQsIFJlbmRlclN0eWxlOjpQc2V1ZG9J
ZCk7CiAgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJQYXJ0KFNjcm9sbGJhclBhcnQsIGJvb2wgZGVz
dHJveSA9IGZhbHNlKTsKIAogICAgIFJlbmRlck9iamVjdCogbV9vd25lcjsKSW5kZXg6IHJlbmRl
cmluZy9SZW5kZXJTbGlkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJTbGlk
ZXIuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjgsMjQgKzE2OCwyMSBAQCB2b2lkIFJlbmRlclNsaWRlcjo6c3R5
bGVEaWRDaGFuZ2UoUmVuZGVyCiB7CiAgICAgUmVuZGVyQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKGRp
ZmYsIG9sZFN0eWxlKTsKICAgICAKLSAgICBpZiAobV90aHVtYikgewotICAgICAgICBSZW5kZXJT
dHlsZSogdGh1bWJTdHlsZSA9IGNyZWF0ZVRodW1iU3R5bGUoc3R5bGUoKSwgbV90aHVtYi0+cmVu
ZGVyZXIoKS0+c3R5bGUoKSk7Ci0gICAgICAgIG1fdGh1bWItPnJlbmRlcmVyKCktPnNldFN0eWxl
KHRodW1iU3R5bGUpOwotICAgIH0KKyAgICBpZiAobV90aHVtYikKKyAgICAgICAgbV90aHVtYi0+
cmVuZGVyZXIoKS0+c2V0U3R5bGUoY3JlYXRlVGh1bWJTdHlsZShzdHlsZSgpLCBtX3RodW1iLT5y
ZW5kZXJlcigpLT5zdHlsZSgpKSk7CiAgICAgICAgIAogICAgIHNldFJlcGxhY2VkKGlzSW5saW5l
KCkpOwogfQogCi1SZW5kZXJTdHlsZSogUmVuZGVyU2xpZGVyOjpjcmVhdGVUaHVtYlN0eWxlKGNv
bnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
KQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyU2xpZGVyOjpjcmVhdGVUaHVtYlN0eWxl
KGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKQogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZTsKLQotICAgIFJlbmRlclN0eWxlKiBwc2V1
ZG9TdHlsZSA9IGdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTTElERVJfVEhVTUIpOworICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGU7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1
ZG9TdHlsZSA9IGdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTTElERVJfVEhVTUIpOwogICAg
IGlmIChwc2V1ZG9TdHlsZSkKICAgICAgICAgLy8gV2UgbWF5IGJlIHNoYXJpbmcgc3R5bGUgd2l0
aCBhbm90aGVyIHNsaWRlciwgYnV0IHdlIG11c3Qgbm90IHNoYXJlIHRoZSB0aHVtYiBzdHlsZS4K
LSAgICAgICAgc3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCpwc2V1ZG9T
dHlsZSk7CisgICAgICAgIHN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKHBzZXVkb1N0eWxlLmdl
dCgpKTsKICAgICBlbHNlCi0gICAgICAgIHN0eWxlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5k
ZXJTdHlsZSgpOworICAgICAgICBzdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKIAogICAg
IGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgc3R5bGUtPmluaGVyaXRGcm9tKHBhcmVudFN0eWxl
KTsKQEAgLTI0NCw4ICsyNDEsOCBAQCB2b2lkIFJlbmRlclNsaWRlcjo6dXBkYXRlRnJvbUVsZW1l
bnQoKQogewogICAgIGlmICghbV90aHVtYikgewogICAgICAgICBtX3RodW1iID0gbmV3IEhUTUxT
bGlkZXJUaHVtYkVsZW1lbnQoZG9jdW1lbnQoKSwgbm9kZSgpKTsKLSAgICAgICAgUmVuZGVyU3R5
bGUqIHRodW1iU3R5bGUgPSBjcmVhdGVUaHVtYlN0eWxlKHN0eWxlKCkpOwotICAgICAgICBtX3Ro
dW1iLT5zZXRSZW5kZXJlcihtX3RodW1iLT5jcmVhdGVSZW5kZXJlcihyZW5kZXJBcmVuYSgpLCB0
aHVtYlN0eWxlKSk7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gdGh1bWJTdHlsZSA9IGNy
ZWF0ZVRodW1iU3R5bGUoc3R5bGUoKSk7CisgICAgICAgIG1fdGh1bWItPnNldFJlbmRlcmVyKG1f
dGh1bWItPmNyZWF0ZVJlbmRlcmVyKHJlbmRlckFyZW5hKCksIHRodW1iU3R5bGUuZ2V0KCkpKTsK
ICAgICAgICAgbV90aHVtYi0+cmVuZGVyZXIoKS0+c2V0U3R5bGUodGh1bWJTdHlsZSk7CiAgICAg
ICAgIG1fdGh1bWItPnNldEF0dGFjaGVkKCk7CiAgICAgICAgIG1fdGh1bWItPnNldEluRG9jdW1l
bnQodHJ1ZSk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9S
ZW5kZXJTbGlkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShSZW5kZXJTdHls
ZTo6RGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKICAgICAKICAgICBwcml2YXRl
OgotICAgICAgICBSZW5kZXJTdHlsZSogY3JlYXRlVGh1bWJTdHlsZShjb25zdCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSA9IDApOworICAgICAg
ICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjcmVhdGVUaHVtYlN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlID0gMCk7CiAgICAg
ICAgIGludCB0cmFja1NpemUoKTsKIAogICAgICAgICBSZWZQdHI8SFRNTFNsaWRlclRodW1iRWxl
bWVudD4gbV90aHVtYjsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNyArMjAwLDcgQEAg
dm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KgogICAgIGlmIChiZWZvcmVD
aGlsZCAmJiAhYmVmb3JlQ2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgJiYgYmVmb3JlQ2hpbGQtPnN0
eWxlKCktPmRpc3BsYXkoKSAhPSBUQUJMRV9DQVBUSU9OICYmIGJlZm9yZUNoaWxkLT5zdHlsZSgp
LT5kaXNwbGF5KCkgIT0gVEFCTEVfQ09MVU1OX0dST1VQKQogICAgICAgICBiZWZvcmVDaGlsZCA9
IDA7CiAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uID0gbmV3IChyZW5kZXJBcmVuYSgp
KSBSZW5kZXJUYWJsZVNlY3Rpb24oZG9jdW1lbnQoKSAvKiBhbm9ueW1vdXMgKi8pOwotICAgIFJl
bmRlclN0eWxlKiBuZXdTdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsK
KyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgp
OwogICAgIG5ld1N0eWxlLT5pbmhlcml0RnJvbShzdHlsZSgpKTsKICAgICBuZXdTdHlsZS0+c2V0
RGlzcGxheShUQUJMRV9ST1dfR1JPVVApOwogICAgIHNlY3Rpb24tPnNldFN0eWxlKG5ld1N0eWxl
KTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVu
ZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcv
UmVuZGVyVGFibGVSb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIHZvaWQg
UmVuZGVyVGFibGVSb3c6OmFkZENoaWxkKFJlbmRlck9iamUKICAgICAgICAgfQogCiAgICAgICAg
IFJlbmRlclRhYmxlQ2VsbCogY2VsbCA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyVGFibGVD
ZWxsKGRvY3VtZW50KCkgLyogYW5vbnltb3VzIG9iamVjdCAqLyk7Ci0gICAgICAgIFJlbmRlclN0
eWxlKiBuZXdTdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsKKyAgICAg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsK
ICAgICAgICAgbmV3U3R5bGUtPmluaGVyaXRGcm9tKHN0eWxlKCkpOwogICAgICAgICBuZXdTdHls
ZS0+c2V0RGlzcGxheShUQUJMRV9DRUxMKTsKICAgICAgICAgY2VsbC0+c2V0U3R5bGUobmV3U3R5
bGUpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysg
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3
ICsxMTIsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQoUmVuZGVyCiAgICAg
ICAgIH0KIAogICAgICAgICBSZW5kZXJPYmplY3QqIHJvdyA9IG5ldyAocmVuZGVyQXJlbmEoKSkg
UmVuZGVyVGFibGVSb3coZG9jdW1lbnQoKSAvKiBhbm9ueW1vdXMgdGFibGUgKi8pOwotICAgICAg
ICBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxl
KCk7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y3JlYXRlKCk7CiAgICAgICAgIG5ld1N0eWxlLT5pbmhlcml0RnJvbShzdHlsZSgpKTsKICAgICAg
ICAgbmV3U3R5bGUtPnNldERpc3BsYXkoVEFCTEVfUk9XKTsKICAgICAgICAgcm93LT5zZXRTdHls
ZShuZXdTdHlsZSk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDM3NTg2
KQorKysgcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTIyLDcgKzEyMiw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnN0eWxlRGlkQ2hhbmdlKFIK
IAogICAgIGlmIChtX2lubmVyVGV4dCkgewogICAgICAgICBSZW5kZXJCbG9jayogdGV4dEJsb2Nr
UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KG1faW5uZXJUZXh0LT5yZW5kZXJl
cigpKTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHRleHRCbG9ja1N0eWxlID0gY3JlYXRlSW5uZXJU
ZXh0U3R5bGUoc3R5bGUoKSk7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gdGV4dEJsb2Nr
U3R5bGUgPSBjcmVhdGVJbm5lclRleHRTdHlsZShzdHlsZSgpKTsKICAgICAgICAgLy8gV2UgbWF5
IGhhdmUgc2V0IHRoZSB3aWR0aCBhbmQgdGhlIGhlaWdodCBpbiB0aGUgb2xkIHN0eWxlIGluIGxh
eW91dCgpLiBSZXNldCB0aGVtIG5vdyB0byBhdm9pZAogICAgICAgICAvLyBnZXR0aW5nIGEgc3B1
cmlvdXMgbGF5b3V0IGhpbnQuCiAgICAgICAgIHRleHRCbG9ja1JlbmRlcmVyLT5zdHlsZSgpLT5z
ZXRIZWlnaHQoTGVuZ3RoKCkpOwpAQCAtMTQzLDkgKzE0Myw5IEBAIHZvaWQgUmVuZGVyVGV4dENv
bnRyb2w6OnN0eWxlRGlkQ2hhbmdlKFIKICAgICBzZXRSZXBsYWNlZChpc0lubGluZSgpKTsKIH0K
IAotUmVuZGVyU3R5bGUqIFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVJbm5lckJsb2NrU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBS
ZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlSW5uZXJCbG9ja1N0eWxlKGNvbnN0IFJlbmRlclN0eWxl
KiBzdGFydFN0eWxlKQogewotICAgIFJlbmRlclN0eWxlKiBpbm5lckJsb2NrU3R5bGUgPSBuZXcg
KHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBp
bm5lckJsb2NrU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAKICAgICBpbm5lckJsb2Nr
U3R5bGUtPmluaGVyaXRGcm9tKHN0YXJ0U3R5bGUpOwogICAgIGlubmVyQmxvY2tTdHlsZS0+c2V0
RGlzcGxheShCTE9DSyk7CkBAIC0xNTMsMjAgKzE1MywyMCBAQCBSZW5kZXJTdHlsZSogUmVuZGVy
VGV4dENvbnRyb2w6OmNyZWF0ZUluCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgc2hhZG93IGRv
bSB0byBiZSBlZGl0YWJsZSwgc28gd2Ugc2V0IHRoaXMgYmxvY2sgdG8gcmVhZC1vbmx5IGluIGNh
c2UgdGhlIGlucHV0IGl0c2VsZiBpcyBlZGl0YWJsZS4KICAgICBpbm5lckJsb2NrU3R5bGUtPnNl
dFVzZXJNb2RpZnkoUkVBRF9PTkxZKTsKIAotICAgIHJldHVybiBpbm5lckJsb2NrU3R5bGU7Cisg
ICAgcmV0dXJuIGlubmVyQmxvY2tTdHlsZS5yZWxlYXNlKCk7CiB9CiAKLVJlbmRlclN0eWxlKiBS
ZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlSW5uZXJUZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUq
IHN0YXJ0U3R5bGUpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbDo6
Y3JlYXRlSW5uZXJUZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpCiB7CiAg
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQqPihub2RlKCkpOwogICAgIGJvb2wgcGxhY2Vob2xkZXJTaG91bGRCZVZp
c2libGUgPSAhbV9tdWx0aUxpbmUgJiYgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGVs
ZW1lbnQpLT5wbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSgpOwogCi0gICAgUmVuZGVyU3R5bGUq
IHRleHRCbG9ja1N0eWxlID0gMDsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHRleHRCbG9ja1N0
eWxlOwogICAgIGlmIChwbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSkgewotICAgICAgICBSZW5k
ZXJTdHlsZSogcHNldWRvU3R5bGUgPSBnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6SU5QVVRf
UExBQ0VIT0xERVIpOwotICAgICAgICB0ZXh0QmxvY2tTdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEo
KSkgUmVuZGVyU3R5bGUoKnBzZXVkb1N0eWxlKTsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBwc2V1ZG9TdHlsZSA9IGdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpJTlBVVF9QTEFDRUhP
TERFUik7CisgICAgICAgIHRleHRCbG9ja1N0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKHBzZXVk
b1N0eWxlLmdldCgpKTsKICAgICB9IGVsc2UgewotICAgICAgICB0ZXh0QmxvY2tTdHlsZSA9IG5l
dyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsgICAgCisgICAgICAgIHRleHRCbG9ja1N0
eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOyAgIAogICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+
aW5oZXJpdEZyb20oc3RhcnRTdHlsZSk7CiAgICAgfQogICAgIApAQCAtMjIzLDE0ICsyMjMsMTQg
QEAgUmVuZGVyU3R5bGUqIFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVJbgogICAgIGlmICghZWxl
bWVudC0+aXNFbmFibGVkKCkpCiAgICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRDb2xvcihkaXNh
YmxlZFRleHRDb2xvcih0ZXh0QmxvY2tTdHlsZS0+Y29sb3IoKSwgc3RhcnRTdHlsZS0+YmFja2dy
b3VuZENvbG9yKCkpKTsKIAotICAgIHJldHVybiB0ZXh0QmxvY2tTdHlsZTsKKyAgICByZXR1cm4g
dGV4dEJsb2NrU3R5bGUucmVsZWFzZSgpOwogfQogCi1SZW5kZXJTdHlsZSogUmVuZGVyVGV4dENv
bnRyb2w6OmNyZWF0ZVJlc3VsdHNCdXR0b25TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRT
dHlsZSkKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVS
ZXN1bHRzQnV0dG9uU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpCiB7CiAgICAg
QVNTRVJUKCFtX211bHRpTGluZSk7CiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBSZW5kZXJTdHlsZSogcmVz
dWx0c0Jsb2NrU3R5bGU7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZXN1bHRzQmxvY2tTdHls
ZTsKICAgICBpZiAoaW5wdXQtPm1heFJlc3VsdHMoKSA8IDApCiAgICAgICAgIHJlc3VsdHNCbG9j
a1N0eWxlID0gZ2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNFQVJDSF9ERUNPUkFUSU9OKTsK
ICAgICBlbHNlIGlmICghaW5wdXQtPm1heFJlc3VsdHMoKSkKQEAgLTIzOSwzMCArMjM5LDMwIEBA
IFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlUmUKICAgICAgICAgcmVzdWx0
c0Jsb2NrU3R5bGUgPSBnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6U0VBUkNIX1JFU1VMVFNf
QlVUVE9OKTsKIAogICAgIGlmICghcmVzdWx0c0Jsb2NrU3R5bGUpCi0gICAgICAgIHJlc3VsdHNC
bG9ja1N0eWxlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOworICAgICAgICBy
ZXN1bHRzQmxvY2tTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKIAogICAgIGlmIChzdGFy
dFN0eWxlKQogICAgICAgICByZXN1bHRzQmxvY2tTdHlsZS0+aW5oZXJpdEZyb20oc3RhcnRTdHls
ZSk7CiAKLSAgICByZXR1cm4gcmVzdWx0c0Jsb2NrU3R5bGU7CisgICAgcmV0dXJuIHJlc3VsdHNC
bG9ja1N0eWxlLnJlbGVhc2UoKTsKIH0KIAotUmVuZGVyU3R5bGUqIFJlbmRlclRleHRDb250cm9s
OjpjcmVhdGVDYW5jZWxCdXR0b25TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSkK
K1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVDYW5jZWxC
dXR0b25TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSkKIHsKLSAgICBSZW5kZXJT
dHlsZSogY2FuY2VsQmxvY2tTdHlsZTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGNhbmNlbEJs
b2NrU3R5bGU7CiAgICAgCi0gICAgaWYgKFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IGdldFBz
ZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTRUFSQ0hfQ0FOQ0VMX0JVVFRPTikpCisgICAgaWYgKFJl
ZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGUgPSBnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHls
ZTo6U0VBUkNIX0NBTkNFTF9CVVRUT04pKQogICAgICAgICAvLyBXZSBtYXkgYmUgc2hhcmluZyBz
dHlsZSB3aXRoIGFub3RoZXIgc2VhcmNoIGZpZWxkLCBidXQgd2UgbXVzdCBub3Qgc2hhcmUgdGhl
IGNhbmNlbCBidXR0b24gc3R5bGUuCi0gICAgICAgIGNhbmNlbEJsb2NrU3R5bGUgPSBuZXcgKHJl
bmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCpwc2V1ZG9TdHlsZSk7CisgICAgICAgIGNhbmNlbEJs
b2NrU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUocHNldWRvU3R5bGUuZ2V0KCkpOwogICAgIGVs
c2UKLSAgICAgICAgY2FuY2VsQmxvY2tTdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVy
U3R5bGUoKTsKKyAgICAgICAgY2FuY2VsQmxvY2tTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUo
KTsKIAogICAgIGlmIChzdGFydFN0eWxlKQogICAgICAgICBjYW5jZWxCbG9ja1N0eWxlLT5pbmhl
cml0RnJvbShzdGFydFN0eWxlKTsKIAotICAgIHVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHko
Y2FuY2VsQmxvY2tTdHlsZSk7CisgICAgdXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eShjYW5j
ZWxCbG9ja1N0eWxlLmdldCgpKTsKIAotICAgIHJldHVybiBjYW5jZWxCbG9ja1N0eWxlOworICAg
IHJldHVybiBjYW5jZWxCbG9ja1N0eWxlLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0
Q29udHJvbDo6Y3JlYXRlU3VidHJlZUlmTmVlZGVkKCkKQEAgLTI3MSwxOCArMjcxLDEyIEBAIHZv
aWQgUmVuZGVyVGV4dENvbnRyb2w6OmNyZWF0ZVN1YnRyZWVJZk4KICAgICBpZiAoaXNTZWFyY2hG
aWVsZCAmJiAhbV9pbm5lckJsb2NrKSB7CiAgICAgICAgIC8vIENyZWF0ZSB0aGUgaW5uZXIgYmxv
Y2sgZWxlbWVudAogICAgICAgICBtX2lubmVyQmxvY2sgPSBuZXcgVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnQoZG9jdW1lbnQoKSwgbm9kZSgpKTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIGlubmVyQmxv
Y2tTdHlsZSA9IGNyZWF0ZUlubmVyQmxvY2tTdHlsZShzdHlsZSgpKTsKLSAgICAgICAgaW5uZXJC
bG9ja1N0eWxlLT5yZWYoKTsKLSAgICAgICAgbV9pbm5lckJsb2NrLT5hdHRhY2hJbm5lckVsZW1l
bnQobm9kZSgpLCBpbm5lckJsb2NrU3R5bGUsIHJlbmRlckFyZW5hKCkpOwotICAgICAgICBpbm5l
ckJsb2NrU3R5bGUtPmRlcmVmKHJlbmRlckFyZW5hKCkpOworICAgICAgICBtX2lubmVyQmxvY2st
PmF0dGFjaElubmVyRWxlbWVudChub2RlKCksIGNyZWF0ZUlubmVyQmxvY2tTdHlsZShzdHlsZSgp
KSwgcmVuZGVyQXJlbmEoKSk7CiAgICAgfQogICAgIGlmIChpc1NlYXJjaEZpZWxkICYmICFtX3Jl
c3VsdHNCdXR0b24pIHsKICAgICAgICAgLy8gQ3JlYXRlIHRoZSBzZWFyY2ggcmVzdWx0cyBidXR0
b24gZWxlbWVudAogICAgICAgICBtX3Jlc3VsdHNCdXR0b24gPSBuZXcgU2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uRWxlbWVudChkb2N1bWVudCgpKTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHJlc3Vs
dHNCdXR0b25TdHlsZSA9IGNyZWF0ZVJlc3VsdHNCdXR0b25TdHlsZShtX2lubmVyQmxvY2stPnJl
bmRlcmVyKCktPnN0eWxlKCkpOwotICAgICAgICByZXN1bHRzQnV0dG9uU3R5bGUtPnJlZigpOwot
ICAgICAgICBtX3Jlc3VsdHNCdXR0b24tPmF0dGFjaElubmVyRWxlbWVudChtX2lubmVyQmxvY2su
Z2V0KCksIHJlc3VsdHNCdXR0b25TdHlsZSwgcmVuZGVyQXJlbmEoKSk7Ci0gICAgICAgIHJlc3Vs
dHNCdXR0b25TdHlsZS0+ZGVyZWYocmVuZGVyQXJlbmEoKSk7CisgICAgICAgIG1fcmVzdWx0c0J1
dHRvbi0+YXR0YWNoSW5uZXJFbGVtZW50KG1faW5uZXJCbG9jay5nZXQoKSwgY3JlYXRlUmVzdWx0
c0J1dHRvblN0eWxlKG1faW5uZXJCbG9jay0+cmVuZGVyZXIoKS0+c3R5bGUoKSksIHJlbmRlckFy
ZW5hKCkpOwogICAgIH0KICAgICBpZiAoIW1faW5uZXJUZXh0KSB7CiAgICAgICAgIC8vIENyZWF0
ZSB0aGUgdGV4dCBibG9jayBlbGVtZW50CkBAIC0yOTIsMTkgKzI4NiwxMyBAQCB2b2lkIFJlbmRl
clRleHRDb250cm9sOjpjcmVhdGVTdWJ0cmVlSWZOCiAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSA9IHN0eWxlKCk7CiAgICAgICAgIGlmIChtX2lubmVyQmxvY2spCiAgICAgICAgICAg
ICBwYXJlbnRTdHlsZSA9IG1faW5uZXJCbG9jay0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKLSAgICAg
ICAgUmVuZGVyU3R5bGUqIHRleHRCbG9ja1N0eWxlID0gY3JlYXRlSW5uZXJUZXh0U3R5bGUocGFy
ZW50U3R5bGUpOwotICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+cmVmKCk7CiAgICAgICAgIG1faW5u
ZXJUZXh0ID0gbmV3IFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudChkb2N1bWVudCgpLCBtX2lu
bmVyQmxvY2sgPyAwIDogbm9kZSgpKTsKLSAgICAgICAgbV9pbm5lclRleHQtPmF0dGFjaElubmVy
RWxlbWVudChtX2lubmVyQmxvY2sgPyBtX2lubmVyQmxvY2suZ2V0KCkgOiBub2RlKCksIHRleHRC
bG9ja1N0eWxlLCByZW5kZXJBcmVuYSgpKTsKLSAgICAgICAgdGV4dEJsb2NrU3R5bGUtPmRlcmVm
KHJlbmRlckFyZW5hKCkpOworICAgICAgICBtX2lubmVyVGV4dC0+YXR0YWNoSW5uZXJFbGVtZW50
KG1faW5uZXJCbG9jayA/IG1faW5uZXJCbG9jay5nZXQoKSA6IG5vZGUoKSwgY3JlYXRlSW5uZXJU
ZXh0U3R5bGUocGFyZW50U3R5bGUpLCByZW5kZXJBcmVuYSgpKTsKICAgICB9CiAgICAgaWYgKGlz
U2VhcmNoRmllbGQgJiYgIW1fY2FuY2VsQnV0dG9uKSB7CiAgICAgICAgIC8vIENyZWF0ZSB0aGUg
Y2FuY2VsIGJ1dHRvbiBlbGVtZW50CiAgICAgICAgIG1fY2FuY2VsQnV0dG9uID0gbmV3IFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudChkb2N1bWVudCgpKTsKLSAgICAgICAgUmVuZGVyU3R5
bGUqIGNhbmNlbEJ1dHRvblN0eWxlID0gY3JlYXRlQ2FuY2VsQnV0dG9uU3R5bGUobV9pbm5lckJs
b2NrLT5yZW5kZXJlcigpLT5zdHlsZSgpKTsKLSAgICAgICAgY2FuY2VsQnV0dG9uU3R5bGUtPnJl
ZigpOwotICAgICAgICBtX2NhbmNlbEJ1dHRvbi0+YXR0YWNoSW5uZXJFbGVtZW50KG1faW5uZXJC
bG9jay5nZXQoKSwgY2FuY2VsQnV0dG9uU3R5bGUsIHJlbmRlckFyZW5hKCkpOwotICAgICAgICBj
YW5jZWxCdXR0b25TdHlsZS0+ZGVyZWYocmVuZGVyQXJlbmEoKSk7CisgICAgICAgIG1fY2FuY2Vs
QnV0dG9uLT5hdHRhY2hJbm5lckVsZW1lbnQobV9pbm5lckJsb2NrLmdldCgpLCBjcmVhdGVDYW5j
ZWxCdXR0b25TdHlsZShtX2lubmVyQmxvY2stPnJlbmRlcmVyKCktPnN0eWxlKCkpLCByZW5kZXJB
cmVuYSgpKTsKICAgICB9CiB9CiAKQEAgLTExOTAsMTQgKzExNzgsMTIgQEAgRm9udFNlbGVjdG9y
KiBSZW5kZXJUZXh0Q29udHJvbDo6Zm9udFNlbAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6dXBk
YXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KCkKIHsKICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUgPSBtX2lubmVyQmxvY2sgPyBtX2lubmVyQmxvY2stPnJlbmRlcmVyKCktPnN0eWxlKCkgOiBz
dHlsZSgpOwotICAgIFJlbmRlclN0eWxlKiB0ZXh0QmxvY2tTdHlsZSA9IGNyZWF0ZUlubmVyVGV4
dFN0eWxlKHBhcmVudFN0eWxlKTsKLSAgICB0ZXh0QmxvY2tTdHlsZS0+cmVmKCk7CisgICAgUmVm
UHRyPFJlbmRlclN0eWxlPiB0ZXh0QmxvY2tTdHlsZSA9IGNyZWF0ZUlubmVyVGV4dFN0eWxlKHBh
cmVudFN0eWxlKTsKICAgICBtX2lubmVyVGV4dC0+cmVuZGVyZXIoKS0+c2V0U3R5bGUodGV4dEJs
b2NrU3R5bGUpOwogICAgIGZvciAoTm9kZSogbiA9IG1faW5uZXJUZXh0LT5maXJzdENoaWxkKCk7
IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKG1faW5uZXJUZXh0LmdldCgpKSkgewogICAgICAg
ICBpZiAobi0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIG4tPnJlbmRlcmVyKCktPnNldFN0eWxl
KHRleHRCbG9ja1N0eWxlKTsKICAgICB9Ci0gICAgdGV4dEJsb2NrU3R5bGUtPmRlcmVmKHJlbmRl
ckFyZW5hKCkpOwogICAgIHVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CiAKSW5kZXg6IHJlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbC5oCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJv
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsMTAgKzEzMiwxMCBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqLCBTY3JvbGxi
YXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpOwogCi0gICAgUmVuZGVyU3R5bGUq
IGNyZWF0ZUlubmVyQmxvY2tTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSk7Ci0g
ICAgUmVuZGVyU3R5bGUqIGNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBz
dGFydFN0eWxlKTsKLSAgICBSZW5kZXJTdHlsZSogY3JlYXRlQ2FuY2VsQnV0dG9uU3R5bGUoY29u
c3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpOwotICAgIFJlbmRlclN0eWxlKiBjcmVhdGVSZXN1
bHRzQnV0dG9uU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpOworICAgIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZUlubmVyQmxvY2tTdHlsZShjb25zdCBSZW5kZXJTdHls
ZSogc3RhcnRTdHlsZSk7CisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlSW5uZXJU
ZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpOworICAgIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IGNyZWF0ZUNhbmNlbEJ1dHRvblN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBz
dGFydFN0eWxlKTsKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjcmVhdGVSZXN1bHRzQnV0
dG9uU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpOwogCiAgICAgdm9pZCBjcmVh
dGVTdWJ0cmVlSWZOZWVkZWQoKTsKICAgICB2b2lkIHVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxp
dHkoUmVuZGVyU3R5bGUqKTsKSW5kZXg6IHJlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVu
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMu
Y3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVu
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMyArNTksMTMgQEAgVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnQ6OlRleHRDb250cm9sSW5uZQogewogfQogCi12b2lkIFRleHRDb250cm9sSW5uZXJF
bGVtZW50OjphdHRhY2hJbm5lckVsZW1lbnQoTm9kZSogcGFyZW50LCBSZW5kZXJTdHlsZSogc3R5
bGUsIFJlbmRlckFyZW5hKiBhcmVuYSkKK3ZvaWQgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OmF0
dGFjaElubmVyRWxlbWVudChOb2RlKiBwYXJlbnQsIGNvbnN0IFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IHN0eWxlLCBSZW5kZXJBcmVuYSogYXJlbmEpCiB7CiAgICAgLy8gV2hlbiBhZGRpbmcgdGhl
c2UgZWxlbWVudHMsIGNyZWF0ZSB0aGUgcmVuZGVyZXIgJiBzdHlsZSBmaXJzdCBiZWZvcmUgYWRk
aW5nIHRvIHRoZSBET00uCiAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgcmVuZGVyIHRyZWUgd2lsbCBj
cmVhdGUgc29tZSBhbm9ueW1vdXMgYmxvY2tzIHRoYXQgd2lsbCBtZXNzIHVwIG91ciBsYXlvdXQu
CiAKICAgICAvLyBDcmVhdGUgdGhlIHJlbmRlcmVyIHdpdGggdGhlIHNwZWNpZmllZCBzdHlsZQot
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihhcmVuYSwgc3R5bGUp
OworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihhcmVuYSwgc3R5
bGUuZ2V0KCkpOwogICAgIGlmIChyZW5kZXJlcikgewogICAgICAgICBzZXRSZW5kZXJlcihyZW5k
ZXJlcik7CiAgICAgICAgIHJlbmRlcmVyLT5zZXRTdHlsZShzdHlsZSk7CkluZGV4OiByZW5kZXJp
bmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1Rl
eHRDb250cm9sSW5uZXJFbGVtZW50cy5oCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9U
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzU2hhZG93Tm9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2hhZG93UGFyZW50OyB9CiAgICAgdmlydHVhbCBOb2RlKiBzaGFkb3dQYXJlbnROb2RlKCkg
eyByZXR1cm4gbV9zaGFkb3dQYXJlbnQ7IH0KICAgICB2b2lkIHNldFNoYWRvd1BhcmVudE5vZGUo
Tm9kZSogbm9kZSkgeyBtX3NoYWRvd1BhcmVudCA9IG5vZGU7IH0KLSAgICB2b2lkIGF0dGFjaElu
bmVyRWxlbWVudChOb2RlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJBcmVuYSopOworICAgIHZvaWQg
YXR0YWNoSW5uZXJFbGVtZW50KE5vZGUqLCBjb25zdCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiwg
UmVuZGVyQXJlbmEqKTsKICAgICAKIHByaXZhdGU6CiAgICAgTm9kZSogbV9zaGFkb3dQYXJlbnQ7
CkluZGV4OiByZW5kZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBy
ZW5kZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0LmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5k
ZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMy
LDYgQEAgS2V5ZnJhbWVMaXN0Ojp+S2V5ZnJhbWVMaXN0KCkKIAogdm9pZCBLZXlmcmFtZUxpc3Q6
OmNsZWFyKCkKIHsKLSAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2tleWZyYW1lcy5iZWdpbigpOyBpdCAhPSBtX2tleWZyYW1lcy5lbmQoKTsgKytp
dCkKLSAgICAgICAgaWYgKGl0LT5zdHlsZSkKLSAgICAgICAgICAgIGl0LT5zdHlsZS0+ZGVyZWYo
bV9yZW5kZXJlci0+cmVuZGVyQXJlbmEoKSk7Ci0KICAgICBtX2tleWZyYW1lcy5jbGVhcigpOwog
ICAgIG1fcHJvcGVydGllcy5jbGVhcigpOwogfQpAQCAtNDcsMTEgKzQzLDExIEBAIGJvb2wgS2V5
ZnJhbWVMaXN0OjpvcGVyYXRvcj09KGNvbnN0IEtleWYKIAogICAgIFZlY3RvcjxLZXlmcmFtZVZh
bHVlPjo6Y29uc3RfaXRlcmF0b3IgaXQyID0gby5tX2tleWZyYW1lcy5iZWdpbigpOwogICAgIGZv
ciAoVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpdDEgPSBtX2tleWZyYW1l
cy5iZWdpbigpOyBpdDEgIT0gbV9rZXlmcmFtZXMuZW5kKCk7ICsraXQxKSB7Ci0gICAgICAgIGlm
IChpdDEtPmtleSAhPSBpdDItPmtleSkKKyAgICAgICAgaWYgKGl0MS0+bV9rZXkgIT0gaXQyLT5t
X2tleSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlMSA9IGl0MS0+c3R5bGU7Ci0gICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZTIgPSBpdDItPnN0eWxlOwotICAgICAgICBpZiAoIShzdHlsZTEgPT0gc3R5bGUyKSkKKyAgICAg
ICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlMSA9ICppdDEtPm1fc3R5bGU7CisgICAgICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZTIgPSAqaXQyLT5tX3N0eWxlOworICAgICAgICBpZiAoc3R5
bGUxICE9IHN0eWxlMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgKytpdDI7
CiAgICAgfQpAQCAtNTksNyArNTUsNyBAQCBib29sIEtleWZyYW1lTGlzdDo6b3BlcmF0b3I9PShj
b25zdCBLZXlmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgS2V5ZnJhbWVMaXN0OjppbnNl
cnQoZmxvYXQga2V5LCBSZW5kZXJTdHlsZSogc3R5bGUpCit2b2lkIEtleWZyYW1lTGlzdDo6aW5z
ZXJ0KGZsb2F0IGtleSwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUpCiB7CiAgICAgaWYg
KGtleSA8IDAgfHwga2V5ID4gMSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjcsMTEgKzYzLDExIEBA
IHZvaWQgS2V5ZnJhbWVMaXN0OjppbnNlcnQoZmxvYXQga2V5LCBSZW4KICAgICBpbnQgaW5kZXgg
PSAtMTsKICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2tleWZyYW1lc1tpXS5rZXkgPT0ga2V5KSB7CisgICAg
ICAgIGlmIChtX2tleWZyYW1lc1tpXS5tX2tleSA9PSBrZXkpIHsKICAgICAgICAgICAgIGluZGV4
ID0gKGludCkgaTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmICht
X2tleWZyYW1lc1tpXS5rZXkgPiBrZXkpIHsKKyAgICAgICAgaWYgKG1fa2V5ZnJhbWVzW2ldLm1f
a2V5ID4ga2V5KSB7CiAgICAgICAgICAgICAvLyBpbnNlcnQgYmVmb3JlCiAgICAgICAgICAgICBt
X2tleWZyYW1lcy5pbnNlcnQoaSwgS2V5ZnJhbWVWYWx1ZSgpKTsKICAgICAgICAgICAgIGluZGV4
ID0gKGludCkgaTsKQEAgLTg1LDEyICs4MSw4IEBAIHZvaWQgS2V5ZnJhbWVMaXN0OjppbnNlcnQo
ZmxvYXQga2V5LCBSZW4KICAgICAgICAgbV9rZXlmcmFtZXMuYXBwZW5kKEtleWZyYW1lVmFsdWUo
KSk7CiAgICAgfQogICAgIAotICAgIGlmIChzdHlsZSkKLSAgICAgICAgc3R5bGUtPnJlZigpOwot
ICAgIGlmIChtX2tleWZyYW1lc1tpbmRleF0uc3R5bGUpCi0gICAgICAgIG1fa2V5ZnJhbWVzW2lu
ZGV4XS5zdHlsZS0+ZGVyZWYobV9yZW5kZXJlci0+cmVuZGVyQXJlbmEoKSk7Ci0gICAgbV9rZXlm
cmFtZXNbaW5kZXhdLmtleSA9IGtleTsKLSAgICBtX2tleWZyYW1lc1tpbmRleF0uc3R5bGUgPSBz
dHlsZTsKKyAgICBtX2tleWZyYW1lc1tpbmRleF0ubV9rZXkgPSBrZXk7CisgICAgbV9rZXlmcmFt
ZXNbaW5kZXhdLm1fc3R5bGUgPSBzdHlsZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogcmVuZGVyaW5nL3N0eWxlL0tleWZyYW1lTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRl
cmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuaAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcv
c3R5bGUvS2V5ZnJhbWVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNp
bmNsdWRlICJBdG9taWNTdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMzcsMTMgKzM4LDE5IEBAIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3Mg
S2V5ZnJhbWVWYWx1ZSB7CiBwdWJsaWM6CiAgICAgS2V5ZnJhbWVWYWx1ZSgpCi0gICAgICAgIDog
a2V5KC0xKQotICAgICAgICAsIHN0eWxlKDApCisgICAgICAgIDogbV9rZXkoLTEpCiAgICAgewog
ICAgIH0KIAotICAgIGZsb2F0IGtleTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGU7CisgICAgfktl
eWZyYW1lVmFsdWUoKQorICAgIHsKKyAgICB9CisKKyAgICBmbG9hdCBrZXkoKSBjb25zdCB7IHJl
dHVybiBtX2tleTsgfQorICAgIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3R5bGUuZ2V0KCk7IH0KKworICAgIGZsb2F0IG1fa2V5OworICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gbV9zdHlsZTsKIH07CiAKIGNsYXNzIEtleWZyYW1lTGlzdCB7CkBAIC02Miw3ICs2
OSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFuaW1hdGlvbk5h
bWUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbk5hbWU7IH0KICAgICAKLSAgICB2b2lkIGlu
c2VydChmbG9hdCBrZXksIFJlbmRlclN0eWxlKiBzdHlsZSk7CisgICAgdm9pZCBpbnNlcnQoZmxv
YXQga2V5LCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSk7CiAgICAgCiAgICAgdm9pZCBh
ZGRQcm9wZXJ0eShpbnQgcHJvcCkgeyBtX3Byb3BlcnRpZXMuYWRkKHByb3ApOyB9CiAgICAgYm9v
bCBjb250YWluc1Byb3BlcnR5KGludCBwcm9wKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMu
Y29udGFpbnMocHJvcCk7IH0KSW5kZXg6IHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNpb24g
Mzc1ODYpCisrKyByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw1NSArMzMsMzcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUmVu
ZGVyU3R5bGUqIGRlZmF1bHRTdHlsZTsKLQotdm9pZCogUmVuZGVyU3R5bGU6Om9wZXJhdG9yIG5l
dyhzaXplX3Qgc3osIFJlbmRlckFyZW5hKiByZW5kZXJBcmVuYSkgdGhyb3coKQoraW5saW5lIFJl
bmRlclN0eWxlKiBkZWZhdWx0U3R5bGUoKQogewotICAgIHJldHVybiByZW5kZXJBcmVuYS0+YWxs
b2NhdGUoc3opOworICAgIHN0YXRpYyBSZWZQdHI8UmVuZGVyU3R5bGU+IHNfZGVmYXVsdFN0eWxl
OworICAgIGlmICghc19kZWZhdWx0U3R5bGUpCisgICAgICAgIHNfZGVmYXVsdFN0eWxlID0gUmVu
ZGVyU3R5bGU6OmNyZWF0ZURlZmF1bHRTdHlsZSgpOworICAgIHJldHVybiBzX2RlZmF1bHRTdHls
ZS5nZXQoKTsKIH0KIAotdm9pZCBSZW5kZXJTdHlsZTo6b3BlcmF0b3IgZGVsZXRlKHZvaWQqIHB0
ciwgc2l6ZV90IHN6KQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyU3R5bGU6OmNyZWF0
ZSgpCiB7Ci0gICAgLy8gU3Rhc2ggc2l6ZSB3aGVyZSBkZXN0cm95IGNhbiBmaW5kIGl0LgotICAg
ICooc2l6ZV90ICopcHRyID0gc3o7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJTdHls
ZSgpKTsKIH0KIAotdm9pZCBSZW5kZXJTdHlsZTo6YXJlbmFEZWxldGUoUmVuZGVyQXJlbmEgKmFy
ZW5hKQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyU3R5bGU6OmNyZWF0ZURlZmF1bHRT
dHlsZSgpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIHBzID0gcHNldWRvU3R5bGU7Ci0gICAgUmVuZGVy
U3R5bGUqIHByZXYgPSAwOwotCi0gICAgd2hpbGUgKHBzKSB7Ci0gICAgICAgIHByZXYgPSBwczsK
LSAgICAgICAgcHMgPSBwcy0+cHNldWRvU3R5bGU7Ci0gICAgICAgIC8vIHRvIHByZXZlbnQgYSBk
b3VibGUgZGVsZXRpb24uCi0gICAgICAgIC8vIHRoaXMgd29ya3Mgb25seSBiZWNhdXNlIHRoZSBz
dHlsZXMgYmVsb3cgYXJlbid0IHJlYWxseSBzaGFyZWQKLSAgICAgICAgLy8gRGlyayBzYWlkIHdl
IG5lZWQgYW5vdGhlciBjb25zdHJ1Y3QgYXMgc29vbiBhcyB0aGVzZSBhcmUgc2hhcmVkCi0gICAg
ICAgIHByZXYtPnBzZXVkb1N0eWxlID0gMDsKLSAgICAgICAgcHJldi0+ZGVyZWYoYXJlbmEpOwot
ICAgIH0KLSAgICBkZWxldGUgdGhpczsKLQotICAgIC8vIFJlY292ZXIgdGhlIHNpemUgbGVmdCB0
aGVyZSBmb3IgdXMgYnkgb3BlcmF0b3IgZGVsZXRlIGFuZCBmcmVlIHRoZSBtZW1vcnkuCi0gICAg
YXJlbmEtPmZyZWUoKihzaXplX3QgKil0aGlzLCB0aGlzKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFJlbmRlclN0eWxlKHRydWUpKTsKIH0KIAotaW5saW5lIFJlbmRlclN0eWxlKiBpbml0RGVm
YXVsdFN0eWxlKCkKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclN0eWxlOjpjbG9uZShj
b25zdCBSZW5kZXJTdHlsZSogb3RoZXIpCiB7Ci0gICAgaWYgKCFkZWZhdWx0U3R5bGUpCi0gICAg
ICAgIGRlZmF1bHRTdHlsZSA9IDo6bmV3IFJlbmRlclN0eWxlKHRydWUpOwotICAgIHJldHVybiBk
ZWZhdWx0U3R5bGU7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJTdHlsZSgqb3RoZXIp
KTsKIH0KIAogUmVuZGVyU3R5bGU6OlJlbmRlclN0eWxlKCkKLSAgICA6IGJveChpbml0RGVmYXVs
dFN0eWxlKCktPmJveCkKLSAgICAsIHZpc3VhbChkZWZhdWx0U3R5bGUtPnZpc3VhbCkKLSAgICAs
IGJhY2tncm91bmQoZGVmYXVsdFN0eWxlLT5iYWNrZ3JvdW5kKQotICAgICwgc3Vycm91bmQoZGVm
YXVsdFN0eWxlLT5zdXJyb3VuZCkKLSAgICAsIHJhcmVOb25Jbmhlcml0ZWREYXRhKGRlZmF1bHRT
dHlsZS0+cmFyZU5vbkluaGVyaXRlZERhdGEpCi0gICAgLCByYXJlSW5oZXJpdGVkRGF0YShkZWZh
dWx0U3R5bGUtPnJhcmVJbmhlcml0ZWREYXRhKQotICAgICwgaW5oZXJpdGVkKGRlZmF1bHRTdHls
ZS0+aW5oZXJpdGVkKQotICAgICwgcHNldWRvU3R5bGUoMCkKKyAgICA6IGJveChkZWZhdWx0U3R5
bGUoKS0+Ym94KQorICAgICwgdmlzdWFsKGRlZmF1bHRTdHlsZSgpLT52aXN1YWwpCisgICAgLCBi
YWNrZ3JvdW5kKGRlZmF1bHRTdHlsZSgpLT5iYWNrZ3JvdW5kKQorICAgICwgc3Vycm91bmQoZGVm
YXVsdFN0eWxlKCktPnN1cnJvdW5kKQorICAgICwgcmFyZU5vbkluaGVyaXRlZERhdGEoZGVmYXVs
dFN0eWxlKCktPnJhcmVOb25Jbmhlcml0ZWREYXRhKQorICAgICwgcmFyZUluaGVyaXRlZERhdGEo
ZGVmYXVsdFN0eWxlKCktPnJhcmVJbmhlcml0ZWREYXRhKQorICAgICwgaW5oZXJpdGVkKGRlZmF1
bHRTdHlsZSgpLT5pbmhlcml0ZWQpCiAgICAgLCBtX3BzZXVkb1N0YXRlKFBzZXVkb1Vua25vd24p
CiAgICAgLCBtX2FmZmVjdGVkQnlBdHRyaWJ1dGVTZWxlY3RvcnMoZmFsc2UpCiAgICAgLCBtX3Vu
aXF1ZShmYWxzZSkKQEAgLTk1LDE3ICs3NywxNSBAQCBSZW5kZXJTdHlsZTo6UmVuZGVyU3R5bGUo
KQogICAgICwgbV9maXJzdENoaWxkU3RhdGUoZmFsc2UpCiAgICAgLCBtX2xhc3RDaGlsZFN0YXRl
KGZhbHNlKQogICAgICwgbV9jaGlsZEluZGV4KDApCi0gICAgLCBtX3JlZigwKQogI2lmIEVOQUJM
RShTVkcpCi0gICAgLCBtX3N2Z1N0eWxlKGRlZmF1bHRTdHlsZS0+bV9zdmdTdHlsZSkKKyAgICAs
IG1fc3ZnU3R5bGUoZGVmYXVsdFN0eWxlKCktPm1fc3ZnU3R5bGUpCiAjZW5kaWYKIHsKICAgICBz
ZXRCaXREZWZhdWx0cygpOyAvLyBXb3VsZCBpdCBiZSBmYXN0ZXIgdG8gY29weSB0aGlzIGZyb20g
dGhlIGRlZmF1bHQgc3R5bGU/CiB9CiAKIFJlbmRlclN0eWxlOjpSZW5kZXJTdHlsZShib29sKQot
ICAgIDogcHNldWRvU3R5bGUoMCkKLSAgICAsIG1fcHNldWRvU3RhdGUoUHNldWRvVW5rbm93bikK
KyAgICA6IG1fcHNldWRvU3RhdGUoUHNldWRvVW5rbm93bikKICAgICAsIG1fYWZmZWN0ZWRCeUF0
dHJpYnV0ZVNlbGVjdG9ycyhmYWxzZSkKICAgICAsIG1fdW5pcXVlKGZhbHNlKQogICAgICwgbV9h
ZmZlY3RlZEJ5RW1wdHkoZmFsc2UpCkBAIC0xMTgsNyArOTgsNiBAQCBSZW5kZXJTdHlsZTo6UmVu
ZGVyU3R5bGUoYm9vbCkKICAgICAsIG1fZmlyc3RDaGlsZFN0YXRlKGZhbHNlKQogICAgICwgbV9s
YXN0Q2hpbGRTdGF0ZShmYWxzZSkKICAgICAsIG1fY2hpbGRJbmRleCgwKQotICAgICwgbV9yZWYo
MSkKIHsKICAgICBzZXRCaXREZWZhdWx0cygpOwogCkBAIC0xNDAsNyArMTE5LDggQEAgUmVuZGVy
U3R5bGU6OlJlbmRlclN0eWxlKGJvb2wpCiB9CiAKIFJlbmRlclN0eWxlOjpSZW5kZXJTdHlsZShj
b25zdCBSZW5kZXJTdHlsZSYgbykKLSAgICA6IGluaGVyaXRlZF9mbGFncyhvLmluaGVyaXRlZF9m
bGFncykKKyAgICA6IFJlZkNvdW50ZWQ8UmVuZGVyU3R5bGU+KCkKKyAgICAsIGluaGVyaXRlZF9m
bGFncyhvLmluaGVyaXRlZF9mbGFncykKICAgICAsIG5vbmluaGVyaXRlZF9mbGFncyhvLm5vbmlu
aGVyaXRlZF9mbGFncykKICAgICAsIGJveChvLmJveCkKICAgICAsIHZpc3VhbChvLnZpc3VhbCkK
QEAgLTE0OSw3ICsxMjksNiBAQCBSZW5kZXJTdHlsZTo6UmVuZGVyU3R5bGUoY29uc3QgUmVuZGVy
U3R5CiAgICAgLCByYXJlTm9uSW5oZXJpdGVkRGF0YShvLnJhcmVOb25Jbmhlcml0ZWREYXRhKQog
ICAgICwgcmFyZUluaGVyaXRlZERhdGEoby5yYXJlSW5oZXJpdGVkRGF0YSkKICAgICAsIGluaGVy
aXRlZChvLmluaGVyaXRlZCkKLSAgICAsIHBzZXVkb1N0eWxlKDApCiAgICAgLCBtX3BzZXVkb1N0
YXRlKG8ubV9wc2V1ZG9TdGF0ZSkKICAgICAsIG1fYWZmZWN0ZWRCeUF0dHJpYnV0ZVNlbGVjdG9y
cyhmYWxzZSkKICAgICAsIG1fdW5pcXVlKGZhbHNlKQpAQCAtMTYzLDcgKzE0Miw2IEBAIFJlbmRl
clN0eWxlOjpSZW5kZXJTdHlsZShjb25zdCBSZW5kZXJTdHkKICAgICAsIG1fZmlyc3RDaGlsZFN0
YXRlKGZhbHNlKQogICAgICwgbV9sYXN0Q2hpbGRTdGF0ZShmYWxzZSkKICAgICAsIG1fY2hpbGRJ
bmRleCgwKQotICAgICwgbV9yZWYoMCkKICNpZiBFTkFCTEUoU1ZHKQogICAgICwgbV9zdmdTdHls
ZShvLm1fc3ZnU3R5bGUpCiAjZW5kaWYKQEAgLTIyNywyMyArMjA1LDIyIEBAIHZvaWQgUmVuZGVy
U3R5bGU6OnNldEhhc1BzZXVkb1N0eWxlKFBzZXUKICAgICBub25pbmhlcml0ZWRfZmxhZ3MuX3Bz
ZXVkb0JpdHMgfD0gcHNldWRvQml0KHBzZXVkbyk7CiB9CiAKLVJlbmRlclN0eWxlKiBSZW5kZXJT
dHlsZTo6Z2V0UHNldWRvU3R5bGUoUHNldWRvSWQgcGlkKQorUmVuZGVyU3R5bGUqIFJlbmRlclN0
eWxlOjpnZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwaWQpCiB7Ci0gICAgaWYgKCFwc2V1
ZG9TdHlsZSB8fCBzdHlsZVR5cGUoKSAhPSBOT1BTRVVETykKKyAgICBpZiAoIW1fY2FjaGVkUHNl
dWRvU3R5bGUgfHwgc3R5bGVUeXBlKCkgIT0gTk9QU0VVRE8pCiAgICAgICAgIHJldHVybiAwOwot
ICAgIFJlbmRlclN0eWxlKiBwcyA9IHBzZXVkb1N0eWxlOworICAgIFJlbmRlclN0eWxlKiBwcyA9
IG1fY2FjaGVkUHNldWRvU3R5bGUuZ2V0KCk7CiAgICAgd2hpbGUgKHBzICYmIHBzLT5zdHlsZVR5
cGUoKSAhPSBwaWQpCi0gICAgICAgIHBzID0gcHMtPnBzZXVkb1N0eWxlOworICAgICAgICBwcyA9
IHBzLT5tX2NhY2hlZFBzZXVkb1N0eWxlLmdldCgpOwogICAgIHJldHVybiBwczsKIH0KIAotdm9p
ZCBSZW5kZXJTdHlsZTo6YWRkUHNldWRvU3R5bGUoUmVuZGVyU3R5bGUqIHBzZXVkbykKK3ZvaWQg
UmVuZGVyU3R5bGU6OmFkZENhY2hlZFBzZXVkb1N0eWxlKGNvbnN0IFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+JiBwc2V1ZG8pCiB7CiAgICAgaWYgKCFwc2V1ZG8pCiAgICAgICAgIHJldHVybjsKLSAg
ICBwc2V1ZG8tPnJlZigpOwotICAgIHBzZXVkby0+cHNldWRvU3R5bGUgPSBwc2V1ZG9TdHlsZTsK
LSAgICBwc2V1ZG9TdHlsZSA9IHBzZXVkbzsKKyAgICBwc2V1ZG8tPm1fY2FjaGVkUHNldWRvU3R5
bGUgPSBtX2NhY2hlZFBzZXVkb1N0eWxlOworICAgIG1fY2FjaGVkUHNldWRvU3R5bGUgPSBwc2V1
ZG87CiB9CiAKIGJvb2wgUmVuZGVyU3R5bGU6OmluaGVyaXRlZE5vdEVxdWFsKFJlbmRlclN0eWxl
KiBvdGhlcikgY29uc3QKSW5kZXg6IHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAzNzU4NikK
KysrIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nywx
MSArOTcsMTAgQEAgY2xhc3MgQ1NTU3R5bGVTZWxlY3RvcjsKIGNsYXNzIENTU1ZhbHVlTGlzdDsK
IGNsYXNzIENhY2hlZEltYWdlOwogY2xhc3MgUGFpcjsKLWNsYXNzIFJlbmRlckFyZW5hOwogY2xh
c3MgU3RyaW5nSW1wbDsKIGNsYXNzIFN0eWxlSW1hZ2U7CiAKLWNsYXNzIFJlbmRlclN0eWxlIHsK
K2NsYXNzIFJlbmRlclN0eWxlOiBwdWJsaWMgUmVmQ291bnRlZDxSZW5kZXJTdHlsZT4gewogICAg
IGZyaWVuZCBjbGFzcyBDU1NTdHlsZVNlbGVjdG9yOwogCiBwdWJsaWM6CkBAIC0xMTMsMjcgKzEx
Miw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgU0NST0xMQkFSX1RIVU1CLCBTQ1JP
TExCQVJfQlVUVE9OLCBTQ1JPTExCQVJfVFJBQ0ssIFNDUk9MTEJBUl9UUkFDS19QSUVDRSwgU0NS
T0xMQkFSX0NPUk5FUiwgUkVTSVpFUiB9OwogICAgIHN0YXRpYyBjb25zdCBpbnQgRklSU1RfSU5U
RVJOQUxfUFNFVURPSUQgPSBGSUxFX1VQTE9BRF9CVVRUT047CiAKLSAgICB2b2lkIHJlZigpIHsg
bV9yZWYrKzsgfQotICAgIHZvaWQgZGVyZWYoUmVuZGVyQXJlbmEqIGFyZW5hKQotICAgIHsKLSAg
ICAgICAgaWYgKG1fcmVmKQotICAgICAgICAgICAgbV9yZWYtLTsKLSAgICAgICAgaWYgKCFtX3Jl
ZikKLSAgICAgICAgICAgIGFyZW5hRGVsZXRlKGFyZW5hKTsKLSAgICB9Ci0gICAgYm9vbCBoYXNP
bmVSZWYoKSB7IHJldHVybiBtX3JlZiA9PSAxOyB9Ci0gICAgaW50IHJlZkNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9yZWY7IH0KLQotICAgIC8vIE92ZXJsb2FkZWQgbmV3IG9wZXJhdG9yLiAgRGVy
aXZlZCBjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgb3BlcmF0b3IgbmV3Ci0gICAgLy8gaW4gb3JkZXIg
dG8gYWxsb2NhdGUgb3V0IG9mIHRoZSBSZW5kZXJBcmVuYS4KLSAgICB2b2lkKiBvcGVyYXRvciBu
ZXcoc2l6ZV90IHN6LCBSZW5kZXJBcmVuYSogcmVuZGVyQXJlbmEpIHRocm93KCk7Ci0KLSAgICAv
LyBPdmVycmlkZGVuIHRvIHByZXZlbnQgdGhlIG5vcm1hbCBkZWxldGUgZnJvbSBiZWluZyBjYWxs
ZWQuCi0gICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCogcHRyLCBzaXplX3Qgc3opOwotCi1w
cml2YXRlOgotICAgIHZvaWQgYXJlbmFEZWxldGUoUmVuZGVyQXJlbmEqKTsKLQogcHJvdGVjdGVk
OgogCiAvLyAhU1RBUlQgU1lOQyE6IEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggdGhlIGNvcHkgY29u
c3RydWN0b3IgaW4gUmVuZGVyU3R5bGUuY3BwCkBAIC0yNDEsNyArMjE5LDcgQEAgcHJvdGVjdGVk
OgogICAgIERhdGFSZWY8U3R5bGVJbmhlcml0ZWREYXRhPiBpbmhlcml0ZWQ7CiAKICAgICAvLyBs
aXN0IG9mIGFzc29jaWF0ZWQgcHNldWRvIHN0eWxlcwotICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9T
dHlsZTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fY2FjaGVkUHNldWRvU3R5bGU7CiAKICAg
ICB1bnNpZ25lZCBtX3BzZXVkb1N0YXRlIDogMzsgLy8gUHNldWRvU3RhdGUKICAgICBib29sIG1f
YWZmZWN0ZWRCeUF0dHJpYnV0ZVNlbGVjdG9ycyA6IDE7CkBAIC0yNjIsOCArMjQwLDYgQEAgcHJv
dGVjdGVkOgogICAgIGJvb2wgbV9sYXN0Q2hpbGRTdGF0ZSA6IDE7CiAgICAgdW5zaWduZWQgbV9j
aGlsZEluZGV4IDogMTg7IC8vIFBsZW50eSBvZiBiaXRzIHRvIGNhY2hlIGFuIGluZGV4LgogCi0g
ICAgaW50IG1fcmVmOwotCiAjaWYgRU5BQkxFKFNWRykKICAgICBEYXRhUmVmPFNWR1JlbmRlclN0
eWxlPiBtX3N2Z1N0eWxlOwogI2VuZGlmCkBAIC0zMDgsMTIgKzI4NCwxNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgIG5vbmluaGVyaXRlZF9mbGFncy5fdW5pY29kZUJpZGkgPSBpbml0aWFsVW5pY29k
ZUJpZGkoKTsKICAgICB9CiAKLXB1YmxpYzoKK3Byb3RlY3RlZDoKICAgICBSZW5kZXJTdHlsZSgp
OwogICAgIC8vIHVzZWQgdG8gY3JlYXRlIHRoZSBkZWZhdWx0IHN0eWxlLgogICAgIFJlbmRlclN0
eWxlKGJvb2wpOwogICAgIFJlbmRlclN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJik7CiAKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlKCk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZURlZmF1bHRTdHlsZSgpOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjbG9uZShjb25zdCBSZW5kZXJTdHlsZSopOwor
CiAgICAgflJlbmRlclN0eWxlKCk7CiAKICAgICB2b2lkIGluaGVyaXRGcm9tKGNvbnN0IFJlbmRl
clN0eWxlKiBpbmhlcml0UGFyZW50KTsKQEAgLTMyMSw4ICszMDIsOCBAQCBwdWJsaWM6CiAgICAg
UHNldWRvSWQgc3R5bGVUeXBlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UHNldWRvSWQ+KG5vbmlu
aGVyaXRlZF9mbGFncy5fc3R5bGVUeXBlKTsgfQogICAgIHZvaWQgc2V0U3R5bGVUeXBlKFBzZXVk
b0lkIHN0eWxlVHlwZSkgeyBub25pbmhlcml0ZWRfZmxhZ3MuX3N0eWxlVHlwZSA9IHN0eWxlVHlw
ZTsgfQogCi0gICAgUmVuZGVyU3R5bGUqIGdldFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBpKTsKLSAg
ICB2b2lkIGFkZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlKiBwc2V1ZG8pOworICAgIFJlbmRlclN0
eWxlKiBnZXRDYWNoZWRQc2V1ZG9TdHlsZShQc2V1ZG9JZCk7CisgICAgdm9pZCBhZGRDYWNoZWRQ
c2V1ZG9TdHlsZShjb25zdCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiYpOwogCiAgICAgYm9vbCBh
ZmZlY3RlZEJ5SG92ZXJSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG5vbmluaGVyaXRlZF9mbGFncy5f
YWZmZWN0ZWRCeUhvdmVyOyB9CiAgICAgYm9vbCBhZmZlY3RlZEJ5QWN0aXZlUnVsZXMoKSBjb25z
dCB7IHJldHVybiBub25pbmhlcml0ZWRfZmxhZ3MuX2FmZmVjdGVkQnlBY3RpdmU7IH0KQEAgLTMz
Myw2ICszMTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBZmZlY3RlZEJ5RHJhZ1J1bGVzKGJv
b2wgYikgeyBub25pbmhlcml0ZWRfZmxhZ3MuX2FmZmVjdGVkQnlEcmFnID0gYjsgfQogCiAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFJlbmRlclN0eWxlJiBvdGhlcikgY29uc3Q7CisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFJlbmRlclN0eWxlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7IH0KICAgICBib29sIGlzRmxvYXRpbmcoKSBjb25zdCB7IHJldHVybiAh
KG5vbmluaGVyaXRlZF9mbGFncy5fZmxvYXRpbmcgPT0gRk5PTkUpOyB9CiAgICAgYm9vbCBoYXNN
YXJnaW4oKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+bWFyZ2luLm5vblplcm8oKTsgfQogICAg
IGJvb2wgaGFzQm9yZGVyKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5oYXNCb3Jk
ZXIoKTsgfQpJbmRleDogc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
c3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgc3ZnL1NWR0Ns
aXBQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDE3ICs5OCwxNiBAQCBTVkdS
ZXNvdXJjZSogU1ZHQ2xpcFBhdGhFbGVtZW50OjpjYW52YXNSCiAKICAgICBib29sIGJib3ggPSBj
bGlwUGF0aFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5E
SU5HQk9YOwogCi0gICAgUmVuZGVyU3R5bGUqIGNsaXBQYXRoU3R5bGUgPSBzdHlsZUZvclJlbmRl
cmVyKHBhcmVudCgpLT5yZW5kZXJlcigpKTsgLy8gRklYTUU6IE1hbnVhbCBzdHlsZSByZXNvbHV0
aW9uIGlzIGEgaGFjaworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY2xpcFBhdGhTdHlsZSA9IHN0
eWxlRm9yUmVuZGVyZXIocGFyZW50KCktPnJlbmRlcmVyKCkpOyAvLyBGSVhNRTogTWFudWFsIHN0
eWxlIHJlc29sdXRpb24gaXMgYSBoYWNrCiAgICAgZm9yIChOb2RlKiBuID0gZmlyc3RDaGlsZCgp
OyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAobi0+aXNTVkdFbGVtZW50
KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG4pLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUo
KSkgewogICAgICAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIHN0eWxlZCA9
IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obik7Ci0gICAgICAg
ICAgICBSZW5kZXJTdHlsZSogcGF0aFN0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rvcigp
LT5zdHlsZUZvckVsZW1lbnQoc3R5bGVkLCBjbGlwUGF0aFN0eWxlKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gcGF0aFN0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rvcigp
LT5zdHlsZUZvckVsZW1lbnQoc3R5bGVkLCBjbGlwUGF0aFN0eWxlLmdldCgpKTsKICAgICAgICAg
ICAgIGlmIChwYXRoU3R5bGUtPmRpc3BsYXkoKSAhPSBOT05FKSB7CiAgICAgICAgICAgICAgICAg
UGF0aCBwYXRoRGF0YSA9IHN0eWxlZC0+dG9DbGlwUGF0aCgpOwogICAgICAgICAgICAgICAgIGlm
ICghcGF0aERhdGEuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICBtX2NsaXBwZXItPmFk
ZENsaXBEYXRhKHBhdGhEYXRhLCBwYXRoU3R5bGUtPnN2Z1N0eWxlKCktPmNsaXBSdWxlKCksIGJi
b3gpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcGF0aFN0eWxlLT5kZXJlZihkb2N1bWVu
dCgpLT5yZW5kZXJBcmVuYSgpKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAobV9jbGlwcGVy
LT5jbGlwRGF0YSgpLmlzRW1wdHkoKSkgewpAQCAtMTE2LDcgKzExNSw2IEBAIFNWR1Jlc291cmNl
KiBTVkdDbGlwUGF0aEVsZW1lbnQ6OmNhbnZhc1IKICAgICAgICAgcGF0aERhdGEuYWRkUmVjdChG
bG9hdFJlY3QoKSk7CiAgICAgICAgIG1fY2xpcHBlci0+YWRkQ2xpcERhdGEocGF0aERhdGEsIFJV
TEVfRVZFTk9ERCwgYmJveCk7CiAgICAgfQotICAgIGNsaXBQYXRoU3R5bGUtPmRlcmVmKGRvY3Vt
ZW50KCktPnJlbmRlckFyZW5hKCkpOwogICAgIHJldHVybiBtX2NsaXBwZXIuZ2V0KCk7CiB9CiAK
SW5kZXg6IHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdH
cmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHN2Zy9TVkdHcmFkaWVudEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgU1ZHUmVzb3VyY2Uq
IFNWR0dyYWRpZW50RWxlbWVudDo6Y2FudmFzUgogVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4gU1ZH
R3JhZGllbnRFbGVtZW50OjpidWlsZFN0b3BzKCkgY29uc3QKIHsKICAgICBWZWN0b3I8U1ZHR3Jh
ZGllbnRTdG9wPiBzdG9wczsKLSAgICBSZW5kZXJTdHlsZSogZ3JhZGllbnRTdHlsZSA9IDA7Cisg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBncmFkaWVudFN0eWxlOwogCiAgICAgZm9yIChOb2RlKiBu
ID0gZmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBTVkdF
bGVtZW50KiBlbGVtZW50ID0gbi0+aXNTVkdFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTVkdFbGVt
ZW50Kj4obikgOiAwOwpAQCAtMTUxLDIxICsxNTEsMTYgQEAgVmVjdG9yPFNWR0dyYWRpZW50U3Rv
cD4gU1ZHR3JhZGllbnRFbGVtZQogICAgICAgICAgICAgICAgIGlmICghZ3JhZGllbnRTdHlsZSkK
ICAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnRTdHlsZSA9IGNvbnN0X2Nhc3Q8U1ZHR3JhZGll
bnRFbGVtZW50Kj4odGhpcyktPnN0eWxlRm9yUmVuZGVyZXIocGFyZW50KCktPnJlbmRlcmVyKCkp
OwogCi0gICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0b3BTdHlsZSA9IHN0b3AtPnJlc29s
dmVTdHlsZShncmFkaWVudFN0eWxlKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IHN0b3BTdHlsZSA9IHN0b3AtPnJlc29sdmVTdHlsZShncmFkaWVudFN0eWxlLmdldCgpKTsK
IAogICAgICAgICAgICAgICAgIGNvbG9yID0gc3RvcFN0eWxlLT5zdmdTdHlsZSgpLT5zdG9wQ29s
b3IoKTsKICAgICAgICAgICAgICAgICBvcGFjaXR5ID0gc3RvcFN0eWxlLT5zdmdTdHlsZSgpLT5z
dG9wT3BhY2l0eSgpOwotCi0gICAgICAgICAgICAgICAgc3RvcFN0eWxlLT5kZXJlZihkb2N1bWVu
dCgpLT5yZW5kZXJBcmVuYSgpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RvcHMu
YXBwZW5kKG1ha2VHcmFkaWVudFN0b3Aoc3RvcE9mZnNldCwgbWFrZVJHQkEoY29sb3IucmVkKCks
IGNvbG9yLmdyZWVuKCksIGNvbG9yLmJsdWUoKSwgaW50KG9wYWNpdHkgKiAyNTUuKSkpKTsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIGlmIChncmFkaWVudFN0eWxlKQotICAgICAgICBncmFkaWVu
dFN0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKLQogICAgIHJldHVybiBz
dG9wczsKIH0KIApJbmRleDogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHN2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyBzdmcvU1ZHU3R5
bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSwxNCArMjMxLDEwIEBAIHZvaWQg
U1ZHU3R5bGVkRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGIKICAgICBTVkdFbGVtZW50SW5zdGFu
Y2U6OmludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVsZW1lbnQodGhpcyk7CiB9CiAKLVJlbmRlclN0
eWxlKiBTVkdTdHlsZWRFbGVtZW50OjpyZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlKQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU1ZHU3R5bGVkRWxlbWVudDo6cmVzb2x2ZVN0
eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKLSAgICBpZiAocmVuZGVyZXIoKSkgewot
ICAgICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOwot
ICAgICAgICByZW5kZXJTdHlsZS0+cmVmKCk7Ci0gICAgICAgIHJldHVybiByZW5kZXJTdHlsZTsK
LSAgICB9Ci0KKyAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIHJlbmRlcmVyKCkt
PnN0eWxlKCk7CiAgICAgcmV0dXJuIGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVG
b3JFbGVtZW50KHRoaXMsIHBhcmVudFN0eWxlKTsKIH0KIApJbmRleDogc3ZnL1NWR1N0eWxlZEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBzdmcvU1ZHU3R5bGVkRWxlbWVudC5oCShyZXZpc2lvbiAz
NzU4NikKKysrIHN2Zy9TVkdTdHlsZWRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcg
KzU4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRy
ZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5n
ZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOwog
CiAgICAgICAgIC8vIENlbnRyYWxpemVkIHBsYWNlIHRvIGZvcmNlIGEgbWFudWFsIHN0eWxlIHJl
c29sdXRpb24uIEhhY2t5IGJ1dCBuZWVkZWQgZm9yIG5vdy4KLSAgICAgICAgUmVuZGVyU3R5bGUq
IHJlc29sdmVTdHlsZShSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAgICAgICBQYXNzUmVm
UHRyPFJlbmRlclN0eWxlPiByZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsK
IAogICAgICAgICB2b2lkIGludmFsaWRhdGVSZXNvdXJjZXNJbkFuY2VzdG9yQ2hhaW4oKSBjb25z
dDsgICAgICAgIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CkluZGV4OiBzdmcvU1ZH
VXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAzNzU4NikKKysrIHN2Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTg3LDggKzE4Nyw4IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGEK
ICAgICAvLyBzaGFkb3cgdHJlZSByb290IGVsZW1lbnQsIGJ1dCBjYWxsIGF0dGFjaFNoYWRvd1Ry
ZWUoKSBoZXJlLiBDYWxsaW5nIGF0dGFjaCgpIHdpbGwgY3Jhc2gKICAgICAvLyBhcyB0aGUgc2hh
ZG93IHRyZWUgcm9vdCBlbGVtZW50IGhhcyBubyAoZGlyZWN0KSBwYXJlbnQgbm9kZS4gWWVzLCBz
aGFkb3cgdHJlZXMgYXJlIHRyaWNreS4KICAgICBpZiAoY2hhbmdlID49IEluaGVyaXQgfHwgbV9z
aGFkb3dUcmVlUm9vdEVsZW1lbnQtPmNoYW5nZWQoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSog
bmV3U3R5bGUgPSBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudCht
X3NoYWRvd1RyZWVSb290RWxlbWVudC5nZXQoKSk7Ci0gICAgICAgIFN0eWxlQ2hhbmdlIGNoID0g
Tm9kZTo6ZGlmZihtX3NoYWRvd1RyZWVSb290RWxlbWVudC0+cmVuZGVyU3R5bGUoKSwgbmV3U3R5
bGUpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gZG9jdW1lbnQoKS0+
c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQobV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQu
Z2V0KCkpOworICAgICAgICBTdHlsZUNoYW5nZSBjaCA9IE5vZGU6OmRpZmYobV9zaGFkb3dUcmVl
Um9vdEVsZW1lbnQtPnJlbmRlclN0eWxlKCksIG5ld1N0eWxlLmdldCgpKTsKICAgICAgICAgaWYg
KGNoID09IERldGFjaCkgewogICAgICAgICAgICAgQVNTRVJUKG1fc2hhZG93VHJlZVJvb3RFbGVt
ZW50LT5hdHRhY2hlZCgpKTsKICAgICAgICAgICAgIG1fc2hhZG93VHJlZVJvb3RFbGVtZW50LT5k
ZXRhY2goKTsKQEAgLTE5NywxMSArMTk3LDggQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpyZWNhbGNT
dHlsZShTdHlsZUNoYQogICAgICAgICAgICAgLy8gYXR0YWNoIHJlY2FsdWxhdGVzIHRoZSBzdHls
ZSBmb3IgYWxsIGNoaWxkcmVuLiBObyBuZWVkIHRvIGRvIGl0IHR3aWNlLgogICAgICAgICAgICAg
bV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQtPnNldENoYW5nZWQoTm9TdHlsZUNoYW5nZSk7CiAgICAg
ICAgICAgICBtX3NoYWRvd1RyZWVSb290RWxlbWVudC0+c2V0SGFzQ2hhbmdlZENoaWxkKGZhbHNl
KTsKLSAgICAgICAgICAgIG5ld1N0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotCi0gICAgICAgIG5ld1N0eWxlLT5k
ZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKICAgICB9CiAKICAgICAvLyBPbmx5IGNo
YW5nZT09RGV0YWNoIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LCBmb3IgYW55dGhpbmcgZWxzZSBy
ZWNhbGNTdHlsZSgpIHdvcmtzLgpAQCAtNzQ0LDEwICs3NDEsMTAgQEAgdm9pZCBTVkdVc2VFbGVt
ZW50OjphdHRhY2hTaGFkb3dUcmVlKCkKIAogICAgIC8vIEluc3BpcmVkIGJ5IFJlbmRlclRleHRD
b250cm9sOjpjcmVhdGVTdWJ0cmVlSWZOZWVkZWQoKS4gCiAgICAgaWYgKHJlbmRlcmVyKCktPmNh
bkhhdmVDaGlsZHJlbigpICYmIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIobV9zaGFkb3dUcmVl
Um9vdEVsZW1lbnQuZ2V0KCkpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fc2hh
ZG93VHJlZVJvb3RFbGVtZW50LT5zdHlsZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpOworICAgICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gbV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQtPnN0
eWxlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7CiAKLSAgICAgICAgaWYgKG1fc2hhZG93VHJlZVJv
b3RFbGVtZW50LT5yZW5kZXJlcklzTmVlZGVkKHN0eWxlKSkgewotICAgICAgICAgICAgbV9zaGFk
b3dUcmVlUm9vdEVsZW1lbnQtPnNldFJlbmRlcmVyKG1fc2hhZG93VHJlZVJvb3RFbGVtZW50LT5j
cmVhdGVSZW5kZXJlcihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpLCBzdHlsZSkpOworICAgICAg
ICBpZiAobV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQtPnJlbmRlcmVySXNOZWVkZWQoc3R5bGUuZ2V0
KCkpKSB7CisgICAgICAgICAgICBtX3NoYWRvd1RyZWVSb290RWxlbWVudC0+c2V0UmVuZGVyZXIo
bV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQtPmNyZWF0ZVJlbmRlcmVyKGRvY3VtZW50KCktPnJlbmRl
ckFyZW5hKCksIHN0eWxlLmdldCgpKSk7CiAgICAgICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBz
aGFkb3dSZW5kZXJlciA9IG1fc2hhZG93VHJlZVJvb3RFbGVtZW50LT5yZW5kZXJlcigpKSB7CiAg
ICAgICAgICAgICAgICAgc2hhZG93UmVuZGVyZXItPnNldFN0eWxlKHN0eWxlKTsKICAgICAgICAg
ICAgICAgICByZW5kZXJlcigpLT5hZGRDaGlsZChzaGFkb3dSZW5kZXJlciwgbV9zaGFkb3dUcmVl
Um9vdEVsZW1lbnQtPm5leHRSZW5kZXJlcigpKTsKQEAgLTc1NSw4ICs3NTIsNiBAQCB2b2lkIFNW
R1VzZUVsZW1lbnQ6OmF0dGFjaFNoYWRvd1RyZWUoKQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKLSAgICAgICAgc3R5bGUtPmRlcmVmKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpOwotCiAg
ICAgICAgIC8vIFRoaXMgd2lsbCB0YWtlIGNhcmUgb2YgYXR0YWNoaW5nIGFsbCBzaGFkb3cgdHJl
ZSBjaGlsZCBub2Rlcy4KICAgICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IG1fc2hhZG93VHJlZVJv
b3RFbGVtZW50LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKQogICAgICAgICAgICAgY2hpbGQtPmF0dGFjaCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24422</attachid>
            <date>2008-10-16 14:21:42 -0700</date>
            <delta_ts>2008-10-16 15:44:52 -0700</delta_ts>
            <desc>Patch #3</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>141867</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM3NjM0
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAwIEBACisyMDA4LTEw
LTE2ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9hdHRhY2htZW50LmNnaT9idWdpZD0yMTY0NworCisgICAgICAgIE1ha2Ug
UmVuZGVyU3R5bGUgaW5oZXJpdCBmcm9tIFJlZkNvdW50ZWQgc28gdGhhdCBpdCB3b3JrcyB3aXRo
IFJlZlB0ci4gIFJlbmRlclN0eWxlIHdhcyBiZWluZyBtYWxsb2NlZAorICAgICAgICBvdXQgb2Yg
dGhlIFJlbmRlckFyZW5hLiAgWWVhcnMgYW5kIHllYXJzIGFnbyAoYmVmb3JlIFRDTWFsbG9jKSwg
dGhlIHBsYW4gd2FzIHRvIG1ha2UgUmVuZGVyU3R5bGVzIGFuZAorICAgICAgICBhbGwgdGhlaXIg
YXNzb2NpYXRlZCBzdWItc3RydWN0cyB1c2UgdGhlIGFyZW5hLiAgSG93ZXZlciBvbmx5IHRoZSBS
ZW5kZXJTdHlsZSBpdHNlbGYgd2FzIGV2ZXIgY2hhbmdlZAorICAgICAgICB0byB1c2UgdGhlIGFy
ZW5hLgorCisgICAgICAgIEF0IGEgbGF0ZXIgcG9pbnQgc3R5bGUgc2hhcmluZyB3YXMgaW1wbGVt
ZW50ZWQsIHdoaWNoIG1hZGUgdXNpbmcgdGhlIGFyZW5hIGZvciBzdHlsZXMgcHJldHR5IHBvaW50
bGVzcywKKyAgICAgICAgYXMgdGhlIGJ1bGsgb2YgdGhlIHN0eWxlcyBvbiBhIGdpdmVuIHBhZ2Ug
YXJlIGFjdHVhbGx5IHNoYXJlZC4gIE5vdCBldmVyIG1ha2luZyB0aGUgc3ViLXN0cnVjdHMgdXNl
IHRoZQorICAgICAgICBhcmVuYSBhbHNvIGxpbWl0ZWQgdGhlIHVzZWZ1bG5lc3MuCisKKyAgICAg
ICAgTm93IHRoYXQgd2UgaGF2ZSBSZWZQdHIvUGFzc1JlZlB0ciB0byBlbGltaW5hdGUgbWFudWFs
IHJlZi9kZXJlZiBhbmQgbm93IHRoYXQgd2UgdXNlIFRDTWFsbG9jIGZvciBmYXN0CisgICAgICAg
IG1hbGxvY3MsIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBrZWVwIFJlbmRlclN0eWxlcyBpbiB0aGUg
YXJlbmEuICBUaGUgYmVuZWZpdHMgb2YgYmVpbmcgYWJsZSB0byBlbGltaW5hdGUKKyAgICAgICAg
bWFudWFsIHJlZi9kZXJlZiBmYXIgb3V0d2VpZ2gga2VlcGluZyB0aGVtIGluIHRoZSBhcmVuYS4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNzcy9D
U1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6
OkNTU1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
fkNTU1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Omtl
eWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIFRoZXNlIG1ldGhvZHMgbm93
IHJldHVybiBhIFBhc3NSZWZQdHIuICBUaGV5IHdpbGwgbnVsbCBvdXQgdGhlIG1fc3R5bGUgdmFy
aWFibGUgYXMgdGhleSBoYW5kIGl0IGJhY2sKKyAgICAgICAgc28gdGhhdCBpdCBpc24ndCBsZWZ0
IHBvaW50aW5nIHRvIHRoZSBwcmV2aW91cyBzdHlsZSByZXNvbHZlIFJlbmRlclN0eWxlICh3aGlj
aCBpcyB3aGF0IHRoZSBvbGQgY29kZSBkaWQpLgorCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjp1cGRhdGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6OmNoZWNrU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXBG
aWxsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsWFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxZUG9z
aXRpb24pOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZSk6CisgICAgICAgICog
ZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c3R5bGVGb3JSZW5k
ZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZWNhbGNTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50Ojpjb21wdXRlZFN0eWxlKToKKyAgICAgICAgKiBkb20vRWxlbWVu
dC5oOgorICAgICAgICAqIGRvbS9FbGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnRSYXJlRGF0YTo6RWxlbWVudFJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnRSYXJlRGF0YTo6cmVzZXRDb21wdXRlZFN0eWxlKToKKyAgICAgICAgKiBkb20vTm9kZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkaWZmKToKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c3R5
bGVGb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRSZW5kZXJTdHlsZSk6
CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKiBodG1sL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldEZvbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50OjphdHRhY2gpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudDo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxPcHRHcm91cEVsZW1lbnQ6OnNldFJlbmRlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxPcHRHcm91cEVsZW1lbnQ6Om5vblJlbmRlcmVyUmVuZGVyU3R5bGUpOgorICAgICAgICAqIGh0
bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmF0dGFjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6ZGV0YWNoKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpzZXRSZW5kZXJTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6bm9uUmVuZGVyZXJSZW5kZXJTdHlsZSk6CisgICAgICAg
ICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0Fu
aW1hdGlvbkJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OmFuaW1hdGUp
OgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyk6Cisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAq
IHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVUcmFuc2l0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVLZXlmcmFtZUFuaW1h
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6YW5p
bWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUpOgor
ICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oOgorICAgICAgICAq
IHBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltcGxpY2l0QW5pbWF0aW9uOjpJbXBsaWNpdEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJbXBsaWNpdEFuaW1hdGlvbjo6fkltcGxpY2l0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxp
Y2l0QW5pbWF0aW9uOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNpdEFuaW1hdGlv
bjo6aXNUYXJnZXRQcm9wZXJ0eUVxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5p
bWF0aW9uOjpibGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKToKKyAgICAgICAgKiBwYWdlL2FuaW1h
dGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmlt
YXRpb246OmNyZWF0ZSk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OktleWZyYW1lQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjp+S2V5ZnJhbWVB
bmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUp
OgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OnZhbGlkYXRlVHJhbnNmb3Jt
RnVuY3Rpb25MaXN0KToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlv
bi5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6dW5hbmltYXRlZFN0eWxlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVUZXh0Qm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50
OjpNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xJbnB1dEVsZW1lbnQ6Ok1lZGlhQ29udHJvbElucHV0RWxlbWVudCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBk
YXRlRmlyc3RMZXR0ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29udGFpbmVyOjphZGRDaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJDb250YWluZXI6OnVwZGF0ZUJlZm9yZUFmdGVyQ29udGVudEZvckNv
bnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp1cGRhdGVGcm9t
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y3Jl
YXRlQnV0dG9uU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZsb3c6OmNyZWF0ZUFub255bW91c0Zsb3cpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJGbG93Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmFkZENoaWxkVG9GbG93KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjp1cGRhdGVSZXNpemVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnVwZGF0ZVJlZmxlY3Rpb25TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxp
c3RJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpzdHlsZURpZENo
YW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck1lZGlhOjpjcmVhdGVQYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNZWRpYTo6Y3JlYXRlVGltZURpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVk
aWE6OmNoYW5nZU9wYWNpdHkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25CYWNrZ3JvdW5kQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjcmVhdGVBbm9ueW1vdXNC
bG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldEFuaW1hdGFibGVTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldFN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0U3R5bGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJPYmplY3Q6OmFyZW5hRGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6Zmlyc3RMaW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
OjpnZXRQc2V1ZG9TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzdHlsZSk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclNWR0Jsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0Jsb2Nr
OjpzZXRTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTY3JvbGxiYXI6OmdldFNjcm9sbGJhclBzZXVkb1N0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNjcm9sbGJhcjo6dXBkYXRlU2Nyb2xsYmFyUGFydCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclNjcm9sbGJhci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjpzdHlsZURpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXI6OmNyZWF0ZVRodW1iU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
YWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6YWRkQ2hpbGQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjphZGRD
aGlsZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlSW5uZXJCbG9ja1N0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpjcmVhdGVJbm5lclRleHRTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlUmVzdWx0c0J1dHRv
blN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpjcmVhdGVDYW5j
ZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y3Jl
YXRlU3VidHJlZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9s
Ojp1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5oOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxl
bWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OmF0
dGFjaElubmVyRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJF
bGVtZW50cy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVMaXN0OjpjbGVhcik6CisgICAgICAgIChXZWJDb3Jl
OjpLZXlmcmFtZUxpc3Q6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVM
aXN0OjppbnNlcnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lVmFsdWU6OktleWZyYW1lVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZTo6fktleWZyYW1lVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5ZnJhbWVWYWx1ZTo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lVmFs
dWU6OnN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clN0eWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmNyZWF0ZURl
ZmF1bHRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y2xvbmUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OlJlbmRlclN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN0eWxlOjpnZXRDYWNoZWRQc2V1ZG9TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTdHlsZTo6YWRkQ2FjaGVkUHNldWRvU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdl
YkNvcmU6OkluaGVyaXRlZEZsYWdzOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBzdmcvU1ZHQ2xp
cFBhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NsaXBQYXRoRWxlbWVudDo6
Y2FudmFzUmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpidWlsZFN0b3BzKToKKyAgICAg
ICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHls
ZWRFbGVtZW50OjpyZXNvbHZlU3R5bGUpOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVXNlRWxlbWVudDo6cmVjYWxjU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxl
bWVudDo6YXR0YWNoU2hhZG93VHJlZSk6CisKIDIwMDgtMTAtMTUgIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJ
bmRleDogY3NzL0NTU0dyYWRpZW50VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTR3JhZGll
bnRWYWx1ZS5oCShyZXZpc2lvbiAzNzU4NikKKysrIGNzcy9DU1NHcmFkaWVudFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYyLDEzICs2MiwxMyBAQCBwdWJsaWM6CiAgICAgQ1NTR3JhZGllbnRU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICB2b2lkIHNldFR5cGUoQ1NT
R3JhZGllbnRUeXBlIHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQogICAgIAotICAgIHZvaWQgc2V0
Rmlyc3RYKGNvbnN0IFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWwpIHsgbV9maXJz
dFggPSB2YWw7IH0KLSAgICB2b2lkIHNldEZpcnN0WShjb25zdCBQYXNzUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiYgdmFsKSB7IG1fZmlyc3RZID0gdmFsOyB9Ci0gICAgdm9pZCBzZXRTZWNvbmRY
KGNvbnN0IFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWwpIHsgbV9zZWNvbmRYID0g
dmFsOyB9Ci0gICAgdm9pZCBzZXRTZWNvbmRZKGNvbnN0IFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+JiB2YWwpIHsgbV9zZWNvbmRZID0gdmFsOyB9CisgICAgdm9pZCBzZXRGaXJzdFgoUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsKSB7IG1fZmlyc3RYID0gdmFsOyB9CisgICAg
dm9pZCBzZXRGaXJzdFkoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsKSB7IG1fZmly
c3RZID0gdmFsOyB9CisgICAgdm9pZCBzZXRTZWNvbmRYKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IHZhbCkgeyBtX3NlY29uZFggPSB2YWw7IH0KKyAgICB2b2lkIHNldFNlY29uZFkoUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsKSB7IG1fc2Vjb25kWSA9IHZhbDsgfQogICAg
IAotICAgIHZvaWQgc2V0Rmlyc3RSYWRpdXMoY29uc3QgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4mIHZhbCkgeyBtX2ZpcnN0UmFkaXVzID0gdmFsOyB9Ci0gICAgdm9pZCBzZXRTZWNvbmRS
YWRpdXMoY29uc3QgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZhbCkgeyBtX3NlY29u
ZFJhZGl1cyA9IHZhbDsgfQorICAgIHZvaWQgc2V0Rmlyc3RSYWRpdXMoUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gdmFsKSB7IG1fZmlyc3RSYWRpdXMgPSB2YWw7IH0KKyAgICB2b2lkIHNl
dFNlY29uZFJhZGl1cyhQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWwpIHsgbV9zZWNv
bmRSYWRpdXMgPSB2YWw7IH0KIAogICAgIHZvaWQgYWRkU3RvcChjb25zdCBDU1NHcmFkaWVudENv
bG9yU3RvcCYgc3RvcCkgeyBtX3N0b3BzLmFwcGVuZChzdG9wKTsgfQogCkluZGV4OiBjc3MvQ1NT
U3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CShyZXZpc2lvbiAzNzU4NikKKysrIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDE5LDcgKzQxOSw3IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0
b3IoRG9jdW0KIAogICAgIGlmIChtX3Jvb3REZWZhdWx0U3R5bGUgJiYgdmlldykgewogICAgICAg
ICBkZWxldGUgbV9tZWRpdW07Ci0gICAgICAgIG1fbWVkaXVtID0gbmV3IE1lZGlhUXVlcnlFdmFs
dWF0b3Iodmlldy0+bWVkaWFUeXBlKCksIHZpZXctPmZyYW1lKCksIG1fcm9vdERlZmF1bHRTdHls
ZSk7CisgICAgICAgIG1fbWVkaXVtID0gbmV3IE1lZGlhUXVlcnlFdmFsdWF0b3Iodmlldy0+bWVk
aWFUeXBlKCksIHZpZXctPmZyYW1lKCksIG1fcm9vdERlZmF1bHRTdHlsZS5nZXQoKSk7CiAgICAg
fQogCiAgICAgLy8gRklYTUU6IFRoaXMgc3Vja3MhIFRoZSB1c2VyIHNoZWV0IGlzIHJlcGFyc2Vk
IGV2ZXJ5IHRpbWUhCkBAIC00NjYsNyArNDY2LDYgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6fkNTU1N0
eWxlU2VsZWN0b3IoKQogewogICAgIG1fZm9udFNlbGVjdG9yLT5jbGVhckRvY3VtZW50KCk7CiAg
ICAgZGVsZXRlIG1fbWVkaXVtOwotICAgIDo6ZGVsZXRlIG1fcm9vdERlZmF1bHRTdHlsZTsKICAg
ICBkZWxldGUgbV9hdXRob3JTdHlsZTsKICAgICBkZWxldGUgbV91c2VyU3R5bGU7CiAgICAgZGVs
ZXRlQWxsVmFsdWVzKG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cyk7CkBAIC0x
MDA2LDcgKzEwMDUsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoVUFSdWxlcyhpbnQm
CiAvLyBJZiByZXNvbHZlRm9yUm9vdERlZmF1bHQgaXMgdHJ1ZSwgc3R5bGUgYmFzZWQgb24gdXNl
ciBhZ2VudCBzdHlsZSBzaGVldCBvbmx5LiBUaGlzIGlzIHVzZWQgaW4gbWVkaWEgcXVlcmllcywg
d2hlcmUKIC8vIHJlbGF0aXZlIHVuaXRzIGFyZSBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gZG9j
dW1lbnQgcm9vdCBlbGVtZW50IHN0eWxlLCBzdHlsZWQgb25seSB3aXRoIFVBIHN0eWxlc2hlZXQK
IAotUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50
KiBlLCBSZW5kZXJTdHlsZSogZGVmYXVsdFBhcmVudCwgYm9vbCBhbGxvd1NoYXJpbmcsIGJvb2wg
cmVzb2x2ZUZvclJvb3REZWZhdWx0KQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVT
ZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBkZWZhdWx0
UGFyZW50LCBib29sIGFsbG93U2hhcmluZywgYm9vbCByZXNvbHZlRm9yUm9vdERlZmF1bHQpCiB7
CiAgICAgLy8gT25jZSBhbiBlbGVtZW50IGhhcyBhIHJlbmRlcmVyLCB3ZSBkb24ndCB0cnkgdG8g
ZGVzdHJveSBpdCwgc2luY2Ugb3RoZXJ3aXNlIHRoZSByZW5kZXJlcgogICAgIC8vIHdpbGwgdmFu
aXNoIGlmIGEgc3R5bGUgcmVjYWxjIGhhcHBlbnMgZHVyaW5nIGxvYWRpbmcuCkBAIC0xMDI0LDMw
ICsxMDIzLDE4IEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckUKIAog
ICAgIGluaXRFbGVtZW50QW5kUHNldWRvU3RhdGUoZSk7CiAgICAgaWYgKGFsbG93U2hhcmluZykg
ewotICAgICAgICBtX3N0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoKTsKLSNpZmRlZiBTVFlMRV9T
SEFSSU5HX1NUQVRTCi0gICAgICAgIGZyYWN0aW9uICs9IG1fc3R5bGUgIT0gMDsKLSAgICAgICAg
dG90YWwrKzsKLSAgICAgICAgcHJpbnRmKCJTaGFyaW5nICVkIG91dCBvZiAlZFxuIiwgZnJhY3Rp
b24sIHRvdGFsKTsKLSNlbmRpZgotICAgICAgICBpZiAobV9zdHlsZSkgewotICAgICAgICAgICAg
bV9zdHlsZS0+cmVmKCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdHlsZTsKLSAgICAgICAgfQor
ICAgICAgICBSZW5kZXJTdHlsZSogc2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZSgpOwor
ICAgICAgICBpZiAoc2hhcmVkU3R5bGUpCisgICAgICAgICAgICByZXR1cm4gc2hhcmVkU3R5bGU7
CiAgICAgfQogICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwgZGVmYXVsdFBhcmVudCk7CiAKLSAg
ICBpZiAocmVzb2x2ZUZvclJvb3REZWZhdWx0KSB7Ci0gICAgICAgIG1fc3R5bGUgPSA6Om5ldyBS
ZW5kZXJTdHlsZSgpOwotICAgICAgICAvLyBkb24ndCByZWYsIGJlY2F1c2Ugd2Ugd2FudCB0byBk
ZWxldGUgdGhpcywgYnV0IHdlIGNhbm5vdCB1bnJlZiBpdAotICAgIH0gZWxzZSB7Ci0gICAgICAg
IG1fc3R5bGUgPSBuZXcgKGUtPmRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxl
KCk7Ci0gICAgICAgIG1fc3R5bGUtPnJlZigpOwotICAgIH0KKyAgICBtX3N0eWxlID0gUmVuZGVy
U3R5bGU6OmNyZWF0ZSgpOworCiAgICAgaWYgKG1fcGFyZW50U3R5bGUpCiAgICAgICAgIG1fc3R5
bGUtPmluaGVyaXRGcm9tKG1fcGFyZW50U3R5bGUpOwogICAgIGVsc2UKLSAgICAgICAgbV9wYXJl
bnRTdHlsZSA9IG1fc3R5bGU7CisgICAgICAgIG1fcGFyZW50U3R5bGUgPSBzdHlsZSgpOwogCiAg
ICAgaWYgKHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0ICYmICFlbGVtZW50Q2FuVXNlU2ltcGxlRGVm
YXVsdFN0eWxlKGUpKQogICAgICAgICBsb2FkRnVsbERlZmF1bHRTdHlsZSgpOwpAQCAtMTE2Nyw3
ICsxMTU0LDcgQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRQogICAg
ICAgICB1cGRhdGVGb250KCk7CiAgICAgCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVj
dCdzIGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0g
ICAgYWRqdXN0UmVuZGVyU3R5bGUobV9zdHlsZSwgZSk7CisgICAgYWRqdXN0UmVuZGVyU3R5bGUo
c3R5bGUoKSwgZSk7CiAKICAgICAvLyBJZiB3ZSBhcmUgYSBsaW5rLCBjYWNoZSB0aGUgZGV0ZXJt
aW5lZCBwc2V1ZG8tc3RhdGUuCiAgICAgaWYgKGUtPmlzTGluaygpKQpAQCAtMTE3OCw3ICsxMTY1
LDcgQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRQogICAgICAgICBt
X3N0eWxlLT5zZXRVbmlxdWUoKTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAg
IHJldHVybiBtX3N0eWxlOworICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKIH0KIAogdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBl
LCBjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBLZXlmcmFtZUxpc3QmIGxpc3QpCkBA
IC0xMjA2LDggKzExOTMsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmtleWZyYW1lU3R5bGVz
Rm9yCiAgICAgICAgIEFTU0VSVCghbV9zdHlsZSk7CiAKICAgICAgICAgLy8gQ3JlYXRlIHRoZSBz
dHlsZQotICAgICAgICBtX3N0eWxlID0gbmV3IChlLT5kb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgp
KSBSZW5kZXJTdHlsZSgqZWxlbWVudFN0eWxlKTsKLSAgICAgICAgbV9zdHlsZS0+cmVmKCk7Cisg
ICAgICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoZWxlbWVudFN0eWxlKTsKICAgICAg
ICAgCiAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKICAgICAgICAgCkBAIC0xMjQzLDE4
ICsxMjI5LDE3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6a2V5ZnJhbWVTdHlsZXNGb3IKICAg
ICAgICAgICAgIGZsb2F0IGtleSA9IGtleXNba2V5SW5kZXhdOwogICAgICAgICAgICAgbGlzdC5p
bnNlcnQoa2V5LCBtX3N0eWxlKTsKICAgICAgICAgfQotICAgICAgICBtX3N0eWxlLT5kZXJlZihl
LT5kb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKICAgICAgICAgbV9zdHlsZSA9IDA7CiAgICAg
fQogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIDAlIGFuZCBhIDEwMCUga2V5ZnJh
bWUKLSAgICBmbG9hdCBmaXJzdCA9IGxpc3QuYmVnaW5LZXlmcmFtZXMoKS0+a2V5OwotICAgIGZs
b2F0IGxhc3QgPSAobGlzdC5lbmRLZXlmcmFtZXMoKS0xKS0+a2V5OworICAgIGZsb2F0IGZpcnN0
ID0gbGlzdC5iZWdpbktleWZyYW1lcygpLT5rZXkoKTsKKyAgICBmbG9hdCBsYXN0ID0gKGxpc3Qu
ZW5kS2V5ZnJhbWVzKCktMSktPmtleSgpOwogICAgIGlmIChmaXJzdCAhPSAwIHx8IGxhc3QgIT0g
MSkKICAgICAgICAgbGlzdC5jbGVhcigpOwogfQogCi1SZW5kZXJTdHlsZSogQ1NTU3R5bGVTZWxl
Y3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFJlbmRlclN0eWxlOjpQc2V1ZG9JZCBwc2V1ZG8s
IEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK1Bhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChSZW5kZXJTdHls
ZTo6UHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
CiB7CiAgICAgaWYgKCFlKQogICAgICAgICByZXR1cm4gMDsKQEAgLTEyNzgsOCArMTI2Myw3IEBA
IFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHkKICAgICBpZiAobV9tYXRj
aGVkRGVjbHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBtX3N0eWxl
ID0gbmV3IChlLT5kb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOwotICAg
IG1fc3R5bGUtPnJlZigpOworICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAg
ICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShwYXJlbnRT
dHlsZSk7CiAKQEAgLTEzMTYsMTAgKzEzMDAsMTAgQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2Vs
ZWN0b3I6OnBzZXVkb1N0eQogICAgIGlmIChtX2ZvbnREaXJ0eSkKICAgICAgICAgdXBkYXRlRm9u
dCgpOwogICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0
IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxl
KG1fc3R5bGUsIDApOworICAgIGFkanVzdFJlbmRlclN0eWxlKHN0eWxlKCksIDApOwogCiAgICAg
Ly8gTm93IHJldHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1fc3R5bGU7CisgICAgcmV0dXJu
IG1fc3R5bGUucmVsZWFzZSgpOwogfQogCiBzdGF0aWMgdm9pZCBhZGRJbnRyaW5zaWNNYXJnaW5z
KFJlbmRlclN0eWxlKiBzdHlsZSkKQEAgLTE1MTcsOCArMTUwMSw4IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5bGUKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6dXBkYXRl
Rm9udCgpCiB7CiAgICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpOwotICAgIGNoZWNrRm9yR2Vu
ZXJpY0ZhbWlseUNoYW5nZShtX3N0eWxlLCBtX3BhcmVudFN0eWxlKTsKLSAgICBjaGVja0Zvclpv
b21DaGFuZ2UobV9zdHlsZSwgbV9wYXJlbnRTdHlsZSk7CisgICAgY2hlY2tGb3JHZW5lcmljRmFt
aWx5Q2hhbmdlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUpOworICAgIGNoZWNrRm9yWm9vbUNoYW5n
ZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlKTsKICAgICBtX3N0eWxlLT5mb250KCkudXBkYXRlKG1f
Zm9udFNlbGVjdG9yKTsKICAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOwogfQpAQCAtMTU3Nyw3ICsx
NTYxLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKENTUwogICAgIG1f
ZHluYW1pY1BzZXVkbyA9IFJlbmRlclN0eWxlOjpOT1BTRVVETzsKIAogICAgIC8vIENoZWNrIHRo
ZSBzZWxlY3RvcgotICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tTZWxl
Y3RvcihzZWwsIG1fZWxlbWVudCwgJm1fc2VsZWN0b3JBdHRycywgbV9keW5hbWljUHNldWRvLCB0
cnVlLCBmYWxzZSwgbV9zdHlsZSwgbV9wYXJlbnRTdHlsZSk7CisgICAgU2VsZWN0b3JNYXRjaCBt
YXRjaCA9IG1fY2hlY2tlci5jaGVja1NlbGVjdG9yKHNlbCwgbV9lbGVtZW50LCAmbV9zZWxlY3Rv
ckF0dHJzLCBtX2R5bmFtaWNQc2V1ZG8sIHRydWUsIGZhbHNlLCBzdHlsZSgpLCBtX3BhcmVudFN0
eWxlKTsKICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JNYXRjaGVzKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTMxMjIsNyArMzEwNiw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBw
bHlQcm9wZXJ0eShpbnQKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoaG9yaXpv
bnRhbEJvcmRlclNwYWNpbmcsIEhvcml6b250YWxCb3JkZXJTcGFjaW5nKQogICAgICAgICBpZiAo
IXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzaG9ydCBzcGFj
aW5nID0gIHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoU2hvcnQobV9zdHlsZSwgem9vbUZh
Y3Rvcik7CisgICAgICAgIHNob3J0IHNwYWNpbmcgPSAgcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVM
ZW5ndGhTaG9ydChzdHlsZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAgbV9zdHlsZS0+c2V0SG9y
aXpvbnRhbEJvcmRlclNwYWNpbmcoc3BhY2luZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0zMTMwLDcgKzMxMTQsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHko
aW50CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHZlcnRpY2FsQm9yZGVyU3Bh
Y2luZywgVmVydGljYWxCb3JkZXJTcGFjaW5nKQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVl
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzaG9ydCBzcGFjaW5nID0gIHByaW1pdGl2
ZVZhbHVlLT5jb21wdXRlTGVuZ3RoU2hvcnQobV9zdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAg
IHNob3J0IHNwYWNpbmcgPSAgcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhTaG9ydChzdHls
ZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAgbV9zdHlsZS0+c2V0VmVydGljYWxCb3JkZXJTcGFj
aW5nKHNwYWNpbmcpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzMwNSw3ICszMjg5LDcg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAg
d2lkdGggPSA1OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVJbnZh
bGlkOgotICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aFNo
b3J0KG1fc3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aFNob3J0KHN0eWxlKCksIHpvb21GYWN0b3IpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMzU4
LDcgKzMzNDIsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNv
bXB1dGVMZW5ndGhJbnQobV9zdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICB3aWR0aCA9
IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50KHN0eWxlKCksIHpvb21GYWN0b3IpOwog
ICAgICAgICB9CiAgICAgICAgIHN3aXRjaCAoaWQpIHsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUxldHRlclNwYWNpbmc6CkBAIC0zNTAyLDcgKzM0ODYsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZh
bHVlLT5wcmltaXRpdmVUeXBlKCk7CiAgICAgICAgICAgICBpZiAodHlwZSA+IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiB0eXBlIDwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19E
RUcpCiAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIG91ciBxdWlya3kgbWFyZ2luIHVuaXRzIGlm
IHdlIGhhdmUgdGhlbS4KLSAgICAgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKG1fc3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCwg
CisgICAgICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0
aEludEZvckxlbmd0aChzdHlsZSgpLCB6b29tRmFjdG9yKSwgRml4ZWQsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUtPmlzUXVpcmtWYWx1ZSgpKTsKICAgICAgICAg
ICAgIGVsc2UgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQog
ICAgICAgICAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVl
KCksIFBlcmNlbnQpOwpAQCAtMzYwMiw3ICszNTg2LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjphcHBseVByb3BlcnR5KGludAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgIWFwcGx5
KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlID0gcHJpbWl0aXZlVmFsdWUtPnBy
aW1pdGl2ZVR5cGUoKTsKICAgICAgICAgICAgIGlmICh0eXBlID4gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QRVJDRU5UQUdFICYmIHR5cGUgPCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRykKLSAg
ICAgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50
Rm9yTGVuZ3RoKG1fc3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCk7CisgICAgICAgICAgICAgICAg
bCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChzdHls
ZSgpLCB6b29tRmFjdG9yKSwgRml4ZWQpOwogICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCiAgICAgICAgICAgICAgICAgbCA9IExl
bmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CiAgICAgICAg
ICAgICBlbHNlCkBAIC0zNjU4LDcgKzM2NDIsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFw
cGx5UHJvcGVydHkoaW50CiAgICAgICAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJp
bWl0aXZlVHlwZSgpOwogICAgICAgICAgIExlbmd0aCBsOwogICAgICAgICAgIGlmICh0eXBlID4g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFICYmIHR5cGUgPCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0RFRykKLSAgICAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNv
bXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgobV9zdHlsZSwgem9vbUZhY3RvciksIEZpeGVkKTsKKyAg
ICAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JM
ZW5ndGgoc3R5bGUoKSwgem9vbUZhY3RvciksIEZpeGVkKTsKICAgICAgICAgICBlbHNlIGlmICh0
eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgICAgIGwg
PSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwogCkBA
IC0zNzg4LDcgKzM3NzIsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHko
aW50CiAgICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpv
b20oKTsKICAgICAgICAgICAgIGlmIChtX3N0eWxlLT50ZXh0U2l6ZUFkanVzdCgpICYmIG1fY2hl
Y2tlci5tX2RvY3VtZW50LT5mcmFtZSgpICYmIG1fY2hlY2tlci5tX2RvY3VtZW50LT5mcmFtZSgp
LT5zaG91bGRBcHBseVRleHRab29tKCkpCiAgICAgICAgICAgICAgICAgbXVsdGlwbGllciAqPSBt
X2NoZWNrZXIubV9kb2N1bWVudC0+ZnJhbWUoKS0+dGV4dFpvb21GYWN0b3IoKTsKLSAgICAgICAg
ICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRG
b3JMZW5ndGgobV9zdHlsZSwgbXVsdGlwbGllciksIEZpeGVkKTsKKyAgICAgICAgICAgIGxpbmVI
ZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgo
c3R5bGUoKSwgbXVsdGlwbGllciksIEZpeGVkKTsKICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgICAgIGxpbmVIZWln
aHQgPSBMZW5ndGgoKG1fc3R5bGUtPmZvbnRTaXplKCkgKiBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50
VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKQEAgLTM4NDMsMTAgKzM4MjcsMTAgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAgUmVjdCogcmVjdCA9
IHByaW1pdGl2ZVZhbHVlLT5nZXRSZWN0VmFsdWUoKTsKICAgICAgICAgICAgIGlmICghcmVjdCkK
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB0b3AgPSBjb252ZXJ0VG9MZW5n
dGgocmVjdC0+dG9wKCksIG1fc3R5bGUpOwotICAgICAgICAgICAgcmlnaHQgPSBjb252ZXJ0VG9M
ZW5ndGgocmVjdC0+cmlnaHQoKSwgbV9zdHlsZSk7Ci0gICAgICAgICAgICBib3R0b20gPSBjb252
ZXJ0VG9MZW5ndGgocmVjdC0+Ym90dG9tKCksIG1fc3R5bGUpOwotICAgICAgICAgICAgbGVmdCA9
IGNvbnZlcnRUb0xlbmd0aChyZWN0LT5sZWZ0KCksIG1fc3R5bGUpOworICAgICAgICAgICAgdG9w
ID0gY29udmVydFRvTGVuZ3RoKHJlY3QtPnRvcCgpLCBzdHlsZSgpKTsKKyAgICAgICAgICAgIHJp
Z2h0ID0gY29udmVydFRvTGVuZ3RoKHJlY3QtPnJpZ2h0KCksIHN0eWxlKCkpOworICAgICAgICAg
ICAgYm90dG9tID0gY29udmVydFRvTGVuZ3RoKHJlY3QtPmJvdHRvbSgpLCBzdHlsZSgpKTsKKyAg
ICAgICAgICAgIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgocmVjdC0+bGVmdCgpLCBzdHlsZSgpKTsK
IAogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpICE9IENTU1Zh
bHVlQXV0bykgewogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzkyNywxMCArMzkxMSwxMCBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgfQogCiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQ6Ci0gICAgICAgIGFwcGx5Q291bnRlckxpc3Qo
bV9zdHlsZSwgdmFsdWUtPmlzVmFsdWVMaXN0KCkgPyBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3Qq
Pih2YWx1ZSkgOiAwLCBmYWxzZSk7CisgICAgICAgIGFwcGx5Q291bnRlckxpc3Qoc3R5bGUoKSwg
dmFsdWUtPmlzVmFsdWVMaXN0KCkgPyBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSkg
OiAwLCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5Q291bnRl
clJlc2V0OgotICAgICAgICBhcHBseUNvdW50ZXJMaXN0KG1fc3R5bGUsIHZhbHVlLT5pc1ZhbHVl
TGlzdCgpID8gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpIDogMCwgdHJ1ZSk7Cisg
ICAgICAgIGFwcGx5Q291bnRlckxpc3Qoc3R5bGUoKSwgdmFsdWUtPmlzVmFsdWVMaXN0KCkgPyBz
dGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSkgOiAwLCB0cnVlKTsKICAgICAgICAgcmV0
dXJuOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6IHsKQEAgLTQzOTgsOCArNDM4
Miw4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAg
aWYgKCFwYWlyKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGludCB3aWR0aCA9IHBh
aXItPmZpcnN0KCktPmNvbXB1dGVMZW5ndGhJbnQobV9zdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAg
ICAgIGludCBoZWlnaHQgPSBwYWlyLT5zZWNvbmQoKS0+Y29tcHV0ZUxlbmd0aEludChtX3N0eWxl
LCB6b29tRmFjdG9yKTsKKyAgICAgICAgaW50IHdpZHRoID0gcGFpci0+Zmlyc3QoKS0+Y29tcHV0
ZUxlbmd0aEludChzdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgaW50IGhlaWdodCA9IHBh
aXItPnNlY29uZCgpLT5jb21wdXRlTGVuZ3RoSW50KHN0eWxlKCksIHpvb21GYWN0b3IpOwogICAg
ICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCiAgICAgICAgICAgICByZXR1cm47CiAK
QEAgLTQ0MzEsNyArNDQxNSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0
eShpbnQKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0OgogICAgICAgICBIQU5E
TEVfSU5IRVJJVF9BTkRfSU5JVElBTChvdXRsaW5lT2Zmc2V0LCBPdXRsaW5lT2Zmc2V0KQotICAg
ICAgICBtX3N0eWxlLT5zZXRPdXRsaW5lT2Zmc2V0KHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVu
Z3RoSW50KG1fc3R5bGUsIHpvb21GYWN0b3IpKTsKKyAgICAgICAgbV9zdHlsZS0+c2V0T3V0bGlu
ZU9mZnNldChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludChzdHlsZSgpLCB6b29tRmFj
dG9yKSk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0U2hhZG93
OgpAQCAtNDQ1MSw5ICs0NDM1LDkgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3Bl
cnR5KGludAogICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7CiAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgIFNoYWRvd1ZhbHVlKiBpdGVt
ID0gc3RhdGljX2Nhc3Q8U2hhZG93VmFsdWUqPihsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KGkpKTsKLSAgICAgICAgICAgIGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aEludChtX3N0
eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxl
bmd0aEludChtX3N0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRl
bS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGhJbnQobV9zdHlsZSwgem9vbUZhY3Rv
cikgOiAwOworICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRlTGVuZ3RoSW50KHN0
eWxlKCksIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRl
TGVuZ3RoSW50KHN0eWxlKCksIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IGJsdXIgPSBp
dGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aEludChzdHlsZSgpLCB6b29tRmFj
dG9yKSA6IDA7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAgICAgIGlmIChpdGVt
LT5jb2xvcikKICAgICAgICAgICAgICAgICBjb2xvciA9IGdldENvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKQEAgLTQ0NzksNyArNDQ2Myw3IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgICAgIGlmICh0eXBlID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgICAgICAgICByZWZsZWN0
aW9uLT5zZXRPZmZzZXQoTGVuZ3RoKHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCktPmdldERvdWJsZVZh
bHVlKCksIFBlcmNlbnQpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZWZs
ZWN0aW9uLT5zZXRPZmZzZXQoTGVuZ3RoKHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCktPmNvbXB1dGVM
ZW5ndGhJbnRGb3JMZW5ndGgobV9zdHlsZSwgem9vbUZhY3RvciksIEZpeGVkKSk7CisgICAgICAg
ICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KExlbmd0aChyZWZsZWN0VmFsdWUtPm9mZnNl
dCgpLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIHpvb21GYWN0b3IpLCBGaXhl
ZCkpOwogICAgICAgICB9CiAgICAgICAgIE5pbmVQaWVjZUltYWdlIG1hc2s7CiAgICAgICAgIG1h
cE5pbmVQaWVjZUltYWdlKHJlZmxlY3RWYWx1ZS0+bWFzaygpLCBtYXNrKTsKQEAgLTQ1ODYsNyAr
NDU3MCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAg
ICAgICAgIG1fc3R5bGUtPnNldEhhc05vcm1hbENvbHVtbkdhcCgpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fc3R5bGUtPnNldENvbHVtbkdhcChwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aEZsb2F0KG1fc3R5bGUsIHpvb21GYWN0b3IpKTsKKyAgICAgICAg
bV9zdHlsZS0+c2V0Q29sdW1uR2FwKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoRmxvYXQo
c3R5bGUoKSwgem9vbUZhY3RvcikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5XaWR0aDogewpAQCAtNDYwMCw3ICs0NTg0LDcgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAgbV9zdHls
ZS0+c2V0SGFzQXV0b0NvbHVtbldpZHRoKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uV2lkdGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1
dGVMZW5ndGhGbG9hdChtX3N0eWxlLCB6b29tRmFjdG9yKSk7CisgICAgICAgIG1fc3R5bGUtPnNl
dENvbHVtbldpZHRoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUoKSwg
em9vbUZhY3RvcikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRDb2x1bW5SdWxlU3R5bGU6CkBAIC00NzA3LDcgKzQ2OTEsNyBAQCB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICBib29sIG9rID0gdHJ1ZTsKLSAgICAgICAgICAgIExlbmd0aCBsID0gY29u
dmVydFRvTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLCBtX3N0eWxlLCAmb2spOworICAgICAgICAgICAg
TGVuZ3RoIGwgPSBjb252ZXJ0VG9MZW5ndGgocHJpbWl0aXZlVmFsdWUsIHN0eWxlKCksICZvayk7
CiAgICAgICAgICAgICBpZiAob2spCiAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVl
ZUluY3JlbWVudChsKTsKICAgICAgICAgfQpAQCAtNDgzMCwxMCArNDgxNCwxMCBAQCB2b2lkIENT
U1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgICAgICAKICAgICAgICAg
RGFzaGJvYXJkUmVnaW9uICpmaXJzdCA9IHJlZ2lvbjsKICAgICAgICAgd2hpbGUgKHJlZ2lvbikg
ewotICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0xlbmd0aCAocmVnaW9uLT50b3Ao
KSwgbV9zdHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9MZW5ndGgg
KHJlZ2lvbi0+cmlnaHQoKSwgbV9zdHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggYm90dG9tID0g
Y29udmVydFRvTGVuZ3RoIChyZWdpb24tPmJvdHRvbSgpLCBtX3N0eWxlKTsKLSAgICAgICAgICAg
IExlbmd0aCBsZWZ0ID0gY29udmVydFRvTGVuZ3RoIChyZWdpb24tPmxlZnQoKSwgbV9zdHlsZSk7
CisgICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRvTGVuZ3RoKHJlZ2lvbi0+dG9wKCks
IHN0eWxlKCkpOworICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvTGVuZ3RoKHJl
Z2lvbi0+cmlnaHQoKSwgc3R5bGUoKSk7CisgICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29u
dmVydFRvTGVuZ3RoKHJlZ2lvbi0+Ym90dG9tKCksIHN0eWxlKCkpOworICAgICAgICAgICAgTGVu
Z3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgocmVnaW9uLT5sZWZ0KCksIHN0eWxlKCkpOwogICAg
ICAgICAgICAgaWYgKHJlZ2lvbi0+bV9pc0NpcmNsZSkKICAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OkNpcmNsZSwgcmVnaW9u
LT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZh
bHNlIDogdHJ1ZSk7CiAgICAgICAgICAgICBlbHNlIGlmIChyZWdpb24tPm1faXNSZWN0YW5nbGUp
CkBAIC00ODY0LDExICs0ODQ4LDExIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICo9IDM7CiAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVUaGljaykK
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICo9IDU7Ci0gICAgICAgICAgICAgICAgd2lkdGgg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlc3VsdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19FTVMpLT5jb21wdXRlTGVuZ3RoRmxvYXQobV9zdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAg
ICAgICAgICAgd2lkdGggPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlc3VsdCwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19FTVMpLT5jb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUoKSwgem9vbUZh
Y3Rvcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1
dGVMZW5ndGhGbG9hdChtX3N0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgICAgICB3aWR0
aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUoKSwgem9vbUZhY3Rv
cik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgbV9zdHlsZS0+
c2V0VGV4dFN0cm9rZVdpZHRoKHdpZHRoKTsKQEAgLTQ4NzcsNyArNDg2MSw3IEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNmb3JtOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRyYW5z
Zm9ybSwgVHJhbnNmb3JtKTsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
OwotICAgICAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlLCBtX3N0eWxlLCBvcGVy
YXRpb25zKTsKKyAgICAgICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZSwgc3R5bGUo
KSwgb3BlcmF0aW9ucyk7CiAgICAgICAgIG1fc3R5bGUtPnNldFRyYW5zZm9ybShvcGVyYXRpb25z
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQ4OTEsNyArNDg3NSw3IEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgTGVuZ3RoIGw7CiAgICAg
ICAgIGludCB0eXBlID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKICAgICAgICAg
aWYgKHR5cGUgPiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgJiYgdHlwZSA8IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKQotICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRp
dmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChtX3N0eWxlLCB6b29tRmFjdG9yKSwg
Rml4ZWQpOworICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxl
bmd0aEludEZvckxlbmd0aChzdHlsZSgpLCB6b29tRmFjdG9yKSwgRml4ZWQpOwogICAgICAgICBl
bHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAg
ICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNl
bnQpOwogICAgICAgICBlbHNlCkBAIC00OTA1LDcgKzQ4ODksNyBAQCB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgIExlbmd0aCBsOwogICAgICAgICBpbnQg
dHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCk7CiAgICAgICAgIGlmICh0eXBl
ID4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFICYmIHR5cGUgPCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0RFRykKLSAgICAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUt
PmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgobV9zdHlsZSwgem9vbUZhY3RvciksIEZpeGVkKTsK
KyAgICAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRG
b3JMZW5ndGgoc3R5bGUoKSwgem9vbUZhY3RvciksIEZpeGVkKTsKICAgICAgICAgZWxzZSBpZih0
eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgICAgIGwg
PSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwogICAg
ICAgICBlbHNlCkBAIC01MTMwLDcgKzUxMTQsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1h
cEZpbGxTaXplKEZpbGxMCiAgICAgaWYgKGZpcnN0VHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1VOS05PV04pCiAgICAgICAgIGZpcnN0TGVuZ3RoID0gTGVuZ3RoKEF1dG8pOwogICAgIGVs
c2UgaWYgKGZpcnN0VHlwZSA+IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiBm
aXJzdFR5cGUgPCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRykKLSAgICAgICAgZmlyc3RMZW5n
dGggPSBMZW5ndGgoZmlyc3QtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgobV9zdHlsZSwgem9v
bUZhY3RvciksIEZpeGVkKTsKKyAgICAgICAgZmlyc3RMZW5ndGggPSBMZW5ndGgoZmlyc3QtPmNv
bXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoc3R5bGUoKSwgem9vbUZhY3RvciksIEZpeGVkKTsKICAg
ICBlbHNlIGlmIChmaXJzdFR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdF
KQogICAgICAgICBmaXJzdExlbmd0aCA9IExlbmd0aChmaXJzdC0+Z2V0RG91YmxlVmFsdWUoKSwg
UGVyY2VudCk7CiAgICAgZWxzZQpAQCAtNTEzOSw3ICs1MTIzLDcgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjptYXBGaWxsU2l6ZShGaWxsTAogICAgIGlmIChzZWNvbmRUeXBlID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfVU5LTk9XTikKICAgICAgICAgc2Vjb25kTGVuZ3RoID0gTGVuZ3RoKEF1
dG8pOwogICAgIGVsc2UgaWYgKHNlY29uZFR5cGUgPiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0UgJiYgc2Vjb25kVHlwZSA8IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKQotICAg
ICAgICBzZWNvbmRMZW5ndGggPSBMZW5ndGgoc2Vjb25kLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVu
Z3RoKG1fc3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCk7CisgICAgICAgIHNlY29uZExlbmd0aCA9
IExlbmd0aChzZWNvbmQtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoc3R5bGUoKSwgem9vbUZh
Y3RvciksIEZpeGVkKTsKICAgICBlbHNlIGlmIChzZWNvbmRUeXBlID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgc2Vjb25kTGVuZ3RoID0gTGVuZ3RoKHNlY29u
ZC0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CiAgICAgZWxzZQpAQCAtNTE2Niw3ICs1MTUw
LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsWFBvc2l0aW9uKAogICAgIExlbmd0
aCBsOwogICAgIGludCB0eXBlID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKICAg
ICBpZiAodHlwZSA+IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiB0eXBlIDwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcpCi0gICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZl
VmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgobV9zdHlsZSwgem9vbUZhY3RvciksIEZp
eGVkKTsKKyAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aElu
dEZvckxlbmd0aChzdHlsZSgpLCB6b29tRmFjdG9yKSwgRml4ZWQpOwogICAgIGVsc2UgaWYgKHR5
cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQogICAgICAgICBsID0gTGVu
Z3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKICAgICBlbHNl
CkBAIC01MTkwLDcgKzUxNzQsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxZUG9z
aXRpb24oCiAgICAgTGVuZ3RoIGw7CiAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJp
bWl0aXZlVHlwZSgpOwogICAgIGlmICh0eXBlID4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJD
RU5UQUdFICYmIHR5cGUgPCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRykKLSAgICAgICAgbCA9
IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChtX3N0eWxl
LCB6b29tRmFjdG9yKSwgRml4ZWQpOworICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIHpvb21GYWN0b3IpLCBGaXhlZCk7
CiAgICAgZWxzZSBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0Up
CiAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBl
cmNlbnQpOwogICAgIGVsc2UKSW5kZXg6IGNzcy9DU1NTdHlsZVNlbGVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkocmV2aXNpb24gMzc1ODYpCisrKyBjc3MvQ1NT
U3R5bGVTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MywxNiArODMsMTggQEAgcHVibGlj
OgogCiAgICAgICAgIHZvaWQgaW5pdEVsZW1lbnRBbmRQc2V1ZG9TdGF0ZShFbGVtZW50Kik7CiAg
ICAgICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlID0gMCwgUmVuZGVyU3R5bGU6OlBzZXVkb0lkID0gUmVuZGVyU3R5bGU6Ok5PUFNF
VURPKTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlRm9yRWxlbWVudChFbGVtZW50KiwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9vbCBhbGxvd1NoYXJpbmcgPSB0cnVlLCBib29s
IHJlc29sdmVGb3JSb290RGVmYXVsdCA9IGZhbHNlKTsKKyAgICAgICAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUgPSAwLCBib29sIGFsbG93U2hhcmluZyA9IHRydWUsIGJvb2wgcmVzb2x2ZUZvclJvb3REZWZh
dWx0ID0gZmFsc2UpOwogICAgICAgICB2b2lkIGtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVs
ZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIEtleWZyYW1lTGlzdCYgbGlzdCk7CiAKLSAgICAg
ICAgUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlRm9yRWxlbWVudChSZW5kZXJTdHlsZTo6UHNldWRv
SWQsIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwKTsKKyAgICAgICAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGVGb3JFbGVtZW50KFJlbmRlclN0eWxlOjpQ
c2V1ZG9JZCwgRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDApOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7CiAgICAg
ICAgIE5vZGUqIGxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCBkZXB0
aCA9IDEpOwogICAgICAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChOb2RlKik7CiAK
KyAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQo
KTsgfQorCiAgICAgcHVibGljOgogICAgICAgICAvLyBUaGVzZSBtZXRob2RzIHdpbGwgZ2l2ZSBi
YWNrIHRoZSBzZXQgb2YgcnVsZXMgdGhhdCBtYXRjaGVkIGZvciBhIGdpdmVuIGVsZW1lbnQgKG9y
IGEgcHNldWRvLWVsZW1lbnQpLgogICAgICAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBzdHls
ZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiwgYm9vbCBhdXRob3JPbmx5KTsKQEAgLTExMSw3ICsx
MTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZsb2F0IHNtYWxsZXJGb250U2l6ZShmbG9hdCBzaXpl
LCBib29sIHF1aXJrc01vZGUpIGNvbnN0OwogCiAgICAgcHVibGljOgotICAgICAgICB2b2lkIHNl
dFN0eWxlKFJlbmRlclN0eWxlKiBzKSB7IG1fc3R5bGUgPSBzOyB9IC8vIFVzZWQgYnkgdGhlIGRv
Y3VtZW50IHdoZW4gc2V0dGluZyB1cCBpdHMgcm9vdCBzdHlsZS4KKyAgICAgICAgdm9pZCBzZXRT
dHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzKSB7IG1fc3R5bGUgPSBzOyB9IC8vIFVzZWQg
YnkgdGhlIGRvY3VtZW50IHdoZW4gc2V0dGluZyB1cCBpdHMgcm9vdCBzdHlsZS4KICAgICAgICAg
dm9pZCBzZXRGb250U2l6ZShGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzaXplKTsKIAogICAgICAg
ICB2b2lkIGFwcGx5UHJvcGVydHlUb1N0eWxlKGludCBpZCwgQ1NTVmFsdWUqLCBSZW5kZXJTdHls
ZSopOwpAQCAtMjQ5LDEzICsyNTEsMTMgQEAgcHVibGljOgogICAgICAgICBSZWZQdHI8Q1NTUnVs
ZUxpc3Q+IG1fcnVsZUxpc3Q7CiAKICAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvciogbV9tZWRp
dW07Ci0gICAgICAgIFJlbmRlclN0eWxlKiBtX3Jvb3REZWZhdWx0U3R5bGU7CisgICAgICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gbV9yb290RGVmYXVsdFN0eWxlOwogCiAgICAgICAgIFJlbmRlclN0
eWxlOjpQc2V1ZG9JZCBtX2R5bmFtaWNQc2V1ZG87CiAKICAgICAgICAgU2VsZWN0b3JDaGVja2Vy
IG1fY2hlY2tlcjsKIAotICAgICAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKKyAgICAgICAgUmVm
UHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwogICAgICAgICBSZW5kZXJTdHlsZSogbV9wYXJlbnRT
dHlsZTsKICAgICAgICAgRWxlbWVudCogbV9lbGVtZW50OwogICAgICAgICBTdHlsZWRFbGVtZW50
KiBtX3N0eWxlZEVsZW1lbnQ7CkluZGV4OiBjc3MvQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gY3NzL0NTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUuY3BwCShyZXZp
c2lvbiAzNzU4NikKKysrIGNzcy9DU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU1Zh
cmlhYmxlRGVwZW5kZW50VmFsdWU6OkNTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUoY29uc3QgUGFz
c1JlZlB0cjxDU1NWYWx1ZUxpc3Q+JiBsaXN0KQorQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZTo6
Q1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZShQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCkK
IDogbV9saXN0KGxpc3QpCiB7CiB9CkluZGV4OiBjc3MvQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlLmgJKHJldmlz
aW9uIDM3NTg2KQorKysgY3NzL0NTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBDU1NWYWx1ZUxpc3Q7CiAKIGNsYXNzIENTU1Zh
cmlhYmxlRGVwZW5kZW50VmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWU+IGNyZWF0ZShjb25zdCBQ
YXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4mIHZhbHVlTGlzdCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlPiBjcmVhdGUoUGFzc1JlZlB0cjxDU1NWYWx1ZUxp
c3Q+IHZhbHVlTGlzdCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTVmFy
aWFibGVEZXBlbmRlbnRWYWx1ZSh2YWx1ZUxpc3QpKTsKICAgICB9CkBAIC00Nyw3ICs0Nyw3IEBA
IHB1YmxpYzoKICAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGlzdC5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUo
Y29uc3QgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+Jik7CisgICAgQ1NTVmFyaWFibGVEZXBlbmRl
bnRWYWx1ZShQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4pOwogICAgIAogICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IG1fbGlzdDsKIH07CkluZGV4OiBkb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGRvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDM3NTkxKQorKysgZG9tL0RvY3VtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEyOSwyMiArMTEyOSwxOCBAQCB2b2lkIERvY3VtZW50Ojpy
ZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjCiAgICAgICAgIC8vIHN0eWxlIHNlbGVjdG9yIG1heSBz
ZXQgdGhpcyBhZ2FpbiBkdXJpbmcgcmVjYWxjCiAgICAgICAgIG1faGFzTm9kZXNXaXRoUGxhY2Vo
b2xkZXJTdHlsZSA9IGZhbHNlOwogICAgICAgICAKLSAgICAgICAgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlID0gcmVuZGVyZXIoKS0+c3R5bGUoKTsKLSAgICAgICAgaWYgKG9sZFN0eWxlKQotICAgICAg
ICAgICAgb2xkU3R5bGUtPnJlZigpOwotICAgICAgICBSZW5kZXJTdHlsZSogX3N0eWxlID0gbmV3
IChtX3JlbmRlckFyZW5hKSBSZW5kZXJTdHlsZSgpOwotICAgICAgICBfc3R5bGUtPnJlZigpOwot
ICAgICAgICBfc3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwotICAgICAgICBfc3R5bGUtPnNldFZp
c3VhbGx5T3JkZXJlZCh2aXN1YWxseU9yZGVyZWQpOwotICAgICAgICBfc3R5bGUtPnNldFpvb20o
ZnJhbWUoKS0+cGFnZVpvb21GYWN0b3IoKSk7Ci0gICAgICAgIG1fc3R5bGVTZWxlY3Rvci0+c2V0
U3R5bGUoX3N0eWxlKTsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBkb2N1bWVudFN0eWxl
ID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXREaXNw
bGF5KEJMT0NLKTsKKyAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0VmlzdWFsbHlPcmRlcmVkKHZp
c3VhbGx5T3JkZXJlZCk7CisgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFpvb20oZnJhbWUoKS0+
cGFnZVpvb21GYWN0b3IoKSk7CisgICAgICAgIG1fc3R5bGVTZWxlY3Rvci0+c2V0U3R5bGUoZG9j
dW1lbnRTdHlsZSk7CiAgICAgCiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b247CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChwcmludGluZygp
KTsKICAgICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IHRoaXMtPnNldHRpbmdzKCkpIHsK
ICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5m
b250UmVuZGVyaW5nTW9kZSgpKTsKICAgICAgICAgICAgIGlmIChwcmludGluZygpICYmICFzZXR0
aW5ncy0+c2hvdWxkUHJpbnRCYWNrZ3JvdW5kcygpKQotICAgICAgICAgICAgICAgIF9zdHlsZS0+
c2V0Rm9yY2VCYWNrZ3JvdW5kc1RvV2hpdGUodHJ1ZSk7CisgICAgICAgICAgICAgICAgZG9jdW1l
bnRTdHlsZS0+c2V0Rm9yY2VCYWNrZ3JvdW5kc1RvV2hpdGUodHJ1ZSk7CiAgICAgICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIHN0ZGZvbnQgPSBzZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5
KCk7CiAgICAgICAgICAgICBpZiAoIXN0ZGZvbnQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KHN0ZGZvbnQpOwpAQCAt
MTE1NCwyMCArMTE1MCwxNiBAQCB2b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5n
ZSBjCiAgICAgICAgICAgICBtX3N0eWxlU2VsZWN0b3ItPnNldEZvbnRTaXplKGZvbnREZXNjcmlw
dGlvbiwgbV9zdHlsZVNlbGVjdG9yLT5mb250U2l6ZUZvcktleXdvcmQoQ1NTVmFsdWVNZWRpdW0s
IGluQ29tcGF0TW9kZSgpLCBmYWxzZSkpOwogICAgICAgICB9CiAKLSAgICAgICAgX3N0eWxlLT5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgX3N0eWxlLT5mb250
KCkudXBkYXRlKG1fc3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCkpOworICAgICAgICBkb2N1
bWVudFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAg
ZG9jdW1lbnRTdHlsZS0+Zm9udCgpLnVwZGF0ZShtX3N0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3Rv
cigpKTsKICAgICAgICAgaWYgKGluQ29tcGF0TW9kZSgpKQotICAgICAgICAgICAgX3N0eWxlLT5z
ZXRIdG1sSGFja3ModHJ1ZSk7IC8vIGVuYWJsZSBodG1sIHNwZWNpZmljIHJlbmRlcmluZyB0cmlj
a3MKKyAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldEh0bWxIYWNrcyh0cnVlKTsgLy8gZW5h
YmxlIGh0bWwgc3BlY2lmaWMgcmVuZGVyaW5nIHRyaWNrcwogCi0gICAgICAgIFN0eWxlQ2hhbmdl
IGNoID0gZGlmZihfc3R5bGUsIG9sZFN0eWxlKTsKKyAgICAgICAgU3R5bGVDaGFuZ2UgY2ggPSBk
aWZmKGRvY3VtZW50U3R5bGUuZ2V0KCksIHJlbmRlcmVyKCktPnN0eWxlKCkpOwogICAgICAgICBp
ZiAocmVuZGVyZXIoKSAmJiBjaCAhPSBOb0NoYW5nZSkKLSAgICAgICAgICAgIHJlbmRlcmVyKCkt
PnNldFN0eWxlKF9zdHlsZSk7CisgICAgICAgICAgICByZW5kZXJlcigpLT5zZXRTdHlsZShkb2N1
bWVudFN0eWxlLnJlbGVhc2UoKSk7CiAgICAgICAgIGlmIChjaGFuZ2UgIT0gRm9yY2UpCiAgICAg
ICAgICAgICBjaGFuZ2UgPSBjaDsKLQotICAgICAgICBfc3R5bGUtPmRlcmVmKG1fcmVuZGVyQXJl
bmEpOwotICAgICAgICBpZiAob2xkU3R5bGUpCi0gICAgICAgICAgICBvbGRTdHlsZS0+ZGVyZWYo
bV9yZW5kZXJBcmVuYSk7CiAgICAgfQogCiAgICAgZm9yIChOb2RlKiBuID0gZmlyc3RDaGlsZCgp
OyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkKSW5kZXg6IGRvbS9FbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBkb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgZG9tL0VsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDksNyArNjA5LDcgQEAgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgRWxlbWVudDo6aW1hZ2VTb3VyYwogICAgIHJldHVybiBzcmNBdHRyOwogfQogCi1SZW5kZXJT
dHlsZSogRWxlbWVudDo6c3R5bGVGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRl
cmVyKQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gRWxlbWVudDo6c3R5bGVGb3JSZW5kZXJlcihS
ZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyKQogewogICAgIHJldHVybiBkb2N1bWVudCgpLT5z
dHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudCh0aGlzKTsKIH0KQEAgLTY5NCwxNyArNjk0
LDE1IEBAIHZvaWQgRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2gKICAgICAgICAg
ICAgIHJhcmVEYXRhKCktPnJlc2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTsKICAgICB9CiAgICAgaWYg
KGhhc1BhcmVudFN0eWxlICYmIChjaGFuZ2UgPj0gSW5oZXJpdCB8fCBjaGFuZ2VkKCkpKSB7Ci0g
ICAgICAgIFJlbmRlclN0eWxlICpuZXdTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3Io
KS0+c3R5bGVGb3JFbGVtZW50KHRoaXMpOwotICAgICAgICBTdHlsZUNoYW5nZSBjaCA9IGRpZmYo
Y3VycmVudFN0eWxlLCBuZXdTdHlsZSk7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3
U3R5bGUgPSBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudCh0aGlz
KTsKKyAgICAgICAgU3R5bGVDaGFuZ2UgY2ggPSBkaWZmKGN1cnJlbnRTdHlsZSwgbmV3U3R5bGUu
Z2V0KCkpOwogICAgICAgICBpZiAoY2ggPT0gRGV0YWNoIHx8ICFjdXJyZW50U3R5bGUpIHsKICAg
ICAgICAgICAgIGlmIChhdHRhY2hlZCgpKQogICAgICAgICAgICAgICAgIGRldGFjaCgpOwotICAg
ICAgICAgICAgLy8gIyMjIFN1Ym9wdGltYWwuIFN0eWxlIGdldHMgY2FsY3VsYXRlZCBhZ2Fpbi4K
LSAgICAgICAgICAgIGF0dGFjaCgpOworICAgICAgICAgICAgYXR0YWNoKCk7IC8vIEZJWE1FOiBU
aGUgc3R5bGUgZ2V0cyBjb21wdXRlZCB0d2ljZSBieSBjYWxsaW5nIGF0dGFjaC4gV2UgY291bGQg
ZG8gYmV0dGVyIGlmIHdlIHBhc3NlZCB0aGUgc3R5bGUgYWxvbmcuCiAgICAgICAgICAgICAvLyBh
dHRhY2ggcmVjYWx1bGF0ZXMgdGhlIHN0eWxlIGZvciBhbGwgY2hpbGRyZW4uIE5vIG5lZWQgdG8g
ZG8gaXQgdHdpY2UuCiAgICAgICAgICAgICBzZXRDaGFuZ2VkKE5vU3R5bGVDaGFuZ2UpOwogICAg
ICAgICAgICAgc2V0SGFzQ2hhbmdlZENoaWxkKGZhbHNlKTsKLSAgICAgICAgICAgIG5ld1N0eWxl
LT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCkBAIC03MzcsMTQgKzczNSwxMiBAQCB2b2lkIEVsZW1lbnQ6OnJlY2FsY1N0
eWxlKFN0eWxlQ2hhbmdlIGNoCiAgICAgICAgICAgICAvLyBzaWJsaW5nL2Rlc2NlbmRhbnQgcnVs
ZXMsIHNpbmNlIG90aGVyd2lzZSBpdCBpc24ndCBwb3NzaWJsZSBmb3IgYW5jZXN0b3Igc3R5bGVz
IHRvIGFmZmVjdCBzaGFyaW5nIG9mCiAgICAgICAgICAgICAvLyBkZXNjZW5kYW50cy4KICAgICAg
ICAgICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldFN0
eWxlSW50ZXJuYWwobmV3U3R5bGUpOworICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldFN0
eWxlSW50ZXJuYWwobmV3U3R5bGUuZ2V0KCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIHNldFJlbmRlclN0eWxlKG5ld1N0eWxlKTsKICAgICAgICAgfSBlbHNlIGlmIChzdHls
ZUNoYW5nZVR5cGUoKSA9PSBBbmltYXRpb25TdHlsZUNoYW5nZSkKICAgICAgICAgICAgICBzZXRS
ZW5kZXJTdHlsZShuZXdTdHlsZSk7CiAKLSAgICAgICAgbmV3U3R5bGUtPmRlcmVmKGRvY3VtZW50
KCktPnJlbmRlckFyZW5hKCkpOwotCiAgICAgICAgIGlmIChjaGFuZ2UgIT0gRm9yY2UpIHsKICAg
ICAgICAgICAgIGlmICgoZG9jdW1lbnQoKS0+dXNlc0Rlc2NlbmRhbnRSdWxlcygpIHx8IGhhc1Bv
c2l0aW9uYWxSdWxlcykgJiYgc3R5bGVDaGFuZ2VUeXBlKCkgPj0gRnVsbFN0eWxlQ2hhbmdlKQog
ICAgICAgICAgICAgICAgIGNoYW5nZSA9IEZvcmNlOwpAQCAtMTE4OCw3ICsxMTg0LDcgQEAgUmVu
ZGVyU3R5bGUqIEVsZW1lbnQ6OmNvbXB1dGVkU3R5bGUoKQogICAgIEVsZW1lbnRSYXJlRGF0YSog
ZGF0YSA9IGVuc3VyZVJhcmVEYXRhKCk7CiAgICAgaWYgKCFkYXRhLT5tX2NvbXB1dGVkU3R5bGUp
CiAgICAgICAgIGRhdGEtPm1fY29tcHV0ZWRTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0
b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMsIHBhcmVudCgpID8gcGFyZW50KCktPmNvbXB1dGVk
U3R5bGUoKSA6IDApOwotICAgIHJldHVybiBkYXRhLT5tX2NvbXB1dGVkU3R5bGU7CisgICAgcmV0
dXJuIGRhdGEtPm1fY29tcHV0ZWRTdHlsZS5nZXQoKTsKIH0KIAogdm9pZCBFbGVtZW50OjpjYW5j
ZWxGb2N1c0FwcGVhcmFuY2VVcGRhdGUoKQpJbmRleDogZG9tL0VsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBkb20vRWxlbWVudC5oCShyZXZpc2lvbiAzNzU4NikKKysrIGRvbS9FbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwotICAgIFJlbmRlclN0eWxl
KiBzdHlsZUZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcGFyZW50KTsKKyAgICBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBzdHlsZUZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcGFyZW50KTsKICAg
ICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5k
ZXJTdHlsZSopOwogICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSA9IE5v
Q2hhbmdlKTsKIApJbmRleDogZG9tL0VsZW1lbnRSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRv
bS9FbGVtZW50UmFyZURhdGEuaAkocmV2aXNpb24gMzc1ODYpCisrKyBkb20vRWxlbWVudFJhcmVE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIHZvaWQg
cmVzZXRDb21wdXRlZFN0eWxlKEVsZW1lbnQqKTsKIAogICAgIEludFNpemUgbV9taW5pbXVtU2l6
ZUZvclJlc2l6aW5nOwotICAgIFJlbmRlclN0eWxlKiBtX2NvbXB1dGVkU3R5bGU7CisgICAgUmVm
UHRyPFJlbmRlclN0eWxlPiBtX2NvbXB1dGVkU3R5bGU7CiB9OwogCiBpbmxpbmUgSW50U2l6ZSBk
ZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpCkBAIC00NCw3ICs0NCw2IEBAIGlubGluZSBJ
bnRTaXplIGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2kKIAogaW5saW5lIEVsZW1lbnRSYXJlRGF0
YTo6RWxlbWVudFJhcmVEYXRhKEVsZW1lbnQqIGUpCiAgICAgOiBtX21pbmltdW1TaXplRm9yUmVz
aXppbmcoZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKSkKLSAgICAsIG1fY29tcHV0ZWRT
dHlsZSgwKQogewogfQogCkBAIC01Miw4ICs1MSw3IEBAIGlubGluZSB2b2lkIEVsZW1lbnRSYXJl
RGF0YTo6cmVzZXRDb21wdXQKIHsKICAgICBpZiAoIW1fY29tcHV0ZWRTdHlsZSkKICAgICAgICAg
cmV0dXJuOwotICAgIG1fY29tcHV0ZWRTdHlsZS0+ZGVyZWYoZWxlbWVudC0+ZG9jdW1lbnQoKS0+
cmVuZGVyQXJlbmEoKSk7Ci0gICAgbV9jb21wdXRlZFN0eWxlID0gMDsKKyAgICBtX2NvbXB1dGVk
U3R5bGUuY2xlYXIoKTsKIH0KIAogfQpJbmRleDogZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGRvbS9Ob2RlLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyBkb20vTm9kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNSwyMCArMTE1LDIwIEBAIE5vZGU6OlN0eWxlQ2hhbmdlIE5vZGU6OmRpZmYo
IFJlbmRlclN0eWwKICAgICAvLyBJZiB0aGUgcHNldWRvU3R5bGVzIGhhdmUgY2hhbmdlZCwgd2Ug
d2FudCBhbnkgU3R5bGVDaGFuZ2UgdGhhdCBpcyBub3QgTm9DaGFuZ2UKICAgICAvLyBiZWNhdXNl
IHNldFN0eWxlIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nIHdpdGggYW55dGhpbmcgZWxzZS4KICAg
ICBpZiAoY2ggPT0gTm9DaGFuZ2UgJiYgczEtPmhhc1BzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpC
RUZPUkUpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBwczIgPSBzMi0+Z2V0UHNldWRvU3R5bGUo
UmVuZGVyU3R5bGU6OkJFRk9SRSk7CisgICAgICAgIFJlbmRlclN0eWxlKiBwczIgPSBzMi0+Z2V0
Q2FjaGVkUHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkJFRk9SRSk7CiAgICAgICAgIGlmICghcHMy
KQogICAgICAgICAgICAgY2ggPSBOb0luaGVyaXQ7CiAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgUmVuZGVyU3R5bGUqIHBzMSA9IHMxLT5nZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6QkVG
T1JFKTsKKyAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwczEgPSBzMS0+Z2V0Q2FjaGVkUHNldWRv
U3R5bGUoUmVuZGVyU3R5bGU6OkJFRk9SRSk7CiAgICAgICAgICAgICBjaCA9IHBzMSAmJiAqcHMx
ID09ICpwczIgPyBOb0NoYW5nZSA6IE5vSW5oZXJpdDsKICAgICAgICAgfQogICAgIH0KICAgICBp
ZiAoY2ggPT0gTm9DaGFuZ2UgJiYgczEtPmhhc1BzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpBRlRF
UikpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHBzMiA9IHMyLT5nZXRQc2V1ZG9TdHlsZShSZW5k
ZXJTdHlsZTo6QUZURVIpOworICAgICAgICBSZW5kZXJTdHlsZSogcHMyID0gczItPmdldENhY2hl
ZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpBRlRFUik7CiAgICAgICAgIGlmICghcHMyKQogICAg
ICAgICAgICAgY2ggPSBOb0luaGVyaXQ7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgUmVu
ZGVyU3R5bGUqIHBzMSA9IHMxLT5nZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6QUZURVIpOwor
ICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBzMSA9IHMxLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShS
ZW5kZXJTdHlsZTo6QUZURVIpOwogICAgICAgICAgICAgY2ggPSBwczIgJiYgKnBzMSA9PSAqcHMy
ID8gTm9DaGFuZ2UgOiBOb0luaGVyaXQ7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDI4LDEwICsx
MDI4LDEwIEBAIHZvaWQgTm9kZTo6Y3JlYXRlUmVuZGVyZXJJZk5lZWRlZCgpCiAgICAgICAgICYm
IHBhcmVudC0+Y2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcih0aGlzKQogI2VuZGlmCiAgICAgICAg
ICkgewotICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZvclJlbmRlcmVyKHBhcmVu
dFJlbmRlcmVyKTsKLSAgICAgICAgaWYgKHJlbmRlcmVySXNOZWVkZWQoc3R5bGUpKSB7Ci0gICAg
ICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByID0gY3JlYXRlUmVuZGVyZXIoZG9jdW1lbnQoKS0+
cmVuZGVyQXJlbmEoKSwgc3R5bGUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRSZW5k
ZXJlci0+aXNDaGlsZEFsbG93ZWQociwgc3R5bGUpKQorICAgICAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IHN0eWxlID0gc3R5bGVGb3JSZW5kZXJlcihwYXJlbnRSZW5kZXJlcik7CisgICAgICAgIGlm
IChyZW5kZXJlcklzTmVlZGVkKHN0eWxlLmdldCgpKSkgeworICAgICAgICAgICAgaWYgKFJlbmRl
ck9iamVjdCogciA9IGNyZWF0ZVJlbmRlcmVyKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCksIHN0
eWxlLmdldCgpKSkgeworICAgICAgICAgICAgICAgIGlmICghcGFyZW50UmVuZGVyZXItPmlzQ2hp
bGRBbGxvd2VkKHIsIHN0eWxlLmdldCgpKSkKICAgICAgICAgICAgICAgICAgICAgci0+ZGVzdHJv
eSgpOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBzZXRSZW5k
ZXJlcihyKTsKQEAgLTEwNDAsMTcgKzEwNDAsMTQgQEAgdm9pZCBOb2RlOjpjcmVhdGVSZW5kZXJl
cklmTmVlZGVkKCkKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgc3R5bGUtPmRlcmVmKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpOwogICAgIH0K
IH0KIAotUmVuZGVyU3R5bGUqIE5vZGU6OnN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBw
YXJlbnQpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBOb2RlOjpzdHlsZUZvclJlbmRlcmVyKFJl
bmRlck9iamVjdCogcGFyZW50KQogewogICAgIGlmIChpc0VsZW1lbnROb2RlKCkpCiAgICAgICAg
IHJldHVybiBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudChzdGF0
aWNfY2FzdDxFbGVtZW50Kj4odGhpcykpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHBhcmVu
dC0+c3R5bGUoKTsKLSAgICBzdHlsZS0+cmVmKCk7Ci0gICAgcmV0dXJuIHN0eWxlOworICAgIHJl
dHVybiBwYXJlbnQtPnN0eWxlKCk7CiB9CiAKIGJvb2wgTm9kZTo6cmVuZGVyZXJJc05lZWRlZChS
ZW5kZXJTdHlsZSAqc3R5bGUpCkBAIC0xMDY5LDcgKzEwNjYsNyBAQCBSZW5kZXJTdHlsZSogTm9k
ZTo6bm9uUmVuZGVyZXJSZW5kZXJTdHlsCiAgICAgcmV0dXJuIDA7IAogfSAgIAogCi12b2lkIE5v
ZGU6OnNldFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBzKQordm9pZCBOb2RlOjpzZXRSZW5kZXJT
dHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzKQogewogICAgIGlmIChtX3JlbmRlcmVyKQog
ICAgICAgICBtX3JlbmRlcmVyLT5zZXRBbmltYXRhYmxlU3R5bGUocyk7IApJbmRleDogZG9tL05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBkb20vTm9kZS5oCShyZXZpc2lvbiAzNzU4NikKKysrIGRvbS9O
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwOCw3ICs0MDgsNyBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZSgpOwogICAgIHZvaWQgY3JlYXRlUmVuZGVyZXJJZk5lZWRl
ZCgpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZUZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcGFy
ZW50KTsKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvclJlbmRlcmVyKFJlbmRl
ck9iamVjdCogcGFyZW50KTsKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5k
ZXJTdHlsZSopOwogI2lmIEVOQUJMRShTVkcpCiAgICAgdmlydHVhbCBib29sIGNoaWxkU2hvdWxk
Q3JlYXRlUmVuZGVyZXIoTm9kZSopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTQxNyw3ICs0
MTcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gV3JhcHBlciBmb3Igbm9kZXMgdGhhdCBkb24n
dCBoYXZlIGEgcmVuZGVyZXIsIGJ1dCBzdGlsbCBjYWNoZSB0aGUgc3R5bGUgKGxpa2UgSFRNTE9w
dGlvbkVsZW1lbnQpLgogICAgIFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSgpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBzZXRSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSopOworICAgIHZpcnR1YWwg
dm9pZCBzZXRSZW5kZXJTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPik7CiAKICAgICB2aXJ0
dWFsIFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlKCk7CiAKSW5kZXg6IGh0bWwvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgaHRtbC9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgxLDIxICsxMTgxLDE3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGMKICAgICAKICAgICAvLyBNYXAgdGhlIDxj
YW52YXM+IGZvbnQgaW50byB0aGUgdGV4dCBzdHlsZS4gSWYgdGhlIGZvbnQgdXNlcyBrZXl3b3Jk
cyBsaWtlIGxhcmdlci9zbWFsbGVyLCB0aGVzZSB3aWxsIHdvcmsKICAgICAvLyByZWxhdGl2ZSB0
byB0aGUgY2FudmFzLgotICAgIFJlbmRlckFyZW5hKiBhcmVuYSA9IG1fY2FudmFzLT5kb2N1bWVu
dCgpLT5yZW5kZXJBcmVuYSgpOwotICAgIFJlbmRlclN0eWxlKiBuZXdTdHlsZSA9IG5ldyAoYXJl
bmEpIFJlbmRlclN0eWxlKCk7Ci0gICAgbmV3U3R5bGUtPnJlZigpOworICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgaWYgKG1fY2Fu
dmFzLT5jb21wdXRlZFN0eWxlKCkpCiAgICAgICAgIG5ld1N0eWxlLT5zZXRGb250RGVzY3JpcHRp
b24obV9jYW52YXMtPmNvbXB1dGVkU3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkpOwogCiAgICAg
Ly8gTm93IG1hcCB0aGUgZm9udCBwcm9wZXJ0eSBpbnRvIHRoZSBzdHlsZS4KICAgICBDU1NTdHls
ZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yID0gbV9jYW52YXMtPmRvY3VtZW50KCktPnN0eWxlU2Vs
ZWN0b3IoKTsKLSAgICBzdHlsZVNlbGVjdG9yLT5hcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9w
ZXJ0eUZvbnQsIHRlbXBEZWNsLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udCku
Z2V0KCksIG5ld1N0eWxlKTsKKyAgICBzdHlsZVNlbGVjdG9yLT5hcHBseVByb3BlcnR5VG9TdHls
ZShDU1NQcm9wZXJ0eUZvbnQsIHRlbXBEZWNsLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5Rm9udCkuZ2V0KCksIG5ld1N0eWxlLmdldCgpKTsKICAgICAKICAgICBzdGF0ZSgpLm1fZm9u
dCA9IG5ld1N0eWxlLT5mb250KCk7CiAgICAgc3RhdGUoKS5tX2ZvbnQudXBkYXRlKHN0eWxlU2Vs
ZWN0b3ItPmZvbnRTZWxlY3RvcigpKTsKICAgICBzdGF0ZSgpLm1fcmVhbGl6ZWRGb250ID0gdHJ1
ZTsKLQotICAgIG5ld1N0eWxlLT5kZXJlZihhcmVuYSk7CiAgICAgCiAgICAgLy8gU2V0IHRoZSBm
b250IGluIHRoZSBncmFwaGljcyBjb250ZXh0LgogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRy
YXdpbmdDb250ZXh0KCk7CkluZGV4OiBodG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAJKHJldmlzaW9uIDM3NTg2KQor
KysgaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDM2
ICsxMzIsMjUgQEAgYm9vbCBIVE1MT3B0R3JvdXBFbGVtZW50OjpjaGVja0RURChjb25zdAogCiB2
b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6OmF0dGFjaCgpCiB7Ci0gICAgaWYgKHBhcmVudE5vZGUo
KS0+cmVuZGVyU3R5bGUoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHlsZUZv
clJlbmRlcmVyKDApOwotICAgICAgICBzZXRSZW5kZXJTdHlsZShzdHlsZSk7Ci0gICAgICAgIHN0
eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKLSAgICB9CisgICAgaWYgKHBh
cmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKSkKKyAgICAgICAgc2V0UmVuZGVyU3R5bGUoc3R5bGVG
b3JSZW5kZXJlcigwKSk7CiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0YWNoKCk7CiB9
CiAKIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudDo6ZGV0YWNoKCkKIHsKLSAgICBpZiAobV9zdHls
ZSkgewotICAgICAgICBtX3N0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsK
LSAgICAgICAgbV9zdHlsZSA9IDA7Ci0gICAgfQorICAgIG1fc3R5bGUuY2xlYXIoKTsKICAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZXRhY2goKTsKIH0KIAotdm9pZCBIVE1MT3B0R3JvdXBF
bGVtZW50OjpzZXRSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogbmV3U3R5bGUpCit2b2lkIEhUTUxP
cHRHcm91cEVsZW1lbnQ6OnNldFJlbmRlclN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IG5l
d1N0eWxlKQogewotICAgIFJlbmRlclN0eWxlKiBvbGRTdHlsZSA9IG1fc3R5bGU7CiAgICAgbV9z
dHlsZSA9IG5ld1N0eWxlOwotICAgIGlmIChuZXdTdHlsZSkKLSAgICAgICAgbmV3U3R5bGUtPnJl
ZigpOwotICAgIGlmIChvbGRTdHlsZSkKLSAgICAgICAgb2xkU3R5bGUtPmRlcmVmKGRvY3VtZW50
KCktPnJlbmRlckFyZW5hKCkpOwogfQogICAgIAogUmVuZGVyU3R5bGUqIEhUTUxPcHRHcm91cEVs
ZW1lbnQ6Om5vblJlbmRlcmVyUmVuZGVyU3R5bGUoKSBjb25zdCAKIHsgCi0gICAgcmV0dXJuIG1f
c3R5bGU7IAorICAgIHJldHVybiBtX3N0eWxlLmdldCgpOyAKIH0KIAogU3RyaW5nIEhUTUxPcHRH
cm91cEVsZW1lbnQ6Omdyb3VwTGFiZWxUZXh0KCkgY29uc3QKSW5kZXg6IGh0bWwvSFRNTE9wdEdy
b3VwRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5oCShy
ZXZpc2lvbiAzNzU4NikKKysrIGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJ
c05lZWRlZChSZW5kZXJTdHlsZSopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lk
IGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVuZGVy
U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4pOwogCiAgICAgdmlydHVhbCBib29sIGluc2Vy
dEJlZm9yZShQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiByZWZDaGlsZCwgRXhjZXB0
aW9uQ29kZSYsIGJvb2wgc2hvdWxkTGF6eUF0dGFjaCA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIGJv
b2wgcmVwbGFjZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIG9sZENoaWxk
LCBFeGNlcHRpb25Db2RlJiwgYm9vbCBzaG91bGRMYXp5QXR0YWNoID0gZmFsc2UpOwpAQCAtNjIs
NyArNjIsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgcmVjYWxjU2VsZWN0T3B0aW9ucygp
OwogCi0gICAgUmVuZGVyU3R5bGUqIG1fc3R5bGU7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBt
X3N0eWxlOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogaHRtbC9IVE1MT3B0aW9uRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9u
IDM3NTg2KQorKysgaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDIwICs1NywxNCBAQCBib29sIEhUTUxPcHRpb25FbGVtZW50OjpjaGVja0RURChjb25zdCBO
CiAKIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OmF0dGFjaCgpCiB7Ci0gICAgaWYgKHBhcmVudE5v
ZGUoKS0+cmVuZGVyU3R5bGUoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBzdHls
ZUZvclJlbmRlcmVyKDApOwotICAgICAgICBzZXRSZW5kZXJTdHlsZShzdHlsZSk7Ci0gICAgICAg
IHN0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKLSAgICB9CisgICAgaWYg
KHBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKSkKKyAgICAgICAgc2V0UmVuZGVyU3R5bGUoc3R5
bGVGb3JSZW5kZXJlcigwKSk7CiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXR0YWNoKCk7
CiB9CiAKIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OmRldGFjaCgpCiB7Ci0gICAgaWYgKG1fc3R5
bGUpIHsKLSAgICAgICAgbV9zdHlsZS0+ZGVyZWYoZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSk7
Ci0gICAgICAgIG1fc3R5bGUgPSAwOwotICAgIH0KKyAgICBtX3N0eWxlLmNsZWFyKCk7CiAgICAg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGV0YWNoKCk7CiB9CiAKQEAgLTIzNSwxOSArMjI5LDE0
IEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldExhYmVsKGNvbnN0IFMKICAgICBzZXRBdHRy
aWJ1dGUobGFiZWxBdHRyLCB2YWx1ZSk7CiB9CiAKLXZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNl
dFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKK3ZvaWQgSFRNTE9wdGlvbkVsZW1l
bnQ6OnNldFJlbmRlclN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlKQogewot
ICAgIFJlbmRlclN0eWxlKiBvbGRTdHlsZSA9IG1fc3R5bGU7CiAgICAgbV9zdHlsZSA9IG5ld1N0
eWxlOwotICAgIGlmIChuZXdTdHlsZSkKLSAgICAgICAgbmV3U3R5bGUtPnJlZigpOwotICAgIGlm
IChvbGRTdHlsZSkKLSAgICAgICAgb2xkU3R5bGUtPmRlcmVmKGRvY3VtZW50KCktPnJlbmRlckFy
ZW5hKCkpOwogfQogCiBSZW5kZXJTdHlsZSogSFRNTE9wdGlvbkVsZW1lbnQ6Om5vblJlbmRlcmVy
UmVuZGVyU3R5bGUoKSBjb25zdCAKIHsgCi0gICAgcmV0dXJuIG1fc3R5bGU7IAorICAgIHJldHVy
biBtX3N0eWxlLmdldCgpOyAKIH0KIAogU3RyaW5nIEhUTUxPcHRpb25FbGVtZW50OjpvcHRpb25U
ZXh0KCkKSW5kZXg6IGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1s
L0hUTUxPcHRpb25FbGVtZW50LmgJKHJldmlzaW9uIDM3NTg2KQorKysgaHRtbC9IVE1MT3B0aW9u
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2go
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0UmVuZGVyU3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4pOwogICAg
IAogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3Q7CiAKQEAgLTg2
LDcgKzg2LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBTdHJpbmcgbV92YWx1ZTsKICAgICBib29s
IG1fc2VsZWN0ZWQ7Ci0gICAgUmVuZGVyU3R5bGUqIG1fc3R5bGU7CisgICAgUmVmUHRyPFJlbmRl
clN0eWxlPiBtX3N0eWxlOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogcGFnZS9hbmltYXRp
b24vQW5pbWF0aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlv
bkJhc2UuaAkocmV2aXNpb24gMzc1ODYpCisrKyBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw3ICsxODEsNyBAQCBwdWJsaWM6CiAgICAgZG91Ymxl
IHByb2dyZXNzKGRvdWJsZSBzY2FsZSwgZG91YmxlIG9mZnNldCwgY29uc3QgVGltaW5nRnVuY3Rp
b24qKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlv
biosIFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVu
ZGVyU3R5bGUqJiBhbmltYXRlZFN0eWxlKSB7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlZlB0cjxSZW5kZXJTdHlsZT4mIGFuaW1h
dGVkU3R5bGUpIHsgfQogCiAgICAgdmlydHVhbCBib29sIHNob3VsZEZpcmVFdmVudHMoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogCkluZGV4OiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250
cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9s
bGVyLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250
cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIzLDcgKzIyMyw3IEBAIHZvaWQgQW5pbWF0
aW9uQ29udHJvbGxlcjo6Y2FuY2VsQW5pbWF0aW8KICAgICB9CiB9CiAKLVJlbmRlclN0eWxlKiBB
bmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IEFuaW1h
dGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwg
UmVuZGVyU3R5bGUqIG5ld1N0eWxlKQogeyAgICAKICAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBp
ZiB3ZSdyZSBpbiB0aGUgY2FjaGUKICAgICBpZiAoIXJlbmRlcmVyLT5kb2N1bWVudCgpIHx8IHJl
bmRlcmVyLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKQpAQCAtMjM0LDcgKzIzNCw3IEBAIFJl
bmRlclN0eWxlKiBBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGUKICAgICBpZiAoKCFvbGRTdHls
ZSB8fCAoIW9sZFN0eWxlLT5hbmltYXRpb25zKCkgJiYgIW9sZFN0eWxlLT50cmFuc2l0aW9ucygp
KSkgJiYgKCFuZXdTdHlsZS0+YW5pbWF0aW9ucygpICYmICFuZXdTdHlsZS0+dHJhbnNpdGlvbnMo
KSkpCiAgICAgICAgIHJldHVybiBuZXdTdHlsZTsKIAotICAgIFJlbmRlclN0eWxlKiBibGVuZGVk
U3R5bGUgPSBuZXdTdHlsZTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGJsZW5kZWRTdHlsZSA9
IG5ld1N0eWxlOwogICAgIAogICAgIC8vIEZldGNoIG91ciBjdXJyZW50IHNldCBvZiBpbXBsaWNp
dCBhbmltYXRpb25zIGZyb20gYSBoYXNodGFibGUuICBXZSB0aGVuIGNvbXBhcmUgdGhlbQogICAg
IC8vIGFnYWluc3QgdGhlIGFuaW1hdGlvbnMgaW4gdGhlIHN0eWxlIGFuZCBtYWtlIHN1cmUgd2Un
cmUgaW4gc3luYy4gIElmIGRlc3RpbmF0aW9uIHZhbHVlcwpAQCAtMjU0LDcgKzI1NCw3IEBAIFJl
bmRlclN0eWxlKiBBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGUKICAgICAgICAgaWYgKGJsZW5k
ZWRTdHlsZS0+aGFzQXV0b1pJbmRleCgpICYmIChibGVuZGVkU3R5bGUtPm9wYWNpdHkoKSA8IDEu
MGYgfHwgYmxlbmRlZFN0eWxlLT5oYXNUcmFuc2Zvcm0oKSkpCiAgICAgICAgICAgICBibGVuZGVk
U3R5bGUtPnNldFpJbmRleCgwKTsKICAgICB9Ci0gICAgcmV0dXJuIGJsZW5kZWRTdHlsZTsKKyAg
ICByZXR1cm4gYmxlbmRlZFN0eWxlLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBBbmltYXRpb25Db250
cm9sbGVyOjpzZXRBbmltYXRpb25TdGFydFRpbWUoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgZG91
YmxlIHQpCkluZGV4OiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAz
NzU4NikKKysrIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksOCBAQAogI2lmbmRlZiBBbmltYXRpb25Db250cm9sbGVyX2gKICNk
ZWZpbmUgQW5pbWF0aW9uQ29udHJvbGxlcl9oCiAKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOwpAQCAtNDMsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgfkFuaW1hdGlvbkNvbnRyb2xsZXIo
KTsKIAogICAgIHZvaWQgY2FuY2VsQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqKTsKLSAgICBSZW5k
ZXJTdHlsZSogdXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogbmV3
U3R5bGUpOworICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHVwZGF0ZUFuaW1hdGlvbnMoUmVu
ZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKIAogICAgIHZvaWQgc2V0QW5pbWF0
aW9uU3RhcnRUaW1lKFJlbmRlck9iamVjdCosIGRvdWJsZSB0KTsKICAgICB2b2lkIHNldFRyYW5z
aXRpb25TdGFydFRpbWUoUmVuZGVyT2JqZWN0KiwgaW50IHByb3BlcnR5LCBkb3VibGUgdCk7Cklu
ZGV4OiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDM3NTg2KQor
KysgcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgfkNvbXBvc2l0ZUFuaW1hdGlvblBy
aXZhdGUoKTsKIAotICAgIFJlbmRlclN0eWxlKiBhbmltYXRlKFJlbmRlck9iamVjdCosIGNvbnN0
IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7Cisg
ICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZShSZW5kZXJPYmplY3QqLCBSZW5kZXJT
dHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOwogCiAgICAgdm9p
ZCBzZXRBbmltYXRpbmcoYm9vbCk7CiAgICAgYm9vbCBpc0FuaW1hdGluZygpIGNvbnN0OwpAQCAt
NzksOCArNzksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFi
bGUoYm9vbCk7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIHVwZGF0ZVRyYW5zaXRpb25zKFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0
YXJnZXRTdHlsZSk7Ci0gICAgdm9pZCB1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdl
dFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlck9iamVjdCosIFJlbmRl
clN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisgICAgdm9p
ZCB1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIGN1
cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKIAogcHJpdmF0ZToKICAgICB0
eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8SW1wbGljaXRBbmltYXRpb24+ID4gQ1NTUHJvcGVy
dHlUcmFuc2l0aW9uc01hcDsKQEAgLTEwMCw3ICsxMDAsNyBAQCBDb21wb3NpdGVBbmltYXRpb25Q
cml2YXRlOjp+Q29tcG9zaXRlQW5pCiAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2xlYXIoKTsK
IH0KICAgICAKLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6dXBkYXRlVHJhbnNpdGlv
bnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHls
ZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQordm9pZCBDb21wb3NpdGVBbmltYXRpb25Qcml2
YXRlOjp1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHls
ZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCiB7CiAgICAgLy8gSWYg
Y3VycmVudFN0eWxlIGlzIG51bGwsIHdlIGRvbid0IGRvIHRyYW5zaXRpb25zCiAgICAgaWYgKCFj
dXJyZW50U3R5bGUgfHwgIXRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygpKQpAQCAtMTMzLDcgKzEz
Myw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6dXBkYXRlVHIKICAgICAgICAg
ICAgIC8vIGFuZCB3ZSBoYXZlIHRvIHVzZSB0aGUgdW5hbmltYXRlZFN0eWxlIGZyb20gdGhlIGFu
aW1hdGlvbi4gV2UgZG8gdGhlIHRlc3QKICAgICAgICAgICAgIC8vIGFnYWluc3QgdGhlIHVuYW5p
bWF0ZWQgc3R5bGUgaGVyZSwgYnV0IHdlICJvdmVycmlkZSIgdGhlIHRyYW5zaXRpb24gbGF0ZXIu
CiAgICAgICAgICAgICBjb25zdCBLZXlmcmFtZUFuaW1hdGlvbioga2V5ZnJhbWVBbmltID0gZ2V0
QW5pbWF0aW9uRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgICAgICAgICBjb25zdCBSZW5kZXJTdHls
ZSogZnJvbVN0eWxlID0ga2V5ZnJhbWVBbmltID8ga2V5ZnJhbWVBbmltLT51bmFuaW1hdGVkU3R5
bGUoKSA6IGN1cnJlbnRTdHlsZTsKKyAgICAgICAgICAgIFJlbmRlclN0eWxlKiBmcm9tU3R5bGUg
PSBrZXlmcmFtZUFuaW0gPyBrZXlmcmFtZUFuaW0tPnVuYW5pbWF0ZWRTdHlsZSgpIDogY3VycmVu
dFN0eWxlOwogCiAgICAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYSBjdXJyZW50IHRyYW5z
aXRpb24gZm9yIHRoaXMgcHJvcAogICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGltcGxB
bmltID0gbV90cmFuc2l0aW9ucy5nZXQocHJvcCkuZ2V0KCk7CkBAIC0xNjgsNyArMTY4LDcgQEAg
dm9pZCBDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVUcgogICAgIH0KIH0KIAotdm9p
ZCBDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVu
ZGVyU3R5bGUqIHRhcmdldFN0eWxlKQordm9pZCBDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp1
cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5
bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQogewogICAgIC8vIE5v
dGhpbmcgdG8gZG8gaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgYW5pbWF0aW9ucywgYW5kIGRpZG4ndCBo
YXZlIGFueSBiZWZvcmUKICAgICBpZiAobV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpICYm
ICF0YXJnZXRTdHlsZS0+aGFzQW5pbWF0aW9ucygpKQpAQCAtMjI2LDkgKzIyNiw5IEBAIHZvaWQg
Q29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6dXBkYXRlS2UKICAgICAgICAgbV9rZXlmcmFtZUFu
aW1hdGlvbnMucmVtb3ZlKGFuaW1zVG9CZVJlbW92ZWRbal0pOwogfQogCi1SZW5kZXJTdHlsZSog
Q29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6YW5pbWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVy
LCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5
bGUpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjph
bmltYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUs
IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKIHsKLSAgICBSZW5kZXJTdHlsZSogcmVzdWx0U3R5
bGUgPSAwOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVzdWx0U3R5bGU7CiAKICAgICAvLyBV
cGRhdGUgYW5pbWF0aW9ucyBmaXJzdCBzbyB3ZSBjYW4gc2VlIGlmIGFueSB0cmFuc2l0aW9ucyBh
cmUgb3ZlcnJpZGRlbgogICAgIHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhyZW5kZXJlciwgY3Vy
cmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7CkBAIC01MjEsNyArNTIxLDcgQEAgQ29tcG9zaXRlQW5p
bWF0aW9uOjp+Q29tcG9zaXRlQW5pbWF0aW9uKAogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKLVJl
bmRlclN0eWxlKiBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdl
dFN0eWxlKQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjphbmlt
YXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJl
bmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKIHsKICAgICByZXR1cm4gbV9kYXRhLT5hbmltYXRlKHJl
bmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKIH0KSW5kZXg6IHBhZ2UvYW5pbWF0
aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvYW5pbWF0aW9uL0Nv
bXBvc2l0ZUFuaW1hdGlvbi5oCShyZXZpc2lvbiAzNzU4NikKKysrIHBhZ2UvYW5pbWF0aW9uL0Nv
bXBvc2l0ZUFuaW1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1Ymxp
YzoKICAgICBDb21wb3NpdGVBbmltYXRpb24oQW5pbWF0aW9uQ29udHJvbGxlciogYW5pbWF0aW9u
Q29udHJvbGxlcik7CiAgICAgfkNvbXBvc2l0ZUFuaW1hdGlvbigpOwogCi0gICAgUmVuZGVyU3R5
bGUqIGFuaW1hdGUoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHls
ZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBhbmltYXRlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRl
clN0eWxlKiB0YXJnZXRTdHlsZSk7CiAgICAgYm9vbCBpc0FuaW1hdGluZygpIGNvbnN0OwogCiAg
ICAgdm9pZCBzZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoYm9vbCk7CkluZGV4OiBwYWdlL2Fu
aW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9hbmltYXRp
b24vSW1wbGljaXRBbmltYXRpb24uY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHBhZ2UvYW5pbWF0
aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMjkgKzM0LDE4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW1wbGljaXRBbmltYXRpb246OkltcGxpY2l0
QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiogdHJhbnNpdGlvbiwgaW50IGFuaW1hdGluZ1Byb3Bl
cnR5LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmlt
LCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlKQorSW1wbGljaXRBbmltYXRpb246OkltcGxp
Y2l0QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiogdHJhbnNpdGlvbiwgaW50IGFuaW1hdGluZ1By
b3BlcnR5LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBB
bmltLCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlKQogICAgIDogQW5pbWF0aW9uQmFzZSh0cmFuc2l0
aW9uLCByZW5kZXJlciwgY29tcEFuaW0pCiAgICAgLCBtX3RyYW5zaXRpb25Qcm9wZXJ0eSh0cmFu
c2l0aW9uLT5wcm9wZXJ0eSgpKQogICAgICwgbV9hbmltYXRpbmdQcm9wZXJ0eShhbmltYXRpbmdQ
cm9wZXJ0eSkKICAgICAsIG1fb3ZlcnJpZGRlbihmYWxzZSkKLSAgICAsIG1fZnJvbVN0eWxlKDAp
Ci0gICAgLCBtX3RvU3R5bGUoMCkKKyAgICAsIG1fZnJvbVN0eWxlKGZyb21TdHlsZSkKIHsKICAg
ICBBU1NFUlQoYW5pbWF0aW5nUHJvcGVydHkgIT0gY0FuaW1hdGVBbGwpOwotICAgIGlmIChmcm9t
U3R5bGUpIHsKLSAgICAgICAgbV9mcm9tU3R5bGUgPSBmcm9tU3R5bGU7Ci0gICAgICAgIGNvbnN0
X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX2Zyb21TdHlsZSktPnJlZigpOwotICAgIH0KIH0KIAogSW1w
bGljaXRBbmltYXRpb246On5JbXBsaWNpdEFuaW1hdGlvbigpCiB7Ci0gICAgLy8gR2V0IHJpZCBv
ZiBzdHlsZSByZWZzCi0gICAgaWYgKG1fZnJvbVN0eWxlKQotICAgICAgICBjb25zdF9jYXN0PFJl
bmRlclN0eWxlKj4obV9mcm9tU3R5bGUpLT5kZXJlZihyZW5kZXJlcigpLT5yZW5kZXJBcmVuYSgp
KTsKLSAgICBpZiAobV90b1N0eWxlKQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4o
bV90b1N0eWxlKS0+ZGVyZWYocmVuZGVyZXIoKS0+cmVuZGVyQXJlbmEoKSk7Ci0KICAgICAvLyBE
byB0aGUgY2xlYW51cCBoZXJlIGluc3RlYWQgb2YgaW4gdGhlIGJhc2UgY2xhc3Mgc28gdGhlIHNw
ZWNpYWxpemVkIG1ldGhvZHMgZ2V0IGNhbGxlZAogICAgIGlmICghcG9zdEFjdGl2ZSgpKQogICAg
ICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dEVuZEFuaW1hdGlvbiwg
LTEpOwpAQCAtNjcsOCArNTYsOCBAQCBib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzaG91bGRTZW5k
RXZlbnRGCiAgICAgcmV0dXJuIG1fb2JqZWN0LT5kb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUo
aW5MaXN0ZW5lclR5cGUpOwogfQogCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKENv
bXBvc2l0ZUFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25z
dCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlbmRlclN0eWxlKiYgYW5pbWF0
ZWRTdHlsZSkKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0
aW9uKiBhbmltYXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJy
ZW50U3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiB0
YXJnZXRTdHlsZSwgUmVmUHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKIHsKICAgICBp
ZiAocGF1c2VkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTg1LDkgKzc0LDkgQEAgdm9pZCBJbXBs
aWNpdEFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdAogICAgIC8vIFJ1biBhIGN5Y2xlIG9mIGFu
aW1hdGlvbi4KICAgICAvLyBXZSBrbm93IHdlIHdpbGwgbmVlZCBhIG5ldyByZW5kZXIgc3R5bGUs
IHNvIG1ha2Ugb25lIGlmIG5lZWRlZAogICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKLSAgICAgICAg
YW5pbWF0ZWRTdHlsZSA9IG5ldyAocmVuZGVyZXItPnJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxl
KCp0YXJnZXRTdHlsZSk7CisgICAgICAgIGFuaW1hdGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xv
bmUodGFyZ2V0U3R5bGUpOwogCi0gICAgaWYgKGJsZW5kUHJvcGVydGllcyh0aGlzLCBtX2FuaW1h
dGluZ1Byb3BlcnR5LCBhbmltYXRlZFN0eWxlLCBtX2Zyb21TdHlsZSwgbV90b1N0eWxlLCBwcm9n
cmVzcygxLCAwLCAwKSkpCisgICAgaWYgKGJsZW5kUHJvcGVydGllcyh0aGlzLCBtX2FuaW1hdGlu
Z1Byb3BlcnR5LCBhbmltYXRlZFN0eWxlLmdldCgpLCBtX2Zyb21TdHlsZS5nZXQoKSwgbV90b1N0
eWxlLmdldCgpLCBwcm9ncmVzcygxLCAwLCAwKSkpCiAgICAgICAgIHNldEFuaW1hdGluZygpOwog
fQogCkBAIC0xMzUsMTcgKzEyNCwxMyBAQCBib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzZW5kVHJh
bnNpdGlvbkV2CiAgICAgcmV0dXJuIGZhbHNlOyAvLyBEaWRuJ3QgZGlzcGF0Y2ggYW4gZXZlbnQK
IH0KIAotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6cmVzZXQoY29uc3QgUmVuZGVyU3R5bGUqIHRv
KQordm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6cmVzZXQoUmVuZGVyU3R5bGUqIHRvKQogewogICAg
IEFTU0VSVCh0byk7CiAgICAgQVNTRVJUKG1fZnJvbVN0eWxlKTsKICAgICAKLSAgICBpZiAobV90
b1N0eWxlKQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4obV90b1N0eWxlKS0+ZGVy
ZWYocmVuZGVyZXIoKS0+cmVuZGVyQXJlbmEoKSk7CiAKLSAgICBtX3RvU3R5bGUgPSB0bzsgICAg
ICAgLy8gSXQgaXMgcmVhZC1vbmx5LCBvdGhlciB0aGFuIHRoZSByZWYKLSAgICBpZiAobV90b1N0
eWxlKQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4obV90b1N0eWxlKS0+cmVmKCk7
CisgICAgbV90b1N0eWxlID0gdG87CiAKICAgICAvLyBSZXN0YXJ0IHRoZSB0cmFuc2l0aW9uCiAg
ICAgaWYgKG1fZnJvbVN0eWxlICYmIG1fdG9TdHlsZSkKQEAgLTE3MSwxMiArMTU2LDEyIEBAIGJv
b2wgSW1wbGljaXRBbmltYXRpb246OmFmZmVjdHNQcm9wZXJ0eSgKIAogYm9vbCBJbXBsaWNpdEFu
aW1hdGlvbjo6aXNUYXJnZXRQcm9wZXJ0eUVxdWFsKGludCBwcm9wLCBjb25zdCBSZW5kZXJTdHls
ZSogdGFyZ2V0U3R5bGUpCiB7Ci0gICAgcmV0dXJuIHByb3BlcnRpZXNFcXVhbChwcm9wLCBtX3Rv
U3R5bGUsIHRhcmdldFN0eWxlKTsKKyAgICByZXR1cm4gcHJvcGVydGllc0VxdWFsKHByb3AsIG1f
dG9TdHlsZS5nZXQoKSwgdGFyZ2V0U3R5bGUpOwogfQogCiB2b2lkIEltcGxpY2l0QW5pbWF0aW9u
OjpibGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKGludCBwcm9wLCBSZW5kZXJTdHlsZSogY3VycmVu
dFN0eWxlKQogewotICAgIGJsZW5kUHJvcGVydGllcyh0aGlzLCBwcm9wLCBjdXJyZW50U3R5bGUs
IG1fZnJvbVN0eWxlLCBtX3RvU3R5bGUsIHByb2dyZXNzKDEsIDAsIDApKTsKKyAgICBibGVuZFBy
b3BlcnRpZXModGhpcywgcHJvcCwgY3VycmVudFN0eWxlLCBtX2Zyb21TdHlsZS5nZXQoKSwgbV90
b1N0eWxlLmdldCgpLCBwcm9ncmVzcygxLCAwLCAwKSk7CiB9CiAKIHZvaWQgSW1wbGljaXRBbmlt
YXRpb246OnZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rpb25MaXN0KCkKSW5kZXg6IHBhZ2UvYW5pbWF0
aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9hbmltYXRpb24vSW1w
bGljaXRBbmltYXRpb24uaAkocmV2aXNpb24gMzc1ODYpCisrKyBwYWdlL2FuaW1hdGlvbi9JbXBs
aWNpdEFuaW1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIC8vIGZvciBhIHNpbmdsZSBSZW5kZXJPYmplY3QuCiBjbGFzcyBJbXBsaWNp
dEFuaW1hdGlvbiA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJbXBsaWNpdEFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlvbiogYW5p
bWF0aW9uLCBpbnQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIENv
bXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSog
ZnJvbVN0eWxlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVh
dGUoY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGludCBhbmltYXRpbmdQcm9wZXJ0eSwgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRp
b24sIFJlbmRlclN0eWxlKiBmcm9tU3R5bGUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEltcGxpY2l0QW5pbWF0aW9uKGFuaW1hdGlvbiwgYW5pbWF0aW5nUHJvcGVydHksIHJl
bmRlcmVyLCBjb21wb3NpdGVBbmltYXRpb24sIGZyb21TdHlsZSkpOwogICAgIH07CkBAIC00OCw4
ICs0OCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvbkVuZChkb3Vi
bGUgZWxhcHNlZFRpbWUpOwogCi0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoQ29tcG9zaXRlQW5p
bWF0aW9uKiwgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZW5kZXJTdHlsZSomIGFuaW1hdGVkU3R5
bGUpOwotICAgIHZpcnR1YWwgdm9pZCByZXNldChjb25zdCBSZW5kZXJTdHlsZSogdG8pOworICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlck9iamVjdCos
IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVm
UHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSk7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0
KFJlbmRlclN0eWxlKiB0byk7CiAKICAgICB2b2lkIHNldE92ZXJyaWRkZW4oYm9vbCk7CiAgICAg
dmlydHVhbCBib29sIG92ZXJyaWRkZW4oKSBjb25zdCB7IHJldHVybiBtX292ZXJyaWRkZW47IH0K
QEAgLTcxLDcgKzcxLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgdmFsaWRhdGVUcmFuc2Zvcm1G
dW5jdGlvbkxpc3QoKTsKIAogcHJpdmF0ZToKLSAgICBJbXBsaWNpdEFuaW1hdGlvbihjb25zdCBB
bmltYXRpb24qLCBpbnQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlck9iamVjdCosIENvbXBvc2l0
ZUFuaW1hdGlvbiosIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUpOyAgICAKKyAgICBJbXBs
aWNpdEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24qLCBpbnQgYW5pbWF0aW5nUHJvcGVydHksIFJl
bmRlck9iamVjdCosIENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlclN0eWxlKiBmcm9tU3R5bGUp
OyAgICAKICAgICB2aXJ0dWFsIH5JbXBsaWNpdEFuaW1hdGlvbigpOwogCiAgICAgaW50IG1fdHJh
bnNpdGlvblByb3BlcnR5OyAgIC8vIFRyYW5zaXRpb24gcHJvcGVydHkgYXMgc3BlY2lmaWVkIGlu
IHRoZSBSZW5kZXJTdHlsZS4gTWF5IGJlIGNBbmltYXRlQWxsCkBAIC03OSw4ICs3OSw4IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtX292ZXJyaWRkZW47ICAgICAgICAgIC8vIHRydWUgd2hlbiB0aGVy
ZSBpcyBhIGtleWZyYW1lIGFuaW1hdGlvbiB0aGF0IG92ZXJyaWRlcyB0aGUgdHJhbnNpdGlvbmlu
ZyBwcm9wZXJ0eQogCiAgICAgLy8gVGhlIHR3byBzdHlsZXMgdGhhdCB3ZSBhcmUgYmxlbmRpbmcu
Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIG1fZnJvbVN0eWxlOwotICAgIGNvbnN0IFJlbmRlclN0
eWxlKiBtX3RvU3R5bGU7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX2Zyb21TdHlsZTsKKyAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fdG9TdHlsZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDM3
NTg2KQorKysgcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCwxNyArMzgsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1LZXlmcmFt
ZUFuaW1hdGlvbjo6S2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24s
IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGludCBpbmRleCwgQ29tcG9zaXRlQW5pbWF0aW9uKiBj
b21wQW5pbSwgY29uc3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSkKK0tleWZyYW1lQW5p
bWF0aW9uOjpLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgaW50IGluZGV4LCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBB
bmltLCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQogICAgIDogQW5pbWF0aW9uQmFzZShh
bmltYXRpb24sIHJlbmRlcmVyLCBjb21wQW5pbSkKICAgICAsIG1fa2V5ZnJhbWVzKHJlbmRlcmVy
LCBhbmltYXRpb24tPm5hbWUoKSkKICAgICAsIG1faW5kZXgoaW5kZXgpCi0gICAgLCBtX3VuYW5p
bWF0ZWRTdHlsZSgwKQorICAgICwgbV91bmFuaW1hdGVkU3R5bGUodW5hbmltYXRlZFN0eWxlKQog
ewotICAgIGlmICh1bmFuaW1hdGVkU3R5bGUpIHsKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJT
dHlsZSo+KHVuYW5pbWF0ZWRTdHlsZSktPnJlZigpOwotICAgICAgICBtX3VuYW5pbWF0ZWRTdHls
ZSA9IHVuYW5pbWF0ZWRTdHlsZTsKLSAgICB9Ci0gICAgCiAgICAgLy8gR2V0IHRoZSBrZXlmcmFt
ZSBSZW5kZXJTdHlsZXMKICAgICBpZiAobV9vYmplY3QgJiYgbV9vYmplY3QtPmVsZW1lbnQoKSAm
JiBtX29iamVjdC0+ZWxlbWVudCgpLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIG1fb2JqZWN0
LT5kb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9u
KHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX29iamVjdC0+ZWxlbWVudCgpKSwgdW5hbmltYXRlZFN0
eWxlLCBtX2tleWZyYW1lcyk7CkBAIC02MiwxMyArNTcsMTAgQEAgS2V5ZnJhbWVBbmltYXRpb246
On5LZXlmcmFtZUFuaW1hdGlvbigpCiAgICAgLy8gRG8gdGhlIGNsZWFudXAgaGVyZSBpbnN0ZWFk
IG9mIGluIHRoZSBiYXNlIGNsYXNzIHNvIHRoZSBzcGVjaWFsaXplZCBtZXRob2RzIGdldCBjYWxs
ZWQKICAgICBpZiAoIXBvc3RBY3RpdmUoKSkKICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFu
aW1hdGlvblN0YXRlSW5wdXRFbmRBbmltYXRpb24sIC0xKTsKLQotICAgIGlmIChtX3VuYW5pbWF0
ZWRTdHlsZSkKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KG1fdW5hbmltYXRlZFN0
eWxlKS0+ZGVyZWYocmVuZGVyZXIoKS0+cmVuZGVyQXJlbmEoKSk7CiB9CiAKIHZvaWQgS2V5ZnJh
bWVBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBhbmltYXRpb24sIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdl
dFN0eWxlLCBSZW5kZXJTdHlsZSomIGFuaW1hdGVkU3R5bGUpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlZlB0cjxS
ZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCiB7CiAgICAgLy8gSWYgd2UgaGF2ZSBub3QgeWV0
IHN0YXJ0ZWQsIHdlIHdpbGwgbm90IGhhdmUgYSB2YWxpZCBzdGFydCB0aW1lLCBzbyBqdXN0IHN0
YXJ0IHRoZSBhbmltYXRpb24gaWYgbmVlZGVkLgogICAgIGlmIChpc05ldygpICYmIG1fYW5pbWF0
aW9uLT5wbGF5U3RhdGUoKSA9PSBBbmltUGxheVN0YXRlUGxheWluZykKQEAgLTEwMiwyMyArOTQs
MjMgQEAgdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdAogICAgIGlmICht
X2FuaW1hdGlvbi0+ZGlyZWN0aW9uKCkgJiYgKGkgJiAxKSkKICAgICAgICAgdCA9IDEgLSB0Owog
Ci0gICAgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSA9IDA7Ci0gICAgUmVuZGVyU3R5bGUqIHRvU3R5
bGUgPSAwOworICAgIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUgPSAwOworICAgIGNvbnN0
IFJlbmRlclN0eWxlKiB0b1N0eWxlID0gMDsKICAgICBkb3VibGUgc2NhbGUgPSAxOwogICAgIGRv
dWJsZSBvZmZzZXQgPSAwOwogICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0
b3IgZW5kS2V5ZnJhbWVzID0gbV9rZXlmcmFtZXMuZW5kS2V5ZnJhbWVzKCk7CiAgICAgZm9yIChW
ZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXMuYmVn
aW5LZXlmcmFtZXMoKTsgaXQgIT0gZW5kS2V5ZnJhbWVzOyArK2l0KSB7Ci0gICAgICAgIGlmICh0
IDwgaXQtPmtleSkgeworICAgICAgICBpZiAodCA8IGl0LT5rZXkoKSkgewogICAgICAgICAgICAg
Ly8gVGhlIGZpcnN0IGtleSBzaG91bGQgYWx3YXlzIGJlIDAsIHNvIHdlIHNob3VsZCBuZXZlciBz
dWNjZWVkIG9uIHRoZSBmaXJzdCBrZXkKICAgICAgICAgICAgIGlmICghZnJvbVN0eWxlKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgc2NhbGUgPSAxLjAgLyAoaXQtPmtleSAt
IG9mZnNldCk7Ci0gICAgICAgICAgICB0b1N0eWxlID0gaXQtPnN0eWxlOworICAgICAgICAgICAg
c2NhbGUgPSAxLjAgLyAoaXQtPmtleSgpIC0gb2Zmc2V0KTsKKyAgICAgICAgICAgIHRvU3R5bGUg
PSBpdC0+c3R5bGUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAg
b2Zmc2V0ID0gaXQtPmtleTsKLSAgICAgICAgZnJvbVN0eWxlID0gaXQtPnN0eWxlOworICAgICAg
ICBvZmZzZXQgPSBpdC0+a2V5KCk7CisgICAgICAgIGZyb21TdHlsZSA9IGl0LT5zdHlsZSgpOwog
ICAgIH0KIAogICAgIC8vIElmIGVpdGhlciBzdHlsZSBpcyAwIHdlIGhhdmUgYW4gaW52YWxpZCBj
YXNlLCBqdXN0IHN0b3AgdGhlIGFuaW1hdGlvbi4KQEAgLTEzMCw3ICsxMjIsNyBAQCB2b2lkIEtl
eWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0CiAgICAgLy8gUnVuIGEgY3ljbGUgb2Yg
YW5pbWF0aW9uLgogICAgIC8vIFdlIGtub3cgd2Ugd2lsbCBuZWVkIGEgbmV3IHJlbmRlciBzdHls
ZSwgc28gbWFrZSBvbmUgaWYgbmVlZGVkLgogICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKLSAgICAg
ICAgYW5pbWF0ZWRTdHlsZSA9IG5ldyAocmVuZGVyZXItPnJlbmRlckFyZW5hKCkpIFJlbmRlclN0
eWxlKCp0YXJnZXRTdHlsZSk7CisgICAgICAgIGFuaW1hdGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y2xvbmUodGFyZ2V0U3R5bGUpOwogCiAgICAgY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1
bmN0aW9uID0gMDsKICAgICBpZiAoZnJvbVN0eWxlLT5hbmltYXRpb25zKCkgJiYgZnJvbVN0eWxl
LT5hbmltYXRpb25zKCktPnNpemUoKSA+IDApCkBAIC0xNDAsNyArMTMyLDcgQEAgdm9pZCBLZXlm
cmFtZUFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdAogCiAgICAgSGFzaFNldDxpbnQ+Ojpjb25z
dF9pdGVyYXRvciBlbmRQcm9wZXJ0aWVzID0gbV9rZXlmcmFtZXMuZW5kUHJvcGVydGllcygpOwog
ICAgIGZvciAoSGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLmJl
Z2luUHJvcGVydGllcygpOyBpdCAhPSBlbmRQcm9wZXJ0aWVzOyArK2l0KSB7Ci0gICAgICAgIGlm
IChibGVuZFByb3BlcnRpZXModGhpcywgKml0LCBhbmltYXRlZFN0eWxlLCBmcm9tU3R5bGUsIHRv
U3R5bGUsIHByb2cpKQorICAgICAgICBpZiAoYmxlbmRQcm9wZXJ0aWVzKHRoaXMsICppdCwgYW5p
bWF0ZWRTdHlsZS5nZXQoKSwgZnJvbVN0eWxlLCB0b1N0eWxlLCBwcm9nKSkKICAgICAgICAgICAg
IHNldEFuaW1hdGluZygpOwogICAgIH0KIH0KQEAgLTI2NCw3ICsyNTYsNyBAQCB2b2lkIEtleWZy
YW1lQW5pbWF0aW9uOjp2YWxpZGF0ZVRyYW5zZm9yCiAgICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+
Ojpjb25zdF9pdGVyYXRvciBmaXJzdEl0ID0gZW5kOwogICAgIAogICAgIGZvciAoVmVjdG9yPEtl
eWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLmJlZ2luS2V5ZnJh
bWVzKCk7IGl0ICE9IGVuZDsgKytpdCwgKytmaXJzdEluZGV4KSB7Ci0gICAgICAgIGlmIChpdC0+
c3R5bGUtPnRyYW5zZm9ybSgpLm9wZXJhdGlvbnMoKS5zaXplKCkgPiAwKSB7CisgICAgICAgIGlm
IChpdC0+c3R5bGUoKS0+dHJhbnNmb3JtKCkub3BlcmF0aW9ucygpLnNpemUoKSA+IDApIHsKICAg
ICAgICAgICAgIGZpcnN0SXQgPSBpdDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBA
IC0yNzMsMTEgKzI2NSwxMSBAQCB2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjp2YWxpZGF0ZVRyYW5z
Zm9yCiAgICAgaWYgKGZpcnN0SXQgPT0gZW5kKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAot
ICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGZpcnN0VmFsID0gJmZpcnN0SXQtPnN0eWxl
LT50cmFuc2Zvcm0oKTsKKyAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBmaXJzdFZhbCA9
ICZmaXJzdEl0LT5zdHlsZSgpLT50cmFuc2Zvcm0oKTsKICAgICAKICAgICAvLyBTZWUgaWYgdGhl
IGtleWZyYW1lcyBhcmUgdmFsaWQKICAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBmaXJzdEl0KzE7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB2YWwgPSAmaXQtPnN0eWxlLT50cmFuc2Zvcm0oKTsK
KyAgICAgICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogdmFsID0gJml0LT5zdHlsZSgpLT50
cmFuc2Zvcm0oKTsKICAgICAgICAgCiAgICAgICAgIC8vIEEgbnVsbCB0cmFuc2Zvcm0gbWF0Y2hl
cyBhbnl0aGluZwogICAgICAgICBpZiAodmFsLT5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQpJbmRl
eDogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdl
L2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCShyZXZpc2lvbiAzNzU4NikKKysrIHBhZ2Uv
YW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEyICs0
MCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBmb3IgYSBzaW5nbGUgUmVuZGVyT2JqZWN0
LgogY2xhc3MgS2V5ZnJhbWVBbmltYXRpb24gOiBwdWJsaWMgQW5pbWF0aW9uQmFzZSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGNyZWF0ZShjb25z
dCBBbmltYXRpb24qIGFuaW1hdGlvbiwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgaW50IGluZGV4
LCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5
bGUqIHVuYW5pbWF0ZWRTdHlsZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxLZXlmcmFtZUFuaW1h
dGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBpbnQgaW5kZXgsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9u
LCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBLZXlmcmFtZUFuaW1hdGlvbihhbmltYXRpb24sIHJlbmRlcmVyLCBpbmRleCwg
Y29tcG9zaXRlQW5pbWF0aW9uLCB1bmFuaW1hdGVkU3R5bGUpKTsKICAgICB9OwogICAgIAotICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJn
ZXRTdHlsZSwgUmVuZGVyU3R5bGUqJiBhbmltYXRlZFN0eWxlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJT
dHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlZlB0
cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpOwogCiAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpOyB9CiAg
ICAgaW50IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQpAQCAtNTUsNyArNTUsNyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJv
cGVydHkpIGNvbnN0OwogICAgIAotICAgIGNvbnN0IFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3VuYW5pbWF0ZWRTdHlsZTsgfQorICAgIFJlbmRlclN0eWxl
KiB1bmFuaW1hdGVkU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3VuYW5pbWF0ZWRTdHlsZS5nZXQo
KTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uU3RhcnQoZG91
YmxlIGVsYXBzZWRUaW1lKTsKQEAgLTc0LDcgKzc0LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQg
dmFsaWRhdGVUcmFuc2Zvcm1GdW5jdGlvbkxpc3QoKTsKIAogcHJpdmF0ZToKLSAgICBLZXlmcmFt
ZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgUmVuZGVyT2JqZWN0KiwgaW50
IGluZGV4LCBDb21wb3NpdGVBbmltYXRpb24qLCBjb25zdCBSZW5kZXJTdHlsZSogdW5hbmltYXRl
ZFN0eWxlKTsKKyAgICBLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24qIGFuaW1hdGlv
biwgUmVuZGVyT2JqZWN0KiwgaW50IGluZGV4LCBDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJT
dHlsZSogdW5hbmltYXRlZFN0eWxlKTsKICAgICB2aXJ0dWFsIH5LZXlmcmFtZUFuaW1hdGlvbigp
OwogICAgIAogICAgIC8vIFRoZSBrZXlmcmFtZXMgdGhhdCB3ZSBhcmUgYmxlbmRpbmcuCkBAIC04
NCw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgaW50IG1faW5kZXg7CiAKICAgICAvLyBUaGUgc3R5
bGUganVzdCBiZWZvcmUgd2Ugc3RhcnRlZCBhbmltYXRpb24KLSAgICBjb25zdCBSZW5kZXJTdHls
ZSogbV91bmFuaW1hdGVkU3R5bGU7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3VuYW5pbWF0
ZWRTdHlsZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IHJlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5j
cHAJKHJldmlzaW9uIDM3NTg2KQorKysgcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChS
ZW5kZXJPYmplY3Q6OgogICAgICAgICAgICAgc2VsZWN0aW9uRmlsbENvbG9yID0gZm9yZWdyb3Vu
ZDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChSZW5kZXJTdHlsZSogcHNldWRvU3R5bGUgPSBv
YmplY3QoKS0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNFTEVDVElPTikpIHsKKyAgICAg
ICAgaWYgKFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IG9iamVjdCgpLT5nZXRDYWNoZWRQc2V1
ZG9TdHlsZShSZW5kZXJTdHlsZTo6U0VMRUNUSU9OKSkgewogICAgICAgICAgICAgU2hhZG93RGF0
YSogc2hhZG93ID0gcGFpbnRJbmZvLmZvcmNlQmxhY2tUZXh0ID8gMCA6IHBzZXVkb1N0eWxlLT50
ZXh0U2hhZG93KCk7CiAgICAgICAgICAgICBpZiAoc2hhZG93ICE9IHNlbGVjdGlvblNoYWRvdykg
ewogICAgICAgICAgICAgICAgIGlmICghcGFpbnRTZWxlY3RlZFRleHRPbmx5KQpJbmRleDogcmVu
ZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcv
TWVkaWFDb250cm9sRWxlbWVudHMuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9N
ZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDEzICs1NCwxMyBA
QCBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudDo6TWVkaWFDb250CiAgICAgOiBIVE1MRGl2
RWxlbWVudChkb2MpCiAgICAgLCBtX21lZGlhRWxlbWVudChtZWRpYUVsZW1lbnQpIAogewotICAg
IFJlbmRlclN0eWxlKiByb290U3R5bGUgPSBuZXcgKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+
cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJv
b3RTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKICAgICByb290U3R5bGUtPmluaGVyaXRG
cm9tKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+c3R5bGUoKSk7CiAgICAgcm9vdFN0eWxlLT5z
ZXREaXNwbGF5KEJMT0NLKTsKICAgICByb290U3R5bGUtPnNldFBvc2l0aW9uKFJlbGF0aXZlUG9z
aXRpb24pOwogICAgIFJlbmRlck1lZGlhQ29udHJvbFNoYWRvd1Jvb3QqIHJlbmRlcmVyID0gbmV3
IChtZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPnJlbmRlckFyZW5hKCkpIFJlbmRlck1lZGlhQ29u
dHJvbFNoYWRvd1Jvb3QodGhpcyk7CiAgICAgcmVuZGVyZXItPnNldFBhcmVudChtZWRpYUVsZW1l
bnQtPnJlbmRlcmVyKCkpOwotICAgIHJlbmRlcmVyLT5zZXRTdHlsZShyb290U3R5bGUpOworICAg
IHJlbmRlcmVyLT5zZXRTdHlsZShyb290U3R5bGUucmVsZWFzZSgpKTsKICAgICBzZXRSZW5kZXJl
cihyZW5kZXJlcik7CiAgICAgc2V0QXR0YWNoZWQoKTsKICAgICBzZXRJbkRvY3VtZW50KHRydWUp
OwpAQCAtNzMsNyArNzMsNyBAQCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6Ok1lZGlhQ29udHJv
bEluCiAgICAgLCBtX21lZGlhRWxlbWVudChtZWRpYUVsZW1lbnQpCiB7CiAgICAgc2V0SW5wdXRU
eXBlKHR5cGUpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fbWVkaWFFbGVtZW50LT5yZW5k
ZXJlcigpLT5nZXRQc2V1ZG9TdHlsZShwc2V1ZG8pOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShwc2V1ZG8p
OwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcihtX21lZGlhRWxl
bWVudC0+cmVuZGVyZXIoKS0+cmVuZGVyQXJlbmEoKSwgc3R5bGUpOwogICAgIGlmIChyZW5kZXJl
cikgewogICAgICAgICBzZXRSZW5kZXJlcihyZW5kZXJlcik7CkluZGV4OiByZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJl
dmlzaW9uIDM3NTg2KQorKysgcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU5LDEwICsxNTksMTAgQEAgdm9pZCBSZW5kZXJCbG9jazo6c3R5bGVEaWRDaGFuZ2Uo
UmVuZGVyUwogICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBzYXZlIHRoaXMgY2FsbCB3aGVuIHRoZSBj
aGFuZ2Ugb25seSBhZmZlY3RlZCBub24taW5oZXJpdGVkIHByb3BlcnRpZXMKICAgICBmb3IgKFJl
bmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpKSB7
Ci0gICAgICAgICAgICBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkp
IFJlbmRlclN0eWxlKCk7CisgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxl
ID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwogICAgICAgICAgICAgbmV3U3R5bGUtPmluaGVyaXRG
cm9tKHN0eWxlKCkpOwogICAgICAgICAgICAgbmV3U3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwot
ICAgICAgICAgICAgY2hpbGQtPnNldFN0eWxlKG5ld1N0eWxlKTsKKyAgICAgICAgICAgIGNoaWxk
LT5zZXRTdHlsZShuZXdTdHlsZS5yZWxlYXNlKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00
MzY4LDggKzQzNjgsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExldHRlcigpCiAg
ICAgLy8gSWYgdGhlIGNoaWxkIGFscmVhZHkgaGFzIHN0eWxlLCB0aGVuIGl0IGhhcyBhbHJlYWR5
IGJlZW4gY3JlYXRlZCwgc28gd2UganVzdCB3YW50CiAgICAgLy8gdG8gdXBkYXRlIGl0LgogICAg
IGlmIChjdXJyQ2hpbGQtPnN0eWxlKCktPnN0eWxlVHlwZSgpID09IFJlbmRlclN0eWxlOjpGSVJT
VF9MRVRURVIpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHBzZXVkbyA9IGZpcnN0TGV0dGVyQmxv
Y2stPmdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpGSVJTVF9MRVRURVIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJz
dExldHRlckNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSk7CisgICAgICAgIFJlbmRlclN0eWxl
KiBwc2V1ZG8gPSBmaXJzdExldHRlckJsb2NrLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShSZW5kZXJT
dHlsZTo6RklSU1RfTEVUVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RMZXR0ZXJDb250YWluZXItPmZp
cnN0TGluZVN0eWxlKCkpOwogICAgICAgICBjdXJyQ2hpbGQtPnNldFN0eWxlKHBzZXVkbyk7CiAg
ICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBnZW5DaGlsZCA9IGN1cnJDaGlsZC0+Zmlyc3RDaGls
ZCgpOyBnZW5DaGlsZDsgZ2VuQ2hpbGQgPSBnZW5DaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAg
ICAgICAgICAgaWYgKGdlbkNoaWxkLT5pc1RleHQoKSkgCkBAIC00Mzg3LDggKzQzODcsOCBAQCB2
b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExldHRlcigpCiAgICAgICAgIFJlbmRlclRleHQq
IHRleHRPYmogPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4oY3VyckNoaWxkKTsKICAgICAgICAg
CiAgICAgICAgIC8vIENyZWF0ZSBvdXIgcHNldWRvIHN0eWxlIG5vdyB0aGF0IHdlIGhhdmUgb3Vy
IGZpcnN0TGV0dGVyQ29udGFpbmVyIGRldGVybWluZWQuCi0gICAgICAgIFJlbmRlclN0eWxlKiBw
c2V1ZG9TdHlsZSA9IGZpcnN0TGV0dGVyQmxvY2stPmdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxl
OjpGSVJTVF9MRVRURVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5maXJzdExp
bmVTdHlsZSgpKTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gZmlyc3RMZXR0
ZXJCbG9jay0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkZJUlNUX0xFVFRFUiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmlyc3RMZXR0ZXJDb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkp
OwogICAgICAgICAKICAgICAgICAgLy8gRm9yY2UgaW5saW5lIGRpc3BsYXkgKGV4Y2VwdCBmb3Ig
ZmxvYXRpbmcgZmlyc3QtbGV0dGVycykKICAgICAgICAgcHNldWRvU3R5bGUtPnNldERpc3BsYXko
IHBzZXVkb1N0eWxlLT5pc0Zsb2F0aW5nKCkgPyBCTE9DSyA6IElOTElORSk7CkBAIC00NDI5LDkg
KzQ0MjksOSBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVGaXJzdExldHRlcigpCiAgICAgICAg
ICAgICAvLyBjb25zdHJ1Y3QgdGV4dCBmcmFnbWVudCBmb3IgdGhlIGZpcnN0IGxldHRlcgogICAg
ICAgICAgICAgUmVuZGVyVGV4dEZyYWdtZW50KiBsZXR0ZXIgPSAKICAgICAgICAgICAgICAgICBu
ZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclRleHRGcmFnbWVudChyZW1haW5pbmdUZXh0LT5ub2Rl
KCksIG9sZFRleHQuZ2V0KCksIDAsIGxlbmd0aCk7Ci0gICAgICAgICAgICBSZW5kZXJTdHlsZSog
bmV3U3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCk7CisgICAgICAgICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwog
ICAgICAgICAgICAgbmV3U3R5bGUtPmluaGVyaXRGcm9tKHBzZXVkb1N0eWxlKTsKLSAgICAgICAg
ICAgIGxldHRlci0+c2V0U3R5bGUobmV3U3R5bGUpOworICAgICAgICAgICAgbGV0dGVyLT5zZXRT
dHlsZShuZXdTdHlsZS5yZWxlYXNlKCkpOwogICAgICAgICAgICAgZmlyc3RMZXR0ZXItPmFkZENo
aWxkKGxldHRlcik7CiAKICAgICAgICAgICAgIHRleHRPYmotPmRlc3Ryb3koKTsKSW5kZXg6IHJl
bmRlcmluZy9SZW5kZXJDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5k
ZXJDb250YWluZXIuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJDb250
YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMTAgKzExMywxMCBAQCB2b2lkIFJlbmRl
ckNvbnRhaW5lcjo6YWRkQ2hpbGQoUmVuZGVyT2JqCiAgICAgICAgICAgICB0YWJsZSA9IHN0YXRp
Y19jYXN0PFJlbmRlclRhYmxlKj4oYWZ0ZXJDaGlsZCk7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgdGFibGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclRhYmxlKGRvY3VtZW50KCkg
LyogaXMgYW5vbnltb3VzICovKTsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlICpuZXdTdHlsZSA9
IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGU7CisgICAgICAgICAgICBSZWZQdHI8UmVu
ZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwogICAgICAgICAgICAg
bmV3U3R5bGUtPmluaGVyaXRGcm9tKHN0eWxlKCkpOwogICAgICAgICAgICAgbmV3U3R5bGUtPnNl
dERpc3BsYXkoVEFCTEUpOwotICAgICAgICAgICAgdGFibGUtPnNldFN0eWxlKG5ld1N0eWxlKTsK
KyAgICAgICAgICAgIHRhYmxlLT5zZXRTdHlsZShuZXdTdHlsZS5yZWxlYXNlKCkpOwogICAgICAg
ICAgICAgYWRkQ2hpbGQodGFibGUsIGJlZm9yZUNoaWxkKTsKICAgICAgICAgfQogICAgICAgICB0
YWJsZS0+YWRkQ2hpbGQobmV3Q2hpbGQpOwpAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgUmVuZGVy
Q29udGFpbmVyOjp1cGRhdGVCZWZvcmVBZnRlckMKICAgICBpZiAoc3R5bGUoKS0+c3R5bGVUeXBl
KCkgPT0gUmVuZGVyU3R5bGU6OkJFRk9SRSB8fCBzdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBSZW5k
ZXJTdHlsZTo6QUZURVIpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBSZW5kZXJTdHlsZSog
cHNldWRvRWxlbWVudFN0eWxlID0gc3R5bGVkT2JqZWN0LT5nZXRQc2V1ZG9TdHlsZSh0eXBlKTsK
KyAgICBSZW5kZXJTdHlsZSogcHNldWRvRWxlbWVudFN0eWxlID0gc3R5bGVkT2JqZWN0LT5nZXRD
YWNoZWRQc2V1ZG9TdHlsZSh0eXBlKTsKICAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gYmVmb3Jl
QWZ0ZXJDb250YWluZXIodHlwZSk7CiAKICAgICAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBjdXJyZW50
bHkgaGF2ZSBnZW5lcmF0ZWQgY29udGVudCBhdHRhY2hlZC4KQEAgLTMyNCw3ICszMjQsNyBAQCB2
b2lkIFJlbmRlckNvbnRhaW5lcjo6dXBkYXRlQmVmb3JlQWZ0ZXJDCiAgICAgICAgICAgICAgICAg
ICAgIGdlbkNoaWxkLT5zZXRTdHlsZShwc2V1ZG9FbGVtZW50U3R5bGUpOwogICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGdlbkNoaWxkLT5pc0ltYWdlKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
Ly8gSW1hZ2VzIGdldCBhbiBlbXB0eSBzdHlsZSB0aGF0IGluaGVyaXRzIGZyb20gdGhlIHBzZXVk
by4KLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbmV3IChyZW5kZXJB
cmVuYSgpKSBSZW5kZXJTdHlsZTsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJlbmRlclN0
eWxlPiBzdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKICAgICAgICAgICAgICAgICAgICAg
c3R5bGUtPmluaGVyaXRGcm9tKHBzZXVkb0VsZW1lbnRTdHlsZSk7CiAgICAgICAgICAgICAgICAg
ICAgIGdlbkNoaWxkLT5zZXRTdHlsZShzdHlsZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCkBA
IC0zNTMsNyArMzUzLDcgQEAgdm9pZCBSZW5kZXJDb250YWluZXI6OnVwZGF0ZUJlZm9yZUFmdGVy
QwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDT05URU5UX09CSkVD
VDogewogICAgICAgICAgICAgICAgIFJlbmRlckltYWdlR2VuZXJhdGVkQ29udGVudCogaW1hZ2Ug
PSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlckltYWdlR2VuZXJhdGVkQ29udGVudChkb2N1bWVu
dCgpKTsgLy8gYW5vbnltb3VzIG9iamVjdAotICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGU7CisgICAgICAgICAgICAgICAg
UmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKICAgICAg
ICAgICAgICAgICBzdHlsZS0+aW5oZXJpdEZyb20ocHNldWRvRWxlbWVudFN0eWxlKTsKICAgICAg
ICAgICAgICAgICBpbWFnZS0+c2V0U3R5bGUoc3R5bGUpOwogICAgICAgICAgICAgICAgIGlmIChT
dHlsZUltYWdlKiBzdHlsZUltYWdlID0gY29udGVudC0+bV9jb250ZW50Lm1faW1hZ2UpCkluZGV4
OiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJl
bmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysg
cmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA3LDEwICsxMDcsMTAgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6dXBkYXRlRnJv
bQogICAgICAgICBtX2J1dHRvbiA9IG5ldyBIVE1MRmlsZVVwbG9hZElubmVyQnV0dG9uRWxlbWVu
dChkb2N1bWVudCgpLCBpbnB1dEVsZW1lbnQpOwogICAgICAgICBtX2J1dHRvbi0+c2V0SW5wdXRU
eXBlKCJidXR0b24iKTsKICAgICAgICAgbV9idXR0b24tPnNldFZhbHVlKGZpbGVCdXR0b25DaG9v
c2VGaWxlTGFiZWwoKSk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBidXR0b25TdHlsZSA9IGNyZWF0
ZUJ1dHRvblN0eWxlKHN0eWxlKCkpOwotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
bV9idXR0b24tPmNyZWF0ZVJlbmRlcmVyKHJlbmRlckFyZW5hKCksIGJ1dHRvblN0eWxlKTsKKyAg
ICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBidXR0b25TdHlsZSA9IGNyZWF0ZUJ1dHRvblN0eWxl
KHN0eWxlKCkpOworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9idXR0b24tPmNy
ZWF0ZVJlbmRlcmVyKHJlbmRlckFyZW5hKCksIGJ1dHRvblN0eWxlLmdldCgpKTsKICAgICAgICAg
bV9idXR0b24tPnNldFJlbmRlcmVyKHJlbmRlcmVyKTsKLSAgICAgICAgcmVuZGVyZXItPnNldFN0
eWxlKGJ1dHRvblN0eWxlKTsKKyAgICAgICAgcmVuZGVyZXItPnNldFN0eWxlKGJ1dHRvblN0eWxl
LnJlbGVhc2UoKSk7CiAgICAgICAgIHJlbmRlcmVyLT51cGRhdGVGcm9tRWxlbWVudCgpOwogICAg
ICAgICBtX2J1dHRvbi0+c2V0QXR0YWNoZWQoKTsKICAgICAgICAgbV9idXR0b24tPnNldEluRG9j
dW1lbnQodHJ1ZSk7CkBAIC0xMzQsMTEgKzEzNCwxMSBAQCBpbnQgUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2w6Om1heEZpbGVuYW1lCiAgICAgICAgIC0gKG1fZmlsZUNob29zZXItPmljb24oKSA/IGlj
b25XaWR0aCArIGljb25GaWxlbmFtZVNwYWNpbmcgOiAwKSk7CiB9CiAKLVJlbmRlclN0eWxlKiBS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y3JlYXRlQnV0dG9uU3R5bGUoY29uc3QgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlKSBjb25zdAorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2w6OmNyZWF0ZUJ1dHRvblN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSkgY29uc3QKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBnZXRQc2V1ZG9TdHls
ZShSZW5kZXJTdHlsZTo6RklMRV9VUExPQURfQlVUVE9OKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IHN0eWxlID0gZ2V0Q2FjaGVkUHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkZJTEVfVVBMT0FE
X0JVVFRPTik7CiAgICAgaWYgKCFzdHlsZSkgewotICAgICAgICBzdHlsZSA9IG5ldyAocmVuZGVy
QXJlbmEoKSkgUmVuZGVyU3R5bGU7CisgICAgICAgIHN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0
ZSgpOwogICAgICAgICBpZiAocGFyZW50U3R5bGUpCiAgICAgICAgICAgICBzdHlsZS0+aW5oZXJp
dEZyb20ocGFyZW50U3R5bGUpOwogICAgIH0KQEAgLTE0Nyw3ICsxNDcsNyBAQCBSZW5kZXJTdHls
ZSogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNyCiAgICAgLy8gd2l0aG91dCB0aGlzIHNldFdo
aXRlU3BhY2UuCiAgICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoTk9XUkFQKTsKIAotICAgIHJldHVy
biBzdHlsZTsKKyAgICByZXR1cm4gc3R5bGUucmVsZWFzZSgpOwogfQogCiB2b2lkIFJlbmRlckZp
bGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4
LCBpbnQgdHkpCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAkocmV2aXNpb24g
Mzc1ODYpCisrKyByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaAkod29ya2luZyBj
b3B5KQpAQCAtNTcsNyArNTcsNyBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgaW50IG1h
eEZpbGVuYW1lV2lkdGgoKSBjb25zdDsKLSAgICBSZW5kZXJTdHlsZSogY3JlYXRlQnV0dG9uU3R5
bGUoY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdDsKKyAgICBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBjcmVhdGVCdXR0b25TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50
U3R5bGUpIGNvbnN0OwogCiAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IG1fYnV0dG9uOwog
ICAgIFJlZlB0cjxGaWxlQ2hvb3Nlcj4gbV9maWxlQ2hvb3NlcjsKSW5kZXg6IHJlbmRlcmluZy9S
ZW5kZXJGbG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAJKHJl
dmlzaW9uIDM3NTg2KQorKysgcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw3ICs0Nyw3IEBAIFJlbmRlckZsb3c6On5SZW5kZXJGbG93KCkKIAogI2VuZGlmCiAK
LVJlbmRlckZsb3cqIFJlbmRlckZsb3c6OmNyZWF0ZUFub255bW91c0Zsb3coRG9jdW1lbnQqIGRv
YywgUmVuZGVyU3R5bGUqIHN0eWxlKQorUmVuZGVyRmxvdyogUmVuZGVyRmxvdzo6Y3JlYXRlQW5v
bnltb3VzRmxvdyhEb2N1bWVudCogZG9jLCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkK
IHsKICAgICBSZW5kZXJGbG93KiByZXN1bHQ7CiAgICAgaWYgKHN0eWxlLT5kaXNwbGF5KCkgPT0g
SU5MSU5FKQpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZsb3cuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5k
ZXJpbmcvUmVuZGVyRmxvdy5oCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJG
bG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBhZGRDaGlsZFRvRmxvdyhSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9i
amVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKIAotICAgIHN0
YXRpYyBSZW5kZXJGbG93KiBjcmVhdGVBbm9ueW1vdXNGbG93KERvY3VtZW50KiwgUmVuZGVyU3R5
bGUqKTsKKyAgICBzdGF0aWMgUmVuZGVyRmxvdyogY3JlYXRlQW5vbnltb3VzRmxvdyhEb2N1bWVu
dCosIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+KTsKIAogICAgIHZvaWQgZXh0cmFjdExpbmVCb3go
SW5saW5lRmxvd0JveCopOwogICAgIHZvaWQgYXR0YWNoTGluZUJveChJbmxpbmVGbG93Qm94Kik7
CkluZGV4OiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDEyICsxMDIsMTIgQEAgdm9pZCBSZW5k
ZXJJbmxpbmU6OmFkZENoaWxkVG9GbG93KFJlbmRlcgogICAgICAgICAvLyBpbmxpbmUgaW50byBj
b250aW51YXRpb25zLiAgVGhpcyBpbnZvbHZlcyBjcmVhdGluZyBhbiBhbm9ueW1vdXMgYmxvY2sg
Ym94IHRvIGhvbGQKICAgICAgICAgLy8gfG5ld0NoaWxkfC4gIFdlIHRoZW4gbWFrZSB0aGF0IGJs
b2NrIGJveCBhIGNvbnRpbnVhdGlvbiBvZiB0aGlzIGlubGluZS4gIFdlIHRha2UgYWxsIG9mCiAg
ICAgICAgIC8vIHRoZSBjaGlsZHJlbiBhZnRlciB8YmVmb3JlQ2hpbGR8IGFuZCBwdXQgdGhlbSBp
biBhIGNsb25lIG9mIHRoaXMgb2JqZWN0LgotICAgICAgICBSZW5kZXJTdHlsZSogbmV3U3R5bGUg
PSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCk7CisgICAgICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgICAgIG5ld1N0
eWxlLT5pbmhlcml0RnJvbShzdHlsZSgpKTsKICAgICAgICAgbmV3U3R5bGUtPnNldERpc3BsYXko
QkxPQ0spOwogCiAgICAgICAgIFJlbmRlckJsb2NrKiBuZXdCb3ggPSBuZXcgKHJlbmRlckFyZW5h
KCkpIFJlbmRlckJsb2NrKGRvY3VtZW50KCkgLyogYW5vbnltb3VzIGJveCAqLyk7Ci0gICAgICAg
IG5ld0JveC0+c2V0U3R5bGUobmV3U3R5bGUpOworICAgICAgICBuZXdCb3gtPnNldFN0eWxlKG5l
d1N0eWxlLnJlbGVhc2UoKSk7CiAgICAgICAgIFJlbmRlckZsb3cqIG9sZENvbnRpbnVhdGlvbiA9
IGNvbnRpbnVhdGlvbigpOwogICAgICAgICBzZXRDb250aW51YXRpb24obmV3Qm94KTsKIApJbmRl
eDogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0ODEsMTMgKzI0ODEsMTMgQEAgdm9pZCBSZW5kZXJMYXll
cjo6c3R5bGVDaGFuZ2VkKFJlbmRlclN0eQogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xs
Q29ybmVyU3R5bGUoKQogewogICAgIFJlbmRlck9iamVjdCogYWN0dWFsUmVuZGVyZXIgPSBtX29i
amVjdC0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkgPyBtX29iamVjdC0+bm9kZSgpLT5zaGFkb3dB
bmNlc3Rvck5vZGUoKS0+cmVuZGVyZXIoKSA6IG1fb2JqZWN0OwotICAgIFJlbmRlclN0eWxlKiBj
b3JuZXIgPSBtX29iamVjdC0+aGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0
UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNDUk9MTEJBUl9DT1JORVIsIGFjdHVhbFJlbmRlcmVy
LT5zdHlsZSgpLCBmYWxzZSkgOiAwOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY29ybmVyID0g
bV9vYmplY3QtPmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVk
UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNDUk9MTEJBUl9DT1JORVIsIGFjdHVhbFJlbmRlcmVy
LT5zdHlsZSgpKSA6IDA7CiAgICAgaWYgKGNvcm5lcikgewogICAgICAgICBpZiAoIW1fc2Nyb2xs
Q29ybmVyKSB7CiAgICAgICAgICAgICBtX3Njcm9sbENvcm5lciA9IG5ldyAobV9vYmplY3QtPnJl
bmRlckFyZW5hKCkpIFJlbmRlclNjcm9sbGJhclBhcnQobV9vYmplY3QtPmRvY3VtZW50KCkpOwog
ICAgICAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudChtX29iamVjdCk7CiAgICAgICAg
IH0KLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFN0eWxlKGNvcm5lcik7CisgICAgICAgIG1f
c2Nyb2xsQ29ybmVyLT5zZXRTdHlsZShjb3JuZXIucmVsZWFzZSgpKTsKICAgICB9IGVsc2UgaWYg
KG1fc2Nyb2xsQ29ybmVyKSB7CiAgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5kZXN0cm95KCk7CiAg
ICAgICAgIG1fc2Nyb2xsQ29ybmVyID0gMDsKQEAgLTI0OTcsMTMgKzI0OTcsMTMgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bAogdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlUmVzaXplclN0eWxlKCkKIHsKICAgICBSZW5kZXJPYmplY3QqIGFjdHVhbFJlbmRlcmVyID0g
bV9vYmplY3QtPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpID8gbV9vYmplY3QtPm5vZGUoKS0+c2hh
ZG93QW5jZXN0b3JOb2RlKCktPnJlbmRlcmVyKCkgOiBtX29iamVjdDsKLSAgICBSZW5kZXJTdHls
ZSogcmVzaXplciA9IG1fb2JqZWN0LT5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVy
LT5nZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6UkVTSVpFUiwgYWN0dWFsUmVuZGVyZXItPnN0
eWxlKCksIGZhbHNlKSA6IDA7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZXNpemVyID0gbV9v
YmplY3QtPmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNl
dWRvU3R5bGUoUmVuZGVyU3R5bGU6OlJFU0laRVIsIGFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6
IDA7CiAgICAgaWYgKHJlc2l6ZXIpIHsKICAgICAgICAgaWYgKCFtX3Jlc2l6ZXIpIHsKICAgICAg
ICAgICAgIG1fcmVzaXplciA9IG5ldyAobV9vYmplY3QtPnJlbmRlckFyZW5hKCkpIFJlbmRlclNj
cm9sbGJhclBhcnQobV9vYmplY3QtPmRvY3VtZW50KCkpOwogICAgICAgICAgICAgbV9yZXNpemVy
LT5zZXRQYXJlbnQobV9vYmplY3QpOwogICAgICAgICB9Ci0gICAgICAgIG1fcmVzaXplci0+c2V0
U3R5bGUocmVzaXplcik7CisgICAgICAgIG1fcmVzaXplci0+c2V0U3R5bGUocmVzaXplci5yZWxl
YXNlKCkpOwogICAgIH0gZWxzZSBpZiAobV9yZXNpemVyKSB7CiAgICAgICAgIG1fcmVzaXplci0+
ZGVzdHJveSgpOwogICAgICAgICBtX3Jlc2l6ZXIgPSAwOwpAQCAtMjUyNCw3ICsyNTI0LDcgQEAg
dm9pZCBSZW5kZXJMYXllcjo6Y3JlYXRlUmVmbGVjdGlvbigpCiAKIHZvaWQgUmVuZGVyTGF5ZXI6
OnVwZGF0ZVJlZmxlY3Rpb25TdHlsZSgpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIG5ld1N0eWxlID0g
bmV3IChyZW5kZXJlcigpLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOworICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgbmV3
U3R5bGUtPmluaGVyaXRGcm9tKHJlbmRlcmVyKCktPnN0eWxlKCkpOwogICAgIAogICAgIC8vIE1h
cCBpbiBvdXIgdHJhbnNmb3JtLgpAQCAtMjU1Niw3ICsyNTU2LDcgQEAgdm9pZCBSZW5kZXJMYXll
cjo6dXBkYXRlUmVmbGVjdGlvblN0eWxlKAogICAgIC8vIE1hcCBpbiBvdXIgbWFzay4KICAgICBu
ZXdTdHlsZS0+c2V0TWFza0JveEltYWdlKHJlbmRlcmVyKCktPnN0eWxlKCktPmJveFJlZmxlY3Qo
KS0+bWFzaygpKTsKICAgICAKLSAgICBtX3JlZmxlY3Rpb24tPnNldFN0eWxlKG5ld1N0eWxlKTsK
KyAgICBtX3JlZmxlY3Rpb24tPnNldFN0eWxlKG5ld1N0eWxlLnJlbGVhc2UoKSk7CiB9CiAKIHZv
aWQgUmVuZGVyTGF5ZXI6OnN1c3BlbmRNYXJxdWVlcygpCkluZGV4OiByZW5kZXJpbmcvUmVuZGVy
TGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJ
KHJldmlzaW9uIDM3NTg2KQorKysgcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsMTUgKzU0LDEzIEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnN0eWxlRGlk
Q2hhbmdlKFJlbmQKIAogICAgIGlmIChzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCkgIT0gTE5PTkUg
fHwKICAgICAgICAgKHN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCkgJiYgIXN0eWxlKCktPmxpc3RT
dHlsZUltYWdlKCktPmVycm9yT2NjdXJyZWQoKSkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIG5l
d1N0eWxlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZTsKLSAgICAgICAgbmV3U3R5
bGUtPnJlZigpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVy
U3R5bGU6OmNyZWF0ZSgpOwogICAgICAgICAvLyBUaGUgbWFya2VyIGFsd2F5cyBpbmhlcml0cyBm
cm9tIHRoZSBsaXN0IGl0ZW0sIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgaXQgbWlnaHQgZW5kCiAgICAg
ICAgIC8vIHVwIChlLmcuLCBpbiBzb21lIGRlZXBseSBuZXN0ZWQgbGluZSBib3gpLiBTZWUgQ1NT
MyBzcGVjLgogICAgICAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20oc3R5bGUoKSk7IAogICAgICAg
ICBpZiAoIW1fbWFya2VyKQogICAgICAgICAgICAgbV9tYXJrZXIgPSBuZXcgKHJlbmRlckFyZW5h
KCkpIFJlbmRlckxpc3RNYXJrZXIodGhpcyk7Ci0gICAgICAgIG1fbWFya2VyLT5zZXRTdHlsZShu
ZXdTdHlsZSk7Ci0gICAgICAgIG5ld1N0eWxlLT5kZXJlZihyZW5kZXJBcmVuYSgpKTsKKyAgICAg
ICAgbV9tYXJrZXItPnNldFN0eWxlKG5ld1N0eWxlLnJlbGVhc2UoKSk7CiAgICAgfSBlbHNlIGlm
IChtX21hcmtlcikgewogICAgICAgICBtX21hcmtlci0+ZGVzdHJveSgpOwogICAgICAgICBtX21h
cmtlciA9IDA7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHJlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgcmVuZGVyaW5n
L1JlbmRlck1lZGlhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQg
UmVuZGVyTWVkaWE6OmNyZWF0ZUNvbnRyb2xzU2hhZG93Um8KIHZvaWQgUmVuZGVyTWVkaWE6OmNy
ZWF0ZVBhbmVsKCkKIHsKICAgICBBU1NFUlQoIW1fcGFuZWwpOwotICAgIFJlbmRlclN0eWxlKiBz
dHlsZSA9IGdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpNRURJQV9DT05UUk9MU19QQU5FTCk7
CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZ2V0Q2FjaGVkUHNldWRvU3R5bGUoUmVuZGVyU3R5
bGU6Ok1FRElBX0NPTlRST0xTX1BBTkVMKTsKICAgICBtX3BhbmVsID0gbmV3IEhUTUxEaXZFbGVt
ZW50KGRvY3VtZW50KCkpOwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBtX3BhbmVsLT5j
cmVhdGVSZW5kZXJlcihyZW5kZXJBcmVuYSgpLCBzdHlsZSk7CiAgICAgaWYgKHJlbmRlcmVyKSB7
CkBAIC0xOTcsNyArMTk3LDcgQEAgdm9pZCBSZW5kZXJNZWRpYTo6Y3JlYXRlVGltZWxpbmUoKQog
dm9pZCBSZW5kZXJNZWRpYTo6Y3JlYXRlVGltZURpc3BsYXkoKQogewogICAgIEFTU0VSVCghbV90
aW1lRGlzcGxheSk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZ2V0UHNldWRvU3R5bGUoUmVu
ZGVyU3R5bGU6Ok1FRElBX0NPTlRST0xTX1RJTUVfRElTUExBWSk7CisgICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gZ2V0Q2FjaGVkUHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6Ok1FRElBX0NPTlRST0xT
X1RJTUVfRElTUExBWSk7CiAgICAgbV90aW1lRGlzcGxheSA9IG5ldyBIVE1MRGl2RWxlbWVudChk
b2N1bWVudCgpKTsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV90aW1lRGlzcGxheS0+
Y3JlYXRlUmVuZGVyZXIocmVuZGVyQXJlbmEoKSwgc3R5bGUpOwogICAgIGlmIChyZW5kZXJlcikg
ewpAQCAtMzQwLDExICszNDAsMTEgQEAgdm9pZCBSZW5kZXJNZWRpYTo6Y2hhbmdlT3BhY2l0eShI
VE1MRWxlbQogewogICAgIGlmICghZSB8fCAhZS0+cmVuZGVyZXIoKSB8fCAhZS0+cmVuZGVyZXIo
KS0+c3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFJlbmRlclN0eWxlKiBzID0gbmV3IChy
ZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgqZS0+cmVuZGVyZXIoKS0+c3R5bGUoKSk7CisgICAg
UmVmUHRyPFJlbmRlclN0eWxlPiBzID0gUmVuZGVyU3R5bGU6OmNsb25lKGUtPnJlbmRlcmVyKCkt
PnN0eWxlKCkpOwogICAgIHMtPnNldE9wYWNpdHkob3BhY2l0eSk7CiAgICAgLy8gei1pbmRleCBj
YW4ndCBiZSBhdXRvIGlmIG9wYWNpdHkgaXMgdXNlZAogICAgIHMtPnNldFpJbmRleCgwKTsKLSAg
ICBlLT5yZW5kZXJlcigpLT5zZXRTdHlsZShzKTsKKyAgICBlLT5yZW5kZXJlcigpLT5zZXRTdHls
ZShzLnJlbGVhc2UoKSk7CiB9CiAgICAgCiB2b2lkIFJlbmRlck1lZGlhOjpvcGFjaXR5QW5pbWF0
aW9uVGltZXJGaXJlZChUaW1lcjxSZW5kZXJNZWRpYT4qKQpJbmRleDogcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJl
dmlzaW9uIDM3NTg2KQorKysgcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIwMzgsNyArMjAzOCw3IEBAIENvbG9yIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uQmFj
a2dyb3VuZEMKIHsKICAgICBDb2xvciBjb2xvcjsKICAgICBpZiAoc3R5bGUoKS0+dXNlclNlbGVj
dCgpICE9IFNFTEVDVF9OT05FKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9
IGdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTRUxFQ1RJT04pOworICAgICAgICBSZW5kZXJT
dHlsZSogcHNldWRvU3R5bGUgPSBnZXRDYWNoZWRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6U0VM
RUNUSU9OKTsKICAgICAgICAgaWYgKHBzZXVkb1N0eWxlICYmIHBzZXVkb1N0eWxlLT5iYWNrZ3Jv
dW5kQ29sb3IoKS5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBjb2xvciA9IHBzZXVkb1N0eWxlLT5i
YWNrZ3JvdW5kQ29sb3IoKS5ibGVuZFdpdGhXaGl0ZSgpOwogICAgICAgICBlbHNlCkBAIC0yMDU2
LDcgKzIwNTYsNyBAQCBDb2xvciBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkZvcmVncm91bmRDCiAg
ICAgaWYgKHN0eWxlKCktPnVzZXJTZWxlY3QoKSA9PSBTRUxFQ1RfTk9ORSkKICAgICAgICAgcmV0
dXJuIGNvbG9yOwogCi0gICAgaWYgKFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IGdldFBzZXVk
b1N0eWxlKFJlbmRlclN0eWxlOjpTRUxFQ1RJT04pKSB7CisgICAgaWYgKFJlbmRlclN0eWxlKiBw
c2V1ZG9TdHlsZSA9IGdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTRUxFQ1RJT04p
KSB7CiAgICAgICAgIGNvbG9yID0gcHNldWRvU3R5bGUtPnRleHRGaWxsQ29sb3IoKTsKICAgICAg
ICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBjb2xvciA9IHBzZXVkb1N0eWxl
LT5jb2xvcigpOwpAQCAtMjExMCwxMiArMjExMCwxMiBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2Vs
ZWN0aW9uU3RhcnRFbmQoaW50CiAKIFJlbmRlckJsb2NrKiBSZW5kZXJPYmplY3Q6OmNyZWF0ZUFu
b255bW91c0Jsb2NrKCkKIHsKLSAgICBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBuZXcgKHJlbmRl
ckFyZW5hKCkpIFJlbmRlclN0eWxlKCk7Ci0gICAgbmV3U3R5bGUtPmluaGVyaXRGcm9tKG1fc3R5
bGUpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3Jl
YXRlKCk7CisgICAgbmV3U3R5bGUtPmluaGVyaXRGcm9tKG1fc3R5bGUuZ2V0KCkpOwogICAgIG5l
d1N0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKIAogICAgIFJlbmRlckJsb2NrKiBuZXdCb3ggPSBu
ZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlckJsb2NrKGRvY3VtZW50KCkgLyogYW5vbnltb3VzIGJv
eCAqLyk7Ci0gICAgbmV3Qm94LT5zZXRTdHlsZShuZXdTdHlsZSk7CisgICAgbmV3Qm94LT5zZXRT
dHlsZShuZXdTdHlsZS5yZWxlYXNlKCkpOwogICAgIHJldHVybiBuZXdCb3g7CiB9CiAKQEAgLTIx
NTQsMzMgKzIxNTQsMzEgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmhhbmRsZUR5bmFtaWNGbG9hdFBv
cwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJPYmplY3Q6OnNldEFuaW1hdGFibGVTdHlsZShSZW5k
ZXJTdHlsZSogc3R5bGUpCit2b2lkIFJlbmRlck9iamVjdDo6c2V0QW5pbWF0YWJsZVN0eWxlKFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKQogewogICAgIGlmICghaXNUZXh0KCkgJiYgc3R5
bGUpCi0gICAgICAgIHN0eWxlID0gYW5pbWF0aW9uKCktPnVwZGF0ZUFuaW1hdGlvbnModGhpcywg
c3R5bGUpOwotCi0gICAgc2V0U3R5bGUoc3R5bGUpOworICAgICAgICBzZXRTdHlsZShhbmltYXRp
b24oKS0+dXBkYXRlQW5pbWF0aW9ucyh0aGlzLCBzdHlsZS5nZXQoKSkpOworICAgIGVsc2UKKyAg
ICAgICAgc2V0U3R5bGUoc3R5bGUpOwogfQogCi12b2lkIFJlbmRlck9iamVjdDo6c2V0U3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQordm9pZCBSZW5kZXJPYmplY3Q6OnNldFN0eWxlKFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKQogewogICAgIGlmIChtX3N0eWxlID09IHN0eWxl
KQogICAgICAgICByZXR1cm47CiAKICAgICBSZW5kZXJTdHlsZTo6RGlmZiBkaWZmID0gUmVuZGVy
U3R5bGU6OkVxdWFsOwogICAgIGlmIChtX3N0eWxlKQotICAgICAgICBkaWZmID0gbV9zdHlsZS0+
ZGlmZihzdHlsZSk7CisgICAgICAgIGRpZmYgPSBtX3N0eWxlLT5kaWZmKHN0eWxlLmdldCgpKTsK
IAogICAgIC8vIElmIHdlIGhhdmUgbm8gbGF5ZXIoKSwganVzdCB0cmVhdCBhIFJlcGFpbnRMYXll
ciBoaW50IGFzIGEgbm9ybWFsIFJlcGFpbnQuCiAgICAgaWYgKGRpZmYgPT0gUmVuZGVyU3R5bGU6
OlJlcGFpbnRMYXllciAmJiAhaGFzTGF5ZXIoKSkKICAgICAgICAgZGlmZiA9IFJlbmRlclN0eWxl
OjpSZXBhaW50OwogCi0gICAgc3R5bGVXaWxsQ2hhbmdlKGRpZmYsIHN0eWxlKTsKKyAgICBzdHls
ZVdpbGxDaGFuZ2UoZGlmZiwgc3R5bGUuZ2V0KCkpOwogICAgIAotICAgIFJlbmRlclN0eWxlKiBv
bGRTdHlsZSA9IG1fc3R5bGU7Ci0gICAgbV9zdHlsZSA9IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUq
PihzdHlsZSk7Ci0gICAgaWYgKG1fc3R5bGUpCi0gICAgICAgIG1fc3R5bGUtPnJlZigpOworICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gb2xkU3R5bGUgPSBtX3N0eWxlOworICAgIG1fc3R5bGUgPSBz
dHlsZTsKIAogICAgIHVwZGF0ZUZpbGxJbWFnZXMob2xkU3R5bGUgPyBvbGRTdHlsZS0+YmFja2dy
b3VuZExheWVycygpIDogMCwgbV9zdHlsZSA/IG1fc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSA6
IDApOwogICAgIHVwZGF0ZUZpbGxJbWFnZXMob2xkU3R5bGUgPyBvbGRTdHlsZS0+bWFza0xheWVy
cygpIDogMCwgbV9zdHlsZSA/IG1fc3R5bGUtPm1hc2tMYXllcnMoKSA6IDApOwpAQCAtMjE4OCwy
MiArMjE4NiwxNCBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2V0U3R5bGUoY29uc3QgUmVuZGVyCiAg
ICAgdXBkYXRlSW1hZ2Uob2xkU3R5bGUgPyBvbGRTdHlsZS0+Ym9yZGVySW1hZ2UoKS5pbWFnZSgp
IDogMCwgbV9zdHlsZSA/IG1fc3R5bGUtPmJvcmRlckltYWdlKCkuaW1hZ2UoKSA6IDApOwogICAg
IHVwZGF0ZUltYWdlKG9sZFN0eWxlID8gb2xkU3R5bGUtPm1hc2tCb3hJbWFnZSgpLmltYWdlKCkg
OiAwLCBtX3N0eWxlID8gbV9zdHlsZS0+bWFza0JveEltYWdlKCkuaW1hZ2UoKSA6IDApOwogCi0g
ICAgc3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwotCi0gICAgaWYgKG9sZFN0eWxlKSB7
Ci0gICAgICAgIG9sZFN0eWxlLT5kZXJlZihyZW5kZXJBcmVuYSgpKTsKLSAgICB9CisgICAgc3R5
bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUuZ2V0KCkpOwogfQogCi12b2lkIFJlbmRlck9iamVj
dDo6c2V0U3R5bGVJbnRlcm5hbChSZW5kZXJTdHlsZSogc3R5bGUpCit2b2lkIFJlbmRlck9iamVj
dDo6c2V0U3R5bGVJbnRlcm5hbChQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIHsKICAg
ICBpZiAobV9zdHlsZSA9PSBzdHlsZSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX3N0eWxl
KQotICAgICAgICBtX3N0eWxlLT5kZXJlZihyZW5kZXJBcmVuYSgpKTsKICAgICBtX3N0eWxlID0g
c3R5bGU7Ci0gICAgaWYgKG1fc3R5bGUpCi0gICAgICAgIG1fc3R5bGUtPnJlZigpOwogfQogCiB2
b2lkIFJlbmRlck9iamVjdDo6c3R5bGVXaWxsQ2hhbmdlKFJlbmRlclN0eWxlOjpEaWZmIGRpZmYs
IGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKQEAgLTI1ODEsOCArMjU3MSw2IEBAIHZvaWQg
UmVuZGVyT2JqZWN0OjphcmVuYURlbGV0ZShSZW5kZXJBcmUKIAogICAgICAgICBpZiAoU3R5bGVJ
bWFnZSogbWFza0JveEltYWdlID0gbV9zdHlsZS0+bWFza0JveEltYWdlKCkuaW1hZ2UoKSkKICAg
ICAgICAgICAgIG1hc2tCb3hJbWFnZS0+cmVtb3ZlQ2xpZW50KHRoaXMpOwotCi0gICAgICAgIG1f
c3R5bGUtPmRlcmVmKGFyZW5hKTsKICAgICB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC0yODAyLDU0
ICsyNzkwLDYyIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpkZWxldGVMaW5lQm94V3JhcHBlcigKIFJl
bmRlclN0eWxlKiBSZW5kZXJPYmplY3Q6OmZpcnN0TGluZVN0eWxlKCkgY29uc3QKIHsKICAgICBp
ZiAoIWRvY3VtZW50KCktPnVzZXNGaXJzdExpbmVSdWxlcygpKQotICAgICAgICByZXR1cm4gbV9z
dHlsZTsKKyAgICAgICAgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7CiAKLSAgICBSZW5kZXJTdHlsZSog
cyA9IG1fc3R5bGU7CisgICAgUmVuZGVyU3R5bGUqIHMgPSBtX3N0eWxlLmdldCgpOwogICAgIGNv
bnN0IFJlbmRlck9iamVjdCogb2JqID0gaXNUZXh0KCkgPyBwYXJlbnQoKSA6IHRoaXM7CiAgICAg
aWYgKG9iai0+aXNCbG9ja0Zsb3coKSkgewogICAgICAgICBSZW5kZXJCbG9jayogZmlyc3RMaW5l
QmxvY2sgPSBvYmotPmZpcnN0TGluZUJsb2NrKCk7CiAgICAgICAgIGlmIChmaXJzdExpbmVCbG9j
aykKLSAgICAgICAgICAgIHMgPSBmaXJzdExpbmVCbG9jay0+Z2V0UHNldWRvU3R5bGUoUmVuZGVy
U3R5bGU6OkZJUlNUX0xJTkUsIHN0eWxlKCkpOworICAgICAgICAgICAgcyA9IGZpcnN0TGluZUJs
b2NrLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6RklSU1RfTElORSwgc3R5bGUo
KSk7CiAgICAgfSBlbHNlIGlmICghb2JqLT5pc0Fub255bW91cygpICYmIG9iai0+aXNJbmxpbmVG
bG93KCkpIHsKICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gb2JqLT5wYXJlbnQo
KS0+Zmlyc3RMaW5lU3R5bGUoKTsKICAgICAgICAgaWYgKHBhcmVudFN0eWxlICE9IG9iai0+cGFy
ZW50KCktPnN0eWxlKCkpIHsKICAgICAgICAgICAgIC8vIEEgZmlyc3QtbGluZSBzdHlsZSBpcyBp
biBlZmZlY3QuIFdlIG5lZWQgdG8gY2FjaGUgYSBmaXJzdC1saW5lIHN0eWxlCiAgICAgICAgICAg
ICAvLyBmb3Igb3Vyc2VsdmVzLgogICAgICAgICAgICAgc3R5bGUoKS0+c2V0SGFzUHNldWRvU3R5
bGUoUmVuZGVyU3R5bGU6OkZJUlNUX0xJTkVfSU5IRVJJVEVEKTsKLSAgICAgICAgICAgIHMgPSBv
YmotPmdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpGSVJTVF9MSU5FX0lOSEVSSVRFRCwgcGFy
ZW50U3R5bGUpOworICAgICAgICAgICAgcyA9IG9iai0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUmVu
ZGVyU3R5bGU6OkZJUlNUX0xJTkVfSU5IRVJJVEVELCBwYXJlbnRTdHlsZSk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgcmV0dXJuIHM7CiB9CiAKLVJlbmRlclN0eWxlKiBSZW5kZXJPYmplY3Q6Omdl
dFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpQc2V1ZG9JZCBwc2V1ZG8sIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSwgYm9vbCB1c2VDYWNoZWRTdHlsZSkgY29uc3QKK1JlbmRlclN0eWxlKiBSZW5k
ZXJPYmplY3Q6OmdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpQc2V1ZG9JZCBwc2V1
ZG8sIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKIHsKICAgICBpZiAocHNldWRvIDwg
UmVuZGVyU3R5bGU6OkZJUlNUX0lOVEVSTkFMX1BTRVVET0lEICYmICFzdHlsZSgpLT5oYXNQc2V1
ZG9TdHlsZShwc2V1ZG8pKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIFJlbmRlclN0eWxlKiBj
YWNoZWRTdHlsZSA9IHN0eWxlKCktPmdldENhY2hlZFBzZXVkb1N0eWxlKHBzZXVkbyk7CisgICAg
aWYgKGNhY2hlZFN0eWxlKQorICAgICAgICByZXR1cm4gY2FjaGVkU3R5bGU7CisgICAgCisgICAg
UmVmUHRyPFJlbmRlclN0eWxlPiByZXN1bHQgPSBnZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHBzZXVk
bywgcGFyZW50U3R5bGUpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVybiBzdHlsZSgp
LT5hZGRDYWNoZWRQc2V1ZG9TdHlsZShyZXN1bHQucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gMDsK
K30KKworUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyT2JqZWN0OjpnZXRVbmNhY2hlZFBz
ZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpQc2V1ZG9JZCBwc2V1ZG8sIFJlbmRlclN0eWxlKiBwYXJl
bnRTdHlsZSkgY29uc3QKK3sKKyAgICBpZiAocHNldWRvIDwgUmVuZGVyU3R5bGU6OkZJUlNUX0lO
VEVSTkFMX1BTRVVET0lEICYmICFzdHlsZSgpLT5oYXNQc2V1ZG9TdHlsZShwc2V1ZG8pKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICAKICAgICBpZiAoIXBhcmVudFN0eWxlKQogICAgICAgICBwYXJl
bnRTdHlsZSA9IHN0eWxlKCk7CiAKLSAgICBSZW5kZXJTdHlsZSogcmVzdWx0ID0gdXNlQ2FjaGVk
U3R5bGUgPyBzdHlsZSgpLT5nZXRQc2V1ZG9TdHlsZShwc2V1ZG8pIDogMDsKLSAgICBpZiAocmVz
dWx0KQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCiAgICAgTm9kZSogbm9kZSA9IGVsZW1lbnQo
KTsKICAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICBu
b2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJu
IDA7CiAKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlc3VsdDsKICAgICBpZiAocHNldWRvID09
IFJlbmRlclN0eWxlOjpGSVJTVF9MSU5FX0lOSEVSSVRFRCkgewogICAgICAgICByZXN1bHQgPSBk
b2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudChzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obm9kZSksIHBhcmVudFN0eWxlLCBmYWxzZSk7CiAgICAgICAgIHJlc3VsdC0+c2V0
U3R5bGVUeXBlKFJlbmRlclN0eWxlOjpGSVJTVF9MSU5FX0lOSEVSSVRFRCk7CiAgICAgfSBlbHNl
CiAgICAgICAgIHJlc3VsdCA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+cHNldWRvU3R5
bGVGb3JFbGVtZW50KHBzZXVkbywgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLCBwYXJlbnRT
dHlsZSk7Ci0gICAgaWYgKHJlc3VsdCAmJiB1c2VDYWNoZWRTdHlsZSkgewotICAgICAgICBzdHls
ZSgpLT5hZGRQc2V1ZG9TdHlsZShyZXN1bHQpOwotICAgICAgICByZXN1bHQtPmRlcmVmKGRvY3Vt
ZW50KCktPnJlbmRlckFyZW5hKCkpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCiBzdGF0aWMgQ29sb3IgZGVjb3JhdGlvbkNvbG9y
KFJlbmRlclN0eWxlKiBzdHlsZSkKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDM3NTg2KQorKysg
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzYsOCArMzc2LDkg
QEAgcHJpdmF0ZToKICAgICBib29sIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIChzdHlsZSgpLT5vdmVyZmxvd1goKSA9
PSBPU0NST0xMIHx8IHN0eWxlKCktPm92ZXJmbG93WCgpID09IE9BVVRPKTsgfQogCiBwdWJsaWM6
Ci0gICAgUmVuZGVyU3R5bGUqIGdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpQc2V1ZG9JZCwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9vbCB1c2VDYWNoZWRTdHlsZSA9IHRydWUp
IGNvbnN0OwotCisgICAgUmVuZGVyU3R5bGUqIGdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0
eWxlOjpQc2V1ZG9JZCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCkgY29uc3Q7CisgICAg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gZ2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShSZW5kZXJTdHls
ZTo6UHNldWRvSWQsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDApIGNvbnN0OworICAgIAog
ICAgIHZvaWQgdXBkYXRlRHJhZ1N0YXRlKGJvb2wgZHJhZ09uKTsKIAogICAgIFJlbmRlclZpZXcq
IHZpZXcoKSBjb25zdDsKQEAgLTUzOSwxNCArNTQwLDE0IEBAIHB1YmxpYzoKICAgICAvLyBDYWxs
ZWQgdG8gdXBkYXRlIGEgc3R5bGUgdGhhdCBpcyBhbGxvd2VkIHRvIHRyaWdnZXIgYW5pbWF0aW9u
cy4KICAgICAvLyBGSVhNRTogUmlnaHQgbm93IHRoaXMgd2lsbCB0eXBpY2FsbHkgYmUgY2FsbGVk
IG9ubHkgd2hlbiB1cGRhdGluZyBoYXBwZW5zIGZyb20gdGhlIERPTSBvbiBleHBsaWNpdCBlbGVt
ZW50cy4KICAgICAvLyBXZSBkb24ndCB5ZXQgaGFuZGxlIGdlbmVyYXRlZCBjb250ZW50IGFuaW1h
dGlvbiBzdWNoIGFzIGZpcnN0LWxldHRlciBvciBiZWZvcmUvYWZ0ZXIgKHdlJ2xsIHdvcnJ5IGFi
b3V0IHRoaXMgbGF0ZXIpLgotICAgIHZvaWQgc2V0QW5pbWF0YWJsZVN0eWxlKFJlbmRlclN0eWxl
Kik7CisgICAgdm9pZCBzZXRBbmltYXRhYmxlU3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4p
OwogCiAgICAgLy8gU2V0IHRoZSBzdHlsZSBvZiB0aGUgb2JqZWN0IGFuZCB1cGRhdGUgdGhlIHN0
YXRlIG9mIHRoZSBvYmplY3QgYWNjb3JkaW5nbHkuCi0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxl
KGNvbnN0IFJlbmRlclN0eWxlKik7CisgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+KTsKIAogICAgIC8vIFVwZGF0ZXMgb25seSB0aGUgbG9jYWwgc3R5bGUg
cHRyIG9mIHRoZSBvYmplY3QuICBEb2VzIG5vdCB1cGRhdGUgdGhlIHN0YXRlIG9mIHRoZSBvYmpl
Y3QsCiAgICAgLy8gYW5kIHNvIG9ubHkgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBzdHlsZSBp
cyBrbm93biBub3QgdG8gaGF2ZSBjaGFuZ2VkIChvciBmcm9tIHNldFN0eWxlKS4KLSAgICB2b2lk
IHNldFN0eWxlSW50ZXJuYWwoUmVuZGVyU3R5bGUqKTsKKyAgICB2b2lkIHNldFN0eWxlSW50ZXJu
YWwoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4pOwogCiAgICAgLy8gcmV0dXJucyB0aGUgY29udGFp
bmluZyBibG9jayBsZXZlbCBlbGVtZW50IGZvciB0aGlzIGVsZW1lbnQuCiAgICAgUmVuZGVyQmxv
Y2sqIGNvbnRhaW5pbmdCbG9jaygpIGNvbnN0OwpAQCAtNjk1LDcgKzY5Niw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGludCBtaW5QcmVmV2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAg
dmlydHVhbCBpbnQgbWF4UHJlZldpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCi0gICAgUmVu
ZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQorICAgIFJlbmRlclN0
eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KICAgICBSZW5kZXJT
dHlsZSogZmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUoYm9v
bCBmaXJzdExpbmUpIGNvbnN0IHsgcmV0dXJuIGZpcnN0TGluZSA/IGZpcnN0TGluZVN0eWxlKCkg
OiBzdHlsZSgpOyB9CiAKQEAgLTkxMSw3ICs5MTIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBh
cmVuYURlbGV0ZShSZW5kZXJBcmVuYSosIHZvaWQqIG9iamVjdEJhc2UpOwogCiBwcml2YXRlOgot
ICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHls
ZTsKIAogICAgIE5vZGUqIG1fbm9kZTsKIApJbmRleDogcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suY3BwCShyZXZpc2lv
biAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDIxICszNSwyMSBAQCBSZW5kZXJTVkdCbG9jazo6UmVuZGVyU1ZHQmxvY2soU1ZHRWxl
bWVuCiB7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHQmxvY2s6OnNldFN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSkgCit2b2lkIFJlbmRlclNWR0Jsb2NrOjpzZXRTdHlsZShQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBzdHlsZSkgCiB7Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIHVzZVN0eWxlID0g
c3R5bGU7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiB1c2VTdHlsZSA9IHN0eWxlOwogCiAgICAg
Ly8gU1ZHIHRleHQgbGF5b3V0IGNvZGUgZXhwZWN0cyB1cyB0byBiZSBhIGJsb2NrLWxldmVsIHN0
eWxlIGVsZW1lbnQuICAgCiAgICAgaWYgKHVzZVN0eWxlLT5kaXNwbGF5KCkgPT0gTk9ORSkKICAg
ICAgICAgc2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOwogICAgIGVsc2UgaWYgKHVzZVN0eWxlLT5p
c0Rpc3BsYXlJbmxpbmVUeXBlKCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIG5ld1N0eWxlID0g
bmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOwotICAgICAgICBuZXdTdHlsZS0+aW5o
ZXJpdEZyb20oc3R5bGUpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0g
UmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgICAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20odXNl
U3R5bGUuZ2V0KCkpOwogICAgICAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7CiAgICAg
ICAgIHVzZVN0eWxlID0gbmV3U3R5bGU7CiAgICAgfQogCi0gICAgUmVuZGVyQmxvY2s6OnNldFN0
eWxlKHVzZVN0eWxlKTsKKyAgICBSZW5kZXJCbG9jazo6c2V0U3R5bGUodXNlU3R5bGUucmVsZWFz
ZSgpKTsKICAgICBzZXRSZXBsYWNlZChmYWxzZSk7CiAKICAgICAvL0ZJWE1FOiBPbmNlIG92ZXJm
bG93IHJ1bGVzIGFyZSBzdXBwb3J0ZWQgYnkgU1ZHIHdlIHNob3VsZApJbmRleDogcmVuZGVyaW5n
L1JlbmRlclNWR0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2Nr
LmgJKHJldmlzaW9uIDM3NTg2KQorKysgcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgY2xhc3MgU1ZHRWxlbWVudDsKIGNsYXNzIFJlbmRl
clNWR0Jsb2NrIDogcHVibGljIFJlbmRlckJsb2NrIHsKIHB1YmxpYzoKICAgICBSZW5kZXJTVkdC
bG9jayhTVkdFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKGNvbnN0IFJlbmRl
clN0eWxlKik7CisgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+KTsKIH07CiAKIH0KSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwCShyZXZpc2lvbiAzNzYxNCkK
KysrIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcs
MTMgKzExNywxMSBAQCBTY3JvbGxiYXJQYXJ0IFJlbmRlclNjcm9sbGJhcjo6cGFydEZvclN0CiAg
ICAgcmV0dXJuIHNfc3R5bGVSZXNvbHZlUGFydDsKIH0KIAotUmVuZGVyU3R5bGUqIFJlbmRlclNj
cm9sbGJhcjo6Z2V0U2Nyb2xsYmFyUHNldWRvU3R5bGUoU2Nyb2xsYmFyUGFydCBwYXJ0VHlwZSwg
UmVuZGVyU3R5bGU6OlBzZXVkb0lkIHBzZXVkb0lkKQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
UmVuZGVyU2Nyb2xsYmFyOjpnZXRTY3JvbGxiYXJQc2V1ZG9TdHlsZShTY3JvbGxiYXJQYXJ0IHBh
cnRUeXBlLCBSZW5kZXJTdHlsZTo6UHNldWRvSWQgcHNldWRvSWQpCiB7CiAgICAgc19zdHlsZVJl
c29sdmVQYXJ0ID0gcGFydFR5cGU7CiAgICAgc19zdHlsZVJlc29sdmVTY3JvbGxiYXIgPSB0aGlz
OwotICAgIFJlbmRlclN0eWxlKiByZXN1bHQgPSBtX293bmVyLT5nZXRQc2V1ZG9TdHlsZShwc2V1
ZG9JZCwgbV9vd25lci0+c3R5bGUoKSwgZmFsc2UpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAg
IHJlc3VsdC0+cmVmKCk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZXN1bHQgPSBtX293bmVy
LT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHBzZXVkb0lkLCBtX293bmVyLT5zdHlsZSgpKTsKICAg
ICBzX3N0eWxlUmVzb2x2ZVBhcnQgPSBOb1BhcnQ7CiAgICAgc19zdHlsZVJlc29sdmVTY3JvbGxi
YXIgPSAwOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xODUsNyArMTgzLDcgQEAgdm9pZCBSZW5k
ZXJTY3JvbGxiYXI6OnVwZGF0ZVNjcm9sbGJhclBhcgogICAgIGlmIChwYXJ0VHlwZSA9PSBOb1Bh
cnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlclN0eWxlKiBwYXJ0U3R5bGUgPSAhZGVz
dHJveSA/IGdldFNjcm9sbGJhclBzZXVkb1N0eWxlKHBhcnRUeXBlLCAgcHNldWRvRm9yU2Nyb2xs
YmFyUGFydChwYXJ0VHlwZSkpIDogMDsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHBhcnRTdHls
ZSA9ICFkZXN0cm95ID8gZ2V0U2Nyb2xsYmFyUHNldWRvU3R5bGUocGFydFR5cGUsICBwc2V1ZG9G
b3JTY3JvbGxiYXJQYXJ0KHBhcnRUeXBlKSkgOiAwOwogICAgIAogICAgIGJvb2wgbmVlZFJlbmRl
cmVyID0gIWRlc3Ryb3kgJiYgcGFydFN0eWxlICYmIHBhcnRTdHlsZS0+ZGlzcGxheSgpICE9IE5P
TkUgJiYgcGFydFN0eWxlLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRTsKICAgICAKQEAgLTIyMywx
MCArMjIxLDcgQEAgdm9pZCBSZW5kZXJTY3JvbGxiYXI6OnVwZGF0ZVNjcm9sbGJhclBhcgogICAg
IH0KICAgICAKICAgICBpZiAocGFydFJlbmRlcmVyKQotICAgICAgICBwYXJ0UmVuZGVyZXItPnNl
dFN0eWxlKHBhcnRTdHlsZSk7Ci0gICAgICAgIAotICAgIGlmIChwYXJ0U3R5bGUpCi0gICAgICAg
IHBhcnRTdHlsZS0+ZGVyZWYobV9vd25lci0+cmVuZGVyQXJlbmEoKSk7CisgICAgICAgIHBhcnRS
ZW5kZXJlci0+c2V0U3R5bGUocGFydFN0eWxlLnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgUmVuZGVy
U2Nyb2xsYmFyOjpwYWludFBhcnQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIFNj
cm9sbGJhclBhcnQgcGFydFR5cGUsIGNvbnN0IEludFJlY3QmIHJlY3QpCkluZGV4OiByZW5kZXJp
bmcvUmVuZGVyU2Nyb2xsYmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclNjcm9s
bGJhci5oCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgaW50IG1pbmltdW1U
aHVtYkxlbmd0aCgpOwogCiBwcml2YXRlOgotICAgIFJlbmRlclN0eWxlKiBnZXRTY3JvbGxiYXJQ
c2V1ZG9TdHlsZShTY3JvbGxiYXJQYXJ0LCBSZW5kZXJTdHlsZTo6UHNldWRvSWQpOworICAgIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IGdldFNjcm9sbGJhclBzZXVkb1N0eWxlKFNjcm9sbGJhclBh
cnQsIFJlbmRlclN0eWxlOjpQc2V1ZG9JZCk7CiAgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJQYXJ0
KFNjcm9sbGJhclBhcnQsIGJvb2wgZGVzdHJveSA9IGZhbHNlKTsKIAogICAgIFJlbmRlck9iamVj
dCogbV9vd25lcjsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRl
cmluZy9SZW5kZXJTbGlkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsMjQgKzE2OCwyMSBA
QCB2b2lkIFJlbmRlclNsaWRlcjo6c3R5bGVEaWRDaGFuZ2UoUmVuZGVyCiB7CiAgICAgUmVuZGVy
QmxvY2s6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKICAgICAKLSAgICBpZiAobV90
aHVtYikgewotICAgICAgICBSZW5kZXJTdHlsZSogdGh1bWJTdHlsZSA9IGNyZWF0ZVRodW1iU3R5
bGUoc3R5bGUoKSwgbV90aHVtYi0+cmVuZGVyZXIoKS0+c3R5bGUoKSk7Ci0gICAgICAgIG1fdGh1
bWItPnJlbmRlcmVyKCktPnNldFN0eWxlKHRodW1iU3R5bGUpOwotICAgIH0KKyAgICBpZiAobV90
aHVtYikKKyAgICAgICAgbV90aHVtYi0+cmVuZGVyZXIoKS0+c2V0U3R5bGUoY3JlYXRlVGh1bWJT
dHlsZShzdHlsZSgpLCBtX3RodW1iLT5yZW5kZXJlcigpLT5zdHlsZSgpKSk7CiAgICAgICAgIAog
ICAgIHNldFJlcGxhY2VkKGlzSW5saW5lKCkpOwogfQogCi1SZW5kZXJTdHlsZSogUmVuZGVyU2xp
ZGVyOjpjcmVhdGVUaHVtYlN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVy
U2xpZGVyOjpjcmVhdGVUaHVtYlN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZTsK
LQotICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IGdldFBzZXVkb1N0eWxlKFJlbmRlclN0
eWxlOjpTTElERVJfVEhVTUIpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGU7CisgICAg
UmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gZ2V0Q2FjaGVkUHNldWRvU3R5bGUoUmVuZGVyU3R5
bGU6OlNMSURFUl9USFVNQik7CiAgICAgaWYgKHBzZXVkb1N0eWxlKQogICAgICAgICAvLyBXZSBt
YXkgYmUgc2hhcmluZyBzdHlsZSB3aXRoIGFub3RoZXIgc2xpZGVyLCBidXQgd2UgbXVzdCBub3Qg
c2hhcmUgdGhlIHRodW1iIHN0eWxlLgotICAgICAgICBzdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEo
KSkgUmVuZGVyU3R5bGUoKnBzZXVkb1N0eWxlKTsKKyAgICAgICAgc3R5bGUgPSBSZW5kZXJTdHls
ZTo6Y2xvbmUocHNldWRvU3R5bGUpOwogICAgIGVsc2UKLSAgICAgICAgc3R5bGUgPSBuZXcgKHJl
bmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCk7CisgICAgICAgIHN0eWxlID0gUmVuZGVyU3R5bGU6
OmNyZWF0ZSgpOwogCiAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICBzdHlsZS0+aW5oZXJp
dEZyb20ocGFyZW50U3R5bGUpOwpAQCAtMjQ0LDkgKzI0MSw5IEBAIHZvaWQgUmVuZGVyU2xpZGVy
Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiB7CiAgICAgaWYgKCFtX3RodW1iKSB7CiAgICAgICAgIG1f
dGh1bWIgPSBuZXcgSFRNTFNsaWRlclRodW1iRWxlbWVudChkb2N1bWVudCgpLCBub2RlKCkpOwot
ICAgICAgICBSZW5kZXJTdHlsZSogdGh1bWJTdHlsZSA9IGNyZWF0ZVRodW1iU3R5bGUoc3R5bGUo
KSk7Ci0gICAgICAgIG1fdGh1bWItPnNldFJlbmRlcmVyKG1fdGh1bWItPmNyZWF0ZVJlbmRlcmVy
KHJlbmRlckFyZW5hKCksIHRodW1iU3R5bGUpKTsKLSAgICAgICAgbV90aHVtYi0+cmVuZGVyZXIo
KS0+c2V0U3R5bGUodGh1bWJTdHlsZSk7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gdGh1
bWJTdHlsZSA9IGNyZWF0ZVRodW1iU3R5bGUoc3R5bGUoKSk7CisgICAgICAgIG1fdGh1bWItPnNl
dFJlbmRlcmVyKG1fdGh1bWItPmNyZWF0ZVJlbmRlcmVyKHJlbmRlckFyZW5hKCksIHRodW1iU3R5
bGUuZ2V0KCkpKTsKKyAgICAgICAgbV90aHVtYi0+cmVuZGVyZXIoKS0+c2V0U3R5bGUodGh1bWJT
dHlsZS5yZWxlYXNlKCkpOwogICAgICAgICBtX3RodW1iLT5zZXRBdHRhY2hlZCgpOwogICAgICAg
ICBtX3RodW1iLT5zZXRJbkRvY3VtZW50KHRydWUpOwogICAgICAgICBhZGRDaGlsZChtX3RodW1i
LT5yZW5kZXJlcigpKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgJKHJldmlzaW9uIDM3NTg2KQorKysgcmVuZGVy
aW5nL1JlbmRlclNsaWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFJlbmRl
clN0eWxlOjpEaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogICAgIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIFJlbmRlclN0eWxlKiBjcmVhdGVUaHVtYlN0eWxlKGNvbnN0IFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlID0gMCk7Cisg
ICAgICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZVRodW1iU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSAwKTsK
ICAgICAgICAgaW50IHRyYWNrU2l6ZSgpOwogCiAgICAgICAgIFJlZlB0cjxIVE1MU2xpZGVyVGh1
bWJFbGVtZW50PiBtX3RodW1iOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiAzNzU4NikKKysr
IHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwxMCArMjAw
LDEwIEBAIHZvaWQgUmVuZGVyVGFibGU6OmFkZENoaWxkKFJlbmRlck9iamVjdCoKICAgICBpZiAo
YmVmb3JlQ2hpbGQgJiYgIWJlZm9yZUNoaWxkLT5pc1RhYmxlU2VjdGlvbigpICYmIGJlZm9yZUNo
aWxkLT5zdHlsZSgpLT5kaXNwbGF5KCkgIT0gVEFCTEVfQ0FQVElPTiAmJiBiZWZvcmVDaGlsZC0+
c3R5bGUoKS0+ZGlzcGxheSgpICE9IFRBQkxFX0NPTFVNTl9HUk9VUCkKICAgICAgICAgYmVmb3Jl
Q2hpbGQgPSAwOwogICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbiA9IG5ldyAocmVuZGVy
QXJlbmEoKSkgUmVuZGVyVGFibGVTZWN0aW9uKGRvY3VtZW50KCkgLyogYW5vbnltb3VzICovKTsK
LSAgICBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0
eWxlKCk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpj
cmVhdGUoKTsKICAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20oc3R5bGUoKSk7CiAgICAgbmV3U3R5
bGUtPnNldERpc3BsYXkoVEFCTEVfUk9XX0dST1VQKTsKLSAgICBzZWN0aW9uLT5zZXRTdHlsZShu
ZXdTdHlsZSk7CisgICAgc2VjdGlvbi0+c2V0U3R5bGUobmV3U3R5bGUucmVsZWFzZSgpKTsKICAg
ICBhZGRDaGlsZChzZWN0aW9uLCBiZWZvcmVDaGlsZCk7CiAgICAgc2VjdGlvbi0+YWRkQ2hpbGQo
Y2hpbGQpOwogfQpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHJl
bmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDEwICs5Mywx
MCBAQCB2b2lkIFJlbmRlclRhYmxlUm93OjphZGRDaGlsZChSZW5kZXJPYmplCiAgICAgICAgIH0K
IAogICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJl
bmRlclRhYmxlQ2VsbChkb2N1bWVudCgpIC8qIGFub255bW91cyBvYmplY3QgKi8pOwotICAgICAg
ICBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxl
KCk7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y3JlYXRlKCk7CiAgICAgICAgIG5ld1N0eWxlLT5pbmhlcml0RnJvbShzdHlsZSgpKTsKICAgICAg
ICAgbmV3U3R5bGUtPnNldERpc3BsYXkoVEFCTEVfQ0VMTCk7Ci0gICAgICAgIGNlbGwtPnNldFN0
eWxlKG5ld1N0eWxlKTsKKyAgICAgICAgY2VsbC0+c2V0U3R5bGUobmV3U3R5bGUucmVsZWFzZSgp
KTsKICAgICAgICAgYWRkQ2hpbGQoY2VsbCwgYmVmb3JlQ2hpbGQpOwogICAgICAgICBjZWxsLT5h
ZGRDaGlsZChjaGlsZCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rp
b24uY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTAgKzExMiwxMCBAQCB2b2lkIFJlbmRlclRhYmxl
U2VjdGlvbjo6YWRkQ2hpbGQoUmVuZGVyCiAgICAgICAgIH0KIAogICAgICAgICBSZW5kZXJPYmpl
Y3QqIHJvdyA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyVGFibGVSb3coZG9jdW1lbnQoKSAv
KiBhbm9ueW1vdXMgdGFibGUgKi8pOwotICAgICAgICBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBu
ZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCk7CisgICAgICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgICAgIG5ld1N0eWxl
LT5pbmhlcml0RnJvbShzdHlsZSgpKTsKICAgICAgICAgbmV3U3R5bGUtPnNldERpc3BsYXkoVEFC
TEVfUk9XKTsKLSAgICAgICAgcm93LT5zZXRTdHlsZShuZXdTdHlsZSk7CisgICAgICAgIHJvdy0+
c2V0U3R5bGUobmV3U3R5bGUucmVsZWFzZSgpKTsKICAgICAgICAgYWRkQ2hpbGQocm93LCBiZWZv
cmVDaGlsZCk7CiAgICAgICAgIHJvdy0+YWRkQ2hpbGQoY2hpbGQpOwogICAgICAgICByZXR1cm47
CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3
IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnN0eWxlRGlkQ2hhbmdlKFIKIAogICAgIGlmICht
X2lubmVyVGV4dCkgewogICAgICAgICBSZW5kZXJCbG9jayogdGV4dEJsb2NrUmVuZGVyZXIgPSBz
dGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KG1faW5uZXJUZXh0LT5yZW5kZXJlcigpKTsKLSAgICAg
ICAgUmVuZGVyU3R5bGUqIHRleHRCbG9ja1N0eWxlID0gY3JlYXRlSW5uZXJUZXh0U3R5bGUoc3R5
bGUoKSk7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gdGV4dEJsb2NrU3R5bGUgPSBjcmVh
dGVJbm5lclRleHRTdHlsZShzdHlsZSgpKTsKICAgICAgICAgLy8gV2UgbWF5IGhhdmUgc2V0IHRo
ZSB3aWR0aCBhbmQgdGhlIGhlaWdodCBpbiB0aGUgb2xkIHN0eWxlIGluIGxheW91dCgpLiBSZXNl
dCB0aGVtIG5vdyB0byBhdm9pZAogICAgICAgICAvLyBnZXR0aW5nIGEgc3B1cmlvdXMgbGF5b3V0
IGhpbnQuCiAgICAgICAgIHRleHRCbG9ja1JlbmRlcmVyLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVu
Z3RoKCkpOwpAQCAtMTQzLDkgKzE0Myw5IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnN0eWxl
RGlkQ2hhbmdlKFIKICAgICBzZXRSZXBsYWNlZChpc0lubGluZSgpKTsKIH0KIAotUmVuZGVyU3R5
bGUqIFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVJbm5lckJsb2NrU3R5bGUoY29uc3QgUmVuZGVy
U3R5bGUqIHN0YXJ0U3R5bGUpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29u
dHJvbDo6Y3JlYXRlSW5uZXJCbG9ja1N0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxl
KQogewotICAgIFJlbmRlclN0eWxlKiBpbm5lckJsb2NrU3R5bGUgPSBuZXcgKHJlbmRlckFyZW5h
KCkpIFJlbmRlclN0eWxlKCk7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBpbm5lckJsb2NrU3R5
bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAKICAgICBpbm5lckJsb2NrU3R5bGUtPmluaGVy
aXRGcm9tKHN0YXJ0U3R5bGUpOwogICAgIGlubmVyQmxvY2tTdHlsZS0+c2V0RGlzcGxheShCTE9D
Syk7CkBAIC0xNTMsMjAgKzE1MywyMCBAQCBSZW5kZXJTdHlsZSogUmVuZGVyVGV4dENvbnRyb2w6
OmNyZWF0ZUluCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0aGUgc2hhZG93IGRvbSB0byBiZSBlZGl0
YWJsZSwgc28gd2Ugc2V0IHRoaXMgYmxvY2sgdG8gcmVhZC1vbmx5IGluIGNhc2UgdGhlIGlucHV0
IGl0c2VsZiBpcyBlZGl0YWJsZS4KICAgICBpbm5lckJsb2NrU3R5bGUtPnNldFVzZXJNb2RpZnko
UkVBRF9PTkxZKTsKIAotICAgIHJldHVybiBpbm5lckJsb2NrU3R5bGU7CisgICAgcmV0dXJuIGlu
bmVyQmxvY2tTdHlsZS5yZWxlYXNlKCk7CiB9CiAKLVJlbmRlclN0eWxlKiBSZW5kZXJUZXh0Q29u
dHJvbDo6Y3JlYXRlSW5uZXJUZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUp
CitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlSW5uZXJU
ZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpCiB7CiAgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQqPihub2RlKCkpOwogICAgIGJvb2wgcGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUgPSAhbV9t
dWx0aUxpbmUgJiYgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGVsZW1lbnQpLT5wbGFj
ZWhvbGRlclNob3VsZEJlVmlzaWJsZSgpOwogCi0gICAgUmVuZGVyU3R5bGUqIHRleHRCbG9ja1N0
eWxlID0gMDsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHRleHRCbG9ja1N0eWxlOwogICAgIGlm
IChwbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSkgewotICAgICAgICBSZW5kZXJTdHlsZSogcHNl
dWRvU3R5bGUgPSBnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6SU5QVVRfUExBQ0VIT0xERVIp
OwotICAgICAgICB0ZXh0QmxvY2tTdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5
bGUoKnBzZXVkb1N0eWxlKTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gZ2V0
Q2FjaGVkUHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OklOUFVUX1BMQUNFSE9MREVSKTsKKyAgICAg
ICAgdGV4dEJsb2NrU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUocHNldWRvU3R5bGUpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIHRleHRCbG9ja1N0eWxlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBS
ZW5kZXJTdHlsZSgpOyAgICAKKyAgICAgICAgdGV4dEJsb2NrU3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y3JlYXRlKCk7ICAgCiAgICAgICAgIHRleHRCbG9ja1N0eWxlLT5pbmhlcml0RnJvbShzdGFydFN0
eWxlKTsKICAgICB9CiAgICAgCkBAIC0yMjMsNDYgKzIyMyw0NiBAQCBSZW5kZXJTdHlsZSogUmVu
ZGVyVGV4dENvbnRyb2w6OmNyZWF0ZUluCiAgICAgaWYgKCFlbGVtZW50LT5pc0VuYWJsZWQoKSkK
ICAgICAgICAgdGV4dEJsb2NrU3R5bGUtPnNldENvbG9yKGRpc2FibGVkVGV4dENvbG9yKHRleHRC
bG9ja1N0eWxlLT5jb2xvcigpLCBzdGFydFN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSkpOwogCi0g
ICAgcmV0dXJuIHRleHRCbG9ja1N0eWxlOworICAgIHJldHVybiB0ZXh0QmxvY2tTdHlsZS5yZWxl
YXNlKCk7CiB9CiAKLVJlbmRlclN0eWxlKiBSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlUmVzdWx0
c0J1dHRvblN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKQorUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2w6OmNyZWF0ZVJlc3VsdHNCdXR0b25TdHlsZShj
b25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSkKIHsKICAgICBBU1NFUlQoIW1fbXVsdGlMaW5l
KTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQqPihub2RlKCkpOwotICAgIFJlbmRlclN0eWxlKiByZXN1bHRzQmxvY2tTdHlsZTsKKyAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlc3VsdHNCbG9ja1N0eWxlOwogICAgIGlmIChpbnB1dC0+
bWF4UmVzdWx0cygpIDwgMCkKLSAgICAgICAgcmVzdWx0c0Jsb2NrU3R5bGUgPSBnZXRQc2V1ZG9T
dHlsZShSZW5kZXJTdHlsZTo6U0VBUkNIX0RFQ09SQVRJT04pOworICAgICAgICByZXN1bHRzQmxv
Y2tTdHlsZSA9IGdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTRUFSQ0hfREVDT1JB
VElPTik7CiAgICAgZWxzZSBpZiAoIWlucHV0LT5tYXhSZXN1bHRzKCkpCi0gICAgICAgIHJlc3Vs
dHNCbG9ja1N0eWxlID0gZ2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNFQVJDSF9SRVNVTFRT
X0RFQ09SQVRJT04pOworICAgICAgICByZXN1bHRzQmxvY2tTdHlsZSA9IGdldENhY2hlZFBzZXVk
b1N0eWxlKFJlbmRlclN0eWxlOjpTRUFSQ0hfUkVTVUxUU19ERUNPUkFUSU9OKTsKICAgICBlbHNl
Ci0gICAgICAgIHJlc3VsdHNCbG9ja1N0eWxlID0gZ2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6
OlNFQVJDSF9SRVNVTFRTX0JVVFRPTik7CisgICAgICAgIHJlc3VsdHNCbG9ja1N0eWxlID0gZ2V0
Q2FjaGVkUHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNFQVJDSF9SRVNVTFRTX0JVVFRPTik7CiAK
ICAgICBpZiAoIXJlc3VsdHNCbG9ja1N0eWxlKQotICAgICAgICByZXN1bHRzQmxvY2tTdHlsZSA9
IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsKKyAgICAgICAgcmVzdWx0c0Jsb2Nr
U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAKICAgICBpZiAoc3RhcnRTdHlsZSkKICAg
ICAgICAgcmVzdWx0c0Jsb2NrU3R5bGUtPmluaGVyaXRGcm9tKHN0YXJ0U3R5bGUpOwogCi0gICAg
cmV0dXJuIHJlc3VsdHNCbG9ja1N0eWxlOworICAgIHJldHVybiByZXN1bHRzQmxvY2tTdHlsZS5y
ZWxlYXNlKCk7CiB9CiAKLVJlbmRlclN0eWxlKiBSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlQ2Fu
Y2VsQnV0dG9uU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpCitQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlQ2FuY2VsQnV0dG9uU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIGNhbmNl
bEJsb2NrU3R5bGU7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjYW5jZWxCbG9ja1N0eWxlOwog
ICAgIAotICAgIGlmIChSZW5kZXJTdHlsZSogcHNldWRvU3R5bGUgPSBnZXRQc2V1ZG9TdHlsZShS
ZW5kZXJTdHlsZTo6U0VBUkNIX0NBTkNFTF9CVVRUT04pKQorICAgIGlmIChSZWZQdHI8UmVuZGVy
U3R5bGU+IHBzZXVkb1N0eWxlID0gZ2V0Q2FjaGVkUHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNF
QVJDSF9DQU5DRUxfQlVUVE9OKSkKICAgICAgICAgLy8gV2UgbWF5IGJlIHNoYXJpbmcgc3R5bGUg
d2l0aCBhbm90aGVyIHNlYXJjaCBmaWVsZCwgYnV0IHdlIG11c3Qgbm90IHNoYXJlIHRoZSBjYW5j
ZWwgYnV0dG9uIHN0eWxlLgotICAgICAgICBjYW5jZWxCbG9ja1N0eWxlID0gbmV3IChyZW5kZXJB
cmVuYSgpKSBSZW5kZXJTdHlsZSgqcHNldWRvU3R5bGUpOworICAgICAgICBjYW5jZWxCbG9ja1N0
eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKHBzZXVkb1N0eWxlLmdldCgpKTsKICAgICBlbHNlCi0g
ICAgICAgIGNhbmNlbEJsb2NrU3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxl
KCk7CisgICAgICAgIGNhbmNlbEJsb2NrU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAK
ICAgICBpZiAoc3RhcnRTdHlsZSkKICAgICAgICAgY2FuY2VsQmxvY2tTdHlsZS0+aW5oZXJpdEZy
b20oc3RhcnRTdHlsZSk7CiAKLSAgICB1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KGNhbmNl
bEJsb2NrU3R5bGUpOworICAgIHVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkoY2FuY2VsQmxv
Y2tTdHlsZS5nZXQoKSk7CiAKLSAgICByZXR1cm4gY2FuY2VsQmxvY2tTdHlsZTsKKyAgICByZXR1
cm4gY2FuY2VsQmxvY2tTdHlsZS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRy
b2w6OmNyZWF0ZVN1YnRyZWVJZk5lZWRlZCgpCkBAIC0yNzEsMTggKzI3MSwxMiBAQCB2b2lkIFJl
bmRlclRleHRDb250cm9sOjpjcmVhdGVTdWJ0cmVlSWZOCiAgICAgaWYgKGlzU2VhcmNoRmllbGQg
JiYgIW1faW5uZXJCbG9jaykgewogICAgICAgICAvLyBDcmVhdGUgdGhlIGlubmVyIGJsb2NrIGVs
ZW1lbnQKICAgICAgICAgbV9pbm5lckJsb2NrID0gbmV3IFRleHRDb250cm9sSW5uZXJFbGVtZW50
KGRvY3VtZW50KCksIG5vZGUoKSk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBpbm5lckJsb2NrU3R5
bGUgPSBjcmVhdGVJbm5lckJsb2NrU3R5bGUoc3R5bGUoKSk7Ci0gICAgICAgIGlubmVyQmxvY2tT
dHlsZS0+cmVmKCk7Ci0gICAgICAgIG1faW5uZXJCbG9jay0+YXR0YWNoSW5uZXJFbGVtZW50KG5v
ZGUoKSwgaW5uZXJCbG9ja1N0eWxlLCByZW5kZXJBcmVuYSgpKTsKLSAgICAgICAgaW5uZXJCbG9j
a1N0eWxlLT5kZXJlZihyZW5kZXJBcmVuYSgpKTsKKyAgICAgICAgbV9pbm5lckJsb2NrLT5hdHRh
Y2hJbm5lckVsZW1lbnQobm9kZSgpLCBjcmVhdGVJbm5lckJsb2NrU3R5bGUoc3R5bGUoKSksIHJl
bmRlckFyZW5hKCkpOwogICAgIH0KICAgICBpZiAoaXNTZWFyY2hGaWVsZCAmJiAhbV9yZXN1bHRz
QnV0dG9uKSB7CiAgICAgICAgIC8vIENyZWF0ZSB0aGUgc2VhcmNoIHJlc3VsdHMgYnV0dG9uIGVs
ZW1lbnQKICAgICAgICAgbV9yZXN1bHRzQnV0dG9uID0gbmV3IFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvbkVsZW1lbnQoZG9jdW1lbnQoKSk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiByZXN1bHRzQnV0
dG9uU3R5bGUgPSBjcmVhdGVSZXN1bHRzQnV0dG9uU3R5bGUobV9pbm5lckJsb2NrLT5yZW5kZXJl
cigpLT5zdHlsZSgpKTsKLSAgICAgICAgcmVzdWx0c0J1dHRvblN0eWxlLT5yZWYoKTsKLSAgICAg
ICAgbV9yZXN1bHRzQnV0dG9uLT5hdHRhY2hJbm5lckVsZW1lbnQobV9pbm5lckJsb2NrLmdldCgp
LCByZXN1bHRzQnV0dG9uU3R5bGUsIHJlbmRlckFyZW5hKCkpOwotICAgICAgICByZXN1bHRzQnV0
dG9uU3R5bGUtPmRlcmVmKHJlbmRlckFyZW5hKCkpOworICAgICAgICBtX3Jlc3VsdHNCdXR0b24t
PmF0dGFjaElubmVyRWxlbWVudChtX2lubmVyQmxvY2suZ2V0KCksIGNyZWF0ZVJlc3VsdHNCdXR0
b25TdHlsZShtX2lubmVyQmxvY2stPnJlbmRlcmVyKCktPnN0eWxlKCkpLCByZW5kZXJBcmVuYSgp
KTsKICAgICB9CiAgICAgaWYgKCFtX2lubmVyVGV4dCkgewogICAgICAgICAvLyBDcmVhdGUgdGhl
IHRleHQgYmxvY2sgZWxlbWVudApAQCAtMjkyLDE5ICsyODYsMTMgQEAgdm9pZCBSZW5kZXJUZXh0
Q29udHJvbDo6Y3JlYXRlU3VidHJlZUlmTgogICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUgPSBzdHlsZSgpOwogICAgICAgICBpZiAobV9pbm5lckJsb2NrKQogICAgICAgICAgICAgcGFy
ZW50U3R5bGUgPSBtX2lubmVyQmxvY2stPnJlbmRlcmVyKCktPnN0eWxlKCk7Ci0gICAgICAgIFJl
bmRlclN0eWxlKiB0ZXh0QmxvY2tTdHlsZSA9IGNyZWF0ZUlubmVyVGV4dFN0eWxlKHBhcmVudFN0
eWxlKTsKLSAgICAgICAgdGV4dEJsb2NrU3R5bGUtPnJlZigpOwogICAgICAgICBtX2lubmVyVGV4
dCA9IG5ldyBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQoZG9jdW1lbnQoKSwgbV9pbm5lckJs
b2NrID8gMCA6IG5vZGUoKSk7Ci0gICAgICAgIG1faW5uZXJUZXh0LT5hdHRhY2hJbm5lckVsZW1l
bnQobV9pbm5lckJsb2NrID8gbV9pbm5lckJsb2NrLmdldCgpIDogbm9kZSgpLCB0ZXh0QmxvY2tT
dHlsZSwgcmVuZGVyQXJlbmEoKSk7Ci0gICAgICAgIHRleHRCbG9ja1N0eWxlLT5kZXJlZihyZW5k
ZXJBcmVuYSgpKTsKKyAgICAgICAgbV9pbm5lclRleHQtPmF0dGFjaElubmVyRWxlbWVudChtX2lu
bmVyQmxvY2sgPyBtX2lubmVyQmxvY2suZ2V0KCkgOiBub2RlKCksIGNyZWF0ZUlubmVyVGV4dFN0
eWxlKHBhcmVudFN0eWxlKSwgcmVuZGVyQXJlbmEoKSk7CiAgICAgfQogICAgIGlmIChpc1NlYXJj
aEZpZWxkICYmICFtX2NhbmNlbEJ1dHRvbikgewogICAgICAgICAvLyBDcmVhdGUgdGhlIGNhbmNl
bCBidXR0b24gZWxlbWVudAogICAgICAgICBtX2NhbmNlbEJ1dHRvbiA9IG5ldyBTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQoKSk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBj
YW5jZWxCdXR0b25TdHlsZSA9IGNyZWF0ZUNhbmNlbEJ1dHRvblN0eWxlKG1faW5uZXJCbG9jay0+
cmVuZGVyZXIoKS0+c3R5bGUoKSk7Ci0gICAgICAgIGNhbmNlbEJ1dHRvblN0eWxlLT5yZWYoKTsK
LSAgICAgICAgbV9jYW5jZWxCdXR0b24tPmF0dGFjaElubmVyRWxlbWVudChtX2lubmVyQmxvY2su
Z2V0KCksIGNhbmNlbEJ1dHRvblN0eWxlLCByZW5kZXJBcmVuYSgpKTsKLSAgICAgICAgY2FuY2Vs
QnV0dG9uU3R5bGUtPmRlcmVmKHJlbmRlckFyZW5hKCkpOworICAgICAgICBtX2NhbmNlbEJ1dHRv
bi0+YXR0YWNoSW5uZXJFbGVtZW50KG1faW5uZXJCbG9jay5nZXQoKSwgY3JlYXRlQ2FuY2VsQnV0
dG9uU3R5bGUobV9pbm5lckJsb2NrLT5yZW5kZXJlcigpLT5zdHlsZSgpKSwgcmVuZGVyQXJlbmEo
KSk7CiAgICAgfQogfQogCkBAIC0xMTkwLDE0ICsxMTc4LDEyIEBAIEZvbnRTZWxlY3RvciogUmVu
ZGVyVGV4dENvbnRyb2w6OmZvbnRTZWwKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnVwZGF0ZVBs
YWNlaG9sZGVyVmlzaWJpbGl0eSgpCiB7CiAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
bV9pbm5lckJsb2NrID8gbV9pbm5lckJsb2NrLT5yZW5kZXJlcigpLT5zdHlsZSgpIDogc3R5bGUo
KTsKLSAgICBSZW5kZXJTdHlsZSogdGV4dEJsb2NrU3R5bGUgPSBjcmVhdGVJbm5lclRleHRTdHls
ZShwYXJlbnRTdHlsZSk7Ci0gICAgdGV4dEJsb2NrU3R5bGUtPnJlZigpOworICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gdGV4dEJsb2NrU3R5bGUgPSBjcmVhdGVJbm5lclRleHRTdHlsZShwYXJlbnRT
dHlsZSk7CiAgICAgbV9pbm5lclRleHQtPnJlbmRlcmVyKCktPnNldFN0eWxlKHRleHRCbG9ja1N0
eWxlKTsKICAgICBmb3IgKE5vZGUqIG4gPSBtX2lubmVyVGV4dC0+Zmlyc3RDaGlsZCgpOyBuOyBu
ID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShtX2lubmVyVGV4dC5nZXQoKSkpIHsKICAgICAgICAgaWYg
KG4tPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICBuLT5yZW5kZXJlcigpLT5zZXRTdHlsZSh0ZXh0
QmxvY2tTdHlsZSk7CiAgICAgfQotICAgIHRleHRCbG9ja1N0eWxlLT5kZXJlZihyZW5kZXJBcmVu
YSgpKTsKICAgICB1cGRhdGVGcm9tRWxlbWVudCgpOwogfQogCkluZGV4OiByZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2wuaAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaAko
d29ya2luZyBjb3B5KQpAQCAtMTMyLDEwICsxMzIsMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiwgU2Nyb2xsYmFyT3Jp
ZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplKTsKIAotICAgIFJlbmRlclN0eWxlKiBjcmVh
dGVJbm5lckJsb2NrU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpOwotICAgIFJl
bmRlclN0eWxlKiBjcmVhdGVJbm5lclRleHRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRT
dHlsZSk7Ci0gICAgUmVuZGVyU3R5bGUqIGNyZWF0ZUNhbmNlbEJ1dHRvblN0eWxlKGNvbnN0IFJl
bmRlclN0eWxlKiBzdGFydFN0eWxlKTsKLSAgICBSZW5kZXJTdHlsZSogY3JlYXRlUmVzdWx0c0J1
dHRvblN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKTsKKyAgICBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBjcmVhdGVJbm5lckJsb2NrU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0
YXJ0U3R5bGUpOworICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZUlubmVyVGV4dFN0
eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKTsKKyAgICBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBjcmVhdGVDYW5jZWxCdXR0b25TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRT
dHlsZSk7CisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlUmVzdWx0c0J1dHRvblN0
eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKTsKIAogICAgIHZvaWQgY3JlYXRlU3Vi
dHJlZUlmTmVlZGVkKCk7CiAgICAgdm9pZCB1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KFJl
bmRlclN0eWxlKik7CkluZGV4OiByZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAko
cmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTksMTMgKzU5LDEzIEBAIFRleHRDb250cm9sSW5uZXJFbGVt
ZW50OjpUZXh0Q29udHJvbElubmUKIHsKIH0KIAotdm9pZCBUZXh0Q29udHJvbElubmVyRWxlbWVu
dDo6YXR0YWNoSW5uZXJFbGVtZW50KE5vZGUqIHBhcmVudCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBS
ZW5kZXJBcmVuYSogYXJlbmEpCit2b2lkIFRleHRDb250cm9sSW5uZXJFbGVtZW50OjphdHRhY2hJ
bm5lckVsZW1lbnQoTm9kZSogcGFyZW50LCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSwg
UmVuZGVyQXJlbmEqIGFyZW5hKQogewogICAgIC8vIFdoZW4gYWRkaW5nIHRoZXNlIGVsZW1lbnRz
LCBjcmVhdGUgdGhlIHJlbmRlcmVyICYgc3R5bGUgZmlyc3QgYmVmb3JlIGFkZGluZyB0byB0aGUg
RE9NLgogICAgIC8vIE90aGVyd2lzZSwgdGhlIHJlbmRlciB0cmVlIHdpbGwgY3JlYXRlIHNvbWUg
YW5vbnltb3VzIGJsb2NrcyB0aGF0IHdpbGwgbWVzcyB1cCBvdXIgbGF5b3V0LgogCiAgICAgLy8g
Q3JlYXRlIHRoZSByZW5kZXJlciB3aXRoIHRoZSBzcGVjaWZpZWQgc3R5bGUKLSAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXIoYXJlbmEsIHN0eWxlKTsKKyAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXIoYXJlbmEsIHN0eWxlLmdldCgpKTsK
ICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgc2V0UmVuZGVyZXIocmVuZGVyZXIpOwogICAg
ICAgICByZW5kZXJlci0+c2V0U3R5bGUoc3R5bGUpOwpJbmRleDogcmVuZGVyaW5nL1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9UZXh0Q29udHJvbElu
bmVyRWxlbWVudHMuaAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcvVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBpc1NoYWRvd05vZGUoKSBjb25zdCB7IHJldHVybiBtX3NoYWRvd1Bh
cmVudDsgfQogICAgIHZpcnR1YWwgTm9kZSogc2hhZG93UGFyZW50Tm9kZSgpIHsgcmV0dXJuIG1f
c2hhZG93UGFyZW50OyB9CiAgICAgdm9pZCBzZXRTaGFkb3dQYXJlbnROb2RlKE5vZGUqIG5vZGUp
IHsgbV9zaGFkb3dQYXJlbnQgPSBub2RlOyB9Ci0gICAgdm9pZCBhdHRhY2hJbm5lckVsZW1lbnQo
Tm9kZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyQXJlbmEqKTsKKyAgICB2b2lkIGF0dGFjaElubmVy
RWxlbWVudChOb2RlKiwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4sIFJlbmRlckFyZW5hKik7CiAg
ICAgCiBwcml2YXRlOgogICAgIE5vZGUqIG1fc2hhZG93UGFyZW50OwpJbmRleDogcmVuZGVyaW5n
L3N0eWxlL0tleWZyYW1lTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL3N0eWxlL0tl
eWZyYW1lTGlzdC5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgcmVuZGVyaW5nL3N0eWxlL0tleWZy
YW1lTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEwICszMiw2IEBAIEtleWZyYW1lTGlz
dDo6fktleWZyYW1lTGlzdCgpCiAKIHZvaWQgS2V5ZnJhbWVMaXN0OjpjbGVhcigpCiB7Ci0gICAg
Zm9yIChWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFt
ZXMuYmVnaW4oKTsgaXQgIT0gbV9rZXlmcmFtZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIGlmIChp
dC0+c3R5bGUpCi0gICAgICAgICAgICBpdC0+c3R5bGUtPmRlcmVmKG1fcmVuZGVyZXItPnJlbmRl
ckFyZW5hKCkpOwotCiAgICAgbV9rZXlmcmFtZXMuY2xlYXIoKTsKICAgICBtX3Byb3BlcnRpZXMu
Y2xlYXIoKTsKIH0KQEAgLTQ3LDExICs0MywxMSBAQCBib29sIEtleWZyYW1lTGlzdDo6b3BlcmF0
b3I9PShjb25zdCBLZXlmCiAKICAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJh
dG9yIGl0MiA9IG8ubV9rZXlmcmFtZXMuYmVnaW4oKTsKICAgICBmb3IgKFZlY3RvcjxLZXlmcmFt
ZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgaXQxID0gbV9rZXlmcmFtZXMuYmVnaW4oKTsgaXQxICE9
IG1fa2V5ZnJhbWVzLmVuZCgpOyArK2l0MSkgewotICAgICAgICBpZiAoaXQxLT5rZXkgIT0gaXQy
LT5rZXkpCisgICAgICAgIGlmIChpdDEtPm1fa2V5ICE9IGl0Mi0+bV9rZXkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZTEgPSBpdDEt
PnN0eWxlOwotICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUyID0gaXQyLT5zdHlsZTsK
LSAgICAgICAgaWYgKCEoc3R5bGUxID09IHN0eWxlMikpCisgICAgICAgIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZTEgPSAqaXQxLT5tX3N0eWxlOworICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUyID0gKml0Mi0+bV9zdHlsZTsKKyAgICAgICAgaWYgKHN0eWxlMSAhPSBzdHlsZTIpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICsraXQyOwogICAgIH0KQEAgLTU5LDcg
KzU1LDcgQEAgYm9vbCBLZXlmcmFtZUxpc3Q6Om9wZXJhdG9yPT0oY29uc3QgS2V5ZgogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIEtleWZyYW1lTGlzdDo6aW5zZXJ0KGZsb2F0IGtleSwgUmVu
ZGVyU3R5bGUqIHN0eWxlKQordm9pZCBLZXlmcmFtZUxpc3Q6Omluc2VydChmbG9hdCBrZXksIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKQogewogICAgIGlmIChrZXkgPCAwIHx8IGtleSA+
IDEpCiAgICAgICAgIHJldHVybjsKQEAgLTY3LDExICs2MywxMSBAQCB2b2lkIEtleWZyYW1lTGlz
dDo6aW5zZXJ0KGZsb2F0IGtleSwgUmVuCiAgICAgaW50IGluZGV4ID0gLTE7CiAgICAgCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2tleWZyYW1lcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAobV9rZXlmcmFtZXNbaV0ua2V5ID09IGtleSkgeworICAgICAgICBpZiAobV9rZXlmcmFt
ZXNbaV0ubV9rZXkgPT0ga2V5KSB7CiAgICAgICAgICAgICBpbmRleCA9IChpbnQpIGk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAobV9rZXlmcmFtZXNbaV0ua2V5
ID4ga2V5KSB7CisgICAgICAgIGlmIChtX2tleWZyYW1lc1tpXS5tX2tleSA+IGtleSkgewogICAg
ICAgICAgICAgLy8gaW5zZXJ0IGJlZm9yZQogICAgICAgICAgICAgbV9rZXlmcmFtZXMuaW5zZXJ0
KGksIEtleWZyYW1lVmFsdWUoKSk7CiAgICAgICAgICAgICBpbmRleCA9IChpbnQpIGk7CkBAIC04
NSwxMiArODEsOCBAQCB2b2lkIEtleWZyYW1lTGlzdDo6aW5zZXJ0KGZsb2F0IGtleSwgUmVuCiAg
ICAgICAgIG1fa2V5ZnJhbWVzLmFwcGVuZChLZXlmcmFtZVZhbHVlKCkpOwogICAgIH0KICAgICAK
LSAgICBpZiAoc3R5bGUpCi0gICAgICAgIHN0eWxlLT5yZWYoKTsKLSAgICBpZiAobV9rZXlmcmFt
ZXNbaW5kZXhdLnN0eWxlKQotICAgICAgICBtX2tleWZyYW1lc1tpbmRleF0uc3R5bGUtPmRlcmVm
KG1fcmVuZGVyZXItPnJlbmRlckFyZW5hKCkpOwotICAgIG1fa2V5ZnJhbWVzW2luZGV4XS5rZXkg
PSBrZXk7Ci0gICAgbV9rZXlmcmFtZXNbaW5kZXhdLnN0eWxlID0gc3R5bGU7CisgICAgbV9rZXlm
cmFtZXNbaW5kZXhdLm1fa2V5ID0ga2V5OworICAgIG1fa2V5ZnJhbWVzW2luZGV4XS5tX3N0eWxl
ID0gc3R5bGU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IHJlbmRlcmluZy9z
dHlsZS9LZXlmcmFtZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvc3R5bGUvS2V5ZnJh
bWVMaXN0LmgJKHJldmlzaW9uIDM3NTg2KQorKysgcmVuZGVyaW5nL3N0eWxlL0tleWZyYW1lTGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQXRvbWljU3Ry
aW5nLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM3
LDEzICszOCwxNSBAQCBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIEtleWZyYW1lVmFsdWUgewog
cHVibGljOgogICAgIEtleWZyYW1lVmFsdWUoKQotICAgICAgICA6IGtleSgtMSkKLSAgICAgICAg
LCBzdHlsZSgwKQorICAgICAgICA6IG1fa2V5KC0xKQogICAgIHsKICAgICB9CiAKLSAgICBmbG9h
dCBrZXk7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlOworICAgIGZsb2F0IGtleSgpIGNvbnN0IHsg
cmV0dXJuIG1fa2V5OyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQorCisgICAgZmxvYXQgbV9rZXk7CisgICAgUmVmUHRyPFJl
bmRlclN0eWxlPiBtX3N0eWxlOwogfTsKIAogY2xhc3MgS2V5ZnJhbWVMaXN0IHsKQEAgLTYyLDcg
KzY1LDcgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYW5pbWF0aW9u
TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uTmFtZTsgfQogICAgIAotICAgIHZvaWQg
aW5zZXJ0KGZsb2F0IGtleSwgUmVuZGVyU3R5bGUqIHN0eWxlKTsKKyAgICB2b2lkIGluc2VydChm
bG9hdCBrZXksIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKTsKICAgICAKICAgICB2b2lk
IGFkZFByb3BlcnR5KGludCBwcm9wKSB7IG1fcHJvcGVydGllcy5hZGQocHJvcCk7IH0KICAgICBi
b29sIGNvbnRhaW5zUHJvcGVydHkoaW50IHByb3ApIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGll
cy5jb250YWlucyhwcm9wKTsgfQpJbmRleDogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCShyZXZpc2lv
biAzNzU4NikKKysrIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDU1ICszMywzNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBS
ZW5kZXJTdHlsZSogZGVmYXVsdFN0eWxlOwotCi12b2lkKiBSZW5kZXJTdHlsZTo6b3BlcmF0b3Ig
bmV3KHNpemVfdCBzeiwgUmVuZGVyQXJlbmEqIHJlbmRlckFyZW5hKSB0aHJvdygpCitpbmxpbmUg
UmVuZGVyU3R5bGUqIGRlZmF1bHRTdHlsZSgpCiB7Ci0gICAgcmV0dXJuIHJlbmRlckFyZW5hLT5h
bGxvY2F0ZShzeik7CisgICAgc3RhdGljIFJlZlB0cjxSZW5kZXJTdHlsZT4gc19kZWZhdWx0U3R5
bGU7CisgICAgaWYgKCFzX2RlZmF1bHRTdHlsZSkKKyAgICAgICAgc19kZWZhdWx0U3R5bGUgPSBS
ZW5kZXJTdHlsZTo6Y3JlYXRlRGVmYXVsdFN0eWxlKCk7CisgICAgcmV0dXJuIHNfZGVmYXVsdFN0
eWxlLmdldCgpOwogfQogCi12b2lkIFJlbmRlclN0eWxlOjpvcGVyYXRvciBkZWxldGUodm9pZCog
cHRyLCBzaXplX3Qgc3opCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJTdHlsZTo6Y3Jl
YXRlKCkKIHsKLSAgICAvLyBTdGFzaCBzaXplIHdoZXJlIGRlc3Ryb3kgY2FuIGZpbmQgaXQuCi0g
ICAgKihzaXplX3QgKilwdHIgPSBzejsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclN0
eWxlKCkpOwogfQogCi12b2lkIFJlbmRlclN0eWxlOjphcmVuYURlbGV0ZShSZW5kZXJBcmVuYSAq
YXJlbmEpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJTdHlsZTo6Y3JlYXRlRGVmYXVs
dFN0eWxlKCkKIHsKLSAgICBSZW5kZXJTdHlsZSogcHMgPSBwc2V1ZG9TdHlsZTsKLSAgICBSZW5k
ZXJTdHlsZSogcHJldiA9IDA7Ci0KLSAgICB3aGlsZSAocHMpIHsKLSAgICAgICAgcHJldiA9IHBz
OwotICAgICAgICBwcyA9IHBzLT5wc2V1ZG9TdHlsZTsKLSAgICAgICAgLy8gdG8gcHJldmVudCBh
IGRvdWJsZSBkZWxldGlvbi4KLSAgICAgICAgLy8gdGhpcyB3b3JrcyBvbmx5IGJlY2F1c2UgdGhl
IHN0eWxlcyBiZWxvdyBhcmVuJ3QgcmVhbGx5IHNoYXJlZAotICAgICAgICAvLyBEaXJrIHNhaWQg
d2UgbmVlZCBhbm90aGVyIGNvbnN0cnVjdCBhcyBzb29uIGFzIHRoZXNlIGFyZSBzaGFyZWQKLSAg
ICAgICAgcHJldi0+cHNldWRvU3R5bGUgPSAwOwotICAgICAgICBwcmV2LT5kZXJlZihhcmVuYSk7
Ci0gICAgfQotICAgIGRlbGV0ZSB0aGlzOwotCi0gICAgLy8gUmVjb3ZlciB0aGUgc2l6ZSBsZWZ0
IHRoZXJlIGZvciB1cyBieSBvcGVyYXRvciBkZWxldGUgYW5kIGZyZWUgdGhlIG1lbW9yeS4KLSAg
ICBhcmVuYS0+ZnJlZSgqKHNpemVfdCAqKXRoaXMsIHRoaXMpOworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUmVuZGVyU3R5bGUodHJ1ZSkpOwogfQogCi1pbmxpbmUgUmVuZGVyU3R5bGUqIGluaXRE
ZWZhdWx0U3R5bGUoKQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyU3R5bGU6OmNsb25l
KGNvbnN0IFJlbmRlclN0eWxlKiBvdGhlcikKIHsKLSAgICBpZiAoIWRlZmF1bHRTdHlsZSkKLSAg
ICAgICAgZGVmYXVsdFN0eWxlID0gOjpuZXcgUmVuZGVyU3R5bGUodHJ1ZSk7Ci0gICAgcmV0dXJu
IGRlZmF1bHRTdHlsZTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclN0eWxlKCpvdGhl
cikpOwogfQogCiBSZW5kZXJTdHlsZTo6UmVuZGVyU3R5bGUoKQotICAgIDogYm94KGluaXREZWZh
dWx0U3R5bGUoKS0+Ym94KQotICAgICwgdmlzdWFsKGRlZmF1bHRTdHlsZS0+dmlzdWFsKQotICAg
ICwgYmFja2dyb3VuZChkZWZhdWx0U3R5bGUtPmJhY2tncm91bmQpCi0gICAgLCBzdXJyb3VuZChk
ZWZhdWx0U3R5bGUtPnN1cnJvdW5kKQotICAgICwgcmFyZU5vbkluaGVyaXRlZERhdGEoZGVmYXVs
dFN0eWxlLT5yYXJlTm9uSW5oZXJpdGVkRGF0YSkKLSAgICAsIHJhcmVJbmhlcml0ZWREYXRhKGRl
ZmF1bHRTdHlsZS0+cmFyZUluaGVyaXRlZERhdGEpCi0gICAgLCBpbmhlcml0ZWQoZGVmYXVsdFN0
eWxlLT5pbmhlcml0ZWQpCi0gICAgLCBwc2V1ZG9TdHlsZSgwKQorICAgIDogYm94KGRlZmF1bHRT
dHlsZSgpLT5ib3gpCisgICAgLCB2aXN1YWwoZGVmYXVsdFN0eWxlKCktPnZpc3VhbCkKKyAgICAs
IGJhY2tncm91bmQoZGVmYXVsdFN0eWxlKCktPmJhY2tncm91bmQpCisgICAgLCBzdXJyb3VuZChk
ZWZhdWx0U3R5bGUoKS0+c3Vycm91bmQpCisgICAgLCByYXJlTm9uSW5oZXJpdGVkRGF0YShkZWZh
dWx0U3R5bGUoKS0+cmFyZU5vbkluaGVyaXRlZERhdGEpCisgICAgLCByYXJlSW5oZXJpdGVkRGF0
YShkZWZhdWx0U3R5bGUoKS0+cmFyZUluaGVyaXRlZERhdGEpCisgICAgLCBpbmhlcml0ZWQoZGVm
YXVsdFN0eWxlKCktPmluaGVyaXRlZCkKICAgICAsIG1fcHNldWRvU3RhdGUoUHNldWRvVW5rbm93
bikKICAgICAsIG1fYWZmZWN0ZWRCeUF0dHJpYnV0ZVNlbGVjdG9ycyhmYWxzZSkKICAgICAsIG1f
dW5pcXVlKGZhbHNlKQpAQCAtOTUsMTcgKzc3LDE1IEBAIFJlbmRlclN0eWxlOjpSZW5kZXJTdHls
ZSgpCiAgICAgLCBtX2ZpcnN0Q2hpbGRTdGF0ZShmYWxzZSkKICAgICAsIG1fbGFzdENoaWxkU3Rh
dGUoZmFsc2UpCiAgICAgLCBtX2NoaWxkSW5kZXgoMCkKLSAgICAsIG1fcmVmKDApCiAjaWYgRU5B
QkxFKFNWRykKLSAgICAsIG1fc3ZnU3R5bGUoZGVmYXVsdFN0eWxlLT5tX3N2Z1N0eWxlKQorICAg
ICwgbV9zdmdTdHlsZShkZWZhdWx0U3R5bGUoKS0+bV9zdmdTdHlsZSkKICNlbmRpZgogewogICAg
IHNldEJpdERlZmF1bHRzKCk7IC8vIFdvdWxkIGl0IGJlIGZhc3RlciB0byBjb3B5IHRoaXMgZnJv
bSB0aGUgZGVmYXVsdCBzdHlsZT8KIH0KIAogUmVuZGVyU3R5bGU6OlJlbmRlclN0eWxlKGJvb2wp
Ci0gICAgOiBwc2V1ZG9TdHlsZSgwKQotICAgICwgbV9wc2V1ZG9TdGF0ZShQc2V1ZG9Vbmtub3du
KQorICAgIDogbV9wc2V1ZG9TdGF0ZShQc2V1ZG9Vbmtub3duKQogICAgICwgbV9hZmZlY3RlZEJ5
QXR0cmlidXRlU2VsZWN0b3JzKGZhbHNlKQogICAgICwgbV91bmlxdWUoZmFsc2UpCiAgICAgLCBt
X2FmZmVjdGVkQnlFbXB0eShmYWxzZSkKQEAgLTExOCw3ICs5OCw2IEBAIFJlbmRlclN0eWxlOjpS
ZW5kZXJTdHlsZShib29sKQogICAgICwgbV9maXJzdENoaWxkU3RhdGUoZmFsc2UpCiAgICAgLCBt
X2xhc3RDaGlsZFN0YXRlKGZhbHNlKQogICAgICwgbV9jaGlsZEluZGV4KDApCi0gICAgLCBtX3Jl
ZigxKQogewogICAgIHNldEJpdERlZmF1bHRzKCk7CiAKQEAgLTE0MCw3ICsxMTksOCBAQCBSZW5k
ZXJTdHlsZTo6UmVuZGVyU3R5bGUoYm9vbCkKIH0KIAogUmVuZGVyU3R5bGU6OlJlbmRlclN0eWxl
KGNvbnN0IFJlbmRlclN0eWxlJiBvKQotICAgIDogaW5oZXJpdGVkX2ZsYWdzKG8uaW5oZXJpdGVk
X2ZsYWdzKQorICAgIDogUmVmQ291bnRlZDxSZW5kZXJTdHlsZT4oKQorICAgICwgaW5oZXJpdGVk
X2ZsYWdzKG8uaW5oZXJpdGVkX2ZsYWdzKQogICAgICwgbm9uaW5oZXJpdGVkX2ZsYWdzKG8ubm9u
aW5oZXJpdGVkX2ZsYWdzKQogICAgICwgYm94KG8uYm94KQogICAgICwgdmlzdWFsKG8udmlzdWFs
KQpAQCAtMTQ5LDcgKzEyOSw2IEBAIFJlbmRlclN0eWxlOjpSZW5kZXJTdHlsZShjb25zdCBSZW5k
ZXJTdHkKICAgICAsIHJhcmVOb25Jbmhlcml0ZWREYXRhKG8ucmFyZU5vbkluaGVyaXRlZERhdGEp
CiAgICAgLCByYXJlSW5oZXJpdGVkRGF0YShvLnJhcmVJbmhlcml0ZWREYXRhKQogICAgICwgaW5o
ZXJpdGVkKG8uaW5oZXJpdGVkKQotICAgICwgcHNldWRvU3R5bGUoMCkKICAgICAsIG1fcHNldWRv
U3RhdGUoby5tX3BzZXVkb1N0YXRlKQogICAgICwgbV9hZmZlY3RlZEJ5QXR0cmlidXRlU2VsZWN0
b3JzKGZhbHNlKQogICAgICwgbV91bmlxdWUoZmFsc2UpCkBAIC0xNjMsNyArMTQyLDYgQEAgUmVu
ZGVyU3R5bGU6OlJlbmRlclN0eWxlKGNvbnN0IFJlbmRlclN0eQogICAgICwgbV9maXJzdENoaWxk
U3RhdGUoZmFsc2UpCiAgICAgLCBtX2xhc3RDaGlsZFN0YXRlKGZhbHNlKQogICAgICwgbV9jaGls
ZEluZGV4KDApCi0gICAgLCBtX3JlZigwKQogI2lmIEVOQUJMRShTVkcpCiAgICAgLCBtX3N2Z1N0
eWxlKG8ubV9zdmdTdHlsZSkKICNlbmRpZgpAQCAtMjI3LDIzICsyMDUsMjMgQEAgdm9pZCBSZW5k
ZXJTdHlsZTo6c2V0SGFzUHNldWRvU3R5bGUoUHNldQogICAgIG5vbmluaGVyaXRlZF9mbGFncy5f
cHNldWRvQml0cyB8PSBwc2V1ZG9CaXQocHNldWRvKTsKIH0KIAotUmVuZGVyU3R5bGUqIFJlbmRl
clN0eWxlOjpnZXRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwaWQpCitSZW5kZXJTdHlsZSogUmVuZGVy
U3R5bGU6OmdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVkb0lkIHBpZCkKIHsKLSAgICBpZiAoIXBz
ZXVkb1N0eWxlIHx8IHN0eWxlVHlwZSgpICE9IE5PUFNFVURPKQorICAgIGlmICghbV9jYWNoZWRQ
c2V1ZG9TdHlsZSB8fCBzdHlsZVR5cGUoKSAhPSBOT1BTRVVETykKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgUmVuZGVyU3R5bGUqIHBzID0gcHNldWRvU3R5bGU7CisgICAgUmVuZGVyU3R5bGUqIHBz
ID0gbV9jYWNoZWRQc2V1ZG9TdHlsZS5nZXQoKTsKICAgICB3aGlsZSAocHMgJiYgcHMtPnN0eWxl
VHlwZSgpICE9IHBpZCkKLSAgICAgICAgcHMgPSBwcy0+cHNldWRvU3R5bGU7CisgICAgICAgIHBz
ID0gcHMtPm1fY2FjaGVkUHNldWRvU3R5bGUuZ2V0KCk7CiAgICAgcmV0dXJuIHBzOwogfQogCi12
b2lkIFJlbmRlclN0eWxlOjphZGRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZSogcHNldWRvKQorUmVu
ZGVyU3R5bGUqIFJlbmRlclN0eWxlOjphZGRDYWNoZWRQc2V1ZG9TdHlsZShQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBwc2V1ZG8pCiB7CiAgICAgaWYgKCFwc2V1ZG8pCi0gICAgICAgIHJldHVybjsK
LSAgICBwc2V1ZG8tPnJlZigpOwotICAgIHBzZXVkby0+cHNldWRvU3R5bGUgPSBwc2V1ZG9TdHls
ZTsKLSAgICBwc2V1ZG9TdHlsZSA9IHBzZXVkbzsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcHNl
dWRvLT5tX2NhY2hlZFBzZXVkb1N0eWxlID0gbV9jYWNoZWRQc2V1ZG9TdHlsZTsKKyAgICBtX2Nh
Y2hlZFBzZXVkb1N0eWxlID0gcHNldWRvOworICAgIHJldHVybiBtX2NhY2hlZFBzZXVkb1N0eWxl
LmdldCgpOwogfQogCiBib29sIFJlbmRlclN0eWxlOjppbmhlcml0ZWROb3RFcXVhbChSZW5kZXJT
dHlsZSogb3RoZXIpIGNvbnN0CkluZGV4OiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMzc1
ODYpCisrKyByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAt
OTcsMTEgKzk3LDEwIEBAIGNsYXNzIENTU1N0eWxlU2VsZWN0b3I7CiBjbGFzcyBDU1NWYWx1ZUxp
c3Q7CiBjbGFzcyBDYWNoZWRJbWFnZTsKIGNsYXNzIFBhaXI7Ci1jbGFzcyBSZW5kZXJBcmVuYTsK
IGNsYXNzIFN0cmluZ0ltcGw7CiBjbGFzcyBTdHlsZUltYWdlOwogCi1jbGFzcyBSZW5kZXJTdHls
ZSB7CitjbGFzcyBSZW5kZXJTdHlsZTogcHVibGljIFJlZkNvdW50ZWQ8UmVuZGVyU3R5bGU+IHsK
ICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGVTZWxlY3RvcjsKIAogcHVibGljOgpAQCAtMTEzLDI3
ICsxMTIsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIFNDUk9MTEJBUl9USFVNQiwg
U0NST0xMQkFSX0JVVFRPTiwgU0NST0xMQkFSX1RSQUNLLCBTQ1JPTExCQVJfVFJBQ0tfUElFQ0Us
IFNDUk9MTEJBUl9DT1JORVIsIFJFU0laRVIgfTsKICAgICBzdGF0aWMgY29uc3QgaW50IEZJUlNU
X0lOVEVSTkFMX1BTRVVET0lEID0gRklMRV9VUExPQURfQlVUVE9OOwogCi0gICAgdm9pZCByZWYo
KSB7IG1fcmVmKys7IH0KLSAgICB2b2lkIGRlcmVmKFJlbmRlckFyZW5hKiBhcmVuYSkKLSAgICB7
Ci0gICAgICAgIGlmIChtX3JlZikKLSAgICAgICAgICAgIG1fcmVmLS07Ci0gICAgICAgIGlmICgh
bV9yZWYpCi0gICAgICAgICAgICBhcmVuYURlbGV0ZShhcmVuYSk7Ci0gICAgfQotICAgIGJvb2wg
aGFzT25lUmVmKCkgeyByZXR1cm4gbV9yZWYgPT0gMTsgfQotICAgIGludCByZWZDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVmOyB9Ci0KLSAgICAvLyBPdmVybG9hZGVkIG5ldyBvcGVyYXRvci4g
IERlcml2ZWQgY2xhc3NlcyBtdXN0IG92ZXJyaWRlIG9wZXJhdG9yIG5ldwotICAgIC8vIGluIG9y
ZGVyIHRvIGFsbG9jYXRlIG91dCBvZiB0aGUgUmVuZGVyQXJlbmEuCi0gICAgdm9pZCogb3BlcmF0
b3IgbmV3KHNpemVfdCBzeiwgUmVuZGVyQXJlbmEqIHJlbmRlckFyZW5hKSB0aHJvdygpOwotCi0g
ICAgLy8gT3ZlcnJpZGRlbiB0byBwcmV2ZW50IHRoZSBub3JtYWwgZGVsZXRlIGZyb20gYmVpbmcg
Y2FsbGVkLgotICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHB0ciwgc2l6ZV90IHN6KTsK
LQotcHJpdmF0ZToKLSAgICB2b2lkIGFyZW5hRGVsZXRlKFJlbmRlckFyZW5hKik7Ci0KIHByb3Rl
Y3RlZDoKIAogLy8gIVNUQVJUIFNZTkMhOiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSBjb3B5
IGNvbnN0cnVjdG9yIGluIFJlbmRlclN0eWxlLmNwcApAQCAtMjQxLDcgKzIxOSw3IEBAIHByb3Rl
Y3RlZDoKICAgICBEYXRhUmVmPFN0eWxlSW5oZXJpdGVkRGF0YT4gaW5oZXJpdGVkOwogCiAgICAg
Ly8gbGlzdCBvZiBhc3NvY2lhdGVkIHBzZXVkbyBzdHlsZXMKLSAgICBSZW5kZXJTdHlsZSogcHNl
dWRvU3R5bGU7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX2NhY2hlZFBzZXVkb1N0eWxlOwog
CiAgICAgdW5zaWduZWQgbV9wc2V1ZG9TdGF0ZSA6IDM7IC8vIFBzZXVkb1N0YXRlCiAgICAgYm9v
bCBtX2FmZmVjdGVkQnlBdHRyaWJ1dGVTZWxlY3RvcnMgOiAxOwpAQCAtMjYyLDggKzI0MCw2IEBA
IHByb3RlY3RlZDoKICAgICBib29sIG1fbGFzdENoaWxkU3RhdGUgOiAxOwogICAgIHVuc2lnbmVk
IG1fY2hpbGRJbmRleCA6IDE4OyAvLyBQbGVudHkgb2YgYml0cyB0byBjYWNoZSBhbiBpbmRleC4K
IAotICAgIGludCBtX3JlZjsKLQogI2lmIEVOQUJMRShTVkcpCiAgICAgRGF0YVJlZjxTVkdSZW5k
ZXJTdHlsZT4gbV9zdmdTdHlsZTsKICNlbmRpZgpAQCAtMzA4LDEyICsyODQsMTcgQEAgcHJvdGVj
dGVkOgogICAgICAgICBub25pbmhlcml0ZWRfZmxhZ3MuX3VuaWNvZGVCaWRpID0gaW5pdGlhbFVu
aWNvZGVCaWRpKCk7CiAgICAgfQogCi1wdWJsaWM6Citwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyU3R5
bGUoKTsKICAgICAvLyB1c2VkIHRvIGNyZWF0ZSB0aGUgZGVmYXVsdCBzdHlsZS4KICAgICBSZW5k
ZXJTdHlsZShib29sKTsKICAgICBSZW5kZXJTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYpOwogCitw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZSgpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjcmVhdGVEZWZhdWx0U3R5bGUoKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY2xvbmUoY29uc3QgUmVuZGVyU3R5bGUq
KTsKKwogICAgIH5SZW5kZXJTdHlsZSgpOwogCiAgICAgdm9pZCBpbmhlcml0RnJvbShjb25zdCBS
ZW5kZXJTdHlsZSogaW5oZXJpdFBhcmVudCk7CkBAIC0zMjEsOCArMzAyLDggQEAgcHVibGljOgog
ICAgIFBzZXVkb0lkIHN0eWxlVHlwZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFBzZXVkb0lkPihu
b25pbmhlcml0ZWRfZmxhZ3MuX3N0eWxlVHlwZSk7IH0KICAgICB2b2lkIHNldFN0eWxlVHlwZShQ
c2V1ZG9JZCBzdHlsZVR5cGUpIHsgbm9uaW5oZXJpdGVkX2ZsYWdzLl9zdHlsZVR5cGUgPSBzdHls
ZVR5cGU7IH0KIAotICAgIFJlbmRlclN0eWxlKiBnZXRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBwaSk7
Ci0gICAgdm9pZCBhZGRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZSogcHNldWRvKTsKKyAgICBSZW5k
ZXJTdHlsZSogZ2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNldWRvSWQpOworICAgIFJlbmRlclN0eWxl
KiBhZGRDYWNoZWRQc2V1ZG9TdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPik7CiAKICAgICBi
b29sIGFmZmVjdGVkQnlIb3ZlclJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbm9uaW5oZXJpdGVkX2Zs
YWdzLl9hZmZlY3RlZEJ5SG92ZXI7IH0KICAgICBib29sIGFmZmVjdGVkQnlBY3RpdmVSdWxlcygp
IGNvbnN0IHsgcmV0dXJuIG5vbmluaGVyaXRlZF9mbGFncy5fYWZmZWN0ZWRCeUFjdGl2ZTsgfQpA
QCAtMzMzLDYgKzMxNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFmZmVjdGVkQnlEcmFnUnVs
ZXMoYm9vbCBiKSB7IG5vbmluaGVyaXRlZF9mbGFncy5fYWZmZWN0ZWRCeURyYWcgPSBiOyB9CiAK
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVuZGVyU3R5bGUmIG90aGVyKSBjb25zdDsKKyAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgUmVuZGVyU3R5bGUmIG90aGVyKSBjb25zdCB7IHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsgfQogICAgIGJvb2wgaXNGbG9hdGluZygpIGNvbnN0IHsgcmV0
dXJuICEobm9uaW5oZXJpdGVkX2ZsYWdzLl9mbG9hdGluZyA9PSBGTk9ORSk7IH0KICAgICBib29s
IGhhc01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5tYXJnaW4ubm9uWmVybygpOyB9
CiAgICAgYm9vbCBoYXNCb3JkZXIoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmhh
c0JvcmRlcigpOyB9CkBAIC04OTIsNyArODc0LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Qm94
T3JpZW50KEVCb3hPcmllbnQgbykgeyBTRVRfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2Vz
cygpLT5mbGV4aWJsZUJveCwgb3JpZW50LCBvKTsgfQogICAgIHZvaWQgc2V0Qm94UGFjayhFQm94
QWxpZ25tZW50IHApIHsgU0VUX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+Zmxl
eGlibGVCb3gsIHBhY2ssIHApOyB9CiAgICAgdm9pZCBzZXRCb3hTaGFkb3coU2hhZG93RGF0YSog
dmFsLCBib29sIGFkZD1mYWxzZSk7Ci0gICAgdm9pZCBzZXRCb3hSZWZsZWN0KGNvbnN0IFBhc3NS
ZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiYgcmVmbGVjdCkgeyBpZiAocmFyZU5vbkluaGVyaXRlZERh
dGEtPm1fYm94UmVmbGVjdCAhPSByZWZsZWN0KSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3Mo
KS0+bV9ib3hSZWZsZWN0ID0gcmVmbGVjdDsgfQorICAgIHZvaWQgc2V0Qm94UmVmbGVjdChQYXNz
UmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gcmVmbGVjdCkgeyBpZiAocmFyZU5vbkluaGVyaXRlZERh
dGEtPm1fYm94UmVmbGVjdCAhPSByZWZsZWN0KSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3Mo
KS0+bV9ib3hSZWZsZWN0ID0gcmVmbGVjdDsgfQogICAgIHZvaWQgc2V0Qm94U2l6aW5nKEVCb3hT
aXppbmcgcykgeyBTRVRfVkFSKGJveCwgYm94U2l6aW5nLCBzKTsgfQogICAgIHZvaWQgc2V0TWFy
cXVlZUluY3JlbWVudChjb25zdCBMZW5ndGgmIGYpIHsgU0VUX1ZBUihyYXJlTm9uSW5oZXJpdGVk
RGF0YS5hY2Nlc3MoKS0+bWFycXVlZSwgaW5jcmVtZW50LCBmKTsgfQogICAgIHZvaWQgc2V0TWFy
cXVlZVNwZWVkKGludCBmKSB7IFNFVF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCkt
Pm1hcnF1ZWUsIHNwZWVkLCBmKTsgfQpJbmRleDogc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDM3NTg2
KQorKysgc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDE3
ICs5OCwxNiBAQCBTVkdSZXNvdXJjZSogU1ZHQ2xpcFBhdGhFbGVtZW50OjpjYW52YXNSCiAKICAg
ICBib29sIGJib3ggPSBjbGlwUGF0aFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9U
WVBFX09CSkVDVEJPVU5ESU5HQk9YOwogCi0gICAgUmVuZGVyU3R5bGUqIGNsaXBQYXRoU3R5bGUg
PSBzdHlsZUZvclJlbmRlcmVyKHBhcmVudCgpLT5yZW5kZXJlcigpKTsgLy8gRklYTUU6IE1hbnVh
bCBzdHlsZSByZXNvbHV0aW9uIGlzIGEgaGFjaworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY2xp
cFBhdGhTdHlsZSA9IHN0eWxlRm9yUmVuZGVyZXIocGFyZW50KCktPnJlbmRlcmVyKCkpOyAvLyBG
SVhNRTogTWFudWFsIHN0eWxlIHJlc29sdXRpb24gaXMgYSBoYWNrCiAgICAgZm9yIChOb2RlKiBu
ID0gZmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAo
bi0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG4pLT5pc1N0eWxl
ZFRyYW5zZm9ybWFibGUoKSkgewogICAgICAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQqIHN0eWxlZCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
Kj4obik7Ci0gICAgICAgICAgICBSZW5kZXJTdHlsZSogcGF0aFN0eWxlID0gZG9jdW1lbnQoKS0+
c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQoc3R5bGVkLCBjbGlwUGF0aFN0eWxlKTsK
KyAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcGF0aFN0eWxlID0gZG9jdW1lbnQoKS0+
c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQoc3R5bGVkLCBjbGlwUGF0aFN0eWxlLmdl
dCgpKTsKICAgICAgICAgICAgIGlmIChwYXRoU3R5bGUtPmRpc3BsYXkoKSAhPSBOT05FKSB7CiAg
ICAgICAgICAgICAgICAgUGF0aCBwYXRoRGF0YSA9IHN0eWxlZC0+dG9DbGlwUGF0aCgpOwogICAg
ICAgICAgICAgICAgIGlmICghcGF0aERhdGEuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAg
ICBtX2NsaXBwZXItPmFkZENsaXBEYXRhKHBhdGhEYXRhLCBwYXRoU3R5bGUtPnN2Z1N0eWxlKCkt
PmNsaXBSdWxlKCksIGJib3gpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcGF0aFN0eWxl
LT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKICAgICAgICAgfQogICAgIH0KICAg
ICBpZiAobV9jbGlwcGVyLT5jbGlwRGF0YSgpLmlzRW1wdHkoKSkgewpAQCAtMTE2LDcgKzExNSw2
IEBAIFNWR1Jlc291cmNlKiBTVkdDbGlwUGF0aEVsZW1lbnQ6OmNhbnZhc1IKICAgICAgICAgcGF0
aERhdGEuYWRkUmVjdChGbG9hdFJlY3QoKSk7CiAgICAgICAgIG1fY2xpcHBlci0+YWRkQ2xpcERh
dGEocGF0aERhdGEsIFJVTEVfRVZFTk9ERCwgYmJveCk7CiAgICAgfQotICAgIGNsaXBQYXRoU3R5
bGUtPmRlcmVmKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpOwogICAgIHJldHVybiBtX2NsaXBw
ZXIuZ2V0KCk7CiB9CiAKSW5kZXg6IHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHN2
Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcg
QEAgU1ZHUmVzb3VyY2UqIFNWR0dyYWRpZW50RWxlbWVudDo6Y2FudmFzUgogVmVjdG9yPFNWR0dy
YWRpZW50U3RvcD4gU1ZHR3JhZGllbnRFbGVtZW50OjpidWlsZFN0b3BzKCkgY29uc3QKIHsKICAg
ICBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiBzdG9wczsKLSAgICBSZW5kZXJTdHlsZSogZ3JhZGll
bnRTdHlsZSA9IDA7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBncmFkaWVudFN0eWxlOwogCiAg
ICAgZm9yIChOb2RlKiBuID0gZmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkg
ewogICAgICAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0gbi0+aXNTVkdFbGVtZW50KCkgPyBzdGF0
aWNfY2FzdDxTVkdFbGVtZW50Kj4obikgOiAwOwpAQCAtMTUxLDIxICsxNTEsMTYgQEAgVmVjdG9y
PFNWR0dyYWRpZW50U3RvcD4gU1ZHR3JhZGllbnRFbGVtZQogICAgICAgICAgICAgICAgIGlmICgh
Z3JhZGllbnRTdHlsZSkKICAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnRTdHlsZSA9IGNvbnN0
X2Nhc3Q8U1ZHR3JhZGllbnRFbGVtZW50Kj4odGhpcyktPnN0eWxlRm9yUmVuZGVyZXIocGFyZW50
KCktPnJlbmRlcmVyKCkpOwogCi0gICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHN0b3BTdHls
ZSA9IHN0b3AtPnJlc29sdmVTdHlsZShncmFkaWVudFN0eWxlKTsKKyAgICAgICAgICAgICAgICBS
ZWZQdHI8UmVuZGVyU3R5bGU+IHN0b3BTdHlsZSA9IHN0b3AtPnJlc29sdmVTdHlsZShncmFkaWVu
dFN0eWxlLmdldCgpKTsKIAogICAgICAgICAgICAgICAgIGNvbG9yID0gc3RvcFN0eWxlLT5zdmdT
dHlsZSgpLT5zdG9wQ29sb3IoKTsKICAgICAgICAgICAgICAgICBvcGFjaXR5ID0gc3RvcFN0eWxl
LT5zdmdTdHlsZSgpLT5zdG9wT3BhY2l0eSgpOwotCi0gICAgICAgICAgICAgICAgc3RvcFN0eWxl
LT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgc3RvcHMuYXBwZW5kKG1ha2VHcmFkaWVudFN0b3Aoc3RvcE9mZnNldCwgbWFrZVJH
QkEoY29sb3IucmVkKCksIGNvbG9yLmdyZWVuKCksIGNvbG9yLmJsdWUoKSwgaW50KG9wYWNpdHkg
KiAyNTUuKSkpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChncmFkaWVudFN0eWxlKQot
ICAgICAgICBncmFkaWVudFN0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsK
LQogICAgIHJldHVybiBzdG9wczsKIH0KIApJbmRleDogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHN2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gMzc1ODYp
CisrKyBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSwxNCAr
MjMxLDEwIEBAIHZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGIKICAgICBT
VkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVsZW1lbnQodGhpcyk7
CiB9CiAKLVJlbmRlclN0eWxlKiBTVkdTdHlsZWRFbGVtZW50OjpyZXNvbHZlU3R5bGUoUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU1ZHU3R5bGVkRWxl
bWVudDo6cmVzb2x2ZVN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKLSAgICBpZiAo
cmVuZGVyZXIoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUgPSByZW5kZXJl
cigpLT5zdHlsZSgpOwotICAgICAgICByZW5kZXJTdHlsZS0+cmVmKCk7Ci0gICAgICAgIHJldHVy
biByZW5kZXJTdHlsZTsKLSAgICB9Ci0KKyAgICBpZiAocmVuZGVyZXIoKSkKKyAgICAgICAgcmV0
dXJuIHJlbmRlcmVyKCktPnN0eWxlKCk7CiAgICAgcmV0dXJuIGRvY3VtZW50KCktPnN0eWxlU2Vs
ZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMsIHBhcmVudFN0eWxlKTsKIH0KIApJbmRleDog
c3ZnL1NWR1N0eWxlZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzdmcvU1ZHU3R5bGVkRWxlbWVu
dC5oCShyZXZpc2lvbiAzNzU4NikKKysrIHN2Zy9TVkdTdHlsZWRFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0
dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5v
ZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291
bnREZWx0YSA9IDApOwogCiAgICAgICAgIC8vIENlbnRyYWxpemVkIHBsYWNlIHRvIGZvcmNlIGEg
bWFudWFsIHN0eWxlIHJlc29sdXRpb24uIEhhY2t5IGJ1dCBuZWVkZWQgZm9yIG5vdy4KLSAgICAg
ICAgUmVuZGVyU3R5bGUqIHJlc29sdmVTdHlsZShSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwor
ICAgICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiByZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKTsKIAogICAgICAgICB2b2lkIGludmFsaWRhdGVSZXNvdXJjZXNJbkFuY2Vz
dG9yQ2hhaW4oKSBjb25zdDsgICAgICAgIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7
CkluZGV4OiBzdmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3ZnL1NWR1VzZUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHN2Zy9TVkdVc2VFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg3LDggKzE4Nyw4IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6cmVjYWxj
U3R5bGUoU3R5bGVDaGEKICAgICAvLyBzaGFkb3cgdHJlZSByb290IGVsZW1lbnQsIGJ1dCBjYWxs
IGF0dGFjaFNoYWRvd1RyZWUoKSBoZXJlLiBDYWxsaW5nIGF0dGFjaCgpIHdpbGwgY3Jhc2gKICAg
ICAvLyBhcyB0aGUgc2hhZG93IHRyZWUgcm9vdCBlbGVtZW50IGhhcyBubyAoZGlyZWN0KSBwYXJl
bnQgbm9kZS4gWWVzLCBzaGFkb3cgdHJlZXMgYXJlIHRyaWNreS4KICAgICBpZiAoY2hhbmdlID49
IEluaGVyaXQgfHwgbV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQtPmNoYW5nZWQoKSkgewotICAgICAg
ICBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPnN0
eWxlRm9yRWxlbWVudChtX3NoYWRvd1RyZWVSb290RWxlbWVudC5nZXQoKSk7Ci0gICAgICAgIFN0
eWxlQ2hhbmdlIGNoID0gTm9kZTo6ZGlmZihtX3NoYWRvd1RyZWVSb290RWxlbWVudC0+cmVuZGVy
U3R5bGUoKSwgbmV3U3R5bGUpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxl
ID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQobV9zaGFkb3dU
cmVlUm9vdEVsZW1lbnQuZ2V0KCkpOworICAgICAgICBTdHlsZUNoYW5nZSBjaCA9IE5vZGU6OmRp
ZmYobV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQtPnJlbmRlclN0eWxlKCksIG5ld1N0eWxlLmdldCgp
KTsKICAgICAgICAgaWYgKGNoID09IERldGFjaCkgewogICAgICAgICAgICAgQVNTRVJUKG1fc2hh
ZG93VHJlZVJvb3RFbGVtZW50LT5hdHRhY2hlZCgpKTsKICAgICAgICAgICAgIG1fc2hhZG93VHJl
ZVJvb3RFbGVtZW50LT5kZXRhY2goKTsKQEAgLTE5NywxMSArMTk3LDggQEAgdm9pZCBTVkdVc2VF
bGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYQogICAgICAgICAgICAgLy8gYXR0YWNoIHJlY2Fs
dWxhdGVzIHRoZSBzdHlsZSBmb3IgYWxsIGNoaWxkcmVuLiBObyBuZWVkIHRvIGRvIGl0IHR3aWNl
LgogICAgICAgICAgICAgbV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQtPnNldENoYW5nZWQoTm9TdHls
ZUNoYW5nZSk7CiAgICAgICAgICAgICBtX3NoYWRvd1RyZWVSb290RWxlbWVudC0+c2V0SGFzQ2hh
bmdlZENoaWxkKGZhbHNlKTsKLSAgICAgICAgICAgIG5ld1N0eWxlLT5kZXJlZihkb2N1bWVudCgp
LT5yZW5kZXJBcmVuYSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotCi0gICAg
ICAgIG5ld1N0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKICAgICB9CiAK
ICAgICAvLyBPbmx5IGNoYW5nZT09RGV0YWNoIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LCBmb3Ig
YW55dGhpbmcgZWxzZSByZWNhbGNTdHlsZSgpIHdvcmtzLgpAQCAtNzQ0LDE5ICs3NDEsMTcgQEAg
dm9pZCBTVkdVc2VFbGVtZW50OjphdHRhY2hTaGFkb3dUcmVlKCkKIAogICAgIC8vIEluc3BpcmVk
IGJ5IFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVTdWJ0cmVlSWZOZWVkZWQoKS4gCiAgICAgaWYg
KHJlbmRlcmVyKCktPmNhbkhhdmVDaGlsZHJlbigpICYmIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVy
ZXIobV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQuZ2V0KCkpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IG1fc2hhZG93VHJlZVJvb3RFbGVtZW50LT5zdHlsZUZvclJlbmRlcmVyKHJlbmRl
cmVyKCkpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gbV9zaGFkb3dUcmVl
Um9vdEVsZW1lbnQtPnN0eWxlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7CiAKLSAgICAgICAgaWYg
KG1fc2hhZG93VHJlZVJvb3RFbGVtZW50LT5yZW5kZXJlcklzTmVlZGVkKHN0eWxlKSkgewotICAg
ICAgICAgICAgbV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQtPnNldFJlbmRlcmVyKG1fc2hhZG93VHJl
ZVJvb3RFbGVtZW50LT5jcmVhdGVSZW5kZXJlcihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpLCBz
dHlsZSkpOworICAgICAgICBpZiAobV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQtPnJlbmRlcmVySXNO
ZWVkZWQoc3R5bGUuZ2V0KCkpKSB7CisgICAgICAgICAgICBtX3NoYWRvd1RyZWVSb290RWxlbWVu
dC0+c2V0UmVuZGVyZXIobV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQtPmNyZWF0ZVJlbmRlcmVyKGRv
Y3VtZW50KCktPnJlbmRlckFyZW5hKCksIHN0eWxlLmdldCgpKSk7CiAgICAgICAgICAgICBpZiAo
UmVuZGVyT2JqZWN0KiBzaGFkb3dSZW5kZXJlciA9IG1fc2hhZG93VHJlZVJvb3RFbGVtZW50LT5y
ZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICAgICAgc2hhZG93UmVuZGVyZXItPnNldFN0eWxlKHN0
eWxlKTsKKyAgICAgICAgICAgICAgICBzaGFkb3dSZW5kZXJlci0+c2V0U3R5bGUoc3R5bGUucmVs
ZWFzZSgpKTsKICAgICAgICAgICAgICAgICByZW5kZXJlcigpLT5hZGRDaGlsZChzaGFkb3dSZW5k
ZXJlciwgbV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQtPm5leHRSZW5kZXJlcigpKTsKICAgICAgICAg
ICAgICAgICBtX3NoYWRvd1RyZWVSb290RWxlbWVudC0+c2V0QXR0YWNoZWQoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHN0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5k
ZXJBcmVuYSgpKTsKLQogICAgICAgICAvLyBUaGlzIHdpbGwgdGFrZSBjYXJlIG9mIGF0dGFjaGlu
ZyBhbGwgc2hhZG93IHRyZWUgY2hpbGQgbm9kZXMuCiAgICAgICAgIGZvciAoTm9kZSogY2hpbGQg
PSBtX3NoYWRvd1RyZWVSb290RWxlbWVudC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgICAgIGNoaWxkLT5hdHRhY2goKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24435</attachid>
            <date>2008-10-16 15:44:52 -0700</date>
            <delta_ts>2008-10-16 15:56:44 -0700</delta_ts>
            <desc>Patch #4</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>143544</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM3NjM0
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAwIEBACisyMDA4LTEw
LTE2ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9hdHRhY2htZW50LmNnaT9idWdpZD0yMTY0NworCisgICAgICAgIE1ha2Ug
UmVuZGVyU3R5bGUgaW5oZXJpdCBmcm9tIFJlZkNvdW50ZWQgc28gdGhhdCBpdCB3b3JrcyB3aXRo
IFJlZlB0ci4gIFJlbmRlclN0eWxlIHdhcyBiZWluZyBtYWxsb2NlZAorICAgICAgICBvdXQgb2Yg
dGhlIFJlbmRlckFyZW5hLiAgWWVhcnMgYW5kIHllYXJzIGFnbyAoYmVmb3JlIFRDTWFsbG9jKSwg
dGhlIHBsYW4gd2FzIHRvIG1ha2UgUmVuZGVyU3R5bGVzIGFuZAorICAgICAgICBhbGwgdGhlaXIg
YXNzb2NpYXRlZCBzdWItc3RydWN0cyB1c2UgdGhlIGFyZW5hLiAgSG93ZXZlciBvbmx5IHRoZSBS
ZW5kZXJTdHlsZSBpdHNlbGYgd2FzIGV2ZXIgY2hhbmdlZAorICAgICAgICB0byB1c2UgdGhlIGFy
ZW5hLgorCisgICAgICAgIEF0IGEgbGF0ZXIgcG9pbnQgc3R5bGUgc2hhcmluZyB3YXMgaW1wbGVt
ZW50ZWQsIHdoaWNoIG1hZGUgdXNpbmcgdGhlIGFyZW5hIGZvciBzdHlsZXMgcHJldHR5IHBvaW50
bGVzcywKKyAgICAgICAgYXMgdGhlIGJ1bGsgb2YgdGhlIHN0eWxlcyBvbiBhIGdpdmVuIHBhZ2Ug
YXJlIGFjdHVhbGx5IHNoYXJlZC4gIE5vdCBldmVyIG1ha2luZyB0aGUgc3ViLXN0cnVjdHMgdXNl
IHRoZQorICAgICAgICBhcmVuYSBhbHNvIGxpbWl0ZWQgdGhlIHVzZWZ1bG5lc3MuCisKKyAgICAg
ICAgTm93IHRoYXQgd2UgaGF2ZSBSZWZQdHIvUGFzc1JlZlB0ciB0byBlbGltaW5hdGUgbWFudWFs
IHJlZi9kZXJlZiBhbmQgbm93IHRoYXQgd2UgdXNlIFRDTWFsbG9jIGZvciBmYXN0CisgICAgICAg
IG1hbGxvY3MsIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBrZWVwIFJlbmRlclN0eWxlcyBpbiB0aGUg
YXJlbmEuICBUaGUgYmVuZWZpdHMgb2YgYmVpbmcgYWJsZSB0byBlbGltaW5hdGUKKyAgICAgICAg
bWFudWFsIHJlZi9kZXJlZiBmYXIgb3V0d2VpZ2gga2VlcGluZyB0aGVtIGluIHRoZSBhcmVuYS4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNzcy9D
U1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6
OkNTU1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
fkNTU1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Omtl
eWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIFRoZXNlIG1ldGhvZHMgbm93
IHJldHVybiBhIFBhc3NSZWZQdHIuICBUaGV5IHdpbGwgbnVsbCBvdXQgdGhlIG1fc3R5bGUgdmFy
aWFibGUgYXMgdGhleSBoYW5kIGl0IGJhY2sKKyAgICAgICAgc28gdGhhdCBpdCBpc24ndCBsZWZ0
IHBvaW50aW5nIHRvIHRoZSBwcmV2aW91cyBzdHlsZSByZXNvbHZlIFJlbmRlclN0eWxlICh3aGlj
aCBpcyB3aGF0IHRoZSBvbGQgY29kZSBkaWQpLgorCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjp1cGRhdGVGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6OmNoZWNrU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXBG
aWxsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsWFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxZUG9z
aXRpb24pOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6CisgICAgICAgIChXZWJD
b3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZSk6CisgICAgICAgICog
ZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c3R5bGVGb3JSZW5k
ZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZWNhbGNTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50Ojpjb21wdXRlZFN0eWxlKToKKyAgICAgICAgKiBkb20vRWxlbWVu
dC5oOgorICAgICAgICAqIGRvbS9FbGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnRSYXJlRGF0YTo6RWxlbWVudFJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnRSYXJlRGF0YTo6cmVzZXRDb21wdXRlZFN0eWxlKToKKyAgICAgICAgKiBkb20vTm9kZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpkaWZmKToKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGU6OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6c3R5
bGVGb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpzZXRSZW5kZXJTdHlsZSk6
CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKiBodG1sL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldEZvbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50OjphdHRhY2gpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudDo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxPcHRHcm91cEVsZW1lbnQ6OnNldFJlbmRlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxPcHRHcm91cEVsZW1lbnQ6Om5vblJlbmRlcmVyUmVuZGVyU3R5bGUpOgorICAgICAgICAqIGh0
bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmF0dGFjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6ZGV0YWNoKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpzZXRSZW5kZXJTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6bm9uUmVuZGVyZXJSZW5kZXJTdHlsZSk6CisgICAgICAg
ICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0Fu
aW1hdGlvbkJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OmFuaW1hdGUp
OgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyk6Cisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oOgorICAgICAgICAq
IHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVUcmFuc2l0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVLZXlmcmFtZUFuaW1h
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6YW5p
bWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUpOgor
ICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oOgorICAgICAgICAq
IHBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltcGxpY2l0QW5pbWF0aW9uOjpJbXBsaWNpdEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJbXBsaWNpdEFuaW1hdGlvbjo6fkltcGxpY2l0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxp
Y2l0QW5pbWF0aW9uOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNpdEFuaW1hdGlv
bjo6aXNUYXJnZXRQcm9wZXJ0eUVxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5p
bWF0aW9uOjpibGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKToKKyAgICAgICAgKiBwYWdlL2FuaW1h
dGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmlt
YXRpb246OmNyZWF0ZSk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OktleWZyYW1lQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjp+S2V5ZnJhbWVB
bmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUp
OgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OnZhbGlkYXRlVHJhbnNmb3Jt
RnVuY3Rpb25MaXN0KToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlv
bi5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6dW5hbmltYXRlZFN0eWxlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVUZXh0Qm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50
OjpNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xJbnB1dEVsZW1lbnQ6Ok1lZGlhQ29udHJvbElucHV0RWxlbWVudCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBk
YXRlRmlyc3RMZXR0ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29udGFpbmVyOjphZGRDaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJDb250YWluZXI6OnVwZGF0ZUJlZm9yZUFmdGVyQ29udGVudEZvckNv
bnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjp1cGRhdGVGcm9t
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y3Jl
YXRlQnV0dG9uU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZsb3c6OmNyZWF0ZUFub255bW91c0Zsb3cpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJGbG93Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmFkZENoaWxkVG9GbG93KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjp1cGRhdGVSZXNpemVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnVwZGF0ZVJlZmxlY3Rpb25TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxp
c3RJdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpzdHlsZURpZENo
YW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck1lZGlhOjpjcmVhdGVQYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNZWRpYTo6Y3JlYXRlVGltZURpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVk
aWE6OmNoYW5nZU9wYWNpdHkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25CYWNrZ3JvdW5kQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjcmVhdGVBbm9ueW1vdXNC
bG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldEFuaW1hdGFibGVTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldFN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0U3R5bGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJPYmplY3Q6OmFyZW5hRGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6Zmlyc3RMaW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
OjpnZXRQc2V1ZG9TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzdHlsZSk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclNWR0Jsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0Jsb2Nr
OjpzZXRTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTY3JvbGxiYXI6OmdldFNjcm9sbGJhclBzZXVkb1N0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNjcm9sbGJhcjo6dXBkYXRlU2Nyb2xsYmFyUGFydCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclNjcm9sbGJhci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjpzdHlsZURpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTbGlkZXI6OmNyZWF0ZVRodW1iU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU2xpZGVyOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
YWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6YWRkQ2hpbGQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjphZGRD
aGlsZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlSW5uZXJCbG9ja1N0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpjcmVhdGVJbm5lclRleHRTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlUmVzdWx0c0J1dHRv
blN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpjcmVhdGVDYW5j
ZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Y3Jl
YXRlU3VidHJlZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9s
Ojp1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5oOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxl
bWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OmF0
dGFjaElubmVyRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJF
bGVtZW50cy5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVMaXN0OjpjbGVhcik6CisgICAgICAgIChXZWJDb3Jl
OjpLZXlmcmFtZUxpc3Q6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVM
aXN0OjppbnNlcnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lVmFsdWU6OktleWZyYW1lVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZTo6fktleWZyYW1lVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5ZnJhbWVWYWx1ZTo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lVmFs
dWU6OnN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clN0eWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmNyZWF0ZURl
ZmF1bHRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y2xvbmUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OlJlbmRlclN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclN0eWxlOjpnZXRDYWNoZWRQc2V1ZG9TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTdHlsZTo6YWRkQ2FjaGVkUHNldWRvU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdl
YkNvcmU6OkluaGVyaXRlZEZsYWdzOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBzdmcvU1ZHQ2xp
cFBhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NsaXBQYXRoRWxlbWVudDo6
Y2FudmFzUmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHR3JhZGllbnRFbGVtZW50OjpidWlsZFN0b3BzKToKKyAgICAg
ICAgKiBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHls
ZWRFbGVtZW50OjpyZXNvbHZlU3R5bGUpOgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVXNlRWxlbWVudDo6cmVjYWxjU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxl
bWVudDo6YXR0YWNoU2hhZG93VHJlZSk6CisKIDIwMDgtMTAtMTUgIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJ
bmRleDogY3NzL0NTU0dyYWRpZW50VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTR3JhZGll
bnRWYWx1ZS5oCShyZXZpc2lvbiAzNzU4NikKKysrIGNzcy9DU1NHcmFkaWVudFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYyLDEzICs2MiwxMyBAQCBwdWJsaWM6CiAgICAgQ1NTR3JhZGllbnRU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICB2b2lkIHNldFR5cGUoQ1NT
R3JhZGllbnRUeXBlIHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQogICAgIAotICAgIHZvaWQgc2V0
Rmlyc3RYKGNvbnN0IFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWwpIHsgbV9maXJz
dFggPSB2YWw7IH0KLSAgICB2b2lkIHNldEZpcnN0WShjb25zdCBQYXNzUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiYgdmFsKSB7IG1fZmlyc3RZID0gdmFsOyB9Ci0gICAgdm9pZCBzZXRTZWNvbmRY
KGNvbnN0IFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+JiB2YWwpIHsgbV9zZWNvbmRYID0g
dmFsOyB9Ci0gICAgdm9pZCBzZXRTZWNvbmRZKGNvbnN0IFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+JiB2YWwpIHsgbV9zZWNvbmRZID0gdmFsOyB9CisgICAgdm9pZCBzZXRGaXJzdFgoUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsKSB7IG1fZmlyc3RYID0gdmFsOyB9CisgICAg
dm9pZCBzZXRGaXJzdFkoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsKSB7IG1fZmly
c3RZID0gdmFsOyB9CisgICAgdm9pZCBzZXRTZWNvbmRYKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IHZhbCkgeyBtX3NlY29uZFggPSB2YWw7IH0KKyAgICB2b2lkIHNldFNlY29uZFkoUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsKSB7IG1fc2Vjb25kWSA9IHZhbDsgfQogICAg
IAotICAgIHZvaWQgc2V0Rmlyc3RSYWRpdXMoY29uc3QgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4mIHZhbCkgeyBtX2ZpcnN0UmFkaXVzID0gdmFsOyB9Ci0gICAgdm9pZCBzZXRTZWNvbmRS
YWRpdXMoY29uc3QgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4mIHZhbCkgeyBtX3NlY29u
ZFJhZGl1cyA9IHZhbDsgfQorICAgIHZvaWQgc2V0Rmlyc3RSYWRpdXMoUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gdmFsKSB7IG1fZmlyc3RSYWRpdXMgPSB2YWw7IH0KKyAgICB2b2lkIHNl
dFNlY29uZFJhZGl1cyhQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWwpIHsgbV9zZWNv
bmRSYWRpdXMgPSB2YWw7IH0KIAogICAgIHZvaWQgYWRkU3RvcChjb25zdCBDU1NHcmFkaWVudENv
bG9yU3RvcCYgc3RvcCkgeyBtX3N0b3BzLmFwcGVuZChzdG9wKTsgfQogCkluZGV4OiBjc3MvQ1NT
U3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CShyZXZpc2lvbiAzNzU4NikKKysrIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDE5LDcgKzQxOSw3IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0
b3IoRG9jdW0KIAogICAgIGlmIChtX3Jvb3REZWZhdWx0U3R5bGUgJiYgdmlldykgewogICAgICAg
ICBkZWxldGUgbV9tZWRpdW07Ci0gICAgICAgIG1fbWVkaXVtID0gbmV3IE1lZGlhUXVlcnlFdmFs
dWF0b3Iodmlldy0+bWVkaWFUeXBlKCksIHZpZXctPmZyYW1lKCksIG1fcm9vdERlZmF1bHRTdHls
ZSk7CisgICAgICAgIG1fbWVkaXVtID0gbmV3IE1lZGlhUXVlcnlFdmFsdWF0b3Iodmlldy0+bWVk
aWFUeXBlKCksIHZpZXctPmZyYW1lKCksIG1fcm9vdERlZmF1bHRTdHlsZS5nZXQoKSk7CiAgICAg
fQogCiAgICAgLy8gRklYTUU6IFRoaXMgc3Vja3MhIFRoZSB1c2VyIHNoZWV0IGlzIHJlcGFyc2Vk
IGV2ZXJ5IHRpbWUhCkBAIC00NjYsNyArNDY2LDYgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6fkNTU1N0
eWxlU2VsZWN0b3IoKQogewogICAgIG1fZm9udFNlbGVjdG9yLT5jbGVhckRvY3VtZW50KCk7CiAg
ICAgZGVsZXRlIG1fbWVkaXVtOwotICAgIDo6ZGVsZXRlIG1fcm9vdERlZmF1bHRTdHlsZTsKICAg
ICBkZWxldGUgbV9hdXRob3JTdHlsZTsKICAgICBkZWxldGUgbV91c2VyU3R5bGU7CiAgICAgZGVs
ZXRlQWxsVmFsdWVzKG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cyk7CkBAIC0x
MDA2LDcgKzEwMDUsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoVUFSdWxlcyhpbnQm
CiAvLyBJZiByZXNvbHZlRm9yUm9vdERlZmF1bHQgaXMgdHJ1ZSwgc3R5bGUgYmFzZWQgb24gdXNl
ciBhZ2VudCBzdHlsZSBzaGVldCBvbmx5LiBUaGlzIGlzIHVzZWQgaW4gbWVkaWEgcXVlcmllcywg
d2hlcmUKIC8vIHJlbGF0aXZlIHVuaXRzIGFyZSBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gZG9j
dW1lbnQgcm9vdCBlbGVtZW50IHN0eWxlLCBzdHlsZWQgb25seSB3aXRoIFVBIHN0eWxlc2hlZXQK
IAotUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50
KiBlLCBSZW5kZXJTdHlsZSogZGVmYXVsdFBhcmVudCwgYm9vbCBhbGxvd1NoYXJpbmcsIGJvb2wg
cmVzb2x2ZUZvclJvb3REZWZhdWx0KQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVT
ZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBkZWZhdWx0
UGFyZW50LCBib29sIGFsbG93U2hhcmluZywgYm9vbCByZXNvbHZlRm9yUm9vdERlZmF1bHQpCiB7
CiAgICAgLy8gT25jZSBhbiBlbGVtZW50IGhhcyBhIHJlbmRlcmVyLCB3ZSBkb24ndCB0cnkgdG8g
ZGVzdHJveSBpdCwgc2luY2Ugb3RoZXJ3aXNlIHRoZSByZW5kZXJlcgogICAgIC8vIHdpbGwgdmFu
aXNoIGlmIGEgc3R5bGUgcmVjYWxjIGhhcHBlbnMgZHVyaW5nIGxvYWRpbmcuCkBAIC0xMDI0LDMw
ICsxMDIzLDE4IEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckUKIAog
ICAgIGluaXRFbGVtZW50QW5kUHNldWRvU3RhdGUoZSk7CiAgICAgaWYgKGFsbG93U2hhcmluZykg
ewotICAgICAgICBtX3N0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoKTsKLSNpZmRlZiBTVFlMRV9T
SEFSSU5HX1NUQVRTCi0gICAgICAgIGZyYWN0aW9uICs9IG1fc3R5bGUgIT0gMDsKLSAgICAgICAg
dG90YWwrKzsKLSAgICAgICAgcHJpbnRmKCJTaGFyaW5nICVkIG91dCBvZiAlZFxuIiwgZnJhY3Rp
b24sIHRvdGFsKTsKLSNlbmRpZgotICAgICAgICBpZiAobV9zdHlsZSkgewotICAgICAgICAgICAg
bV9zdHlsZS0+cmVmKCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zdHlsZTsKLSAgICAgICAgfQor
ICAgICAgICBSZW5kZXJTdHlsZSogc2hhcmVkU3R5bGUgPSBsb2NhdGVTaGFyZWRTdHlsZSgpOwor
ICAgICAgICBpZiAoc2hhcmVkU3R5bGUpCisgICAgICAgICAgICByZXR1cm4gc2hhcmVkU3R5bGU7
CiAgICAgfQogICAgIGluaXRGb3JTdHlsZVJlc29sdmUoZSwgZGVmYXVsdFBhcmVudCk7CiAKLSAg
ICBpZiAocmVzb2x2ZUZvclJvb3REZWZhdWx0KSB7Ci0gICAgICAgIG1fc3R5bGUgPSA6Om5ldyBS
ZW5kZXJTdHlsZSgpOwotICAgICAgICAvLyBkb24ndCByZWYsIGJlY2F1c2Ugd2Ugd2FudCB0byBk
ZWxldGUgdGhpcywgYnV0IHdlIGNhbm5vdCB1bnJlZiBpdAotICAgIH0gZWxzZSB7Ci0gICAgICAg
IG1fc3R5bGUgPSBuZXcgKGUtPmRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxl
KCk7Ci0gICAgICAgIG1fc3R5bGUtPnJlZigpOwotICAgIH0KKyAgICBtX3N0eWxlID0gUmVuZGVy
U3R5bGU6OmNyZWF0ZSgpOworCiAgICAgaWYgKG1fcGFyZW50U3R5bGUpCiAgICAgICAgIG1fc3R5
bGUtPmluaGVyaXRGcm9tKG1fcGFyZW50U3R5bGUpOwogICAgIGVsc2UKLSAgICAgICAgbV9wYXJl
bnRTdHlsZSA9IG1fc3R5bGU7CisgICAgICAgIG1fcGFyZW50U3R5bGUgPSBzdHlsZSgpOwogCiAg
ICAgaWYgKHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0ICYmICFlbGVtZW50Q2FuVXNlU2ltcGxlRGVm
YXVsdFN0eWxlKGUpKQogICAgICAgICBsb2FkRnVsbERlZmF1bHRTdHlsZSgpOwpAQCAtMTE2Nyw3
ICsxMTU0LDcgQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRQogICAg
ICAgICB1cGRhdGVGb250KCk7CiAgICAgCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVj
dCdzIGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCi0g
ICAgYWRqdXN0UmVuZGVyU3R5bGUobV9zdHlsZSwgZSk7CisgICAgYWRqdXN0UmVuZGVyU3R5bGUo
c3R5bGUoKSwgZSk7CiAKICAgICAvLyBJZiB3ZSBhcmUgYSBsaW5rLCBjYWNoZSB0aGUgZGV0ZXJt
aW5lZCBwc2V1ZG8tc3RhdGUuCiAgICAgaWYgKGUtPmlzTGluaygpKQpAQCAtMTE3OCw3ICsxMTY1
LDcgQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRQogICAgICAgICBt
X3N0eWxlLT5zZXRVbmlxdWUoKTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAg
IHJldHVybiBtX3N0eWxlOworICAgIHJldHVybiBtX3N0eWxlLnJlbGVhc2UoKTsKIH0KIAogdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBl
LCBjb25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBLZXlmcmFtZUxpc3QmIGxpc3QpCkBA
IC0xMjA2LDggKzExOTMsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmtleWZyYW1lU3R5bGVz
Rm9yCiAgICAgICAgIEFTU0VSVCghbV9zdHlsZSk7CiAKICAgICAgICAgLy8gQ3JlYXRlIHRoZSBz
dHlsZQotICAgICAgICBtX3N0eWxlID0gbmV3IChlLT5kb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgp
KSBSZW5kZXJTdHlsZSgqZWxlbWVudFN0eWxlKTsKLSAgICAgICAgbV9zdHlsZS0+cmVmKCk7Cisg
ICAgICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoZWxlbWVudFN0eWxlKTsKICAgICAg
ICAgCiAgICAgICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKICAgICAgICAgCkBAIC0xMjQzLDE4
ICsxMjI5LDE3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6a2V5ZnJhbWVTdHlsZXNGb3IKICAg
ICAgICAgICAgIGZsb2F0IGtleSA9IGtleXNba2V5SW5kZXhdOwogICAgICAgICAgICAgbGlzdC5p
bnNlcnQoa2V5LCBtX3N0eWxlKTsKICAgICAgICAgfQotICAgICAgICBtX3N0eWxlLT5kZXJlZihl
LT5kb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKICAgICAgICAgbV9zdHlsZSA9IDA7CiAgICAg
fQogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIDAlIGFuZCBhIDEwMCUga2V5ZnJh
bWUKLSAgICBmbG9hdCBmaXJzdCA9IGxpc3QuYmVnaW5LZXlmcmFtZXMoKS0+a2V5OwotICAgIGZs
b2F0IGxhc3QgPSAobGlzdC5lbmRLZXlmcmFtZXMoKS0xKS0+a2V5OworICAgIGZsb2F0IGZpcnN0
ID0gbGlzdC5iZWdpbktleWZyYW1lcygpLT5rZXkoKTsKKyAgICBmbG9hdCBsYXN0ID0gKGxpc3Qu
ZW5kS2V5ZnJhbWVzKCktMSktPmtleSgpOwogICAgIGlmIChmaXJzdCAhPSAwIHx8IGxhc3QgIT0g
MSkKICAgICAgICAgbGlzdC5jbGVhcigpOwogfQogCi1SZW5kZXJTdHlsZSogQ1NTU3R5bGVTZWxl
Y3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFJlbmRlclN0eWxlOjpQc2V1ZG9JZCBwc2V1ZG8s
IEVsZW1lbnQqIGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK1Bhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChSZW5kZXJTdHls
ZTo6UHNldWRvSWQgcHNldWRvLCBFbGVtZW50KiBlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
CiB7CiAgICAgaWYgKCFlKQogICAgICAgICByZXR1cm4gMDsKQEAgLTEyNzgsOCArMTI2Myw3IEBA
IFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHkKICAgICBpZiAobV9tYXRj
aGVkRGVjbHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBtX3N0eWxl
ID0gbmV3IChlLT5kb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOwotICAg
IG1fc3R5bGUtPnJlZigpOworICAgIG1fc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAg
ICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICBtX3N0eWxlLT5pbmhlcml0RnJvbShwYXJlbnRT
dHlsZSk7CiAKQEAgLTEzMTYsMTAgKzEzMDAsMTAgQEAgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2Vs
ZWN0b3I6OnBzZXVkb1N0eQogICAgIGlmIChtX2ZvbnREaXJ0eSkKICAgICAgICAgdXBkYXRlRm9u
dCgpOwogICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0
IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxl
KG1fc3R5bGUsIDApOworICAgIGFkanVzdFJlbmRlclN0eWxlKHN0eWxlKCksIDApOwogCiAgICAg
Ly8gTm93IHJldHVybiB0aGUgc3R5bGUuCi0gICAgcmV0dXJuIG1fc3R5bGU7CisgICAgcmV0dXJu
IG1fc3R5bGUucmVsZWFzZSgpOwogfQogCiBzdGF0aWMgdm9pZCBhZGRJbnRyaW5zaWNNYXJnaW5z
KFJlbmRlclN0eWxlKiBzdHlsZSkKQEAgLTE1MTcsOCArMTUwMSw4IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5bGUKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6dXBkYXRl
Rm9udCgpCiB7CiAgICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpOwotICAgIGNoZWNrRm9yR2Vu
ZXJpY0ZhbWlseUNoYW5nZShtX3N0eWxlLCBtX3BhcmVudFN0eWxlKTsKLSAgICBjaGVja0Zvclpv
b21DaGFuZ2UobV9zdHlsZSwgbV9wYXJlbnRTdHlsZSk7CisgICAgY2hlY2tGb3JHZW5lcmljRmFt
aWx5Q2hhbmdlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUpOworICAgIGNoZWNrRm9yWm9vbUNoYW5n
ZShzdHlsZSgpLCBtX3BhcmVudFN0eWxlKTsKICAgICBtX3N0eWxlLT5mb250KCkudXBkYXRlKG1f
Zm9udFNlbGVjdG9yKTsKICAgICBtX2ZvbnREaXJ0eSA9IGZhbHNlOwogfQpAQCAtMTU3Nyw3ICsx
NTYxLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKENTUwogICAgIG1f
ZHluYW1pY1BzZXVkbyA9IFJlbmRlclN0eWxlOjpOT1BTRVVETzsKIAogICAgIC8vIENoZWNrIHRo
ZSBzZWxlY3RvcgotICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tTZWxl
Y3RvcihzZWwsIG1fZWxlbWVudCwgJm1fc2VsZWN0b3JBdHRycywgbV9keW5hbWljUHNldWRvLCB0
cnVlLCBmYWxzZSwgbV9zdHlsZSwgbV9wYXJlbnRTdHlsZSk7CisgICAgU2VsZWN0b3JNYXRjaCBt
YXRjaCA9IG1fY2hlY2tlci5jaGVja1NlbGVjdG9yKHNlbCwgbV9lbGVtZW50LCAmbV9zZWxlY3Rv
ckF0dHJzLCBtX2R5bmFtaWNQc2V1ZG8sIHRydWUsIGZhbHNlLCBzdHlsZSgpLCBtX3BhcmVudFN0
eWxlKTsKICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JNYXRjaGVzKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTMxMjIsNyArMzEwNiw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBw
bHlQcm9wZXJ0eShpbnQKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoaG9yaXpv
bnRhbEJvcmRlclNwYWNpbmcsIEhvcml6b250YWxCb3JkZXJTcGFjaW5nKQogICAgICAgICBpZiAo
IXByaW1pdGl2ZVZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzaG9ydCBzcGFj
aW5nID0gIHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoU2hvcnQobV9zdHlsZSwgem9vbUZh
Y3Rvcik7CisgICAgICAgIHNob3J0IHNwYWNpbmcgPSAgcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVM
ZW5ndGhTaG9ydChzdHlsZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAgbV9zdHlsZS0+c2V0SG9y
aXpvbnRhbEJvcmRlclNwYWNpbmcoc3BhY2luZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0zMTMwLDcgKzMxMTQsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHko
aW50CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHZlcnRpY2FsQm9yZGVyU3Bh
Y2luZywgVmVydGljYWxCb3JkZXJTcGFjaW5nKQogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVl
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzaG9ydCBzcGFjaW5nID0gIHByaW1pdGl2
ZVZhbHVlLT5jb21wdXRlTGVuZ3RoU2hvcnQobV9zdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAg
IHNob3J0IHNwYWNpbmcgPSAgcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhTaG9ydChzdHls
ZSgpLCB6b29tRmFjdG9yKTsKICAgICAgICAgbV9zdHlsZS0+c2V0VmVydGljYWxCb3JkZXJTcGFj
aW5nKHNwYWNpbmcpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzMwNSw3ICszMjg5LDcg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAg
d2lkdGggPSA1OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVJbnZh
bGlkOgotICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aFNo
b3J0KG1fc3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aFNob3J0KHN0eWxlKCksIHpvb21GYWN0b3IpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zMzU4
LDcgKzMzNDIsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNv
bXB1dGVMZW5ndGhJbnQobV9zdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICB3aWR0aCA9
IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50KHN0eWxlKCksIHpvb21GYWN0b3IpOwog
ICAgICAgICB9CiAgICAgICAgIHN3aXRjaCAoaWQpIHsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUxldHRlclNwYWNpbmc6CkBAIC0zNTAyLDcgKzM0ODYsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgICAgICBpbnQgdHlwZSA9IHByaW1pdGl2ZVZh
bHVlLT5wcmltaXRpdmVUeXBlKCk7CiAgICAgICAgICAgICBpZiAodHlwZSA+IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiB0eXBlIDwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19E
RUcpCiAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIG91ciBxdWlya3kgbWFyZ2luIHVuaXRzIGlm
IHdlIGhhdmUgdGhlbS4KLSAgICAgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKG1fc3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCwg
CisgICAgICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0
aEludEZvckxlbmd0aChzdHlsZSgpLCB6b29tRmFjdG9yKSwgRml4ZWQsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWUtPmlzUXVpcmtWYWx1ZSgpKTsKICAgICAgICAg
ICAgIGVsc2UgaWYgKHR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQog
ICAgICAgICAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVl
KCksIFBlcmNlbnQpOwpAQCAtMzYwMiw3ICszNTg2LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjphcHBseVByb3BlcnR5KGludAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUgJiYgIWFwcGx5
KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlID0gcHJpbWl0aXZlVmFsdWUtPnBy
aW1pdGl2ZVR5cGUoKTsKICAgICAgICAgICAgIGlmICh0eXBlID4gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QRVJDRU5UQUdFICYmIHR5cGUgPCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRykKLSAg
ICAgICAgICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoSW50
Rm9yTGVuZ3RoKG1fc3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCk7CisgICAgICAgICAgICAgICAg
bCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChzdHls
ZSgpLCB6b29tRmFjdG9yKSwgRml4ZWQpOwogICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCiAgICAgICAgICAgICAgICAgbCA9IExl
bmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CiAgICAgICAg
ICAgICBlbHNlCkBAIC0zNjU4LDcgKzM2NDIsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFw
cGx5UHJvcGVydHkoaW50CiAgICAgICAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJp
bWl0aXZlVHlwZSgpOwogICAgICAgICAgIExlbmd0aCBsOwogICAgICAgICAgIGlmICh0eXBlID4g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFICYmIHR5cGUgPCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0RFRykKLSAgICAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNv
bXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgobV9zdHlsZSwgem9vbUZhY3RvciksIEZpeGVkKTsKKyAg
ICAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JM
ZW5ndGgoc3R5bGUoKSwgem9vbUZhY3RvciksIEZpeGVkKTsKICAgICAgICAgICBlbHNlIGlmICh0
eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgICAgIGwg
PSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwogCkBA
IC0zNzg4LDcgKzM3NzIsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHko
aW50CiAgICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IG1fc3R5bGUtPmVmZmVjdGl2ZVpv
b20oKTsKICAgICAgICAgICAgIGlmIChtX3N0eWxlLT50ZXh0U2l6ZUFkanVzdCgpICYmIG1fY2hl
Y2tlci5tX2RvY3VtZW50LT5mcmFtZSgpICYmIG1fY2hlY2tlci5tX2RvY3VtZW50LT5mcmFtZSgp
LT5zaG91bGRBcHBseVRleHRab29tKCkpCiAgICAgICAgICAgICAgICAgbXVsdGlwbGllciAqPSBt
X2NoZWNrZXIubV9kb2N1bWVudC0+ZnJhbWUoKS0+dGV4dFpvb21GYWN0b3IoKTsKLSAgICAgICAg
ICAgIGxpbmVIZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRG
b3JMZW5ndGgobV9zdHlsZSwgbXVsdGlwbGllciksIEZpeGVkKTsKKyAgICAgICAgICAgIGxpbmVI
ZWlnaHQgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgo
c3R5bGUoKSwgbXVsdGlwbGllciksIEZpeGVkKTsKICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgICAgIGxpbmVIZWln
aHQgPSBMZW5ndGgoKG1fc3R5bGUtPmZvbnRTaXplKCkgKiBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50
VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikKQEAgLTM4NDMsMTAgKzM4MjcsMTAgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAgUmVjdCogcmVjdCA9
IHByaW1pdGl2ZVZhbHVlLT5nZXRSZWN0VmFsdWUoKTsKICAgICAgICAgICAgIGlmICghcmVjdCkK
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB0b3AgPSBjb252ZXJ0VG9MZW5n
dGgocmVjdC0+dG9wKCksIG1fc3R5bGUpOwotICAgICAgICAgICAgcmlnaHQgPSBjb252ZXJ0VG9M
ZW5ndGgocmVjdC0+cmlnaHQoKSwgbV9zdHlsZSk7Ci0gICAgICAgICAgICBib3R0b20gPSBjb252
ZXJ0VG9MZW5ndGgocmVjdC0+Ym90dG9tKCksIG1fc3R5bGUpOwotICAgICAgICAgICAgbGVmdCA9
IGNvbnZlcnRUb0xlbmd0aChyZWN0LT5sZWZ0KCksIG1fc3R5bGUpOworICAgICAgICAgICAgdG9w
ID0gY29udmVydFRvTGVuZ3RoKHJlY3QtPnRvcCgpLCBzdHlsZSgpKTsKKyAgICAgICAgICAgIHJp
Z2h0ID0gY29udmVydFRvTGVuZ3RoKHJlY3QtPnJpZ2h0KCksIHN0eWxlKCkpOworICAgICAgICAg
ICAgYm90dG9tID0gY29udmVydFRvTGVuZ3RoKHJlY3QtPmJvdHRvbSgpLCBzdHlsZSgpKTsKKyAg
ICAgICAgICAgIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgocmVjdC0+bGVmdCgpLCBzdHlsZSgpKTsK
IAogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpICE9IENTU1Zh
bHVlQXV0bykgewogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzkyNywxMCArMzkxMSwxMCBAQCB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgfQogCiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQ6Ci0gICAgICAgIGFwcGx5Q291bnRlckxpc3Qo
bV9zdHlsZSwgdmFsdWUtPmlzVmFsdWVMaXN0KCkgPyBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3Qq
Pih2YWx1ZSkgOiAwLCBmYWxzZSk7CisgICAgICAgIGFwcGx5Q291bnRlckxpc3Qoc3R5bGUoKSwg
dmFsdWUtPmlzVmFsdWVMaXN0KCkgPyBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSkg
OiAwLCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5Q291bnRl
clJlc2V0OgotICAgICAgICBhcHBseUNvdW50ZXJMaXN0KG1fc3R5bGUsIHZhbHVlLT5pc1ZhbHVl
TGlzdCgpID8gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpIDogMCwgdHJ1ZSk7Cisg
ICAgICAgIGFwcGx5Q291bnRlckxpc3Qoc3R5bGUoKSwgdmFsdWUtPmlzVmFsdWVMaXN0KCkgPyBz
dGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSkgOiAwLCB0cnVlKTsKICAgICAgICAgcmV0
dXJuOwogCiAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6IHsKQEAgLTQzOTgsOCArNDM4
Miw4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAg
aWYgKCFwYWlyKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGludCB3aWR0aCA9IHBh
aXItPmZpcnN0KCktPmNvbXB1dGVMZW5ndGhJbnQobV9zdHlsZSwgem9vbUZhY3Rvcik7Ci0gICAg
ICAgIGludCBoZWlnaHQgPSBwYWlyLT5zZWNvbmQoKS0+Y29tcHV0ZUxlbmd0aEludChtX3N0eWxl
LCB6b29tRmFjdG9yKTsKKyAgICAgICAgaW50IHdpZHRoID0gcGFpci0+Zmlyc3QoKS0+Y29tcHV0
ZUxlbmd0aEludChzdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgaW50IGhlaWdodCA9IHBh
aXItPnNlY29uZCgpLT5jb21wdXRlTGVuZ3RoSW50KHN0eWxlKCksIHpvb21GYWN0b3IpOwogICAg
ICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCiAgICAgICAgICAgICByZXR1cm47CiAK
QEAgLTQ0MzEsNyArNDQxNSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0
eShpbnQKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0OgogICAgICAgICBIQU5E
TEVfSU5IRVJJVF9BTkRfSU5JVElBTChvdXRsaW5lT2Zmc2V0LCBPdXRsaW5lT2Zmc2V0KQotICAg
ICAgICBtX3N0eWxlLT5zZXRPdXRsaW5lT2Zmc2V0KHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVu
Z3RoSW50KG1fc3R5bGUsIHpvb21GYWN0b3IpKTsKKyAgICAgICAgbV9zdHlsZS0+c2V0T3V0bGlu
ZU9mZnNldChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludChzdHlsZSgpLCB6b29tRmFj
dG9yKSk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0U2hhZG93
OgpAQCAtNDQ1MSw5ICs0NDM1LDkgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3Bl
cnR5KGludAogICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7CiAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgIFNoYWRvd1ZhbHVlKiBpdGVt
ID0gc3RhdGljX2Nhc3Q8U2hhZG93VmFsdWUqPihsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KGkpKTsKLSAgICAgICAgICAgIGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aEludChtX3N0
eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxl
bmd0aEludChtX3N0eWxlLCB6b29tRmFjdG9yKTsKLSAgICAgICAgICAgIGludCBibHVyID0gaXRl
bS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGhJbnQobV9zdHlsZSwgem9vbUZhY3Rv
cikgOiAwOworICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRlTGVuZ3RoSW50KHN0
eWxlKCksIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IHkgPSBpdGVtLT55LT5jb21wdXRl
TGVuZ3RoSW50KHN0eWxlKCksIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IGJsdXIgPSBp
dGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aEludChzdHlsZSgpLCB6b29tRmFj
dG9yKSA6IDA7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAgICAgIGlmIChpdGVt
LT5jb2xvcikKICAgICAgICAgICAgICAgICBjb2xvciA9IGdldENvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKQEAgLTQ0NzksNyArNDQ2Myw3IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgICAgIGlmICh0eXBlID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgICAgICAgICByZWZsZWN0
aW9uLT5zZXRPZmZzZXQoTGVuZ3RoKHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCktPmdldERvdWJsZVZh
bHVlKCksIFBlcmNlbnQpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZWZs
ZWN0aW9uLT5zZXRPZmZzZXQoTGVuZ3RoKHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCktPmNvbXB1dGVM
ZW5ndGhJbnRGb3JMZW5ndGgobV9zdHlsZSwgem9vbUZhY3RvciksIEZpeGVkKSk7CisgICAgICAg
ICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KExlbmd0aChyZWZsZWN0VmFsdWUtPm9mZnNl
dCgpLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIHpvb21GYWN0b3IpLCBGaXhl
ZCkpOwogICAgICAgICB9CiAgICAgICAgIE5pbmVQaWVjZUltYWdlIG1hc2s7CiAgICAgICAgIG1h
cE5pbmVQaWVjZUltYWdlKHJlZmxlY3RWYWx1ZS0+bWFzaygpLCBtYXNrKTsKQEAgLTQ1ODYsNyAr
NDU3MCw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAg
ICAgICAgIG1fc3R5bGUtPnNldEhhc05vcm1hbENvbHVtbkdhcCgpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fc3R5bGUtPnNldENvbHVtbkdhcChwcmltaXRpdmVW
YWx1ZS0+Y29tcHV0ZUxlbmd0aEZsb2F0KG1fc3R5bGUsIHpvb21GYWN0b3IpKTsKKyAgICAgICAg
bV9zdHlsZS0+c2V0Q29sdW1uR2FwKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoRmxvYXQo
c3R5bGUoKSwgem9vbUZhY3RvcikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5XaWR0aDogewpAQCAtNDYwMCw3ICs0NTg0LDcgQEAgdm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAgbV9zdHls
ZS0+c2V0SGFzQXV0b0NvbHVtbldpZHRoKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgbV9zdHlsZS0+c2V0Q29sdW1uV2lkdGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1
dGVMZW5ndGhGbG9hdChtX3N0eWxlLCB6b29tRmFjdG9yKSk7CisgICAgICAgIG1fc3R5bGUtPnNl
dENvbHVtbldpZHRoKHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUoKSwg
em9vbUZhY3RvcikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRDb2x1bW5SdWxlU3R5bGU6CkBAIC00NzA3LDcgKzQ2OTEsNyBAQCB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICBib29sIG9rID0gdHJ1ZTsKLSAgICAgICAgICAgIExlbmd0aCBsID0gY29u
dmVydFRvTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLCBtX3N0eWxlLCAmb2spOworICAgICAgICAgICAg
TGVuZ3RoIGwgPSBjb252ZXJ0VG9MZW5ndGgocHJpbWl0aXZlVmFsdWUsIHN0eWxlKCksICZvayk7
CiAgICAgICAgICAgICBpZiAob2spCiAgICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0TWFycXVl
ZUluY3JlbWVudChsKTsKICAgICAgICAgfQpAQCAtNDgzMCwxMCArNDgxNCwxMCBAQCB2b2lkIENT
U1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgICAgICAKICAgICAgICAg
RGFzaGJvYXJkUmVnaW9uICpmaXJzdCA9IHJlZ2lvbjsKICAgICAgICAgd2hpbGUgKHJlZ2lvbikg
ewotICAgICAgICAgICAgTGVuZ3RoIHRvcCA9IGNvbnZlcnRUb0xlbmd0aCAocmVnaW9uLT50b3Ao
KSwgbV9zdHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggcmlnaHQgPSBjb252ZXJ0VG9MZW5ndGgg
KHJlZ2lvbi0+cmlnaHQoKSwgbV9zdHlsZSk7Ci0gICAgICAgICAgICBMZW5ndGggYm90dG9tID0g
Y29udmVydFRvTGVuZ3RoIChyZWdpb24tPmJvdHRvbSgpLCBtX3N0eWxlKTsKLSAgICAgICAgICAg
IExlbmd0aCBsZWZ0ID0gY29udmVydFRvTGVuZ3RoIChyZWdpb24tPmxlZnQoKSwgbV9zdHlsZSk7
CisgICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRvTGVuZ3RoKHJlZ2lvbi0+dG9wKCks
IHN0eWxlKCkpOworICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0ID0gY29udmVydFRvTGVuZ3RoKHJl
Z2lvbi0+cmlnaHQoKSwgc3R5bGUoKSk7CisgICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29u
dmVydFRvTGVuZ3RoKHJlZ2lvbi0+Ym90dG9tKCksIHN0eWxlKCkpOworICAgICAgICAgICAgTGVu
Z3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5ndGgocmVnaW9uLT5sZWZ0KCksIHN0eWxlKCkpOwogICAg
ICAgICAgICAgaWYgKHJlZ2lvbi0+bV9pc0NpcmNsZSkKICAgICAgICAgICAgICAgICBtX3N0eWxl
LT5zZXREYXNoYm9hcmRSZWdpb24oU3R5bGVEYXNoYm9hcmRSZWdpb246OkNpcmNsZSwgcmVnaW9u
LT5tX2xhYmVsLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHJlZ2lvbiA9PSBmaXJzdCA/IGZh
bHNlIDogdHJ1ZSk7CiAgICAgICAgICAgICBlbHNlIGlmIChyZWdpb24tPm1faXNSZWN0YW5nbGUp
CkBAIC00ODY0LDExICs0ODQ4LDExIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9w
ZXJ0eShpbnQKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICo9IDM7CiAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVUaGljaykK
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICo9IDU7Ci0gICAgICAgICAgICAgICAgd2lkdGgg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlc3VsdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19FTVMpLT5jb21wdXRlTGVuZ3RoRmxvYXQobV9zdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAg
ICAgICAgICAgd2lkdGggPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlc3VsdCwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19FTVMpLT5jb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUoKSwgem9vbUZh
Y3Rvcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHdpZHRoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1
dGVMZW5ndGhGbG9hdChtX3N0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgICAgICB3aWR0
aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoRmxvYXQoc3R5bGUoKSwgem9vbUZhY3Rv
cik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgbV9zdHlsZS0+
c2V0VGV4dFN0cm9rZVdpZHRoKHdpZHRoKTsKQEAgLTQ4NzcsNyArNDg2MSw3IEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNmb3JtOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRyYW5z
Zm9ybSwgVHJhbnNmb3JtKTsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
OwotICAgICAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlLCBtX3N0eWxlLCBvcGVy
YXRpb25zKTsKKyAgICAgICAgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZSwgc3R5bGUo
KSwgb3BlcmF0aW9ucyk7CiAgICAgICAgIG1fc3R5bGUtPnNldFRyYW5zZm9ybShvcGVyYXRpb25z
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQ4OTEsNyArNDg3NSw3IEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgTGVuZ3RoIGw7CiAgICAg
ICAgIGludCB0eXBlID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKICAgICAgICAg
aWYgKHR5cGUgPiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UgJiYgdHlwZSA8IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKQotICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRp
dmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChtX3N0eWxlLCB6b29tRmFjdG9yKSwg
Rml4ZWQpOworICAgICAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxl
bmd0aEludEZvckxlbmd0aChzdHlsZSgpLCB6b29tRmFjdG9yKSwgRml4ZWQpOwogICAgICAgICBl
bHNlIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAg
ICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNl
bnQpOwogICAgICAgICBlbHNlCkBAIC00OTA1LDcgKzQ4ODksNyBAQCB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgIExlbmd0aCBsOwogICAgICAgICBpbnQg
dHlwZSA9IHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCk7CiAgICAgICAgIGlmICh0eXBl
ID4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFICYmIHR5cGUgPCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0RFRykKLSAgICAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUt
PmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgobV9zdHlsZSwgem9vbUZhY3RvciksIEZpeGVkKTsK
KyAgICAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRG
b3JMZW5ndGgoc3R5bGUoKSwgem9vbUZhY3RvciksIEZpeGVkKTsKICAgICAgICAgZWxzZSBpZih0
eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgICAgIGwg
PSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwogICAg
ICAgICBlbHNlCkBAIC01MTMwLDcgKzUxMTQsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1h
cEZpbGxTaXplKEZpbGxMCiAgICAgaWYgKGZpcnN0VHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1VOS05PV04pCiAgICAgICAgIGZpcnN0TGVuZ3RoID0gTGVuZ3RoKEF1dG8pOwogICAgIGVs
c2UgaWYgKGZpcnN0VHlwZSA+IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiBm
aXJzdFR5cGUgPCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRykKLSAgICAgICAgZmlyc3RMZW5n
dGggPSBMZW5ndGgoZmlyc3QtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgobV9zdHlsZSwgem9v
bUZhY3RvciksIEZpeGVkKTsKKyAgICAgICAgZmlyc3RMZW5ndGggPSBMZW5ndGgoZmlyc3QtPmNv
bXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoc3R5bGUoKSwgem9vbUZhY3RvciksIEZpeGVkKTsKICAg
ICBlbHNlIGlmIChmaXJzdFR5cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdF
KQogICAgICAgICBmaXJzdExlbmd0aCA9IExlbmd0aChmaXJzdC0+Z2V0RG91YmxlVmFsdWUoKSwg
UGVyY2VudCk7CiAgICAgZWxzZQpAQCAtNTEzOSw3ICs1MTIzLDcgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjptYXBGaWxsU2l6ZShGaWxsTAogICAgIGlmIChzZWNvbmRUeXBlID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfVU5LTk9XTikKICAgICAgICAgc2Vjb25kTGVuZ3RoID0gTGVuZ3RoKEF1
dG8pOwogICAgIGVsc2UgaWYgKHNlY29uZFR5cGUgPiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0UgJiYgc2Vjb25kVHlwZSA8IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKQotICAg
ICAgICBzZWNvbmRMZW5ndGggPSBMZW5ndGgoc2Vjb25kLT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVu
Z3RoKG1fc3R5bGUsIHpvb21GYWN0b3IpLCBGaXhlZCk7CisgICAgICAgIHNlY29uZExlbmd0aCA9
IExlbmd0aChzZWNvbmQtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoc3R5bGUoKSwgem9vbUZh
Y3RvciksIEZpeGVkKTsKICAgICBlbHNlIGlmIChzZWNvbmRUeXBlID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgc2Vjb25kTGVuZ3RoID0gTGVuZ3RoKHNlY29u
ZC0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CiAgICAgZWxzZQpAQCAtNTE2Niw3ICs1MTUw
LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBGaWxsWFBvc2l0aW9uKAogICAgIExlbmd0
aCBsOwogICAgIGludCB0eXBlID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKICAg
ICBpZiAodHlwZSA+IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSAmJiB0eXBlIDwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcpCi0gICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZl
VmFsdWUtPmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgobV9zdHlsZSwgem9vbUZhY3RvciksIEZp
eGVkKTsKKyAgICAgICAgbCA9IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aElu
dEZvckxlbmd0aChzdHlsZSgpLCB6b29tRmFjdG9yKSwgRml4ZWQpOwogICAgIGVsc2UgaWYgKHR5
cGUgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQogICAgICAgICBsID0gTGVu
Z3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKICAgICBlbHNl
CkBAIC01MTkwLDcgKzUxNzQsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEZpbGxZUG9z
aXRpb24oCiAgICAgTGVuZ3RoIGw7CiAgICAgaW50IHR5cGUgPSBwcmltaXRpdmVWYWx1ZS0+cHJp
bWl0aXZlVHlwZSgpOwogICAgIGlmICh0eXBlID4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJD
RU5UQUdFICYmIHR5cGUgPCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRykKLSAgICAgICAgbCA9
IExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aEludEZvckxlbmd0aChtX3N0eWxl
LCB6b29tRmFjdG9yKSwgRml4ZWQpOworICAgICAgICBsID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoSW50Rm9yTGVuZ3RoKHN0eWxlKCksIHpvb21GYWN0b3IpLCBGaXhlZCk7
CiAgICAgZWxzZSBpZiAodHlwZSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0Up
CiAgICAgICAgIGwgPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBl
cmNlbnQpOwogICAgIGVsc2UKSW5kZXg6IGNzcy9DU1NTdHlsZVNlbGVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkocmV2aXNpb24gMzc1ODYpCisrKyBjc3MvQ1NT
U3R5bGVTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04MywxNiArODMsMTggQEAgcHVibGlj
OgogCiAgICAgICAgIHZvaWQgaW5pdEVsZW1lbnRBbmRQc2V1ZG9TdGF0ZShFbGVtZW50Kik7CiAg
ICAgICAgIHZvaWQgaW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlID0gMCwgUmVuZGVyU3R5bGU6OlBzZXVkb0lkID0gUmVuZGVyU3R5bGU6Ok5PUFNF
VURPKTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlRm9yRWxlbWVudChFbGVtZW50KiwgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9vbCBhbGxvd1NoYXJpbmcgPSB0cnVlLCBib29s
IHJlc29sdmVGb3JSb290RGVmYXVsdCA9IGZhbHNlKTsKKyAgICAgICAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUgPSAwLCBib29sIGFsbG93U2hhcmluZyA9IHRydWUsIGJvb2wgcmVzb2x2ZUZvclJvb3REZWZh
dWx0ID0gZmFsc2UpOwogICAgICAgICB2b2lkIGtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKEVs
ZW1lbnQqLCBjb25zdCBSZW5kZXJTdHlsZSosIEtleWZyYW1lTGlzdCYgbGlzdCk7CiAKLSAgICAg
ICAgUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlRm9yRWxlbWVudChSZW5kZXJTdHlsZTo6UHNldWRv
SWQsIEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwKTsKKyAgICAgICAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGVGb3JFbGVtZW50KFJlbmRlclN0eWxlOjpQ
c2V1ZG9JZCwgRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDApOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7CiAgICAg
ICAgIE5vZGUqIGxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCBkZXB0
aCA9IDEpOwogICAgICAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChOb2RlKik7CiAK
KyAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQo
KTsgfQorCiAgICAgcHVibGljOgogICAgICAgICAvLyBUaGVzZSBtZXRob2RzIHdpbGwgZ2l2ZSBi
YWNrIHRoZSBzZXQgb2YgcnVsZXMgdGhhdCBtYXRjaGVkIGZvciBhIGdpdmVuIGVsZW1lbnQgKG9y
IGEgcHNldWRvLWVsZW1lbnQpLgogICAgICAgICBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBzdHls
ZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiwgYm9vbCBhdXRob3JPbmx5KTsKQEAgLTExMSw3ICsx
MTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZsb2F0IHNtYWxsZXJGb250U2l6ZShmbG9hdCBzaXpl
LCBib29sIHF1aXJrc01vZGUpIGNvbnN0OwogCiAgICAgcHVibGljOgotICAgICAgICB2b2lkIHNl
dFN0eWxlKFJlbmRlclN0eWxlKiBzKSB7IG1fc3R5bGUgPSBzOyB9IC8vIFVzZWQgYnkgdGhlIGRv
Y3VtZW50IHdoZW4gc2V0dGluZyB1cCBpdHMgcm9vdCBzdHlsZS4KKyAgICAgICAgdm9pZCBzZXRT
dHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzKSB7IG1fc3R5bGUgPSBzOyB9IC8vIFVzZWQg
YnkgdGhlIGRvY3VtZW50IHdoZW4gc2V0dGluZyB1cCBpdHMgcm9vdCBzdHlsZS4KICAgICAgICAg
dm9pZCBzZXRGb250U2l6ZShGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzaXplKTsKIAogICAgICAg
ICB2b2lkIGFwcGx5UHJvcGVydHlUb1N0eWxlKGludCBpZCwgQ1NTVmFsdWUqLCBSZW5kZXJTdHls
ZSopOwpAQCAtMjQ5LDEzICsyNTEsMTMgQEAgcHVibGljOgogICAgICAgICBSZWZQdHI8Q1NTUnVs
ZUxpc3Q+IG1fcnVsZUxpc3Q7CiAKICAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvciogbV9tZWRp
dW07Ci0gICAgICAgIFJlbmRlclN0eWxlKiBtX3Jvb3REZWZhdWx0U3R5bGU7CisgICAgICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gbV9yb290RGVmYXVsdFN0eWxlOwogCiAgICAgICAgIFJlbmRlclN0
eWxlOjpQc2V1ZG9JZCBtX2R5bmFtaWNQc2V1ZG87CiAKICAgICAgICAgU2VsZWN0b3JDaGVja2Vy
IG1fY2hlY2tlcjsKIAotICAgICAgICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKKyAgICAgICAgUmVm
UHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwogICAgICAgICBSZW5kZXJTdHlsZSogbV9wYXJlbnRT
dHlsZTsKICAgICAgICAgRWxlbWVudCogbV9lbGVtZW50OwogICAgICAgICBTdHlsZWRFbGVtZW50
KiBtX3N0eWxlZEVsZW1lbnQ7CkluZGV4OiBjc3MvQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gY3NzL0NTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUuY3BwCShyZXZp
c2lvbiAzNzU4NikKKysrIGNzcy9DU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU1Zh
cmlhYmxlRGVwZW5kZW50VmFsdWU6OkNTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUoY29uc3QgUGFz
c1JlZlB0cjxDU1NWYWx1ZUxpc3Q+JiBsaXN0KQorQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZTo6
Q1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZShQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCkK
IDogbV9saXN0KGxpc3QpCiB7CiB9CkluZGV4OiBjc3MvQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlLmgJKHJldmlz
aW9uIDM3NTg2KQorKysgY3NzL0NTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBDU1NWYWx1ZUxpc3Q7CiAKIGNsYXNzIENTU1Zh
cmlhYmxlRGVwZW5kZW50VmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWU+IGNyZWF0ZShjb25zdCBQ
YXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4mIHZhbHVlTGlzdCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDU1NWYXJpYWJsZURlcGVuZGVudFZhbHVlPiBjcmVhdGUoUGFzc1JlZlB0cjxDU1NWYWx1ZUxp
c3Q+IHZhbHVlTGlzdCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTVmFy
aWFibGVEZXBlbmRlbnRWYWx1ZSh2YWx1ZUxpc3QpKTsKICAgICB9CkBAIC00Nyw3ICs0Nyw3IEBA
IHB1YmxpYzoKICAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGlzdC5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIENTU1ZhcmlhYmxlRGVwZW5kZW50VmFsdWUo
Y29uc3QgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+Jik7CisgICAgQ1NTVmFyaWFibGVEZXBlbmRl
bnRWYWx1ZShQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4pOwogICAgIAogICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IG1fbGlzdDsKIH07CkluZGV4OiBkb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGRvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDM3NTkxKQorKysgZG9tL0RvY3VtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEyOSwyMiArMTEyOSwxOCBAQCB2b2lkIERvY3VtZW50Ojpy
ZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjCiAgICAgICAgIC8vIHN0eWxlIHNlbGVjdG9yIG1heSBz
ZXQgdGhpcyBhZ2FpbiBkdXJpbmcgcmVjYWxjCiAgICAgICAgIG1faGFzTm9kZXNXaXRoUGxhY2Vo
b2xkZXJTdHlsZSA9IGZhbHNlOwogICAgICAgICAKLSAgICAgICAgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlID0gcmVuZGVyZXIoKS0+c3R5bGUoKTsKLSAgICAgICAgaWYgKG9sZFN0eWxlKQotICAgICAg
ICAgICAgb2xkU3R5bGUtPnJlZigpOwotICAgICAgICBSZW5kZXJTdHlsZSogX3N0eWxlID0gbmV3
IChtX3JlbmRlckFyZW5hKSBSZW5kZXJTdHlsZSgpOwotICAgICAgICBfc3R5bGUtPnJlZigpOwot
ICAgICAgICBfc3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwotICAgICAgICBfc3R5bGUtPnNldFZp
c3VhbGx5T3JkZXJlZCh2aXN1YWxseU9yZGVyZWQpOwotICAgICAgICBfc3R5bGUtPnNldFpvb20o
ZnJhbWUoKS0+cGFnZVpvb21GYWN0b3IoKSk7Ci0gICAgICAgIG1fc3R5bGVTZWxlY3Rvci0+c2V0
U3R5bGUoX3N0eWxlKTsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBkb2N1bWVudFN0eWxl
ID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgICAgICBkb2N1bWVudFN0eWxlLT5zZXREaXNw
bGF5KEJMT0NLKTsKKyAgICAgICAgZG9jdW1lbnRTdHlsZS0+c2V0VmlzdWFsbHlPcmRlcmVkKHZp
c3VhbGx5T3JkZXJlZCk7CisgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldFpvb20oZnJhbWUoKS0+
cGFnZVpvb21GYWN0b3IoKSk7CisgICAgICAgIG1fc3R5bGVTZWxlY3Rvci0+c2V0U3R5bGUoZG9j
dW1lbnRTdHlsZSk7CiAgICAgCiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b247CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChwcmludGluZygp
KTsKICAgICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IHRoaXMtPnNldHRpbmdzKCkpIHsK
ICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRSZW5kZXJpbmdNb2RlKHNldHRpbmdzLT5m
b250UmVuZGVyaW5nTW9kZSgpKTsKICAgICAgICAgICAgIGlmIChwcmludGluZygpICYmICFzZXR0
aW5ncy0+c2hvdWxkUHJpbnRCYWNrZ3JvdW5kcygpKQotICAgICAgICAgICAgICAgIF9zdHlsZS0+
c2V0Rm9yY2VCYWNrZ3JvdW5kc1RvV2hpdGUodHJ1ZSk7CisgICAgICAgICAgICAgICAgZG9jdW1l
bnRTdHlsZS0+c2V0Rm9yY2VCYWNrZ3JvdW5kc1RvV2hpdGUodHJ1ZSk7CiAgICAgICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIHN0ZGZvbnQgPSBzZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5
KCk7CiAgICAgICAgICAgICBpZiAoIXN0ZGZvbnQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KHN0ZGZvbnQpOwpAQCAt
MTE1NCwyMCArMTE1MCwxNiBAQCB2b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5n
ZSBjCiAgICAgICAgICAgICBtX3N0eWxlU2VsZWN0b3ItPnNldEZvbnRTaXplKGZvbnREZXNjcmlw
dGlvbiwgbV9zdHlsZVNlbGVjdG9yLT5mb250U2l6ZUZvcktleXdvcmQoQ1NTVmFsdWVNZWRpdW0s
IGluQ29tcGF0TW9kZSgpLCBmYWxzZSkpOwogICAgICAgICB9CiAKLSAgICAgICAgX3N0eWxlLT5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgX3N0eWxlLT5mb250
KCkudXBkYXRlKG1fc3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCkpOworICAgICAgICBkb2N1
bWVudFN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAg
ZG9jdW1lbnRTdHlsZS0+Zm9udCgpLnVwZGF0ZShtX3N0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3Rv
cigpKTsKICAgICAgICAgaWYgKGluQ29tcGF0TW9kZSgpKQotICAgICAgICAgICAgX3N0eWxlLT5z
ZXRIdG1sSGFja3ModHJ1ZSk7IC8vIGVuYWJsZSBodG1sIHNwZWNpZmljIHJlbmRlcmluZyB0cmlj
a3MKKyAgICAgICAgICAgIGRvY3VtZW50U3R5bGUtPnNldEh0bWxIYWNrcyh0cnVlKTsgLy8gZW5h
YmxlIGh0bWwgc3BlY2lmaWMgcmVuZGVyaW5nIHRyaWNrcwogCi0gICAgICAgIFN0eWxlQ2hhbmdl
IGNoID0gZGlmZihfc3R5bGUsIG9sZFN0eWxlKTsKKyAgICAgICAgU3R5bGVDaGFuZ2UgY2ggPSBk
aWZmKGRvY3VtZW50U3R5bGUuZ2V0KCksIHJlbmRlcmVyKCktPnN0eWxlKCkpOwogICAgICAgICBp
ZiAocmVuZGVyZXIoKSAmJiBjaCAhPSBOb0NoYW5nZSkKLSAgICAgICAgICAgIHJlbmRlcmVyKCkt
PnNldFN0eWxlKF9zdHlsZSk7CisgICAgICAgICAgICByZW5kZXJlcigpLT5zZXRTdHlsZShkb2N1
bWVudFN0eWxlLnJlbGVhc2UoKSk7CiAgICAgICAgIGlmIChjaGFuZ2UgIT0gRm9yY2UpCiAgICAg
ICAgICAgICBjaGFuZ2UgPSBjaDsKLQotICAgICAgICBfc3R5bGUtPmRlcmVmKG1fcmVuZGVyQXJl
bmEpOwotICAgICAgICBpZiAob2xkU3R5bGUpCi0gICAgICAgICAgICBvbGRTdHlsZS0+ZGVyZWYo
bV9yZW5kZXJBcmVuYSk7CiAgICAgfQogCiAgICAgZm9yIChOb2RlKiBuID0gZmlyc3RDaGlsZCgp
OyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkKSW5kZXg6IGRvbS9FbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBkb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgZG9tL0VsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDksNyArNjA5LDcgQEAgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgRWxlbWVudDo6aW1hZ2VTb3VyYwogICAgIHJldHVybiBzcmNBdHRyOwogfQogCi1SZW5kZXJT
dHlsZSogRWxlbWVudDo6c3R5bGVGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRl
cmVyKQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gRWxlbWVudDo6c3R5bGVGb3JSZW5kZXJlcihS
ZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyKQogewogICAgIHJldHVybiBkb2N1bWVudCgpLT5z
dHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudCh0aGlzKTsKIH0KQEAgLTY5NCwxNyArNjk0
LDE1IEBAIHZvaWQgRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2gKICAgICAgICAg
ICAgIHJhcmVEYXRhKCktPnJlc2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTsKICAgICB9CiAgICAgaWYg
KGhhc1BhcmVudFN0eWxlICYmIChjaGFuZ2UgPj0gSW5oZXJpdCB8fCBjaGFuZ2VkKCkpKSB7Ci0g
ICAgICAgIFJlbmRlclN0eWxlICpuZXdTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3Io
KS0+c3R5bGVGb3JFbGVtZW50KHRoaXMpOwotICAgICAgICBTdHlsZUNoYW5nZSBjaCA9IGRpZmYo
Y3VycmVudFN0eWxlLCBuZXdTdHlsZSk7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3
U3R5bGUgPSBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudCh0aGlz
KTsKKyAgICAgICAgU3R5bGVDaGFuZ2UgY2ggPSBkaWZmKGN1cnJlbnRTdHlsZSwgbmV3U3R5bGUu
Z2V0KCkpOwogICAgICAgICBpZiAoY2ggPT0gRGV0YWNoIHx8ICFjdXJyZW50U3R5bGUpIHsKICAg
ICAgICAgICAgIGlmIChhdHRhY2hlZCgpKQogICAgICAgICAgICAgICAgIGRldGFjaCgpOwotICAg
ICAgICAgICAgLy8gIyMjIFN1Ym9wdGltYWwuIFN0eWxlIGdldHMgY2FsY3VsYXRlZCBhZ2Fpbi4K
LSAgICAgICAgICAgIGF0dGFjaCgpOworICAgICAgICAgICAgYXR0YWNoKCk7IC8vIEZJWE1FOiBU
aGUgc3R5bGUgZ2V0cyBjb21wdXRlZCB0d2ljZSBieSBjYWxsaW5nIGF0dGFjaC4gV2UgY291bGQg
ZG8gYmV0dGVyIGlmIHdlIHBhc3NlZCB0aGUgc3R5bGUgYWxvbmcuCiAgICAgICAgICAgICAvLyBh
dHRhY2ggcmVjYWx1bGF0ZXMgdGhlIHN0eWxlIGZvciBhbGwgY2hpbGRyZW4uIE5vIG5lZWQgdG8g
ZG8gaXQgdHdpY2UuCiAgICAgICAgICAgICBzZXRDaGFuZ2VkKE5vU3R5bGVDaGFuZ2UpOwogICAg
ICAgICAgICAgc2V0SGFzQ2hhbmdlZENoaWxkKGZhbHNlKTsKLSAgICAgICAgICAgIG5ld1N0eWxl
LT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCkBAIC03MzcsMTQgKzczNSwxMiBAQCB2b2lkIEVsZW1lbnQ6OnJlY2FsY1N0
eWxlKFN0eWxlQ2hhbmdlIGNoCiAgICAgICAgICAgICAvLyBzaWJsaW5nL2Rlc2NlbmRhbnQgcnVs
ZXMsIHNpbmNlIG90aGVyd2lzZSBpdCBpc24ndCBwb3NzaWJsZSBmb3IgYW5jZXN0b3Igc3R5bGVz
IHRvIGFmZmVjdCBzaGFyaW5nIG9mCiAgICAgICAgICAgICAvLyBkZXNjZW5kYW50cy4KICAgICAg
ICAgICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldFN0
eWxlSW50ZXJuYWwobmV3U3R5bGUpOworICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldFN0
eWxlSW50ZXJuYWwobmV3U3R5bGUuZ2V0KCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIHNldFJlbmRlclN0eWxlKG5ld1N0eWxlKTsKICAgICAgICAgfSBlbHNlIGlmIChzdHls
ZUNoYW5nZVR5cGUoKSA9PSBBbmltYXRpb25TdHlsZUNoYW5nZSkKICAgICAgICAgICAgICBzZXRS
ZW5kZXJTdHlsZShuZXdTdHlsZSk7CiAKLSAgICAgICAgbmV3U3R5bGUtPmRlcmVmKGRvY3VtZW50
KCktPnJlbmRlckFyZW5hKCkpOwotCiAgICAgICAgIGlmIChjaGFuZ2UgIT0gRm9yY2UpIHsKICAg
ICAgICAgICAgIGlmICgoZG9jdW1lbnQoKS0+dXNlc0Rlc2NlbmRhbnRSdWxlcygpIHx8IGhhc1Bv
c2l0aW9uYWxSdWxlcykgJiYgc3R5bGVDaGFuZ2VUeXBlKCkgPj0gRnVsbFN0eWxlQ2hhbmdlKQog
ICAgICAgICAgICAgICAgIGNoYW5nZSA9IEZvcmNlOwpAQCAtMTE4OCw3ICsxMTg0LDcgQEAgUmVu
ZGVyU3R5bGUqIEVsZW1lbnQ6OmNvbXB1dGVkU3R5bGUoKQogICAgIEVsZW1lbnRSYXJlRGF0YSog
ZGF0YSA9IGVuc3VyZVJhcmVEYXRhKCk7CiAgICAgaWYgKCFkYXRhLT5tX2NvbXB1dGVkU3R5bGUp
CiAgICAgICAgIGRhdGEtPm1fY29tcHV0ZWRTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0
b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMsIHBhcmVudCgpID8gcGFyZW50KCktPmNvbXB1dGVk
U3R5bGUoKSA6IDApOwotICAgIHJldHVybiBkYXRhLT5tX2NvbXB1dGVkU3R5bGU7CisgICAgcmV0
dXJuIGRhdGEtPm1fY29tcHV0ZWRTdHlsZS5nZXQoKTsKIH0KIAogdm9pZCBFbGVtZW50OjpjYW5j
ZWxGb2N1c0FwcGVhcmFuY2VVcGRhdGUoKQpJbmRleDogZG9tL0VsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBkb20vRWxlbWVudC5oCShyZXZpc2lvbiAzNzU4NikKKysrIGRvbS9FbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwotICAgIFJlbmRlclN0eWxl
KiBzdHlsZUZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcGFyZW50KTsKKyAgICBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBzdHlsZUZvclJlbmRlcmVyKFJlbmRlck9iamVjdCogcGFyZW50KTsKICAg
ICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5k
ZXJTdHlsZSopOwogICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZShTdHlsZUNoYW5nZSA9IE5v
Q2hhbmdlKTsKIApJbmRleDogZG9tL0VsZW1lbnRSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRv
bS9FbGVtZW50UmFyZURhdGEuaAkocmV2aXNpb24gMzc1ODYpCisrKyBkb20vRWxlbWVudFJhcmVE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgcHVibGljOgogICAgIHZvaWQg
cmVzZXRDb21wdXRlZFN0eWxlKEVsZW1lbnQqKTsKIAogICAgIEludFNpemUgbV9taW5pbXVtU2l6
ZUZvclJlc2l6aW5nOwotICAgIFJlbmRlclN0eWxlKiBtX2NvbXB1dGVkU3R5bGU7CisgICAgUmVm
UHRyPFJlbmRlclN0eWxlPiBtX2NvbXB1dGVkU3R5bGU7CiB9OwogCiBpbmxpbmUgSW50U2l6ZSBk
ZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpCkBAIC00NCwxNiArNDQsMTIgQEAgaW5saW5l
IEludFNpemUgZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaQogCiBpbmxpbmUgRWxlbWVudFJhcmVE
YXRhOjpFbGVtZW50UmFyZURhdGEoRWxlbWVudCogZSkKICAgICA6IG1fbWluaW11bVNpemVGb3JS
ZXNpemluZyhkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpKQotICAgICwgbV9jb21wdXRl
ZFN0eWxlKDApCiB7CiB9CiAKIGlubGluZSB2b2lkIEVsZW1lbnRSYXJlRGF0YTo6cmVzZXRDb21w
dXRlZFN0eWxlKEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFtX2NvbXB1dGVkU3R5bGUp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbXB1dGVkU3R5bGUtPmRlcmVmKGVsZW1lbnQtPmRv
Y3VtZW50KCktPnJlbmRlckFyZW5hKCkpOwotICAgIG1fY29tcHV0ZWRTdHlsZSA9IDA7CisgICAg
bV9jb21wdXRlZFN0eWxlLmNsZWFyKCk7CiB9CiAKIH0KSW5kZXg6IGRvbS9Ob2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBkb20vTm9kZS5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgZG9tL05vZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMjAgKzExNSwyMCBAQCBOb2RlOjpTdHlsZUNoYW5nZSBO
b2RlOjpkaWZmKCBSZW5kZXJTdHlsCiAgICAgLy8gSWYgdGhlIHBzZXVkb1N0eWxlcyBoYXZlIGNo
YW5nZWQsIHdlIHdhbnQgYW55IFN0eWxlQ2hhbmdlIHRoYXQgaXMgbm90IE5vQ2hhbmdlCiAgICAg
Ly8gYmVjYXVzZSBzZXRTdHlsZSB3aWxsIGRvIHRoZSByaWdodCB0aGluZyB3aXRoIGFueXRoaW5n
IGVsc2UuCiAgICAgaWYgKGNoID09IE5vQ2hhbmdlICYmIHMxLT5oYXNQc2V1ZG9TdHlsZShSZW5k
ZXJTdHlsZTo6QkVGT1JFKSkgewotICAgICAgICBSZW5kZXJTdHlsZSogcHMyID0gczItPmdldFBz
ZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpCRUZPUkUpOworICAgICAgICBSZW5kZXJTdHlsZSogcHMy
ID0gczItPmdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpCRUZPUkUpOwogICAgICAg
ICBpZiAoIXBzMikKICAgICAgICAgICAgIGNoID0gTm9Jbmhlcml0OwogICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwczEgPSBzMS0+Z2V0UHNldWRvU3R5bGUoUmVuZGVy
U3R5bGU6OkJFRk9SRSk7CisgICAgICAgICAgICBSZW5kZXJTdHlsZSogcHMxID0gczEtPmdldENh
Y2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpCRUZPUkUpOwogICAgICAgICAgICAgY2ggPSBw
czEgJiYgKnBzMSA9PSAqcHMyID8gTm9DaGFuZ2UgOiBOb0luaGVyaXQ7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgaWYgKGNoID09IE5vQ2hhbmdlICYmIHMxLT5oYXNQc2V1ZG9TdHlsZShSZW5kZXJT
dHlsZTo6QUZURVIpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBwczIgPSBzMi0+Z2V0UHNldWRv
U3R5bGUoUmVuZGVyU3R5bGU6OkFGVEVSKTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHBzMiA9IHMy
LT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6QUZURVIpOwogICAgICAgICBpZiAo
IXBzMikKICAgICAgICAgICAgIGNoID0gTm9Jbmhlcml0OwogICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIFJlbmRlclN0eWxlKiBwczEgPSBzMS0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6
OkFGVEVSKTsKKyAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwczEgPSBzMS0+Z2V0Q2FjaGVkUHNl
dWRvU3R5bGUoUmVuZGVyU3R5bGU6OkFGVEVSKTsKICAgICAgICAgICAgIGNoID0gcHMyICYmICpw
czEgPT0gKnBzMiA/IE5vQ2hhbmdlIDogTm9Jbmhlcml0OwogICAgICAgICB9CiAgICAgfQpAQCAt
MTAyOCwxMCArMTAyOCwxMCBAQCB2b2lkIE5vZGU6OmNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKQog
ICAgICAgICAmJiBwYXJlbnQtPmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIodGhpcykKICNlbmRp
ZgogICAgICAgICApIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gc3R5bGVGb3JSZW5k
ZXJlcihwYXJlbnRSZW5kZXJlcik7Ci0gICAgICAgIGlmIChyZW5kZXJlcklzTmVlZGVkKHN0eWxl
KSkgewotICAgICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogciA9IGNyZWF0ZVJlbmRlcmVyKGRv
Y3VtZW50KCktPnJlbmRlckFyZW5hKCksIHN0eWxlKSkgewotICAgICAgICAgICAgICAgIGlmICgh
cGFyZW50UmVuZGVyZXItPmlzQ2hpbGRBbGxvd2VkKHIsIHN0eWxlKSkKKyAgICAgICAgUmVmUHRy
PFJlbmRlclN0eWxlPiBzdHlsZSA9IHN0eWxlRm9yUmVuZGVyZXIocGFyZW50UmVuZGVyZXIpOwor
ICAgICAgICBpZiAocmVuZGVyZXJJc05lZWRlZChzdHlsZS5nZXQoKSkpIHsKKyAgICAgICAgICAg
IGlmIChSZW5kZXJPYmplY3QqIHIgPSBjcmVhdGVSZW5kZXJlcihkb2N1bWVudCgpLT5yZW5kZXJB
cmVuYSgpLCBzdHlsZS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBhcmVudFJlbmRl
cmVyLT5pc0NoaWxkQWxsb3dlZChyLCBzdHlsZS5nZXQoKSkpCiAgICAgICAgICAgICAgICAgICAg
IHItPmRlc3Ryb3koKTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgc2V0UmVuZGVyZXIocik7CkBAIC0xMDQwLDE3ICsxMDQwLDE0IEBAIHZvaWQgTm9kZTo6Y3Jl
YXRlUmVuZGVyZXJJZk5lZWRlZCgpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIHN0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgp
KTsKICAgICB9CiB9CiAKLVJlbmRlclN0eWxlKiBOb2RlOjpzdHlsZUZvclJlbmRlcmVyKFJlbmRl
ck9iamVjdCogcGFyZW50KQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gTm9kZTo6c3R5bGVGb3JS
ZW5kZXJlcihSZW5kZXJPYmplY3QqIHBhcmVudCkKIHsKICAgICBpZiAoaXNFbGVtZW50Tm9kZSgp
KQogICAgICAgICByZXR1cm4gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVs
ZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHRoaXMpKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSBwYXJlbnQtPnN0eWxlKCk7Ci0gICAgc3R5bGUtPnJlZigpOwotICAgIHJldHVybiBzdHls
ZTsKKyAgICByZXR1cm4gcGFyZW50LT5zdHlsZSgpOwogfQogCiBib29sIE5vZGU6OnJlbmRlcmVy
SXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKQpAQCAtMTA2OSw3ICsxMDY2LDcgQEAgUmVuZGVy
U3R5bGUqIE5vZGU6Om5vblJlbmRlcmVyUmVuZGVyU3R5bAogICAgIHJldHVybiAwOyAKIH0gICAK
IAotdm9pZCBOb2RlOjpzZXRSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogcykKK3ZvaWQgTm9kZTo6
c2V0UmVuZGVyU3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gcykKIHsKICAgICBpZiAobV9y
ZW5kZXJlcikKICAgICAgICAgbV9yZW5kZXJlci0+c2V0QW5pbWF0YWJsZVN0eWxlKHMpOyAKSW5k
ZXg6IGRvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL05vZGUuaAkocmV2aXNpb24gMzc1ODYp
CisrKyBkb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDgsNyArNDA4LDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1vdmUoKTsKICAgICB2b2lkIGNyZWF0ZVJlbmRl
cmVySWZOZWVkZWQoKTsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGVGb3JSZW5kZXJlcihSZW5kZXJP
YmplY3QqIHBhcmVudCk7CisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JSZW5k
ZXJlcihSZW5kZXJPYmplY3QqIHBhcmVudCk7CiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNO
ZWVkZWQoUmVuZGVyU3R5bGUqKTsKICNpZiBFTkFCTEUoU1ZHKQogICAgIHZpcnR1YWwgYm9vbCBj
aGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBA
IC00MTcsNyArNDE3LDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIFdyYXBwZXIgZm9yIG5vZGVz
IHRoYXQgZG9uJ3QgaGF2ZSBhIHJlbmRlcmVyLCBidXQgc3RpbGwgY2FjaGUgdGhlIHN0eWxlIChs
aWtlIEhUTUxPcHRpb25FbGVtZW50KS4KICAgICBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0UmVuZGVyU3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4pOwog
CiAgICAgdmlydHVhbCBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZSgpOwogCkluZGV4OiBodG1s
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIGh0bWwvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4MSwyMSArMTE4MSwxNyBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjCiAgICAgCiAgICAgLy8g
TWFwIHRoZSA8Y2FudmFzPiBmb250IGludG8gdGhlIHRleHQgc3R5bGUuIElmIHRoZSBmb250IHVz
ZXMga2V5d29yZHMgbGlrZSBsYXJnZXIvc21hbGxlciwgdGhlc2Ugd2lsbCB3b3JrCiAgICAgLy8g
cmVsYXRpdmUgdG8gdGhlIGNhbnZhcy4KLSAgICBSZW5kZXJBcmVuYSogYXJlbmEgPSBtX2NhbnZh
cy0+ZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKTsKLSAgICBSZW5kZXJTdHlsZSogbmV3U3R5bGUg
PSBuZXcgKGFyZW5hKSBSZW5kZXJTdHlsZSgpOwotICAgIG5ld1N0eWxlLT5yZWYoKTsKKyAgICBS
ZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwogICAg
IGlmIChtX2NhbnZhcy0+Y29tcHV0ZWRTdHlsZSgpKQogICAgICAgICBuZXdTdHlsZS0+c2V0Rm9u
dERlc2NyaXB0aW9uKG1fY2FudmFzLT5jb21wdXRlZFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigp
KTsKIAogICAgIC8vIE5vdyBtYXAgdGhlIGZvbnQgcHJvcGVydHkgaW50byB0aGUgc3R5bGUuCiAg
ICAgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvciA9IG1fY2FudmFzLT5kb2N1bWVudCgp
LT5zdHlsZVNlbGVjdG9yKCk7Ci0gICAgc3R5bGVTZWxlY3Rvci0+YXBwbHlQcm9wZXJ0eVRvU3R5
bGUoQ1NTUHJvcGVydHlGb250LCB0ZW1wRGVjbC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eUZvbnQpLmdldCgpLCBuZXdTdHlsZSk7CisgICAgc3R5bGVTZWxlY3Rvci0+YXBwbHlQcm9w
ZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlGb250LCB0ZW1wRGVjbC0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eUZvbnQpLmdldCgpLCBuZXdTdHlsZS5nZXQoKSk7CiAgICAgCiAgICAgc3Rh
dGUoKS5tX2ZvbnQgPSBuZXdTdHlsZS0+Zm9udCgpOwogICAgIHN0YXRlKCkubV9mb250LnVwZGF0
ZShzdHlsZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKSk7CiAgICAgc3RhdGUoKS5tX3JlYWxpemVk
Rm9udCA9IHRydWU7Ci0KLSAgICBuZXdTdHlsZS0+ZGVyZWYoYXJlbmEpOwogICAgIAogICAgIC8v
IFNldCB0aGUgZm9udCBpbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KICAgICBHcmFwaGljc0NvbnRl
eHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwpJbmRleDogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCShyZXZpc2lv
biAzNzU4NikKKysrIGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzMiwzNiArMTMyLDI1IEBAIGJvb2wgSFRNTE9wdEdyb3VwRWxlbWVudDo6Y2hlY2tEVEQo
Y29uc3QKIAogdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50OjphdHRhY2goKQogewotICAgIGlmIChw
YXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gc3R5bGVGb3JSZW5kZXJlcigwKTsKLSAgICAgICAgc2V0UmVuZGVyU3R5bGUoc3R5bGUpOwot
ICAgICAgICBzdHlsZS0+ZGVyZWYoZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSk7Ci0gICAgfQor
ICAgIGlmIChwYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCkpCisgICAgICAgIHNldFJlbmRlclN0
eWxlKHN0eWxlRm9yUmVuZGVyZXIoMCkpOwogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmF0
dGFjaCgpOwogfQogCiB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6OmRldGFjaCgpCiB7Ci0gICAg
aWYgKG1fc3R5bGUpIHsKLSAgICAgICAgbV9zdHlsZS0+ZGVyZWYoZG9jdW1lbnQoKS0+cmVuZGVy
QXJlbmEoKSk7Ci0gICAgICAgIG1fc3R5bGUgPSAwOwotICAgIH0KKyAgICBtX3N0eWxlLmNsZWFy
KCk7CiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6ZGV0YWNoKCk7CiB9CiAKLXZvaWQgSFRN
TE9wdEdyb3VwRWxlbWVudDo6c2V0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQor
dm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50OjpzZXRSZW5kZXJTdHlsZShQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBuZXdTdHlsZSkKIHsKLSAgICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSBtX3N0eWxl
OwogICAgIG1fc3R5bGUgPSBuZXdTdHlsZTsKLSAgICBpZiAobmV3U3R5bGUpCi0gICAgICAgIG5l
d1N0eWxlLT5yZWYoKTsKLSAgICBpZiAob2xkU3R5bGUpCi0gICAgICAgIG9sZFN0eWxlLT5kZXJl
Zihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKIH0KICAgICAKIFJlbmRlclN0eWxlKiBIVE1M
T3B0R3JvdXBFbGVtZW50Ojpub25SZW5kZXJlclJlbmRlclN0eWxlKCkgY29uc3QgCiB7IAotICAg
IHJldHVybiBtX3N0eWxlOyAKKyAgICByZXR1cm4gbV9zdHlsZS5nZXQoKTsgCiB9CiAKIFN0cmlu
ZyBIVE1MT3B0R3JvdXBFbGVtZW50Ojpncm91cExhYmVsVGV4dCgpIGNvbnN0CkluZGV4OiBodG1s
L0hUTUxPcHRHcm91cEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxPcHRHcm91cEVs
ZW1lbnQuaAkocmV2aXNpb24gMzc1ODYpCisrKyBodG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7Ci0gICAgdmly
dHVhbCB2b2lkIHNldFJlbmRlclN0eWxlKFJlbmRlclN0eWxlKik7CisgICAgdmlydHVhbCB2b2lk
IHNldFJlbmRlclN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+KTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBpbnNlcnRCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hp
bGQsIEV4Y2VwdGlvbkNvZGUmLCBib29sIHNob3VsZExhenlBdHRhY2ggPSBmYWxzZSk7CiAgICAg
dmlydHVhbCBib29sIHJlcGxhY2VDaGlsZChQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2Rl
KiBvbGRDaGlsZCwgRXhjZXB0aW9uQ29kZSYsIGJvb2wgc2hvdWxkTGF6eUF0dGFjaCA9IGZhbHNl
KTsKQEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHJlY2FsY1NlbGVj
dE9wdGlvbnMoKTsKIAotICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOworICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gbV9zdHlsZTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IGh0bWwvSFRNTE9w
dGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAzNzU4NikKKysrIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NywyMCArNTcsMTQgQEAgYm9vbCBIVE1MT3B0aW9uRWxlbWVudDo6Y2hlY2tE
VEQoY29uc3QgTgogCiB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjphdHRhY2goKQogewotICAgIGlm
IChwYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gc3R5bGVGb3JSZW5kZXJlcigwKTsKLSAgICAgICAgc2V0UmVuZGVyU3R5bGUoc3R5bGUp
OwotICAgICAgICBzdHlsZS0+ZGVyZWYoZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSk7Ci0gICAg
fQorICAgIGlmIChwYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCkpCisgICAgICAgIHNldFJlbmRl
clN0eWxlKHN0eWxlRm9yUmVuZGVyZXIoMCkpOwogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OmF0dGFjaCgpOwogfQogCiB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpkZXRhY2goKQogewotICAg
IGlmIChtX3N0eWxlKSB7Ci0gICAgICAgIG1fc3R5bGUtPmRlcmVmKGRvY3VtZW50KCktPnJlbmRl
ckFyZW5hKCkpOwotICAgICAgICBtX3N0eWxlID0gMDsKLSAgICB9CisgICAgbV9zdHlsZS5jbGVh
cigpOwogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRldGFjaCgpOwogfQogCkBAIC0yMzUs
MTkgKzIyOSwxNCBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXRMYWJlbChjb25zdCBTCiAg
ICAgc2V0QXR0cmlidXRlKGxhYmVsQXR0ciwgdmFsdWUpOwogfQogCi12b2lkIEhUTUxPcHRpb25F
bGVtZW50OjpzZXRSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogbmV3U3R5bGUpCit2b2lkIEhUTUxP
cHRpb25FbGVtZW50OjpzZXRSZW5kZXJTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdT
dHlsZSkKIHsKLSAgICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSBtX3N0eWxlOwogICAgIG1fc3R5
bGUgPSBuZXdTdHlsZTsKLSAgICBpZiAobmV3U3R5bGUpCi0gICAgICAgIG5ld1N0eWxlLT5yZWYo
KTsKLSAgICBpZiAob2xkU3R5bGUpCi0gICAgICAgIG9sZFN0eWxlLT5kZXJlZihkb2N1bWVudCgp
LT5yZW5kZXJBcmVuYSgpKTsKIH0KIAogUmVuZGVyU3R5bGUqIEhUTUxPcHRpb25FbGVtZW50Ojpu
b25SZW5kZXJlclJlbmRlclN0eWxlKCkgY29uc3QgCiB7IAotICAgIHJldHVybiBtX3N0eWxlOyAK
KyAgICByZXR1cm4gbV9zdHlsZS5nZXQoKTsgCiB9CiAKIFN0cmluZyBIVE1MT3B0aW9uRWxlbWVu
dDo6b3B0aW9uVGV4dCgpCkluZGV4OiBodG1sL0hUTUxPcHRpb25FbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCShyZXZpc2lvbiAzNzU4NikKKysrIGh0bWwv
SFRNTE9wdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKSB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIHZv
aWQgZGV0YWNoKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJlbmRlclN0eWxlKFJlbmRlclN0eWxl
Kik7CisgICAgdmlydHVhbCB2b2lkIHNldFJlbmRlclN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+KTsKICAgICAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0
OwogCkBAIC04Niw3ICs4Niw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgU3RyaW5nIG1fdmFsdWU7
CiAgICAgYm9vbCBtX3NlbGVjdGVkOwotICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOworICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IHBh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL2FuaW1hdGlv
bi9BbmltYXRpb25CYXNlLmgJKHJldmlzaW9uIDM3NTg2KQorKysgcGFnZS9hbmltYXRpb24vQW5p
bWF0aW9uQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNyArMTgxLDcgQEAgcHVibGljOgog
ICAgIGRvdWJsZSBwcm9ncmVzcyhkb3VibGUgc2NhbGUsIGRvdWJsZSBvZmZzZXQsIGNvbnN0IFRp
bWluZ0Z1bmN0aW9uKikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShDb21wb3Np
dGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0
eWxlLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0
U3R5bGUsIFJlbmRlclN0eWxlKiYgYW5pbWF0ZWRTdHlsZSkgeyB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVyU3R5
bGU+JiBhbmltYXRlZFN0eWxlKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGaXJlRXZl
bnRzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIApJbmRleDogcGFnZS9hbmltYXRpb24vQW5p
bWF0aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9hbmltYXRpb24vQW5pbWF0
aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgcGFnZS9hbmltYXRpb24vQW5p
bWF0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMyw3ICsyMjMsNyBAQCB2
b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbmNlbEFuaW1hdGlvCiAgICAgfQogfQogCi1SZW5k
ZXJTdHlsZSogQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpCitQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVBbmltYXRpb25zKFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKIHsgICAgCiAgICAgLy8gRG9uJ3QgZG8g
YW55dGhpbmcgaWYgd2UncmUgaW4gdGhlIGNhY2hlCiAgICAgaWYgKCFyZW5kZXJlci0+ZG9jdW1l
bnQoKSB8fCByZW5kZXJlci0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkKQEAgLTIzNCw4ICsy
MzQsNiBAQCBSZW5kZXJTdHlsZSogQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlCiAgICAgaWYg
KCghb2xkU3R5bGUgfHwgKCFvbGRTdHlsZS0+YW5pbWF0aW9ucygpICYmICFvbGRTdHlsZS0+dHJh
bnNpdGlvbnMoKSkpICYmICghbmV3U3R5bGUtPmFuaW1hdGlvbnMoKSAmJiAhbmV3U3R5bGUtPnRy
YW5zaXRpb25zKCkpKQogICAgICAgICByZXR1cm4gbmV3U3R5bGU7CiAKLSAgICBSZW5kZXJTdHls
ZSogYmxlbmRlZFN0eWxlID0gbmV3U3R5bGU7Ci0gICAgCiAgICAgLy8gRmV0Y2ggb3VyIGN1cnJl
bnQgc2V0IG9mIGltcGxpY2l0IGFuaW1hdGlvbnMgZnJvbSBhIGhhc2h0YWJsZS4gIFdlIHRoZW4g
Y29tcGFyZSB0aGVtCiAgICAgLy8gYWdhaW5zdCB0aGUgYW5pbWF0aW9ucyBpbiB0aGUgc3R5bGUg
YW5kIG1ha2Ugc3VyZSB3ZSdyZSBpbiBzeW5jLiAgSWYgZGVzdGluYXRpb24gdmFsdWVzCiAgICAg
Ly8gaGF2ZSBjaGFuZ2VkLCB3ZSByZXNldCB0aGUgYW5pbWF0aW9uLiAgV2UgdGhlbiBkbyBhIGJs
ZW5kIHRvIGdldCBuZXcgdmFsdWVzIGFuZCB3ZSByZXR1cm4KQEAgLTI0Myw3ICsyNDEsNyBAQCBS
ZW5kZXJTdHlsZSogQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlCiAgICAgQVNTRVJUKHJlbmRl
cmVyLT5lbGVtZW50KCkpOyAvLyBGSVhNRTogV2UgZG8gbm90IGFuaW1hdGUgZ2VuZXJhdGVkIGNv
bnRlbnQgeWV0LgogCiAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiByZW5kZXJlckFuaW1hdGlvbnMg
PSBtX2RhdGEtPmFjY2Vzc0NvbXBvc2l0ZUFuaW1hdGlvbihyZW5kZXJlcik7Ci0gICAgYmxlbmRl
ZFN0eWxlID0gcmVuZGVyZXJBbmltYXRpb25zLT5hbmltYXRlKHJlbmRlcmVyLCBvbGRTdHlsZSwg
bmV3U3R5bGUpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gYmxlbmRlZFN0eWxlID0gcmVuZGVy
ZXJBbmltYXRpb25zLT5hbmltYXRlKHJlbmRlcmVyLCBvbGRTdHlsZSwgbmV3U3R5bGUpOwogCiAg
ICAgbV9kYXRhLT51cGRhdGVBbmltYXRpb25UaW1lcigpOwogCkBAIC0yNTQsNyArMjUyLDcgQEAg
UmVuZGVyU3R5bGUqIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZQogICAgICAgICBpZiAoYmxl
bmRlZFN0eWxlLT5oYXNBdXRvWkluZGV4KCkgJiYgKGJsZW5kZWRTdHlsZS0+b3BhY2l0eSgpIDwg
MS4wZiB8fCBibGVuZGVkU3R5bGUtPmhhc1RyYW5zZm9ybSgpKSkKICAgICAgICAgICAgIGJsZW5k
ZWRTdHlsZS0+c2V0WkluZGV4KDApOwogICAgIH0KLSAgICByZXR1cm4gYmxlbmRlZFN0eWxlOwor
ICAgIHJldHVybiBibGVuZGVkU3R5bGUucmVsZWFzZSgpOwogfQogCiB2b2lkIEFuaW1hdGlvbkNv
bnRyb2xsZXI6OnNldEFuaW1hdGlvblN0YXJ0VGltZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBk
b3VibGUgdCkKSW5kZXg6IHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9u
IDM3NTg2KQorKysgcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaWZuZGVmIEFuaW1hdGlvbkNvbnRyb2xsZXJfaAog
I2RlZmluZSBBbmltYXRpb25Db250cm9sbGVyX2gKIAorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU7CkBAIC00Myw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB+QW5pbWF0aW9uQ29udHJvbGxlcigp
OwogCiAgICAgdm9pZCBjYW5jZWxBbmltYXRpb25zKFJlbmRlck9iamVjdCopOwotICAgIFJlbmRl
clN0eWxlKiB1cGRhdGVBbmltYXRpb25zKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBuZXdT
dHlsZSk7CisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gdXBkYXRlQW5pbWF0aW9ucyhSZW5k
ZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpOwogCiAgICAgdm9pZCBzZXRBbmltYXRp
b25TdGFydFRpbWUoUmVuZGVyT2JqZWN0KiwgZG91YmxlIHQpOwogICAgIHZvaWQgc2V0VHJhbnNp
dGlvblN0YXJ0VGltZShSZW5kZXJPYmplY3QqLCBpbnQgcHJvcGVydHksIGRvdWJsZSB0KTsKSW5k
ZXg6IHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMzc1ODYpCisr
KyBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICB+Q29tcG9zaXRlQW5pbWF0aW9uUHJp
dmF0ZSgpOwogCi0gICAgUmVuZGVyU3R5bGUqIGFuaW1hdGUoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKKyAg
ICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBhbmltYXRlKFJlbmRlck9iamVjdCosIFJlbmRlclN0
eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CiAKICAgICB2b2lk
IHNldEFuaW1hdGluZyhib29sKTsKICAgICBib29sIGlzQW5pbWF0aW5nKCkgY29uc3Q7CkBAIC03
OSw4ICs3OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJs
ZShib29sKTsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQgdXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRh
cmdldFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJPYmpl
Y3QqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0
U3R5bGUpOworICAgIHZvaWQgdXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0KiwgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKKyAgICB2b2lk
IHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogY3Vy
cmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOwogCiBwcml2YXRlOgogICAgIHR5
cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxJbXBsaWNpdEFuaW1hdGlvbj4gPiBDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOwpAQCAtMTAwLDcgKzEwMCw3IEBAIENvbXBvc2l0ZUFuaW1hdGlvblBy
aXZhdGU6On5Db21wb3NpdGVBbmkKICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jbGVhcigpOwog
fQogICAgIAotdm9pZCBDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVUcmFuc2l0aW9u
cyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvblByaXZh
dGU6OnVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxl
KiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKIHsKICAgICAvLyBJZiBj
dXJyZW50U3R5bGUgaXMgbnVsbCwgd2UgZG9uJ3QgZG8gdHJhbnNpdGlvbnMKICAgICBpZiAoIWN1
cnJlbnRTdHlsZSB8fCAhdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCkpCkBAIC0xMzMsNyArMTMz
LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVUcgogICAgICAgICAg
ICAgLy8gYW5kIHdlIGhhdmUgdG8gdXNlIHRoZSB1bmFuaW1hdGVkU3R5bGUgZnJvbSB0aGUgYW5p
bWF0aW9uLiBXZSBkbyB0aGUgdGVzdAogICAgICAgICAgICAgLy8gYWdhaW5zdCB0aGUgdW5hbmlt
YXRlZCBzdHlsZSBoZXJlLCBidXQgd2UgIm92ZXJyaWRlIiB0aGUgdHJhbnNpdGlvbiBsYXRlci4K
ICAgICAgICAgICAgIGNvbnN0IEtleWZyYW1lQW5pbWF0aW9uKiBrZXlmcmFtZUFuaW0gPSBnZXRB
bmltYXRpb25Gb3JQcm9wZXJ0eShwcm9wKTsKLSAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxl
KiBmcm9tU3R5bGUgPSBrZXlmcmFtZUFuaW0gPyBrZXlmcmFtZUFuaW0tPnVuYW5pbWF0ZWRTdHls
ZSgpIDogY3VycmVudFN0eWxlOworICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSA9
IGtleWZyYW1lQW5pbSA/IGtleWZyYW1lQW5pbS0+dW5hbmltYXRlZFN0eWxlKCkgOiBjdXJyZW50
U3R5bGU7CiAKICAgICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhIGN1cnJlbnQgdHJhbnNp
dGlvbiBmb3IgdGhpcyBwcm9wCiAgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogaW1wbEFu
aW0gPSBtX3RyYW5zaXRpb25zLmdldChwcm9wKS5nZXQoKTsKQEAgLTE2OCw3ICsxNjgsNyBAQCB2
b2lkIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OnVwZGF0ZVRyCiAgICAgfQogfQogCi12b2lk
IENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5k
ZXJTdHlsZSogdGFyZ2V0U3R5bGUpCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OnVw
ZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHls
ZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCiB7CiAgICAgLy8gTm90
aGluZyB0byBkbyBpZiB3ZSBkb24ndCBoYXZlIGFueSBhbmltYXRpb25zLCBhbmQgZGlkbid0IGhh
dmUgYW55IGJlZm9yZQogICAgIGlmIChtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkgJiYg
IXRhcmdldFN0eWxlLT5oYXNBbmltYXRpb25zKCkpCkBAIC0yMjYsOSArMjI2LDkgQEAgdm9pZCBD
b21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjp1cGRhdGVLZQogICAgICAgICBtX2tleWZyYW1lQW5p
bWF0aW9ucy5yZW1vdmUoYW5pbXNUb0JlUmVtb3ZlZFtqXSk7CiB9CiAKLVJlbmRlclN0eWxlKiBD
b21wb3NpdGVBbmltYXRpb25Qcml2YXRlOjphbmltYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIs
IGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHls
ZSkKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENvbXBvc2l0ZUFuaW1hdGlvblByaXZhdGU6OmFu
aW1hdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwg
UmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQogewotICAgIFJlbmRlclN0eWxlKiByZXN1bHRTdHls
ZSA9IDA7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZXN1bHRTdHlsZTsKIAogICAgIC8vIFVw
ZGF0ZSBhbmltYXRpb25zIGZpcnN0IHNvIHdlIGNhbiBzZWUgaWYgYW55IHRyYW5zaXRpb25zIGFy
ZSBvdmVycmlkZGVuCiAgICAgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKHJlbmRlcmVyLCBjdXJy
ZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKQEAgLTI2Myw3ICsyNjMsNyBAQCBSZW5kZXJTdHlsZSog
Q29tcG9zaXRlQW5pbWF0aW9uUHJpdmF0ZTo6CiAKICAgICBjbGVhbnVwRmluaXNoZWRBbmltYXRp
b25zKHJlbmRlcmVyKTsKIAotICAgIHJldHVybiByZXN1bHRTdHlsZSA/IHJlc3VsdFN0eWxlIDog
dGFyZ2V0U3R5bGU7CisgICAgcmV0dXJuIHJlc3VsdFN0eWxlID8gcmVzdWx0U3R5bGUucmVsZWFz
ZSgpIDogdGFyZ2V0U3R5bGU7CiB9CiAKIC8vICJhbmltYXRpbmciIG1lYW5zIHRoYXQgc29tZXRo
aW5nIGlzIHJ1bm5pbmcgdGhhdCByZXF1aXJlcyB0aGUgdGltZXIgdG8ga2VlcCBmaXJpbmcKQEAg
LTUyMSw3ICs1MjEsNyBAQCBDb21wb3NpdGVBbmltYXRpb246On5Db21wb3NpdGVBbmltYXRpb24o
CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotUmVuZGVyU3R5bGUqIENvbXBvc2l0ZUFuaW1hdGlv
bjo6YW5pbWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3Vy
cmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCitQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQogewog
ICAgIHJldHVybiBtX2RhdGEtPmFuaW1hdGUocmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0
U3R5bGUpOwogfQpJbmRleDogcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmgJKHJldmlzaW9u
IDM3NTg2KQorKysgcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIENvbXBvc2l0ZUFuaW1hdGlvbihB
bmltYXRpb25Db250cm9sbGVyKiBhbmltYXRpb25Db250cm9sbGVyKTsKICAgICB+Q29tcG9zaXRl
QW5pbWF0aW9uKCk7CiAKLSAgICBSZW5kZXJTdHlsZSogYW5pbWF0ZShSZW5kZXJPYmplY3QqLCBj
b25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUp
OworICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGUoUmVuZGVyT2JqZWN0KiwgUmVu
ZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKICAgICBi
b29sIGlzQW5pbWF0aW5nKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFdhaXRpbmdGb3JTdHlsZUF2
YWlsYWJsZShib29sKTsKSW5kZXg6IHBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAJKHJl
dmlzaW9uIDM3NTg2KQorKysgcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCwyOSArMzQsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1JbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uKiB0
cmFuc2l0aW9uLCBpbnQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlck9iamVjdCogcmVuZGVyZXIs
IENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5
bGUpCitJbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24oY29uc3QgQW5pbWF0aW9u
KiB0cmFuc2l0aW9uLCBpbnQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0sIFJlbmRlclN0eWxlKiBmcm9tU3R5bGUp
CiAgICAgOiBBbmltYXRpb25CYXNlKHRyYW5zaXRpb24sIHJlbmRlcmVyLCBjb21wQW5pbSkKICAg
ICAsIG1fdHJhbnNpdGlvblByb3BlcnR5KHRyYW5zaXRpb24tPnByb3BlcnR5KCkpCiAgICAgLCBt
X2FuaW1hdGluZ1Byb3BlcnR5KGFuaW1hdGluZ1Byb3BlcnR5KQogICAgICwgbV9vdmVycmlkZGVu
KGZhbHNlKQotICAgICwgbV9mcm9tU3R5bGUoMCkKLSAgICAsIG1fdG9TdHlsZSgwKQorICAgICwg
bV9mcm9tU3R5bGUoZnJvbVN0eWxlKQogewogICAgIEFTU0VSVChhbmltYXRpbmdQcm9wZXJ0eSAh
PSBjQW5pbWF0ZUFsbCk7Ci0gICAgaWYgKGZyb21TdHlsZSkgewotICAgICAgICBtX2Zyb21TdHls
ZSA9IGZyb21TdHlsZTsKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KG1fZnJvbVN0
eWxlKS0+cmVmKCk7Ci0gICAgfQogfQogCiBJbXBsaWNpdEFuaW1hdGlvbjo6fkltcGxpY2l0QW5p
bWF0aW9uKCkKIHsKLSAgICAvLyBHZXQgcmlkIG9mIHN0eWxlIHJlZnMKLSAgICBpZiAobV9mcm9t
U3R5bGUpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX2Zyb21TdHlsZSktPmRl
cmVmKHJlbmRlcmVyKCktPnJlbmRlckFyZW5hKCkpOwotICAgIGlmIChtX3RvU3R5bGUpCi0gICAg
ICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihtX3RvU3R5bGUpLT5kZXJlZihyZW5kZXJlcigp
LT5yZW5kZXJBcmVuYSgpKTsKLQogICAgIC8vIERvIHRoZSBjbGVhbnVwIGhlcmUgaW5zdGVhZCBv
ZiBpbiB0aGUgYmFzZSBjbGFzcyBzbyB0aGUgc3BlY2lhbGl6ZWQgbWV0aG9kcyBnZXQgY2FsbGVk
CiAgICAgaWYgKCFwb3N0QWN0aXZlKCkpCiAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmlt
YXRpb25TdGF0ZUlucHV0RW5kQW5pbWF0aW9uLCAtMSk7CkBAIC02Nyw4ICs1Niw4IEBAIGJvb2wg
SW1wbGljaXRBbmltYXRpb246OnNob3VsZFNlbmRFdmVudEYKICAgICByZXR1cm4gbV9vYmplY3Qt
PmRvY3VtZW50KCktPmhhc0xpc3RlbmVyVHlwZShpbkxpc3RlbmVyVHlwZSk7CiB9CiAKLXZvaWQg
SW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBhbmltYXRpb24s
IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJn
ZXRTdHlsZSwgUmVuZGVyU3R5bGUqJiBhbmltYXRlZFN0eWxlKQordm9pZCBJbXBsaWNpdEFuaW1h
dGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qIGFuaW1hdGlvbiwgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVyU3R5
bGU+JiBhbmltYXRlZFN0eWxlKQogewogICAgIGlmIChwYXVzZWQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtODUsOSArNzQsOSBAQCB2b2lkIEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKENvbXBv
c2l0CiAgICAgLy8gUnVuIGEgY3ljbGUgb2YgYW5pbWF0aW9uLgogICAgIC8vIFdlIGtub3cgd2Ug
d2lsbCBuZWVkIGEgbmV3IHJlbmRlciBzdHlsZSwgc28gbWFrZSBvbmUgaWYgbmVlZGVkCiAgICAg
aWYgKCFhbmltYXRlZFN0eWxlKQotICAgICAgICBhbmltYXRlZFN0eWxlID0gbmV3IChyZW5kZXJl
ci0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKnRhcmdldFN0eWxlKTsKKyAgICAgICAgYW5p
bWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZSh0YXJnZXRTdHlsZSk7CiAKLSAgICBpZiAo
YmxlbmRQcm9wZXJ0aWVzKHRoaXMsIG1fYW5pbWF0aW5nUHJvcGVydHksIGFuaW1hdGVkU3R5bGUs
IG1fZnJvbVN0eWxlLCBtX3RvU3R5bGUsIHByb2dyZXNzKDEsIDAsIDApKSkKKyAgICBpZiAoYmxl
bmRQcm9wZXJ0aWVzKHRoaXMsIG1fYW5pbWF0aW5nUHJvcGVydHksIGFuaW1hdGVkU3R5bGUuZ2V0
KCksIG1fZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHByb2dyZXNzKDEsIDAsIDAp
KSkKICAgICAgICAgc2V0QW5pbWF0aW5nKCk7CiB9CiAKQEAgLTEzNSwxNyArMTI0LDEzIEBAIGJv
b2wgSW1wbGljaXRBbmltYXRpb246OnNlbmRUcmFuc2l0aW9uRXYKICAgICByZXR1cm4gZmFsc2U7
IC8vIERpZG4ndCBkaXNwYXRjaCBhbiBldmVudAogfQogCi12b2lkIEltcGxpY2l0QW5pbWF0aW9u
OjpyZXNldChjb25zdCBSZW5kZXJTdHlsZSogdG8pCit2b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpy
ZXNldChSZW5kZXJTdHlsZSogdG8pCiB7CiAgICAgQVNTRVJUKHRvKTsKICAgICBBU1NFUlQobV9m
cm9tU3R5bGUpOwogICAgIAotICAgIGlmIChtX3RvU3R5bGUpCi0gICAgICAgIGNvbnN0X2Nhc3Q8
UmVuZGVyU3R5bGUqPihtX3RvU3R5bGUpLT5kZXJlZihyZW5kZXJlcigpLT5yZW5kZXJBcmVuYSgp
KTsKIAotICAgIG1fdG9TdHlsZSA9IHRvOyAgICAgICAvLyBJdCBpcyByZWFkLW9ubHksIG90aGVy
IHRoYW4gdGhlIHJlZgotICAgIGlmIChtX3RvU3R5bGUpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVu
ZGVyU3R5bGUqPihtX3RvU3R5bGUpLT5yZWYoKTsKKyAgICBtX3RvU3R5bGUgPSB0bzsKIAogICAg
IC8vIFJlc3RhcnQgdGhlIHRyYW5zaXRpb24KICAgICBpZiAobV9mcm9tU3R5bGUgJiYgbV90b1N0
eWxlKQpAQCAtMTcxLDEyICsxNTYsMTIgQEAgYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6YWZmZWN0
c1Byb3BlcnR5KAogCiBib29sIEltcGxpY2l0QW5pbWF0aW9uOjppc1RhcmdldFByb3BlcnR5RXF1
YWwoaW50IHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKIHsKLSAgICByZXR1
cm4gcHJvcGVydGllc0VxdWFsKHByb3AsIG1fdG9TdHlsZSwgdGFyZ2V0U3R5bGUpOworICAgIHJl
dHVybiBwcm9wZXJ0aWVzRXF1YWwocHJvcCwgbV90b1N0eWxlLmdldCgpLCB0YXJnZXRTdHlsZSk7
CiB9CiAKIHZvaWQgSW1wbGljaXRBbmltYXRpb246OmJsZW5kUHJvcGVydHlWYWx1ZUluU3R5bGUo
aW50IHByb3AsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUpCiB7Ci0gICAgYmxlbmRQcm9wZXJ0
aWVzKHRoaXMsIHByb3AsIGN1cnJlbnRTdHlsZSwgbV9mcm9tU3R5bGUsIG1fdG9TdHlsZSwgcHJv
Z3Jlc3MoMSwgMCwgMCkpOworICAgIGJsZW5kUHJvcGVydGllcyh0aGlzLCBwcm9wLCBjdXJyZW50
U3R5bGUsIG1fZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHByb2dyZXNzKDEsIDAs
IDApKTsKIH0KIAogdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6dmFsaWRhdGVUcmFuc2Zvcm1GdW5j
dGlvbkxpc3QoKQpJbmRleDogcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCShyZXZpc2lvbiAz
NzU4NikKKysrIHBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gZm9yIGEgc2luZ2xl
IFJlbmRlck9iamVjdC4KIGNsYXNzIEltcGxpY2l0QW5pbWF0aW9uIDogcHVibGljIEFuaW1hdGlv
bkJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltcGxpY2l0QW5pbWF0aW9u
PiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGludCBhbmltYXRpbmdQcm9wZXJ0
eSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVB
bmltYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUpCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW1wbGljaXRBbmltYXRpb24+IGNyZWF0ZShjb25zdCBBbmltYXRpb24qIGFuaW1hdGlv
biwgaW50IGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBDb21wb3Np
dGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSkK
ICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1wbGljaXRBbmltYXRpb24oYW5p
bWF0aW9uLCBhbmltYXRpbmdQcm9wZXJ0eSwgcmVuZGVyZXIsIGNvbXBvc2l0ZUFuaW1hdGlvbiwg
ZnJvbVN0eWxlKSk7CiAgICAgfTsKQEAgLTQ4LDggKzQ4LDggQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIG9uQW5pbWF0aW9uRW5kKGRvdWJsZSBlbGFwc2VkVGltZSk7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25z
dCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5
bGUsIFJlbmRlclN0eWxlKiYgYW5pbWF0ZWRTdHlsZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJlc2V0
KGNvbnN0IFJlbmRlclN0eWxlKiB0byk7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoQ29tcG9z
aXRlQW5pbWF0aW9uKiwgUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwg
UmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZWZQdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0
eWxlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoUmVuZGVyU3R5bGUqIHRvKTsKIAogICAgIHZv
aWQgc2V0T3ZlcnJpZGRlbihib29sKTsKICAgICB2aXJ0dWFsIGJvb2wgb3ZlcnJpZGRlbigpIGNv
bnN0IHsgcmV0dXJuIG1fb3ZlcnJpZGRlbjsgfQpAQCAtNzEsNyArNzEsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlzdCgpOwogCiBwcml2YXRlOgot
ICAgIEltcGxpY2l0QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiosIGludCBhbmltYXRpbmdQcm9w
ZXJ0eSwgUmVuZGVyT2JqZWN0KiwgQ29tcG9zaXRlQW5pbWF0aW9uKiwgY29uc3QgUmVuZGVyU3R5
bGUqIGZyb21TdHlsZSk7ICAgIAorICAgIEltcGxpY2l0QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlv
biosIGludCBhbmltYXRpbmdQcm9wZXJ0eSwgUmVuZGVyT2JqZWN0KiwgQ29tcG9zaXRlQW5pbWF0
aW9uKiwgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSk7ICAgIAogICAgIHZpcnR1YWwgfkltcGxpY2l0
QW5pbWF0aW9uKCk7CiAKICAgICBpbnQgbV90cmFuc2l0aW9uUHJvcGVydHk7ICAgLy8gVHJhbnNp
dGlvbiBwcm9wZXJ0eSBhcyBzcGVjaWZpZWQgaW4gdGhlIFJlbmRlclN0eWxlLiBNYXkgYmUgY0Fu
aW1hdGVBbGwKQEAgLTc5LDggKzc5LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fb3ZlcnJpZGRl
bjsgICAgICAgICAgLy8gdHJ1ZSB3aGVuIHRoZXJlIGlzIGEga2V5ZnJhbWUgYW5pbWF0aW9uIHRo
YXQgb3ZlcnJpZGVzIHRoZSB0cmFuc2l0aW9uaW5nIHByb3BlcnR5CiAKICAgICAvLyBUaGUgdHdv
IHN0eWxlcyB0aGF0IHdlIGFyZSBibGVuZGluZy4KLSAgICBjb25zdCBSZW5kZXJTdHlsZSogbV9m
cm9tU3R5bGU7Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIG1fdG9TdHlsZTsKKyAgICBSZWZQdHI8
UmVuZGVyU3R5bGU+IG1fZnJvbVN0eWxlOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV90b1N0
eWxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogcGFnZS9hbmltYXRpb24v
S2V5ZnJhbWVBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvYW5pbWF0aW9uL0tleWZy
YW1lQW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyBwYWdlL2FuaW1hdGlvbi9LZXlm
cmFtZUFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDE3ICszOCwxMiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUtleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFtZUFuaW1hdGlv
bihjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgaW50
IGluZGV4LCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltLCBjb25zdCBSZW5kZXJTdHlsZSog
dW5hbmltYXRlZFN0eWxlKQorS2V5ZnJhbWVBbmltYXRpb246OktleWZyYW1lQW5pbWF0aW9uKGNv
bnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBpbnQgaW5k
ZXgsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0sIFJlbmRlclN0eWxlKiB1bmFuaW1hdGVk
U3R5bGUpCiAgICAgOiBBbmltYXRpb25CYXNlKGFuaW1hdGlvbiwgcmVuZGVyZXIsIGNvbXBBbmlt
KQogICAgICwgbV9rZXlmcmFtZXMocmVuZGVyZXIsIGFuaW1hdGlvbi0+bmFtZSgpKQogICAgICwg
bV9pbmRleChpbmRleCkKLSAgICAsIG1fdW5hbmltYXRlZFN0eWxlKDApCisgICAgLCBtX3VuYW5p
bWF0ZWRTdHlsZSh1bmFuaW1hdGVkU3R5bGUpCiB7Ci0gICAgaWYgKHVuYW5pbWF0ZWRTdHlsZSkg
ewotICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4odW5hbmltYXRlZFN0eWxlKS0+cmVm
KCk7Ci0gICAgICAgIG1fdW5hbmltYXRlZFN0eWxlID0gdW5hbmltYXRlZFN0eWxlOwotICAgIH0K
LSAgICAKICAgICAvLyBHZXQgdGhlIGtleWZyYW1lIFJlbmRlclN0eWxlcwogICAgIGlmIChtX29i
amVjdCAmJiBtX29iamVjdC0+ZWxlbWVudCgpICYmIG1fb2JqZWN0LT5lbGVtZW50KCktPmlzRWxl
bWVudE5vZGUoKSkKICAgICAgICAgbV9vYmplY3QtPmRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3Io
KS0+a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fb2Jq
ZWN0LT5lbGVtZW50KCkpLCB1bmFuaW1hdGVkU3R5bGUsIG1fa2V5ZnJhbWVzKTsKQEAgLTYyLDEz
ICs1NywxMCBAQCBLZXlmcmFtZUFuaW1hdGlvbjo6fktleWZyYW1lQW5pbWF0aW9uKCkKICAgICAv
LyBEbyB0aGUgY2xlYW51cCBoZXJlIGluc3RlYWQgb2YgaW4gdGhlIGJhc2UgY2xhc3Mgc28gdGhl
IHNwZWNpYWxpemVkIG1ldGhvZHMgZ2V0IGNhbGxlZAogICAgIGlmICghcG9zdEFjdGl2ZSgpKQog
ICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dEVuZEFuaW1hdGlv
biwgLTEpOwotCi0gICAgaWYgKG1fdW5hbmltYXRlZFN0eWxlKQotICAgICAgICBjb25zdF9jYXN0
PFJlbmRlclN0eWxlKj4obV91bmFuaW1hdGVkU3R5bGUpLT5kZXJlZihyZW5kZXJlcigpLT5yZW5k
ZXJBcmVuYSgpKTsKIH0KIAogdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3Np
dGVBbmltYXRpb24qIGFuaW1hdGlvbiwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVu
ZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlbmRlclN0eWxlKiYgYW5pbWF0
ZWRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRl
clN0eWxlKiB0YXJnZXRTdHlsZSwgUmVmUHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkK
IHsKICAgICAvLyBJZiB3ZSBoYXZlIG5vdCB5ZXQgc3RhcnRlZCwgd2Ugd2lsbCBub3QgaGF2ZSBh
IHZhbGlkIHN0YXJ0IHRpbWUsIHNvIGp1c3Qgc3RhcnQgdGhlIGFuaW1hdGlvbiBpZiBuZWVkZWQu
CiAgICAgaWYgKGlzTmV3KCkgJiYgbV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1QbGF5
U3RhdGVQbGF5aW5nKQpAQCAtMTAyLDIzICs5NCwyMyBAQCB2b2lkIEtleWZyYW1lQW5pbWF0aW9u
OjphbmltYXRlKENvbXBvc2l0CiAgICAgaWYgKG1fYW5pbWF0aW9uLT5kaXJlY3Rpb24oKSAmJiAo
aSAmIDEpKQogICAgICAgICB0ID0gMSAtIHQ7CiAKLSAgICBSZW5kZXJTdHlsZSogZnJvbVN0eWxl
ID0gMDsKLSAgICBSZW5kZXJTdHlsZSogdG9TdHlsZSA9IDA7CisgICAgY29uc3QgUmVuZGVyU3R5
bGUqIGZyb21TdHlsZSA9IDA7CisgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5bGUgPSAwOwog
ICAgIGRvdWJsZSBzY2FsZSA9IDE7CiAgICAgZG91YmxlIG9mZnNldCA9IDA7CiAgICAgVmVjdG9y
PEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBlbmRLZXlmcmFtZXMgPSBtX2tleWZyYW1l
cy5lbmRLZXlmcmFtZXMoKTsKICAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lcy5iZWdpbktleWZyYW1lcygpOyBpdCAhPSBlbmRLZXlm
cmFtZXM7ICsraXQpIHsKLSAgICAgICAgaWYgKHQgPCBpdC0+a2V5KSB7CisgICAgICAgIGlmICh0
IDwgaXQtPmtleSgpKSB7CiAgICAgICAgICAgICAvLyBUaGUgZmlyc3Qga2V5IHNob3VsZCBhbHdh
eXMgYmUgMCwgc28gd2Ugc2hvdWxkIG5ldmVyIHN1Y2NlZWQgb24gdGhlIGZpcnN0IGtleQogICAg
ICAgICAgICAgaWYgKCFmcm9tU3R5bGUpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBzY2FsZSA9IDEuMCAvIChpdC0+a2V5IC0gb2Zmc2V0KTsKLSAgICAgICAgICAgIHRvU3R5
bGUgPSBpdC0+c3R5bGU7CisgICAgICAgICAgICBzY2FsZSA9IDEuMCAvIChpdC0+a2V5KCkgLSBv
ZmZzZXQpOworICAgICAgICAgICAgdG9TdHlsZSA9IGl0LT5zdHlsZSgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBvZmZzZXQgPSBpdC0+a2V5OwotICAgICAgICBm
cm9tU3R5bGUgPSBpdC0+c3R5bGU7CisgICAgICAgIG9mZnNldCA9IGl0LT5rZXkoKTsKKyAgICAg
ICAgZnJvbVN0eWxlID0gaXQtPnN0eWxlKCk7CiAgICAgfQogCiAgICAgLy8gSWYgZWl0aGVyIHN0
eWxlIGlzIDAgd2UgaGF2ZSBhbiBpbnZhbGlkIGNhc2UsIGp1c3Qgc3RvcCB0aGUgYW5pbWF0aW9u
LgpAQCAtMTMwLDcgKzEyMiw3IEBAIHZvaWQgS2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUoQ29t
cG9zaXQKICAgICAvLyBSdW4gYSBjeWNsZSBvZiBhbmltYXRpb24uCiAgICAgLy8gV2Uga25vdyB3
ZSB3aWxsIG5lZWQgYSBuZXcgcmVuZGVyIHN0eWxlLCBzbyBtYWtlIG9uZSBpZiBuZWVkZWQuCiAg
ICAgaWYgKCFhbmltYXRlZFN0eWxlKQotICAgICAgICBhbmltYXRlZFN0eWxlID0gbmV3IChyZW5k
ZXJlci0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKnRhcmdldFN0eWxlKTsKKyAgICAgICAg
YW5pbWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZSh0YXJnZXRTdHlsZSk7CiAKICAgICBj
b25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24gPSAwOwogICAgIGlmIChmcm9tU3R5
bGUtPmFuaW1hdGlvbnMoKSAmJiBmcm9tU3R5bGUtPmFuaW1hdGlvbnMoKS0+c2l6ZSgpID4gMCkK
QEAgLTE0MCw3ICsxMzIsNyBAQCB2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBv
c2l0CiAKICAgICBIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGVuZFByb3BlcnRpZXMgPSBt
X2tleWZyYW1lcy5lbmRQcm9wZXJ0aWVzKCk7CiAgICAgZm9yIChIYXNoU2V0PGludD46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXMuYmVnaW5Qcm9wZXJ0aWVzKCk7IGl0ICE9IGVuZFBy
b3BlcnRpZXM7ICsraXQpIHsKLSAgICAgICAgaWYgKGJsZW5kUHJvcGVydGllcyh0aGlzLCAqaXQs
IGFuaW1hdGVkU3R5bGUsIGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZykpCisgICAgICAgIGlmIChi
bGVuZFByb3BlcnRpZXModGhpcywgKml0LCBhbmltYXRlZFN0eWxlLmdldCgpLCBmcm9tU3R5bGUs
IHRvU3R5bGUsIHByb2cpKQogICAgICAgICAgICAgc2V0QW5pbWF0aW5nKCk7CiAgICAgfQogfQpA
QCAtMjY0LDcgKzI1Niw3IEBAIHZvaWQgS2V5ZnJhbWVBbmltYXRpb246OnZhbGlkYXRlVHJhbnNm
b3IKICAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGZpcnN0SXQgPSBl
bmQ7CiAgICAgCiAgICAgZm9yIChWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9rZXlmcmFtZXMuYmVnaW5LZXlmcmFtZXMoKTsgaXQgIT0gZW5kOyArK2l0LCArK2Zp
cnN0SW5kZXgpIHsKLSAgICAgICAgaWYgKGl0LT5zdHlsZS0+dHJhbnNmb3JtKCkub3BlcmF0aW9u
cygpLnNpemUoKSA+IDApIHsKKyAgICAgICAgaWYgKGl0LT5zdHlsZSgpLT50cmFuc2Zvcm0oKS5v
cGVyYXRpb25zKCkuc2l6ZSgpID4gMCkgewogICAgICAgICAgICAgZmlyc3RJdCA9IGl0OwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI3MywxMSArMjY1LDExIEBAIHZvaWQgS2V5
ZnJhbWVBbmltYXRpb246OnZhbGlkYXRlVHJhbnNmb3IKICAgICBpZiAoZmlyc3RJdCA9PSBlbmQp
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9u
cyogZmlyc3RWYWwgPSAmZmlyc3RJdC0+c3R5bGUtPnRyYW5zZm9ybSgpOworICAgIGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbnMqIGZpcnN0VmFsID0gJmZpcnN0SXQtPnN0eWxlKCktPnRyYW5zZm9y
bSgpOwogICAgIAogICAgIC8vIFNlZSBpZiB0aGUga2V5ZnJhbWVzIGFyZSB2YWxpZAogICAgIGZv
ciAoVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZpcnN0SXQrMTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHZh
bCA9ICZpdC0+c3R5bGUtPnRyYW5zZm9ybSgpOworICAgICAgICBjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb25zKiB2YWwgPSAmaXQtPnN0eWxlKCktPnRyYW5zZm9ybSgpOwogICAgICAgICAKICAgICAg
ICAgLy8gQSBudWxsIHRyYW5zZm9ybSBtYXRjaGVzIGFueXRoaW5nCiAgICAgICAgIGlmICh2YWwt
Pm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkpCkluZGV4OiBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFu
aW1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9u
LmgJKHJldmlzaW9uIDM3NTg2KQorKysgcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTIgKzQwLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IC8vIGZvciBhIHNpbmdsZSBSZW5kZXJPYmplY3QuCiBjbGFzcyBLZXlmcmFtZUFuaW1hdGlvbiA6
IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxL
ZXlmcmFtZUFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBpbnQgaW5kZXgsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9z
aXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9u
KiBhbmltYXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGludCBpbmRleCwgQ29tcG9zaXRl
QW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5
bGUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEtleWZyYW1lQW5pbWF0aW9u
KGFuaW1hdGlvbiwgcmVuZGVyZXIsIGluZGV4LCBjb21wb3NpdGVBbmltYXRpb24sIHVuYW5pbWF0
ZWRTdHlsZSkpOwogICAgIH07CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoQ29tcG9z
aXRlQW5pbWF0aW9uKiwgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRT
dHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZW5kZXJTdHlsZSomIGFuaW1h
dGVkU3R5bGUpOworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbios
IFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJl
bmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVmUHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHls
ZSk7CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX2tl
eWZyYW1lcy5hbmltYXRpb25OYW1lKCk7IH0KICAgICBpbnQgaW5kZXgoKSBjb25zdCB7IHJldHVy
biBtX2luZGV4OyB9CkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGhh
c0FuaW1hdGlvbkZvclByb3BlcnR5KGludCBwcm9wZXJ0eSkgY29uc3Q7CiAgICAgCi0gICAgY29u
c3QgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5hbmlt
YXRlZFN0eWxlOyB9CisgICAgUmVuZGVyU3R5bGUqIHVuYW5pbWF0ZWRTdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdW5hbmltYXRlZFN0eWxlLmdldCgpOyB9CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIHZvaWQgb25BbmltYXRpb25TdGFydChkb3VibGUgZWxhcHNlZFRpbWUpOwpAQCAtNzQsNyAr
NzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlz
dCgpOwogCiBwcml2YXRlOgotICAgIEtleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiog
YW5pbWF0aW9uLCBSZW5kZXJPYmplY3QqLCBpbnQgaW5kZXgsIENvbXBvc2l0ZUFuaW1hdGlvbios
IGNvbnN0IFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpOworICAgIEtleWZyYW1lQW5pbWF0
aW9uKGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmplY3QqLCBpbnQgaW5kZXgs
IENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpOwogICAg
IHZpcnR1YWwgfktleWZyYW1lQW5pbWF0aW9uKCk7CiAgICAgCiAgICAgLy8gVGhlIGtleWZyYW1l
cyB0aGF0IHdlIGFyZSBibGVuZGluZy4KQEAgLTg0LDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICBp
bnQgbV9pbmRleDsKIAogICAgIC8vIFRoZSBzdHlsZSBqdXN0IGJlZm9yZSB3ZSBzdGFydGVkIGFu
aW1hdGlvbgotICAgIGNvbnN0IFJlbmRlclN0eWxlKiBtX3VuYW5pbWF0ZWRTdHlsZTsKKyAgICBS
ZWZQdHI8UmVuZGVyU3R5bGU+IG1fdW5hbmltYXRlZFN0eWxlOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Niw3ICszNzYsNyBA
QCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6CiAgICAgICAgICAgICBz
ZWxlY3Rpb25GaWxsQ29sb3IgPSBmb3JlZ3JvdW5kOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KFJlbmRlclN0eWxlKiBwc2V1ZG9TdHlsZSA9IG9iamVjdCgpLT5nZXRQc2V1ZG9TdHlsZShSZW5k
ZXJTdHlsZTo6U0VMRUNUSU9OKSkgeworICAgICAgICBpZiAoUmVuZGVyU3R5bGUqIHBzZXVkb1N0
eWxlID0gb2JqZWN0KCktPmdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTRUxFQ1RJ
T04pKSB7CiAgICAgICAgICAgICBTaGFkb3dEYXRhKiBzaGFkb3cgPSBwYWludEluZm8uZm9yY2VC
bGFja1RleHQgPyAwIDogcHNldWRvU3R5bGUtPnRleHRTaGFkb3coKTsKICAgICAgICAgICAgIGlm
IChzaGFkb3cgIT0gc2VsZWN0aW9uU2hhZG93KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFwYWlu
dFNlbGVjdGVkVGV4dE9ubHkpCkluZGV4OiByZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHJl
dmlzaW9uIDM3NTg2KQorKysgcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTQsMTMgKzU0LDEzIEBAIE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVt
ZW50OjpNZWRpYUNvbnQKICAgICA6IEhUTUxEaXZFbGVtZW50KGRvYykKICAgICAsIG1fbWVkaWFF
bGVtZW50KG1lZGlhRWxlbWVudCkgCiB7Ci0gICAgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSA9IG5l
dyAobWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgp
OworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcm9vdFN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0
ZSgpOwogICAgIHJvb3RTdHlsZS0+aW5oZXJpdEZyb20obWVkaWFFbGVtZW50LT5yZW5kZXJlcigp
LT5zdHlsZSgpKTsKICAgICByb290U3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwogICAgIHJvb3RT
dHlsZS0+c2V0UG9zaXRpb24oUmVsYXRpdmVQb3NpdGlvbik7CiAgICAgUmVuZGVyTWVkaWFDb250
cm9sU2hhZG93Um9vdCogcmVuZGVyZXIgPSBuZXcgKG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKS0+
cmVuZGVyQXJlbmEoKSkgUmVuZGVyTWVkaWFDb250cm9sU2hhZG93Um9vdCh0aGlzKTsKICAgICBy
ZW5kZXJlci0+c2V0UGFyZW50KG1lZGlhRWxlbWVudC0+cmVuZGVyZXIoKSk7Ci0gICAgcmVuZGVy
ZXItPnNldFN0eWxlKHJvb3RTdHlsZSk7CisgICAgcmVuZGVyZXItPnNldFN0eWxlKHJvb3RTdHls
ZS5yZWxlYXNlKCkpOwogICAgIHNldFJlbmRlcmVyKHJlbmRlcmVyKTsKICAgICBzZXRBdHRhY2hl
ZCgpOwogICAgIHNldEluRG9jdW1lbnQodHJ1ZSk7CkBAIC03Myw3ICs3Myw3IEBAIE1lZGlhQ29u
dHJvbElucHV0RWxlbWVudDo6TWVkaWFDb250cm9sSW4KICAgICAsIG1fbWVkaWFFbGVtZW50KG1l
ZGlhRWxlbWVudCkKIHsKICAgICBzZXRJbnB1dFR5cGUodHlwZSk7Ci0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gbV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCktPmdldFBzZXVkb1N0eWxlKHBzZXVk
byk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9tZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkt
PmdldENhY2hlZFBzZXVkb1N0eWxlKHBzZXVkbyk7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IGNyZWF0ZVJlbmRlcmVyKG1fbWVkaWFFbGVtZW50LT5yZW5kZXJlcigpLT5yZW5kZXJBcmVu
YSgpLCBzdHlsZSk7CiAgICAgaWYgKHJlbmRlcmVyKSB7CiAgICAgICAgIHNldFJlbmRlcmVyKHJl
bmRlcmVyKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksMTAgKzE1OSwxMCBAQCB2b2lk
IFJlbmRlckJsb2NrOjpzdHlsZURpZENoYW5nZShSZW5kZXJTCiAgICAgLy8gRklYTUU6IFdlIGNv
dWxkIHNhdmUgdGhpcyBjYWxsIHdoZW4gdGhlIGNoYW5nZSBvbmx5IGFmZmVjdGVkIG5vbi1pbmhl
cml0ZWQgcHJvcGVydGllcwogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYg
KGNoaWxkLT5pc0Fub255bW91c0Jsb2NrKCkpIHsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBu
ZXdTdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAg
ICAgICAgICAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20oc3R5bGUoKSk7CiAgICAgICAgICAgICBu
ZXdTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Ci0gICAgICAgICAgICBjaGlsZC0+c2V0U3R5bGUo
bmV3U3R5bGUpOworICAgICAgICAgICAgY2hpbGQtPnNldFN0eWxlKG5ld1N0eWxlLnJlbGVhc2Uo
KSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQzNjgsOCArNDM2OCw4IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnVwZGF0ZUZpcnN0TGV0dGVyKCkKICAgICAvLyBJZiB0aGUgY2hpbGQgYWxyZWFkeSBo
YXMgc3R5bGUsIHRoZW4gaXQgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLCBzbyB3ZSBqdXN0IHdh
bnQKICAgICAvLyB0byB1cGRhdGUgaXQuCiAgICAgaWYgKGN1cnJDaGlsZC0+c3R5bGUoKS0+c3R5
bGVUeXBlKCkgPT0gUmVuZGVyU3R5bGU6OkZJUlNUX0xFVFRFUikgewotICAgICAgICBSZW5kZXJT
dHlsZSogcHNldWRvID0gZmlyc3RMZXR0ZXJCbG9jay0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5
bGU6OkZJUlNUX0xFVFRFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5maXJzdExpbmVT
dHlsZSgpKTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHBzZXVkbyA9IGZpcnN0TGV0dGVyQmxvY2st
PmdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpGSVJTVF9MRVRURVIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSk7CiAgICAgICAgIGN1
cnJDaGlsZC0+c2V0U3R5bGUocHNldWRvKTsKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGdl
bkNoaWxkID0gY3VyckNoaWxkLT5maXJzdENoaWxkKCk7IGdlbkNoaWxkOyBnZW5DaGlsZCA9IGdl
bkNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICBpZiAoZ2VuQ2hpbGQtPmlzVGV4
dCgpKSAKQEAgLTQzODcsOCArNDM4Nyw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUZpcnN0
TGV0dGVyKCkKICAgICAgICAgUmVuZGVyVGV4dCogdGV4dE9iaiA9IHN0YXRpY19jYXN0PFJlbmRl
clRleHQqPihjdXJyQ2hpbGQpOwogICAgICAgICAKICAgICAgICAgLy8gQ3JlYXRlIG91ciBwc2V1
ZG8gc3R5bGUgbm93IHRoYXQgd2UgaGF2ZSBvdXIgZmlyc3RMZXR0ZXJDb250YWluZXIgZGV0ZXJt
aW5lZC4KLSAgICAgICAgUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gZmlyc3RMZXR0ZXJCbG9j
ay0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkZJUlNUX0xFVFRFUiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zmlyc3RMZXR0ZXJDb250YWluZXItPmZpcnN0TGluZVN0eWxlKCkpOworICAgICAgICBSZW5kZXJT
dHlsZSogcHNldWRvU3R5bGUgPSBmaXJzdExldHRlckJsb2NrLT5nZXRDYWNoZWRQc2V1ZG9TdHls
ZShSZW5kZXJTdHlsZTo6RklSU1RfTEVUVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdExldHRl
ckNvbnRhaW5lci0+Zmlyc3RMaW5lU3R5bGUoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBGb3Jj
ZSBpbmxpbmUgZGlzcGxheSAoZXhjZXB0IGZvciBmbG9hdGluZyBmaXJzdC1sZXR0ZXJzKQogICAg
ICAgICBwc2V1ZG9TdHlsZS0+c2V0RGlzcGxheSggcHNldWRvU3R5bGUtPmlzRmxvYXRpbmcoKSA/
IEJMT0NLIDogSU5MSU5FKTsKQEAgLTQ0MjksOSArNDQyOSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OnVwZGF0ZUZpcnN0TGV0dGVyKCkKICAgICAgICAgICAgIC8vIGNvbnN0cnVjdCB0ZXh0IGZyYWdt
ZW50IGZvciB0aGUgZmlyc3QgbGV0dGVyCiAgICAgICAgICAgICBSZW5kZXJUZXh0RnJhZ21lbnQq
IGxldHRlciA9IAogICAgICAgICAgICAgICAgIG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyVGV4
dEZyYWdtZW50KHJlbWFpbmluZ1RleHQtPm5vZGUoKSwgb2xkVGV4dC5nZXQoKSwgMCwgbGVuZ3Ro
KTsKLSAgICAgICAgICAgIFJlbmRlclN0eWxlKiBuZXdTdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEo
KSkgUmVuZGVyU3R5bGUoKTsKKyAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5
bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBuZXdTdHlsZS0+aW5oZXJp
dEZyb20ocHNldWRvU3R5bGUpOwotICAgICAgICAgICAgbGV0dGVyLT5zZXRTdHlsZShuZXdTdHls
ZSk7CisgICAgICAgICAgICBsZXR0ZXItPnNldFN0eWxlKG5ld1N0eWxlLnJlbGVhc2UoKSk7CiAg
ICAgICAgICAgICBmaXJzdExldHRlci0+YWRkQ2hpbGQobGV0dGVyKTsKIAogICAgICAgICAgICAg
dGV4dE9iai0+ZGVzdHJveSgpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDM3
NTg2KQorKysgcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMywxMCArMTEzLDEwIEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjphZGRDaGlsZChSZW5kZXJP
YmoKICAgICAgICAgICAgIHRhYmxlID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGUqPihhZnRlckNo
aWxkKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB0YWJsZSA9IG5ldyAocmVuZGVyQXJl
bmEoKSkgUmVuZGVyVGFibGUoZG9jdW1lbnQoKSAvKiBpcyBhbm9ueW1vdXMgKi8pOwotICAgICAg
ICAgICAgUmVuZGVyU3R5bGUgKm5ld1N0eWxlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJT
dHlsZTsKKyAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJT
dHlsZTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20oc3R5bGUo
KSk7CiAgICAgICAgICAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShUQUJMRSk7Ci0gICAgICAgICAg
ICB0YWJsZS0+c2V0U3R5bGUobmV3U3R5bGUpOworICAgICAgICAgICAgdGFibGUtPnNldFN0eWxl
KG5ld1N0eWxlLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICBhZGRDaGlsZCh0YWJsZSwgYmVmb3Jl
Q2hpbGQpOwogICAgICAgICB9CiAgICAgICAgIHRhYmxlLT5hZGRDaGlsZChuZXdDaGlsZCk7CkBA
IC0yNjEsNyArMjYxLDcgQEAgdm9pZCBSZW5kZXJDb250YWluZXI6OnVwZGF0ZUJlZm9yZUFmdGVy
QwogICAgIGlmIChzdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBSZW5kZXJTdHlsZTo6QkVGT1JFIHx8
IHN0eWxlKCktPnN0eWxlVHlwZSgpID09IFJlbmRlclN0eWxlOjpBRlRFUikKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9FbGVtZW50U3R5bGUgPSBzdHlsZWRP
YmplY3QtPmdldFBzZXVkb1N0eWxlKHR5cGUpOworICAgIFJlbmRlclN0eWxlKiBwc2V1ZG9FbGVt
ZW50U3R5bGUgPSBzdHlsZWRPYmplY3QtPmdldENhY2hlZFBzZXVkb1N0eWxlKHR5cGUpOwogICAg
IFJlbmRlck9iamVjdCogY2hpbGQgPSBiZWZvcmVBZnRlckNvbnRhaW5lcih0eXBlKTsKIAogICAg
IC8vIFdoZXRoZXIgb3Igbm90IHdlIGN1cnJlbnRseSBoYXZlIGdlbmVyYXRlZCBjb250ZW50IGF0
dGFjaGVkLgpAQCAtMzI0LDkgKzMyNCw5IEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjp1cGRhdGVC
ZWZvcmVBZnRlckMKICAgICAgICAgICAgICAgICAgICAgZ2VuQ2hpbGQtPnNldFN0eWxlKHBzZXVk
b0VsZW1lbnRTdHlsZSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZ2VuQ2hpbGQtPmlzSW1h
Z2UoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJbWFnZXMgZ2V0IGFuIGVtcHR5IHN0eWxl
IHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUgcHNldWRvLgotICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlOworICAgICAg
ICAgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gUmVuZGVyU3R5bGU6OmNy
ZWF0ZSgpOwogICAgICAgICAgICAgICAgICAgICBzdHlsZS0+aW5oZXJpdEZyb20ocHNldWRvRWxl
bWVudFN0eWxlKTsKLSAgICAgICAgICAgICAgICAgICAgZ2VuQ2hpbGQtPnNldFN0eWxlKHN0eWxl
KTsKKyAgICAgICAgICAgICAgICAgICAgZ2VuQ2hpbGQtPnNldFN0eWxlKHN0eWxlLnJlbGVhc2Uo
KSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIC8vIE11c3Qg
YmUgYSBmaXJzdC1sZXR0ZXIgY29udGFpbmVyLiB1cGRhdGVGaXJzdExldHRlcigpIHdpbGwgdGFr
ZSBjYXJlIG9mIGl0LgogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZ2VuQ2hpbGQtPnN0eWxl
KCktPnN0eWxlVHlwZSgpID09IFJlbmRlclN0eWxlOjpGSVJTVF9MRVRURVIpOwpAQCAtMzUzLDkg
KzM1Myw5IEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjp1cGRhdGVCZWZvcmVBZnRlckMKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ09OVEVOVF9PQkpFQ1Q6IHsKICAg
ICAgICAgICAgICAgICBSZW5kZXJJbWFnZUdlbmVyYXRlZENvbnRlbnQqIGltYWdlID0gbmV3IChy
ZW5kZXJBcmVuYSgpKSBSZW5kZXJJbWFnZUdlbmVyYXRlZENvbnRlbnQoZG9jdW1lbnQoKSk7IC8v
IGFub255bW91cyBvYmplY3QKLSAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBu
ZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlOworICAgICAgICAgICAgICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gc3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAg
ICAgc3R5bGUtPmluaGVyaXRGcm9tKHBzZXVkb0VsZW1lbnRTdHlsZSk7Ci0gICAgICAgICAgICAg
ICAgaW1hZ2UtPnNldFN0eWxlKHN0eWxlKTsKKyAgICAgICAgICAgICAgICBpbWFnZS0+c2V0U3R5
bGUoc3R5bGUucmVsZWFzZSgpKTsKICAgICAgICAgICAgICAgICBpZiAoU3R5bGVJbWFnZSogc3R5
bGVJbWFnZSA9IGNvbnRlbnQtPm1fY29udGVudC5tX2ltYWdlKQogICAgICAgICAgICAgICAgICAg
ICBpbWFnZS0+c2V0U3R5bGVJbWFnZShzdHlsZUltYWdlKTsKICAgICAgICAgICAgICAgICByZW5k
ZXJlciA9IGltYWdlOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCShy
ZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNywxMCArMTA3LDEwIEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2w6OnVwZGF0ZUZyb20KICAgICAgICAgbV9idXR0b24gPSBuZXcgSFRNTEZpbGVVcGxv
YWRJbm5lckJ1dHRvbkVsZW1lbnQoZG9jdW1lbnQoKSwgaW5wdXRFbGVtZW50KTsKICAgICAgICAg
bV9idXR0b24tPnNldElucHV0VHlwZSgiYnV0dG9uIik7CiAgICAgICAgIG1fYnV0dG9uLT5zZXRW
YWx1ZShmaWxlQnV0dG9uQ2hvb3NlRmlsZUxhYmVsKCkpOwotICAgICAgICBSZW5kZXJTdHlsZSog
YnV0dG9uU3R5bGUgPSBjcmVhdGVCdXR0b25TdHlsZShzdHlsZSgpKTsKLSAgICAgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IG1fYnV0dG9uLT5jcmVhdGVSZW5kZXJlcihyZW5kZXJBcmVuYSgp
LCBidXR0b25TdHlsZSk7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gYnV0dG9uU3R5bGUg
PSBjcmVhdGVCdXR0b25TdHlsZShzdHlsZSgpKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IG1fYnV0dG9uLT5jcmVhdGVSZW5kZXJlcihyZW5kZXJBcmVuYSgpLCBidXR0b25TdHls
ZS5nZXQoKSk7CiAgICAgICAgIG1fYnV0dG9uLT5zZXRSZW5kZXJlcihyZW5kZXJlcik7Ci0gICAg
ICAgIHJlbmRlcmVyLT5zZXRTdHlsZShidXR0b25TdHlsZSk7CisgICAgICAgIHJlbmRlcmVyLT5z
ZXRTdHlsZShidXR0b25TdHlsZS5yZWxlYXNlKCkpOwogICAgICAgICByZW5kZXJlci0+dXBkYXRl
RnJvbUVsZW1lbnQoKTsKICAgICAgICAgbV9idXR0b24tPnNldEF0dGFjaGVkKCk7CiAgICAgICAg
IG1fYnV0dG9uLT5zZXRJbkRvY3VtZW50KHRydWUpOwpAQCAtMTM0LDExICsxMzQsMTEgQEAgaW50
IFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjptYXhGaWxlbmFtZQogICAgICAgICAtIChtX2ZpbGVD
aG9vc2VyLT5pY29uKCkgPyBpY29uV2lkdGggKyBpY29uRmlsZW5hbWVTcGFjaW5nIDogMCkpOwog
fQogCi1SZW5kZXJTdHlsZSogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNyZWF0ZUJ1dHRvblN0
eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29uc3QKK1Bhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpjcmVhdGVCdXR0b25TdHlsZShjb25z
dCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpIGNvbnN0CiB7Ci0gICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gZ2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkZJTEVfVVBMT0FEX0JVVFRPTik7Cisg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IGdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRl
clN0eWxlOjpGSUxFX1VQTE9BRF9CVVRUT04pOwogICAgIGlmICghc3R5bGUpIHsKLSAgICAgICAg
c3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlOworICAgICAgICBzdHlsZSA9
IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAg
ICAgICAgc3R5bGUtPmluaGVyaXRGcm9tKHBhcmVudFN0eWxlKTsKICAgICB9CkBAIC0xNDcsNyAr
MTQ3LDcgQEAgUmVuZGVyU3R5bGUqIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpjcgogICAgIC8v
IHdpdGhvdXQgdGhpcyBzZXRXaGl0ZVNwYWNlLgogICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKE5P
V1JBUCk7CiAKLSAgICByZXR1cm4gc3R5bGU7CisgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsK
IH0KIAogdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplY3QoUGFpbnRJbmZv
JiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZpbGVV
cGxvYWRDb250cm9sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRD
b250cm9sLmgJKHJldmlzaW9uIDM3NTg2KQorKysgcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRD
b250cm9sLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHJvdGVjdGVkOgogCiBw
cml2YXRlOgogICAgIGludCBtYXhGaWxlbmFtZVdpZHRoKCkgY29uc3Q7Ci0gICAgUmVuZGVyU3R5
bGUqIGNyZWF0ZUJ1dHRvblN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkgY29u
c3Q7CisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlQnV0dG9uU3R5bGUoY29uc3Qg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdDsKIAogICAgIFJlZlB0cjxIVE1MSW5wdXRF
bGVtZW50PiBtX2J1dHRvbjsKICAgICBSZWZQdHI8RmlsZUNob29zZXI+IG1fZmlsZUNob29zZXI7
CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L1JlbmRlckZsb3cuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJGbG93
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBSZW5kZXJGbG93Ojp+UmVuZGVy
RmxvdygpCiAKICNlbmRpZgogCi1SZW5kZXJGbG93KiBSZW5kZXJGbG93OjpjcmVhdGVBbm9ueW1v
dXNGbG93KERvY3VtZW50KiBkb2MsIFJlbmRlclN0eWxlKiBzdHlsZSkKK1JlbmRlckZsb3cqIFJl
bmRlckZsb3c6OmNyZWF0ZUFub255bW91c0Zsb3coRG9jdW1lbnQqIGRvYywgUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gc3R5bGUpCiB7CiAgICAgUmVuZGVyRmxvdyogcmVzdWx0OwogICAgIGlmIChz
dHlsZS0+ZGlzcGxheSgpID09IElOTElORSkKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJGbG93LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckZsb3cuaAkocmV2aXNpb24gMzc1ODYpCisr
KyByZW5kZXJpbmcvUmVuZGVyRmxvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRUb0Zsb3coUmVuZGVyT2JqZWN0KiBu
ZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNo
aWxkID0gMCk7CiAKLSAgICBzdGF0aWMgUmVuZGVyRmxvdyogY3JlYXRlQW5vbnltb3VzRmxvdyhE
b2N1bWVudCosIFJlbmRlclN0eWxlKik7CisgICAgc3RhdGljIFJlbmRlckZsb3cqIGNyZWF0ZUFu
b255bW91c0Zsb3coRG9jdW1lbnQqLCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPik7CiAKICAgICB2
b2lkIGV4dHJhY3RMaW5lQm94KElubGluZUZsb3dCb3gqKTsKICAgICB2b2lkIGF0dGFjaExpbmVC
b3goSW5saW5lRmxvd0JveCopOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDM3NTg2KQor
KysgcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxMiAr
MTAyLDEyIEBAIHZvaWQgUmVuZGVySW5saW5lOjphZGRDaGlsZFRvRmxvdyhSZW5kZXIKICAgICAg
ICAgLy8gaW5saW5lIGludG8gY29udGludWF0aW9ucy4gIFRoaXMgaW52b2x2ZXMgY3JlYXRpbmcg
YW4gYW5vbnltb3VzIGJsb2NrIGJveCB0byBob2xkCiAgICAgICAgIC8vIHxuZXdDaGlsZHwuICBX
ZSB0aGVuIG1ha2UgdGhhdCBibG9jayBib3ggYSBjb250aW51YXRpb24gb2YgdGhpcyBpbmxpbmUu
ICBXZSB0YWtlIGFsbCBvZgogICAgICAgICAvLyB0aGUgY2hpbGRyZW4gYWZ0ZXIgfGJlZm9yZUNo
aWxkfCBhbmQgcHV0IHRoZW0gaW4gYSBjbG9uZSBvZiB0aGlzIG9iamVjdC4KLSAgICAgICAgUmVu
ZGVyU3R5bGUqIG5ld1N0eWxlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOwor
ICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0
ZSgpOwogICAgICAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20oc3R5bGUoKSk7CiAgICAgICAgIG5l
d1N0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKIAogICAgICAgICBSZW5kZXJCbG9jayogbmV3Qm94
ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJCbG9jayhkb2N1bWVudCgpIC8qIGFub255bW91
cyBib3ggKi8pOwotICAgICAgICBuZXdCb3gtPnNldFN0eWxlKG5ld1N0eWxlKTsKKyAgICAgICAg
bmV3Qm94LT5zZXRTdHlsZShuZXdTdHlsZS5yZWxlYXNlKCkpOwogICAgICAgICBSZW5kZXJGbG93
KiBvbGRDb250aW51YXRpb24gPSBjb250aW51YXRpb24oKTsKICAgICAgICAgc2V0Q29udGludWF0
aW9uKG5ld0JveCk7CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgxLDEzICsyNDgxLDEz
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChSZW5kZXJTdHkKIHZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCkKIHsKICAgICBSZW5kZXJPYmplY3QqIGFj
dHVhbFJlbmRlcmVyID0gbV9vYmplY3QtPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpID8gbV9vYmpl
Y3QtPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCktPnJlbmRlcmVyKCkgOiBtX29iamVjdDsK
LSAgICBSZW5kZXJTdHlsZSogY29ybmVyID0gbV9vYmplY3QtPmhhc092ZXJmbG93Q2xpcCgpID8g
YWN0dWFsUmVuZGVyZXItPmdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTQ1JPTExCQVJfQ09S
TkVSLCBhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSwgZmFsc2UpIDogMDsKKyAgICBSZWZQdHI8UmVu
ZGVyU3R5bGU+IGNvcm5lciA9IG1fb2JqZWN0LT5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJl
bmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTQ1JPTExCQVJfQ09S
TkVSLCBhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiAwOwogICAgIGlmIChjb3JuZXIpIHsKICAg
ICAgICAgaWYgKCFtX3Njcm9sbENvcm5lcikgewogICAgICAgICAgICAgbV9zY3JvbGxDb3JuZXIg
PSBuZXcgKG1fb2JqZWN0LT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTY3JvbGxiYXJQYXJ0KG1fb2Jq
ZWN0LT5kb2N1bWVudCgpKTsKICAgICAgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQo
bV9vYmplY3QpOwogICAgICAgICB9Ci0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRTdHlsZShj
b3JuZXIpOworICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoY29ybmVyLnJlbGVhc2Uo
KSk7CiAgICAgfSBlbHNlIGlmIChtX3Njcm9sbENvcm5lcikgewogICAgICAgICBtX3Njcm9sbENv
cm5lci0+ZGVzdHJveSgpOwogICAgICAgICBtX3Njcm9sbENvcm5lciA9IDA7CkBAIC0yNDk3LDEz
ICsyNDk3LDEzIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWwKIHZv
aWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCiB7CiAgICAgUmVuZGVyT2JqZWN0
KiBhY3R1YWxSZW5kZXJlciA9IG1fb2JqZWN0LT5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSA/IG1f
b2JqZWN0LT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpLT5yZW5kZXJlcigpIDogbV9vYmpl
Y3Q7Ci0gICAgUmVuZGVyU3R5bGUqIHJlc2l6ZXIgPSBtX29iamVjdC0+aGFzT3ZlcmZsb3dDbGlw
KCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlJFU0laRVIs
IGFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpLCBmYWxzZSkgOiAwOworICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gcmVzaXplciA9IG1fb2JqZWN0LT5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRl
cmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpSRVNJWkVSLCBhY3R1YWxS
ZW5kZXJlci0+c3R5bGUoKSkgOiAwOwogICAgIGlmIChyZXNpemVyKSB7CiAgICAgICAgIGlmICgh
bV9yZXNpemVyKSB7CiAgICAgICAgICAgICBtX3Jlc2l6ZXIgPSBuZXcgKG1fb2JqZWN0LT5yZW5k
ZXJBcmVuYSgpKSBSZW5kZXJTY3JvbGxiYXJQYXJ0KG1fb2JqZWN0LT5kb2N1bWVudCgpKTsKICAg
ICAgICAgICAgIG1fcmVzaXplci0+c2V0UGFyZW50KG1fb2JqZWN0KTsKICAgICAgICAgfQotICAg
ICAgICBtX3Jlc2l6ZXItPnNldFN0eWxlKHJlc2l6ZXIpOworICAgICAgICBtX3Jlc2l6ZXItPnNl
dFN0eWxlKHJlc2l6ZXIucmVsZWFzZSgpKTsKICAgICB9IGVsc2UgaWYgKG1fcmVzaXplcikgewog
ICAgICAgICBtX3Jlc2l6ZXItPmRlc3Ryb3koKTsKICAgICAgICAgbV9yZXNpemVyID0gMDsKQEAg
LTI1MjQsNyArMjUyNCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNyZWF0ZVJlZmxlY3Rpb24oKQog
CiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVSZWZsZWN0aW9uU3R5bGUoKQogewotICAgIFJlbmRl
clN0eWxlKiBuZXdTdHlsZSA9IG5ldyAocmVuZGVyZXIoKS0+cmVuZGVyQXJlbmEoKSkgUmVuZGVy
U3R5bGUoKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6
OmNyZWF0ZSgpOwogICAgIG5ld1N0eWxlLT5pbmhlcml0RnJvbShyZW5kZXJlcigpLT5zdHlsZSgp
KTsKICAgICAKICAgICAvLyBNYXAgaW4gb3VyIHRyYW5zZm9ybS4KQEAgLTI1NTYsNyArMjU1Niw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVJlZmxlY3Rpb25TdHlsZSgKICAgICAvLyBNYXAg
aW4gb3VyIG1hc2suCiAgICAgbmV3U3R5bGUtPnNldE1hc2tCb3hJbWFnZShyZW5kZXJlcigpLT5z
dHlsZSgpLT5ib3hSZWZsZWN0KCktPm1hc2soKSk7CiAgICAgCi0gICAgbV9yZWZsZWN0aW9uLT5z
ZXRTdHlsZShuZXdTdHlsZSk7CisgICAgbV9yZWZsZWN0aW9uLT5zZXRTdHlsZShuZXdTdHlsZS5y
ZWxlYXNlKCkpOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpzdXNwZW5kTWFycXVlZXMoKQpJbmRl
eDogcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcv
UmVuZGVyTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDE1ICs1NCwxMyBAQCB2b2lkIFJlbmRl
ckxpc3RJdGVtOjpzdHlsZURpZENoYW5nZShSZW5kCiAKICAgICBpZiAoc3R5bGUoKS0+bGlzdFN0
eWxlVHlwZSgpICE9IExOT05FIHx8CiAgICAgICAgIChzdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgp
ICYmICFzdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpLT5lcnJvck9jY3VycmVkKCkpKSB7Ci0gICAg
ICAgIFJlbmRlclN0eWxlKiBuZXdTdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5
bGU7Ci0gICAgICAgIG5ld1N0eWxlLT5yZWYoKTsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKICAgICAgICAgLy8gVGhlIG1hcmtl
ciBhbHdheXMgaW5oZXJpdHMgZnJvbSB0aGUgbGlzdCBpdGVtLCByZWdhcmRsZXNzIG9mIHdoZXJl
IGl0IG1pZ2h0IGVuZAogICAgICAgICAvLyB1cCAoZS5nLiwgaW4gc29tZSBkZWVwbHkgbmVzdGVk
IGxpbmUgYm94KS4gU2VlIENTUzMgc3BlYy4KICAgICAgICAgbmV3U3R5bGUtPmluaGVyaXRGcm9t
KHN0eWxlKCkpOyAKICAgICAgICAgaWYgKCFtX21hcmtlcikKICAgICAgICAgICAgIG1fbWFya2Vy
ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJMaXN0TWFya2VyKHRoaXMpOwotICAgICAgICBt
X21hcmtlci0+c2V0U3R5bGUobmV3U3R5bGUpOwotICAgICAgICBuZXdTdHlsZS0+ZGVyZWYocmVu
ZGVyQXJlbmEoKSk7CisgICAgICAgIG1fbWFya2VyLT5zZXRTdHlsZShuZXdTdHlsZS5yZWxlYXNl
KCkpOwogICAgIH0gZWxzZSBpZiAobV9tYXJrZXIpIHsKICAgICAgICAgbV9tYXJrZXItPmRlc3Ry
b3koKTsKICAgICAgICAgbV9tYXJrZXIgPSAwOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlck1lZGlh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCShyZXZpc2lvbiAz
NzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
Niw3ICsxNDYsNyBAQCB2b2lkIFJlbmRlck1lZGlhOjpjcmVhdGVDb250cm9sc1NoYWRvd1JvCiB2
b2lkIFJlbmRlck1lZGlhOjpjcmVhdGVQYW5lbCgpCiB7CiAgICAgQVNTRVJUKCFtX3BhbmVsKTsK
LSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6TUVE
SUFfQ09OVFJPTFNfUEFORUwpOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGdldENhY2hlZFBz
ZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpNRURJQV9DT05UUk9MU19QQU5FTCk7CiAgICAgbV9wYW5l
bCA9IG5ldyBIVE1MRGl2RWxlbWVudChkb2N1bWVudCgpKTsKICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gbV9wYW5lbC0+Y3JlYXRlUmVuZGVyZXIocmVuZGVyQXJlbmEoKSwgc3R5bGUpOwog
ICAgIGlmIChyZW5kZXJlcikgewpAQCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQgUmVuZGVyTWVkaWE6
OmNyZWF0ZVRpbWVsaW5lKCkKIHZvaWQgUmVuZGVyTWVkaWE6OmNyZWF0ZVRpbWVEaXNwbGF5KCkK
IHsKICAgICBBU1NFUlQoIW1fdGltZURpc3BsYXkpOwotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IGdldFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpNRURJQV9DT05UUk9MU19USU1FX0RJU1BMQVkp
OworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0
eWxlOjpNRURJQV9DT05UUk9MU19USU1FX0RJU1BMQVkpOwogICAgIG1fdGltZURpc3BsYXkgPSBu
ZXcgSFRNTERpdkVsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IG1fdGltZURpc3BsYXktPmNyZWF0ZVJlbmRlcmVyKHJlbmRlckFyZW5hKCksIHN0eWxlKTsK
ICAgICBpZiAocmVuZGVyZXIpIHsKQEAgLTM0MCwxMSArMzQwLDExIEBAIHZvaWQgUmVuZGVyTWVk
aWE6OmNoYW5nZU9wYWNpdHkoSFRNTEVsZW0KIHsKICAgICBpZiAoIWUgfHwgIWUtPnJlbmRlcmVy
KCkgfHwgIWUtPnJlbmRlcmVyKCktPnN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZW5k
ZXJTdHlsZSogcyA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKmUtPnJlbmRlcmVy
KCktPnN0eWxlKCkpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcyA9IFJlbmRlclN0eWxlOjpj
bG9uZShlLT5yZW5kZXJlcigpLT5zdHlsZSgpKTsKICAgICBzLT5zZXRPcGFjaXR5KG9wYWNpdHkp
OwogICAgIC8vIHotaW5kZXggY2FuJ3QgYmUgYXV0byBpZiBvcGFjaXR5IGlzIHVzZWQKICAgICBz
LT5zZXRaSW5kZXgoMCk7Ci0gICAgZS0+cmVuZGVyZXIoKS0+c2V0U3R5bGUocyk7CisgICAgZS0+
cmVuZGVyZXIoKS0+c2V0U3R5bGUocy5yZWxlYXNlKCkpOwogfQogICAgIAogdm9pZCBSZW5kZXJN
ZWRpYTo6b3BhY2l0eUFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8UmVuZGVyTWVkaWE+KikKSW5k
ZXg6IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDM4LDcgKzIwMzgsNyBAQCBDb2xvciBSZW5kZXJP
YmplY3Q6OnNlbGVjdGlvbkJhY2tncm91bmRDCiB7CiAgICAgQ29sb3IgY29sb3I7CiAgICAgaWYg
KHN0eWxlKCktPnVzZXJTZWxlY3QoKSAhPSBTRUxFQ1RfTk9ORSkgewotICAgICAgICBSZW5kZXJT
dHlsZSogcHNldWRvU3R5bGUgPSBnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6U0VMRUNUSU9O
KTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gZ2V0Q2FjaGVkUHNldWRvU3R5
bGUoUmVuZGVyU3R5bGU6OlNFTEVDVElPTik7CiAgICAgICAgIGlmIChwc2V1ZG9TdHlsZSAmJiBw
c2V1ZG9TdHlsZS0+YmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgpKQogICAgICAgICAgICAgY29s
b3IgPSBwc2V1ZG9TdHlsZS0+YmFja2dyb3VuZENvbG9yKCkuYmxlbmRXaXRoV2hpdGUoKTsKICAg
ICAgICAgZWxzZQpAQCAtMjA1Niw3ICsyMDU2LDcgQEAgQ29sb3IgUmVuZGVyT2JqZWN0OjpzZWxl
Y3Rpb25Gb3JlZ3JvdW5kQwogICAgIGlmIChzdHlsZSgpLT51c2VyU2VsZWN0KCkgPT0gU0VMRUNU
X05PTkUpCiAgICAgICAgIHJldHVybiBjb2xvcjsKIAotICAgIGlmIChSZW5kZXJTdHlsZSogcHNl
dWRvU3R5bGUgPSBnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6U0VMRUNUSU9OKSkgeworICAg
IGlmIChSZW5kZXJTdHlsZSogcHNldWRvU3R5bGUgPSBnZXRDYWNoZWRQc2V1ZG9TdHlsZShSZW5k
ZXJTdHlsZTo6U0VMRUNUSU9OKSkgewogICAgICAgICBjb2xvciA9IHBzZXVkb1N0eWxlLT50ZXh0
RmlsbENvbG9yKCk7CiAgICAgICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQogICAgICAgICAgICAg
Y29sb3IgPSBwc2V1ZG9TdHlsZS0+Y29sb3IoKTsKQEAgLTIxMTAsMTIgKzIxMTAsMTIgQEAgdm9p
ZCBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvblN0YXJ0RW5kKGludAogCiBSZW5kZXJCbG9jayogUmVu
ZGVyT2JqZWN0OjpjcmVhdGVBbm9ueW1vdXNCbG9jaygpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIG5l
d1N0eWxlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOwotICAgIG5ld1N0eWxl
LT5pbmhlcml0RnJvbShtX3N0eWxlKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxl
ID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIG5ld1N0eWxlLT5pbmhlcml0RnJvbShtX3N0
eWxlLmdldCgpKTsKICAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7CiAKICAgICBSZW5k
ZXJCbG9jayogbmV3Qm94ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJCbG9jayhkb2N1bWVu
dCgpIC8qIGFub255bW91cyBib3ggKi8pOwotICAgIG5ld0JveC0+c2V0U3R5bGUobmV3U3R5bGUp
OworICAgIG5ld0JveC0+c2V0U3R5bGUobmV3U3R5bGUucmVsZWFzZSgpKTsKICAgICByZXR1cm4g
bmV3Qm94OwogfQogCkBAIC0yMTU0LDMzICsyMTU0LDMxIEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojpo
YW5kbGVEeW5hbWljRmxvYXRQb3MKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpzZXRB
bmltYXRhYmxlU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQordm9pZCBSZW5kZXJPYmplY3Q6OnNl
dEFuaW1hdGFibGVTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIHsKICAgICBp
ZiAoIWlzVGV4dCgpICYmIHN0eWxlKQotICAgICAgICBzdHlsZSA9IGFuaW1hdGlvbigpLT51cGRh
dGVBbmltYXRpb25zKHRoaXMsIHN0eWxlKTsKLQotICAgIHNldFN0eWxlKHN0eWxlKTsKKyAgICAg
ICAgc2V0U3R5bGUoYW5pbWF0aW9uKCktPnVwZGF0ZUFuaW1hdGlvbnModGhpcywgc3R5bGUuZ2V0
KCkpKTsKKyAgICBlbHNlCisgICAgICAgIHNldFN0eWxlKHN0eWxlKTsKIH0KIAotdm9pZCBSZW5k
ZXJPYmplY3Q6OnNldFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKK3ZvaWQgUmVuZGVy
T2JqZWN0OjpzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIHsKICAgICBp
ZiAobV9zdHlsZSA9PSBzdHlsZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVuZGVyU3R5bGU6
OkRpZmYgZGlmZiA9IFJlbmRlclN0eWxlOjpFcXVhbDsKICAgICBpZiAobV9zdHlsZSkKLSAgICAg
ICAgZGlmZiA9IG1fc3R5bGUtPmRpZmYoc3R5bGUpOworICAgICAgICBkaWZmID0gbV9zdHlsZS0+
ZGlmZihzdHlsZS5nZXQoKSk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIG5vIGxheWVyKCksIGp1c3Qg
dHJlYXQgYSBSZXBhaW50TGF5ZXIgaGludCBhcyBhIG5vcm1hbCBSZXBhaW50LgogICAgIGlmIChk
aWZmID09IFJlbmRlclN0eWxlOjpSZXBhaW50TGF5ZXIgJiYgIWhhc0xheWVyKCkpCiAgICAgICAg
IGRpZmYgPSBSZW5kZXJTdHlsZTo6UmVwYWludDsKIAotICAgIHN0eWxlV2lsbENoYW5nZShkaWZm
LCBzdHlsZSk7CisgICAgc3R5bGVXaWxsQ2hhbmdlKGRpZmYsIHN0eWxlLmdldCgpKTsKICAgICAK
LSAgICBSZW5kZXJTdHlsZSogb2xkU3R5bGUgPSBtX3N0eWxlOwotICAgIG1fc3R5bGUgPSBjb25z
dF9jYXN0PFJlbmRlclN0eWxlKj4oc3R5bGUpOwotICAgIGlmIChtX3N0eWxlKQotICAgICAgICBt
X3N0eWxlLT5yZWYoKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG9sZFN0eWxlID0gbV9zdHls
ZS5yZWxlYXNlKCk7CisgICAgbV9zdHlsZSA9IHN0eWxlOwogCiAgICAgdXBkYXRlRmlsbEltYWdl
cyhvbGRTdHlsZSA/IG9sZFN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkgOiAwLCBtX3N0eWxlID8g
bV9zdHlsZS0+YmFja2dyb3VuZExheWVycygpIDogMCk7CiAgICAgdXBkYXRlRmlsbEltYWdlcyhv
bGRTdHlsZSA/IG9sZFN0eWxlLT5tYXNrTGF5ZXJzKCkgOiAwLCBtX3N0eWxlID8gbV9zdHlsZS0+
bWFza0xheWVycygpIDogMCk7CkBAIC0yMTg4LDIyICsyMTg2LDEyIEBAIHZvaWQgUmVuZGVyT2Jq
ZWN0OjpzZXRTdHlsZShjb25zdCBSZW5kZXIKICAgICB1cGRhdGVJbWFnZShvbGRTdHlsZSA/IG9s
ZFN0eWxlLT5ib3JkZXJJbWFnZSgpLmltYWdlKCkgOiAwLCBtX3N0eWxlID8gbV9zdHlsZS0+Ym9y
ZGVySW1hZ2UoKS5pbWFnZSgpIDogMCk7CiAgICAgdXBkYXRlSW1hZ2Uob2xkU3R5bGUgPyBvbGRT
dHlsZS0+bWFza0JveEltYWdlKCkuaW1hZ2UoKSA6IDAsIG1fc3R5bGUgPyBtX3N0eWxlLT5tYXNr
Qm94SW1hZ2UoKS5pbWFnZSgpIDogMCk7CiAKLSAgICBzdHlsZURpZENoYW5nZShkaWZmLCBvbGRT
dHlsZSk7Ci0KLSAgICBpZiAob2xkU3R5bGUpIHsKLSAgICAgICAgb2xkU3R5bGUtPmRlcmVmKHJl
bmRlckFyZW5hKCkpOwotICAgIH0KKyAgICBzdHlsZURpZENoYW5nZShkaWZmLCBvbGRTdHlsZS5n
ZXQoKSk7CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTdHlsZUludGVybmFsKFJlbmRlclN0
eWxlKiBzdHlsZSkKK3ZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTdHlsZUludGVybmFsKFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IHN0eWxlKQogewotICAgIGlmIChtX3N0eWxlID09IHN0eWxlKQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKG1fc3R5bGUpCi0gICAgICAgIG1fc3R5bGUtPmRlcmVmKHJl
bmRlckFyZW5hKCkpOwogICAgIG1fc3R5bGUgPSBzdHlsZTsKLSAgICBpZiAobV9zdHlsZSkKLSAg
ICAgICAgbV9zdHlsZS0+cmVmKCk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpzdHlsZVdpbGxD
aGFuZ2UoUmVuZGVyU3R5bGU6OkRpZmYgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxl
KQpAQCAtMjU4MSw4ICsyNTY5LDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFyZW5hRGVsZXRlKFJl
bmRlckFyZQogCiAgICAgICAgIGlmIChTdHlsZUltYWdlKiBtYXNrQm94SW1hZ2UgPSBtX3N0eWxl
LT5tYXNrQm94SW1hZ2UoKS5pbWFnZSgpKQogICAgICAgICAgICAgbWFza0JveEltYWdlLT5yZW1v
dmVDbGllbnQodGhpcyk7Ci0KLSAgICAgICAgbV9zdHlsZS0+ZGVyZWYoYXJlbmEpOwogICAgIH0K
IAogI2lmbmRlZiBOREVCVUcKQEAgLTI4MDIsNTQgKzI3ODgsNjIgQEAgdm9pZCBSZW5kZXJPYmpl
Y3Q6OmRlbGV0ZUxpbmVCb3hXcmFwcGVyKAogUmVuZGVyU3R5bGUqIFJlbmRlck9iamVjdDo6Zmly
c3RMaW5lU3R5bGUoKSBjb25zdAogewogICAgIGlmICghZG9jdW1lbnQoKS0+dXNlc0ZpcnN0TGlu
ZVJ1bGVzKCkpCi0gICAgICAgIHJldHVybiBtX3N0eWxlOworICAgICAgICByZXR1cm4gbV9zdHls
ZS5nZXQoKTsKIAotICAgIFJlbmRlclN0eWxlKiBzID0gbV9zdHlsZTsKKyAgICBSZW5kZXJTdHls
ZSogcyA9IG1fc3R5bGUuZ2V0KCk7CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmogPSBpc1Rl
eHQoKSA/IHBhcmVudCgpIDogdGhpczsKICAgICBpZiAob2JqLT5pc0Jsb2NrRmxvdygpKSB7CiAg
ICAgICAgIFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jayA9IG9iai0+Zmlyc3RMaW5lQmxvY2so
KTsKICAgICAgICAgaWYgKGZpcnN0TGluZUJsb2NrKQotICAgICAgICAgICAgcyA9IGZpcnN0TGlu
ZUJsb2NrLT5nZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6RklSU1RfTElORSwgc3R5bGUoKSk7
CisgICAgICAgICAgICBzID0gZmlyc3RMaW5lQmxvY2stPmdldENhY2hlZFBzZXVkb1N0eWxlKFJl
bmRlclN0eWxlOjpGSVJTVF9MSU5FLCBzdHlsZSgpKTsKICAgICB9IGVsc2UgaWYgKCFvYmotPmlz
QW5vbnltb3VzKCkgJiYgb2JqLT5pc0lubGluZUZsb3coKSkgewogICAgICAgICBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUgPSBvYmotPnBhcmVudCgpLT5maXJzdExpbmVTdHlsZSgpOwogICAgICAg
ICBpZiAocGFyZW50U3R5bGUgIT0gb2JqLT5wYXJlbnQoKS0+c3R5bGUoKSkgewogICAgICAgICAg
ICAgLy8gQSBmaXJzdC1saW5lIHN0eWxlIGlzIGluIGVmZmVjdC4gV2UgbmVlZCB0byBjYWNoZSBh
IGZpcnN0LWxpbmUgc3R5bGUKICAgICAgICAgICAgIC8vIGZvciBvdXJzZWx2ZXMuCiAgICAgICAg
ICAgICBzdHlsZSgpLT5zZXRIYXNQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6RklSU1RfTElORV9J
TkhFUklURUQpOwotICAgICAgICAgICAgcyA9IG9iai0+Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5
bGU6OkZJUlNUX0xJTkVfSU5IRVJJVEVELCBwYXJlbnRTdHlsZSk7CisgICAgICAgICAgICBzID0g
b2JqLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6RklSU1RfTElORV9JTkhFUklU
RUQsIHBhcmVudFN0eWxlKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gczsKIH0KIAot
UmVuZGVyU3R5bGUqIFJlbmRlck9iamVjdDo6Z2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlBz
ZXVkb0lkIHBzZXVkbywgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBib29sIHVzZUNhY2hlZFN0
eWxlKSBjb25zdAorUmVuZGVyU3R5bGUqIFJlbmRlck9iamVjdDo6Z2V0Q2FjaGVkUHNldWRvU3R5
bGUoUmVuZGVyU3R5bGU6OlBzZXVkb0lkIHBzZXVkbywgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
KSBjb25zdAogewogICAgIGlmIChwc2V1ZG8gPCBSZW5kZXJTdHlsZTo6RklSU1RfSU5URVJOQUxf
UFNFVURPSUQgJiYgIXN0eWxlKCktPmhhc1BzZXVkb1N0eWxlKHBzZXVkbykpCiAgICAgICAgIHJl
dHVybiAwOwogCisgICAgUmVuZGVyU3R5bGUqIGNhY2hlZFN0eWxlID0gc3R5bGUoKS0+Z2V0Q2Fj
aGVkUHNldWRvU3R5bGUocHNldWRvKTsKKyAgICBpZiAoY2FjaGVkU3R5bGUpCisgICAgICAgIHJl
dHVybiBjYWNoZWRTdHlsZTsKKyAgICAKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlc3VsdCA9
IGdldFVuY2FjaGVkUHNldWRvU3R5bGUocHNldWRvLCBwYXJlbnRTdHlsZSk7CisgICAgaWYgKHJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIHN0eWxlKCktPmFkZENhY2hlZFBzZXVkb1N0eWxlKHJlc3Vs
dC5yZWxlYXNlKCkpOworICAgIHJldHVybiAwOworfQorCitQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBSZW5kZXJPYmplY3Q6OmdldFVuY2FjaGVkUHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlBzZXVk
b0lkIHBzZXVkbywgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKSBjb25zdAoreworICAgIGlmIChw
c2V1ZG8gPCBSZW5kZXJTdHlsZTo6RklSU1RfSU5URVJOQUxfUFNFVURPSUQgJiYgIXN0eWxlKCkt
Pmhhc1BzZXVkb1N0eWxlKHBzZXVkbykpCisgICAgICAgIHJldHVybiAwOworICAgIAogICAgIGlm
ICghcGFyZW50U3R5bGUpCiAgICAgICAgIHBhcmVudFN0eWxlID0gc3R5bGUoKTsKIAotICAgIFJl
bmRlclN0eWxlKiByZXN1bHQgPSB1c2VDYWNoZWRTdHlsZSA/IHN0eWxlKCktPmdldFBzZXVkb1N0
eWxlKHBzZXVkbykgOiAwOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0KICAgICBOb2RlKiBub2RlID0gZWxlbWVudCgpOwogICAgIHdoaWxlIChub2RlICYmICFub2Rl
LT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAg
ICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIFJlZlB0cjxSZW5kZXJTdHls
ZT4gcmVzdWx0OwogICAgIGlmIChwc2V1ZG8gPT0gUmVuZGVyU3R5bGU6OkZJUlNUX0xJTkVfSU5I
RVJJVEVEKSB7CiAgICAgICAgIHJlc3VsdCA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+
c3R5bGVGb3JFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKSwgcGFyZW50U3R5bGUs
IGZhbHNlKTsKICAgICAgICAgcmVzdWx0LT5zZXRTdHlsZVR5cGUoUmVuZGVyU3R5bGU6OkZJUlNU
X0xJTkVfSU5IRVJJVEVEKTsKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0ID0gZG9jdW1lbnQo
KS0+c3R5bGVTZWxlY3RvcigpLT5wc2V1ZG9TdHlsZUZvckVsZW1lbnQocHNldWRvLCBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obm9kZSksIHBhcmVudFN0eWxlKTsKLSAgICBpZiAocmVzdWx0ICYmIHVz
ZUNhY2hlZFN0eWxlKSB7Ci0gICAgICAgIHN0eWxlKCktPmFkZFBzZXVkb1N0eWxlKHJlc3VsdCk7
Ci0gICAgICAgIHJlc3VsdC0+ZGVyZWYoZG9jdW1lbnQoKS0+cmVuZGVyQXJlbmEoKSk7Ci0gICAg
fQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAK
IHN0YXRpYyBDb2xvciBkZWNvcmF0aW9uQ29sb3IoUmVuZGVyU3R5bGUqIHN0eWxlKQpJbmRleDog
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuaAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3Niw4ICszNzYsMTEgQEAgcHJpdmF0ZToKICAgICBib29sIGluY2x1
ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGhhc092ZXJmbG93Q2xp
cCgpICYmIChzdHlsZSgpLT5vdmVyZmxvd1goKSA9PSBPU0NST0xMIHx8IHN0eWxlKCktPm92ZXJm
bG93WCgpID09IE9BVVRPKTsgfQogCiBwdWJsaWM6Ci0gICAgUmVuZGVyU3R5bGUqIGdldFBzZXVk
b1N0eWxlKFJlbmRlclN0eWxlOjpQc2V1ZG9JZCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
MCwgYm9vbCB1c2VDYWNoZWRTdHlsZSA9IHRydWUpIGNvbnN0OwotCisgICAgLy8gVGhlIHBzZXVk
byBlbGVtZW50IHN0eWxlIGNhbiBiZSBjYWNoZWQgb3IgdW5jYWNoZWQuICBVc2UgdGhlIGNhY2hl
ZCBtZXRob2QgaWYgdGhlIHBzZXVkbyBlbGVtZW50IGRvZXNuJ3QgcmVzcGVjdAorICAgIC8vIGFu
eSBwc2V1ZG8gY2xhc3NlcyAoYW5kIHRoZXJlZm9yZSBoYXMgbm8gY29uY2VwdCBvZiBjaGFuZ2lu
ZyBzdGF0ZSkuCisgICAgUmVuZGVyU3R5bGUqIGdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0
eWxlOjpQc2V1ZG9JZCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCkgY29uc3Q7CisgICAg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gZ2V0VW5jYWNoZWRQc2V1ZG9TdHlsZShSZW5kZXJTdHls
ZTo6UHNldWRvSWQsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDApIGNvbnN0OworICAgIAog
ICAgIHZvaWQgdXBkYXRlRHJhZ1N0YXRlKGJvb2wgZHJhZ09uKTsKIAogICAgIFJlbmRlclZpZXcq
IHZpZXcoKSBjb25zdDsKQEAgLTUzOSwxNCArNTQyLDE0IEBAIHB1YmxpYzoKICAgICAvLyBDYWxs
ZWQgdG8gdXBkYXRlIGEgc3R5bGUgdGhhdCBpcyBhbGxvd2VkIHRvIHRyaWdnZXIgYW5pbWF0aW9u
cy4KICAgICAvLyBGSVhNRTogUmlnaHQgbm93IHRoaXMgd2lsbCB0eXBpY2FsbHkgYmUgY2FsbGVk
IG9ubHkgd2hlbiB1cGRhdGluZyBoYXBwZW5zIGZyb20gdGhlIERPTSBvbiBleHBsaWNpdCBlbGVt
ZW50cy4KICAgICAvLyBXZSBkb24ndCB5ZXQgaGFuZGxlIGdlbmVyYXRlZCBjb250ZW50IGFuaW1h
dGlvbiBzdWNoIGFzIGZpcnN0LWxldHRlciBvciBiZWZvcmUvYWZ0ZXIgKHdlJ2xsIHdvcnJ5IGFi
b3V0IHRoaXMgbGF0ZXIpLgotICAgIHZvaWQgc2V0QW5pbWF0YWJsZVN0eWxlKFJlbmRlclN0eWxl
Kik7CisgICAgdm9pZCBzZXRBbmltYXRhYmxlU3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4p
OwogCiAgICAgLy8gU2V0IHRoZSBzdHlsZSBvZiB0aGUgb2JqZWN0IGFuZCB1cGRhdGUgdGhlIHN0
YXRlIG9mIHRoZSBvYmplY3QgYWNjb3JkaW5nbHkuCi0gICAgdmlydHVhbCB2b2lkIHNldFN0eWxl
KGNvbnN0IFJlbmRlclN0eWxlKik7CisgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+KTsKIAogICAgIC8vIFVwZGF0ZXMgb25seSB0aGUgbG9jYWwgc3R5bGUg
cHRyIG9mIHRoZSBvYmplY3QuICBEb2VzIG5vdCB1cGRhdGUgdGhlIHN0YXRlIG9mIHRoZSBvYmpl
Y3QsCiAgICAgLy8gYW5kIHNvIG9ubHkgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBzdHlsZSBp
cyBrbm93biBub3QgdG8gaGF2ZSBjaGFuZ2VkIChvciBmcm9tIHNldFN0eWxlKS4KLSAgICB2b2lk
IHNldFN0eWxlSW50ZXJuYWwoUmVuZGVyU3R5bGUqKTsKKyAgICB2b2lkIHNldFN0eWxlSW50ZXJu
YWwoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4pOwogCiAgICAgLy8gcmV0dXJucyB0aGUgY29udGFp
bmluZyBibG9jayBsZXZlbCBlbGVtZW50IGZvciB0aGlzIGVsZW1lbnQuCiAgICAgUmVuZGVyQmxv
Y2sqIGNvbnRhaW5pbmdCbG9jaygpIGNvbnN0OwpAQCAtNjk1LDcgKzY5OCw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGludCBtaW5QcmVmV2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAg
dmlydHVhbCBpbnQgbWF4UHJlZldpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCi0gICAgUmVu
ZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQorICAgIFJlbmRlclN0
eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KICAgICBSZW5kZXJT
dHlsZSogZmlyc3RMaW5lU3R5bGUoKSBjb25zdDsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUoYm9v
bCBmaXJzdExpbmUpIGNvbnN0IHsgcmV0dXJuIGZpcnN0TGluZSA/IGZpcnN0TGluZVN0eWxlKCkg
OiBzdHlsZSgpOyB9CiAKQEAgLTkxMSw3ICs5MTQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBh
cmVuYURlbGV0ZShSZW5kZXJBcmVuYSosIHZvaWQqIG9iamVjdEJhc2UpOwogCiBwcml2YXRlOgot
ICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHls
ZTsKIAogICAgIE5vZGUqIG1fbm9kZTsKIApJbmRleDogcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suY3BwCShyZXZpc2lv
biAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDIxICszNSwyMSBAQCBSZW5kZXJTVkdCbG9jazo6UmVuZGVyU1ZHQmxvY2soU1ZHRWxl
bWVuCiB7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHQmxvY2s6OnNldFN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSkgCit2b2lkIFJlbmRlclNWR0Jsb2NrOjpzZXRTdHlsZShQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBzdHlsZSkgCiB7Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIHVzZVN0eWxlID0g
c3R5bGU7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiB1c2VTdHlsZSA9IHN0eWxlOwogCiAgICAg
Ly8gU1ZHIHRleHQgbGF5b3V0IGNvZGUgZXhwZWN0cyB1cyB0byBiZSBhIGJsb2NrLWxldmVsIHN0
eWxlIGVsZW1lbnQuICAgCiAgICAgaWYgKHVzZVN0eWxlLT5kaXNwbGF5KCkgPT0gTk9ORSkKICAg
ICAgICAgc2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOwogICAgIGVsc2UgaWYgKHVzZVN0eWxlLT5p
c0Rpc3BsYXlJbmxpbmVUeXBlKCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIG5ld1N0eWxlID0g
bmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOwotICAgICAgICBuZXdTdHlsZS0+aW5o
ZXJpdEZyb20oc3R5bGUpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0g
UmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgICAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20odXNl
U3R5bGUuZ2V0KCkpOwogICAgICAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Ci0gICAg
ICAgIHVzZVN0eWxlID0gbmV3U3R5bGU7CisgICAgICAgIHVzZVN0eWxlID0gbmV3U3R5bGUucmVs
ZWFzZSgpOwogICAgIH0KIAotICAgIFJlbmRlckJsb2NrOjpzZXRTdHlsZSh1c2VTdHlsZSk7Cisg
ICAgUmVuZGVyQmxvY2s6OnNldFN0eWxlKHVzZVN0eWxlLnJlbGVhc2UoKSk7CiAgICAgc2V0UmVw
bGFjZWQoZmFsc2UpOwogCiAgICAgLy9GSVhNRTogT25jZSBvdmVyZmxvdyBydWxlcyBhcmUgc3Vw
cG9ydGVkIGJ5IFNWRyB3ZSBzaG91bGQKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5oCShyZXZpc2lvbiAzNzU4
NikKKysrIHJlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3
ICszMyw3IEBAIGNsYXNzIFNWR0VsZW1lbnQ7CiBjbGFzcyBSZW5kZXJTVkdCbG9jayA6IHB1Ymxp
YyBSZW5kZXJCbG9jayB7CiBwdWJsaWM6CiAgICAgUmVuZGVyU1ZHQmxvY2soU1ZHRWxlbWVudCop
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSopOworICAgIHZp
cnR1YWwgdm9pZCBzZXRTdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPik7CiB9OwogCiB9Cklu
ZGV4OiByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJp
bmcvUmVuZGVyU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gMzc2MTQpCisrKyByZW5kZXJpbmcvUmVu
ZGVyU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDEzICsxMTcsMTEgQEAgU2Ny
b2xsYmFyUGFydCBSZW5kZXJTY3JvbGxiYXI6OnBhcnRGb3JTdAogICAgIHJldHVybiBzX3N0eWxl
UmVzb2x2ZVBhcnQ7CiB9CiAKLVJlbmRlclN0eWxlKiBSZW5kZXJTY3JvbGxiYXI6OmdldFNjcm9s
bGJhclBzZXVkb1N0eWxlKFNjcm9sbGJhclBhcnQgcGFydFR5cGUsIFJlbmRlclN0eWxlOjpQc2V1
ZG9JZCBwc2V1ZG9JZCkKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclNjcm9sbGJhcjo6
Z2V0U2Nyb2xsYmFyUHNldWRvU3R5bGUoU2Nyb2xsYmFyUGFydCBwYXJ0VHlwZSwgUmVuZGVyU3R5
bGU6OlBzZXVkb0lkIHBzZXVkb0lkKQogewogICAgIHNfc3R5bGVSZXNvbHZlUGFydCA9IHBhcnRU
eXBlOwogICAgIHNfc3R5bGVSZXNvbHZlU2Nyb2xsYmFyID0gdGhpczsKLSAgICBSZW5kZXJTdHls
ZSogcmVzdWx0ID0gbV9vd25lci0+Z2V0UHNldWRvU3R5bGUocHNldWRvSWQsIG1fb3duZXItPnN0
eWxlKCksIGZhbHNlKTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICByZXN1bHQtPnJlZigpOwor
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVzdWx0ID0gbV9vd25lci0+Z2V0VW5jYWNoZWRQc2V1
ZG9TdHlsZShwc2V1ZG9JZCwgbV9vd25lci0+c3R5bGUoKSk7CiAgICAgc19zdHlsZVJlc29sdmVQ
YXJ0ID0gTm9QYXJ0OwogICAgIHNfc3R5bGVSZXNvbHZlU2Nyb2xsYmFyID0gMDsKICAgICByZXR1
cm4gcmVzdWx0OwpAQCAtMTg1LDcgKzE4Myw3IEBAIHZvaWQgUmVuZGVyU2Nyb2xsYmFyOjp1cGRh
dGVTY3JvbGxiYXJQYXIKICAgICBpZiAocGFydFR5cGUgPT0gTm9QYXJ0KQogICAgICAgICByZXR1
cm47CiAKLSAgICBSZW5kZXJTdHlsZSogcGFydFN0eWxlID0gIWRlc3Ryb3kgPyBnZXRTY3JvbGxi
YXJQc2V1ZG9TdHlsZShwYXJ0VHlwZSwgIHBzZXVkb0ZvclNjcm9sbGJhclBhcnQocGFydFR5cGUp
KSA6IDA7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBwYXJ0U3R5bGUgPSAhZGVzdHJveSA/IGdl
dFNjcm9sbGJhclBzZXVkb1N0eWxlKHBhcnRUeXBlLCAgcHNldWRvRm9yU2Nyb2xsYmFyUGFydChw
YXJ0VHlwZSkpIDogMDsKICAgICAKICAgICBib29sIG5lZWRSZW5kZXJlciA9ICFkZXN0cm95ICYm
IHBhcnRTdHlsZSAmJiBwYXJ0U3R5bGUtPmRpc3BsYXkoKSAhPSBOT05FICYmIHBhcnRTdHlsZS0+
dmlzaWJpbGl0eSgpID09IFZJU0lCTEU7CiAgICAgCkBAIC0yMjMsMTAgKzIyMSw3IEBAIHZvaWQg
UmVuZGVyU2Nyb2xsYmFyOjp1cGRhdGVTY3JvbGxiYXJQYXIKICAgICB9CiAgICAgCiAgICAgaWYg
KHBhcnRSZW5kZXJlcikKLSAgICAgICAgcGFydFJlbmRlcmVyLT5zZXRTdHlsZShwYXJ0U3R5bGUp
OwotICAgICAgICAKLSAgICBpZiAocGFydFN0eWxlKQotICAgICAgICBwYXJ0U3R5bGUtPmRlcmVm
KG1fb3duZXItPnJlbmRlckFyZW5hKCkpOworICAgICAgICBwYXJ0UmVuZGVyZXItPnNldFN0eWxl
KHBhcnRTdHlsZS5yZWxlYXNlKCkpOwogfQogCiB2b2lkIFJlbmRlclNjcm9sbGJhcjo6cGFpbnRQ
YXJ0KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBTY3JvbGxiYXJQYXJ0IHBhcnRU
eXBlLCBjb25zdCBJbnRSZWN0JiByZWN0KQpJbmRleDogcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJh
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaAkocmV2aXNpb24g
Mzc1ODYpCisrKyByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAgIGludCBtaW5pbXVtVGh1bWJMZW5ndGgoKTsKIAog
cHJpdmF0ZToKLSAgICBSZW5kZXJTdHlsZSogZ2V0U2Nyb2xsYmFyUHNldWRvU3R5bGUoU2Nyb2xs
YmFyUGFydCwgUmVuZGVyU3R5bGU6OlBzZXVkb0lkKTsKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBnZXRTY3JvbGxiYXJQc2V1ZG9TdHlsZShTY3JvbGxiYXJQYXJ0LCBSZW5kZXJTdHlsZTo6
UHNldWRvSWQpOwogICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyUGFydChTY3JvbGxiYXJQYXJ0LCBi
b29sIGRlc3Ryb3kgPSBmYWxzZSk7CiAKICAgICBSZW5kZXJPYmplY3QqIG1fb3duZXI7CkluZGV4
OiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVu
ZGVyU2xpZGVyLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcvUmVuZGVyU2xpZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDI0ICsxNjgsMjEgQEAgdm9pZCBSZW5kZXJTbGlk
ZXI6OnN0eWxlRGlkQ2hhbmdlKFJlbmRlcgogewogICAgIFJlbmRlckJsb2NrOjpzdHlsZURpZENo
YW5nZShkaWZmLCBvbGRTdHlsZSk7CiAgICAgCi0gICAgaWYgKG1fdGh1bWIpIHsKLSAgICAgICAg
UmVuZGVyU3R5bGUqIHRodW1iU3R5bGUgPSBjcmVhdGVUaHVtYlN0eWxlKHN0eWxlKCksIG1fdGh1
bWItPnJlbmRlcmVyKCktPnN0eWxlKCkpOwotICAgICAgICBtX3RodW1iLT5yZW5kZXJlcigpLT5z
ZXRTdHlsZSh0aHVtYlN0eWxlKTsKLSAgICB9CisgICAgaWYgKG1fdGh1bWIpCisgICAgICAgIG1f
dGh1bWItPnJlbmRlcmVyKCktPnNldFN0eWxlKGNyZWF0ZVRodW1iU3R5bGUoc3R5bGUoKSwgbV90
aHVtYi0+cmVuZGVyZXIoKS0+c3R5bGUoKSkpOwogICAgICAgICAKICAgICBzZXRSZXBsYWNlZChp
c0lubGluZSgpKTsKIH0KIAotUmVuZGVyU3R5bGUqIFJlbmRlclNsaWRlcjo6Y3JlYXRlVGh1bWJT
dHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclNsaWRlcjo6Y3JlYXRlVGh1
bWJTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHlsZSkKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGU7Ci0KLSAgICBSZW5kZXJTdHls
ZSogcHNldWRvU3R5bGUgPSBnZXRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6U0xJREVSX1RIVU1C
KTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlOworICAgIFJlbmRlclN0eWxlKiBwc2V1
ZG9TdHlsZSA9IGdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTTElERVJfVEhVTUIp
OwogICAgIGlmIChwc2V1ZG9TdHlsZSkKICAgICAgICAgLy8gV2UgbWF5IGJlIHNoYXJpbmcgc3R5
bGUgd2l0aCBhbm90aGVyIHNsaWRlciwgYnV0IHdlIG11c3Qgbm90IHNoYXJlIHRoZSB0aHVtYiBz
dHlsZS4KLSAgICAgICAgc3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCpw
c2V1ZG9TdHlsZSk7CisgICAgICAgIHN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKHBzZXVkb1N0
eWxlKTsKICAgICBlbHNlCi0gICAgICAgIHN0eWxlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5k
ZXJTdHlsZSgpOworICAgICAgICBzdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKIAogICAg
IGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgc3R5bGUtPmluaGVyaXRGcm9tKHBhcmVudFN0eWxl
KTsKQEAgLTIwNCw3ICsyMDEsNyBAQCBSZW5kZXJTdHlsZSogUmVuZGVyU2xpZGVyOjpjcmVhdGVU
aHVtYlN0CiAgICAgZWxzZSBpZiAocGFyZW50U3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVNs
aWRlckFwcGVhcmFuY2UpCiAgICAgICAgIHN0eWxlLT5zZXRBcHBlYXJhbmNlKE1lZGlhU2xpZGVy
VGh1bWJBcHBlYXJhbmNlKTsKIAotICAgIHJldHVybiBzdHlsZTsKKyAgICByZXR1cm4gc3R5bGUu
cmVsZWFzZSgpOwogfQogCiB2b2lkIFJlbmRlclNsaWRlcjo6bGF5b3V0KCkKQEAgLTI0NCw5ICsy
NDEsOSBAQCB2b2lkIFJlbmRlclNsaWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQoKQogewogICAgIGlm
ICghbV90aHVtYikgewogICAgICAgICBtX3RodW1iID0gbmV3IEhUTUxTbGlkZXJUaHVtYkVsZW1l
bnQoZG9jdW1lbnQoKSwgbm9kZSgpKTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHRodW1iU3R5bGUg
PSBjcmVhdGVUaHVtYlN0eWxlKHN0eWxlKCkpOwotICAgICAgICBtX3RodW1iLT5zZXRSZW5kZXJl
cihtX3RodW1iLT5jcmVhdGVSZW5kZXJlcihyZW5kZXJBcmVuYSgpLCB0aHVtYlN0eWxlKSk7Ci0g
ICAgICAgIG1fdGh1bWItPnJlbmRlcmVyKCktPnNldFN0eWxlKHRodW1iU3R5bGUpOworICAgICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IHRodW1iU3R5bGUgPSBjcmVhdGVUaHVtYlN0eWxlKHN0eWxl
KCkpOworICAgICAgICBtX3RodW1iLT5zZXRSZW5kZXJlcihtX3RodW1iLT5jcmVhdGVSZW5kZXJl
cihyZW5kZXJBcmVuYSgpLCB0aHVtYlN0eWxlLmdldCgpKSk7CisgICAgICAgIG1fdGh1bWItPnJl
bmRlcmVyKCktPnNldFN0eWxlKHRodW1iU3R5bGUucmVsZWFzZSgpKTsKICAgICAgICAgbV90aHVt
Yi0+c2V0QXR0YWNoZWQoKTsKICAgICAgICAgbV90aHVtYi0+c2V0SW5Eb2N1bWVudCh0cnVlKTsK
ICAgICAgICAgYWRkQ2hpbGQobV90aHVtYi0+cmVuZGVyZXIoKSk7CkluZGV4OiByZW5kZXJpbmcv
UmVuZGVyU2xpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCShy
ZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNjIsNyArNjIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzdHlsZURpZENoYW5nZShSZW5kZXJTdHlsZTo6RGlmZiwgY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlKTsKICAgICAKICAgICBwcml2YXRlOgotICAgICAgICBSZW5kZXJTdHlsZSogY3Jl
YXRlVGh1bWJTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIGNvbnN0IFJlbmRl
clN0eWxlKiBvbGRTdHlsZSA9IDApOworICAgICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBj
cmVhdGVUaHVtYlN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlID0gMCk7CiAgICAgICAgIGludCB0cmFja1NpemUoKTsKIAogICAg
ICAgICBSZWZQdHI8SFRNTFNsaWRlclRodW1iRWxlbWVudD4gbV90aHVtYjsKSW5kZXg6IHJlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDAsMTAgKzIwMCwxMCBAQCB2b2lkIFJlbmRlclRhYmxlOjphZGRDaGls
ZChSZW5kZXJPYmplY3QqCiAgICAgaWYgKGJlZm9yZUNoaWxkICYmICFiZWZvcmVDaGlsZC0+aXNU
YWJsZVNlY3Rpb24oKSAmJiBiZWZvcmVDaGlsZC0+c3R5bGUoKS0+ZGlzcGxheSgpICE9IFRBQkxF
X0NBUFRJT04gJiYgYmVmb3JlQ2hpbGQtPnN0eWxlKCktPmRpc3BsYXkoKSAhPSBUQUJMRV9DT0xV
TU5fR1JPVVApCiAgICAgICAgIGJlZm9yZUNoaWxkID0gMDsKICAgICBSZW5kZXJUYWJsZVNlY3Rp
b24qIHNlY3Rpb24gPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclRhYmxlU2VjdGlvbihkb2N1
bWVudCgpIC8qIGFub255bW91cyAqLyk7Ci0gICAgUmVuZGVyU3R5bGUqIG5ld1N0eWxlID0gbmV3
IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
bmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgbmV3U3R5bGUtPmluaGVyaXRG
cm9tKHN0eWxlKCkpOwogICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KFRBQkxFX1JPV19HUk9VUCk7
Ci0gICAgc2VjdGlvbi0+c2V0U3R5bGUobmV3U3R5bGUpOworICAgIHNlY3Rpb24tPnNldFN0eWxl
KG5ld1N0eWxlLnJlbGVhc2UoKSk7CiAgICAgYWRkQ2hpbGQoc2VjdGlvbiwgYmVmb3JlQ2hpbGQp
OwogICAgIHNlY3Rpb24tPmFkZENoaWxkKGNoaWxkKTsKIH0KSW5kZXg6IHJlbmRlcmluZy9SZW5k
ZXJUYWJsZVJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNw
cAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MywxMCArOTMsMTAgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6YWRkQ2hp
bGQoUmVuZGVyT2JqZQogICAgICAgICB9CiAKICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxs
ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJUYWJsZUNlbGwoZG9jdW1lbnQoKSAvKiBhbm9u
eW1vdXMgb2JqZWN0ICovKTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIG5ld1N0eWxlID0gbmV3IChy
ZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwogICAgICAgICBuZXdTdHlsZS0+aW5o
ZXJpdEZyb20oc3R5bGUoKSk7CiAgICAgICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KFRBQkxFX0NF
TEwpOwotICAgICAgICBjZWxsLT5zZXRTdHlsZShuZXdTdHlsZSk7CisgICAgICAgIGNlbGwtPnNl
dFN0eWxlKG5ld1N0eWxlLnJlbGVhc2UoKSk7CiAgICAgICAgIGFkZENoaWxkKGNlbGwsIGJlZm9y
ZUNoaWxkKTsKICAgICAgICAgY2VsbC0+YWRkQ2hpbGQoY2hpbGQpOwogICAgICAgICByZXR1cm47
CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBy
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDEwICsx
MTIsMTAgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKFJlbmRlcgogICAgICAg
ICB9CiAKICAgICAgICAgUmVuZGVyT2JqZWN0KiByb3cgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJl
bmRlclRhYmxlUm93KGRvY3VtZW50KCkgLyogYW5vbnltb3VzIHRhYmxlICovKTsKLSAgICAgICAg
UmVuZGVyU3R5bGUqIG5ld1N0eWxlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgp
OworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNy
ZWF0ZSgpOwogICAgICAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20oc3R5bGUoKSk7CiAgICAgICAg
IG5ld1N0eWxlLT5zZXREaXNwbGF5KFRBQkxFX1JPVyk7Ci0gICAgICAgIHJvdy0+c2V0U3R5bGUo
bmV3U3R5bGUpOworICAgICAgICByb3ctPnNldFN0eWxlKG5ld1N0eWxlLnJlbGVhc2UoKSk7CiAg
ICAgICAgIGFkZENoaWxkKHJvdywgYmVmb3JlQ2hpbGQpOwogICAgICAgICByb3ctPmFkZENoaWxk
KGNoaWxkKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShy
ZXZpc2lvbiAzNzU4NikKKysrIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpzdHls
ZURpZENoYW5nZShSCiAKICAgICBpZiAobV9pbm5lclRleHQpIHsKICAgICAgICAgUmVuZGVyQmxv
Y2sqIHRleHRCbG9ja1JlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihtX2lubmVy
VGV4dC0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiB0ZXh0QmxvY2tTdHlsZSA9
IGNyZWF0ZUlubmVyVGV4dFN0eWxlKHN0eWxlKCkpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IHRleHRCbG9ja1N0eWxlID0gY3JlYXRlSW5uZXJUZXh0U3R5bGUoc3R5bGUoKSk7CiAgICAg
ICAgIC8vIFdlIG1heSBoYXZlIHNldCB0aGUgd2lkdGggYW5kIHRoZSBoZWlnaHQgaW4gdGhlIG9s
ZCBzdHlsZSBpbiBsYXlvdXQoKS4gUmVzZXQgdGhlbSBub3cgdG8gYXZvaWQKICAgICAgICAgLy8g
Z2V0dGluZyBhIHNwdXJpb3VzIGxheW91dCBoaW50LgogICAgICAgICB0ZXh0QmxvY2tSZW5kZXJl
ci0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aCgpKTsKQEAgLTE0Myw5ICsxNDMsOSBAQCB2b2lk
IFJlbmRlclRleHRDb250cm9sOjpzdHlsZURpZENoYW5nZShSCiAgICAgc2V0UmVwbGFjZWQoaXNJ
bmxpbmUoKSk7CiB9CiAKLVJlbmRlclN0eWxlKiBSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlSW5u
ZXJCbG9ja1N0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKQorUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2w6OmNyZWF0ZUlubmVyQmxvY2tTdHlsZShjb25z
dCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSkKIHsKLSAgICBSZW5kZXJTdHlsZSogaW5uZXJCbG9j
a1N0eWxlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOworICAgIFJlZlB0cjxS
ZW5kZXJTdHlsZT4gaW5uZXJCbG9ja1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwogCiAg
ICAgaW5uZXJCbG9ja1N0eWxlLT5pbmhlcml0RnJvbShzdGFydFN0eWxlKTsKICAgICBpbm5lckJs
b2NrU3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwpAQCAtMTUzLDIwICsxNTMsMjAgQEAgUmVuZGVy
U3R5bGUqIFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVJbgogICAgIC8vIFdlIGRvbid0IHdhbnQg
dGhlIHNoYWRvdyBkb20gdG8gYmUgZWRpdGFibGUsIHNvIHdlIHNldCB0aGlzIGJsb2NrIHRvIHJl
YWQtb25seSBpbiBjYXNlIHRoZSBpbnB1dCBpdHNlbGYgaXMgZWRpdGFibGUuCiAgICAgaW5uZXJC
bG9ja1N0eWxlLT5zZXRVc2VyTW9kaWZ5KFJFQURfT05MWSk7CiAKLSAgICByZXR1cm4gaW5uZXJC
bG9ja1N0eWxlOworICAgIHJldHVybiBpbm5lckJsb2NrU3R5bGUucmVsZWFzZSgpOwogfQogCi1S
ZW5kZXJTdHlsZSogUmVuZGVyVGV4dENvbnRyb2w6OmNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0
IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVy
VGV4dENvbnRyb2w6OmNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFy
dFN0eWxlKQogewogICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4obm9kZSgpKTsKICAgICBib29sIHBsYWNlaG9s
ZGVyU2hvdWxkQmVWaXNpYmxlID0gIW1fbXVsdGlMaW5lICYmIHN0YXRpY19jYXN0PEhUTUxJbnB1
dEVsZW1lbnQqPihlbGVtZW50KS0+cGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKTsKIAotICAg
IFJlbmRlclN0eWxlKiB0ZXh0QmxvY2tTdHlsZSA9IDA7CisgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiB0ZXh0QmxvY2tTdHlsZTsKICAgICBpZiAocGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUpIHsK
LSAgICAgICAgUmVuZGVyU3R5bGUqIHBzZXVkb1N0eWxlID0gZ2V0UHNldWRvU3R5bGUoUmVuZGVy
U3R5bGU6OklOUFVUX1BMQUNFSE9MREVSKTsKLSAgICAgICAgdGV4dEJsb2NrU3R5bGUgPSBuZXcg
KHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCpwc2V1ZG9TdHlsZSk7CisgICAgICAgIFJlbmRl
clN0eWxlKiBwc2V1ZG9TdHlsZSA9IGdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpJ
TlBVVF9QTEFDRUhPTERFUik7CisgICAgICAgIHRleHRCbG9ja1N0eWxlID0gUmVuZGVyU3R5bGU6
OmNsb25lKHBzZXVkb1N0eWxlKTsKICAgICB9IGVsc2UgewotICAgICAgICB0ZXh0QmxvY2tTdHls
ZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsgICAgCisgICAgICAgIHRleHRC
bG9ja1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOyAgIAogICAgICAgICB0ZXh0QmxvY2tT
dHlsZS0+aW5oZXJpdEZyb20oc3RhcnRTdHlsZSk7CiAgICAgfQogICAgIApAQCAtMjIzLDQ2ICsy
MjMsNDYgQEAgUmVuZGVyU3R5bGUqIFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVJbgogICAgIGlm
ICghZWxlbWVudC0+aXNFbmFibGVkKCkpCiAgICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRDb2xv
cihkaXNhYmxlZFRleHRDb2xvcih0ZXh0QmxvY2tTdHlsZS0+Y29sb3IoKSwgc3RhcnRTdHlsZS0+
YmFja2dyb3VuZENvbG9yKCkpKTsKIAotICAgIHJldHVybiB0ZXh0QmxvY2tTdHlsZTsKKyAgICBy
ZXR1cm4gdGV4dEJsb2NrU3R5bGUucmVsZWFzZSgpOwogfQogCi1SZW5kZXJTdHlsZSogUmVuZGVy
VGV4dENvbnRyb2w6OmNyZWF0ZVJlc3VsdHNCdXR0b25TdHlsZShjb25zdCBSZW5kZXJTdHlsZSog
c3RhcnRTdHlsZSkKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sOjpj
cmVhdGVSZXN1bHRzQnV0dG9uU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpCiB7
CiAgICAgQVNTRVJUKCFtX211bHRpTGluZSk7CiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQg
PSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKTsKLSAgICBSZW5kZXJTdHls
ZSogcmVzdWx0c0Jsb2NrU3R5bGU7CisgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZXN1bHRzQmxv
Y2tTdHlsZTsKICAgICBpZiAoaW5wdXQtPm1heFJlc3VsdHMoKSA8IDApCi0gICAgICAgIHJlc3Vs
dHNCbG9ja1N0eWxlID0gZ2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNFQVJDSF9ERUNPUkFU
SU9OKTsKKyAgICAgICAgcmVzdWx0c0Jsb2NrU3R5bGUgPSBnZXRDYWNoZWRQc2V1ZG9TdHlsZShS
ZW5kZXJTdHlsZTo6U0VBUkNIX0RFQ09SQVRJT04pOwogICAgIGVsc2UgaWYgKCFpbnB1dC0+bWF4
UmVzdWx0cygpKQotICAgICAgICByZXN1bHRzQmxvY2tTdHlsZSA9IGdldFBzZXVkb1N0eWxlKFJl
bmRlclN0eWxlOjpTRUFSQ0hfUkVTVUxUU19ERUNPUkFUSU9OKTsKKyAgICAgICAgcmVzdWx0c0Js
b2NrU3R5bGUgPSBnZXRDYWNoZWRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6U0VBUkNIX1JFU1VM
VFNfREVDT1JBVElPTik7CiAgICAgZWxzZQotICAgICAgICByZXN1bHRzQmxvY2tTdHlsZSA9IGdl
dFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTRUFSQ0hfUkVTVUxUU19CVVRUT04pOworICAgICAg
ICByZXN1bHRzQmxvY2tTdHlsZSA9IGdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpT
RUFSQ0hfUkVTVUxUU19CVVRUT04pOwogCiAgICAgaWYgKCFyZXN1bHRzQmxvY2tTdHlsZSkKLSAg
ICAgICAgcmVzdWx0c0Jsb2NrU3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxl
KCk7CisgICAgICAgIHJlc3VsdHNCbG9ja1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwog
CiAgICAgaWYgKHN0YXJ0U3R5bGUpCiAgICAgICAgIHJlc3VsdHNCbG9ja1N0eWxlLT5pbmhlcml0
RnJvbShzdGFydFN0eWxlKTsKIAotICAgIHJldHVybiByZXN1bHRzQmxvY2tTdHlsZTsKKyAgICBy
ZXR1cm4gcmVzdWx0c0Jsb2NrU3R5bGUucmVsZWFzZSgpOwogfQogCi1SZW5kZXJTdHlsZSogUmVu
ZGVyVGV4dENvbnRyb2w6OmNyZWF0ZUNhbmNlbEJ1dHRvblN0eWxlKGNvbnN0IFJlbmRlclN0eWxl
KiBzdGFydFN0eWxlKQorUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2w6
OmNyZWF0ZUNhbmNlbEJ1dHRvblN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKQog
ewotICAgIFJlbmRlclN0eWxlKiBjYW5jZWxCbG9ja1N0eWxlOworICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gY2FuY2VsQmxvY2tTdHlsZTsKICAgICAKLSAgICBpZiAoUmVuZGVyU3R5bGUqIHBzZXVk
b1N0eWxlID0gZ2V0UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlNFQVJDSF9DQU5DRUxfQlVUVE9O
KSkKKyAgICBpZiAoUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZSA9IGdldENhY2hlZFBz
ZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpTRUFSQ0hfQ0FOQ0VMX0JVVFRPTikpCiAgICAgICAgIC8v
IFdlIG1heSBiZSBzaGFyaW5nIHN0eWxlIHdpdGggYW5vdGhlciBzZWFyY2ggZmllbGQsIGJ1dCB3
ZSBtdXN0IG5vdCBzaGFyZSB0aGUgY2FuY2VsIGJ1dHRvbiBzdHlsZS4KLSAgICAgICAgY2FuY2Vs
QmxvY2tTdHlsZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKnBzZXVkb1N0eWxl
KTsKKyAgICAgICAgY2FuY2VsQmxvY2tTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShwc2V1ZG9T
dHlsZS5nZXQoKSk7CiAgICAgZWxzZQotICAgICAgICBjYW5jZWxCbG9ja1N0eWxlID0gbmV3IChy
ZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgpOworICAgICAgICBjYW5jZWxCbG9ja1N0eWxlID0g
UmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwogCiAgICAgaWYgKHN0YXJ0U3R5bGUpCiAgICAgICAgIGNh
bmNlbEJsb2NrU3R5bGUtPmluaGVyaXRGcm9tKHN0YXJ0U3R5bGUpOwogCi0gICAgdXBkYXRlQ2Fu
Y2VsQnV0dG9uVmlzaWJpbGl0eShjYW5jZWxCbG9ja1N0eWxlKTsKKyAgICB1cGRhdGVDYW5jZWxC
dXR0b25WaXNpYmlsaXR5KGNhbmNlbEJsb2NrU3R5bGUuZ2V0KCkpOwogCi0gICAgcmV0dXJuIGNh
bmNlbEJsb2NrU3R5bGU7CisgICAgcmV0dXJuIGNhbmNlbEJsb2NrU3R5bGUucmVsZWFzZSgpOwog
fQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVTdWJ0cmVlSWZOZWVkZWQoKQpAQCAt
MjcxLDE4ICsyNzEsMTIgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlU3VidHJlZUlm
TgogICAgIGlmIChpc1NlYXJjaEZpZWxkICYmICFtX2lubmVyQmxvY2spIHsKICAgICAgICAgLy8g
Q3JlYXRlIHRoZSBpbm5lciBibG9jayBlbGVtZW50CiAgICAgICAgIG1faW5uZXJCbG9jayA9IG5l
dyBUZXh0Q29udHJvbElubmVyRWxlbWVudChkb2N1bWVudCgpLCBub2RlKCkpOwotICAgICAgICBS
ZW5kZXJTdHlsZSogaW5uZXJCbG9ja1N0eWxlID0gY3JlYXRlSW5uZXJCbG9ja1N0eWxlKHN0eWxl
KCkpOwotICAgICAgICBpbm5lckJsb2NrU3R5bGUtPnJlZigpOwotICAgICAgICBtX2lubmVyQmxv
Y2stPmF0dGFjaElubmVyRWxlbWVudChub2RlKCksIGlubmVyQmxvY2tTdHlsZSwgcmVuZGVyQXJl
bmEoKSk7Ci0gICAgICAgIGlubmVyQmxvY2tTdHlsZS0+ZGVyZWYocmVuZGVyQXJlbmEoKSk7Cisg
ICAgICAgIG1faW5uZXJCbG9jay0+YXR0YWNoSW5uZXJFbGVtZW50KG5vZGUoKSwgY3JlYXRlSW5u
ZXJCbG9ja1N0eWxlKHN0eWxlKCkpLCByZW5kZXJBcmVuYSgpKTsKICAgICB9CiAgICAgaWYgKGlz
U2VhcmNoRmllbGQgJiYgIW1fcmVzdWx0c0J1dHRvbikgewogICAgICAgICAvLyBDcmVhdGUgdGhl
IHNlYXJjaCByZXN1bHRzIGJ1dHRvbiBlbGVtZW50CiAgICAgICAgIG1fcmVzdWx0c0J1dHRvbiA9
IG5ldyBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50KGRvY3VtZW50KCkpOwotICAgICAg
ICBSZW5kZXJTdHlsZSogcmVzdWx0c0J1dHRvblN0eWxlID0gY3JlYXRlUmVzdWx0c0J1dHRvblN0
eWxlKG1faW5uZXJCbG9jay0+cmVuZGVyZXIoKS0+c3R5bGUoKSk7Ci0gICAgICAgIHJlc3VsdHNC
dXR0b25TdHlsZS0+cmVmKCk7Ci0gICAgICAgIG1fcmVzdWx0c0J1dHRvbi0+YXR0YWNoSW5uZXJF
bGVtZW50KG1faW5uZXJCbG9jay5nZXQoKSwgcmVzdWx0c0J1dHRvblN0eWxlLCByZW5kZXJBcmVu
YSgpKTsKLSAgICAgICAgcmVzdWx0c0J1dHRvblN0eWxlLT5kZXJlZihyZW5kZXJBcmVuYSgpKTsK
KyAgICAgICAgbV9yZXN1bHRzQnV0dG9uLT5hdHRhY2hJbm5lckVsZW1lbnQobV9pbm5lckJsb2Nr
LmdldCgpLCBjcmVhdGVSZXN1bHRzQnV0dG9uU3R5bGUobV9pbm5lckJsb2NrLT5yZW5kZXJlcigp
LT5zdHlsZSgpKSwgcmVuZGVyQXJlbmEoKSk7CiAgICAgfQogICAgIGlmICghbV9pbm5lclRleHQp
IHsKICAgICAgICAgLy8gQ3JlYXRlIHRoZSB0ZXh0IGJsb2NrIGVsZW1lbnQKQEAgLTI5MiwxOSAr
Mjg2LDEzIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmNyZWF0ZVN1YnRyZWVJZk4KICAgICAg
ICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gc3R5bGUoKTsKICAgICAgICAgaWYgKG1faW5u
ZXJCbG9jaykKICAgICAgICAgICAgIHBhcmVudFN0eWxlID0gbV9pbm5lckJsb2NrLT5yZW5kZXJl
cigpLT5zdHlsZSgpOwotICAgICAgICBSZW5kZXJTdHlsZSogdGV4dEJsb2NrU3R5bGUgPSBjcmVh
dGVJbm5lclRleHRTdHlsZShwYXJlbnRTdHlsZSk7Ci0gICAgICAgIHRleHRCbG9ja1N0eWxlLT5y
ZWYoKTsKICAgICAgICAgbV9pbm5lclRleHQgPSBuZXcgVGV4dENvbnRyb2xJbm5lclRleHRFbGVt
ZW50KGRvY3VtZW50KCksIG1faW5uZXJCbG9jayA/IDAgOiBub2RlKCkpOwotICAgICAgICBtX2lu
bmVyVGV4dC0+YXR0YWNoSW5uZXJFbGVtZW50KG1faW5uZXJCbG9jayA/IG1faW5uZXJCbG9jay5n
ZXQoKSA6IG5vZGUoKSwgdGV4dEJsb2NrU3R5bGUsIHJlbmRlckFyZW5hKCkpOwotICAgICAgICB0
ZXh0QmxvY2tTdHlsZS0+ZGVyZWYocmVuZGVyQXJlbmEoKSk7CisgICAgICAgIG1faW5uZXJUZXh0
LT5hdHRhY2hJbm5lckVsZW1lbnQobV9pbm5lckJsb2NrID8gbV9pbm5lckJsb2NrLmdldCgpIDog
bm9kZSgpLCBjcmVhdGVJbm5lclRleHRTdHlsZShwYXJlbnRTdHlsZSksIHJlbmRlckFyZW5hKCkp
OwogICAgIH0KICAgICBpZiAoaXNTZWFyY2hGaWVsZCAmJiAhbV9jYW5jZWxCdXR0b24pIHsKICAg
ICAgICAgLy8gQ3JlYXRlIHRoZSBjYW5jZWwgYnV0dG9uIGVsZW1lbnQKICAgICAgICAgbV9jYW5j
ZWxCdXR0b24gPSBuZXcgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50KGRvY3VtZW50KCkp
OwotICAgICAgICBSZW5kZXJTdHlsZSogY2FuY2VsQnV0dG9uU3R5bGUgPSBjcmVhdGVDYW5jZWxC
dXR0b25TdHlsZShtX2lubmVyQmxvY2stPnJlbmRlcmVyKCktPnN0eWxlKCkpOwotICAgICAgICBj
YW5jZWxCdXR0b25TdHlsZS0+cmVmKCk7Ci0gICAgICAgIG1fY2FuY2VsQnV0dG9uLT5hdHRhY2hJ
bm5lckVsZW1lbnQobV9pbm5lckJsb2NrLmdldCgpLCBjYW5jZWxCdXR0b25TdHlsZSwgcmVuZGVy
QXJlbmEoKSk7Ci0gICAgICAgIGNhbmNlbEJ1dHRvblN0eWxlLT5kZXJlZihyZW5kZXJBcmVuYSgp
KTsKKyAgICAgICAgbV9jYW5jZWxCdXR0b24tPmF0dGFjaElubmVyRWxlbWVudChtX2lubmVyQmxv
Y2suZ2V0KCksIGNyZWF0ZUNhbmNlbEJ1dHRvblN0eWxlKG1faW5uZXJCbG9jay0+cmVuZGVyZXIo
KS0+c3R5bGUoKSksIHJlbmRlckFyZW5hKCkpOwogICAgIH0KIH0KIApAQCAtMTE5MCwxNCArMTE3
OCwxMiBAQCBGb250U2VsZWN0b3IqIFJlbmRlclRleHRDb250cm9sOjpmb250U2VsCiB2b2lkIFJl
bmRlclRleHRDb250cm9sOjp1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoKQogewogICAgIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IG1faW5uZXJCbG9jayA/IG1faW5uZXJCbG9jay0+cmVu
ZGVyZXIoKS0+c3R5bGUoKSA6IHN0eWxlKCk7Ci0gICAgUmVuZGVyU3R5bGUqIHRleHRCbG9ja1N0
eWxlID0gY3JlYXRlSW5uZXJUZXh0U3R5bGUocGFyZW50U3R5bGUpOwotICAgIHRleHRCbG9ja1N0
eWxlLT5yZWYoKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHRleHRCbG9ja1N0eWxlID0gY3Jl
YXRlSW5uZXJUZXh0U3R5bGUocGFyZW50U3R5bGUpOwogICAgIG1faW5uZXJUZXh0LT5yZW5kZXJl
cigpLT5zZXRTdHlsZSh0ZXh0QmxvY2tTdHlsZSk7CiAgICAgZm9yIChOb2RlKiBuID0gbV9pbm5l
clRleHQtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUobV9pbm5lclRl
eHQuZ2V0KCkpKSB7CiAgICAgICAgIGlmIChuLT5yZW5kZXJlcigpKQogICAgICAgICAgICAgbi0+
cmVuZGVyZXIoKS0+c2V0U3R5bGUodGV4dEJsb2NrU3R5bGUpOwogICAgIH0KLSAgICB0ZXh0Qmxv
Y2tTdHlsZS0+ZGVyZWYocmVuZGVyQXJlbmEoKSk7CiAgICAgdXBkYXRlRnJvbUVsZW1lbnQoKTsK
IH0KIApJbmRleDogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgJKHJldmlzaW9uIDM3NTg2KQorKysgcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiwxMCArMTMyLDEw
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3Q7
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9s
bGJhckNsaWVudCosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSk7
CiAKLSAgICBSZW5kZXJTdHlsZSogY3JlYXRlSW5uZXJCbG9ja1N0eWxlKGNvbnN0IFJlbmRlclN0
eWxlKiBzdGFydFN0eWxlKTsKLSAgICBSZW5kZXJTdHlsZSogY3JlYXRlSW5uZXJUZXh0U3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpOwotICAgIFJlbmRlclN0eWxlKiBjcmVhdGVD
YW5jZWxCdXR0b25TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSk7Ci0gICAgUmVu
ZGVyU3R5bGUqIGNyZWF0ZVJlc3VsdHNCdXR0b25TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3Rh
cnRTdHlsZSk7CisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlSW5uZXJCbG9ja1N0
eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKTsKKyAgICBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBjcmVhdGVJbm5lclRleHRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHls
ZSk7CisgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlQ2FuY2VsQnV0dG9uU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpOworICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IGNyZWF0ZVJlc3VsdHNCdXR0b25TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHls
ZSk7CiAKICAgICB2b2lkIGNyZWF0ZVN1YnRyZWVJZk5lZWRlZCgpOwogICAgIHZvaWQgdXBkYXRl
Q2FuY2VsQnV0dG9uVmlzaWJpbGl0eShSZW5kZXJTdHlsZSopOwpJbmRleDogcmVuZGVyaW5nL1Rl
eHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1RleHRD
b250cm9sSW5uZXJFbGVtZW50cy5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgcmVuZGVyaW5nL1Rl
eHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEzICs1OSwx
MyBAQCBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6VGV4dENvbnRyb2xJbm5lCiB7CiB9CiAKLXZv
aWQgVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OmF0dGFjaElubmVyRWxlbWVudChOb2RlKiBwYXJl
bnQsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyQXJlbmEqIGFyZW5hKQordm9pZCBUZXh0Q29u
dHJvbElubmVyRWxlbWVudDo6YXR0YWNoSW5uZXJFbGVtZW50KE5vZGUqIHBhcmVudCwgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUsIFJlbmRlckFyZW5hKiBhcmVuYSkKIHsKICAgICAvLyBX
aGVuIGFkZGluZyB0aGVzZSBlbGVtZW50cywgY3JlYXRlIHRoZSByZW5kZXJlciAmIHN0eWxlIGZp
cnN0IGJlZm9yZSBhZGRpbmcgdG8gdGhlIERPTS4KICAgICAvLyBPdGhlcndpc2UsIHRoZSByZW5k
ZXIgdHJlZSB3aWxsIGNyZWF0ZSBzb21lIGFub255bW91cyBibG9ja3MgdGhhdCB3aWxsIG1lc3Mg
dXAgb3VyIGxheW91dC4KIAogICAgIC8vIENyZWF0ZSB0aGUgcmVuZGVyZXIgd2l0aCB0aGUgc3Bl
Y2lmaWVkIHN0eWxlCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNyZWF0ZVJlbmRlcmVy
KGFyZW5hLCBzdHlsZSk7CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNyZWF0ZVJlbmRl
cmVyKGFyZW5hLCBzdHlsZS5nZXQoKSk7CiAgICAgaWYgKHJlbmRlcmVyKSB7CiAgICAgICAgIHNl
dFJlbmRlcmVyKHJlbmRlcmVyKTsKICAgICAgICAgcmVuZGVyZXItPnNldFN0eWxlKHN0eWxlKTsK
SW5kZXg6IHJlbmRlcmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSByZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgJKHJldmlzaW9uIDM3NTg2KQor
KysgcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkb3dOb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9zaGFkb3dQYXJlbnQ7IH0KICAgICB2aXJ0dWFsIE5vZGUqIHNoYWRv
d1BhcmVudE5vZGUoKSB7IHJldHVybiBtX3NoYWRvd1BhcmVudDsgfQogICAgIHZvaWQgc2V0U2hh
ZG93UGFyZW50Tm9kZShOb2RlKiBub2RlKSB7IG1fc2hhZG93UGFyZW50ID0gbm9kZTsgfQotICAg
IHZvaWQgYXR0YWNoSW5uZXJFbGVtZW50KE5vZGUqLCBSZW5kZXJTdHlsZSosIFJlbmRlckFyZW5h
Kik7CisgICAgdm9pZCBhdHRhY2hJbm5lckVsZW1lbnQoTm9kZSosIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+LCBSZW5kZXJBcmVuYSopOwogICAgIAogcHJpdmF0ZToKICAgICBOb2RlKiBtX3NoYWRv
d1BhcmVudDsKSW5kZXg6IHJlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHJlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuY3BwCShyZXZpc2lvbiAzNzU4NikK
KysrIHJlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MiwxMCArMzIsNiBAQCBLZXlmcmFtZUxpc3Q6On5LZXlmcmFtZUxpc3QoKQogCiB2b2lkIEtleWZy
YW1lTGlzdDo6Y2xlYXIoKQogewotICAgIGZvciAoVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLmJlZ2luKCk7IGl0ICE9IG1fa2V5ZnJhbWVzLmVu
ZCgpOyArK2l0KQotICAgICAgICBpZiAoaXQtPnN0eWxlKQotICAgICAgICAgICAgaXQtPnN0eWxl
LT5kZXJlZihtX3JlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKTsKLQogICAgIG1fa2V5ZnJhbWVzLmNs
ZWFyKCk7CiAgICAgbV9wcm9wZXJ0aWVzLmNsZWFyKCk7CiB9CkBAIC00NywxMSArNDMsMTEgQEAg
Ym9vbCBLZXlmcmFtZUxpc3Q6Om9wZXJhdG9yPT0oY29uc3QgS2V5ZgogCiAgICAgVmVjdG9yPEtl
eWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpdDIgPSBvLm1fa2V5ZnJhbWVzLmJlZ2luKCk7
CiAgICAgZm9yIChWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGl0MSA9IG1f
a2V5ZnJhbWVzLmJlZ2luKCk7IGl0MSAhPSBtX2tleWZyYW1lcy5lbmQoKTsgKytpdDEpIHsKLSAg
ICAgICAgaWYgKGl0MS0+a2V5ICE9IGl0Mi0+a2V5KQorICAgICAgICBpZiAoaXQxLT5tX2tleSAh
PSBpdDItPm1fa2V5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUxID0gaXQxLT5zdHlsZTsKLSAgICAgICAgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlMiA9IGl0Mi0+c3R5bGU7Ci0gICAgICAgIGlmICghKHN0eWxlMSA9PSBzdHlsZTIp
KQorICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUxID0gKml0MS0+bV9zdHlsZTsKKyAg
ICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlMiA9ICppdDItPm1fc3R5bGU7CisgICAgICAg
IGlmIChzdHlsZTEgIT0gc3R5bGUyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICArK2l0MjsKICAgICB9CkBAIC01OSw3ICs1NSw3IEBAIGJvb2wgS2V5ZnJhbWVMaXN0OjpvcGVy
YXRvcj09KGNvbnN0IEtleWYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBLZXlmcmFtZUxp
c3Q6Omluc2VydChmbG9hdCBrZXksIFJlbmRlclN0eWxlKiBzdHlsZSkKK3ZvaWQgS2V5ZnJhbWVM
aXN0OjppbnNlcnQoZmxvYXQga2V5LCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZSkKIHsK
ICAgICBpZiAoa2V5IDwgMCB8fCBrZXkgPiAxKQogICAgICAgICByZXR1cm47CkBAIC02NywxMSAr
NjMsMTEgQEAgdm9pZCBLZXlmcmFtZUxpc3Q6Omluc2VydChmbG9hdCBrZXksIFJlbgogICAgIGlu
dCBpbmRleCA9IC0xOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9rZXlmcmFt
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fa2V5ZnJhbWVzW2ldLmtleSA9PSBrZXkp
IHsKKyAgICAgICAgaWYgKG1fa2V5ZnJhbWVzW2ldLm1fa2V5ID09IGtleSkgewogICAgICAgICAg
ICAgaW5kZXggPSAoaW50KSBpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKG1fa2V5ZnJhbWVzW2ldLmtleSA+IGtleSkgeworICAgICAgICBpZiAobV9rZXlmcmFt
ZXNbaV0ubV9rZXkgPiBrZXkpIHsKICAgICAgICAgICAgIC8vIGluc2VydCBiZWZvcmUKICAgICAg
ICAgICAgIG1fa2V5ZnJhbWVzLmluc2VydChpLCBLZXlmcmFtZVZhbHVlKCkpOwogICAgICAgICAg
ICAgaW5kZXggPSAoaW50KSBpOwpAQCAtODUsMTIgKzgxLDggQEAgdm9pZCBLZXlmcmFtZUxpc3Q6
Omluc2VydChmbG9hdCBrZXksIFJlbgogICAgICAgICBtX2tleWZyYW1lcy5hcHBlbmQoS2V5ZnJh
bWVWYWx1ZSgpKTsKICAgICB9CiAgICAgCi0gICAgaWYgKHN0eWxlKQotICAgICAgICBzdHlsZS0+
cmVmKCk7Ci0gICAgaWYgKG1fa2V5ZnJhbWVzW2luZGV4XS5zdHlsZSkKLSAgICAgICAgbV9rZXlm
cmFtZXNbaW5kZXhdLnN0eWxlLT5kZXJlZihtX3JlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKTsKLSAg
ICBtX2tleWZyYW1lc1tpbmRleF0ua2V5ID0ga2V5OwotICAgIG1fa2V5ZnJhbWVzW2luZGV4XS5z
dHlsZSA9IHN0eWxlOworICAgIG1fa2V5ZnJhbWVzW2luZGV4XS5tX2tleSA9IGtleTsKKyAgICBt
X2tleWZyYW1lc1tpbmRleF0ubV9zdHlsZSA9IHN0eWxlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiByZW5kZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcmVuZGVyaW5nL3N0eWxlL0tleWZyYW1lTGlzdC5oCShyZXZpc2lvbiAzNzU4NikKKysrIHJl
bmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNywxMyArMzgsMTUgQEAgY2xhc3MgUmVuZGVyU3R5bGU7
CiBjbGFzcyBLZXlmcmFtZVZhbHVlIHsKIHB1YmxpYzoKICAgICBLZXlmcmFtZVZhbHVlKCkKLSAg
ICAgICAgOiBrZXkoLTEpCi0gICAgICAgICwgc3R5bGUoMCkKKyAgICAgICAgOiBtX2tleSgtMSkK
ICAgICB7CiAgICAgfQogCi0gICAgZmxvYXQga2V5OwotICAgIFJlbmRlclN0eWxlKiBzdHlsZTsK
KyAgICBmbG9hdCBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQorICAgIGNvbnN0IFJlbmRl
clN0eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KKworICAgIGZs
b2F0IG1fa2V5OworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKIH07CiAKIGNsYXNz
IEtleWZyYW1lTGlzdCB7CkBAIC02Miw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGFuaW1hdGlvbk5hbWUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlv
bk5hbWU7IH0KICAgICAKLSAgICB2b2lkIGluc2VydChmbG9hdCBrZXksIFJlbmRlclN0eWxlKiBz
dHlsZSk7CisgICAgdm9pZCBpbnNlcnQoZmxvYXQga2V5LCBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBzdHlsZSk7CiAgICAgCiAgICAgdm9pZCBhZGRQcm9wZXJ0eShpbnQgcHJvcCkgeyBtX3Byb3Bl
cnRpZXMuYWRkKHByb3ApOyB9CiAgICAgYm9vbCBjb250YWluc1Byb3BlcnR5KGludCBwcm9wKSBj
b25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuY29udGFpbnMocHJvcCk7IH0KSW5kZXg6IHJlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw1NSArMzMsMzUgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUmVuZGVyU3R5bGUqIGRlZmF1bHRTdHlsZTsKLQotdm9p
ZCogUmVuZGVyU3R5bGU6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIFJlbmRlckFyZW5hKiByZW5k
ZXJBcmVuYSkgdGhyb3coKQoraW5saW5lIFJlbmRlclN0eWxlKiBkZWZhdWx0U3R5bGUoKQogewot
ICAgIHJldHVybiByZW5kZXJBcmVuYS0+YWxsb2NhdGUoc3opOworICAgIFJlbmRlclN0eWxlKiBz
X2RlZmF1bHRTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVEZWZhdWx0U3R5bGUoKS5yZWxlYXNl
UmVmKCk7CisgICAgcmV0dXJuIHNfZGVmYXVsdFN0eWxlOwogfQogCi12b2lkIFJlbmRlclN0eWxl
OjpvcGVyYXRvciBkZWxldGUodm9pZCogcHRyLCBzaXplX3Qgc3opCitQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBSZW5kZXJTdHlsZTo6Y3JlYXRlKCkKIHsKLSAgICAvLyBTdGFzaCBzaXplIHdoZXJl
IGRlc3Ryb3kgY2FuIGZpbmQgaXQuCi0gICAgKihzaXplX3QgKilwdHIgPSBzejsKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFJlbmRlclN0eWxlKCkpOwogfQogCi12b2lkIFJlbmRlclN0eWxlOjph
cmVuYURlbGV0ZShSZW5kZXJBcmVuYSAqYXJlbmEpCitQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBS
ZW5kZXJTdHlsZTo6Y3JlYXRlRGVmYXVsdFN0eWxlKCkKIHsKLSAgICBSZW5kZXJTdHlsZSogcHMg
PSBwc2V1ZG9TdHlsZTsKLSAgICBSZW5kZXJTdHlsZSogcHJldiA9IDA7Ci0KLSAgICB3aGlsZSAo
cHMpIHsKLSAgICAgICAgcHJldiA9IHBzOwotICAgICAgICBwcyA9IHBzLT5wc2V1ZG9TdHlsZTsK
LSAgICAgICAgLy8gdG8gcHJldmVudCBhIGRvdWJsZSBkZWxldGlvbi4KLSAgICAgICAgLy8gdGhp
cyB3b3JrcyBvbmx5IGJlY2F1c2UgdGhlIHN0eWxlcyBiZWxvdyBhcmVuJ3QgcmVhbGx5IHNoYXJl
ZAotICAgICAgICAvLyBEaXJrIHNhaWQgd2UgbmVlZCBhbm90aGVyIGNvbnN0cnVjdCBhcyBzb29u
IGFzIHRoZXNlIGFyZSBzaGFyZWQKLSAgICAgICAgcHJldi0+cHNldWRvU3R5bGUgPSAwOwotICAg
ICAgICBwcmV2LT5kZXJlZihhcmVuYSk7Ci0gICAgfQotICAgIGRlbGV0ZSB0aGlzOwotCi0gICAg
Ly8gUmVjb3ZlciB0aGUgc2l6ZSBsZWZ0IHRoZXJlIGZvciB1cyBieSBvcGVyYXRvciBkZWxldGUg
YW5kIGZyZWUgdGhlIG1lbW9yeS4KLSAgICBhcmVuYS0+ZnJlZSgqKHNpemVfdCAqKXRoaXMsIHRo
aXMpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVuZGVyU3R5bGUodHJ1ZSkpOwogfQogCi1p
bmxpbmUgUmVuZGVyU3R5bGUqIGluaXREZWZhdWx0U3R5bGUoKQorUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gUmVuZGVyU3R5bGU6OmNsb25lKGNvbnN0IFJlbmRlclN0eWxlKiBvdGhlcikKIHsKLSAg
ICBpZiAoIWRlZmF1bHRTdHlsZSkKLSAgICAgICAgZGVmYXVsdFN0eWxlID0gOjpuZXcgUmVuZGVy
U3R5bGUodHJ1ZSk7Ci0gICAgcmV0dXJuIGRlZmF1bHRTdHlsZTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFJlbmRlclN0eWxlKCpvdGhlcikpOwogfQogCiBSZW5kZXJTdHlsZTo6UmVuZGVyU3R5
bGUoKQotICAgIDogYm94KGluaXREZWZhdWx0U3R5bGUoKS0+Ym94KQotICAgICwgdmlzdWFsKGRl
ZmF1bHRTdHlsZS0+dmlzdWFsKQotICAgICwgYmFja2dyb3VuZChkZWZhdWx0U3R5bGUtPmJhY2tn
cm91bmQpCi0gICAgLCBzdXJyb3VuZChkZWZhdWx0U3R5bGUtPnN1cnJvdW5kKQotICAgICwgcmFy
ZU5vbkluaGVyaXRlZERhdGEoZGVmYXVsdFN0eWxlLT5yYXJlTm9uSW5oZXJpdGVkRGF0YSkKLSAg
ICAsIHJhcmVJbmhlcml0ZWREYXRhKGRlZmF1bHRTdHlsZS0+cmFyZUluaGVyaXRlZERhdGEpCi0g
ICAgLCBpbmhlcml0ZWQoZGVmYXVsdFN0eWxlLT5pbmhlcml0ZWQpCi0gICAgLCBwc2V1ZG9TdHls
ZSgwKQorICAgIDogYm94KGRlZmF1bHRTdHlsZSgpLT5ib3gpCisgICAgLCB2aXN1YWwoZGVmYXVs
dFN0eWxlKCktPnZpc3VhbCkKKyAgICAsIGJhY2tncm91bmQoZGVmYXVsdFN0eWxlKCktPmJhY2tn
cm91bmQpCisgICAgLCBzdXJyb3VuZChkZWZhdWx0U3R5bGUoKS0+c3Vycm91bmQpCisgICAgLCBy
YXJlTm9uSW5oZXJpdGVkRGF0YShkZWZhdWx0U3R5bGUoKS0+cmFyZU5vbkluaGVyaXRlZERhdGEp
CisgICAgLCByYXJlSW5oZXJpdGVkRGF0YShkZWZhdWx0U3R5bGUoKS0+cmFyZUluaGVyaXRlZERh
dGEpCisgICAgLCBpbmhlcml0ZWQoZGVmYXVsdFN0eWxlKCktPmluaGVyaXRlZCkKICAgICAsIG1f
cHNldWRvU3RhdGUoUHNldWRvVW5rbm93bikKICAgICAsIG1fYWZmZWN0ZWRCeUF0dHJpYnV0ZVNl
bGVjdG9ycyhmYWxzZSkKICAgICAsIG1fdW5pcXVlKGZhbHNlKQpAQCAtOTUsMTcgKzc1LDE1IEBA
IFJlbmRlclN0eWxlOjpSZW5kZXJTdHlsZSgpCiAgICAgLCBtX2ZpcnN0Q2hpbGRTdGF0ZShmYWxz
ZSkKICAgICAsIG1fbGFzdENoaWxkU3RhdGUoZmFsc2UpCiAgICAgLCBtX2NoaWxkSW5kZXgoMCkK
LSAgICAsIG1fcmVmKDApCiAjaWYgRU5BQkxFKFNWRykKLSAgICAsIG1fc3ZnU3R5bGUoZGVmYXVs
dFN0eWxlLT5tX3N2Z1N0eWxlKQorICAgICwgbV9zdmdTdHlsZShkZWZhdWx0U3R5bGUoKS0+bV9z
dmdTdHlsZSkKICNlbmRpZgogewogICAgIHNldEJpdERlZmF1bHRzKCk7IC8vIFdvdWxkIGl0IGJl
IGZhc3RlciB0byBjb3B5IHRoaXMgZnJvbSB0aGUgZGVmYXVsdCBzdHlsZT8KIH0KIAogUmVuZGVy
U3R5bGU6OlJlbmRlclN0eWxlKGJvb2wpCi0gICAgOiBwc2V1ZG9TdHlsZSgwKQotICAgICwgbV9w
c2V1ZG9TdGF0ZShQc2V1ZG9Vbmtub3duKQorICAgIDogbV9wc2V1ZG9TdGF0ZShQc2V1ZG9Vbmtu
b3duKQogICAgICwgbV9hZmZlY3RlZEJ5QXR0cmlidXRlU2VsZWN0b3JzKGZhbHNlKQogICAgICwg
bV91bmlxdWUoZmFsc2UpCiAgICAgLCBtX2FmZmVjdGVkQnlFbXB0eShmYWxzZSkKQEAgLTExOCw3
ICs5Niw2IEBAIFJlbmRlclN0eWxlOjpSZW5kZXJTdHlsZShib29sKQogICAgICwgbV9maXJzdENo
aWxkU3RhdGUoZmFsc2UpCiAgICAgLCBtX2xhc3RDaGlsZFN0YXRlKGZhbHNlKQogICAgICwgbV9j
aGlsZEluZGV4KDApCi0gICAgLCBtX3JlZigxKQogewogICAgIHNldEJpdERlZmF1bHRzKCk7CiAK
QEAgLTE0MCw3ICsxMTcsOCBAQCBSZW5kZXJTdHlsZTo6UmVuZGVyU3R5bGUoYm9vbCkKIH0KIAog
UmVuZGVyU3R5bGU6OlJlbmRlclN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBvKQotICAgIDogaW5o
ZXJpdGVkX2ZsYWdzKG8uaW5oZXJpdGVkX2ZsYWdzKQorICAgIDogUmVmQ291bnRlZDxSZW5kZXJT
dHlsZT4oKQorICAgICwgaW5oZXJpdGVkX2ZsYWdzKG8uaW5oZXJpdGVkX2ZsYWdzKQogICAgICwg
bm9uaW5oZXJpdGVkX2ZsYWdzKG8ubm9uaW5oZXJpdGVkX2ZsYWdzKQogICAgICwgYm94KG8uYm94
KQogICAgICwgdmlzdWFsKG8udmlzdWFsKQpAQCAtMTQ5LDcgKzEyNyw2IEBAIFJlbmRlclN0eWxl
OjpSZW5kZXJTdHlsZShjb25zdCBSZW5kZXJTdHkKICAgICAsIHJhcmVOb25Jbmhlcml0ZWREYXRh
KG8ucmFyZU5vbkluaGVyaXRlZERhdGEpCiAgICAgLCByYXJlSW5oZXJpdGVkRGF0YShvLnJhcmVJ
bmhlcml0ZWREYXRhKQogICAgICwgaW5oZXJpdGVkKG8uaW5oZXJpdGVkKQotICAgICwgcHNldWRv
U3R5bGUoMCkKICAgICAsIG1fcHNldWRvU3RhdGUoby5tX3BzZXVkb1N0YXRlKQogICAgICwgbV9h
ZmZlY3RlZEJ5QXR0cmlidXRlU2VsZWN0b3JzKGZhbHNlKQogICAgICwgbV91bmlxdWUoZmFsc2Up
CkBAIC0xNjMsNyArMTQwLDYgQEAgUmVuZGVyU3R5bGU6OlJlbmRlclN0eWxlKGNvbnN0IFJlbmRl
clN0eQogICAgICwgbV9maXJzdENoaWxkU3RhdGUoZmFsc2UpCiAgICAgLCBtX2xhc3RDaGlsZFN0
YXRlKGZhbHNlKQogICAgICwgbV9jaGlsZEluZGV4KDApCi0gICAgLCBtX3JlZigwKQogI2lmIEVO
QUJMRShTVkcpCiAgICAgLCBtX3N2Z1N0eWxlKG8ubV9zdmdTdHlsZSkKICNlbmRpZgpAQCAtMjI3
LDIzICsyMDMsMjMgQEAgdm9pZCBSZW5kZXJTdHlsZTo6c2V0SGFzUHNldWRvU3R5bGUoUHNldQog
ICAgIG5vbmluaGVyaXRlZF9mbGFncy5fcHNldWRvQml0cyB8PSBwc2V1ZG9CaXQocHNldWRvKTsK
IH0KIAotUmVuZGVyU3R5bGUqIFJlbmRlclN0eWxlOjpnZXRQc2V1ZG9TdHlsZShQc2V1ZG9JZCBw
aWQpCitSZW5kZXJTdHlsZSogUmVuZGVyU3R5bGU6OmdldENhY2hlZFBzZXVkb1N0eWxlKFBzZXVk
b0lkIHBpZCkKIHsKLSAgICBpZiAoIXBzZXVkb1N0eWxlIHx8IHN0eWxlVHlwZSgpICE9IE5PUFNF
VURPKQorICAgIGlmICghbV9jYWNoZWRQc2V1ZG9TdHlsZSB8fCBzdHlsZVR5cGUoKSAhPSBOT1BT
RVVETykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUmVuZGVyU3R5bGUqIHBzID0gcHNldWRvU3R5
bGU7CisgICAgUmVuZGVyU3R5bGUqIHBzID0gbV9jYWNoZWRQc2V1ZG9TdHlsZS5nZXQoKTsKICAg
ICB3aGlsZSAocHMgJiYgcHMtPnN0eWxlVHlwZSgpICE9IHBpZCkKLSAgICAgICAgcHMgPSBwcy0+
cHNldWRvU3R5bGU7CisgICAgICAgIHBzID0gcHMtPm1fY2FjaGVkUHNldWRvU3R5bGUuZ2V0KCk7
CiAgICAgcmV0dXJuIHBzOwogfQogCi12b2lkIFJlbmRlclN0eWxlOjphZGRQc2V1ZG9TdHlsZShS
ZW5kZXJTdHlsZSogcHNldWRvKQorUmVuZGVyU3R5bGUqIFJlbmRlclN0eWxlOjphZGRDYWNoZWRQ
c2V1ZG9TdHlsZShQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1ZG8pCiB7CiAgICAgaWYgKCFw
c2V1ZG8pCi0gICAgICAgIHJldHVybjsKLSAgICBwc2V1ZG8tPnJlZigpOwotICAgIHBzZXVkby0+
cHNldWRvU3R5bGUgPSBwc2V1ZG9TdHlsZTsKLSAgICBwc2V1ZG9TdHlsZSA9IHBzZXVkbzsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcHNldWRvLT5tX2NhY2hlZFBzZXVkb1N0eWxlID0gbV9jYWNo
ZWRQc2V1ZG9TdHlsZTsKKyAgICBtX2NhY2hlZFBzZXVkb1N0eWxlID0gcHNldWRvOworICAgIHJl
dHVybiBtX2NhY2hlZFBzZXVkb1N0eWxlLmdldCgpOwogfQogCiBib29sIFJlbmRlclN0eWxlOjpp
bmhlcml0ZWROb3RFcXVhbChSZW5kZXJTdHlsZSogb3RoZXIpIGNvbnN0CkluZGV4OiByZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuaAkocmV2aXNpb24gMzc1ODYpCisrKyByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTEgKzk3LDEwIEBAIGNsYXNzIENTU1N0eWxlU2Vs
ZWN0b3I7CiBjbGFzcyBDU1NWYWx1ZUxpc3Q7CiBjbGFzcyBDYWNoZWRJbWFnZTsKIGNsYXNzIFBh
aXI7Ci1jbGFzcyBSZW5kZXJBcmVuYTsKIGNsYXNzIFN0cmluZ0ltcGw7CiBjbGFzcyBTdHlsZUlt
YWdlOwogCi1jbGFzcyBSZW5kZXJTdHlsZSB7CitjbGFzcyBSZW5kZXJTdHlsZTogcHVibGljIFJl
ZkNvdW50ZWQ8UmVuZGVyU3R5bGU+IHsKICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGVTZWxlY3Rv
cjsKIAogcHVibGljOgpAQCAtMTEzLDI3ICsxMTIsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIFNDUk9MTEJBUl9USFVNQiwgU0NST0xMQkFSX0JVVFRPTiwgU0NST0xMQkFSX1RSQUNL
LCBTQ1JPTExCQVJfVFJBQ0tfUElFQ0UsIFNDUk9MTEJBUl9DT1JORVIsIFJFU0laRVIgfTsKICAg
ICBzdGF0aWMgY29uc3QgaW50IEZJUlNUX0lOVEVSTkFMX1BTRVVET0lEID0gRklMRV9VUExPQURf
QlVUVE9OOwogCi0gICAgdm9pZCByZWYoKSB7IG1fcmVmKys7IH0KLSAgICB2b2lkIGRlcmVmKFJl
bmRlckFyZW5hKiBhcmVuYSkKLSAgICB7Ci0gICAgICAgIGlmIChtX3JlZikKLSAgICAgICAgICAg
IG1fcmVmLS07Ci0gICAgICAgIGlmICghbV9yZWYpCi0gICAgICAgICAgICBhcmVuYURlbGV0ZShh
cmVuYSk7Ci0gICAgfQotICAgIGJvb2wgaGFzT25lUmVmKCkgeyByZXR1cm4gbV9yZWYgPT0gMTsg
fQotICAgIGludCByZWZDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVmOyB9Ci0KLSAgICAvLyBP
dmVybG9hZGVkIG5ldyBvcGVyYXRvci4gIERlcml2ZWQgY2xhc3NlcyBtdXN0IG92ZXJyaWRlIG9w
ZXJhdG9yIG5ldwotICAgIC8vIGluIG9yZGVyIHRvIGFsbG9jYXRlIG91dCBvZiB0aGUgUmVuZGVy
QXJlbmEuCi0gICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgUmVuZGVyQXJlbmEqIHJl
bmRlckFyZW5hKSB0aHJvdygpOwotCi0gICAgLy8gT3ZlcnJpZGRlbiB0byBwcmV2ZW50IHRoZSBu
b3JtYWwgZGVsZXRlIGZyb20gYmVpbmcgY2FsbGVkLgotICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRl
KHZvaWQqIHB0ciwgc2l6ZV90IHN6KTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGFyZW5hRGVsZXRl
KFJlbmRlckFyZW5hKik7Ci0KIHByb3RlY3RlZDoKIAogLy8gIVNUQVJUIFNZTkMhOiBLZWVwIHRo
aXMgaW4gc3luYyB3aXRoIHRoZSBjb3B5IGNvbnN0cnVjdG9yIGluIFJlbmRlclN0eWxlLmNwcApA
QCAtMjQxLDcgKzIxOSw3IEBAIHByb3RlY3RlZDoKICAgICBEYXRhUmVmPFN0eWxlSW5oZXJpdGVk
RGF0YT4gaW5oZXJpdGVkOwogCiAgICAgLy8gbGlzdCBvZiBhc3NvY2lhdGVkIHBzZXVkbyBzdHls
ZXMKLSAgICBSZW5kZXJTdHlsZSogcHNldWRvU3R5bGU7CisgICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBtX2NhY2hlZFBzZXVkb1N0eWxlOwogCiAgICAgdW5zaWduZWQgbV9wc2V1ZG9TdGF0ZSA6IDM7
IC8vIFBzZXVkb1N0YXRlCiAgICAgYm9vbCBtX2FmZmVjdGVkQnlBdHRyaWJ1dGVTZWxlY3RvcnMg
OiAxOwpAQCAtMjYyLDggKzI0MCw2IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fbGFzdENoaWxk
U3RhdGUgOiAxOwogICAgIHVuc2lnbmVkIG1fY2hpbGRJbmRleCA6IDE4OyAvLyBQbGVudHkgb2Yg
Yml0cyB0byBjYWNoZSBhbiBpbmRleC4KIAotICAgIGludCBtX3JlZjsKLQogI2lmIEVOQUJMRShT
VkcpCiAgICAgRGF0YVJlZjxTVkdSZW5kZXJTdHlsZT4gbV9zdmdTdHlsZTsKICNlbmRpZgpAQCAt
MzA4LDEyICsyODQsMTcgQEAgcHJvdGVjdGVkOgogICAgICAgICBub25pbmhlcml0ZWRfZmxhZ3Mu
X3VuaWNvZGVCaWRpID0gaW5pdGlhbFVuaWNvZGVCaWRpKCk7CiAgICAgfQogCi1wdWJsaWM6Citw
cm90ZWN0ZWQ6CiAgICAgUmVuZGVyU3R5bGUoKTsKICAgICAvLyB1c2VkIHRvIGNyZWF0ZSB0aGUg
ZGVmYXVsdCBzdHlsZS4KICAgICBSZW5kZXJTdHlsZShib29sKTsKICAgICBSZW5kZXJTdHlsZShj
b25zdCBSZW5kZXJTdHlsZSYpOwogCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBj
cmVhdGVEZWZhdWx0U3R5bGUoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
Y2xvbmUoY29uc3QgUmVuZGVyU3R5bGUqKTsKKwogICAgIH5SZW5kZXJTdHlsZSgpOwogCiAgICAg
dm9pZCBpbmhlcml0RnJvbShjb25zdCBSZW5kZXJTdHlsZSogaW5oZXJpdFBhcmVudCk7CkBAIC0z
MjEsOCArMzAyLDggQEAgcHVibGljOgogICAgIFBzZXVkb0lkIHN0eWxlVHlwZSgpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PFBzZXVkb0lkPihub25pbmhlcml0ZWRfZmxhZ3MuX3N0eWxlVHlwZSk7IH0K
ICAgICB2b2lkIHNldFN0eWxlVHlwZShQc2V1ZG9JZCBzdHlsZVR5cGUpIHsgbm9uaW5oZXJpdGVk
X2ZsYWdzLl9zdHlsZVR5cGUgPSBzdHlsZVR5cGU7IH0KIAotICAgIFJlbmRlclN0eWxlKiBnZXRQ
c2V1ZG9TdHlsZShQc2V1ZG9JZCBwaSk7Ci0gICAgdm9pZCBhZGRQc2V1ZG9TdHlsZShSZW5kZXJT
dHlsZSogcHNldWRvKTsKKyAgICBSZW5kZXJTdHlsZSogZ2V0Q2FjaGVkUHNldWRvU3R5bGUoUHNl
dWRvSWQpOworICAgIFJlbmRlclN0eWxlKiBhZGRDYWNoZWRQc2V1ZG9TdHlsZShQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPik7CiAKICAgICBib29sIGFmZmVjdGVkQnlIb3ZlclJ1bGVzKCkgY29uc3Qg
eyByZXR1cm4gbm9uaW5oZXJpdGVkX2ZsYWdzLl9hZmZlY3RlZEJ5SG92ZXI7IH0KICAgICBib29s
IGFmZmVjdGVkQnlBY3RpdmVSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG5vbmluaGVyaXRlZF9mbGFn
cy5fYWZmZWN0ZWRCeUFjdGl2ZTsgfQpAQCAtMzMzLDYgKzMxNCw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEFmZmVjdGVkQnlEcmFnUnVsZXMoYm9vbCBiKSB7IG5vbmluaGVyaXRlZF9mbGFncy5f
YWZmZWN0ZWRCeURyYWcgPSBiOyB9CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVuZGVy
U3R5bGUmIG90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUmVuZGVyU3R5
bGUmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQogICAgIGJvb2wg
aXNGbG9hdGluZygpIGNvbnN0IHsgcmV0dXJuICEobm9uaW5oZXJpdGVkX2ZsYWdzLl9mbG9hdGlu
ZyA9PSBGTk9ORSk7IH0KICAgICBib29sIGhhc01hcmdpbigpIGNvbnN0IHsgcmV0dXJuIHN1cnJv
dW5kLT5tYXJnaW4ubm9uWmVybygpOyB9CiAgICAgYm9vbCBoYXNCb3JkZXIoKSBjb25zdCB7IHJl
dHVybiBzdXJyb3VuZC0+Ym9yZGVyLmhhc0JvcmRlcigpOyB9CkBAIC04OTIsNyArODc0LDcgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0Qm94T3JpZW50KEVCb3hPcmllbnQgbykgeyBTRVRfVkFSKHJh
cmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5mbGV4aWJsZUJveCwgb3JpZW50LCBvKTsgfQog
ICAgIHZvaWQgc2V0Qm94UGFjayhFQm94QWxpZ25tZW50IHApIHsgU0VUX1ZBUihyYXJlTm9uSW5o
ZXJpdGVkRGF0YS5hY2Nlc3MoKS0+ZmxleGlibGVCb3gsIHBhY2ssIHApOyB9CiAgICAgdm9pZCBz
ZXRCb3hTaGFkb3coU2hhZG93RGF0YSogdmFsLCBib29sIGFkZD1mYWxzZSk7Ci0gICAgdm9pZCBz
ZXRCb3hSZWZsZWN0KGNvbnN0IFBhc3NSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiYgcmVmbGVjdCkg
eyBpZiAocmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYm94UmVmbGVjdCAhPSByZWZsZWN0KSByYXJl
Tm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9ib3hSZWZsZWN0ID0gcmVmbGVjdDsgfQorICAg
IHZvaWQgc2V0Qm94UmVmbGVjdChQYXNzUmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gcmVmbGVjdCkg
eyBpZiAocmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYm94UmVmbGVjdCAhPSByZWZsZWN0KSByYXJl
Tm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9ib3hSZWZsZWN0ID0gcmVmbGVjdDsgfQogICAg
IHZvaWQgc2V0Qm94U2l6aW5nKEVCb3hTaXppbmcgcykgeyBTRVRfVkFSKGJveCwgYm94U2l6aW5n
LCBzKTsgfQogICAgIHZvaWQgc2V0TWFycXVlZUluY3JlbWVudChjb25zdCBMZW5ndGgmIGYpIHsg
U0VUX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bWFycXVlZSwgaW5jcmVtZW50
LCBmKTsgfQogICAgIHZvaWQgc2V0TWFycXVlZVNwZWVkKGludCBmKSB7IFNFVF9WQVIocmFyZU5v
bkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1hcnF1ZWUsIHNwZWVkLCBmKTsgfQpJbmRleDogc3Zn
L1NWR0NsaXBQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3ZnL1NWR0NsaXBQYXRoRWxl
bWVudC5jcHAJKHJldmlzaW9uIDM3NTg2KQorKysgc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk4LDE3ICs5OCwxNiBAQCBTVkdSZXNvdXJjZSogU1ZHQ2xpcFBh
dGhFbGVtZW50OjpjYW52YXNSCiAKICAgICBib29sIGJib3ggPSBjbGlwUGF0aFVuaXRzKCkgPT0g
U1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwogCi0gICAgUmVu
ZGVyU3R5bGUqIGNsaXBQYXRoU3R5bGUgPSBzdHlsZUZvclJlbmRlcmVyKHBhcmVudCgpLT5yZW5k
ZXJlcigpKTsgLy8gRklYTUU6IE1hbnVhbCBzdHlsZSByZXNvbHV0aW9uIGlzIGEgaGFjaworICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gY2xpcFBhdGhTdHlsZSA9IHN0eWxlRm9yUmVuZGVyZXIocGFy
ZW50KCktPnJlbmRlcmVyKCkpOyAvLyBGSVhNRTogTWFudWFsIHN0eWxlIHJlc29sdXRpb24gaXMg
YSBoYWNrCiAgICAgZm9yIChOb2RlKiBuID0gZmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+bmV4dFNp
YmxpbmcoKSkgewogICAgICAgICBpZiAobi0+aXNTVkdFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8
U1ZHRWxlbWVudCo+KG4pLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkgewogICAgICAgICAgICAg
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIHN0eWxlZCA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICBSZW5kZXJTdHlsZSog
cGF0aFN0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQo
c3R5bGVkLCBjbGlwUGF0aFN0eWxlKTsKKyAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
cGF0aFN0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQo
c3R5bGVkLCBjbGlwUGF0aFN0eWxlLmdldCgpKTsKICAgICAgICAgICAgIGlmIChwYXRoU3R5bGUt
PmRpc3BsYXkoKSAhPSBOT05FKSB7CiAgICAgICAgICAgICAgICAgUGF0aCBwYXRoRGF0YSA9IHN0
eWxlZC0+dG9DbGlwUGF0aCgpOwogICAgICAgICAgICAgICAgIGlmICghcGF0aERhdGEuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgICAgICBtX2NsaXBwZXItPmFkZENsaXBEYXRhKHBhdGhEYXRh
LCBwYXRoU3R5bGUtPnN2Z1N0eWxlKCktPmNsaXBSdWxlKCksIGJib3gpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgcGF0aFN0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgp
KTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAobV9jbGlwcGVyLT5jbGlwRGF0YSgpLmlzRW1w
dHkoKSkgewpAQCAtMTE2LDcgKzExNSw2IEBAIFNWR1Jlc291cmNlKiBTVkdDbGlwUGF0aEVsZW1l
bnQ6OmNhbnZhc1IKICAgICAgICAgcGF0aERhdGEuYWRkUmVjdChGbG9hdFJlY3QoKSk7CiAgICAg
ICAgIG1fY2xpcHBlci0+YWRkQ2xpcERhdGEocGF0aERhdGEsIFJVTEVfRVZFTk9ERCwgYmJveCk7
CiAgICAgfQotICAgIGNsaXBQYXRoU3R5bGUtPmRlcmVmKGRvY3VtZW50KCktPnJlbmRlckFyZW5h
KCkpOwogICAgIHJldHVybiBtX2NsaXBwZXIuZ2V0KCk7CiB9CiAKSW5kZXg6IHN2Zy9TVkdHcmFk
aWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAzNzU4NikKKysrIHN2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgU1ZHUmVzb3VyY2UqIFNWR0dyYWRpZW50RWxlbWVu
dDo6Y2FudmFzUgogVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4gU1ZHR3JhZGllbnRFbGVtZW50Ojpi
dWlsZFN0b3BzKCkgY29uc3QKIHsKICAgICBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiBzdG9wczsK
LSAgICBSZW5kZXJTdHlsZSogZ3JhZGllbnRTdHlsZSA9IDA7CisgICAgUmVmUHRyPFJlbmRlclN0
eWxlPiBncmFkaWVudFN0eWxlOwogCiAgICAgZm9yIChOb2RlKiBuID0gZmlyc3RDaGlsZCgpOyBu
OyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0g
bi0+aXNTVkdFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obikgOiAwOwpAQCAt
MTUxLDIxICsxNTEsMTYgQEAgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4gU1ZHR3JhZGllbnRFbGVt
ZQogICAgICAgICAgICAgICAgIGlmICghZ3JhZGllbnRTdHlsZSkKICAgICAgICAgICAgICAgICAg
ICAgZ3JhZGllbnRTdHlsZSA9IGNvbnN0X2Nhc3Q8U1ZHR3JhZGllbnRFbGVtZW50Kj4odGhpcykt
PnN0eWxlRm9yUmVuZGVyZXIocGFyZW50KCktPnJlbmRlcmVyKCkpOwogCi0gICAgICAgICAgICAg
ICAgUmVuZGVyU3R5bGUqIHN0b3BTdHlsZSA9IHN0b3AtPnJlc29sdmVTdHlsZShncmFkaWVudFN0
eWxlKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0b3BTdHlsZSA9IHN0
b3AtPnJlc29sdmVTdHlsZShncmFkaWVudFN0eWxlLmdldCgpKTsKIAogICAgICAgICAgICAgICAg
IGNvbG9yID0gc3RvcFN0eWxlLT5zdmdTdHlsZSgpLT5zdG9wQ29sb3IoKTsKICAgICAgICAgICAg
ICAgICBvcGFjaXR5ID0gc3RvcFN0eWxlLT5zdmdTdHlsZSgpLT5zdG9wT3BhY2l0eSgpOwotCi0g
ICAgICAgICAgICAgICAgc3RvcFN0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgp
KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3RvcHMuYXBwZW5kKG1ha2VHcmFkaWVu
dFN0b3Aoc3RvcE9mZnNldCwgbWFrZVJHQkEoY29sb3IucmVkKCksIGNvbG9yLmdyZWVuKCksIGNv
bG9yLmJsdWUoKSwgaW50KG9wYWNpdHkgKiAyNTUuKSkpKTsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGlmIChncmFkaWVudFN0eWxlKQotICAgICAgICBncmFkaWVudFN0eWxlLT5kZXJlZihkb2N1
bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKLQogICAgIHJldHVybiBzdG9wczsKIH0KIApJbmRleDog
c3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdTdHlsZWRFbGVt
ZW50LmNwcAkocmV2aXNpb24gMzc1ODYpCisrKyBzdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzMSwxNCArMjMxLDEwIEBAIHZvaWQgU1ZHU3R5bGVkRWxlbWVudDo6
Y2hpbGRyZW5DaGFuZ2VkKGIKICAgICBTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJ
bnN0YW5jZXNPZkVsZW1lbnQodGhpcyk7CiB9CiAKLVJlbmRlclN0eWxlKiBTVkdTdHlsZWRFbGVt
ZW50OjpyZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gU1ZHU3R5bGVkRWxlbWVudDo6cmVzb2x2ZVN0eWxlKFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSkKIHsKLSAgICBpZiAocmVuZGVyZXIoKSkgewotICAgICAgICBSZW5kZXJTdHls
ZSogcmVuZGVyU3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOwotICAgICAgICByZW5kZXJTdHls
ZS0+cmVmKCk7Ci0gICAgICAgIHJldHVybiByZW5kZXJTdHlsZTsKLSAgICB9Ci0KKyAgICBpZiAo
cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIHJlbmRlcmVyKCktPnN0eWxlKCk7CiAgICAgcmV0
dXJuIGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMsIHBh
cmVudFN0eWxlKTsKIH0KIApJbmRleDogc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBzdmcvU1ZHU3R5bGVkRWxlbWVudC5oCShyZXZpc2lvbiAzNzU4NikKKysrIHN2Zy9TVkdT
dHlsZWRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hh
bmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVy
Q2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOwogCiAgICAgICAgIC8vIENlbnRy
YWxpemVkIHBsYWNlIHRvIGZvcmNlIGEgbWFudWFsIHN0eWxlIHJlc29sdXRpb24uIEhhY2t5IGJ1
dCBuZWVkZWQgZm9yIG5vdy4KLSAgICAgICAgUmVuZGVyU3R5bGUqIHJlc29sdmVTdHlsZShSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAgICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBy
ZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAogICAgICAgICB2b2lkIGlu
dmFsaWRhdGVSZXNvdXJjZXNJbkFuY2VzdG9yQ2hhaW4oKSBjb25zdDsgICAgICAgIAogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CkluZGV4OiBzdmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzNzU4NikKKysrIHN2
Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDggKzE4Nyw4IEBAIHZv
aWQgU1ZHVXNlRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGEKICAgICAvLyBzaGFkb3cgdHJl
ZSByb290IGVsZW1lbnQsIGJ1dCBjYWxsIGF0dGFjaFNoYWRvd1RyZWUoKSBoZXJlLiBDYWxsaW5n
IGF0dGFjaCgpIHdpbGwgY3Jhc2gKICAgICAvLyBhcyB0aGUgc2hhZG93IHRyZWUgcm9vdCBlbGVt
ZW50IGhhcyBubyAoZGlyZWN0KSBwYXJlbnQgbm9kZS4gWWVzLCBzaGFkb3cgdHJlZXMgYXJlIHRy
aWNreS4KICAgICBpZiAoY2hhbmdlID49IEluaGVyaXQgfHwgbV9zaGFkb3dUcmVlUm9vdEVsZW1l
bnQtPmNoYW5nZWQoKSkgewotICAgICAgICBSZW5kZXJTdHlsZSogbmV3U3R5bGUgPSBkb2N1bWVu
dCgpLT5zdHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudChtX3NoYWRvd1RyZWVSb290RWxl
bWVudC5nZXQoKSk7Ci0gICAgICAgIFN0eWxlQ2hhbmdlIGNoID0gTm9kZTo6ZGlmZihtX3NoYWRv
d1RyZWVSb290RWxlbWVudC0+cmVuZGVyU3R5bGUoKSwgbmV3U3R5bGUpOworICAgICAgICBSZWZQ
dHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5z
dHlsZUZvckVsZW1lbnQobV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQuZ2V0KCkpOworICAgICAgICBT
dHlsZUNoYW5nZSBjaCA9IE5vZGU6OmRpZmYobV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQtPnJlbmRl
clN0eWxlKCksIG5ld1N0eWxlLmdldCgpKTsKICAgICAgICAgaWYgKGNoID09IERldGFjaCkgewog
ICAgICAgICAgICAgQVNTRVJUKG1fc2hhZG93VHJlZVJvb3RFbGVtZW50LT5hdHRhY2hlZCgpKTsK
ICAgICAgICAgICAgIG1fc2hhZG93VHJlZVJvb3RFbGVtZW50LT5kZXRhY2goKTsKQEAgLTE5Nywx
MSArMTk3LDggQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYQogICAg
ICAgICAgICAgLy8gYXR0YWNoIHJlY2FsdWxhdGVzIHRoZSBzdHlsZSBmb3IgYWxsIGNoaWxkcmVu
LiBObyBuZWVkIHRvIGRvIGl0IHR3aWNlLgogICAgICAgICAgICAgbV9zaGFkb3dUcmVlUm9vdEVs
ZW1lbnQtPnNldENoYW5nZWQoTm9TdHlsZUNoYW5nZSk7CiAgICAgICAgICAgICBtX3NoYWRvd1Ry
ZWVSb290RWxlbWVudC0+c2V0SGFzQ2hhbmdlZENoaWxkKGZhbHNlKTsKLSAgICAgICAgICAgIG5l
d1N0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotCi0gICAgICAgIG5ld1N0eWxlLT5kZXJlZihkb2N1bWVudCgpLT5y
ZW5kZXJBcmVuYSgpKTsKICAgICB9CiAKICAgICAvLyBPbmx5IGNoYW5nZT09RGV0YWNoIG5lZWRz
IHNwZWNpYWwgdHJlYXRtZW50LCBmb3IgYW55dGhpbmcgZWxzZSByZWNhbGNTdHlsZSgpIHdvcmtz
LgpAQCAtNzQ0LDE5ICs3NDEsMTcgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjphdHRhY2hTaGFkb3dU
cmVlKCkKIAogICAgIC8vIEluc3BpcmVkIGJ5IFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVTdWJ0
cmVlSWZOZWVkZWQoKS4gCiAgICAgaWYgKHJlbmRlcmVyKCktPmNhbkhhdmVDaGlsZHJlbigpICYm
IGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIobV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQuZ2V0KCkp
KSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fc2hhZG93VHJlZVJvb3RFbGVtZW50
LT5zdHlsZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IHN0eWxlID0gbV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQtPnN0eWxlRm9yUmVuZGVyZXIocmVu
ZGVyZXIoKSk7CiAKLSAgICAgICAgaWYgKG1fc2hhZG93VHJlZVJvb3RFbGVtZW50LT5yZW5kZXJl
cklzTmVlZGVkKHN0eWxlKSkgewotICAgICAgICAgICAgbV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQt
PnNldFJlbmRlcmVyKG1fc2hhZG93VHJlZVJvb3RFbGVtZW50LT5jcmVhdGVSZW5kZXJlcihkb2N1
bWVudCgpLT5yZW5kZXJBcmVuYSgpLCBzdHlsZSkpOworICAgICAgICBpZiAobV9zaGFkb3dUcmVl
Um9vdEVsZW1lbnQtPnJlbmRlcmVySXNOZWVkZWQoc3R5bGUuZ2V0KCkpKSB7CisgICAgICAgICAg
ICBtX3NoYWRvd1RyZWVSb290RWxlbWVudC0+c2V0UmVuZGVyZXIobV9zaGFkb3dUcmVlUm9vdEVs
ZW1lbnQtPmNyZWF0ZVJlbmRlcmVyKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCksIHN0eWxlLmdl
dCgpKSk7CiAgICAgICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBzaGFkb3dSZW5kZXJlciA9IG1f
c2hhZG93VHJlZVJvb3RFbGVtZW50LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICAgICAgc2hh
ZG93UmVuZGVyZXItPnNldFN0eWxlKHN0eWxlKTsKKyAgICAgICAgICAgICAgICBzaGFkb3dSZW5k
ZXJlci0+c2V0U3R5bGUoc3R5bGUucmVsZWFzZSgpKTsKICAgICAgICAgICAgICAgICByZW5kZXJl
cigpLT5hZGRDaGlsZChzaGFkb3dSZW5kZXJlciwgbV9zaGFkb3dUcmVlUm9vdEVsZW1lbnQtPm5l
eHRSZW5kZXJlcigpKTsKICAgICAgICAgICAgICAgICBtX3NoYWRvd1RyZWVSb290RWxlbWVudC0+
c2V0QXR0YWNoZWQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHN0eWxl
LT5kZXJlZihkb2N1bWVudCgpLT5yZW5kZXJBcmVuYSgpKTsKLQogICAgICAgICAvLyBUaGlzIHdp
bGwgdGFrZSBjYXJlIG9mIGF0dGFjaGluZyBhbGwgc2hhZG93IHRyZWUgY2hpbGQgbm9kZXMuCiAg
ICAgICAgIGZvciAoTm9kZSogY2hpbGQgPSBtX3NoYWRvd1RyZWVSb290RWxlbWVudC0+Zmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgICAg
IGNoaWxkLT5hdHRhY2goKTsK
</data>
<flag name="review"
          id="11120"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>