<?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>135768</bug_id>
          
          <creation_ts>2014-08-08 14:38:15 -0700</creation_ts>
          <short_desc>Implement scroll snapping animations on Mac</short_desc>
          <delta_ts>2014-08-15 17:30:09 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>134283</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bdakin</cc>
    
    <cc>bunhere</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jamesr</cc>
    
    <cc>jonlee</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>syoichi</cc>
    
    <cc>thorton</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1027950</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-08 14:38:15 -0700</bug_when>
    <thetext>Implement scroll snapping logic for use on Mac. Since there is no simple way to retarget the scroll destination on Mac (as opposed to iOS) we&apos;ll need to override momentum events and replace the animation curve with a custom one. This patch adds logic needed to compute the snap scrolling animation curve given parameters such as initial velocity and the target snap offset. Note: this doesn&apos;t actually make any elements snap -- it&apos;s just the methods needed to compute and animate offsets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028128</commentid>
    <comment_count>1</comment_count>
      <attachid>236352</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-10 22:38:38 -0700</bug_when>
    <thetext>Created attachment 236352
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028129</commentid>
    <comment_count>2</comment_count>
      <attachid>236353</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-10 23:26:49 -0700</bug_when>
    <thetext>Created attachment 236353
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028335</commentid>
    <comment_count>3</comment_count>
      <attachid>236407</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-11 15:33:52 -0700</bug_when>
    <thetext>Created attachment 236407
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028336</commentid>
    <comment_count>4</comment_count>
      <attachid>236408</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-11 15:37:01 -0700</bug_when>
    <thetext>Created attachment 236408
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028361</commentid>
    <comment_count>5</comment_count>
      <attachid>236408</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-08-11 16:47:34 -0700</bug_when>
    <thetext>Comment on attachment 236408
Patch

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

r- for lack of changelog. I would also like to see a fairly high-level comment somewhere that explains the states, and briefly describes how the math works.

&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.h:77
&gt; +    float snapAmount() const;
&gt; +    float glideAmount() const;

&quot;Amount&quot; is vague here. Maybe &quot;distance&quot;?

&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.h:80
&gt; +    bool pushInitialMomentum(float);

What is the parameter? Velocity?

&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.h:81
&gt; +    float averageInitialMomentum() const;

Again, what are the units?

&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.h:92
&gt; +    static const int momentumWindowSize = 3;
&gt; +    static const int snapMagnitudeMax;
&gt; +    static const int snapMagnitudeMin;
&gt; +    static const int snapThresholdHigh;
&gt; +    static const int snapThresholdLow;
&gt; +    static const float glideBoostMultiplier;
&gt; +    static const float maxTargetVelocity;
&gt; +    static const float minTargetVelocity;
&gt; +    static const float initialToFinalMomentumFactor;

Just have these in the cpp file as non-class consts.

&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.h:103
&gt; +    int m_momentumCount;

event count?

&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.mm:54
&gt; +        finalVelocity = ((targetMultiplier * initialMomentum) / 2) * (1 + cos(piFloat - acos((2 - targetMultiplier) / targetMultiplier)));

You need to explain this in a comment.

&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.mm:61
&gt; +        else if (finalVelocity &gt; targetFinalVelocity + 0.5)

No blank line before else.

&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.mm:114
&gt; +template&lt;typename T&gt; inline void clampToBounds(T&amp; value, T min, T max)
&gt; +{
&gt; +    if (value &lt; min)
&gt; +        value = min;
&gt; +
&gt; +    if (value &gt; max)
&gt; +        value = max;
&gt; +}

We normally use std::max(std::min(a, b), c) for this.

&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.mm:182
&gt; +void AxisScrollSnapAnimator::scrollUpdate()

Name is vague. Are you updating a scroll, or are you updating as the result of a scroll?

&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.mm:241
&gt; +    float rawSnapAmount = 1 + magnitude * sin(piFloat * progress);

Comment?

&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.mm:256
&gt; +    float shift = ceil(((m_glideMultiplier * m_glideInitialMomentum) / 2) * (1 + cos(piFloat * progress - m_glidePhaseShift)));

Comment!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028528</commentid>
    <comment_count>6</comment_count>
      <attachid>236408</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-12 10:09:44 -0700</bug_when>
    <thetext>Comment on attachment 236408
Patch

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

Thanks for taking a look at this! There will be a more polished version of this up soon.

&gt;&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.h:77
&gt;&gt; +    float glideAmount() const;
&gt; 
&gt; &quot;Amount&quot; is vague here. Maybe &quot;distance&quot;?

Changed to compute(Snap|Glide)Delta.

&gt;&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.h:80
&gt;&gt; +    bool pushInitialMomentum(float);
&gt; 
&gt; What is the parameter? Velocity?

Changed names from &quot;Momentum&quot; to &quot;WheelDelta&quot; to better reflect the fact that I&apos;m tracking wheel deltas over time.

&gt;&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.h:81
&gt;&gt; +    float averageInitialMomentum() const;
&gt; 
&gt; Again, what are the units?

Changed names from &quot;Momentum&quot; to &quot;WheelDelta&quot; to better reflect the fact that I&apos;m tracking wheel deltas over time.

&gt;&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.h:92
&gt;&gt; +    static const float initialToFinalMomentumFactor;
&gt; 
&gt; Just have these in the cpp file as non-class consts.

Fixed. (although momentumWindowSize is still declared in the header, since I&apos;ll need it to initialize the momentum window).

&gt;&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.h:103
&gt;&gt; +    int m_momentumCount;
&gt; 
&gt; event count?

Changed to m_numWheelDeltasTracked.

&gt;&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.mm:54
&gt;&gt; +        finalVelocity = ((targetMultiplier * initialMomentum) / 2) * (1 + cos(piFloat - acos((2 - targetMultiplier) / targetMultiplier)));
&gt; 
&gt; You need to explain this in a comment.

Got it.

&gt;&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.mm:61
&gt;&gt; +        else if (finalVelocity &gt; targetFinalVelocity + 0.5)
&gt; 
&gt; No blank line before else.

Fixed.

&gt;&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.mm:182
&gt;&gt; +void AxisScrollSnapAnimator::scrollUpdate()
&gt; 
&gt; Name is vague. Are you updating a scroll, or are you updating as the result of a scroll?

Changed to scrollSnapAnimationUpdate()

&gt;&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.mm:241
&gt;&gt; +    float rawSnapAmount = 1 + magnitude * sin(piFloat * progress);
&gt; 
&gt; Comment?

Will do. I&apos;m also putting this information in the (soon to come) ChangeLog.

&gt;&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.mm:256
&gt;&gt; +    float shift = ceil(((m_glideMultiplier * m_glideInitialMomentum) / 2) * (1 + cos(piFloat * progress - m_glidePhaseShift)));
&gt; 
&gt; Comment!

Adding comments here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028693</commentid>
    <comment_count>7</comment_count>
      <attachid>236492</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-12 18:49:55 -0700</bug_when>
    <thetext>Created attachment 236492
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028986</commentid>
    <comment_count>8</comment_count>
      <attachid>236492</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-08-13 18:12:00 -0700</bug_when>
    <thetext>Comment on attachment 236492
Patch

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

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:154
&gt; +    if (scrollDestination &gt;= snapOffsets.at(snapOffsets.size() - 1))
&gt; +        return snapOffsets.at(snapOffsets.size() - 1);
&gt; +
&gt; +    size_t lowerIndex = 0;
&gt; +    size_t upperIndex = snapOffsets.size() - 1;

If you move upperIndex to before the if, then you can use it there.

&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.mm:79
&gt; +    return 16.6789 * initialWheelDelta;

Where does this come from?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028990</commentid>
    <comment_count>9</comment_count>
      <attachid>236492</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-13 18:15:25 -0700</bug_when>
    <thetext>Comment on attachment 236492
Patch

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

&gt;&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:154
&gt;&gt; +    size_t upperIndex = snapOffsets.size() - 1;
&gt; 
&gt; If you move upperIndex to before the if, then you can use it there.

Good catch, thanks!

&gt;&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.mm:79
&gt;&gt; +    return 16.6789 * initialWheelDelta;
&gt; 
&gt; Where does this come from?

Good point -- I&apos;ll add this as a named constant and leave a comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028999</commentid>
    <comment_count>10</comment_count>
      <attachid>236573</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-13 19:03:03 -0700</bug_when>
    <thetext>Created attachment 236573
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029027</commentid>
    <comment_count>11</comment_count>
      <attachid>236573</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-08-13 21:50:56 -0700</bug_when>
    <thetext>Comment on attachment 236573
Patch

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

I gave up when I hit the math.

&gt; Source/WebCore/ChangeLog:14
&gt; +        final velocity matches a lower final velocity that is somewhat arbitrarily computed. (See the FIXME in

Isn&apos;t the &quot;final&quot; velocity 0 by definition? Maybe this will make sense later.

&gt; Source/WebCore/PlatformMac.cmake:134
&gt; +    platform/mac/AxisScrollSnapAnimator.mm

I think this file is sorted.

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:171
&gt; +    LayoutUnit lowerSnapPosition = snapOffsets.at(lowerIndex);

We have operator[]; why .at()?

&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.h:90
&gt; +    ScrollSnapState m_curState;

&quot;cur&quot; :( Spell it out!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029098</commentid>
    <comment_count>12</comment_count>
      <attachid>236573</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-14 09:21:21 -0700</bug_when>
    <thetext>Comment on attachment 236573
Patch

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

&gt;&gt; Source/WebCore/PlatformMac.cmake:134
&gt;&gt; +    platform/mac/AxisScrollSnapAnimator.mm
&gt; 
&gt; I think this file is sorted.

Fixed.

&gt;&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:171
&gt;&gt; +    LayoutUnit lowerSnapPosition = snapOffsets.at(lowerIndex);
&gt; 
&gt; We have operator[]; why .at()?

Thanks for the tip -- changed to use [].

&gt;&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.h:90
&gt;&gt; +    ScrollSnapState m_curState;
&gt; 
&gt; &quot;cur&quot; :( Spell it out!

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029102</commentid>
    <comment_count>13</comment_count>
      <attachid>236573</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-14 09:24:32 -0700</bug_when>
    <thetext>Comment on attachment 236573
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:14
&gt;&gt; +        final velocity matches a lower final velocity that is somewhat arbitrarily computed. (See the FIXME in
&gt; 
&gt; Isn&apos;t the &quot;final&quot; velocity 0 by definition? Maybe this will make sense later.

I originally had that (well, a final velocity of 1) but it felt too slow at the end of the animation, so I changed it to some number between 3.5 and 7 (that seemed to give me decent results). The faster the initial velocity, the weirder it seemed to look with a very low final velocity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029114</commentid>
    <comment_count>14</comment_count>
      <attachid>236596</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-14 09:52:20 -0700</bug_when>
    <thetext>Created attachment 236596
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029116</commentid>
    <comment_count>15</comment_count>
      <attachid>236596</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-14 09:53:22 -0700</bug_when>
    <thetext>Comment on attachment 236596
Patch

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

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.h:46
&gt; +LayoutUnit closestSnapOffset(const Vector&lt;LayoutUnit&gt;&amp; snapOffsets, LayoutUnit scrollDestination, float velocity)

typo: LayoutUnits -&gt; T</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029120</commentid>
    <comment_count>16</comment_count>
      <attachid>236597</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-14 09:56:14 -0700</bug_when>
    <thetext>Created attachment 236597
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029129</commentid>
    <comment_count>17</comment_count>
      <attachid>236597</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-14 10:36:17 -0700</bug_when>
    <thetext>Comment on attachment 236597
Patch

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

&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.h:60
&gt; +    virtual void immediateScrollInAxis(ScrollEventAxis, float velocity) = 0;

&gt;.&lt; oops, this the second argument is supposed to be &quot;float delta&quot; here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029130</commentid>
    <comment_count>18</comment_count>
      <attachid>236597</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-14 10:37:18 -0700</bug_when>
    <thetext>Comment on attachment 236597
Patch

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

&gt;&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.h:60
&gt;&gt; +    virtual void immediateScrollInAxis(ScrollEventAxis, float velocity) = 0;
&gt; 
&gt; 

^ oops, the second argument is supposed to be float delta here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029169</commentid>
    <comment_count>19</comment_count>
      <attachid>236597</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-08-14 12:40:00 -0700</bug_when>
    <thetext>Comment on attachment 236597
Patch

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

&gt; Source/WebCore/ChangeLog:18
&gt; +        Implementing the scroll snap animations required for snapping in both overflow and mainframe areas on Mac. Since we receive a series
&gt; +        of discrete wheel events, we need to predict the distance we need to traverse, compute the appropriate snap point, and then compute
&gt; +        an animation curve to that location. The snap animations are split into two types: snapping, which handles letting go of the trackpad
&gt; +        with zero velocity, and gliding, which handles flick gestures. In both cases, sinusoidal curves are used to ease animation to the target
&gt; +        location. In the former case, the initial velocity is low, and increases to a maximum value during the middle of the animation before
&gt; +        decreasing to 0. In the latter case, the curve is computed such that the initial velocity matches the user&apos;s scroll velocity, and the
&gt; +        final velocity matches a lower final velocity that is somewhat arbitrarily computed. (See the FIXME in
&gt; +        AxisScrollSnapOffsets::initializeGlideParameters). How the equations and constants were chosen is described in greater detail in the
&gt; +        comments above AxisScrollSnapOffsets::computeGlideDelta and AxisScrollSnapOffsets::computeSnapDelta. Note that the final velocity should
&gt; +        ideally be equal to 0. However, with this particular curve, this caused the animation to feel too slow near the snap point.
&gt; +

Could you wrap this to a smaller column width?

&gt; Source/WebCore/platform/mac/AxisScrollSnapAnimator.mm:33
&gt; +const float inertialScrollPredictionFactor = 16.6789;

Does this really need to have so many significant digits? It makes it look like it is some scientific value we&apos;re not allowed to change. Would 16.7 be good enough?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029243</commentid>
    <comment_count>20</comment_count>
      <attachid>236630</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2014-08-14 15:39:46 -0700</bug_when>
    <thetext>Created attachment 236630
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029270</commentid>
    <comment_count>21</comment_count>
      <attachid>236630</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-14 17:21:41 -0700</bug_when>
    <thetext>Comment on attachment 236630
Patch

Clearing flags on attachment: 236630

Committed r172616: &lt;http://trac.webkit.org/changeset/172616&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236352</attachid>
            <date>2014-08-10 22:38:38 -0700</date>
            <delta_ts>2014-08-10 23:26:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135768-20140810223826.patch</filename>
            <type>text/plain</type>
            <size>47546</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyMzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjZhYjY2MWIxYTdkNjFl
NWFjNzk4NGFlMWJkMmNjNDc0ODRhNWY0ZC4uM2UzYzJjYjQ3NGRlMzg5OTY1MDBmYTY4NzFkN2Jj
NGIxZjE4MGUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDE0LTA4LTEwICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBz
Y3JvbGwgc25hcHBpbmcgYW5pbWF0aW9ucyBvbiBNYWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTc2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICh3b3JrIGluIHByb2dyZXNzIC0tIHBhdGNoIGp1c3Qg
aGVyZSBhcyBhIHByZXZpZXcpCisKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZG9tL0Vs
ZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmFwcGVuZFNuYXBPZmZzZXRzVG9W
ZWN0b3IpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEVsZW1lbnQ6OmFwcGVuZENoaWxkU25hcE9mZnNldHNUb1ZlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRWxlbWVudDo6YXBwZW5kU25hcE9mZnNldHNUb1ZlY3Rvcik6CisgICAg
ICAgICogaHRtbC9IVE1MRWxlbWVudC5oOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlU25hcEF4aXMpOgorICAgICAgICAq
IHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2luZ2xlQXhpc1Nu
YXBMaXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW5nbGVBeGlzU25hcExpc3Q6
OnVwZGF0ZUZyb21PZmZzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbmdsZUF4aXNTbmFwTGlz
dDo6Y2xvc2VzdFNuYXBQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTaW5nbGVBeGlzU25h
cExpc3Q6Om1pbmltdW1TbmFwUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2luZ2xlQXhp
c1NuYXBMaXN0OjptYXhpbXVtU25hcFBvc2l0aW9uKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9TaW5nbGVBeGlzU25hcExpc3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW5nbGVB
eGlzU25hcExpc3Q6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNpbmdsZUF4aXNTbmFwTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU25hcEF4aXNGcm9t
RWxlbWVudEFuZFN0eWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNuYXBBeGlzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvU2luZ2xlQXhpc1NuYXBBbmltYXRvci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNpbmdsZUF4aXNTbmFwQW5pbWF0b3JDbGllbnQ6On5TaW5nbGVBeGlzU25h
cEFuaW1hdG9yQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2luZ2xlQXhpc1NuYXBB
bmltYXRvci5tbTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpiZXN0TXVsdGlwbGllcik6Cisg
ICAgICAgIChXZWJDb3JlOjp0b1doZWVsRXZlbnRTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
cHJvamVjdGVkTW9tZW50dW1EaXN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpjbGFtcFRvQm91
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbmdsZUF4aXNTbmFwQW5pbWF0b3I6OlNpbmdsZUF4
aXNTbmFwQW5pbWF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2luZ2xlQXhpc1NuYXBBbmltYXRv
cjo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaW5nbGVBeGlzU25hcEFu
aW1hdG9yOjpzaG91bGRPdmVycmlkZVdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2lu
Z2xlQXhpc1NuYXBBbmltYXRvcjo6c2Nyb2xsVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNp
bmdsZUF4aXNTbmFwQW5pbWF0b3I6OmJlZ2luU25hcHBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U2luZ2xlQXhpc1NuYXBBbmltYXRvcjo6ZW5kU25hcHBpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U2luZ2xlQXhpc1NuYXBBbmltYXRvcjo6c25hcEFtb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpT
aW5nbGVBeGlzU25hcEFuaW1hdG9yOjpnbGlkZUFtb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpT
aW5nbGVBeGlzU25hcEFuaW1hdG9yOjppbml0aWFsaXplR2xpZGVQYXJhbWV0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbmdsZUF4aXNTbmFwQW5pbWF0b3I6OnB1c2hJbml0aWFsTW9tZW50dW0p
OgorICAgICAgICAoV2ViQ29yZTo6U2luZ2xlQXhpc1NuYXBBbmltYXRvcjo6YXZlcmFnZUluaXRp
YWxNb21lbnR1bSk6CisgICAgICAgIChXZWJDb3JlOjpTaW5nbGVBeGlzU25hcEFuaW1hdG9yOjpj
bGVhckluaXRpYWxNb21lbnR1bSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTbmFwQXhpcyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisKIDIwMTQtMDgtMDkgIFphbGFuIEJ1anRh
cyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBTdWJwaXhlbCByZW5kZXJpbmc6IFRyYW5z
Zm9ybXMgb24gbm9uLWNvbXBvc2l0aW5nIGxheWVycyBsZWF2ZSBiaXRzIGJlaGluZCB3aGVuIHRo
ZSBib3ggYm91bmRhcmllcyBjaGFuZ2VzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCA3
ZDA3NzM1OGZkNTcxM2Q4NGE0YjZjMmJkYWRjZTlkNzQ5ZTJkMjJiLi41NmFhNTQ1NmFlYzc0MjFl
NWY3OGI5ZDc2OTBiMDc1MzYyYmJlNzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAt
MTI5LDYgKzEyOSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L21hYy9TZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbk1hYy5tbQogICAgIHBsYXRmb3Jt
L21hYy9TaGFyZWRCdWZmZXJNYWMubW0KICAgICBwbGF0Zm9ybS9tYWMvU2hhcmVkVGltZXJNYWMu
bW0KKyAgICBwbGF0Zm9ybS9tYWMvU2luZ2xlQXhpc1NuYXBBbmltYXRvci5tbQogICAgIHBsYXRm
b3JtL21hYy9Tb3VuZE1hYy5tbQogICAgIHBsYXRmb3JtL21hYy9TdWRkZW5UZXJtaW5hdGlvbi5t
bQogICAgIHBsYXRmb3JtL21hYy9TeXN0ZW1TbGVlcExpc3RlbmVyTWFjLm1tCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzkyMzIz
NWY3MTBhZTZhYjE1OGY5ZGUyODIzYTZjMmE3ODNkNjBkMi4uYTdlZGRlZjEyMmI0ZjZkNWQ3NWEz
YmNkYThkYjg4YzJiMGUyNzMxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjI0Niw2ICs2MjQ2LDEwIEBACiAJCUYzRjVDRjEx
MTJFRDgxQTgwMDg0QzU2OSAvKiBJbnNwZWN0b3JDb25zb2xlSW5zdHJ1bWVudGF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGM0Y1Q0YxMDEyRUQ4
MUE4MDA4NEM1NjkgLyogSW5zcGVjdG9yQ29uc29sZUluc3RydW1lbnRhdGlvbi5oICovOyB9Owog
CQlGM0Y1Q0YxMzEyRUQ4MUIzMDA4NEM1NjkgLyogSW5zcGVjdG9yRGF0YWJhc2VJbnN0cnVtZW50
YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEYz
RjVDRjEyMTJFRDgxQjMwMDg0QzU2OSAvKiBJbnNwZWN0b3JEYXRhYmFzZUluc3RydW1lbnRhdGlv
bi5oICovOyB9OwogCQlGNDJGRkI0NjE5ODRCNzE2MDBGNjgzN0YgLyogTGVuZ3RoUmVwZWF0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDJGRkI0NTE5
ODRCNzE2MDBGNjgzN0YgLyogTGVuZ3RoUmVwZWF0LmggKi87IH07CisJCUY0NUMyMzFEMTk5NUI3
M0IwMEE2RTJFMyAvKiBTaW5nbGVBeGlzU25hcExpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ1QzIzMUIxOTk1QjczQjAwQTZFMkUzIC8qIFNp
bmdsZUF4aXNTbmFwTGlzdC5jcHAgKi87IH07CisJCUY0NUMyMzFFMTk5NUI3M0IwMEE2RTJFMyAv
KiBTaW5nbGVBeGlzU25hcExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY0NUMyMzFDMTk5NUI3M0IwMEE2RTJFMyAvKiBTaW5nbGVBeGlzU25hcExp
c3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlG
NDc4NzU1NDE5OTgzQUZGMDAyNEEyODcgLyogU2luZ2xlQXhpc1NuYXBBbmltYXRvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3ODc1NTIxOTk4M0FG
RjAwMjRBMjg3IC8qIFNpbmdsZUF4aXNTbmFwQW5pbWF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGNDc4NzU1NTE5OTgzQUZGMDAyNEEyODcg
LyogU2luZ2xlQXhpc1NuYXBBbmltYXRvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY0Nzg3NTUzMTk5ODNBRkYwMDI0QTI4NyAvKiBTaW5nbGVBeGlz
U25hcEFuaW1hdG9yLm1tICovOyB9OwogCQlGNDdBNUUzRTE5NUI4QzhBMDA0ODMxMDAgLyogU3R5
bGVTY3JvbGxTbmFwUG9pbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNDdBNUUzQjE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9p
bnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
RjQ3QTVFM0YxOTVCOEU0ODAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDdBNUUzQTE5NUI4
QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcCAqLzsgfTsKIAkJRjUwNjY0
RjcxNTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MDY2NEY1MTU3RjUyREMwMEFDMjI2RiAv
KiBGb3JtQ29udHJvbGxlci5jcHAgKi87IH07CkBAIC0xMzc2NCw2ICsxMzc2OCwxMCBAQAogCQlG
M0Y1Q0YxMDEyRUQ4MUE4MDA4NEM1NjkgLyogSW5zcGVjdG9yQ29uc29sZUluc3RydW1lbnRhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JDb25zb2xlSW5z
dHJ1bWVudGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUYzRjVDRjEyMTJF
RDgxQjMwMDg0QzU2OSAvKiBJbnNwZWN0b3JEYXRhYmFzZUluc3RydW1lbnRhdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JEYXRhYmFzZUluc3RydW1lbnRh
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDJGRkI0NTE5ODRCNzE2MDBG
NjgzN0YgLyogTGVuZ3RoUmVwZWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExlbmd0aFJlcGVhdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNDVDMjMxQjE5
OTVCNzNCMDBBNkUyRTMgLyogU2luZ2xlQXhpc1NuYXBMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbmdsZUF4aXNTbmFwTGlzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUY0NUMyMzFDMTk5NUI3M0IwMEE2RTJFMyAvKiBTaW5nbGVBeGlz
U25hcExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2luZ2xlQXhpc1Nu
YXBMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0Nzg3NTUyMTk5ODNBRkYw
MDI0QTI4NyAvKiBTaW5nbGVBeGlzU25hcEFuaW1hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNpbmdsZUF4aXNTbmFwQW5pbWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRjQ3ODc1NTMxOTk4M0FGRjAwMjRBMjg3IC8qIFNpbmdsZUF4aXNTbmFwQW5p
bWF0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTaW5nbGVB
eGlzU25hcEFuaW1hdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDdBNUUz
QTE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0eWxlU2Nyb2xsU25hcFBvaW50cy5jcHA7IHBh
dGggPSBzdHlsZS9TdHlsZVNjcm9sbFNuYXBQb2ludHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGNDdBNUUzQjE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9p
bnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0eWxlU2Nyb2xsU25hcFBv
aW50cy5oOyBwYXRoID0gc3R5bGUvU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUY1MDY2NEY1MTU3RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29udHJv
bGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtQ29udHJv
bGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTE0MSw2ICsxNTE0OSw4
IEBACiAJCQkJOTM5MUE5OUIxNjI5RDcwMDAwMjk3MzMwIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlLmggKi8sCiAJCQkJMEY2MzgzREIxODYxNUIyOTAwM0U1REI1IC8qIFRocmVhZGVkU2Ny
b2xsaW5nVHJlZS5jcHAgKi8sCiAJCQkJMEY2MzgzREMxODYxNUIyOTAwM0U1REI1IC8qIFRocmVh
ZGVkU2Nyb2xsaW5nVHJlZS5oICovLAorCQkJCUY0NUMyMzFCMTk5NUI3M0IwMEE2RTJFMyAvKiBT
aW5nbGVBeGlzU25hcExpc3QuY3BwICovLAorCQkJCUY0NUMyMzFDMTk5NUI3M0IwMEE2RTJFMyAv
KiBTaW5nbGVBeGlzU25hcExpc3QuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gc2Nyb2xsaW5nOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE2NDA3LDYgKzE2NDE3LDggQEAKIAkJNjU4
MkExNDgwOTk5OUQ2QzAwQkVFQjZEIC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCisJCQkJRjQ3ODc1NTIxOTk4M0FGRjAwMjRBMjg3IC8qIFNpbmdsZUF4
aXNTbmFwQW5pbWF0b3IuaCAqLywKKwkJCQlGNDc4NzU1MzE5OTgzQUZGMDAyNEEyODcgLyogU2lu
Z2xlQXhpc1NuYXBBbmltYXRvci5tbSAqLywKIAkJCQk2NUE2NDBGMDA1MzNCQjFGMDA4NUU3Nzcg
LyogQmxvY2tFeGNlcHRpb25zLmggKi8sCiAJCQkJNjVGODA2OTcwNTREOUY4NjAwOEJGNzc2IC8q
IEJsb2NrRXhjZXB0aW9ucy5tbSAqLywKIAkJCQkyOTE5QTFFQTE2QjMzNzg5MDA3ODcyMTMgLyog
Q29udGVudEZpbHRlck1hYy5tbSAqLywKQEAgLTI0NDI0LDYgKzI0NDM2LDcgQEAKIAkJCQlBODEz
NjlFMDA5NzM3NEY2MDBENzQ0NjMgLyogSFRNTExlZ2VuZEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4RUE3OUY2MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MTElFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBODcxREMyMDBBMTUyMDU3MDBCMTJBNjggLyogSFRNTExpbmtFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGNDVDMjMxRTE5OTVCNzNCMDBBNkUyRTMgLyogU2luZ2xl
QXhpc1NuYXBMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBN0QyQzBBMTkzODU1MDBBOEVG
NUYgLyogSFRNTE1hcEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3Q0FCMEExOTJC
OUMwMEE4RUY1RiAvKiBIVE1MTWFycXVlZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0
NDYxM0E1MENENjMzMTAwMEZBREE3NSAvKiBIVE1MTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKQEAgLTI2MjU3LDYgKzI2MjcwLDcgQEAKIAkJCQlCMjIyN0E5NzBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4QTBFMEEx
MjZFRjFEQjAwOTc4RjdBIC8qIFNWR1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODFE
RDQ5QzEzQkExQTYwMDBEQzc2MjcgLyogU1ZHUHJvcGVydHlJbmZvLmggaW4gSGVhZGVycyAqLywK
KwkJCQlGNDc4NzU1NDE5OTgzQUZGMDAyNEEyODcgLyogU2luZ2xlQXhpc1NuYXBBbmltYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4QTBFMEIxMjZFRjFEQjAwOTc4RjdBIC8qIFNWR1Byb3Bl
cnR5VGVhck9mZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4QTBFMEMxMjZFRjFEQjAwOTc4RjdB
IC8qIFNWR1Byb3BlcnR5VHJhaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0E5QTBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
QEAgLTI3NzYwLDYgKzI3Nzc0LDcgQEAKIAkJCQlCMkFGRkM3RDBEMDBBNUMxMDAzMDA3NEQgLyog
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzNzFGNEY0MTBE
MjVCOUFGMDBFQ0UwRDUgLyogRm9udERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzdBQ0NG
NjkwREE0MTRFNzAwODlFNjAyIC8qIEZvbnREZXNjcmlwdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlGNDVDMjMxRDE5OTVCNzNCMDBBNkUyRTMgLyogU2luZ2xlQXhpc1NuYXBMaXN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTcyNjI2RTAyMEVGMDIyRkUwMEEwN0UyMCAvKiBGb250RmFzdFBh
dGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEE2RTlGQzcxM0MxN0Q1NzAwNDZBN0Y4IC8qIEZv
bnRGZWF0dXJlU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ0RUUzQTgxNzU3N0VC
RDAwRUVFOENGIC8qIEZvbnRHZW5lcmljRmFtaWxpZXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0y
ODE3Miw2ICsyODE4Nyw3IEBACiAJCQkJQkU2MTAzOUQxOEE5RDY1MjAwREQ1MEQ3IC8qIEpTRGF0
YUN1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTYyQTQ1NzEwMTE0NjQ3MDBERkYzRUQgLyog
SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTYy
QTQ1NDEwMTE0NUUzMDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGNDc4NzU1NTE5OTgzQUZGMDAyNEEyODcgLyogU2lu
Z2xlQXhpc1NuYXBBbmltYXRvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZEQTE1RUQxMTJCMDNG
OTQwMDNBNTgzQSAvKiBKU0RlbGF5Tm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMUZCMUE2
NTEyMEE1RDNGMDBEQzAyQTAgLyogSlNEZXZpY2VNb3Rpb25FdmVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkzMUZCMUE2QzEyMEE1RDY5MDBEQzAyQTAgLyogSlNEZXZpY2VNb3Rpb25FdmVudEN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IDYwNDg5ZDkyOTVm
M2M5N2YyNzU4ZGRjMTNhNTEwZDI5MjM1ZWJkMjguLjE1ZjZkZWRjZDkxYTVlY2Y4NTk1MTBhNDAw
YmMyYzU3MzQ4MzhjYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtNTY1LDYgKzU2NSwxMCBAQCBw
dWJsaWM6CiAKICAgICBVUkwgYWJzb2x1dGVMaW5rVVJMKCkgY29uc3Q7CiAKKyNpZiBFTkFCTEUo
Q1NTX1NDUk9MTF9TTkFQKQorICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTbmFwT2Zmc2V0c1RvVmVj
dG9yKFNjcm9sbEV2ZW50QXhpcywgVmVjdG9yPExheW91dFVuaXQ+JikgeyB9CisjZW5kaWYKKwog
cHJvdGVjdGVkOgogICAgIEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQmIGRvY3VtZW50LCBDb25zdHJ1Y3Rpb25UeXBlIHR5cGUpCiAgICAgICAgIDogQ29udGFp
bmVyTm9kZShkb2N1bWVudCwgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKaW5k
ZXggZjVlNTJlOWIxNzk3NTI5OGY4ZTA0NjdhODY4Njk1YjA3YmFkMmJmMS4uZDE3NjkxYzg1N2Y4
MTk2NGY5NmM1ZWVmZTFmYzM0NWIxNTFhMDg4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVu
dC5jcHAKQEAgLTUwLDYgKzUwLDkgQEAKICNpbmNsdWRlICJIVE1MVGVtcGxhdGVFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJOb2Rl
VHJhdmVyc2FsLmgiCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyNpbmNsdWRlICJSZW5k
ZXJCb3guaCIKKyNlbmRpZgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUg
IlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtMzM2LDYgKzMz
OSwyOSBAQCB2b2lkIEhUTUxFbGVtZW50Ojpwb3B1bGF0ZUV2ZW50TmFtZUZvckF0dHJpYnV0ZUxv
Y2FsTmFtZU1hcChIYXNoTWFwPEF0b21pY1N0cmluZwogICAgICAgICBtYXAuYWRkKGN1c3RvbVRh
YmxlW2ldLmF0dHJpYnV0ZU5hbWUubG9jYWxOYW1lKCkuaW1wbCgpLCBjdXN0b21UYWJsZVtpXS5l
dmVudE5hbWUpOwogfQogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK3ZvaWQgSFRNTEVs
ZW1lbnQ6OmFwcGVuZENoaWxkU25hcE9mZnNldHNUb1ZlY3RvcihTY3JvbGxFdmVudEF4aXMgYXhp
cywgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0cykKK3sKKyAgICBFbGVtZW50KiBjaGls
ZCA9IGNoaWxkcmVuKCktPmNvbGxlY3Rpb25CZWdpbigpOworICAgIHdoaWxlIChjaGlsZCkgewor
ICAgICAgICBjaGlsZC0+YXBwZW5kU25hcE9mZnNldHNUb1ZlY3RvcihheGlzLCBzbmFwT2Zmc2V0
cyk7CisgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRFbGVtZW50U2libGluZygpOworICAgIH0K
K30KKwordm9pZCBIVE1MRWxlbWVudDo6YXBwZW5kU25hcE9mZnNldHNUb1ZlY3RvcihTY3JvbGxF
dmVudEF4aXMgYXhpcywgVmVjdG9yPExheW91dFVuaXQ+JiBzbmFwT2Zmc2V0cykKK3sKKyAgICBS
ZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIExheW91dFVuaXQgdmlld1NpemUgPSBh
eGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IGJveC0+d2lkdGgoKSA6IGJveC0+
aGVpZ2h0KCk7CisgICAgTGF5b3V0VW5pdCBwb3NpdGlvbk9mZnNldCA9IGF4aXMgPT0gU2Nyb2xs
RXZlbnRBeGlzOjpIb3Jpem9udGFsID8gYm94LT54KCkgOiBib3gtPnkoKTsKKyAgICBmb3IgKFNu
YXBDb29yZGluYXRlIGNvb3JkaW5hdGUgOiBib3gtPnN0eWxlKCkuc2Nyb2xsU25hcENvb3JkaW5h
dGVzKCkpIHsKKyAgICAgICAgTGF5b3V0VW5pdCBsYXN0UG90ZW50aWFsU25hcFBvc2l0aW9uID0g
cG9zaXRpb25PZmZzZXQgKyB2YWx1ZUZvckxlbmd0aChheGlzID09IFNjcm9sbEV2ZW50QXhpczo6
SG9yaXpvbnRhbCA/IGNvb3JkaW5hdGUuZmlyc3QgOiBjb29yZGluYXRlLnNlY29uZCwgdmlld1Np
emUpOworICAgICAgICBpZiAobGFzdFBvdGVudGlhbFNuYXBQb3NpdGlvbiA+IDApCisgICAgICAg
ICAgICBzbmFwT2Zmc2V0cy5hcHBlbmQobGFzdFBvdGVudGlhbFNuYXBQb3NpdGlvbik7CisgICAg
fQorfQorI2VuZGlmCisKIHZvaWQgSFRNTEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgaWYg
KG5hbWUgPT0gSFRNTE5hbWVzOjppZEF0dHIgfHwgbmFtZSA9PSBIVE1MTmFtZXM6OmNsYXNzQXR0
ciB8fCBuYW1lID09IEhUTUxOYW1lczo6c3R5bGVBdHRyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVu
dC5oCmluZGV4IGQyYmI0MDRlYTk3NmJiMjlkNjBjOWYyZDI0MjcwODYyNmE2ODY3Y2UuLmJjYmZk
NzA4ZjRmZGU1Zjk4Yjg2ZDE4OTU2YjA0MmY5NTA1NzNhOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxF
bGVtZW50LmgKQEAgLTEwMiw2ICsxMDIsMTEgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNUYWdO
YW1lKGNvbnN0IEhUTUxRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdCB7IHJldHVybiBoYXNMb2Nh
bE5hbWUobmFtZS5sb2NhbE5hbWUoKSk7IH0KIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
CisgICAgdm9pZCBhcHBlbmRDaGlsZFNuYXBPZmZzZXRzVG9WZWN0b3IoU2Nyb2xsRXZlbnRBeGlz
LCBWZWN0b3I8TGF5b3V0VW5pdD4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kU25hcE9mZnNl
dHNUb1ZlY3RvcihTY3JvbGxFdmVudEF4aXMsIFZlY3RvcjxMYXlvdXRVbml0PiYpIG92ZXJyaWRl
OworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBIVE1MRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCYsIENvbnN0cnVjdGlvblR5cGUpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAKaW5kZXggMzgxMDcxZDg3MDQ1MTAyMTY3NTg5MjQyOWZkYTQ4OWE4NDI1
NTdmOS4uMTg0MzljMjgxMDg4ZWFjYzllYmQ2YWYzYzZhNzI3ZTNiMzQzMTk4YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtODQ3LDYgKzg0NywxNyBAQCBHcmFwaGljc0xheWVyKiBG
cmFtZVZpZXc6OnNldFdhbnRzTGF5ZXJGb3JCb3R0b21PdmVySGFuZ0FyZWEoYm9vbCB3YW50c0xh
eWVyKSBjbwogCiAjZW5kaWYgLy8gRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogCisjaWYgRU5BQkxF
KENTU19TQ1JPTExfU05BUCkKK3ZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVTbmFwQXhpcyhTY3JvbGxF
dmVudEF4aXMgYXhpcykKK3sKKyAgICBpZiAoIXJlbmRlclZpZXcoKSB8fCAhcmVuZGVyVmlldygp
LT5kb2N1bWVudCgpLmJvZHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRWxlbWVudCogYm9k
eSA9IHJlbmRlclZpZXcoKS0+ZG9jdW1lbnQoKS5ib2R5KCk7CisgICAgdXBkYXRlU25hcEF4aXNG
cm9tRWxlbWVudEFuZFN0eWxlKGF4aXMsIGJvZHksIHJlbmRlclZpZXcoKSwgYm9keS0+cmVuZGVy
ZXIoKS0+c3R5bGUoKSk7Cit9CisjZW5kaWYKKwogYm9vbCBGcmFtZVZpZXc6OmZsdXNoQ29tcG9z
aXRpbmdTdGF0ZUZvclRoaXNGcmFtZShGcmFtZSogcm9vdEZyYW1lRm9yRmx1c2gpCiB7CiAgICAg
UmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHRoaXMtPnJlbmRlclZpZXcoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5oCmluZGV4IGRiZTlkNWRhOGM3NDBmOTgxN2EzYjQ5MzlmYmZlNzhiZTQwNGU1MzEu
LjFhYjE1YzhkYmNkMmI0Nzc3OTgwNDQ3ZGQwMjg1ZGZlOGZjYTE0NDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaApAQCAtMzMsNiArMzMsOSBAQAogI2luY2x1ZGUgIlBhaW50UGhhc2UuaCIKICNp
bmNsdWRlICJSZW5kZXJQdHIuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCisjaWYgRU5BQkxF
KENTU19TQ1JPTExfU05BUCkKKyNpbmNsdWRlICJTaW5nbGVBeGlzU25hcExpc3QuaCIKKyNlbmRp
ZgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUg
PHd0Zi9MaXN0SGFzaFNldC5oPgpAQCAtNTcsNiArNjAsOSBAQCBjbGFzcyBSZW5kZXJTY3JvbGxi
YXJQYXJ0OwogY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBSZW5kZXJWaWV3OwogY2xhc3MgUmVu
ZGVyV2lkZ2V0OworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCitjbGFzcyBTaW5nbGVBeGlz
U25hcExpc3Q7CisjZW5kaWYKIAogUGFnaW5hdGlvbjo6TW9kZSBwYWdpbmF0aW9uTW9kZUZvclJl
bmRlclN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJik7CiAKQEAgLTQ5Niw2ICs1MDIsMTAgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0RXhwb3NlZFJlY3QoRmxvYXRSZWN0KTsKICAgICBGbG9hdFJlY3Qg
ZXhwb3NlZFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2V4cG9zZWRSZWN0OyB9CiAKKyNpZiBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTbmFwQXhpcyhTY3Jv
bGxFdmVudEF4aXMpIG92ZXJyaWRlOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IGJvb2wgc2Nyb2xsQ29udGVudHNGYXN0UGF0aChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwg
Y29uc3QgSW50UmVjdCYgcmVjdFRvU2Nyb2xsLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbENvbnRlbnRzU2xvd1BhdGgoY29uc3QgSW50
UmVjdCYgdXBkYXRlUmVjdCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TaW5nbGVBeGlzU25hcExpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2luZ2xlQXhpc1NuYXBMaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOWIyMDBjNzU4
OTg3ZDBlYTE4NmNiYjQ5NjNhMmRmMzhlOTEwYzMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2luZ2xlQXhpc1NuYXBMaXN0LmNwcApAQCAtMCwwICsx
LDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW5n
bGVBeGlzU25hcExpc3QuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKKyNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgU2lu
Z2xlQXhpc1NuYXBMaXN0Ojp1cGRhdGVGcm9tT2Zmc2V0cyhMYXlvdXRVbml0IHZpZXdTaXplLCBM
YXlvdXRVbml0IHNjcm9sbFNpemUsIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNl
dHMsIExheW91dFVuaXQgZGVzdGluYXRpb25PZmZzZXQsIGJvb2wgaGFzUmVwZWF0LCBMYXlvdXRV
bml0IHJlcGVhdE9mZnNldCkKK3sKKyAgICBtX3Bvc2l0aW9ucy5jbGVhcigpOworICAgIExheW91
dFVuaXQgY3VyU25hcFBvc2l0aW9uU2hpZnQgPSAwOworICAgIExheW91dFVuaXQgbWF4U2Nyb2xs
T2Zmc2V0ID0gc2Nyb2xsU2l6ZSAtIHZpZXdTaXplOworICAgIExheW91dFVuaXQgbGFzdFNuYXBQ
b3NpdGlvbiA9IGN1clNuYXBQb3NpdGlvblNoaWZ0OworICAgIExheW91dFVuaXQgcG90ZW50aWFs
U25hcFBvc2l0aW9uOworICAgIG1fcG9zaXRpb25zLmFwcGVuZCgwKTsKKyAgICBkbyB7CisgICAg
ICAgIGZvciAoTGF5b3V0VW5pdCBzbmFwUG9zaXRpb24gOiBzbmFwT2Zmc2V0cykgeworICAgICAg
ICAgICAgcG90ZW50aWFsU25hcFBvc2l0aW9uID0gY3VyU25hcFBvc2l0aW9uU2hpZnQgKyBzbmFw
UG9zaXRpb24gLSBkZXN0aW5hdGlvbk9mZnNldDsKKyAgICAgICAgICAgIGlmIChwb3RlbnRpYWxT
bmFwUG9zaXRpb24gPD0gMCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGlmIChwb3RlbnRpYWxTbmFwUG9zaXRpb24gPj0gbWF4U2Nyb2xsT2Zmc2V0KQorICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBtX3Bvc2l0aW9ucy5hcHBlbmQocG90ZW50aWFs
U25hcFBvc2l0aW9uKTsKKyAgICAgICAgICAgIGxhc3RTbmFwUG9zaXRpb24gPSBwb3RlbnRpYWxT
bmFwUG9zaXRpb24gKyBkZXN0aW5hdGlvbk9mZnNldDsKKyAgICAgICAgfQorICAgICAgICBjdXJT
bmFwUG9zaXRpb25TaGlmdCA9IGxhc3RTbmFwUG9zaXRpb24gKyByZXBlYXRPZmZzZXQ7CisgICAg
fSB3aGlsZSAoaGFzUmVwZWF0ICYmIGN1clNuYXBQb3NpdGlvblNoaWZ0IDwgbWF4U2Nyb2xsT2Zm
c2V0KTsKKyAgICAvLyBBbHdheXMgcHV0IGEgc25hcCBwb2ludCBvbiB0aGUgbWF4aW11bSBzY3Jv
bGwgb2Zmc2V0LgorICAgIC8vIE5vdCBhIHBhcnQgb2YgdGhlIHNwZWMsIGJ1dCBuZWNlc3Nhcnkg
dG8gcHJldmVudCB1bnJlYWNoYWJsZSBjb250ZW50IHdoZW4gc25hcHBpbmcuCisgICAgaWYgKG1f
cG9zaXRpb25zLmxhc3QoKSAhPSBtYXhTY3JvbGxPZmZzZXQpCisgICAgICAgIG1fcG9zaXRpb25z
LmFwcGVuZChtYXhTY3JvbGxPZmZzZXQpOworfQorCitMYXlvdXRVbml0IFNpbmdsZUF4aXNTbmFw
TGlzdDo6Y2xvc2VzdFNuYXBQb3NpdGlvbihMYXlvdXRVbml0IHNjcm9sbERlc3RpbmF0aW9uLCBm
bG9hdCB2ZWxvY2l0eSkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wb3NpdGlvbnMuc2l6ZSgpID4g
MCk7CisgICAgaWYgKHNjcm9sbERlc3RpbmF0aW9uIDw9IG1fcG9zaXRpb25zLmZpcnN0KCkpCisg
ICAgICAgIHJldHVybiBtX3Bvc2l0aW9ucy5maXJzdCgpOworCisgICAgaWYgKHNjcm9sbERlc3Rp
bmF0aW9uID49IG1fcG9zaXRpb25zLmxhc3QoKSkKKyAgICAgICAgcmV0dXJuIG1fcG9zaXRpb25z
Lmxhc3QoKTsKKworICAgIHNpemVfdCBsb3dlckluZGV4ID0gMDsKKyAgICBzaXplX3QgdXBwZXJJ
bmRleCA9IG1fcG9zaXRpb25zLnNpemUoKSAtIDE7CisgICAgd2hpbGUgKGxvd2VySW5kZXggPCB1
cHBlckluZGV4IC0gMSkgeworICAgICAgICBzaXplX3QgbWlkZGxlSW5kZXggPSAobG93ZXJJbmRl
eCArIHVwcGVySW5kZXgpIC8gMjsKKyAgICAgICAgaWYgKHNjcm9sbERlc3RpbmF0aW9uIDwgbV9w
b3NpdGlvbnMuYXQobWlkZGxlSW5kZXgpKQorICAgICAgICAgICAgdXBwZXJJbmRleCA9IG1pZGRs
ZUluZGV4OworICAgICAgICBlbHNlIGlmIChzY3JvbGxEZXN0aW5hdGlvbiA+IG1fcG9zaXRpb25z
LmF0KG1pZGRsZUluZGV4KSkKKyAgICAgICAgICAgIGxvd2VySW5kZXggPSBtaWRkbGVJbmRleDsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB1cHBlckluZGV4ID0gbWlkZGxlSW5kZXg7Cisg
ICAgICAgICAgICBsb3dlckluZGV4ID0gbWlkZGxlSW5kZXg7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKyAgICBMYXlvdXRVbml0IGxvd2VyU25hcFBvc2l0aW9uID0gbV9w
b3NpdGlvbnMuYXQobG93ZXJJbmRleCk7CisgICAgTGF5b3V0VW5pdCB1cHBlclNuYXBQb3NpdGlv
biA9IG1fcG9zaXRpb25zLmF0KHVwcGVySW5kZXgpOworICAgIC8vIE5vbnplcm8gdmVsb2NpdHkg
aW5kaWNhdGVzIGEgZmxpY2sgZ2VzdHVyZS4gRXZlbiBpZiBhbm90aGVyIHNuYXAgcG9pbnQgaXMg
Y2xvc2VyLCBzbmFwIHRvIHRoZSBvbmUgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgZmxpY2sgZ2Vz
dHVyZS4KKyAgICBpZiAodmVsb2NpdHkpCisgICAgICAgIHJldHVybiB2ZWxvY2l0eSA8IDAgPyBs
b3dlclNuYXBQb3NpdGlvbiA6IHVwcGVyU25hcFBvc2l0aW9uOworCisgICAgYm9vbCBpc0Nsb3Nl
clRvTG93ZXJTbmFwUG9zaXRpb24gPSBzY3JvbGxEZXN0aW5hdGlvbiAtIGxvd2VyU25hcFBvc2l0
aW9uIDwgdXBwZXJTbmFwUG9zaXRpb24gLSBzY3JvbGxEZXN0aW5hdGlvbjsKKyAgICByZXR1cm4g
aXNDbG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID8gbG93ZXJTbmFwUG9zaXRpb24gOiB1cHBlclNu
YXBQb3NpdGlvbjsKK30KKworTGF5b3V0VW5pdCBTaW5nbGVBeGlzU25hcExpc3Q6Om1pbmltdW1T
bmFwUG9zaXRpb24oKSBjb25zdAoreworICAgIEFTU0VSVChtX3Bvc2l0aW9ucy5zaXplKCkgPiAw
KTsKKyAgICByZXR1cm4gbV9wb3NpdGlvbnMuZmlyc3QoKTsKK30KKworTGF5b3V0VW5pdCBTaW5n
bGVBeGlzU25hcExpc3Q6Om1heGltdW1TbmFwUG9zaXRpb24oKSBjb25zdAoreworICAgIEFTU0VS
VChtX3Bvc2l0aW9ucy5zaXplKCkgPiAwKTsKKyAgICByZXR1cm4gbV9wb3NpdGlvbnMubGFzdCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDU1NfU0NST0xMX1NO
QVAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1NpbmdsZUF4aXNT
bmFwTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2luZ2xlQXhpc1NuYXBM
aXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTU1YzEzYWVkOGQ3ZmIxY2JmYWExZGU2ZGZmYWFiM2I4NTA4ZWIz
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Npbmds
ZUF4aXNTbmFwTGlzdC5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNp
bmdsZUF4aXNTbmFwTGlzdF9oCisjZGVmaW5lIFNpbmdsZUF4aXNTbmFwTGlzdF9oCisKKyNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgorI2luY2x1
ZGUgIlNjcm9sbFR5cGVzLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBTaW5nbGVBeGlzU25hcExpc3QgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzT3duUHRyPFNpbmdsZUF4aXNTbmFwTGlzdD4gY3JlYXRlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2luZ2xlQXhpc1NuYXBMaXN0KCkpOworICAgIH0KKyAg
ICB2b2lkIHVwZGF0ZUZyb21PZmZzZXRzKExheW91dFVuaXQsIExheW91dFVuaXQsIGNvbnN0IFZl
Y3RvcjxMYXlvdXRVbml0PiYsIExheW91dFVuaXQsIGJvb2wsIExheW91dFVuaXQpOworICAgIExh
eW91dFVuaXQgY2xvc2VzdFNuYXBQb3NpdGlvbihMYXlvdXRVbml0LCBmbG9hdCA9IDApIGNvbnN0
OworICAgIExheW91dFVuaXQgbWluaW11bVNuYXBQb3NpdGlvbigpIGNvbnN0OworICAgIExheW91
dFVuaXQgbWF4aW11bVNuYXBQb3NpdGlvbigpIGNvbnN0OworCitwcml2YXRlOgorICAgIFZlY3Rv
cjxMYXlvdXRVbml0PiBtX3Bvc2l0aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIENTU19TQ1JPTExfU05BUAorCisjZW5kaWYgLy8gU2luZ2xlQXhpc1NuYXBM
aXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAppbmRleCBj
N2Q5NDk0NTQ3MTFmODNjNmJkN2JiNTEwY2IyMzFjODkxMjgwMTAwLi42Mjg0YzY0MjZjNmU4ZDA0
NDMwOGY2NjgxMDMwMWQ2YzNjM2U0ZDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYWJsZUFyZWEuY3BwCkBAIC00MSwxMSArNDEsMjIgQEAKICNpbmNsdWRlICJTY3JvbGxiYXJU
aGVtZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKKyNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5o
IgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjZW5k
aWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgU2FtZVNpemVBc1Njcm9sbGFibGVB
cmVhIHsKICAgICB2aXJ0dWFsIH5TYW1lU2l6ZUFzU2Nyb2xsYWJsZUFyZWEoKTsKICAgICB2b2lk
KiBwb2ludGVyOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgdm9pZCogaG9yaXpv
bnRhbFNuYXBBeGlzUG9pbnRlcjsKKyAgICB2b2lkKiB2ZXJ0aWNhbFNuYXBBeGlzUG9pbnRlcjsK
KyNlbmRpZgogICAgIEludFBvaW50IG9yaWdpbjsKICAgICB1bnNpZ25lZCBiaXRmaWVsZHMgOiAx
NjsKIH07CkBAIC0xNzgsNiArMTg5LDU1IEBAIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdo
ZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQogICAgIHJldHVy
biBzY3JvbGxBbmltYXRvcigpLT5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwogfQogCisj
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK1NpbmdsZUF4aXNTbmFwTGlzdCogU2Nyb2xsYWJs
ZUFyZWE6OnNpbmdsZUF4aXNTbmFwTGlzdChTY3JvbGxFdmVudEF4aXMgYXhpcykKK3sKKyAgICBp
ZiAoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpIHsKKyAgICAgICAgaWYgKCFt
X2hvcml6b250YWxTbmFwQXhpcykKKyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNuYXBBeGlzID0g
U2luZ2xlQXhpc1NuYXBMaXN0OjpjcmVhdGUoKTsKKworICAgICAgICByZXR1cm4gbV9ob3Jpem9u
dGFsU25hcEF4aXMuZ2V0KCk7CisgICAgfQorICAgIGlmICghbV92ZXJ0aWNhbFNuYXBBeGlzKQor
ICAgICAgICBtX3ZlcnRpY2FsU25hcEF4aXMgPSBTaW5nbGVBeGlzU25hcExpc3Q6OmNyZWF0ZSgp
OworCisgICAgcmV0dXJuIG1fdmVydGljYWxTbmFwQXhpcy5nZXQoKTsKK30KKwordm9pZCBTY3Jv
bGxhYmxlQXJlYTo6dXBkYXRlU25hcEF4aXNGcm9tRWxlbWVudEFuZFN0eWxlKFNjcm9sbEV2ZW50
QXhpcyBheGlzLCBFbGVtZW50KiBzY3JvbGxpbmdFbGVtZW50LCBSZW5kZXJCb3gqIGJveCwgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAgIGlmIChzdHlsZS5zY3JvbGxTbmFwVHlwZSgp
ID09IFNjcm9sbFNuYXBUeXBlOjpOb25lKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQVNT
RVJUKHNjcm9sbGluZ0VsZW1lbnQgJiYgYm94KTsKKyAgICBib29sIGlzSG9yaXpvbnRhbEF4aXMg
PSBheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbDsKKyAgICBMYXlvdXRVbml0IHZp
ZXdTaXplID0gaXNIb3Jpem9udGFsQXhpcyA/IGJveC0+d2lkdGgoKSA6IGJveC0+aGVpZ2h0KCk7
CisgICAgTGF5b3V0VW5pdCBzY3JvbGxTaXplID0gaXNIb3Jpem9udGFsQXhpcyA/IGJveC0+c2Ny
b2xsV2lkdGgoKSA6IGJveC0+c2Nyb2xsSGVpZ2h0KCk7CisgICAgaWYgKHNjcm9sbFNpemUgPD0g
MCB8fCB2aWV3U2l6ZSA8PSAwIHx8IHZpZXdTaXplID49IHNjcm9sbFNpemUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGJvb2wgdXNlc0VsZW1lbnRzID0gKGlzSG9yaXpvbnRhbEF4aXMgJiYgc3R5
bGUuc2Nyb2xsU25hcFVzZXNFbGVtZW50c1goKSkgfHwgKCFpc0hvcml6b250YWxBeGlzICYmIHN0
eWxlLnNjcm9sbFNuYXBVc2VzRWxlbWVudHNZKCkpOworICAgIGlmICh1c2VzRWxlbWVudHMgJiYg
IXNjcm9sbGluZ0VsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgVmVjdG9yPExheW91dFVuaXQ+IHNuYXBPZmZzZXRzOworICAgIGlmICh1c2VzRWxlbWVudHMp
CisgICAgICAgIHRvSFRNTEVsZW1lbnQoc2Nyb2xsaW5nRWxlbWVudCktPmFwcGVuZENoaWxkU25h
cE9mZnNldHNUb1ZlY3RvcihheGlzLCBzbmFwT2Zmc2V0cyk7CisgICAgZWxzZSB7CisgICAgICAg
IFZlY3RvcjxMZW5ndGg+IHNuYXBMZW5ndGhzID0gaXNIb3Jpem9udGFsQXhpcyA/IHN0eWxlLnNj
cm9sbFNuYXBPZmZzZXRzWCgpIDogc3R5bGUuc2Nyb2xsU25hcE9mZnNldHNZKCk7CisgICAgICAg
IGZvciAoTGVuZ3RoIHNuYXBMZW5ndGggOiBzbmFwTGVuZ3RocykKKyAgICAgICAgICAgIHNuYXBP
ZmZzZXRzLmFwcGVuZCh2YWx1ZUZvckxlbmd0aChzbmFwTGVuZ3RoLCB2aWV3U2l6ZSkpOworICAg
IH0KKyAgICBpZiAoIXNuYXBPZmZzZXRzLnNpemUoKSkKKyAgICAgICAgc25hcE9mZnNldHMuYXBw
ZW5kKDApOworCisgICAgTGF5b3V0VW5pdCBkZXN0aW5hdGlvbk9mZnNldCA9IHZhbHVlRm9yTGVu
Z3RoKGlzSG9yaXpvbnRhbEF4aXMgPyBzdHlsZS5zY3JvbGxTbmFwRGVzdGluYXRpb25YKCkgOiBz
dHlsZS5zY3JvbGxTbmFwRGVzdGluYXRpb25ZKCksIHZpZXdTaXplKTsKKyAgICBib29sIGhhc1Jl
cGVhdCA9IGlzSG9yaXpvbnRhbEF4aXMgPyBzdHlsZS5zY3JvbGxTbmFwSGFzUmVwZWF0WCgpIDog
c3R5bGUuc2Nyb2xsU25hcEhhc1JlcGVhdFkoKTsKKyAgICBMYXlvdXRVbml0IHJlcGVhdE9mZnNl
dCA9IHZhbHVlRm9yTGVuZ3RoKGlzSG9yaXpvbnRhbEF4aXMgPyBzdHlsZS5zY3JvbGxTbmFwUmVw
ZWF0T2Zmc2V0WCgpIDogc3R5bGUuc2Nyb2xsU25hcFJlcGVhdE9mZnNldFkoKSwgdmlld1NpemUp
OworICAgIHNpbmdsZUF4aXNTbmFwTGlzdChheGlzKS0+dXBkYXRlRnJvbU9mZnNldHModmlld1Np
emUsIHNjcm9sbFNpemUsIHNuYXBPZmZzZXRzLCBkZXN0aW5hdGlvbk9mZnNldCwgIXVzZXNFbGVt
ZW50cyAmJiBoYXNSZXBlYXQsIHJlcGVhdE9mZnNldCk7Cit9CisjZW5kaWYKKwogI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCiBib29sIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KGNv
bnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCmluZGV4IDJmZTI3NDkxNDUyOGZhNTA3YTMxOGE0NWVhOTEw
MDZlMWUyODRmMWIuLmY1MzA1NzhjZjc1MWE2M2YzYTI1NzhmNzQyOGUzYzQxNWQ2Y2NhMDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaApAQCAtMjcsNiArMjcsOSBA
QAogI2RlZmluZSBTY3JvbGxhYmxlQXJlYV9oCiAKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorI2luY2x1ZGUgIlNpbmdsZUF4aXNTbmFwTGlzdC5o
IgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC00MCw2ICs0MywxMiBAQCBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBTY3Jv
bGxBbmltYXRvcjsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CiBjbGFzcyBUaWxlZEJhY2tpbmc7Cisj
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBSZW5kZXJC
b3g7CitjbGFzcyBSZW5kZXJTdHlsZTsKK2NsYXNzIFNpbmdsZUF4aXNTbmFwTGlzdDsKKyNlbmRp
ZgogCiBjbGFzcyBTY3JvbGxhYmxlQXJlYSB7CiBwdWJsaWM6CkBAIC01OCw2ICs2NywxMSBAQCBw
dWJsaWM6CiAKICAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50Jik7CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIFNpbmdsZUF4aXNTbmFw
TGlzdCogc2luZ2xlQXhpc1NuYXBMaXN0KFNjcm9sbEV2ZW50QXhpcyk7CisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVNuYXBBeGlzKFNjcm9sbEV2ZW50QXhpcykgeyB9OworI2VuZGlmCisKICNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHZpcnR1YWwgYm9vbCBpc1RvdWNoU2Nyb2xsYWJsZSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGhhbmRsZVRvdWNoRXZl
bnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50Jik7CkBAIC0yNjEsNiArMjc1LDEwIEBAIHByb3Rl
Y3RlZDoKIAogICAgIGJvb2wgaGFzTGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdDsKIAorI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgdm9pZCB1cGRhdGVTbmFwQXhpc0Zyb21FbGVt
ZW50QW5kU3R5bGUoU2Nyb2xsRXZlbnRBeGlzLCBFbGVtZW50KiwgUmVuZGVyQm94KiwgY29uc3Qg
UmVuZGVyU3R5bGUmKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIHZpcnR1YWwgSW50UmVjdCB2
aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9s
bGJhcnMsIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdDsKICAgICB2b2lkIHNjcm9s
bFBvc2l0aW9uQ2hhbmdlZChjb25zdCBJbnRQb2ludCYpOwpAQCAtMjc1LDYgKzI5MywxMSBAQCBw
cml2YXRlOgogCiAgICAgbXV0YWJsZSBPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IG1fc2Nyb2xsQW5p
bWF0b3I7CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIG11dGFibGUgT3duUHRy
PFNpbmdsZUF4aXNTbmFwTGlzdD4gbV9ob3Jpem9udGFsU25hcEF4aXM7CisgICAgbXV0YWJsZSBP
d25QdHI8U2luZ2xlQXhpc1NuYXBMaXN0PiBtX3ZlcnRpY2FsU25hcEF4aXM7CisjZW5kaWYKKwog
ICAgIC8vIFRoZXJlIGFyZSA4IHBvc3NpYmxlIGNvbWJpbmF0aW9ucyBvZiB3cml0aW5nIG1vZGUg
YW5kIGRpcmVjdGlvbi4gU2Nyb2xsIG9yaWdpbiB3aWxsIGJlIG5vbi16ZXJvIGluIHRoZSB4IG9y
IHkgYXhpcwogICAgIC8vIGlmIHRoZXJlIGlzIGFueSByZXZlcnNlZCBkaXJlY3Rpb24gb3Igd3Jp
dGluZy1tb2RlLiBUaGUgY29tYmluYXRpb25zIGFyZToKICAgICAvLyB3cml0aW5nLW1vZGUgLyBk
aXJlY3Rpb24gICAgIHNjcm9sbE9yaWdpbi54KCkgc2V0ICAgIHNjcm9sbE9yaWdpbi55KCkgc2V0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2luZ2xlQXhpc1NuYXBB
bmltYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NpbmdsZUF4aXNTbmFwQW5p
bWF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wNTZjYzg4NTEwNzRjYWVhYzc1YjU2MzU3ZjMwZWNkYzQ4MDg1
NWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Npbmds
ZUF4aXNTbmFwQW5pbWF0b3IuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgU2luZ2xlQXhpc1NuYXBBbmltYXRvcl9oCisjZGVmaW5lIFNpbmdsZUF4aXNTbmFwQW5pbWF0
b3JfaAorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKworI2luY2x1ZGUgIkxheW91dFVu
aXQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxU
eXBlcy5oIgorI2luY2x1ZGUgIlNpbmdsZUF4aXNTbmFwTGlzdC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2VudW0gY2xhc3MgU2Nyb2xsU25hcFN0YXRlIHsKKyAgICBTbmFwcGluZywKKyAg
ICBHbGlkaW5nLAorICAgIElkbGUKK307CisKK2VudW0gY2xhc3MgV2hlZWxFdmVudFN0YXR1cyB7
CisgICAgVXNlclNjcm9sbEJlZ2luLAorICAgIFVzZXJTY3JvbGxpbmcsCisgICAgVXNlclNjcm9s
bEVuZCwKKyAgICBJbmVydGlhbFNjcm9sbEJlZ2luLAorICAgIEluZXJ0aWFsU2Nyb2xsaW5nLAor
ICAgIEluZXJ0aWFsU2Nyb2xsRW5kLAorICAgIFVua25vd24KK307CisKK2NsYXNzIFNpbmdsZUF4
aXNTbmFwQW5pbWF0b3JDbGllbnQgeworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgflNpbmdsZUF4
aXNTbmFwQW5pbWF0b3JDbGllbnQoKSB7IH0KKworcHVibGljOgorICAgIHZpcnR1YWwgTGF5b3V0
VW5pdCBzY3JvbGxPZmZzZXRJbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGltbWVkaWF0ZVNjcm9sbEluQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZsb2F0KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0U2Nyb2xsU25hcFRpbWVyKCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzdG9wU2Nyb2xsU25hcFRpbWVyKCkgPSAwOworfTsKKworY2xhc3MgU2luZ2xlQXhp
c1NuYXBBbmltYXRvciB7CitwdWJsaWM6CisgICAgU2luZ2xlQXhpc1NuYXBBbmltYXRvcihTaW5n
bGVBeGlzU25hcEFuaW1hdG9yQ2xpZW50KiwgU2luZ2xlQXhpc1NuYXBMaXN0KiwgU2Nyb2xsRXZl
bnRBeGlzKTsKKyAgICB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50Jik7CisgICAgYm9vbCBzaG91bGRPdmVycmlkZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JikgY29uc3Q7CisgICAgdm9pZCBzY3JvbGxVcGRhdGUoKTsKKworcHJpdmF0ZToK
KyAgICB2b2lkIGJlZ2luU25hcHBpbmcoU2Nyb2xsU25hcFN0YXRlKTsKKyAgICB2b2lkIGVuZFNu
YXBwaW5nKFNjcm9sbFNuYXBTdGF0ZSk7CisgICAgZmxvYXQgc25hcEFtb3VudCgpIGNvbnN0Owor
ICAgIGZsb2F0IGdsaWRlQW1vdW50KCkgY29uc3Q7CisgICAgdm9pZCBpbml0aWFsaXplR2xpZGVQ
YXJhbWV0ZXJzKGJvb2wpOworICAgIGJvb2wgcHVzaEluaXRpYWxNb21lbnR1bShmbG9hdCk7Cisg
ICAgZmxvYXQgYXZlcmFnZUluaXRpYWxNb21lbnR1bSgpIGNvbnN0OworICAgIHZvaWQgY2xlYXJJ
bml0aWFsTW9tZW50dW0oKTsKKworICAgIHN0YXRpYyBjb25zdCBpbnQgbW9tZW50dW1XaW5kb3dT
aXplID0gMzsKKyAgICBzdGF0aWMgY29uc3QgaW50IHNuYXBNYWduaXR1ZGVNYXg7CisgICAgc3Rh
dGljIGNvbnN0IGludCBzbmFwTWFnbml0dWRlTWluOworICAgIHN0YXRpYyBjb25zdCBpbnQgc25h
cFRocmVzaG9sZEhpZ2g7CisgICAgc3RhdGljIGNvbnN0IGludCBzbmFwVGhyZXNob2xkTG93Owor
ICAgIHN0YXRpYyBjb25zdCBmbG9hdCBnbGlkZUJvb3N0TXVsdGlwbGllcjsKKyAgICBzdGF0aWMg
Y29uc3QgZmxvYXQgbWF4VGFyZ2V0VmVsb2NpdHk7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1p
blRhcmdldFZlbG9jaXR5OworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBpbml0aWFsVG9GaW5hbE1v
bWVudHVtRmFjdG9yOworCisgICAgU2luZ2xlQXhpc1NuYXBBbmltYXRvckNsaWVudCogbV9jbGll
bnQ7CisgICAgU2luZ2xlQXhpc1NuYXBMaXN0KiBtX3NuYXBBeGlzOworICAgIFNjcm9sbEV2ZW50
QXhpcyBtX2F4aXM7CisgICAgLy8gVXNlZCB0byB0cmFjayBib3RoIHNuYXBwaW5nIGFuZCBnbGlk
aW5nIGJlaGF2aW9ycy4KKyAgICBTY3JvbGxTbmFwU3RhdGUgbV9jdXJTdGF0ZTsKKyAgICBMYXlv
dXRVbml0IG1faW5pdGlhbE9mZnNldDsKKyAgICBMYXlvdXRVbml0IG1fdGFyZ2V0T2Zmc2V0Owor
ICAgIC8vIFVzZWQgdG8gdHJhY2sgZ2xpZGluZyBiZWhhdmlvci4KKyAgICBMYXlvdXRVbml0IG1f
YmVnaW5UcmFja2luZ01vbWVudHVtT2Zmc2V0OworICAgIGludCBtX21vbWVudHVtQ291bnQ7Cisg
ICAgZmxvYXQgbV9tb21lbnR1bVdpbmRvd1tNT01FTlRVTV9XSU5ET1dfU0laRV07CisgICAgZmxv
YXQgbV9nbGlkZU11bHRpcGxpZXI7CisgICAgZmxvYXQgbV9nbGlkZVBoYXNlU2hpZnQ7CisgICAg
ZmxvYXQgbV9nbGlkZUluaXRpYWxNb21lbnR1bTsKKyAgICBib29sIG1fc2hvdWxkT3ZlcnJpZGVN
b21lbnR1bTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCisKKyNlbmRpZiAvLyBTaW5nbGVBeGlzU25hcEFuaW1hdG9yX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TaW5nbGVBeGlzU25hcEFu
aW1hdG9yLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NpbmdsZUF4aXNTbmFwQW5p
bWF0b3IubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTBhOGM5ZWVjYzc4ZTBiOWExYzJjZGFjOGRlZDM2OWRjM2Zj
ZGE1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TaW5n
bGVBeGlzU25hcEFuaW1hdG9yLm1tCkBAIC0wLDAgKzEsMzExIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbmdsZUF4aXNTbmFwQW5pbWF0b3IuaCIKKwor
I2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29u
c3QgaW50IFNpbmdsZUF4aXNTbmFwQW5pbWF0b3I6OnNuYXBNYWduaXR1ZGVNYXggPSAyNTsKK2Nv
bnN0IGludCBTaW5nbGVBeGlzU25hcEFuaW1hdG9yOjpzbmFwTWFnbml0dWRlTWluID0gNTsKK2Nv
bnN0IGludCBTaW5nbGVBeGlzU25hcEFuaW1hdG9yOjpzbmFwVGhyZXNob2xkSGlnaCA9IDEwMDA7
Citjb25zdCBpbnQgU2luZ2xlQXhpc1NuYXBBbmltYXRvcjo6c25hcFRocmVzaG9sZExvdyA9IDUw
OworY29uc3QgZmxvYXQgU2luZ2xlQXhpc1NuYXBBbmltYXRvcjo6Z2xpZGVCb29zdE11bHRpcGxp
ZXIgPSAzLjU7Citjb25zdCBmbG9hdCBTaW5nbGVBeGlzU25hcEFuaW1hdG9yOjptYXhUYXJnZXRW
ZWxvY2l0eSA9IDc7Citjb25zdCBmbG9hdCBTaW5nbGVBeGlzU25hcEFuaW1hdG9yOjptaW5UYXJn
ZXRWZWxvY2l0eSA9IDMuNTsKK2NvbnN0IGZsb2F0IFNpbmdsZUF4aXNTbmFwQW5pbWF0b3I6Omlu
aXRpYWxUb0ZpbmFsTW9tZW50dW1GYWN0b3IgPSAxLjAgLyA0MC4wOworCitzdGF0aWMgaW5saW5l
IGZsb2F0IGJlc3RNdWx0aXBsaWVyKGZsb2F0IGluaXRpYWxNb21lbnR1bSwgaW50IG1heEl0ZXJh
dGlvbnMsIGZsb2F0IHRhcmdldEZpbmFsVmVsb2NpdHkpCit7CisgICAgZmxvYXQgbXVsdGlwbGll
ckxvd2VyQm91bmQgPSAxOworICAgIGZsb2F0IG11bHRpcGxpZXJVcHBlckJvdW5kID0gMjsKKyAg
ICBmbG9hdCB0YXJnZXRNdWx0aXBsaWVyOworICAgIGZsb2F0IGZpbmFsVmVsb2NpdHk7CisgICAg
aW50IGN1cml0ZXIgPSAwOworICAgIHdoaWxlIChtdWx0aXBsaWVyTG93ZXJCb3VuZCA8IG11bHRp
cGxpZXJVcHBlckJvdW5kKSB7CisgICAgICAgIHRhcmdldE11bHRpcGxpZXIgPSAobXVsdGlwbGll
ckxvd2VyQm91bmQgKyBtdWx0aXBsaWVyVXBwZXJCb3VuZCkgLyAyOworICAgICAgICBpZiAoY3Vy
aXRlcisrID4gbWF4SXRlcmF0aW9ucykKKyAgICAgICAgICAgIHJldHVybiB0YXJnZXRNdWx0aXBs
aWVyOworICAgICAgICAKKyAgICAgICAgZmluYWxWZWxvY2l0eSA9ICgodGFyZ2V0TXVsdGlwbGll
ciAqIGluaXRpYWxNb21lbnR1bSkgLyAyKSAqICgxICsgY29zKHBpRmxvYXQgLSBhY29zKCgyIC0g
dGFyZ2V0TXVsdGlwbGllcikgLyB0YXJnZXRNdWx0aXBsaWVyKSkpOworICAgICAgICBpZiAodGFy
Z2V0RmluYWxWZWxvY2l0eSAtIDAuNSA8PSBmaW5hbFZlbG9jaXR5ICYmIGZpbmFsVmVsb2NpdHkg
PD0gdGFyZ2V0RmluYWxWZWxvY2l0eSArIDAuNSkKKyAgICAgICAgICAgIHJldHVybiB0YXJnZXRN
dWx0aXBsaWVyOworCisgICAgICAgIGlmIChmaW5hbFZlbG9jaXR5IDwgdGFyZ2V0RmluYWxWZWxv
Y2l0eSAtIDAuNSkKKyAgICAgICAgICAgIG11bHRpcGxpZXJMb3dlckJvdW5kID0gdGFyZ2V0TXVs
dGlwbGllcjsKKworICAgICAgICBlbHNlIGlmIChmaW5hbFZlbG9jaXR5ID4gdGFyZ2V0RmluYWxW
ZWxvY2l0eSArIDAuNSkKKyAgICAgICAgICAgIG11bHRpcGxpZXJVcHBlckJvdW5kID0gdGFyZ2V0
TXVsdGlwbGllcjsKKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgV2hl
ZWxFdmVudFN0YXR1cyB0b1doZWVsRXZlbnRTdGF0dXMoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2Ug
cGhhc2UsIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1vbWVudHVtUGhhc2UpCit7CisgICAgaWYg
KHBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSkgeworICAgICAgICBzd2l0Y2gg
KG1vbWVudHVtUGhhc2UpIHsKKyAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJl
Z2FuOgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xs
QmVnaW47CisKKyAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQ6Cisg
ICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxpbmc7CisK
KyAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkOgorICAgICAgICAgICAg
cmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsRW5kOworCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VW5rbm93bjsgCisg
ICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2VOb25lKSB7CisgICAgICAgIHN3aXRjaCAocGhhc2UpIHsKKyAgICAgICAgY2FzZSBQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuOgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZl
bnRTdGF0dXM6OlVzZXJTY3JvbGxCZWdpbjsKKworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlQ2hhbmdlZDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpV
c2VyU2Nyb2xsaW5nOworCisgICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRl
ZDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsRW5kOwor
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6
VW5rbm93bjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6
VW5rbm93bjsKK30KKworc3RhdGljIGlubGluZSBmbG9hdCBwcm9qZWN0ZWRNb21lbnR1bURpc3Rh
bmNlKGZsb2F0IG1vbWVudHVtKQoreworICAgIHJldHVybiAxNi42Nzg5ICogbW9tZW50dW07Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIGNsYW1wVG9Cb3VuZHMoVCYgdmFs
dWUsIFQgbWluLCBUIG1heCkKK3sKKyAgICBpZiAodmFsdWUgPCBtaW4pCisgICAgICAgIHZhbHVl
ID0gbWluOworCisgICAgaWYgKHZhbHVlID4gbWF4KQorICAgICAgICB2YWx1ZSA9IG1heDsKK30K
KworU2luZ2xlQXhpc1NuYXBBbmltYXRvcjo6U2luZ2xlQXhpc1NuYXBBbmltYXRvcihTaW5nbGVB
eGlzU25hcEFuaW1hdG9yQ2xpZW50KiBjbGllbnQsIFNpbmdsZUF4aXNTbmFwTGlzdCogc25hcEF4
aXMsIFNjcm9sbEV2ZW50QXhpcyBheGlzKQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwg
bV9zbmFwQXhpcyhzbmFwQXhpcykKKyAgICAsIG1fYXhpcyhheGlzKQorICAgICwgbV9jdXJTdGF0
ZShTY3JvbGxTbmFwU3RhdGU6OklkbGUpCisgICAgLCBtX2luaXRpYWxPZmZzZXQoMCkKKyAgICAs
IG1fdGFyZ2V0T2Zmc2V0KDApCisgICAgLCBtX2JlZ2luVHJhY2tpbmdNb21lbnR1bU9mZnNldCgw
KQorICAgICwgbV9tb21lbnR1bUNvdW50KDApCisgICAgLCBtX2dsaWRlTXVsdGlwbGllcigwKQor
ICAgICwgbV9nbGlkZVBoYXNlU2hpZnQoMCkKKyAgICAsIG1fZ2xpZGVJbml0aWFsTW9tZW50dW0o
MCkKKyAgICAsIG1fc2hvdWxkT3ZlcnJpZGVNb21lbnR1bShmYWxzZSkKK3sKK30KKwordm9pZCBT
aW5nbGVBeGlzU25hcEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hl
ZWxFdmVudCYgZXZlbnQpCit7CisgICAgZmxvYXQgc2Nyb2xsRGVsdGEgPSBtX2F4aXMgPT0gU2Ny
b2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gLWV2ZW50LmRlbHRhWCgpIDogLWV2ZW50LmRlbHRh
WSgpOworICAgIFdoZWVsRXZlbnRTdGF0dXMgd2hlZWxTdGF0dXMgPSB0b1doZWVsRXZlbnRTdGF0
dXMoZXZlbnQucGhhc2UoKSwgZXZlbnQubW9tZW50dW1QaGFzZSgpKTsKKyAgICBpZiAoKHdoZWVs
U3RhdHVzID09IFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxpbmcgfHwgd2hlZWxTdGF0dXMg
PT0gV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxpbmcpICYmICFzY3JvbGxEZWx0YSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgc3dpdGNoICh3aGVlbFN0YXR1cykgeworICAgIGNhc2Ug
V2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEJlZ2luOgorICAgIGNhc2UgV2hlZWxFdmVudFN0
YXR1czo6VXNlclNjcm9sbGluZzoKKyAgICAgICAgZW5kU25hcHBpbmcoU2Nyb2xsU25hcFN0YXRl
OjpJZGxlKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVz
ZXJTY3JvbGxFbmQ6CisgICAgICAgIGJlZ2luU25hcHBpbmcoU2Nyb2xsU25hcFN0YXRlOjpTbmFw
cGluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpJbmVy
dGlhbFNjcm9sbEJlZ2luOgorICAgICAgICAvLyBCZWdpbiB0cmFja2luZyBtb21lbnR1bSBkZWx0
YXMgZm9yIGdsaWRlIHByZWRpY3Rpb24uCisgICAgICAgIGVuZFNuYXBwaW5nKFNjcm9sbFNuYXBT
dGF0ZTo6SWRsZSk7CisgICAgICAgIHB1c2hJbml0aWFsTW9tZW50dW0oc2Nyb2xsRGVsdGEpOwor
ICAgICAgICBtX2JlZ2luVHJhY2tpbmdNb21lbnR1bU9mZnNldCA9IG1fY2xpZW50LT5zY3JvbGxP
ZmZzZXRJbkF4aXMobV9heGlzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdoZWVsRXZl
bnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsaW5nOgorICAgICAgICBpZiAobV9jdXJTdGF0ZSAhPSBT
Y3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcpIHsKKyAgICAgICAgICAgIGlmIChtX21vbWVudHVtQ291
bnQgPCBtb21lbnR1bVdpbmRvd1NpemUpCisgICAgICAgICAgICAgICAgcHVzaEluaXRpYWxNb21l
bnR1bShzY3JvbGxEZWx0YSk7CisKKyAgICAgICAgICAgIGlmIChtX21vbWVudHVtQ291bnQgPT0g
bW9tZW50dW1XaW5kb3dTaXplKQorICAgICAgICAgICAgICAgIGJlZ2luU25hcHBpbmcoU2Nyb2xs
U25hcFN0YXRlOjpHbGlkaW5nKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNh
c2UgV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxFbmQ6CisgICAgICAgIGNsZWFySW5p
dGlhbE1vbWVudHVtKCk7CisgICAgICAgIG1fc2hvdWxkT3ZlcnJpZGVNb21lbnR1bSA9IGZhbHNl
OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VW5rbm93bjoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
KworYm9vbCBTaW5nbGVBeGlzU25hcEFuaW1hdG9yOjpzaG91bGRPdmVycmlkZVdoZWVsRXZlbnQo
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9z
aG91bGRPdmVycmlkZU1vbWVudHVtICYmIHRvV2hlZWxFdmVudFN0YXR1cyhldmVudC5waGFzZSgp
LCBldmVudC5tb21lbnR1bVBoYXNlKCkpID09IFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Ny
b2xsaW5nOworfQorCit2b2lkIFNpbmdsZUF4aXNTbmFwQW5pbWF0b3I6OnNjcm9sbFVwZGF0ZSgp
Cit7CisgICAgQVNTRVJUKG1fY3VyU3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nIHx8
IG1fY3VyU3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZyk7CisgICAgZmxvYXQgYW1v
dW50ID0gbV9jdXJTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nID8gc25hcEFtb3Vu
dCgpIDogZ2xpZGVBbW91bnQoKTsKKyAgICBpZiAoYW1vdW50KQorICAgICAgICBtX2NsaWVudC0+
aW1tZWRpYXRlU2Nyb2xsSW5BeGlzKG1fYXhpcywgYW1vdW50KTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgbV9jdXJTdGF0ZSA9IFNjcm9sbFNuYXBTdGF0ZTo6SWRsZTsKKyAgICAgICAgbV9jbGllbnQt
PnN0b3BTY3JvbGxTbmFwVGltZXIoKTsKKyAgICB9Cit9CisKK3ZvaWQgU2luZ2xlQXhpc1NuYXBB
bmltYXRvcjo6YmVnaW5TbmFwcGluZyhTY3JvbGxTbmFwU3RhdGUgbmV3U3RhdGUpCit7CisgICAg
QVNTRVJUKG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZyB8fCBuZXdTdGF0ZSA9
PSBTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nKTsKKyAgICBMYXlvdXRVbml0IG9mZnNldCA9IG1f
Y2xpZW50LT5zY3JvbGxPZmZzZXRJbkF4aXMobV9heGlzKTsKKyAgICBmbG9hdCBpbml0aWFsTW9t
ZW50dW0gPSBhdmVyYWdlSW5pdGlhbE1vbWVudHVtKCk7CisgICAgTGF5b3V0VW5pdCBwcm9qZWN0
ZWRTY3JvbGxEZXN0aW5hdGlvbiA9IG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGlu
ZyA/IG1fYmVnaW5UcmFja2luZ01vbWVudHVtT2Zmc2V0ICsgTGF5b3V0VW5pdChwcm9qZWN0ZWRN
b21lbnR1bURpc3RhbmNlKGluaXRpYWxNb21lbnR1bSkpIDogb2Zmc2V0OworICAgIGNsYW1wVG9C
b3VuZHM8TGF5b3V0VW5pdD4ocHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24sIG1fc25hcEF4aXMt
Pm1pbmltdW1TbmFwUG9zaXRpb24oKSwgbV9zbmFwQXhpcy0+bWF4aW11bVNuYXBQb3NpdGlvbigp
KTsKKworICAgIG1faW5pdGlhbE9mZnNldCA9IG9mZnNldDsKKyAgICBtX3RhcmdldE9mZnNldCA9
IG1fc25hcEF4aXMtPmNsb3Nlc3RTbmFwUG9zaXRpb24ocHJvamVjdGVkU2Nyb2xsRGVzdGluYXRp
b24sIGluaXRpYWxNb21lbnR1bSk7CisgICAgaWYgKG1faW5pdGlhbE9mZnNldCA9PSBtX3Rhcmdl
dE9mZnNldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJTdGF0ZSA9IG5ld1N0YXRlOwor
ICAgIGlmIChuZXdTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcpIHsKKyAgICAgICAg
bV9zaG91bGRPdmVycmlkZU1vbWVudHVtID0gdHJ1ZTsKKyAgICAgICAgbV9nbGlkZUluaXRpYWxN
b21lbnR1bSA9IGluaXRpYWxNb21lbnR1bTsKKyAgICAgICAgYm9vbCBnbGlkZVJlcXVpcmVzQm9v
c3Q7CisgICAgICAgIGlmIChpbml0aWFsTW9tZW50dW0gPiAwKQorICAgICAgICAgICAgZ2xpZGVS
ZXF1aXJlc0Jvb3N0ID0gcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24gLSBvZmZzZXQgPCBtX3Rh
cmdldE9mZnNldCAtIHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBnbGlkZVJlcXVpcmVzQm9vc3QgPSBvZmZzZXQgLSBwcm9qZWN0ZWRTY3JvbGxE
ZXN0aW5hdGlvbiA8IHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uIC0gbV90YXJnZXRPZmZzZXQ7
CisKKyAgICAgICAgaW5pdGlhbGl6ZUdsaWRlUGFyYW1ldGVycyhnbGlkZVJlcXVpcmVzQm9vc3Qp
OworICAgIH0KKyAgICBtX2NsaWVudC0+c3RhcnRTY3JvbGxTbmFwVGltZXIoKTsKK30KKwordm9p
ZCBTaW5nbGVBeGlzU25hcEFuaW1hdG9yOjplbmRTbmFwcGluZyhTY3JvbGxTbmFwU3RhdGUgbmV3
U3RhdGUpCit7CisgICAgQVNTRVJUKG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6SWRsZSk7
CisgICAgY2xlYXJJbml0aWFsTW9tZW50dW0oKTsKKyAgICBtX2N1clN0YXRlID0gbmV3U3RhdGU7
CisgICAgbV9jbGllbnQtPnN0b3BTY3JvbGxTbmFwVGltZXIoKTsKK30KKworZmxvYXQgU2luZ2xl
QXhpc1NuYXBBbmltYXRvcjo6c25hcEFtb3VudCgpIGNvbnN0Cit7CisgICAgTGF5b3V0VW5pdCBv
ZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0SW5BeGlzKG1fYXhpcyk7CisgICAgYm9vbCBj
YW5Db21wdXRlU25hcCA9ICAobV9pbml0aWFsT2Zmc2V0IDw9IG9mZnNldCAmJiBvZmZzZXQgPCBt
X3RhcmdldE9mZnNldCkgfHwgKG1fdGFyZ2V0T2Zmc2V0IDwgb2Zmc2V0ICYmIG9mZnNldCA8PSBt
X2luaXRpYWxPZmZzZXQpOworICAgIGlmIChtX2N1clN0YXRlICE9IFNjcm9sbFNuYXBTdGF0ZTo6
U25hcHBpbmcgfHwgIWNhbkNvbXB1dGVTbmFwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlu
dCBzaWduID0gbV9pbml0aWFsT2Zmc2V0IDwgbV90YXJnZXRPZmZzZXQgPyAxIDogLTE7CisgICAg
ZmxvYXQgcHJvZ3Jlc3MgPSAoKGZsb2F0KShvZmZzZXQgLSBtX2luaXRpYWxPZmZzZXQpKSAvICht
X3RhcmdldE9mZnNldCAtIG1faW5pdGlhbE9mZnNldCk7CisgICAgZmxvYXQgdGhyZXNob2xkZWRE
aXN0YW5jZSA9IChtX3RhcmdldE9mZnNldCAtIG1faW5pdGlhbE9mZnNldCkgKiBzaWduOworICAg
IGNsYW1wVG9Cb3VuZHM8ZmxvYXQ+KHRocmVzaG9sZGVkRGlzdGFuY2UsIHNuYXBUaHJlc2hvbGRM
b3csIHNuYXBUaHJlc2hvbGRIaWdoKTsKKyAgICBmbG9hdCBtYWduaXR1ZGUgPSBzbmFwTWFnbml0
dWRlTWluICsgKHNuYXBNYWduaXR1ZGVNYXggLSBzbmFwTWFnbml0dWRlTWluKSAqICh0aHJlc2hv
bGRlZERpc3RhbmNlIC0gc25hcFRocmVzaG9sZExvdykgLyAoc25hcFRocmVzaG9sZEhpZ2ggLSBz
bmFwVGhyZXNob2xkTG93KTsKKyAgICBmbG9hdCByYXdTbmFwQW1vdW50ID0gMSArIG1hZ25pdHVk
ZSAqIHNpbihwaUZsb2F0ICogcHJvZ3Jlc3MpOworICAgIGlmICgobV90YXJnZXRPZmZzZXQgPCBv
ZmZzZXQgJiYgb2Zmc2V0IC0gcmF3U25hcEFtb3VudCA8IG1fdGFyZ2V0T2Zmc2V0KSB8fCAobV90
YXJnZXRPZmZzZXQgPiBvZmZzZXQgJiYgb2Zmc2V0ICsgcmF3U25hcEFtb3VudCA+IG1fdGFyZ2V0
T2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIG1fdGFyZ2V0T2Zmc2V0IC0gb2Zmc2V0OworCisgICAg
cmV0dXJuIHNpZ24gKiByYXdTbmFwQW1vdW50OworfQorCitmbG9hdCBTaW5nbGVBeGlzU25hcEFu
aW1hdG9yOjpnbGlkZUFtb3VudCgpIGNvbnN0Cit7CisgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBt
X2NsaWVudC0+c2Nyb2xsT2Zmc2V0SW5BeGlzKG1fYXhpcyk7CisgICAgYm9vbCBjYW5Db21wdXRl
R2xpZGUgPSAobV9pbml0aWFsT2Zmc2V0IDw9IG9mZnNldCAmJiBvZmZzZXQgPCBtX3RhcmdldE9m
ZnNldCkgfHwgKG1fdGFyZ2V0T2Zmc2V0IDwgb2Zmc2V0ICYmIG9mZnNldCA8PSBtX2luaXRpYWxP
ZmZzZXQpOworICAgIGlmIChtX2N1clN0YXRlICE9IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZyB8
fCAhY2FuQ29tcHV0ZUdsaWRlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IHByb2dy
ZXNzID0gKChmbG9hdCkob2Zmc2V0IC0gbV9pbml0aWFsT2Zmc2V0KSkgLyAobV90YXJnZXRPZmZz
ZXQgLSBtX2luaXRpYWxPZmZzZXQpOworICAgIGZsb2F0IHNoaWZ0ID0gY2VpbCgoKG1fZ2xpZGVN
dWx0aXBsaWVyICogbV9nbGlkZUluaXRpYWxNb21lbnR1bSkgLyAyKSAqICgxICsgY29zKHBpRmxv
YXQgKiBwcm9ncmVzcyAtIG1fZ2xpZGVQaGFzZVNoaWZ0KSkpOworICAgIGlmIChtX2luaXRpYWxP
ZmZzZXQgPCBtX3RhcmdldE9mZnNldCkKKyAgICAgICAgc2hpZnQgPSBzaGlmdCA8IDEgPyAxIDog
c2hpZnQ7CisgICAgZWxzZSBpZiAobV9pbml0aWFsT2Zmc2V0ID4gbV90YXJnZXRPZmZzZXQpCisg
ICAgICAgIHNoaWZ0ID0gc2hpZnQgPiAtMSA/IC0xIDogc2hpZnQ7CisKKyAgICBpZiAoKG1faW5p
dGlhbE9mZnNldCA8IG1fdGFyZ2V0T2Zmc2V0ICYmIG9mZnNldCArIHNoaWZ0ID4gbV90YXJnZXRP
ZmZzZXQpIHx8IChtX2luaXRpYWxPZmZzZXQgPiBtX3RhcmdldE9mZnNldCAmJiBvZmZzZXQgKyBz
aGlmdCA8IG1fdGFyZ2V0T2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIG1fdGFyZ2V0T2Zmc2V0IC0g
b2Zmc2V0OworCisgICAgcmV0dXJuIHNoaWZ0OworfQorCit2b2lkIFNpbmdsZUF4aXNTbmFwQW5p
bWF0b3I6OmluaXRpYWxpemVHbGlkZVBhcmFtZXRlcnMoYm9vbCBzaG91bGRCb29zdEluaXRpYWxN
b21lbnR1bSkKK3sKKyAgICBpZiAoc2hvdWxkQm9vc3RJbml0aWFsTW9tZW50dW0pCisgICAgICAg
IG1fZ2xpZGVJbml0aWFsTW9tZW50dW0gKj0gZ2xpZGVCb29zdE11bHRpcGxpZXI7CisKKyAgICBm
bG9hdCB0YXJnZXRGaW5hbFZlbG9jaXR5ID0gaW5pdGlhbFRvRmluYWxNb21lbnR1bUZhY3RvciAq
IChtX2dsaWRlSW5pdGlhbE1vbWVudHVtIDwgMCA/IC1tX2dsaWRlSW5pdGlhbE1vbWVudHVtIDog
bV9nbGlkZUluaXRpYWxNb21lbnR1bSk7CisgICAgY2xhbXBUb0JvdW5kczxmbG9hdD4odGFyZ2V0
RmluYWxWZWxvY2l0eSwgbWluVGFyZ2V0VmVsb2NpdHksIG1heFRhcmdldFZlbG9jaXR5KTsKKyAg
ICBtX2dsaWRlTXVsdGlwbGllciA9IGJlc3RNdWx0aXBsaWVyKG1fZ2xpZGVJbml0aWFsTW9tZW50
dW0gPCAwID8gLW1fZ2xpZGVJbml0aWFsTW9tZW50dW0gOiBtX2dsaWRlSW5pdGlhbE1vbWVudHVt
LCAxNSwgdGFyZ2V0RmluYWxWZWxvY2l0eSk7CisgICAgbV9nbGlkZVBoYXNlU2hpZnQgPSBhY29z
KCgyIC0gbV9nbGlkZU11bHRpcGxpZXIpIC8gbV9nbGlkZU11bHRpcGxpZXIpOworfQorCitib29s
IFNpbmdsZUF4aXNTbmFwQW5pbWF0b3I6OnB1c2hJbml0aWFsTW9tZW50dW0oZmxvYXQgbW9tZW50
dW0pCit7CisgICAgaWYgKG1fbW9tZW50dW1Db3VudCA+PSBtb21lbnR1bVdpbmRvd1NpemUpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgbV9tb21lbnR1bVdpbmRvd1ttX21vbWVudHVtQ291
bnQrK10gPSBtb21lbnR1bTsKKyAgICByZXR1cm4gbV9tb21lbnR1bUNvdW50ID09IG1vbWVudHVt
V2luZG93U2l6ZTsKK30KKworZmxvYXQgU2luZ2xlQXhpc1NuYXBBbmltYXRvcjo6YXZlcmFnZUlu
aXRpYWxNb21lbnR1bSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX21vbWVudHVtQ291bnQpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgZmxvYXQgc3VtID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IG1fbW9tZW50dW1Db3VudDsgaSsrKQorICAgICAgICBzdW0gKz0gbV9tb21lbnR1bVdpbmRv
d1tpXTsKKworICAgIHJldHVybiBzdW0gLyBtX21vbWVudHVtQ291bnQ7Cit9CisKK3ZvaWQgU2lu
Z2xlQXhpc1NuYXBBbmltYXRvcjo6Y2xlYXJJbml0aWFsTW9tZW50dW0oKQoreworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbV9tb21lbnR1bUNvdW50OyBpKyspCisgICAgICAgIG1fbW9tZW50dW1X
aW5kb3dbaV0gPSAwOworCisgICAgbV9tb21lbnR1bUNvdW50ID0gMDsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ1NTX1NDUk9MTF9TTkFQCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCAwNDI0ZWNiODVlZDhlN2IzMmI2MDEwMGE5
ZTBlZmMyMTJjOGU1NGVjLi5hNTVkMTA0ZTQwYmM3YTRmNDFjYzUyOTVmYjY3NzZlOWU4ZWI0M2U5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTMwMjksNiAr
MzAyOSwxNyBAQCBTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFi
bGVBcmVhKCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAorI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTbmFwQXhpcyhTY3JvbGxFdmVudEF4aXMg
YXhpcykKK3sKKyAgICBpZiAoIWVuY2xvc2luZ0VsZW1lbnQoKSB8fCAhZW5jbG9zaW5nRWxlbWVu
dCgpLT5yZW5kZXJCb3goKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyQm94KiBib3gg
PSBlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpOworICAgIHVwZGF0ZVNuYXBBeGlzRnJv
bUVsZW1lbnRBbmRTdHlsZShheGlzLCBlbmNsb3NpbmdFbGVtZW50KCksIGJveCwgYm94LT5zdHls
ZSgpKTsKK30KKyNlbmRpZgorCiBpbnQgUmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAogewogICAg
IGlmICghbV92QmFyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IDI2
NjU1OWFmZmI4Y2ZhMDg4YzBlYWMwMzhmZDZlYjdjOWY4YjFmNDcuLjQyMmVjMTc0YjZhNTRkOWIz
ZDc1YWVhZDAzZDRkM2Q0M2Q5OGE2MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5oCkBAIC00OSw2ICs0OSw5IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyUHRyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpZiBFTkFCTEUo
Q1NTX1NDUk9MTF9TTkFQKQorI2luY2x1ZGUgIlNpbmdsZUF4aXNTbmFwTGlzdC5oIgorI2VuZGlm
CiAjaW5jbHVkZSA8bWVtb3J5PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03MCw2ICs3Myw5
IEBAIGNsYXNzIFJlbmRlclNjcm9sbGJhclBhcnQ7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNz
IFJlbmRlclZpZXc7CiBjbGFzcyBTY3JvbGxiYXI7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKK2NsYXNzIFNpbmdsZUF4aXNTbmFwTGlzdDsKKyNlbmRpZgogY2xhc3MgVHJhbnNmb3JtYXRp
b25NYXRyaXg7CiAKIGVudW0gQm9yZGVyUmFkaXVzQ2xpcHBpbmdSdWxlIHsgSW5jbHVkZVNlbGZG
b3JCb3JkZXJSYWRpdXMsIERvTm90SW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMgfTsKQEAgLTQz
OSw2ICs0NDUsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTY3JvbGxiYXIqIGhvcml6b250YWxT
Y3JvbGxiYXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KICAgICB2
aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX3ZCYXIuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIFNjcm9sbGFibGVBcmVhKiBlbmNsb3Np
bmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0IG92ZXJyaWRlOworI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNuYXBBeGlzKFNjcm9sbEV2ZW50QXhpcykg
b3ZlcnJpZGU7CisjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykKICNpZiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236353</attachid>
            <date>2014-08-10 23:26:49 -0700</date>
            <delta_ts>2014-08-11 15:33:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135768-20140810232637.patch</filename>
            <type>text/plain</type>
            <size>25102</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyMzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4
IDdkMDc3MzU4ZmQ1NzEzZDg0YTRiNmMyYmRhZGNlOWQ3NDllMmQyMmIuLjU2YWE1NDU2YWVjNzQy
MWU1Zjc4YjlkNzY5MGIwNzUzNjJiYmU3NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCkBA
IC0xMjksNiArMTI5LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZv
cm0vbWFjL1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uTWFjLm1tCiAgICAgcGxhdGZv
cm0vbWFjL1NoYXJlZEJ1ZmZlck1hYy5tbQogICAgIHBsYXRmb3JtL21hYy9TaGFyZWRUaW1lck1h
Yy5tbQorICAgIHBsYXRmb3JtL21hYy9TaW5nbGVBeGlzU25hcEFuaW1hdG9yLm1tCiAgICAgcGxh
dGZvcm0vbWFjL1NvdW5kTWFjLm1tCiAgICAgcGxhdGZvcm0vbWFjL1N1ZGRlblRlcm1pbmF0aW9u
Lm1tCiAgICAgcGxhdGZvcm0vbWFjL1N5c3RlbVNsZWVwTGlzdGVuZXJNYWMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyYjA2
NmQ4MGNmNWMwNmVjYzJlODFhN2UyZjIyZmE2NzY2MmY2NzUxLi5hN2VkZGVmMTIyYjRmNmQ1ZDc1
YTNiY2RhOGRiODhjMmIwZTI3MzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MjQ4LDYgKzYyNDgsOCBAQAogCQlGNDJGRkI0
NjE5ODRCNzE2MDBGNjgzN0YgLyogTGVuZ3RoUmVwZWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDJGRkI0NTE5ODRCNzE2MDBGNjgzN0YgLyogTGVu
Z3RoUmVwZWF0LmggKi87IH07CiAJCUY0NUMyMzFEMTk5NUI3M0IwMEE2RTJFMyAvKiBTaW5nbGVB
eGlzU25hcExpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjQ1QzIzMUIxOTk1QjczQjAwQTZFMkUzIC8qIFNpbmdsZUF4aXNTbmFwTGlzdC5jcHAg
Ki87IH07CiAJCUY0NUMyMzFFMTk5NUI3M0IwMEE2RTJFMyAvKiBTaW5nbGVBeGlzU25hcExpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0NUMyMzFD
MTk5NUI3M0IwMEE2RTJFMyAvKiBTaW5nbGVBeGlzU25hcExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGNDc4NzU1NDE5OTgzQUZGMDAyNEEy
ODcgLyogU2luZ2xlQXhpc1NuYXBBbmltYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3ODc1NTIxOTk4M0FGRjAwMjRBMjg3IC8qIFNpbmdsZUF4
aXNTbmFwQW5pbWF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQlGNDc4NzU1NTE5OTgzQUZGMDAyNEEyODcgLyogU2luZ2xlQXhpc1NuYXBBbmlt
YXRvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0
Nzg3NTUzMTk5ODNBRkYwMDI0QTI4NyAvKiBTaW5nbGVBeGlzU25hcEFuaW1hdG9yLm1tICovOyB9
OwogCQlGNDdBNUUzRTE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDdBNUUzQjE5
NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3QTVFM0YxOTVCOEU0ODAwNDgz
MTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDdBNUUzQTE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVT
Y3JvbGxTbmFwUG9pbnRzLmNwcCAqLzsgfTsKIAkJRjUwNjY0RjcxNTdGNTJEQzAwQUMyMjZGIC8q
IEZvcm1Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY1MDY2NEY1MTU3RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29udHJvbGxlci5jcHAg
Ki87IH07CkBAIC0xMzc2OCw2ICsxMzc3MCw4IEBACiAJCUY0MkZGQjQ1MTk4NEI3MTYwMEY2ODM3
RiAvKiBMZW5ndGhSZXBlYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVu
Z3RoUmVwZWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NUMyMzFCMTk5NUI3
M0IwMEE2RTJFMyAvKiBTaW5nbGVBeGlzU25hcExpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2luZ2xlQXhpc1NuYXBMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRjQ1QzIzMUMxOTk1QjczQjAwQTZFMkUzIC8qIFNpbmdsZUF4aXNTbmFw
TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW5nbGVBeGlzU25hcExp
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjQ3ODc1NTIxOTk4M0FGRjAwMjRB
Mjg3IC8qIFNpbmdsZUF4aXNTbmFwQW5pbWF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2luZ2xlQXhpc1NuYXBBbmltYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGNDc4NzU1MzE5OTgzQUZGMDAyNEEyODcgLyogU2luZ2xlQXhpc1NuYXBBbmltYXRv
ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNpbmdsZUF4aXNT
bmFwQW5pbWF0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0N0E1RTNBMTk1
QjhDOEEwMDQ4MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcDsgcGF0aCA9
IHN0eWxlL1N0eWxlU2Nyb2xsU25hcFBvaW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUY0N0E1RTNCMTk1QjhDOEEwMDQ4MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQb2ludHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3R5bGVTY3JvbGxTbmFwUG9pbnRz
Lmg7IHBhdGggPSBzdHlsZS9TdHlsZVNjcm9sbFNuYXBQb2ludHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRjUwNjY0RjUxNTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1Db250cm9sbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NDEzLDYgKzE2NDE3LDggQEAK
IAkJNjU4MkExNDgwOTk5OUQ2QzAwQkVFQjZEIC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRjQ3ODc1NTIxOTk4M0FGRjAwMjRBMjg3IC8qIFNp
bmdsZUF4aXNTbmFwQW5pbWF0b3IuaCAqLywKKwkJCQlGNDc4NzU1MzE5OTgzQUZGMDAyNEEyODcg
LyogU2luZ2xlQXhpc1NuYXBBbmltYXRvci5tbSAqLywKIAkJCQk2NUE2NDBGMDA1MzNCQjFGMDA4
NUU3NzcgLyogQmxvY2tFeGNlcHRpb25zLmggKi8sCiAJCQkJNjVGODA2OTcwNTREOUY4NjAwOEJG
Nzc2IC8qIEJsb2NrRXhjZXB0aW9ucy5tbSAqLywKIAkJCQkyOTE5QTFFQTE2QjMzNzg5MDA3ODcy
MTMgLyogQ29udGVudEZpbHRlck1hYy5tbSAqLywKQEAgLTI2MjY0LDYgKzI2MjcwLDcgQEAKIAkJ
CQlCMjIyN0E5NzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDg4QTBFMEExMjZFRjFEQjAwOTc4RjdBIC8qIFNWR1Byb3BlcnR5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODFERDQ5QzEzQkExQTYwMDBEQzc2MjcgLyogU1ZHUHJv
cGVydHlJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQlGNDc4NzU1NDE5OTgzQUZGMDAyNEEyODcg
LyogU2luZ2xlQXhpc1NuYXBBbmltYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4QTBFMEIx
MjZFRjFEQjAwOTc4RjdBIC8qIFNWR1Byb3BlcnR5VGVhck9mZi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDg4QTBFMEMxMjZFRjFEQjAwOTc4RjdBIC8qIFNWR1Byb3BlcnR5VHJhaXRzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMjIyN0E5QTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUmFkaWFsR3JhZGll
bnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI4MTgwLDYgKzI4MTg3LDcgQEAKIAkJCQlC
RTYxMDM5RDE4QTlENjUyMDBERDUwRDcgLyogSlNEYXRhQ3VlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTQxNjJBNDU3MTAxMTQ2NDcwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNj
b3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNjJBNDU0MTAxMTQ1RTMwMERGRjNFRCAvKiBK
U0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUY0Nzg3NTU1MTk5ODNBRkYwMDI0QTI4NyAvKiBTaW5nbGVBeGlzU25hcEFuaW1hdG9yLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFRDExMkIwM0Y5NDAwM0E1ODNBIC8qIEpTRGVsYXlOb2Rl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxRkIxQTY1MTIwQTVEM0YwMERDMDJBMCAvKiBKU0Rl
dmljZU1vdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxRkIxQTZDMTIwQTVENjkw
MERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2luZ2xlQXhpc1NuYXBM
aXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1NpbmdsZUF4aXNTbmFwTGlz
dC5jcHAKaW5kZXggZDFkMWQ2NTExNTAwY2EyMmJhOTFhZjkxODdkMjM0ZmQwYzcwNTQ5Ni4uYzli
MjAwYzc1ODk4N2QwZWExODZjYmI0OTYzYTJkZjM4ZTkxMGMzMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2luZ2xlQXhpc1NuYXBMaXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TaW5nbGVBeGlzU25hcExpc3QuY3BwCkBAIC0zNSw3
ICszNSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHZvaWQgU2luZ2xlQXhpc1NuYXBMaXN0Ojp1
cGRhdGVGcm9tT2Zmc2V0cyhMYXlvdXRVbml0IHZpZXdTaXplLCBMYXlvdXRVbml0IHNjcm9sbFNp
emUsIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHMsIExheW91dFVuaXQgZGVz
dGluYXRpb25PZmZzZXQsIGJvb2wgaGFzUmVwZWF0LCBMYXlvdXRVbml0IHJlcGVhdE9mZnNldCkK
IHsKICAgICBtX3Bvc2l0aW9ucy5jbGVhcigpOwotICAgIC8vIExheW91dFVuaXQgY3VyU25hcFBv
c2l0aW9uU2hpZnQgPSAtZGVzdGluYXRpb25PZmZzZXQ7CiAgICAgTGF5b3V0VW5pdCBjdXJTbmFw
UG9zaXRpb25TaGlmdCA9IDA7CiAgICAgTGF5b3V0VW5pdCBtYXhTY3JvbGxPZmZzZXQgPSBzY3Jv
bGxTaXplIC0gdmlld1NpemU7CiAgICAgTGF5b3V0VW5pdCBsYXN0U25hcFBvc2l0aW9uID0gY3Vy
U25hcFBvc2l0aW9uU2hpZnQ7CkBAIC00Myw3ICs0Miw2IEBAIHZvaWQgU2luZ2xlQXhpc1NuYXBM
aXN0Ojp1cGRhdGVGcm9tT2Zmc2V0cyhMYXlvdXRVbml0IHZpZXdTaXplLCBMYXlvdXRVbml0IHNj
cm9sCiAgICAgbV9wb3NpdGlvbnMuYXBwZW5kKDApOwogICAgIGRvIHsKICAgICAgICAgZm9yIChM
YXlvdXRVbml0IHNuYXBQb3NpdGlvbiA6IHNuYXBPZmZzZXRzKSB7Ci0gICAgICAgICAgICAvLyBw
b3RlbnRpYWxTbmFwUG9zaXRpb24gPSBjdXJTbmFwUG9zaXRpb25TaGlmdCArIHNuYXBQb3NpdGlv
bgogICAgICAgICAgICAgcG90ZW50aWFsU25hcFBvc2l0aW9uID0gY3VyU25hcFBvc2l0aW9uU2hp
ZnQgKyBzbmFwUG9zaXRpb24gLSBkZXN0aW5hdGlvbk9mZnNldDsKICAgICAgICAgICAgIGlmIChw
b3RlbnRpYWxTbmFwUG9zaXRpb24gPD0gMCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTUxLDcgKzQ5LDYgQEAgdm9pZCBTaW5nbGVBeGlzU25hcExpc3Q6OnVwZGF0ZUZyb21PZmZzZXRz
KExheW91dFVuaXQgdmlld1NpemUsIExheW91dFVuaXQgc2Nyb2wKICAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgbV9wb3NpdGlvbnMuYXBwZW5kKHBvdGVudGlhbFNuYXBQb3Np
dGlvbik7Ci0gICAgICAgICAgICAvLyBsYXN0U25hcFBvc2l0aW9uID0gcG90ZW50aWFsU25hcFBv
c2l0aW9uOwogICAgICAgICAgICAgbGFzdFNuYXBQb3NpdGlvbiA9IHBvdGVudGlhbFNuYXBQb3Np
dGlvbiArIGRlc3RpbmF0aW9uT2Zmc2V0OwogICAgICAgICB9CiAgICAgICAgIGN1clNuYXBQb3Np
dGlvblNoaWZ0ID0gbGFzdFNuYXBQb3NpdGlvbiArIHJlcGVhdE9mZnNldDsKQEAgLTk1LDYgKzky
LDE4IEBAIExheW91dFVuaXQgU2luZ2xlQXhpc1NuYXBMaXN0OjpjbG9zZXN0U25hcFBvc2l0aW9u
KExheW91dFVuaXQgc2Nyb2xsRGVzdGluYXRpb24sCiAgICAgcmV0dXJuIGlzQ2xvc2VyVG9Mb3dl
clNuYXBQb3NpdGlvbiA/IGxvd2VyU25hcFBvc2l0aW9uIDogdXBwZXJTbmFwUG9zaXRpb247CiB9
CiAKK0xheW91dFVuaXQgU2luZ2xlQXhpc1NuYXBMaXN0OjptaW5pbXVtU25hcFBvc2l0aW9uKCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQobV9wb3NpdGlvbnMuc2l6ZSgpID4gMCk7CisgICAgcmV0dXJu
IG1fcG9zaXRpb25zLmZpcnN0KCk7Cit9CisKK0xheW91dFVuaXQgU2luZ2xlQXhpc1NuYXBMaXN0
OjptYXhpbXVtU25hcFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wb3NpdGlvbnMu
c2l6ZSgpID4gMCk7CisgICAgcmV0dXJuIG1fcG9zaXRpb25zLmxhc3QoKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gQ1NTX1NDUk9MTF9TTkFQCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TaW5nbGVBeGlzU25hcExpc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1NpbmdsZUF4aXNTbmFwTGlzdC5oCmluZGV4IGVl
MWFkMWNmMTE3OGE3NTM3Njk3NmNlMGIyZTU3ZTZiNjA4MTU5M2YuLjk1NWMxM2FlZDhkN2ZiMWNi
ZmFhMWRlNmRmZmFhYjNiODUwOGViMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1NpbmdsZUF4aXNTbmFwTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1NpbmdsZUF4aXNTbmFwTGlzdC5oCkBAIC00NCw2ICs0NCw4IEBAIHB1YmxpYzoK
ICAgICB9CiAgICAgdm9pZCB1cGRhdGVGcm9tT2Zmc2V0cyhMYXlvdXRVbml0LCBMYXlvdXRVbml0
LCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mLCBMYXlvdXRVbml0LCBib29sLCBMYXlvdXRVbml0
KTsKICAgICBMYXlvdXRVbml0IGNsb3Nlc3RTbmFwUG9zaXRpb24oTGF5b3V0VW5pdCwgZmxvYXQg
PSAwKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG1pbmltdW1TbmFwUG9zaXRpb24oKSBjb25zdDsK
KyAgICBMYXlvdXRVbml0IG1heGltdW1TbmFwUG9zaXRpb24oKSBjb25zdDsKIAogcHJpdmF0ZToK
ICAgICBWZWN0b3I8TGF5b3V0VW5pdD4gbV9wb3NpdGlvbnM7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2luZ2xlQXhpc1NuYXBBbmltYXRvci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1NpbmdsZUF4aXNTbmFwQW5pbWF0b3IuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
NTZjYzg4NTEwNzRjYWVhYzc1YjU2MzU3ZjMwZWNkYzQ4MDg1NWQ1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NpbmdsZUF4aXNTbmFwQW5pbWF0b3IuaApA
QCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2luZ2xlQXhpc1NuYXBBbmlt
YXRvcl9oCisjZGVmaW5lIFNpbmdsZUF4aXNTbmFwQW5pbWF0b3JfaAorCisjaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKKworI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgorI2luY2x1ZGUgIlNp
bmdsZUF4aXNTbmFwTGlzdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3Mg
U2Nyb2xsU25hcFN0YXRlIHsKKyAgICBTbmFwcGluZywKKyAgICBHbGlkaW5nLAorICAgIElkbGUK
K307CisKK2VudW0gY2xhc3MgV2hlZWxFdmVudFN0YXR1cyB7CisgICAgVXNlclNjcm9sbEJlZ2lu
LAorICAgIFVzZXJTY3JvbGxpbmcsCisgICAgVXNlclNjcm9sbEVuZCwKKyAgICBJbmVydGlhbFNj
cm9sbEJlZ2luLAorICAgIEluZXJ0aWFsU2Nyb2xsaW5nLAorICAgIEluZXJ0aWFsU2Nyb2xsRW5k
LAorICAgIFVua25vd24KK307CisKK2NsYXNzIFNpbmdsZUF4aXNTbmFwQW5pbWF0b3JDbGllbnQg
eworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgflNpbmdsZUF4aXNTbmFwQW5pbWF0b3JDbGllbnQo
KSB7IH0KKworcHVibGljOgorICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBzY3JvbGxPZmZzZXRJbkF4
aXMoU2Nyb2xsRXZlbnRBeGlzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9s
bEluQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZsb2F0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0
YXJ0U2Nyb2xsU25hcFRpbWVyKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdG9wU2Nyb2xsU25h
cFRpbWVyKCkgPSAwOworfTsKKworY2xhc3MgU2luZ2xlQXhpc1NuYXBBbmltYXRvciB7CitwdWJs
aWM6CisgICAgU2luZ2xlQXhpc1NuYXBBbmltYXRvcihTaW5nbGVBeGlzU25hcEFuaW1hdG9yQ2xp
ZW50KiwgU2luZ2xlQXhpc1NuYXBMaXN0KiwgU2Nyb2xsRXZlbnRBeGlzKTsKKyAgICB2b2lkIGhh
bmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CisgICAgYm9vbCBzaG91
bGRPdmVycmlkZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3Q7Cisg
ICAgdm9pZCBzY3JvbGxVcGRhdGUoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGJlZ2luU25hcHBp
bmcoU2Nyb2xsU25hcFN0YXRlKTsKKyAgICB2b2lkIGVuZFNuYXBwaW5nKFNjcm9sbFNuYXBTdGF0
ZSk7CisgICAgZmxvYXQgc25hcEFtb3VudCgpIGNvbnN0OworICAgIGZsb2F0IGdsaWRlQW1vdW50
KCkgY29uc3Q7CisgICAgdm9pZCBpbml0aWFsaXplR2xpZGVQYXJhbWV0ZXJzKGJvb2wpOworICAg
IGJvb2wgcHVzaEluaXRpYWxNb21lbnR1bShmbG9hdCk7CisgICAgZmxvYXQgYXZlcmFnZUluaXRp
YWxNb21lbnR1bSgpIGNvbnN0OworICAgIHZvaWQgY2xlYXJJbml0aWFsTW9tZW50dW0oKTsKKwor
ICAgIHN0YXRpYyBjb25zdCBpbnQgbW9tZW50dW1XaW5kb3dTaXplID0gMzsKKyAgICBzdGF0aWMg
Y29uc3QgaW50IHNuYXBNYWduaXR1ZGVNYXg7CisgICAgc3RhdGljIGNvbnN0IGludCBzbmFwTWFn
bml0dWRlTWluOworICAgIHN0YXRpYyBjb25zdCBpbnQgc25hcFRocmVzaG9sZEhpZ2g7CisgICAg
c3RhdGljIGNvbnN0IGludCBzbmFwVGhyZXNob2xkTG93OworICAgIHN0YXRpYyBjb25zdCBmbG9h
dCBnbGlkZUJvb3N0TXVsdGlwbGllcjsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWF4VGFyZ2V0
VmVsb2NpdHk7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pblRhcmdldFZlbG9jaXR5OworICAg
IHN0YXRpYyBjb25zdCBmbG9hdCBpbml0aWFsVG9GaW5hbE1vbWVudHVtRmFjdG9yOworCisgICAg
U2luZ2xlQXhpc1NuYXBBbmltYXRvckNsaWVudCogbV9jbGllbnQ7CisgICAgU2luZ2xlQXhpc1Nu
YXBMaXN0KiBtX3NuYXBBeGlzOworICAgIFNjcm9sbEV2ZW50QXhpcyBtX2F4aXM7CisgICAgLy8g
VXNlZCB0byB0cmFjayBib3RoIHNuYXBwaW5nIGFuZCBnbGlkaW5nIGJlaGF2aW9ycy4KKyAgICBT
Y3JvbGxTbmFwU3RhdGUgbV9jdXJTdGF0ZTsKKyAgICBMYXlvdXRVbml0IG1faW5pdGlhbE9mZnNl
dDsKKyAgICBMYXlvdXRVbml0IG1fdGFyZ2V0T2Zmc2V0OworICAgIC8vIFVzZWQgdG8gdHJhY2sg
Z2xpZGluZyBiZWhhdmlvci4KKyAgICBMYXlvdXRVbml0IG1fYmVnaW5UcmFja2luZ01vbWVudHVt
T2Zmc2V0OworICAgIGludCBtX21vbWVudHVtQ291bnQ7CisgICAgZmxvYXQgbV9tb21lbnR1bVdp
bmRvd1tNT01FTlRVTV9XSU5ET1dfU0laRV07CisgICAgZmxvYXQgbV9nbGlkZU11bHRpcGxpZXI7
CisgICAgZmxvYXQgbV9nbGlkZVBoYXNlU2hpZnQ7CisgICAgZmxvYXQgbV9nbGlkZUluaXRpYWxN
b21lbnR1bTsKKyAgICBib29sIG1fc2hvdWxkT3ZlcnJpZGVNb21lbnR1bTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisK
KyNlbmRpZiAvLyBTaW5nbGVBeGlzU25hcEFuaW1hdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TaW5nbGVBeGlzU25hcEFuaW1hdG9yLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1NpbmdsZUF4aXNTbmFwQW5pbWF0b3IubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTBhOGM5ZWVjYzc4ZTBiOWExYzJjZGFjOGRlZDM2OWRjM2ZjZGE1YQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TaW5nbGVBeGlzU25hcEFuaW1hdG9yLm1t
CkBAIC0wLDAgKzEsMzExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNpbmdsZUF4aXNTbmFwQW5pbWF0b3IuaCIKKworI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgaW50IFNpbmdsZUF4aXNTbmFw
QW5pbWF0b3I6OnNuYXBNYWduaXR1ZGVNYXggPSAyNTsKK2NvbnN0IGludCBTaW5nbGVBeGlzU25h
cEFuaW1hdG9yOjpzbmFwTWFnbml0dWRlTWluID0gNTsKK2NvbnN0IGludCBTaW5nbGVBeGlzU25h
cEFuaW1hdG9yOjpzbmFwVGhyZXNob2xkSGlnaCA9IDEwMDA7Citjb25zdCBpbnQgU2luZ2xlQXhp
c1NuYXBBbmltYXRvcjo6c25hcFRocmVzaG9sZExvdyA9IDUwOworY29uc3QgZmxvYXQgU2luZ2xl
QXhpc1NuYXBBbmltYXRvcjo6Z2xpZGVCb29zdE11bHRpcGxpZXIgPSAzLjU7Citjb25zdCBmbG9h
dCBTaW5nbGVBeGlzU25hcEFuaW1hdG9yOjptYXhUYXJnZXRWZWxvY2l0eSA9IDc7Citjb25zdCBm
bG9hdCBTaW5nbGVBeGlzU25hcEFuaW1hdG9yOjptaW5UYXJnZXRWZWxvY2l0eSA9IDMuNTsKK2Nv
bnN0IGZsb2F0IFNpbmdsZUF4aXNTbmFwQW5pbWF0b3I6OmluaXRpYWxUb0ZpbmFsTW9tZW50dW1G
YWN0b3IgPSAxLjAgLyA0MC4wOworCitzdGF0aWMgaW5saW5lIGZsb2F0IGJlc3RNdWx0aXBsaWVy
KGZsb2F0IGluaXRpYWxNb21lbnR1bSwgaW50IG1heEl0ZXJhdGlvbnMsIGZsb2F0IHRhcmdldEZp
bmFsVmVsb2NpdHkpCit7CisgICAgZmxvYXQgbXVsdGlwbGllckxvd2VyQm91bmQgPSAxOworICAg
IGZsb2F0IG11bHRpcGxpZXJVcHBlckJvdW5kID0gMjsKKyAgICBmbG9hdCB0YXJnZXRNdWx0aXBs
aWVyOworICAgIGZsb2F0IGZpbmFsVmVsb2NpdHk7CisgICAgaW50IGN1cml0ZXIgPSAwOworICAg
IHdoaWxlIChtdWx0aXBsaWVyTG93ZXJCb3VuZCA8IG11bHRpcGxpZXJVcHBlckJvdW5kKSB7Cisg
ICAgICAgIHRhcmdldE11bHRpcGxpZXIgPSAobXVsdGlwbGllckxvd2VyQm91bmQgKyBtdWx0aXBs
aWVyVXBwZXJCb3VuZCkgLyAyOworICAgICAgICBpZiAoY3VyaXRlcisrID4gbWF4SXRlcmF0aW9u
cykKKyAgICAgICAgICAgIHJldHVybiB0YXJnZXRNdWx0aXBsaWVyOworICAgICAgICAKKyAgICAg
ICAgZmluYWxWZWxvY2l0eSA9ICgodGFyZ2V0TXVsdGlwbGllciAqIGluaXRpYWxNb21lbnR1bSkg
LyAyKSAqICgxICsgY29zKHBpRmxvYXQgLSBhY29zKCgyIC0gdGFyZ2V0TXVsdGlwbGllcikgLyB0
YXJnZXRNdWx0aXBsaWVyKSkpOworICAgICAgICBpZiAodGFyZ2V0RmluYWxWZWxvY2l0eSAtIDAu
NSA8PSBmaW5hbFZlbG9jaXR5ICYmIGZpbmFsVmVsb2NpdHkgPD0gdGFyZ2V0RmluYWxWZWxvY2l0
eSArIDAuNSkKKyAgICAgICAgICAgIHJldHVybiB0YXJnZXRNdWx0aXBsaWVyOworCisgICAgICAg
IGlmIChmaW5hbFZlbG9jaXR5IDwgdGFyZ2V0RmluYWxWZWxvY2l0eSAtIDAuNSkKKyAgICAgICAg
ICAgIG11bHRpcGxpZXJMb3dlckJvdW5kID0gdGFyZ2V0TXVsdGlwbGllcjsKKworICAgICAgICBl
bHNlIGlmIChmaW5hbFZlbG9jaXR5ID4gdGFyZ2V0RmluYWxWZWxvY2l0eSArIDAuNSkKKyAgICAg
ICAgICAgIG11bHRpcGxpZXJVcHBlckJvdW5kID0gdGFyZ2V0TXVsdGlwbGllcjsKKyAgICB9Cisg
ICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgV2hlZWxFdmVudFN0YXR1cyB0b1doZWVs
RXZlbnRTdGF0dXMoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2UsIFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlIG1vbWVudHVtUGhhc2UpCit7CisgICAgaWYgKHBoYXNlID09IFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlTm9uZSkgeworICAgICAgICBzd2l0Y2ggKG1vbWVudHVtUGhhc2UpIHsKKyAg
ICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuOgorICAgICAgICAgICAgcmV0
dXJuIFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsQmVnaW47CisKKyAgICAgICAgY2Fz
ZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQ6CisgICAgICAgICAgICByZXR1cm4gV2hl
ZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxpbmc7CisKKyAgICAgICAgY2FzZSBQbGF0Zm9y
bVdoZWVsRXZlbnRQaGFzZUVuZGVkOgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0
dXM6OkluZXJ0aWFsU2Nyb2xsRW5kOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VW5rbm93bjsgCisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKG1vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKSB7CisgICAg
ICAgIHN3aXRjaCAocGhhc2UpIHsKKyAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZUJlZ2FuOgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxC
ZWdpbjsKKworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDoKKyAg
ICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsaW5nOworCisgICAg
ICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZDoKKyAgICAgICAgICAgIHJldHVy
biBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsRW5kOworCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VW5rbm93bjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VW5rbm93bjsKK30KKworc3RhdGlj
IGlubGluZSBmbG9hdCBwcm9qZWN0ZWRNb21lbnR1bURpc3RhbmNlKGZsb2F0IG1vbWVudHVtKQor
eworICAgIHJldHVybiAxNi42Nzg5ICogbW9tZW50dW07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSB2b2lkIGNsYW1wVG9Cb3VuZHMoVCYgdmFsdWUsIFQgbWluLCBUIG1heCkKK3sK
KyAgICBpZiAodmFsdWUgPCBtaW4pCisgICAgICAgIHZhbHVlID0gbWluOworCisgICAgaWYgKHZh
bHVlID4gbWF4KQorICAgICAgICB2YWx1ZSA9IG1heDsKK30KKworU2luZ2xlQXhpc1NuYXBBbmlt
YXRvcjo6U2luZ2xlQXhpc1NuYXBBbmltYXRvcihTaW5nbGVBeGlzU25hcEFuaW1hdG9yQ2xpZW50
KiBjbGllbnQsIFNpbmdsZUF4aXNTbmFwTGlzdCogc25hcEF4aXMsIFNjcm9sbEV2ZW50QXhpcyBh
eGlzKQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zbmFwQXhpcyhzbmFwQXhpcykK
KyAgICAsIG1fYXhpcyhheGlzKQorICAgICwgbV9jdXJTdGF0ZShTY3JvbGxTbmFwU3RhdGU6Oklk
bGUpCisgICAgLCBtX2luaXRpYWxPZmZzZXQoMCkKKyAgICAsIG1fdGFyZ2V0T2Zmc2V0KDApCisg
ICAgLCBtX2JlZ2luVHJhY2tpbmdNb21lbnR1bU9mZnNldCgwKQorICAgICwgbV9tb21lbnR1bUNv
dW50KDApCisgICAgLCBtX2dsaWRlTXVsdGlwbGllcigwKQorICAgICwgbV9nbGlkZVBoYXNlU2hp
ZnQoMCkKKyAgICAsIG1fZ2xpZGVJbml0aWFsTW9tZW50dW0oMCkKKyAgICAsIG1fc2hvdWxkT3Zl
cnJpZGVNb21lbnR1bShmYWxzZSkKK3sKK30KKwordm9pZCBTaW5nbGVBeGlzU25hcEFuaW1hdG9y
OjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQpCit7Cisg
ICAgZmxvYXQgc2Nyb2xsRGVsdGEgPSBtX2F4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9u
dGFsID8gLWV2ZW50LmRlbHRhWCgpIDogLWV2ZW50LmRlbHRhWSgpOworICAgIFdoZWVsRXZlbnRT
dGF0dXMgd2hlZWxTdGF0dXMgPSB0b1doZWVsRXZlbnRTdGF0dXMoZXZlbnQucGhhc2UoKSwgZXZl
bnQubW9tZW50dW1QaGFzZSgpKTsKKyAgICBpZiAoKHdoZWVsU3RhdHVzID09IFdoZWVsRXZlbnRT
dGF0dXM6OlVzZXJTY3JvbGxpbmcgfHwgd2hlZWxTdGF0dXMgPT0gV2hlZWxFdmVudFN0YXR1czo6
SW5lcnRpYWxTY3JvbGxpbmcpICYmICFzY3JvbGxEZWx0YSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc3dpdGNoICh3aGVlbFN0YXR1cykgeworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNl
clNjcm9sbEJlZ2luOgorICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbGluZzoK
KyAgICAgICAgZW5kU25hcHBpbmcoU2Nyb2xsU25hcFN0YXRlOjpJZGxlKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxFbmQ6CisgICAgICAg
IGJlZ2luU25hcHBpbmcoU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZyk7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpJbmVydGlhbFNjcm9sbEJlZ2luOgorICAg
ICAgICAvLyBCZWdpbiB0cmFja2luZyBtb21lbnR1bSBkZWx0YXMgZm9yIGdsaWRlIHByZWRpY3Rp
b24uCisgICAgICAgIGVuZFNuYXBwaW5nKFNjcm9sbFNuYXBTdGF0ZTo6SWRsZSk7CisgICAgICAg
IHB1c2hJbml0aWFsTW9tZW50dW0oc2Nyb2xsRGVsdGEpOworICAgICAgICBtX2JlZ2luVHJhY2tp
bmdNb21lbnR1bU9mZnNldCA9IG1fY2xpZW50LT5zY3JvbGxPZmZzZXRJbkF4aXMobV9heGlzKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Ny
b2xsaW5nOgorICAgICAgICBpZiAobV9jdXJTdGF0ZSAhPSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRp
bmcpIHsKKyAgICAgICAgICAgIGlmIChtX21vbWVudHVtQ291bnQgPCBtb21lbnR1bVdpbmRvd1Np
emUpCisgICAgICAgICAgICAgICAgcHVzaEluaXRpYWxNb21lbnR1bShzY3JvbGxEZWx0YSk7CisK
KyAgICAgICAgICAgIGlmIChtX21vbWVudHVtQ291bnQgPT0gbW9tZW50dW1XaW5kb3dTaXplKQor
ICAgICAgICAgICAgICAgIGJlZ2luU25hcHBpbmcoU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nKTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6
SW5lcnRpYWxTY3JvbGxFbmQ6CisgICAgICAgIGNsZWFySW5pdGlhbE1vbWVudHVtKCk7CisgICAg
ICAgIG1fc2hvdWxkT3ZlcnJpZGVNb21lbnR1bSA9IGZhbHNlOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VW5rbm93bjoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworYm9vbCBTaW5nbGVBeGlzU25h
cEFuaW1hdG9yOjpzaG91bGRPdmVycmlkZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiBldmVudCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zaG91bGRPdmVycmlkZU1vbWVudHVt
ICYmIHRvV2hlZWxFdmVudFN0YXR1cyhldmVudC5waGFzZSgpLCBldmVudC5tb21lbnR1bVBoYXNl
KCkpID09IFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsaW5nOworfQorCit2b2lkIFNp
bmdsZUF4aXNTbmFwQW5pbWF0b3I6OnNjcm9sbFVwZGF0ZSgpCit7CisgICAgQVNTRVJUKG1fY3Vy
U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nIHx8IG1fY3VyU3RhdGUgPT0gU2Nyb2xs
U25hcFN0YXRlOjpTbmFwcGluZyk7CisgICAgZmxvYXQgYW1vdW50ID0gbV9jdXJTdGF0ZSA9PSBT
Y3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nID8gc25hcEFtb3VudCgpIDogZ2xpZGVBbW91bnQoKTsK
KyAgICBpZiAoYW1vdW50KQorICAgICAgICBtX2NsaWVudC0+aW1tZWRpYXRlU2Nyb2xsSW5BeGlz
KG1fYXhpcywgYW1vdW50KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jdXJTdGF0ZSA9IFNjcm9s
bFNuYXBTdGF0ZTo6SWRsZTsKKyAgICAgICAgbV9jbGllbnQtPnN0b3BTY3JvbGxTbmFwVGltZXIo
KTsKKyAgICB9Cit9CisKK3ZvaWQgU2luZ2xlQXhpc1NuYXBBbmltYXRvcjo6YmVnaW5TbmFwcGlu
ZyhTY3JvbGxTbmFwU3RhdGUgbmV3U3RhdGUpCit7CisgICAgQVNTRVJUKG5ld1N0YXRlID09IFNj
cm9sbFNuYXBTdGF0ZTo6R2xpZGluZyB8fCBuZXdTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OlNu
YXBwaW5nKTsKKyAgICBMYXlvdXRVbml0IG9mZnNldCA9IG1fY2xpZW50LT5zY3JvbGxPZmZzZXRJ
bkF4aXMobV9heGlzKTsKKyAgICBmbG9hdCBpbml0aWFsTW9tZW50dW0gPSBhdmVyYWdlSW5pdGlh
bE1vbWVudHVtKCk7CisgICAgTGF5b3V0VW5pdCBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiA9
IG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZyA/IG1fYmVnaW5UcmFja2luZ01v
bWVudHVtT2Zmc2V0ICsgTGF5b3V0VW5pdChwcm9qZWN0ZWRNb21lbnR1bURpc3RhbmNlKGluaXRp
YWxNb21lbnR1bSkpIDogb2Zmc2V0OworICAgIGNsYW1wVG9Cb3VuZHM8TGF5b3V0VW5pdD4ocHJv
amVjdGVkU2Nyb2xsRGVzdGluYXRpb24sIG1fc25hcEF4aXMtPm1pbmltdW1TbmFwUG9zaXRpb24o
KSwgbV9zbmFwQXhpcy0+bWF4aW11bVNuYXBQb3NpdGlvbigpKTsKKworICAgIG1faW5pdGlhbE9m
ZnNldCA9IG9mZnNldDsKKyAgICBtX3RhcmdldE9mZnNldCA9IG1fc25hcEF4aXMtPmNsb3Nlc3RT
bmFwUG9zaXRpb24ocHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24sIGluaXRpYWxNb21lbnR1bSk7
CisgICAgaWYgKG1faW5pdGlhbE9mZnNldCA9PSBtX3RhcmdldE9mZnNldCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9jdXJTdGF0ZSA9IG5ld1N0YXRlOworICAgIGlmIChuZXdTdGF0ZSA9PSBT
Y3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcpIHsKKyAgICAgICAgbV9zaG91bGRPdmVycmlkZU1vbWVu
dHVtID0gdHJ1ZTsKKyAgICAgICAgbV9nbGlkZUluaXRpYWxNb21lbnR1bSA9IGluaXRpYWxNb21l
bnR1bTsKKyAgICAgICAgYm9vbCBnbGlkZVJlcXVpcmVzQm9vc3Q7CisgICAgICAgIGlmIChpbml0
aWFsTW9tZW50dW0gPiAwKQorICAgICAgICAgICAgZ2xpZGVSZXF1aXJlc0Jvb3N0ID0gcHJvamVj
dGVkU2Nyb2xsRGVzdGluYXRpb24gLSBvZmZzZXQgPCBtX3RhcmdldE9mZnNldCAtIHByb2plY3Rl
ZFNjcm9sbERlc3RpbmF0aW9uOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnbGlkZVJlcXVp
cmVzQm9vc3QgPSBvZmZzZXQgLSBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiA8IHByb2plY3Rl
ZFNjcm9sbERlc3RpbmF0aW9uIC0gbV90YXJnZXRPZmZzZXQ7CisKKyAgICAgICAgaW5pdGlhbGl6
ZUdsaWRlUGFyYW1ldGVycyhnbGlkZVJlcXVpcmVzQm9vc3QpOworICAgIH0KKyAgICBtX2NsaWVu
dC0+c3RhcnRTY3JvbGxTbmFwVGltZXIoKTsKK30KKwordm9pZCBTaW5nbGVBeGlzU25hcEFuaW1h
dG9yOjplbmRTbmFwcGluZyhTY3JvbGxTbmFwU3RhdGUgbmV3U3RhdGUpCit7CisgICAgQVNTRVJU
KG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6SWRsZSk7CisgICAgY2xlYXJJbml0aWFsTW9t
ZW50dW0oKTsKKyAgICBtX2N1clN0YXRlID0gbmV3U3RhdGU7CisgICAgbV9jbGllbnQtPnN0b3BT
Y3JvbGxTbmFwVGltZXIoKTsKK30KKworZmxvYXQgU2luZ2xlQXhpc1NuYXBBbmltYXRvcjo6c25h
cEFtb3VudCgpIGNvbnN0Cit7CisgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVudC0+c2Ny
b2xsT2Zmc2V0SW5BeGlzKG1fYXhpcyk7CisgICAgYm9vbCBjYW5Db21wdXRlU25hcCA9ICAobV9p
bml0aWFsT2Zmc2V0IDw9IG9mZnNldCAmJiBvZmZzZXQgPCBtX3RhcmdldE9mZnNldCkgfHwgKG1f
dGFyZ2V0T2Zmc2V0IDwgb2Zmc2V0ICYmIG9mZnNldCA8PSBtX2luaXRpYWxPZmZzZXQpOworICAg
IGlmIChtX2N1clN0YXRlICE9IFNjcm9sbFNuYXBTdGF0ZTo6U25hcHBpbmcgfHwgIWNhbkNvbXB1
dGVTbmFwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGludCBzaWduID0gbV9pbml0aWFsT2Zm
c2V0IDwgbV90YXJnZXRPZmZzZXQgPyAxIDogLTE7CisgICAgZmxvYXQgcHJvZ3Jlc3MgPSAoKGZs
b2F0KShvZmZzZXQgLSBtX2luaXRpYWxPZmZzZXQpKSAvIChtX3RhcmdldE9mZnNldCAtIG1faW5p
dGlhbE9mZnNldCk7CisgICAgZmxvYXQgdGhyZXNob2xkZWREaXN0YW5jZSA9IChtX3RhcmdldE9m
ZnNldCAtIG1faW5pdGlhbE9mZnNldCkgKiBzaWduOworICAgIGNsYW1wVG9Cb3VuZHM8ZmxvYXQ+
KHRocmVzaG9sZGVkRGlzdGFuY2UsIHNuYXBUaHJlc2hvbGRMb3csIHNuYXBUaHJlc2hvbGRIaWdo
KTsKKyAgICBmbG9hdCBtYWduaXR1ZGUgPSBzbmFwTWFnbml0dWRlTWluICsgKHNuYXBNYWduaXR1
ZGVNYXggLSBzbmFwTWFnbml0dWRlTWluKSAqICh0aHJlc2hvbGRlZERpc3RhbmNlIC0gc25hcFRo
cmVzaG9sZExvdykgLyAoc25hcFRocmVzaG9sZEhpZ2ggLSBzbmFwVGhyZXNob2xkTG93KTsKKyAg
ICBmbG9hdCByYXdTbmFwQW1vdW50ID0gMSArIG1hZ25pdHVkZSAqIHNpbihwaUZsb2F0ICogcHJv
Z3Jlc3MpOworICAgIGlmICgobV90YXJnZXRPZmZzZXQgPCBvZmZzZXQgJiYgb2Zmc2V0IC0gcmF3
U25hcEFtb3VudCA8IG1fdGFyZ2V0T2Zmc2V0KSB8fCAobV90YXJnZXRPZmZzZXQgPiBvZmZzZXQg
JiYgb2Zmc2V0ICsgcmF3U25hcEFtb3VudCA+IG1fdGFyZ2V0T2Zmc2V0KSkKKyAgICAgICAgcmV0
dXJuIG1fdGFyZ2V0T2Zmc2V0IC0gb2Zmc2V0OworCisgICAgcmV0dXJuIHNpZ24gKiByYXdTbmFw
QW1vdW50OworfQorCitmbG9hdCBTaW5nbGVBeGlzU25hcEFuaW1hdG9yOjpnbGlkZUFtb3VudCgp
IGNvbnN0Cit7CisgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0
SW5BeGlzKG1fYXhpcyk7CisgICAgYm9vbCBjYW5Db21wdXRlR2xpZGUgPSAobV9pbml0aWFsT2Zm
c2V0IDw9IG9mZnNldCAmJiBvZmZzZXQgPCBtX3RhcmdldE9mZnNldCkgfHwgKG1fdGFyZ2V0T2Zm
c2V0IDwgb2Zmc2V0ICYmIG9mZnNldCA8PSBtX2luaXRpYWxPZmZzZXQpOworICAgIGlmIChtX2N1
clN0YXRlICE9IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZyB8fCAhY2FuQ29tcHV0ZUdsaWRlKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGZsb2F0IHByb2dyZXNzID0gKChmbG9hdCkob2Zmc2V0
IC0gbV9pbml0aWFsT2Zmc2V0KSkgLyAobV90YXJnZXRPZmZzZXQgLSBtX2luaXRpYWxPZmZzZXQp
OworICAgIGZsb2F0IHNoaWZ0ID0gY2VpbCgoKG1fZ2xpZGVNdWx0aXBsaWVyICogbV9nbGlkZUlu
aXRpYWxNb21lbnR1bSkgLyAyKSAqICgxICsgY29zKHBpRmxvYXQgKiBwcm9ncmVzcyAtIG1fZ2xp
ZGVQaGFzZVNoaWZ0KSkpOworICAgIGlmIChtX2luaXRpYWxPZmZzZXQgPCBtX3RhcmdldE9mZnNl
dCkKKyAgICAgICAgc2hpZnQgPSBzaGlmdCA8IDEgPyAxIDogc2hpZnQ7CisgICAgZWxzZSBpZiAo
bV9pbml0aWFsT2Zmc2V0ID4gbV90YXJnZXRPZmZzZXQpCisgICAgICAgIHNoaWZ0ID0gc2hpZnQg
PiAtMSA/IC0xIDogc2hpZnQ7CisKKyAgICBpZiAoKG1faW5pdGlhbE9mZnNldCA8IG1fdGFyZ2V0
T2Zmc2V0ICYmIG9mZnNldCArIHNoaWZ0ID4gbV90YXJnZXRPZmZzZXQpIHx8IChtX2luaXRpYWxP
ZmZzZXQgPiBtX3RhcmdldE9mZnNldCAmJiBvZmZzZXQgKyBzaGlmdCA8IG1fdGFyZ2V0T2Zmc2V0
KSkKKyAgICAgICAgcmV0dXJuIG1fdGFyZ2V0T2Zmc2V0IC0gb2Zmc2V0OworCisgICAgcmV0dXJu
IHNoaWZ0OworfQorCit2b2lkIFNpbmdsZUF4aXNTbmFwQW5pbWF0b3I6OmluaXRpYWxpemVHbGlk
ZVBhcmFtZXRlcnMoYm9vbCBzaG91bGRCb29zdEluaXRpYWxNb21lbnR1bSkKK3sKKyAgICBpZiAo
c2hvdWxkQm9vc3RJbml0aWFsTW9tZW50dW0pCisgICAgICAgIG1fZ2xpZGVJbml0aWFsTW9tZW50
dW0gKj0gZ2xpZGVCb29zdE11bHRpcGxpZXI7CisKKyAgICBmbG9hdCB0YXJnZXRGaW5hbFZlbG9j
aXR5ID0gaW5pdGlhbFRvRmluYWxNb21lbnR1bUZhY3RvciAqIChtX2dsaWRlSW5pdGlhbE1vbWVu
dHVtIDwgMCA/IC1tX2dsaWRlSW5pdGlhbE1vbWVudHVtIDogbV9nbGlkZUluaXRpYWxNb21lbnR1
bSk7CisgICAgY2xhbXBUb0JvdW5kczxmbG9hdD4odGFyZ2V0RmluYWxWZWxvY2l0eSwgbWluVGFy
Z2V0VmVsb2NpdHksIG1heFRhcmdldFZlbG9jaXR5KTsKKyAgICBtX2dsaWRlTXVsdGlwbGllciA9
IGJlc3RNdWx0aXBsaWVyKG1fZ2xpZGVJbml0aWFsTW9tZW50dW0gPCAwID8gLW1fZ2xpZGVJbml0
aWFsTW9tZW50dW0gOiBtX2dsaWRlSW5pdGlhbE1vbWVudHVtLCAxNSwgdGFyZ2V0RmluYWxWZWxv
Y2l0eSk7CisgICAgbV9nbGlkZVBoYXNlU2hpZnQgPSBhY29zKCgyIC0gbV9nbGlkZU11bHRpcGxp
ZXIpIC8gbV9nbGlkZU11bHRpcGxpZXIpOworfQorCitib29sIFNpbmdsZUF4aXNTbmFwQW5pbWF0
b3I6OnB1c2hJbml0aWFsTW9tZW50dW0oZmxvYXQgbW9tZW50dW0pCit7CisgICAgaWYgKG1fbW9t
ZW50dW1Db3VudCA+PSBtb21lbnR1bVdpbmRvd1NpemUpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgbV9tb21lbnR1bVdpbmRvd1ttX21vbWVudHVtQ291bnQrK10gPSBtb21lbnR1bTsKKyAg
ICByZXR1cm4gbV9tb21lbnR1bUNvdW50ID09IG1vbWVudHVtV2luZG93U2l6ZTsKK30KKworZmxv
YXQgU2luZ2xlQXhpc1NuYXBBbmltYXRvcjo6YXZlcmFnZUluaXRpYWxNb21lbnR1bSgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX21vbWVudHVtQ291bnQpCisgICAgICAgIHJldHVybiAwOworCisgICAg
ZmxvYXQgc3VtID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbW9tZW50dW1Db3VudDsg
aSsrKQorICAgICAgICBzdW0gKz0gbV9tb21lbnR1bVdpbmRvd1tpXTsKKworICAgIHJldHVybiBz
dW0gLyBtX21vbWVudHVtQ291bnQ7Cit9CisKK3ZvaWQgU2luZ2xlQXhpc1NuYXBBbmltYXRvcjo6
Y2xlYXJJbml0aWFsTW9tZW50dW0oKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9tb21l
bnR1bUNvdW50OyBpKyspCisgICAgICAgIG1fbW9tZW50dW1XaW5kb3dbaV0gPSAwOworCisgICAg
bV9tb21lbnR1bUNvdW50ID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gQ1NTX1NDUk9MTF9TTkFQCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236407</attachid>
            <date>2014-08-11 15:33:52 -0700</date>
            <delta_ts>2014-08-11 15:36:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135768-20140811153341.patch</filename>
            <type>text/plain</type>
            <size>22299</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyNDEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4
IDdkMDc3MzU4ZmQ1NzEzZDg0YTRiNmMyYmRhZGNlOWQ3NDllMmQyMmIuLjlhMWQwYjBkOWM5ZTIw
NDM5YWVhNWU0ZWI0MWFkYzAxYTNkZjJkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCkBA
IC0xMjksNiArMTI5LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZv
cm0vbWFjL1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uTWFjLm1tCiAgICAgcGxhdGZv
cm0vbWFjL1NoYXJlZEJ1ZmZlck1hYy5tbQogICAgIHBsYXRmb3JtL21hYy9TaGFyZWRUaW1lck1h
Yy5tbQorICAgIHBsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tCiAgICAgcGxh
dGZvcm0vbWFjL1NvdW5kTWFjLm1tCiAgICAgcGxhdGZvcm0vbWFjL1N1ZGRlblRlcm1pbmF0aW9u
Lm1tCiAgICAgcGxhdGZvcm0vbWFjL1N5c3RlbVNsZWVwTGlzdGVuZXJNYWMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1MTFi
NzE1Y2M5ZDE5MDllMWIzNjQ4MDFjYWNmNzNmN2M0ZmFiMmZmLi5hZjVmNjRjMmUzMTYxOWUwNTg1
YmI1NDBjMTNlMjIyYmM3YWI0MmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MjQ3LDYgKzYyNDcsOCBAQAogCQlGNDJGRkI0
NjE5ODRCNzE2MDBGNjgzN0YgLyogTGVuZ3RoUmVwZWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDJGRkI0NTE5ODRCNzE2MDBGNjgzN0YgLyogTGVu
Z3RoUmVwZWF0LmggKi87IH07CiAJCUY0NUMyMzFEMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Ny
b2xsU25hcE9mZnNldHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjQ1QzIzMUIxOTk1QjczQjAwQTZFMkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0
cy5jcHAgKi87IH07CiAJCUY0NUMyMzFFMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25h
cE9mZnNldHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0NUMyMzFDMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGNDc4NzU1NDE5
OTgzQUZGMDAyNEEyODcgLyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3ODc1NTIxOTk4M0FGRjAwMjRBMjg3
IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlGNDc4NzU1NTE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Nj
cm9sbFNuYXBBbmltYXRvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY0Nzg3NTUzMTk5ODNBRkYwMDI0QTI4NyAvKiBBeGlzU2Nyb2xsU25hcEFuaW1h
dG9yLm1tICovOyB9OwogCQlGNDdBNUUzRTE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxT
bmFwUG9pbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNDdBNUUzQjE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3QTVFM0Yx
OTVCOEU0ODAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDdBNUUzQTE5NUI4QzhBMDA0ODMx
MDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcCAqLzsgfTsKIAkJRjUwNjY0RjcxNTdGNTJE
QzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MDY2NEY1MTU3RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29u
dHJvbGxlci5jcHAgKi87IH07CkBAIC0xMzc2Niw2ICsxMzc2OCw4IEBACiAJCUY0MkZGQjQ1MTk4
NEI3MTYwMEY2ODM3RiAvKiBMZW5ndGhSZXBlYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTGVuZ3RoUmVwZWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0
NUMyMzFCMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ1QzIzMUMxOTk1QjczQjAwQTZFMkUz
IC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRjQ3ODc1NTIxOTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXhpc1Njcm9sbFNuYXBBbmltYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNDc4NzU1MzE5OTgzQUZGMDAyNEEyODcg
LyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUY0N0E1RTNBMTk1QjhDOEEwMDQ4MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQ
b2ludHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3R5bGVTY3Jv
bGxTbmFwUG9pbnRzLmNwcDsgcGF0aCA9IHN0eWxlL1N0eWxlU2Nyb2xsU25hcFBvaW50cy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0N0E1RTNCMTk1QjhDOEEwMDQ4MzEwMCAv
KiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmg7IHBhdGggPSBzdHlsZS9TdHlsZVNjcm9sbFNuYXBQ
b2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjUwNjY0RjUxNTdGNTJEQzAw
QUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZvcm1Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE2NDEwLDYgKzE2NDE0LDggQEAKIAkJNjU4MkExNDgwOTk5OUQ2QzAwQkVFQjZEIC8qIG1h
YyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRjQ3ODc1
NTIxOTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCAqLywKKwkJCQlG
NDc4NzU1MzE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbSAqLywK
IAkJCQk2NUE2NDBGMDA1MzNCQjFGMDA4NUU3NzcgLyogQmxvY2tFeGNlcHRpb25zLmggKi8sCiAJ
CQkJNjVGODA2OTcwNTREOUY4NjAwOEJGNzc2IC8qIEJsb2NrRXhjZXB0aW9ucy5tbSAqLywKIAkJ
CQkyOTE5QTFFQTE2QjMzNzg5MDA3ODcyMTMgLyogQ29udGVudEZpbHRlck1hYy5tbSAqLywKQEAg
LTI2MjYxLDYgKzI2MjY3LDcgQEAKIAkJCQlCMjIyN0E5NzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
UHJlc2VydmVBc3BlY3RSYXRpby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4QTBFMEExMjZFRjFE
QjAwOTc4RjdBIC8qIFNWR1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODFERDQ5QzEz
QkExQTYwMDBEQzc2MjcgLyogU1ZHUHJvcGVydHlJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
NDc4NzU1NDE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDg4QTBFMEIxMjZFRjFEQjAwOTc4RjdBIC8qIFNWR1Byb3BlcnR5VGVh
ck9mZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4QTBFMEMxMjZFRjFEQjAwOTc4RjdBIC8qIFNW
R1Byb3BlcnR5VHJhaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0E5QTBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI4
MTc2LDYgKzI4MTgzLDcgQEAKIAkJCQlCRTYxMDM5RDE4QTlENjUyMDBERDUwRDcgLyogSlNEYXRh
Q3VlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNjJBNDU3MTAxMTQ2NDcwMERGRjNFRCAvKiBK
U0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNjJB
NDU0MTAxMTQ1RTMwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUY0Nzg3NTU1MTk5ODNBRkYwMDI0QTI4NyAvKiBBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFRDExMkIwM0Y5
NDAwM0E1ODNBIC8qIEpTRGVsYXlOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxRkIxQTY1
MTIwQTVEM0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxRkIxQTZDMTIwQTVENjkwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50Q3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDUyMjA5NmFkMjEwMDZk
OThmZDE4MzQ0OGU1OWQ0MjBiYjBiMDZiZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmgKQEAgLTAsMCArMSwxMTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JfaAorI2RlZmlu
ZSBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yX2gKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
CisKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50
LmgiCisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKyNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcE9m
ZnNldHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIFNjcm9sbFNuYXBT
dGF0ZSB7CisgICAgU25hcHBpbmcsCisgICAgR2xpZGluZywKKyAgICBJZGxlCit9OworCitlbnVt
IGNsYXNzIFdoZWVsRXZlbnRTdGF0dXMgeworICAgIFVzZXJTY3JvbGxCZWdpbiwKKyAgICBVc2Vy
U2Nyb2xsaW5nLAorICAgIFVzZXJTY3JvbGxFbmQsCisgICAgSW5lcnRpYWxTY3JvbGxCZWdpbiwK
KyAgICBJbmVydGlhbFNjcm9sbGluZywKKyAgICBJbmVydGlhbFNjcm9sbEVuZCwKKyAgICBVbmtu
b3duCit9OworCitjbGFzcyBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50IHsKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIH5BeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50KCkgeyB9CisKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xsT2Zmc2V0SW5BeGlzKFNjcm9sbEV2
ZW50QXhpcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVTY3JvbGxJbkF4aXMoU2Ny
b2xsRXZlbnRBeGlzLCBmbG9hdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFNjcm9sbFNu
YXBUaW1lcigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFNjcm9sbFNuYXBUaW1lcigpID0g
MDsKK307CisKK2NsYXNzIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IgeworcHVibGljOgorICAgIEF4
aXNTY3JvbGxTbmFwQW5pbWF0b3IoQXhpc1Njcm9sbFNuYXBBbmltYXRvckNsaWVudCosIEF4aXNT
Y3JvbGxTbmFwT2Zmc2V0cyosIFNjcm9sbEV2ZW50QXhpcyk7CisgICAgdm9pZCBoYW5kbGVXaGVl
bEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOworICAgIGJvb2wgc2hvdWxkT3ZlcnJp
ZGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0OworICAgIHZvaWQg
c2Nyb2xsVXBkYXRlKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBiZWdpblNuYXBwaW5nKFNjcm9s
bFNuYXBTdGF0ZSk7CisgICAgdm9pZCBlbmRTbmFwcGluZyhTY3JvbGxTbmFwU3RhdGUpOworICAg
IGZsb2F0IHNuYXBBbW91bnQoKSBjb25zdDsKKyAgICBmbG9hdCBnbGlkZUFtb3VudCgpIGNvbnN0
OworICAgIHZvaWQgaW5pdGlhbGl6ZUdsaWRlUGFyYW1ldGVycyhib29sKTsKKyAgICBib29sIHB1
c2hJbml0aWFsTW9tZW50dW0oZmxvYXQpOworICAgIGZsb2F0IGF2ZXJhZ2VJbml0aWFsTW9tZW50
dW0oKSBjb25zdDsKKyAgICB2b2lkIGNsZWFySW5pdGlhbE1vbWVudHVtKCk7CisKKyAgICBzdGF0
aWMgY29uc3QgaW50IG1vbWVudHVtV2luZG93U2l6ZSA9IDM7CisgICAgc3RhdGljIGNvbnN0IGlu
dCBzbmFwTWFnbml0dWRlTWF4OworICAgIHN0YXRpYyBjb25zdCBpbnQgc25hcE1hZ25pdHVkZU1p
bjsKKyAgICBzdGF0aWMgY29uc3QgaW50IHNuYXBUaHJlc2hvbGRIaWdoOworICAgIHN0YXRpYyBj
b25zdCBpbnQgc25hcFRocmVzaG9sZExvdzsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgZ2xpZGVC
b29zdE11bHRpcGxpZXI7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1heFRhcmdldFZlbG9jaXR5
OworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtaW5UYXJnZXRWZWxvY2l0eTsKKyAgICBzdGF0aWMg
Y29uc3QgZmxvYXQgaW5pdGlhbFRvRmluYWxNb21lbnR1bUZhY3RvcjsKKworICAgIEF4aXNTY3Jv
bGxTbmFwQW5pbWF0b3JDbGllbnQqIG1fY2xpZW50OworICAgIEF4aXNTY3JvbGxTbmFwT2Zmc2V0
cyogbV9zbmFwQXhpczsKKyAgICBTY3JvbGxFdmVudEF4aXMgbV9heGlzOworICAgIC8vIFVzZWQg
dG8gdHJhY2sgYm90aCBzbmFwcGluZyBhbmQgZ2xpZGluZyBiZWhhdmlvcnMuCisgICAgU2Nyb2xs
U25hcFN0YXRlIG1fY3VyU3RhdGU7CisgICAgTGF5b3V0VW5pdCBtX2luaXRpYWxPZmZzZXQ7Cisg
ICAgTGF5b3V0VW5pdCBtX3RhcmdldE9mZnNldDsKKyAgICAvLyBVc2VkIHRvIHRyYWNrIGdsaWRp
bmcgYmVoYXZpb3IuCisgICAgTGF5b3V0VW5pdCBtX2JlZ2luVHJhY2tpbmdNb21lbnR1bU9mZnNl
dDsKKyAgICBpbnQgbV9tb21lbnR1bUNvdW50OworICAgIGZsb2F0IG1fbW9tZW50dW1XaW5kb3db
bW9tZW50dW1XaW5kb3dTaXplXTsKKyAgICBmbG9hdCBtX2dsaWRlTXVsdGlwbGllcjsKKyAgICBm
bG9hdCBtX2dsaWRlUGhhc2VTaGlmdDsKKyAgICBmbG9hdCBtX2dsaWRlSW5pdGlhbE1vbWVudHVt
OworICAgIGJvb2wgbV9zaG91bGRPdmVycmlkZU1vbWVudHVtOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKworI2VuZGlm
IC8vIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYWJiOGM0
OTc5ZGMxNDBhMjQ4ZGIyOGJiMzUwYzBlYjc0N2RiNzdkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0KQEAgLTAs
MCArMSwzMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QXhpc1Njcm9sbFNuYXBBbmltYXRvci5oIgorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBpbnQgQXhpc1Njcm9sbFNuYXBBbmltYXRv
cjo6c25hcE1hZ25pdHVkZU1heCA9IDI1OworY29uc3QgaW50IEF4aXNTY3JvbGxTbmFwQW5pbWF0
b3I6OnNuYXBNYWduaXR1ZGVNaW4gPSA1OworY29uc3QgaW50IEF4aXNTY3JvbGxTbmFwQW5pbWF0
b3I6OnNuYXBUaHJlc2hvbGRIaWdoID0gMTAwMDsKK2NvbnN0IGludCBBeGlzU2Nyb2xsU25hcEFu
aW1hdG9yOjpzbmFwVGhyZXNob2xkTG93ID0gNTA7Citjb25zdCBmbG9hdCBBeGlzU2Nyb2xsU25h
cEFuaW1hdG9yOjpnbGlkZUJvb3N0TXVsdGlwbGllciA9IDMuNTsKK2NvbnN0IGZsb2F0IEF4aXNT
Y3JvbGxTbmFwQW5pbWF0b3I6Om1heFRhcmdldFZlbG9jaXR5ID0gNzsKK2NvbnN0IGZsb2F0IEF4
aXNTY3JvbGxTbmFwQW5pbWF0b3I6Om1pblRhcmdldFZlbG9jaXR5ID0gMy41OworY29uc3QgZmxv
YXQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6aW5pdGlhbFRvRmluYWxNb21lbnR1bUZhY3RvciA9
IDEuMCAvIDQwLjA7CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgYmVzdE11bHRpcGxpZXIoZmxvYXQg
aW5pdGlhbE1vbWVudHVtLCBpbnQgbWF4SXRlcmF0aW9ucywgZmxvYXQgdGFyZ2V0RmluYWxWZWxv
Y2l0eSkKK3sKKyAgICBmbG9hdCBtdWx0aXBsaWVyTG93ZXJCb3VuZCA9IDE7CisgICAgZmxvYXQg
bXVsdGlwbGllclVwcGVyQm91bmQgPSAyOworICAgIGZsb2F0IHRhcmdldE11bHRpcGxpZXI7Cisg
ICAgZmxvYXQgZmluYWxWZWxvY2l0eTsKKyAgICBpbnQgY3VyaXRlciA9IDA7CisgICAgd2hpbGUg
KG11bHRpcGxpZXJMb3dlckJvdW5kIDwgbXVsdGlwbGllclVwcGVyQm91bmQpIHsKKyAgICAgICAg
dGFyZ2V0TXVsdGlwbGllciA9IChtdWx0aXBsaWVyTG93ZXJCb3VuZCArIG11bHRpcGxpZXJVcHBl
ckJvdW5kKSAvIDI7CisgICAgICAgIGlmIChjdXJpdGVyKysgPiBtYXhJdGVyYXRpb25zKQorICAg
ICAgICAgICAgcmV0dXJuIHRhcmdldE11bHRpcGxpZXI7CisgICAgICAgIAorICAgICAgICBmaW5h
bFZlbG9jaXR5ID0gKCh0YXJnZXRNdWx0aXBsaWVyICogaW5pdGlhbE1vbWVudHVtKSAvIDIpICog
KDEgKyBjb3MocGlGbG9hdCAtIGFjb3MoKDIgLSB0YXJnZXRNdWx0aXBsaWVyKSAvIHRhcmdldE11
bHRpcGxpZXIpKSk7CisgICAgICAgIGlmICh0YXJnZXRGaW5hbFZlbG9jaXR5IC0gMC41IDw9IGZp
bmFsVmVsb2NpdHkgJiYgZmluYWxWZWxvY2l0eSA8PSB0YXJnZXRGaW5hbFZlbG9jaXR5ICsgMC41
KQorICAgICAgICAgICAgcmV0dXJuIHRhcmdldE11bHRpcGxpZXI7CisKKyAgICAgICAgaWYgKGZp
bmFsVmVsb2NpdHkgPCB0YXJnZXRGaW5hbFZlbG9jaXR5IC0gMC41KQorICAgICAgICAgICAgbXVs
dGlwbGllckxvd2VyQm91bmQgPSB0YXJnZXRNdWx0aXBsaWVyOworCisgICAgICAgIGVsc2UgaWYg
KGZpbmFsVmVsb2NpdHkgPiB0YXJnZXRGaW5hbFZlbG9jaXR5ICsgMC41KQorICAgICAgICAgICAg
bXVsdGlwbGllclVwcGVyQm91bmQgPSB0YXJnZXRNdWx0aXBsaWVyOworICAgIH0KKyAgICByZXR1
cm4gMTsKK30KKworc3RhdGljIGlubGluZSBXaGVlbEV2ZW50U3RhdHVzIHRvV2hlZWxFdmVudFN0
YXR1cyhQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFzZSwgUGxhdGZvcm1XaGVlbEV2ZW50UGhh
c2UgbW9tZW50dW1QaGFzZSkKK3sKKyAgICBpZiAocGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2VOb25lKSB7CisgICAgICAgIHN3aXRjaCAobW9tZW50dW1QaGFzZSkgeworICAgICAgICBj
YXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW46CisgICAgICAgICAgICByZXR1cm4gV2hl
ZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxCZWdpbjsKKworICAgICAgICBjYXNlIFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50
U3RhdHVzOjpJbmVydGlhbFNjcm9sbGluZzsKKworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxF
dmVudFBoYXNlRW5kZWQ6CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6SW5l
cnRpYWxTY3JvbGxFbmQ7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBX
aGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOyAKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobW9t
ZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpIHsKKyAgICAgICAgc3dp
dGNoIChwaGFzZSkgeworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW46
CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEJlZ2luOwor
CisgICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkOgorICAgICAgICAg
ICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxpbmc7CisKKyAgICAgICAgY2Fz
ZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkOgorICAgICAgICAgICAgcmV0dXJuIFdoZWVs
RXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxFbmQ7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOworfQorCitzdGF0aWMgaW5saW5l
IGZsb2F0IHByb2plY3RlZE1vbWVudHVtRGlzdGFuY2UoZmxvYXQgbW9tZW50dW0pCit7CisgICAg
cmV0dXJuIDE2LjY3ODkgKiBtb21lbnR1bTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHZvaWQgY2xhbXBUb0JvdW5kcyhUJiB2YWx1ZSwgVCBtaW4sIFQgbWF4KQoreworICAgIGlm
ICh2YWx1ZSA8IG1pbikKKyAgICAgICAgdmFsdWUgPSBtaW47CisKKyAgICBpZiAodmFsdWUgPiBt
YXgpCisgICAgICAgIHZhbHVlID0gbWF4OworfQorCitBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpB
eGlzU2Nyb2xsU25hcEFuaW1hdG9yKEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IqIGNsaWVudCwgQXhp
c1Njcm9sbFNuYXBPZmZzZXRzKiBzbmFwQXhpcywgU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCisgICAg
OiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3NuYXBBeGlzKHNuYXBBeGlzKQorICAgICwgbV9h
eGlzKGF4aXMpCisgICAgLCBtX2N1clN0YXRlKFNjcm9sbFNuYXBTdGF0ZTo6SWRsZSkKKyAgICAs
IG1faW5pdGlhbE9mZnNldCgwKQorICAgICwgbV90YXJnZXRPZmZzZXQoMCkKKyAgICAsIG1fYmVn
aW5UcmFja2luZ01vbWVudHVtT2Zmc2V0KDApCisgICAgLCBtX21vbWVudHVtQ291bnQoMCkKKyAg
ICAsIG1fZ2xpZGVNdWx0aXBsaWVyKDApCisgICAgLCBtX2dsaWRlUGhhc2VTaGlmdCgwKQorICAg
ICwgbV9nbGlkZUluaXRpYWxNb21lbnR1bSgwKQorICAgICwgbV9zaG91bGRPdmVycmlkZU1vbWVu
dHVtKGZhbHNlKQoreworfQorCit2b2lkIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmhhbmRsZVdo
ZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBmbG9hdCBz
Y3JvbGxEZWx0YSA9IG1fYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwgPyAtZXZl
bnQuZGVsdGFYKCkgOiAtZXZlbnQuZGVsdGFZKCk7CisgICAgV2hlZWxFdmVudFN0YXR1cyB3aGVl
bFN0YXR1cyA9IHRvV2hlZWxFdmVudFN0YXR1cyhldmVudC5waGFzZSgpLCBldmVudC5tb21lbnR1
bVBoYXNlKCkpOworICAgIGlmICgod2hlZWxTdGF0dXMgPT0gV2hlZWxFdmVudFN0YXR1czo6VXNl
clNjcm9sbGluZyB8fCB3aGVlbFN0YXR1cyA9PSBXaGVlbEV2ZW50U3RhdHVzOjpJbmVydGlhbFNj
cm9sbGluZykgJiYgIXNjcm9sbERlbHRhKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2gg
KHdoZWVsU3RhdHVzKSB7CisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsQmVn
aW46CisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsaW5nOgorICAgICAgICBl
bmRTbmFwcGluZyhTY3JvbGxTbmFwU3RhdGU6OklkbGUpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEVuZDoKKyAgICAgICAgYmVnaW5TbmFw
cGluZyhTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsQmVnaW46CisgICAgICAgIC8vIEJl
Z2luIHRyYWNraW5nIG1vbWVudHVtIGRlbHRhcyBmb3IgZ2xpZGUgcHJlZGljdGlvbi4KKyAgICAg
ICAgZW5kU25hcHBpbmcoU2Nyb2xsU25hcFN0YXRlOjpJZGxlKTsKKyAgICAgICAgcHVzaEluaXRp
YWxNb21lbnR1bShzY3JvbGxEZWx0YSk7CisgICAgICAgIG1fYmVnaW5UcmFja2luZ01vbWVudHVt
T2Zmc2V0ID0gbV9jbGllbnQtPnNjcm9sbE9mZnNldEluQXhpcyhtX2F4aXMpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxpbmc6Cisg
ICAgICAgIGlmIChtX2N1clN0YXRlICE9IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZykgeworICAg
ICAgICAgICAgaWYgKG1fbW9tZW50dW1Db3VudCA8IG1vbWVudHVtV2luZG93U2l6ZSkKKyAgICAg
ICAgICAgICAgICBwdXNoSW5pdGlhbE1vbWVudHVtKHNjcm9sbERlbHRhKTsKKworICAgICAgICAg
ICAgaWYgKG1fbW9tZW50dW1Db3VudCA9PSBtb21lbnR1bVdpbmRvd1NpemUpCisgICAgICAgICAg
ICAgICAgYmVnaW5TbmFwcGluZyhTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpJbmVydGlhbFNj
cm9sbEVuZDoKKyAgICAgICAgY2xlYXJJbml0aWFsTW9tZW50dW0oKTsKKyAgICAgICAgbV9zaG91
bGRPdmVycmlkZU1vbWVudHVtID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBX
aGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitib29sIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6
OnNob3VsZE92ZXJyaWRlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50
KSBjb25zdAoreworICAgIHJldHVybiBtX3Nob3VsZE92ZXJyaWRlTW9tZW50dW0gJiYgdG9XaGVl
bEV2ZW50U3RhdHVzKGV2ZW50LnBoYXNlKCksIGV2ZW50Lm1vbWVudHVtUGhhc2UoKSkgPT0gV2hl
ZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxpbmc7Cit9CisKK3ZvaWQgQXhpc1Njcm9sbFNu
YXBBbmltYXRvcjo6c2Nyb2xsVXBkYXRlKCkKK3sKKyAgICBBU1NFUlQobV9jdXJTdGF0ZSA9PSBT
Y3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgfHwgbV9jdXJTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6
OlNuYXBwaW5nKTsKKyAgICBmbG9hdCBhbW91bnQgPSBtX2N1clN0YXRlID09IFNjcm9sbFNuYXBT
dGF0ZTo6U25hcHBpbmcgPyBzbmFwQW1vdW50KCkgOiBnbGlkZUFtb3VudCgpOworICAgIGlmIChh
bW91bnQpCisgICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3JvbGxJbkF4aXMobV9heGlzLCBh
bW91bnQpOworICAgIGVsc2UgeworICAgICAgICBtX2N1clN0YXRlID0gU2Nyb2xsU25hcFN0YXRl
OjpJZGxlOworICAgICAgICBtX2NsaWVudC0+c3RvcFNjcm9sbFNuYXBUaW1lcigpOworICAgIH0K
K30KKwordm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpiZWdpblNuYXBwaW5nKFNjcm9sbFNu
YXBTdGF0ZSBuZXdTdGF0ZSkKK3sKKyAgICBBU1NFUlQobmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0
YXRlOjpHbGlkaW5nIHx8IG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6U25hcHBpbmcpOwor
ICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbV9jbGllbnQtPnNjcm9sbE9mZnNldEluQXhpcyhtX2F4
aXMpOworICAgIGZsb2F0IGluaXRpYWxNb21lbnR1bSA9IGF2ZXJhZ2VJbml0aWFsTW9tZW50dW0o
KTsKKyAgICBMYXlvdXRVbml0IHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uID0gbmV3U3RhdGUg
PT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nID8gbV9iZWdpblRyYWNraW5nTW9tZW50dW1PZmZz
ZXQgKyBMYXlvdXRVbml0KHByb2plY3RlZE1vbWVudHVtRGlzdGFuY2UoaW5pdGlhbE1vbWVudHVt
KSkgOiBvZmZzZXQ7CisgICAgY2xhbXBUb0JvdW5kczxMYXlvdXRVbml0Pihwcm9qZWN0ZWRTY3Jv
bGxEZXN0aW5hdGlvbiwgbV9zbmFwQXhpcy0+bWluaW11bVNuYXBQb3NpdGlvbigpLCBtX3NuYXBB
eGlzLT5tYXhpbXVtU25hcFBvc2l0aW9uKCkpOworCisgICAgbV9pbml0aWFsT2Zmc2V0ID0gb2Zm
c2V0OworICAgIG1fdGFyZ2V0T2Zmc2V0ID0gbV9zbmFwQXhpcy0+Y2xvc2VzdFNuYXBQb3NpdGlv
bihwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiwgaW5pdGlhbE1vbWVudHVtKTsKKyAgICBpZiAo
bV9pbml0aWFsT2Zmc2V0ID09IG1fdGFyZ2V0T2Zmc2V0KQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2N1clN0YXRlID0gbmV3U3RhdGU7CisgICAgaWYgKG5ld1N0YXRlID09IFNjcm9sbFNuYXBT
dGF0ZTo6R2xpZGluZykgeworICAgICAgICBtX3Nob3VsZE92ZXJyaWRlTW9tZW50dW0gPSB0cnVl
OworICAgICAgICBtX2dsaWRlSW5pdGlhbE1vbWVudHVtID0gaW5pdGlhbE1vbWVudHVtOworICAg
ICAgICBib29sIGdsaWRlUmVxdWlyZXNCb29zdDsKKyAgICAgICAgaWYgKGluaXRpYWxNb21lbnR1
bSA+IDApCisgICAgICAgICAgICBnbGlkZVJlcXVpcmVzQm9vc3QgPSBwcm9qZWN0ZWRTY3JvbGxE
ZXN0aW5hdGlvbiAtIG9mZnNldCA8IG1fdGFyZ2V0T2Zmc2V0IC0gcHJvamVjdGVkU2Nyb2xsRGVz
dGluYXRpb247CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdsaWRlUmVxdWlyZXNCb29zdCA9
IG9mZnNldCAtIHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uIDwgcHJvamVjdGVkU2Nyb2xsRGVz
dGluYXRpb24gLSBtX3RhcmdldE9mZnNldDsKKworICAgICAgICBpbml0aWFsaXplR2xpZGVQYXJh
bWV0ZXJzKGdsaWRlUmVxdWlyZXNCb29zdCk7CisgICAgfQorICAgIG1fY2xpZW50LT5zdGFydFNj
cm9sbFNuYXBUaW1lcigpOworfQorCit2b2lkIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmVuZFNu
YXBwaW5nKFNjcm9sbFNuYXBTdGF0ZSBuZXdTdGF0ZSkKK3sKKyAgICBBU1NFUlQobmV3U3RhdGUg
PT0gU2Nyb2xsU25hcFN0YXRlOjpJZGxlKTsKKyAgICBjbGVhckluaXRpYWxNb21lbnR1bSgpOwor
ICAgIG1fY3VyU3RhdGUgPSBuZXdTdGF0ZTsKKyAgICBtX2NsaWVudC0+c3RvcFNjcm9sbFNuYXBU
aW1lcigpOworfQorCitmbG9hdCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpzbmFwQW1vdW50KCkg
Y29uc3QKK3sKKyAgICBMYXlvdXRVbml0IG9mZnNldCA9IG1fY2xpZW50LT5zY3JvbGxPZmZzZXRJ
bkF4aXMobV9heGlzKTsKKyAgICBib29sIGNhbkNvbXB1dGVTbmFwID0gIChtX2luaXRpYWxPZmZz
ZXQgPD0gb2Zmc2V0ICYmIG9mZnNldCA8IG1fdGFyZ2V0T2Zmc2V0KSB8fCAobV90YXJnZXRPZmZz
ZXQgPCBvZmZzZXQgJiYgb2Zmc2V0IDw9IG1faW5pdGlhbE9mZnNldCk7CisgICAgaWYgKG1fY3Vy
U3RhdGUgIT0gU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZyB8fCAhY2FuQ29tcHV0ZVNuYXApCisg
ICAgICAgIHJldHVybiAwOworCisgICAgaW50IHNpZ24gPSBtX2luaXRpYWxPZmZzZXQgPCBtX3Rh
cmdldE9mZnNldCA/IDEgOiAtMTsKKyAgICBmbG9hdCBwcm9ncmVzcyA9ICgoZmxvYXQpKG9mZnNl
dCAtIG1faW5pdGlhbE9mZnNldCkpIC8gKG1fdGFyZ2V0T2Zmc2V0IC0gbV9pbml0aWFsT2Zmc2V0
KTsKKyAgICBmbG9hdCB0aHJlc2hvbGRlZERpc3RhbmNlID0gKG1fdGFyZ2V0T2Zmc2V0IC0gbV9p
bml0aWFsT2Zmc2V0KSAqIHNpZ247CisgICAgY2xhbXBUb0JvdW5kczxmbG9hdD4odGhyZXNob2xk
ZWREaXN0YW5jZSwgc25hcFRocmVzaG9sZExvdywgc25hcFRocmVzaG9sZEhpZ2gpOworICAgIGZs
b2F0IG1hZ25pdHVkZSA9IHNuYXBNYWduaXR1ZGVNaW4gKyAoc25hcE1hZ25pdHVkZU1heCAtIHNu
YXBNYWduaXR1ZGVNaW4pICogKHRocmVzaG9sZGVkRGlzdGFuY2UgLSBzbmFwVGhyZXNob2xkTG93
KSAvIChzbmFwVGhyZXNob2xkSGlnaCAtIHNuYXBUaHJlc2hvbGRMb3cpOworICAgIGZsb2F0IHJh
d1NuYXBBbW91bnQgPSAxICsgbWFnbml0dWRlICogc2luKHBpRmxvYXQgKiBwcm9ncmVzcyk7Cisg
ICAgaWYgKChtX3RhcmdldE9mZnNldCA8IG9mZnNldCAmJiBvZmZzZXQgLSByYXdTbmFwQW1vdW50
IDwgbV90YXJnZXRPZmZzZXQpIHx8IChtX3RhcmdldE9mZnNldCA+IG9mZnNldCAmJiBvZmZzZXQg
KyByYXdTbmFwQW1vdW50ID4gbV90YXJnZXRPZmZzZXQpKQorICAgICAgICByZXR1cm4gbV90YXJn
ZXRPZmZzZXQgLSBvZmZzZXQ7CisKKyAgICByZXR1cm4gc2lnbiAqIHJhd1NuYXBBbW91bnQ7Cit9
CisKK2Zsb2F0IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmdsaWRlQW1vdW50KCkgY29uc3QKK3sK
KyAgICBMYXlvdXRVbml0IG9mZnNldCA9IG1fY2xpZW50LT5zY3JvbGxPZmZzZXRJbkF4aXMobV9h
eGlzKTsKKyAgICBib29sIGNhbkNvbXB1dGVHbGlkZSA9IChtX2luaXRpYWxPZmZzZXQgPD0gb2Zm
c2V0ICYmIG9mZnNldCA8IG1fdGFyZ2V0T2Zmc2V0KSB8fCAobV90YXJnZXRPZmZzZXQgPCBvZmZz
ZXQgJiYgb2Zmc2V0IDw9IG1faW5pdGlhbE9mZnNldCk7CisgICAgaWYgKG1fY3VyU3RhdGUgIT0g
U2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nIHx8ICFjYW5Db21wdXRlR2xpZGUpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgZmxvYXQgcHJvZ3Jlc3MgPSAoKGZsb2F0KShvZmZzZXQgLSBtX2luaXRp
YWxPZmZzZXQpKSAvIChtX3RhcmdldE9mZnNldCAtIG1faW5pdGlhbE9mZnNldCk7CisgICAgZmxv
YXQgc2hpZnQgPSBjZWlsKCgobV9nbGlkZU11bHRpcGxpZXIgKiBtX2dsaWRlSW5pdGlhbE1vbWVu
dHVtKSAvIDIpICogKDEgKyBjb3MocGlGbG9hdCAqIHByb2dyZXNzIC0gbV9nbGlkZVBoYXNlU2hp
ZnQpKSk7CisgICAgaWYgKG1faW5pdGlhbE9mZnNldCA8IG1fdGFyZ2V0T2Zmc2V0KQorICAgICAg
ICBzaGlmdCA9IHNoaWZ0IDwgMSA/IDEgOiBzaGlmdDsKKyAgICBlbHNlIGlmIChtX2luaXRpYWxP
ZmZzZXQgPiBtX3RhcmdldE9mZnNldCkKKyAgICAgICAgc2hpZnQgPSBzaGlmdCA+IC0xID8gLTEg
OiBzaGlmdDsKKworICAgIGlmICgobV9pbml0aWFsT2Zmc2V0IDwgbV90YXJnZXRPZmZzZXQgJiYg
b2Zmc2V0ICsgc2hpZnQgPiBtX3RhcmdldE9mZnNldCkgfHwgKG1faW5pdGlhbE9mZnNldCA+IG1f
dGFyZ2V0T2Zmc2V0ICYmIG9mZnNldCArIHNoaWZ0IDwgbV90YXJnZXRPZmZzZXQpKQorICAgICAg
ICByZXR1cm4gbV90YXJnZXRPZmZzZXQgLSBvZmZzZXQ7CisKKyAgICByZXR1cm4gc2hpZnQ7Cit9
CisKK3ZvaWQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6aW5pdGlhbGl6ZUdsaWRlUGFyYW1ldGVy
cyhib29sIHNob3VsZEJvb3N0SW5pdGlhbE1vbWVudHVtKQoreworICAgIGlmIChzaG91bGRCb29z
dEluaXRpYWxNb21lbnR1bSkKKyAgICAgICAgbV9nbGlkZUluaXRpYWxNb21lbnR1bSAqPSBnbGlk
ZUJvb3N0TXVsdGlwbGllcjsKKworICAgIGZsb2F0IHRhcmdldEZpbmFsVmVsb2NpdHkgPSBpbml0
aWFsVG9GaW5hbE1vbWVudHVtRmFjdG9yICogKG1fZ2xpZGVJbml0aWFsTW9tZW50dW0gPCAwID8g
LW1fZ2xpZGVJbml0aWFsTW9tZW50dW0gOiBtX2dsaWRlSW5pdGlhbE1vbWVudHVtKTsKKyAgICBj
bGFtcFRvQm91bmRzPGZsb2F0Pih0YXJnZXRGaW5hbFZlbG9jaXR5LCBtaW5UYXJnZXRWZWxvY2l0
eSwgbWF4VGFyZ2V0VmVsb2NpdHkpOworICAgIG1fZ2xpZGVNdWx0aXBsaWVyID0gYmVzdE11bHRp
cGxpZXIobV9nbGlkZUluaXRpYWxNb21lbnR1bSA8IDAgPyAtbV9nbGlkZUluaXRpYWxNb21lbnR1
bSA6IG1fZ2xpZGVJbml0aWFsTW9tZW50dW0sIDE1LCB0YXJnZXRGaW5hbFZlbG9jaXR5KTsKKyAg
ICBtX2dsaWRlUGhhc2VTaGlmdCA9IGFjb3MoKDIgLSBtX2dsaWRlTXVsdGlwbGllcikgLyBtX2ds
aWRlTXVsdGlwbGllcik7Cit9CisKK2Jvb2wgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6cHVzaElu
aXRpYWxNb21lbnR1bShmbG9hdCBtb21lbnR1bSkKK3sKKyAgICBpZiAobV9tb21lbnR1bUNvdW50
ID49IG1vbWVudHVtV2luZG93U2l6ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX21v
bWVudHVtV2luZG93W21fbW9tZW50dW1Db3VudCsrXSA9IG1vbWVudHVtOworICAgIHJldHVybiBt
X21vbWVudHVtQ291bnQgPT0gbW9tZW50dW1XaW5kb3dTaXplOworfQorCitmbG9hdCBBeGlzU2Ny
b2xsU25hcEFuaW1hdG9yOjphdmVyYWdlSW5pdGlhbE1vbWVudHVtKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fbW9tZW50dW1Db3VudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmbG9hdCBzdW0g
PSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9tb21lbnR1bUNvdW50OyBpKyspCisgICAg
ICAgIHN1bSArPSBtX21vbWVudHVtV2luZG93W2ldOworCisgICAgcmV0dXJuIHN1bSAvIG1fbW9t
ZW50dW1Db3VudDsKK30KKwordm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpjbGVhckluaXRp
YWxNb21lbnR1bSgpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX21vbWVudHVtQ291bnQ7
IGkrKykKKyAgICAgICAgbV9tb21lbnR1bVdpbmRvd1tpXSA9IDA7CisKKyAgICBtX21vbWVudHVt
Q291bnQgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDU1Nf
U0NST0xMX1NOQVAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236408</attachid>
            <date>2014-08-11 15:37:01 -0700</date>
            <delta_ts>2014-08-13 19:02:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135768-20140811153651.patch</filename>
            <type>text/plain</type>
            <size>22281</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyNDEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4
IDdkMDc3MzU4ZmQ1NzEzZDg0YTRiNmMyYmRhZGNlOWQ3NDllMmQyMmIuLjlhMWQwYjBkOWM5ZTIw
NDM5YWVhNWU0ZWI0MWFkYzAxYTNkZjJkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCkBA
IC0xMjksNiArMTI5LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZv
cm0vbWFjL1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uTWFjLm1tCiAgICAgcGxhdGZv
cm0vbWFjL1NoYXJlZEJ1ZmZlck1hYy5tbQogICAgIHBsYXRmb3JtL21hYy9TaGFyZWRUaW1lck1h
Yy5tbQorICAgIHBsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tCiAgICAgcGxh
dGZvcm0vbWFjL1NvdW5kTWFjLm1tCiAgICAgcGxhdGZvcm0vbWFjL1N1ZGRlblRlcm1pbmF0aW9u
Lm1tCiAgICAgcGxhdGZvcm0vbWFjL1N5c3RlbVNsZWVwTGlzdGVuZXJNYWMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1MTFi
NzE1Y2M5ZDE5MDllMWIzNjQ4MDFjYWNmNzNmN2M0ZmFiMmZmLi5hZjVmNjRjMmUzMTYxOWUwNTg1
YmI1NDBjMTNlMjIyYmM3YWI0MmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MjQ3LDYgKzYyNDcsOCBAQAogCQlGNDJGRkI0
NjE5ODRCNzE2MDBGNjgzN0YgLyogTGVuZ3RoUmVwZWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDJGRkI0NTE5ODRCNzE2MDBGNjgzN0YgLyogTGVu
Z3RoUmVwZWF0LmggKi87IH07CiAJCUY0NUMyMzFEMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Ny
b2xsU25hcE9mZnNldHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjQ1QzIzMUIxOTk1QjczQjAwQTZFMkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0
cy5jcHAgKi87IH07CiAJCUY0NUMyMzFFMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25h
cE9mZnNldHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0NUMyMzFDMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGNDc4NzU1NDE5
OTgzQUZGMDAyNEEyODcgLyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3ODc1NTIxOTk4M0FGRjAwMjRBMjg3
IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlGNDc4NzU1NTE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Nj
cm9sbFNuYXBBbmltYXRvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY0Nzg3NTUzMTk5ODNBRkYwMDI0QTI4NyAvKiBBeGlzU2Nyb2xsU25hcEFuaW1h
dG9yLm1tICovOyB9OwogCQlGNDdBNUUzRTE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxT
bmFwUG9pbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNDdBNUUzQjE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3QTVFM0Yx
OTVCOEU0ODAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDdBNUUzQTE5NUI4QzhBMDA0ODMx
MDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcCAqLzsgfTsKIAkJRjUwNjY0RjcxNTdGNTJE
QzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MDY2NEY1MTU3RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29u
dHJvbGxlci5jcHAgKi87IH07CkBAIC0xMzc2Niw2ICsxMzc2OCw4IEBACiAJCUY0MkZGQjQ1MTk4
NEI3MTYwMEY2ODM3RiAvKiBMZW5ndGhSZXBlYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTGVuZ3RoUmVwZWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0
NUMyMzFCMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ1QzIzMUMxOTk1QjczQjAwQTZFMkUz
IC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRjQ3ODc1NTIxOTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXhpc1Njcm9sbFNuYXBBbmltYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNDc4NzU1MzE5OTgzQUZGMDAyNEEyODcg
LyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUY0N0E1RTNBMTk1QjhDOEEwMDQ4MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQ
b2ludHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3R5bGVTY3Jv
bGxTbmFwUG9pbnRzLmNwcDsgcGF0aCA9IHN0eWxlL1N0eWxlU2Nyb2xsU25hcFBvaW50cy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0N0E1RTNCMTk1QjhDOEEwMDQ4MzEwMCAv
KiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmg7IHBhdGggPSBzdHlsZS9TdHlsZVNjcm9sbFNuYXBQ
b2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjUwNjY0RjUxNTdGNTJEQzAw
QUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZvcm1Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE2NDEwLDYgKzE2NDE0LDggQEAKIAkJNjU4MkExNDgwOTk5OUQ2QzAwQkVFQjZEIC8qIG1h
YyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRjQ3ODc1
NTIxOTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCAqLywKKwkJCQlG
NDc4NzU1MzE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbSAqLywK
IAkJCQk2NUE2NDBGMDA1MzNCQjFGMDA4NUU3NzcgLyogQmxvY2tFeGNlcHRpb25zLmggKi8sCiAJ
CQkJNjVGODA2OTcwNTREOUY4NjAwOEJGNzc2IC8qIEJsb2NrRXhjZXB0aW9ucy5tbSAqLywKIAkJ
CQkyOTE5QTFFQTE2QjMzNzg5MDA3ODcyMTMgLyogQ29udGVudEZpbHRlck1hYy5tbSAqLywKQEAg
LTI2MjYxLDYgKzI2MjY3LDcgQEAKIAkJCQlCMjIyN0E5NzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
UHJlc2VydmVBc3BlY3RSYXRpby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4QTBFMEExMjZFRjFE
QjAwOTc4RjdBIC8qIFNWR1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODFERDQ5QzEz
QkExQTYwMDBEQzc2MjcgLyogU1ZHUHJvcGVydHlJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
NDc4NzU1NDE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDg4QTBFMEIxMjZFRjFEQjAwOTc4RjdBIC8qIFNWR1Byb3BlcnR5VGVh
ck9mZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4QTBFMEMxMjZFRjFEQjAwOTc4RjdBIC8qIFNW
R1Byb3BlcnR5VHJhaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0E5QTBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI4
MTc2LDYgKzI4MTgzLDcgQEAKIAkJCQlCRTYxMDM5RDE4QTlENjUyMDBERDUwRDcgLyogSlNEYXRh
Q3VlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNjJBNDU3MTAxMTQ2NDcwMERGRjNFRCAvKiBK
U0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNjJB
NDU0MTAxMTQ1RTMwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUY0Nzg3NTU1MTk5ODNBRkYwMDI0QTI4NyAvKiBBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFRDExMkIwM0Y5
NDAwM0E1ODNBIC8qIEpTRGVsYXlOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxRkIxQTY1
MTIwQTVEM0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxRkIxQTZDMTIwQTVENjkwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50Q3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjI5YWYxNzU4NWE5YzJh
NTg4MzBhMjY0YTUyYWZmOTU5OWZkMzJkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmgKQEAgLTAsMCArMSwxMTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JfaAorI2RlZmlu
ZSBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yX2gKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
CisKKyNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCIKKyNpbmNsdWRlICJMYXlvdXRV
bml0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiU2Nyb2xs
VHlwZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIFNjcm9sbFNuYXBT
dGF0ZSB7CisgICAgU25hcHBpbmcsCisgICAgR2xpZGluZywKKyAgICBJZGxlCit9OworCitlbnVt
IGNsYXNzIFdoZWVsRXZlbnRTdGF0dXMgeworICAgIFVzZXJTY3JvbGxCZWdpbiwKKyAgICBVc2Vy
U2Nyb2xsaW5nLAorICAgIFVzZXJTY3JvbGxFbmQsCisgICAgSW5lcnRpYWxTY3JvbGxCZWdpbiwK
KyAgICBJbmVydGlhbFNjcm9sbGluZywKKyAgICBJbmVydGlhbFNjcm9sbEVuZCwKKyAgICBVbmtu
b3duCit9OworCitjbGFzcyBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50IHsKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIH5BeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50KCkgeyB9CisKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xsT2Zmc2V0SW5BeGlzKFNjcm9sbEV2
ZW50QXhpcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVTY3JvbGxJbkF4aXMoU2Ny
b2xsRXZlbnRBeGlzLCBmbG9hdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFNjcm9sbFNu
YXBUaW1lcigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcFNjcm9sbFNuYXBUaW1lcigpID0g
MDsKK307CisKK2NsYXNzIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IgeworcHVibGljOgorICAgIEF4
aXNTY3JvbGxTbmFwQW5pbWF0b3IoQXhpc1Njcm9sbFNuYXBBbmltYXRvckNsaWVudCosIEF4aXNT
Y3JvbGxTbmFwT2Zmc2V0cyosIFNjcm9sbEV2ZW50QXhpcyk7CisgICAgdm9pZCBoYW5kbGVXaGVl
bEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOworICAgIGJvb2wgc2hvdWxkT3ZlcnJp
ZGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0OworICAgIHZvaWQg
c2Nyb2xsVXBkYXRlKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBiZWdpblNjcm9sbFNuYXBBbmlt
YXRpb24oU2Nyb2xsU25hcFN0YXRlKTsKKyAgICB2b2lkIGVuZFNjcm9sbFNuYXBBbmltYXRpb24o
KTsKKworICAgIGZsb2F0IHNuYXBBbW91bnQoKSBjb25zdDsKKyAgICBmbG9hdCBnbGlkZUFtb3Vu
dCgpIGNvbnN0OworCisgICAgdm9pZCBpbml0aWFsaXplR2xpZGVQYXJhbWV0ZXJzKGJvb2wpOwor
ICAgIGJvb2wgcHVzaEluaXRpYWxNb21lbnR1bShmbG9hdCk7CisgICAgZmxvYXQgYXZlcmFnZUlu
aXRpYWxNb21lbnR1bSgpIGNvbnN0OworICAgIHZvaWQgY2xlYXJJbml0aWFsTW9tZW50dW0oKTsK
KworICAgIHN0YXRpYyBjb25zdCBpbnQgbW9tZW50dW1XaW5kb3dTaXplID0gMzsKKyAgICBzdGF0
aWMgY29uc3QgaW50IHNuYXBNYWduaXR1ZGVNYXg7CisgICAgc3RhdGljIGNvbnN0IGludCBzbmFw
TWFnbml0dWRlTWluOworICAgIHN0YXRpYyBjb25zdCBpbnQgc25hcFRocmVzaG9sZEhpZ2g7Cisg
ICAgc3RhdGljIGNvbnN0IGludCBzbmFwVGhyZXNob2xkTG93OworICAgIHN0YXRpYyBjb25zdCBm
bG9hdCBnbGlkZUJvb3N0TXVsdGlwbGllcjsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWF4VGFy
Z2V0VmVsb2NpdHk7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1pblRhcmdldFZlbG9jaXR5Owor
ICAgIHN0YXRpYyBjb25zdCBmbG9hdCBpbml0aWFsVG9GaW5hbE1vbWVudHVtRmFjdG9yOworCisg
ICAgQXhpc1Njcm9sbFNuYXBBbmltYXRvckNsaWVudCogbV9jbGllbnQ7CisgICAgQXhpc1Njcm9s
bFNuYXBPZmZzZXRzKiBtX3NuYXBBeGlzOworICAgIFNjcm9sbEV2ZW50QXhpcyBtX2F4aXM7Cisg
ICAgLy8gVXNlZCB0byB0cmFjayBib3RoIHNuYXBwaW5nIGFuZCBnbGlkaW5nIGJlaGF2aW9ycy4K
KyAgICBTY3JvbGxTbmFwU3RhdGUgbV9jdXJTdGF0ZTsKKyAgICBMYXlvdXRVbml0IG1faW5pdGlh
bE9mZnNldDsKKyAgICBMYXlvdXRVbml0IG1fdGFyZ2V0T2Zmc2V0OworICAgIC8vIFVzZWQgdG8g
dHJhY2sgZ2xpZGluZyBiZWhhdmlvci4KKyAgICBMYXlvdXRVbml0IG1fYmVnaW5UcmFja2luZ01v
bWVudHVtT2Zmc2V0OworICAgIGludCBtX21vbWVudHVtQ291bnQ7CisgICAgZmxvYXQgbV9tb21l
bnR1bVdpbmRvd1ttb21lbnR1bVdpbmRvd1NpemVdOworICAgIGZsb2F0IG1fZ2xpZGVNdWx0aXBs
aWVyOworICAgIGZsb2F0IG1fZ2xpZGVQaGFzZVNoaWZ0OworICAgIGZsb2F0IG1fZ2xpZGVJbml0
aWFsTW9tZW50dW07CisgICAgYm9vbCBtX3Nob3VsZE92ZXJyaWRlTW9tZW50dW07Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQorCisjZW5kaWYgLy8gQXhpc1Njcm9sbFNuYXBBbmltYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjc2MTQyMzhhYjJiMTdmZDBmOWY4ODhmYTc0OTcwM2MyODQxNjI1NGIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRv
ci5tbQpAQCAtMCwwICsxLDMxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmgiCisKKyNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGludCBBeGlzU2Nyb2xs
U25hcEFuaW1hdG9yOjpzbmFwTWFnbml0dWRlTWF4ID0gMjU7Citjb25zdCBpbnQgQXhpc1Njcm9s
bFNuYXBBbmltYXRvcjo6c25hcE1hZ25pdHVkZU1pbiA9IDU7Citjb25zdCBpbnQgQXhpc1Njcm9s
bFNuYXBBbmltYXRvcjo6c25hcFRocmVzaG9sZEhpZ2ggPSAxMDAwOworY29uc3QgaW50IEF4aXNT
Y3JvbGxTbmFwQW5pbWF0b3I6OnNuYXBUaHJlc2hvbGRMb3cgPSA1MDsKK2NvbnN0IGZsb2F0IEF4
aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmdsaWRlQm9vc3RNdWx0aXBsaWVyID0gMy41OworY29uc3Qg
ZmxvYXQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6bWF4VGFyZ2V0VmVsb2NpdHkgPSA3OworY29u
c3QgZmxvYXQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6bWluVGFyZ2V0VmVsb2NpdHkgPSAzLjU7
Citjb25zdCBmbG9hdCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjppbml0aWFsVG9GaW5hbE1vbWVu
dHVtRmFjdG9yID0gMS4wIC8gNDAuMDsKKworc3RhdGljIGlubGluZSBmbG9hdCBiZXN0TXVsdGlw
bGllcihmbG9hdCBpbml0aWFsTW9tZW50dW0sIGludCBtYXhJdGVyYXRpb25zLCBmbG9hdCB0YXJn
ZXRGaW5hbFZlbG9jaXR5KQoreworICAgIGZsb2F0IG11bHRpcGxpZXJMb3dlckJvdW5kID0gMTsK
KyAgICBmbG9hdCBtdWx0aXBsaWVyVXBwZXJCb3VuZCA9IDI7CisgICAgZmxvYXQgdGFyZ2V0TXVs
dGlwbGllcjsKKyAgICBmbG9hdCBmaW5hbFZlbG9jaXR5OworICAgIGludCBjdXJpdGVyID0gMDsK
KyAgICB3aGlsZSAobXVsdGlwbGllckxvd2VyQm91bmQgPCBtdWx0aXBsaWVyVXBwZXJCb3VuZCkg
eworICAgICAgICB0YXJnZXRNdWx0aXBsaWVyID0gKG11bHRpcGxpZXJMb3dlckJvdW5kICsgbXVs
dGlwbGllclVwcGVyQm91bmQpIC8gMjsKKyAgICAgICAgaWYgKGN1cml0ZXIrKyA+IG1heEl0ZXJh
dGlvbnMpCisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0TXVsdGlwbGllcjsKKyAgICAgICAgCisg
ICAgICAgIGZpbmFsVmVsb2NpdHkgPSAoKHRhcmdldE11bHRpcGxpZXIgKiBpbml0aWFsTW9tZW50
dW0pIC8gMikgKiAoMSArIGNvcyhwaUZsb2F0IC0gYWNvcygoMiAtIHRhcmdldE11bHRpcGxpZXIp
IC8gdGFyZ2V0TXVsdGlwbGllcikpKTsKKyAgICAgICAgaWYgKHRhcmdldEZpbmFsVmVsb2NpdHkg
LSAwLjUgPD0gZmluYWxWZWxvY2l0eSAmJiBmaW5hbFZlbG9jaXR5IDw9IHRhcmdldEZpbmFsVmVs
b2NpdHkgKyAwLjUpCisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0TXVsdGlwbGllcjsKKworICAg
ICAgICBpZiAoZmluYWxWZWxvY2l0eSA8IHRhcmdldEZpbmFsVmVsb2NpdHkgLSAwLjUpCisgICAg
ICAgICAgICBtdWx0aXBsaWVyTG93ZXJCb3VuZCA9IHRhcmdldE11bHRpcGxpZXI7CisKKyAgICAg
ICAgZWxzZSBpZiAoZmluYWxWZWxvY2l0eSA+IHRhcmdldEZpbmFsVmVsb2NpdHkgKyAwLjUpCisg
ICAgICAgICAgICBtdWx0aXBsaWVyVXBwZXJCb3VuZCA9IHRhcmdldE11bHRpcGxpZXI7CisgICAg
fQorICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIFdoZWVsRXZlbnRTdGF0dXMgdG9X
aGVlbEV2ZW50U3RhdHVzKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIHBoYXNlLCBQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZSBtb21lbnR1bVBoYXNlKQoreworICAgIGlmIChwaGFzZSA9PSBQbGF0Zm9y
bVdoZWVsRXZlbnRQaGFzZU5vbmUpIHsKKyAgICAgICAgc3dpdGNoIChtb21lbnR1bVBoYXNlKSB7
CisgICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VCZWdhbjoKKyAgICAgICAgICAg
IHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpJbmVydGlhbFNjcm9sbEJlZ2luOworCisgICAgICAg
IGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkOgorICAgICAgICAgICAgcmV0dXJu
IFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsaW5nOworCisgICAgICAgIGNhc2UgUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50
U3RhdHVzOjpJbmVydGlhbFNjcm9sbEVuZDsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVua25vd247IAorICAgICAgICB9CisgICAgfQor
ICAgIGlmIChtb21lbnR1bVBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSkgewor
ICAgICAgICBzd2l0Y2ggKHBoYXNlKSB7CisgICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2VCZWdhbjoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Ny
b2xsQmVnaW47CisKKyAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQ6
CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbGluZzsKKwor
ICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQ6CisgICAgICAgICAgICBy
ZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEVuZDsKKworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVua25vd247CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVua25vd247Cit9CisKK3N0
YXRpYyBpbmxpbmUgZmxvYXQgcHJvamVjdGVkTW9tZW50dW1EaXN0YW5jZShmbG9hdCBtb21lbnR1
bSkKK3sKKyAgICByZXR1cm4gMTYuNjc4OSAqIG1vbWVudHVtOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgdm9pZCBjbGFtcFRvQm91bmRzKFQmIHZhbHVlLCBUIG1pbiwgVCBtYXgp
Cit7CisgICAgaWYgKHZhbHVlIDwgbWluKQorICAgICAgICB2YWx1ZSA9IG1pbjsKKworICAgIGlm
ICh2YWx1ZSA+IG1heCkKKyAgICAgICAgdmFsdWUgPSBtYXg7Cit9CisKK0F4aXNTY3JvbGxTbmFw
QW5pbWF0b3I6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3IoQXhpc1Njcm9sbFNuYXBBbmltYXRvckNs
aWVudCogY2xpZW50LCBBeGlzU2Nyb2xsU25hcE9mZnNldHMqIHNuYXBBeGlzLCBTY3JvbGxFdmVu
dEF4aXMgYXhpcykKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fc25hcEF4aXMoc25h
cEF4aXMpCisgICAgLCBtX2F4aXMoYXhpcykKKyAgICAsIG1fY3VyU3RhdGUoU2Nyb2xsU25hcFN0
YXRlOjpJZGxlKQorICAgICwgbV9pbml0aWFsT2Zmc2V0KDApCisgICAgLCBtX3RhcmdldE9mZnNl
dCgwKQorICAgICwgbV9iZWdpblRyYWNraW5nTW9tZW50dW1PZmZzZXQoMCkKKyAgICAsIG1fbW9t
ZW50dW1Db3VudCgwKQorICAgICwgbV9nbGlkZU11bHRpcGxpZXIoMCkKKyAgICAsIG1fZ2xpZGVQ
aGFzZVNoaWZ0KDApCisgICAgLCBtX2dsaWRlSW5pdGlhbE1vbWVudHVtKDApCisgICAgLCBtX3No
b3VsZE92ZXJyaWRlTW9tZW50dW0oZmFsc2UpCit7Cit9CisKK3ZvaWQgQXhpc1Njcm9sbFNuYXBB
bmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50
KQoreworICAgIGZsb2F0IHNjcm9sbERlbHRhID0gbV9heGlzID09IFNjcm9sbEV2ZW50QXhpczo6
SG9yaXpvbnRhbCA/IC1ldmVudC5kZWx0YVgoKSA6IC1ldmVudC5kZWx0YVkoKTsKKyAgICBXaGVl
bEV2ZW50U3RhdHVzIHdoZWVsU3RhdHVzID0gdG9XaGVlbEV2ZW50U3RhdHVzKGV2ZW50LnBoYXNl
KCksIGV2ZW50Lm1vbWVudHVtUGhhc2UoKSk7CisgICAgaWYgKCh3aGVlbFN0YXR1cyA9PSBXaGVl
bEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsaW5nIHx8IHdoZWVsU3RhdHVzID09IFdoZWVsRXZlbnRT
dGF0dXM6OkluZXJ0aWFsU2Nyb2xsaW5nKSAmJiAhc2Nyb2xsRGVsdGEpCisgICAgICAgIHJldHVy
bjsKKworICAgIHN3aXRjaCAod2hlZWxTdGF0dXMpIHsKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0
dXM6OlVzZXJTY3JvbGxCZWdpbjoKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3Jv
bGxpbmc6CisgICAgICAgIGVuZFNjcm9sbFNuYXBBbmltYXRpb24oKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxFbmQ6CisgICAgICAgIGJl
Z2luU2Nyb2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsQmVn
aW46CisgICAgICAgIC8vIEJlZ2luIHRyYWNraW5nIG1vbWVudHVtIGRlbHRhcyBmb3IgZ2xpZGUg
cHJlZGljdGlvbi4KKyAgICAgICAgZW5kU2Nyb2xsU25hcEFuaW1hdGlvbigpOworICAgICAgICBw
dXNoSW5pdGlhbE1vbWVudHVtKHNjcm9sbERlbHRhKTsKKyAgICAgICAgbV9iZWdpblRyYWNraW5n
TW9tZW50dW1PZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0SW5BeGlzKG1fYXhpcyk7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpJbmVydGlhbFNjcm9s
bGluZzoKKyAgICAgICAgaWYgKG1fY3VyU3RhdGUgIT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5n
KSB7CisgICAgICAgICAgICBpZiAobV9tb21lbnR1bUNvdW50IDwgbW9tZW50dW1XaW5kb3dTaXpl
KQorICAgICAgICAgICAgICAgIHB1c2hJbml0aWFsTW9tZW50dW0oc2Nyb2xsRGVsdGEpOworCisg
ICAgICAgICAgICBpZiAobV9tb21lbnR1bUNvdW50ID09IG1vbWVudHVtV2luZG93U2l6ZSkKKyAg
ICAgICAgICAgICAgICBiZWdpblNjcm9sbFNuYXBBbmltYXRpb24oU2Nyb2xsU25hcFN0YXRlOjpH
bGlkaW5nKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2hlZWxFdmVu
dFN0YXR1czo6SW5lcnRpYWxTY3JvbGxFbmQ6CisgICAgICAgIGNsZWFySW5pdGlhbE1vbWVudHVt
KCk7CisgICAgICAgIG1fc2hvdWxkT3ZlcnJpZGVNb21lbnR1bSA9IGZhbHNlOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VW5rbm93bjoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworYm9vbCBBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yOjpzaG91bGRPdmVycmlkZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JiBldmVudCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zaG91bGRPdmVycmlk
ZU1vbWVudHVtICYmIHRvV2hlZWxFdmVudFN0YXR1cyhldmVudC5waGFzZSgpLCBldmVudC5tb21l
bnR1bVBoYXNlKCkpID09IFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsaW5nOworfQor
Cit2b2lkIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OnNjcm9sbFVwZGF0ZSgpCit7CisgICAgQVNT
RVJUKG1fY3VyU3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nIHx8IG1fY3VyU3RhdGUg
PT0gU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZyk7CisgICAgZmxvYXQgYW1vdW50ID0gbV9jdXJT
dGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nID8gc25hcEFtb3VudCgpIDogZ2xpZGVB
bW91bnQoKTsKKyAgICBpZiAoYW1vdW50KQorICAgICAgICBtX2NsaWVudC0+aW1tZWRpYXRlU2Ny
b2xsSW5BeGlzKG1fYXhpcywgYW1vdW50KTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jdXJTdGF0
ZSA9IFNjcm9sbFNuYXBTdGF0ZTo6SWRsZTsKKyAgICAgICAgbV9jbGllbnQtPnN0b3BTY3JvbGxT
bmFwVGltZXIoKTsKKyAgICB9Cit9CisKK3ZvaWQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6YmVn
aW5TY3JvbGxTbmFwQW5pbWF0aW9uKFNjcm9sbFNuYXBTdGF0ZSBuZXdTdGF0ZSkKK3sKKyAgICBB
U1NFUlQobmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nIHx8IG5ld1N0YXRlID09
IFNjcm9sbFNuYXBTdGF0ZTo6U25hcHBpbmcpOworICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbV9j
bGllbnQtPnNjcm9sbE9mZnNldEluQXhpcyhtX2F4aXMpOworICAgIGZsb2F0IGluaXRpYWxNb21l
bnR1bSA9IGF2ZXJhZ2VJbml0aWFsTW9tZW50dW0oKTsKKyAgICBMYXlvdXRVbml0IHByb2plY3Rl
ZFNjcm9sbERlc3RpbmF0aW9uID0gbmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5n
ID8gbV9iZWdpblRyYWNraW5nTW9tZW50dW1PZmZzZXQgKyBMYXlvdXRVbml0KHByb2plY3RlZE1v
bWVudHVtRGlzdGFuY2UoaW5pdGlhbE1vbWVudHVtKSkgOiBvZmZzZXQ7CisgICAgY2xhbXBUb0Jv
dW5kczxMYXlvdXRVbml0Pihwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiwgbV9zbmFwQXhpcy0+
bWluaW11bVNuYXBQb3NpdGlvbigpLCBtX3NuYXBBeGlzLT5tYXhpbXVtU25hcFBvc2l0aW9uKCkp
OworCisgICAgbV9pbml0aWFsT2Zmc2V0ID0gb2Zmc2V0OworICAgIG1fdGFyZ2V0T2Zmc2V0ID0g
bV9zbmFwQXhpcy0+Y2xvc2VzdFNuYXBQb3NpdGlvbihwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlv
biwgaW5pdGlhbE1vbWVudHVtKTsKKyAgICBpZiAobV9pbml0aWFsT2Zmc2V0ID09IG1fdGFyZ2V0
T2Zmc2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1clN0YXRlID0gbmV3U3RhdGU7Cisg
ICAgaWYgKG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZykgeworICAgICAgICBt
X3Nob3VsZE92ZXJyaWRlTW9tZW50dW0gPSB0cnVlOworICAgICAgICBtX2dsaWRlSW5pdGlhbE1v
bWVudHVtID0gaW5pdGlhbE1vbWVudHVtOworICAgICAgICBib29sIGdsaWRlUmVxdWlyZXNCb29z
dDsKKyAgICAgICAgaWYgKGluaXRpYWxNb21lbnR1bSA+IDApCisgICAgICAgICAgICBnbGlkZVJl
cXVpcmVzQm9vc3QgPSBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiAtIG9mZnNldCA8IG1fdGFy
Z2V0T2Zmc2V0IC0gcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb247CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGdsaWRlUmVxdWlyZXNCb29zdCA9IG9mZnNldCAtIHByb2plY3RlZFNjcm9sbERl
c3RpbmF0aW9uIDwgcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24gLSBtX3RhcmdldE9mZnNldDsK
KworICAgICAgICBpbml0aWFsaXplR2xpZGVQYXJhbWV0ZXJzKGdsaWRlUmVxdWlyZXNCb29zdCk7
CisgICAgfQorICAgIG1fY2xpZW50LT5zdGFydFNjcm9sbFNuYXBUaW1lcigpOworfQorCit2b2lk
IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmVuZFNjcm9sbFNuYXBBbmltYXRpb24oKQoreworICAg
IGNsZWFySW5pdGlhbE1vbWVudHVtKCk7CisgICAgbV9jdXJTdGF0ZSA9IFNjcm9sbFNuYXBTdGF0
ZTo6SWRsZTsKKyAgICBtX2NsaWVudC0+c3RvcFNjcm9sbFNuYXBUaW1lcigpOworfQorCitmbG9h
dCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpzbmFwQW1vdW50KCkgY29uc3QKK3sKKyAgICBMYXlv
dXRVbml0IG9mZnNldCA9IG1fY2xpZW50LT5zY3JvbGxPZmZzZXRJbkF4aXMobV9heGlzKTsKKyAg
ICBib29sIGNhbkNvbXB1dGVTbmFwID0gIChtX2luaXRpYWxPZmZzZXQgPD0gb2Zmc2V0ICYmIG9m
ZnNldCA8IG1fdGFyZ2V0T2Zmc2V0KSB8fCAobV90YXJnZXRPZmZzZXQgPCBvZmZzZXQgJiYgb2Zm
c2V0IDw9IG1faW5pdGlhbE9mZnNldCk7CisgICAgaWYgKG1fY3VyU3RhdGUgIT0gU2Nyb2xsU25h
cFN0YXRlOjpTbmFwcGluZyB8fCAhY2FuQ29tcHV0ZVNuYXApCisgICAgICAgIHJldHVybiAwOwor
CisgICAgaW50IHNpZ24gPSBtX2luaXRpYWxPZmZzZXQgPCBtX3RhcmdldE9mZnNldCA/IDEgOiAt
MTsKKyAgICBmbG9hdCBwcm9ncmVzcyA9ICgoZmxvYXQpKG9mZnNldCAtIG1faW5pdGlhbE9mZnNl
dCkpIC8gKG1fdGFyZ2V0T2Zmc2V0IC0gbV9pbml0aWFsT2Zmc2V0KTsKKyAgICBmbG9hdCB0aHJl
c2hvbGRlZERpc3RhbmNlID0gKG1fdGFyZ2V0T2Zmc2V0IC0gbV9pbml0aWFsT2Zmc2V0KSAqIHNp
Z247CisgICAgY2xhbXBUb0JvdW5kczxmbG9hdD4odGhyZXNob2xkZWREaXN0YW5jZSwgc25hcFRo
cmVzaG9sZExvdywgc25hcFRocmVzaG9sZEhpZ2gpOworICAgIGZsb2F0IG1hZ25pdHVkZSA9IHNu
YXBNYWduaXR1ZGVNaW4gKyAoc25hcE1hZ25pdHVkZU1heCAtIHNuYXBNYWduaXR1ZGVNaW4pICog
KHRocmVzaG9sZGVkRGlzdGFuY2UgLSBzbmFwVGhyZXNob2xkTG93KSAvIChzbmFwVGhyZXNob2xk
SGlnaCAtIHNuYXBUaHJlc2hvbGRMb3cpOworICAgIGZsb2F0IHJhd1NuYXBBbW91bnQgPSAxICsg
bWFnbml0dWRlICogc2luKHBpRmxvYXQgKiBwcm9ncmVzcyk7CisgICAgaWYgKChtX3RhcmdldE9m
ZnNldCA8IG9mZnNldCAmJiBvZmZzZXQgLSByYXdTbmFwQW1vdW50IDwgbV90YXJnZXRPZmZzZXQp
IHx8IChtX3RhcmdldE9mZnNldCA+IG9mZnNldCAmJiBvZmZzZXQgKyByYXdTbmFwQW1vdW50ID4g
bV90YXJnZXRPZmZzZXQpKQorICAgICAgICByZXR1cm4gbV90YXJnZXRPZmZzZXQgLSBvZmZzZXQ7
CisKKyAgICByZXR1cm4gc2lnbiAqIHJhd1NuYXBBbW91bnQ7Cit9CisKK2Zsb2F0IEF4aXNTY3Jv
bGxTbmFwQW5pbWF0b3I6OmdsaWRlQW1vdW50KCkgY29uc3QKK3sKKyAgICBMYXlvdXRVbml0IG9m
ZnNldCA9IG1fY2xpZW50LT5zY3JvbGxPZmZzZXRJbkF4aXMobV9heGlzKTsKKyAgICBib29sIGNh
bkNvbXB1dGVHbGlkZSA9IChtX2luaXRpYWxPZmZzZXQgPD0gb2Zmc2V0ICYmIG9mZnNldCA8IG1f
dGFyZ2V0T2Zmc2V0KSB8fCAobV90YXJnZXRPZmZzZXQgPCBvZmZzZXQgJiYgb2Zmc2V0IDw9IG1f
aW5pdGlhbE9mZnNldCk7CisgICAgaWYgKG1fY3VyU3RhdGUgIT0gU2Nyb2xsU25hcFN0YXRlOjpH
bGlkaW5nIHx8ICFjYW5Db21wdXRlR2xpZGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgZmxv
YXQgcHJvZ3Jlc3MgPSAoKGZsb2F0KShvZmZzZXQgLSBtX2luaXRpYWxPZmZzZXQpKSAvIChtX3Rh
cmdldE9mZnNldCAtIG1faW5pdGlhbE9mZnNldCk7CisgICAgZmxvYXQgc2hpZnQgPSBjZWlsKCgo
bV9nbGlkZU11bHRpcGxpZXIgKiBtX2dsaWRlSW5pdGlhbE1vbWVudHVtKSAvIDIpICogKDEgKyBj
b3MocGlGbG9hdCAqIHByb2dyZXNzIC0gbV9nbGlkZVBoYXNlU2hpZnQpKSk7CisgICAgaWYgKG1f
aW5pdGlhbE9mZnNldCA8IG1fdGFyZ2V0T2Zmc2V0KQorICAgICAgICBzaGlmdCA9IHNoaWZ0IDwg
MSA/IDEgOiBzaGlmdDsKKyAgICBlbHNlIGlmIChtX2luaXRpYWxPZmZzZXQgPiBtX3RhcmdldE9m
ZnNldCkKKyAgICAgICAgc2hpZnQgPSBzaGlmdCA+IC0xID8gLTEgOiBzaGlmdDsKKworICAgIGlm
ICgobV9pbml0aWFsT2Zmc2V0IDwgbV90YXJnZXRPZmZzZXQgJiYgb2Zmc2V0ICsgc2hpZnQgPiBt
X3RhcmdldE9mZnNldCkgfHwgKG1faW5pdGlhbE9mZnNldCA+IG1fdGFyZ2V0T2Zmc2V0ICYmIG9m
ZnNldCArIHNoaWZ0IDwgbV90YXJnZXRPZmZzZXQpKQorICAgICAgICByZXR1cm4gbV90YXJnZXRP
ZmZzZXQgLSBvZmZzZXQ7CisKKyAgICByZXR1cm4gc2hpZnQ7Cit9CisKK3ZvaWQgQXhpc1Njcm9s
bFNuYXBBbmltYXRvcjo6aW5pdGlhbGl6ZUdsaWRlUGFyYW1ldGVycyhib29sIHNob3VsZEJvb3N0
SW5pdGlhbE1vbWVudHVtKQoreworICAgIGlmIChzaG91bGRCb29zdEluaXRpYWxNb21lbnR1bSkK
KyAgICAgICAgbV9nbGlkZUluaXRpYWxNb21lbnR1bSAqPSBnbGlkZUJvb3N0TXVsdGlwbGllcjsK
KworICAgIGZsb2F0IHRhcmdldEZpbmFsVmVsb2NpdHkgPSBpbml0aWFsVG9GaW5hbE1vbWVudHVt
RmFjdG9yICogKG1fZ2xpZGVJbml0aWFsTW9tZW50dW0gPCAwID8gLW1fZ2xpZGVJbml0aWFsTW9t
ZW50dW0gOiBtX2dsaWRlSW5pdGlhbE1vbWVudHVtKTsKKyAgICBjbGFtcFRvQm91bmRzPGZsb2F0
Pih0YXJnZXRGaW5hbFZlbG9jaXR5LCBtaW5UYXJnZXRWZWxvY2l0eSwgbWF4VGFyZ2V0VmVsb2Np
dHkpOworICAgIG1fZ2xpZGVNdWx0aXBsaWVyID0gYmVzdE11bHRpcGxpZXIobV9nbGlkZUluaXRp
YWxNb21lbnR1bSA8IDAgPyAtbV9nbGlkZUluaXRpYWxNb21lbnR1bSA6IG1fZ2xpZGVJbml0aWFs
TW9tZW50dW0sIDE1LCB0YXJnZXRGaW5hbFZlbG9jaXR5KTsKKyAgICBtX2dsaWRlUGhhc2VTaGlm
dCA9IGFjb3MoKDIgLSBtX2dsaWRlTXVsdGlwbGllcikgLyBtX2dsaWRlTXVsdGlwbGllcik7Cit9
CisKK2Jvb2wgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6cHVzaEluaXRpYWxNb21lbnR1bShmbG9h
dCBtb21lbnR1bSkKK3sKKyAgICBpZiAobV9tb21lbnR1bUNvdW50ID49IG1vbWVudHVtV2luZG93
U2l6ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX21vbWVudHVtV2luZG93W21fbW9t
ZW50dW1Db3VudCsrXSA9IG1vbWVudHVtOworICAgIHJldHVybiBtX21vbWVudHVtQ291bnQgPT0g
bW9tZW50dW1XaW5kb3dTaXplOworfQorCitmbG9hdCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjph
dmVyYWdlSW5pdGlhbE1vbWVudHVtKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbW9tZW50dW1Db3Vu
dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmbG9hdCBzdW0gPSAwOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbV9tb21lbnR1bUNvdW50OyBpKyspCisgICAgICAgIHN1bSArPSBtX21vbWVu
dHVtV2luZG93W2ldOworCisgICAgcmV0dXJuIHN1bSAvIG1fbW9tZW50dW1Db3VudDsKK30KKwor
dm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpjbGVhckluaXRpYWxNb21lbnR1bSgpCit7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX21vbWVudHVtQ291bnQ7IGkrKykKKyAgICAgICAgbV9t
b21lbnR1bVdpbmRvd1tpXSA9IDA7CisKKyAgICBtX21vbWVudHVtQ291bnQgPSAwOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDU1NfU0NST0xMX1NOQVAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236492</attachid>
            <date>2014-08-12 18:49:55 -0700</date>
            <delta_ts>2014-08-13 19:02:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135768-20140812184944.patch</filename>
            <type>text/plain</type>
            <size>26305</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyNTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4
IDdkMDc3MzU4ZmQ1NzEzZDg0YTRiNmMyYmRhZGNlOWQ3NDllMmQyMmIuLjlhMWQwYjBkOWM5ZTIw
NDM5YWVhNWU0ZWI0MWFkYzAxYTNkZjJkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCkBA
IC0xMjksNiArMTI5LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZv
cm0vbWFjL1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uTWFjLm1tCiAgICAgcGxhdGZv
cm0vbWFjL1NoYXJlZEJ1ZmZlck1hYy5tbQogICAgIHBsYXRmb3JtL21hYy9TaGFyZWRUaW1lck1h
Yy5tbQorICAgIHBsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tCiAgICAgcGxh
dGZvcm0vbWFjL1NvdW5kTWFjLm1tCiAgICAgcGxhdGZvcm0vbWFjL1N1ZGRlblRlcm1pbmF0aW9u
Lm1tCiAgICAgcGxhdGZvcm0vbWFjL1N5c3RlbVNsZWVwTGlzdGVuZXJNYWMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmMGFh
MDQxZGNiMjdiZTNlODJmODhjYjhhZDE2NjM4Zjg1NTM5NWU4Li4zMWFlYWMyYTYxNTdhNWZkZTAx
MzgzNzY1MGU1ODQ0NzA2NDkzMTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MjQ3LDYgKzYyNDcsOCBAQAogCQlGNDJGRkI0
NjE5ODRCNzE2MDBGNjgzN0YgLyogTGVuZ3RoUmVwZWF0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDJGRkI0NTE5ODRCNzE2MDBGNjgzN0YgLyogTGVu
Z3RoUmVwZWF0LmggKi87IH07CiAJCUY0NUMyMzFEMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Ny
b2xsU25hcE9mZnNldHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjQ1QzIzMUIxOTk1QjczQjAwQTZFMkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0
cy5jcHAgKi87IH07CiAJCUY0NUMyMzFFMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25h
cE9mZnNldHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0NUMyMzFDMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGNDc4NzU1NDE5
OTgzQUZGMDAyNEEyODcgLyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3ODc1NTIxOTk4M0FGRjAwMjRBMjg3
IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlGNDc4NzU1NTE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Nj
cm9sbFNuYXBBbmltYXRvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY0Nzg3NTUzMTk5ODNBRkYwMDI0QTI4NyAvKiBBeGlzU2Nyb2xsU25hcEFuaW1h
dG9yLm1tICovOyB9OwogCQlGNDdBNUUzRTE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxT
bmFwUG9pbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNDdBNUUzQjE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3QTVFM0Yx
OTVCOEU0ODAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDdBNUUzQTE5NUI4QzhBMDA0ODMx
MDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcCAqLzsgfTsKIAkJRjUwNjY0RjcxNTdGNTJE
QzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MDY2NEY1MTU3RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29u
dHJvbGxlci5jcHAgKi87IH07CkBAIC0xMzc2Niw2ICsxMzc2OCw4IEBACiAJCUY0MkZGQjQ1MTk4
NEI3MTYwMEY2ODM3RiAvKiBMZW5ndGhSZXBlYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTGVuZ3RoUmVwZWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0
NUMyMzFCMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ1QzIzMUMxOTk1QjczQjAwQTZFMkUz
IC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRjQ3ODc1NTIxOTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXhpc1Njcm9sbFNuYXBBbmltYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNDc4NzU1MzE5OTgzQUZGMDAyNEEyODcg
LyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUY0N0E1RTNBMTk1QjhDOEEwMDQ4MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQ
b2ludHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3R5bGVTY3Jv
bGxTbmFwUG9pbnRzLmNwcDsgcGF0aCA9IHN0eWxlL1N0eWxlU2Nyb2xsU25hcFBvaW50cy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0N0E1RTNCMTk1QjhDOEEwMDQ4MzEwMCAv
KiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmg7IHBhdGggPSBzdHlsZS9TdHlsZVNjcm9sbFNuYXBQ
b2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjUwNjY0RjUxNTdGNTJEQzAw
QUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZvcm1Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE2NDA4LDYgKzE2NDEyLDggQEAKIAkJNjU4MkExNDgwOTk5OUQ2QzAwQkVFQjZEIC8qIG1h
YyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRjQ3ODc1
NTIxOTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCAqLywKKwkJCQlG
NDc4NzU1MzE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbSAqLywK
IAkJCQk2NUE2NDBGMDA1MzNCQjFGMDA4NUU3NzcgLyogQmxvY2tFeGNlcHRpb25zLmggKi8sCiAJ
CQkJNjVGODA2OTcwNTREOUY4NjAwOEJGNzc2IC8qIEJsb2NrRXhjZXB0aW9ucy5tbSAqLywKIAkJ
CQkyOTE5QTFFQTE2QjMzNzg5MDA3ODcyMTMgLyogQ29udGVudEZpbHRlck1hYy5tbSAqLywKQEAg
LTI2MjU5LDYgKzI2MjY1LDcgQEAKIAkJCQlCMjIyN0E5NzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
UHJlc2VydmVBc3BlY3RSYXRpby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4QTBFMEExMjZFRjFE
QjAwOTc4RjdBIC8qIFNWR1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODFERDQ5QzEz
QkExQTYwMDBEQzc2MjcgLyogU1ZHUHJvcGVydHlJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
NDc4NzU1NDE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDg4QTBFMEIxMjZFRjFEQjAwOTc4RjdBIC8qIFNWR1Byb3BlcnR5VGVh
ck9mZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4QTBFMEMxMjZFRjFEQjAwOTc4RjdBIC8qIFNW
R1Byb3BlcnR5VHJhaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0E5QTBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI4
MTc0LDYgKzI4MTgxLDcgQEAKIAkJCQlCRTYxMDM5RDE4QTlENjUyMDBERDUwRDcgLyogSlNEYXRh
Q3VlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNjJBNDU3MTAxMTQ2NDcwMERGRjNFRCAvKiBK
U0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNjJB
NDU0MTAxMTQ1RTMwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUY0Nzg3NTU1MTk5ODNBRkYwMDI0QTI4NyAvKiBBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFRDExMkIwM0Y5
NDAwM0E1ODNBIC8qIEpTRGVsYXlOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxRkIxQTY1
MTIwQTVEM0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxRkIxQTZDMTIwQTVENjkwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50Q3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAKaW5kZXggMmNmZGM0YThhM2QzZTY0
Mjg2NDZhYmExOWZlZmUyYzNlODBmOTllYS4uZmJmOWMzODc1ZWQ5Mjg3ZTlhYzM0YTk2MWUzMDhl
OWNjY2E0YWJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhp
c1Njcm9sbFNuYXBPZmZzZXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwCkBAIC0xNDIsNiArMTQyLDM4IEBAIHZvaWQgdXBk
YXRlSG9yaXpvbnRhbFZlcnRpY2FsU25hcE9mZnNldHMoVmVjdG9yPExheW91dFVuaXQ+JiBob3Jp
em9udGFsU25hcE9mZnNlCiAgICAgfQogfQogCitMYXlvdXRVbml0IGNsb3Nlc3RTbmFwT2Zmc2V0
KGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHMsIExheW91dFVuaXQgc2Nyb2xs
RGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5KQoreworICAgIGlmIChzY3JvbGxEZXN0aW5hdGlv
biA8PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChzY3JvbGxEZXN0aW5hdGlvbiA+
PSBzbmFwT2Zmc2V0cy5hdChzbmFwT2Zmc2V0cy5zaXplKCkgLSAxKSkKKyAgICAgICAgcmV0dXJu
IHNuYXBPZmZzZXRzLmF0KHNuYXBPZmZzZXRzLnNpemUoKSAtIDEpOworCisgICAgc2l6ZV90IGxv
d2VySW5kZXggPSAwOworICAgIHNpemVfdCB1cHBlckluZGV4ID0gc25hcE9mZnNldHMuc2l6ZSgp
IC0gMTsKKyAgICB3aGlsZSAobG93ZXJJbmRleCA8IHVwcGVySW5kZXggLSAxKSB7CisgICAgICAg
IHNpemVfdCBtaWRkbGVJbmRleCA9IChsb3dlckluZGV4ICsgdXBwZXJJbmRleCkgLyAyOworICAg
ICAgICBpZiAoc2Nyb2xsRGVzdGluYXRpb24gPCBzbmFwT2Zmc2V0cy5hdChtaWRkbGVJbmRleCkp
CisgICAgICAgICAgICB1cHBlckluZGV4ID0gbWlkZGxlSW5kZXg7CisgICAgICAgIGVsc2UgaWYg
KHNjcm9sbERlc3RpbmF0aW9uID4gc25hcE9mZnNldHMuYXQobWlkZGxlSW5kZXgpKQorICAgICAg
ICAgICAgbG93ZXJJbmRleCA9IG1pZGRsZUluZGV4OworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIHVwcGVySW5kZXggPSBtaWRkbGVJbmRleDsKKyAgICAgICAgICAgIGxvd2VySW5kZXggPSBt
aWRkbGVJbmRleDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIExh
eW91dFVuaXQgbG93ZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0cy5hdChsb3dlckluZGV4KTsK
KyAgICBMYXlvdXRVbml0IHVwcGVyU25hcFBvc2l0aW9uID0gc25hcE9mZnNldHMuYXQodXBwZXJJ
bmRleCk7CisgICAgLy8gTm9uemVybyB2ZWxvY2l0eSBpbmRpY2F0ZXMgYSBmbGljayBnZXN0dXJl
LiBFdmVuIGlmIGFub3RoZXIgc25hcCBwb2ludCBpcyBjbG9zZXIsIHNuYXAgdG8gdGhlIG9uZSBp
biB0aGUgZGlyZWN0aW9uIG9mIHRoZSBmbGljayBnZXN0dXJlLgorICAgIGlmICh2ZWxvY2l0eSkK
KyAgICAgICAgcmV0dXJuIHZlbG9jaXR5IDwgMCA/IGxvd2VyU25hcFBvc2l0aW9uIDogdXBwZXJT
bmFwUG9zaXRpb247CisKKyAgICBib29sIGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlvbiA9IHNj
cm9sbERlc3RpbmF0aW9uIC0gbG93ZXJTbmFwUG9zaXRpb24gPD0gdXBwZXJTbmFwUG9zaXRpb24g
LSBzY3JvbGxEZXN0aW5hdGlvbjsKKyAgICByZXR1cm4gaXNDbG9zZXJUb0xvd2VyU25hcFBvc2l0
aW9uID8gbG93ZXJTbmFwUG9zaXRpb24gOiB1cHBlclNuYXBQb3NpdGlvbjsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gQ1NTX1NDUk9MTF9TTkFQCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oCmlu
ZGV4IGU5OWI0YjJkZjE4NzIzMjBmN2M1ZjI3YmU1MDlkMjBmYTlkMjBhNDQuLjM5NDI2ZWUzZGE4
NDFkMTc5ZGViNzc2NzkzMjg5ZTY1NWExNDk2MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oCkBAIC00MCw2ICs0MCw3
IEBAIGNsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRlclN0eWxlOwogCiB2b2lkIHVwZGF0ZUhv
cml6b250YWxWZXJ0aWNhbFNuYXBPZmZzZXRzKFZlY3RvcjxMYXlvdXRVbml0PiYgaG9yaXpvbnRh
bFNuYXBPZmZzZXRzLCBWZWN0b3I8TGF5b3V0VW5pdD4mIHZlcnRpY2FsU25hcE9mZnNldHMsIEhU
TUxFbGVtZW50JiBzY3JvbGxpbmdFbGVtZW50LCBjb25zdCBSZW5kZXJCb3gmLCBjb25zdCBSZW5k
ZXJTdHlsZSYpOworTGF5b3V0VW5pdCBjbG9zZXN0U25hcE9mZnNldChjb25zdCBWZWN0b3I8TGF5
b3V0VW5pdD4mIHNuYXBPZmZzZXRzLCBMYXlvdXRVbml0IHNjcm9sbERlc3RpbmF0aW9uLCBmbG9h
dCB2ZWxvY2l0eSk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNWYyZTVlZWJlMTg4YWE3YjAwMGJlOWRlNzhhMTNmMGQ4ZWMwYjE3OQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9y
LmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF4aXNTY3JvbGxTbmFw
QW5pbWF0b3JfaAorI2RlZmluZSBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yX2gKKworI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCisKKyNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCIK
KyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50Lmgi
CisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVt
IGNsYXNzIFNjcm9sbFNuYXBTdGF0ZSB7CisgICAgU25hcHBpbmcsCisgICAgR2xpZGluZywKKyAg
ICBJZGxlCit9OworCitlbnVtIGNsYXNzIFdoZWVsRXZlbnRTdGF0dXMgeworICAgIFVzZXJTY3Jv
bGxCZWdpbiwKKyAgICBVc2VyU2Nyb2xsaW5nLAorICAgIFVzZXJTY3JvbGxFbmQsCisgICAgSW5l
cnRpYWxTY3JvbGxCZWdpbiwKKyAgICBJbmVydGlhbFNjcm9sbGluZywKKyAgICBJbmVydGlhbFNj
cm9sbEVuZCwKKyAgICBVbmtub3duCit9OworCitjbGFzcyBBeGlzU2Nyb2xsU25hcEFuaW1hdG9y
Q2xpZW50IHsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5BeGlzU2Nyb2xsU25hcEFuaW1hdG9y
Q2xpZW50KCkgeyB9CisKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgc2Nyb2xsT2Zm
c2V0SW5BeGlzKFNjcm9sbEV2ZW50QXhpcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlh
dGVTY3JvbGxJbkF4aXMoU2Nyb2xsRXZlbnRBeGlzLCBmbG9hdCB2ZWxvY2l0eSkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzdGFydFNjcm9sbFNuYXBUaW1lcigpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc3RvcFNjcm9sbFNuYXBUaW1lcigpID0gMDsKK307CisKK2NsYXNzIEF4aXNTY3JvbGxTbmFw
QW5pbWF0b3IgeworcHVibGljOgorICAgIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IoQXhpc1Njcm9s
bFNuYXBBbmltYXRvckNsaWVudCosIFZlY3RvcjxMYXlvdXRVbml0PiosIFNjcm9sbEV2ZW50QXhp
cyk7CisgICAgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYp
OworICAgIGJvb2wgc2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYpIGNvbnN0OworICAgIHZvaWQgc2Nyb2xsU25hcEFuaW1hdGlvblVwZGF0ZSgpOworCitw
cml2YXRlOgorICAgIHZvaWQgYmVnaW5TY3JvbGxTbmFwQW5pbWF0aW9uKFNjcm9sbFNuYXBTdGF0
ZSk7CisgICAgdm9pZCBlbmRTY3JvbGxTbmFwQW5pbWF0aW9uKCk7CisKKyAgICBmbG9hdCBjb21w
dXRlU25hcERlbHRhKCkgY29uc3Q7CisgICAgZmxvYXQgY29tcHV0ZUdsaWRlRGVsdGEoKSBjb25z
dDsKKworICAgIHZvaWQgaW5pdGlhbGl6ZUdsaWRlUGFyYW1ldGVycyhib29sKTsKKyAgICB2b2lk
IHB1c2hJbml0aWFsV2hlZWxEZWx0YShmbG9hdCk7CisgICAgZmxvYXQgYXZlcmFnZUluaXRpYWxX
aGVlbERlbHRhKCkgY29uc3Q7CisgICAgdm9pZCBjbGVhckluaXRpYWxXaGVlbERlbHRhV2luZG93
KCk7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IHdoZWVsRGVsdGFXaW5kb3dTaXplID0gMzsKKwor
ICAgIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQqIG1fY2xpZW50OworICAgIFZlY3RvcjxM
YXlvdXRVbml0PiogbV9zbmFwT2Zmc2V0czsKKyAgICBTY3JvbGxFdmVudEF4aXMgbV9heGlzOwor
ICAgIC8vIFVzZWQgdG8gdHJhY2sgYm90aCBzbmFwcGluZyBhbmQgZ2xpZGluZyBiZWhhdmlvcnMu
CisgICAgU2Nyb2xsU25hcFN0YXRlIG1fY3VyU3RhdGU7CisgICAgTGF5b3V0VW5pdCBtX2luaXRp
YWxPZmZzZXQ7CisgICAgTGF5b3V0VW5pdCBtX3RhcmdldE9mZnNldDsKKyAgICAvLyBVc2VkIHRv
IHRyYWNrIGdsaWRpbmcgYmVoYXZpb3IuCisgICAgTGF5b3V0VW5pdCBtX2JlZ2luVHJhY2tpbmdX
aGVlbERlbHRhT2Zmc2V0OworICAgIGludCBtX251bVdoZWVsRGVsdGFzVHJhY2tlZDsKKyAgICBm
bG9hdCBtX3doZWVsRGVsdGFXaW5kb3dbd2hlZWxEZWx0YVdpbmRvd1NpemVdOworICAgIGZsb2F0
IG1fZ2xpZGVNYWduaXR1ZGU7CisgICAgZmxvYXQgbV9nbGlkZVBoYXNlU2hpZnQ7CisgICAgZmxv
YXQgbV9nbGlkZUluaXRpYWxXaGVlbERlbHRhOworICAgIGJvb2wgbV9zaG91bGRPdmVycmlkZVdo
ZWVsRXZlbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQorCisjZW5kaWYgLy8gQXhpc1Njcm9sbFNuYXBBbmltYXRvcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBB
bmltYXRvci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFu
aW1hdG9yLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3OGExYTg0YzhmOWJkZGQ1Y2ZkZDE5YTVhMjgxZTBkZWZk
NWIyNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhp
c1Njcm9sbFNuYXBBbmltYXRvci5tbQpAQCAtMCwwICsxLDI5MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmgiCisK
KyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Nv
bnN0IGZsb2F0IHNuYXBNYWduaXR1ZGVNYXggPSAyNTsKK2NvbnN0IGZsb2F0IHNuYXBNYWduaXR1
ZGVNaW4gPSA1OworY29uc3QgZmxvYXQgc25hcFRocmVzaG9sZEhpZ2ggPSAxMDAwOworY29uc3Qg
ZmxvYXQgc25hcFRocmVzaG9sZExvdyA9IDUwOworY29uc3QgZmxvYXQgZ2xpZGVCb29zdE11bHRp
cGxpZXIgPSAzLjU7Citjb25zdCBmbG9hdCBtYXhUYXJnZXRXaGVlbERlbHRhID0gNzsKK2NvbnN0
IGZsb2F0IG1pblRhcmdldFdoZWVsRGVsdGEgPSAzLjU7Citjb25zdCBmbG9hdCBpbml0aWFsVG9G
aW5hbE1vbWVudHVtRmFjdG9yID0gMS4wIC8gNDAuMDsKKworc3RhdGljIGlubGluZSBXaGVlbEV2
ZW50U3RhdHVzIHRvV2hlZWxFdmVudFN0YXR1cyhQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFz
ZSwgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbW9tZW50dW1QaGFzZSkKK3sKKyAgICBpZiAocGhh
c2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKSB7CisgICAgICAgIHN3aXRjaCAobW9t
ZW50dW1QaGFzZSkgeworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW46
CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxCZWdp
bjsKKworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDoKKyAgICAg
ICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpJbmVydGlhbFNjcm9sbGluZzsKKworICAg
ICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQ6CisgICAgICAgICAgICByZXR1
cm4gV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxFbmQ7CisKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOyAKKyAgICAg
ICAgfQorICAgIH0KKyAgICBpZiAobW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQ
aGFzZU5vbmUpIHsKKyAgICAgICAgc3dpdGNoIChwaGFzZSkgeworICAgICAgICBjYXNlIFBsYXRm
b3JtV2hlZWxFdmVudFBoYXNlQmVnYW46CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0
YXR1czo6VXNlclNjcm9sbEJlZ2luOworCisgICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2VDaGFuZ2VkOgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJT
Y3JvbGxpbmc7CisKKyAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkOgor
ICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxFbmQ7CisKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtu
b3duOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtu
b3duOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IHByb2plY3RlZEluZXJ0aWFsU2Nyb2xsRGlz
dGFuY2UoZmxvYXQgaW5pdGlhbFdoZWVsRGVsdGEpCit7CisgICAgcmV0dXJuIDE2LjY3ODkgKiBp
bml0aWFsV2hlZWxEZWx0YTsKK30KKworQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6QXhpc1Njcm9s
bFNuYXBBbmltYXRvcihBeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50KiBjbGllbnQsIFZlY3Rv
cjxMYXlvdXRVbml0Piogc25hcE9mZnNldHMsIFNjcm9sbEV2ZW50QXhpcyBheGlzKQorICAgIDog
bV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zbmFwT2Zmc2V0cyhzbmFwT2Zmc2V0cykKKyAgICAs
IG1fYXhpcyhheGlzKQorICAgICwgbV9jdXJTdGF0ZShTY3JvbGxTbmFwU3RhdGU6OklkbGUpCisg
ICAgLCBtX2luaXRpYWxPZmZzZXQoMCkKKyAgICAsIG1fdGFyZ2V0T2Zmc2V0KDApCisgICAgLCBt
X2JlZ2luVHJhY2tpbmdXaGVlbERlbHRhT2Zmc2V0KDApCisgICAgLCBtX251bVdoZWVsRGVsdGFz
VHJhY2tlZCgwKQorICAgICwgbV9nbGlkZU1hZ25pdHVkZSgwKQorICAgICwgbV9nbGlkZVBoYXNl
U2hpZnQoMCkKKyAgICAsIG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSgwKQorICAgICwgbV9zaG91
bGRPdmVycmlkZVdoZWVsRXZlbnQoZmFsc2UpCit7Cit9CisKK3ZvaWQgQXhpc1Njcm9sbFNuYXBB
bmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50
KQoreworICAgIGZsb2F0IHNjcm9sbERlbHRhID0gbV9heGlzID09IFNjcm9sbEV2ZW50QXhpczo6
SG9yaXpvbnRhbCA/IC1ldmVudC5kZWx0YVgoKSA6IC1ldmVudC5kZWx0YVkoKTsKKyAgICBXaGVl
bEV2ZW50U3RhdHVzIHdoZWVsU3RhdHVzID0gdG9XaGVlbEV2ZW50U3RhdHVzKGV2ZW50LnBoYXNl
KCksIGV2ZW50Lm1vbWVudHVtUGhhc2UoKSk7CisgICAgaWYgKCh3aGVlbFN0YXR1cyA9PSBXaGVl
bEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsaW5nIHx8IHdoZWVsU3RhdHVzID09IFdoZWVsRXZlbnRT
dGF0dXM6OkluZXJ0aWFsU2Nyb2xsaW5nKSAmJiAhc2Nyb2xsRGVsdGEpCisgICAgICAgIHJldHVy
bjsKKworICAgIHN3aXRjaCAod2hlZWxTdGF0dXMpIHsKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0
dXM6OlVzZXJTY3JvbGxCZWdpbjoKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3Jv
bGxpbmc6CisgICAgICAgIGVuZFNjcm9sbFNuYXBBbmltYXRpb24oKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxFbmQ6CisgICAgICAgIGJl
Z2luU2Nyb2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsQmVn
aW46CisgICAgICAgIC8vIEJlZ2luIHRyYWNraW5nIHdoZWVsIGRlbHRhcyBmb3IgZ2xpZGUgcHJl
ZGljdGlvbi4KKyAgICAgICAgZW5kU2Nyb2xsU25hcEFuaW1hdGlvbigpOworICAgICAgICBwdXNo
SW5pdGlhbFdoZWVsRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgICAgICBtX2JlZ2luVHJhY2tpbmdX
aGVlbERlbHRhT2Zmc2V0ID0gbV9jbGllbnQtPnNjcm9sbE9mZnNldEluQXhpcyhtX2F4aXMpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3Jv
bGxpbmc6CisgICAgICAgIGlmIChtX2N1clN0YXRlICE9IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGlu
ZykgeworICAgICAgICAgICAgaWYgKG1fbnVtV2hlZWxEZWx0YXNUcmFja2VkIDwgd2hlZWxEZWx0
YVdpbmRvd1NpemUpCisgICAgICAgICAgICAgICAgcHVzaEluaXRpYWxXaGVlbERlbHRhKHNjcm9s
bERlbHRhKTsKKworICAgICAgICAgICAgaWYgKG1fbnVtV2hlZWxEZWx0YXNUcmFja2VkID09IHdo
ZWVsRGVsdGFXaW5kb3dTaXplKQorICAgICAgICAgICAgICAgIGJlZ2luU2Nyb2xsU25hcEFuaW1h
dGlvbihTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcpOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpJbmVydGlhbFNjcm9sbEVuZDoKKyAgICAg
ICAgY2xlYXJJbml0aWFsV2hlZWxEZWx0YVdpbmRvdygpOworICAgICAgICBtX3Nob3VsZE92ZXJy
aWRlV2hlZWxFdmVudCA9IGZhbHNlOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2hlZWxF
dmVudFN0YXR1czo6VW5rbm93bjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworYm9vbCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpzaG91
bGRPdmVycmlkZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9zaG91bGRPdmVycmlkZVdoZWVsRXZlbnQgJiYgdG9XaGVlbEV2
ZW50U3RhdHVzKGV2ZW50LnBoYXNlKCksIGV2ZW50Lm1vbWVudHVtUGhhc2UoKSkgPT0gV2hlZWxF
dmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxpbmc7Cit9CisKK3ZvaWQgQXhpc1Njcm9sbFNuYXBB
bmltYXRvcjo6c2Nyb2xsU25hcEFuaW1hdGlvblVwZGF0ZSgpCit7CisgICAgQVNTRVJUKG1fY3Vy
U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nIHx8IG1fY3VyU3RhdGUgPT0gU2Nyb2xs
U25hcFN0YXRlOjpTbmFwcGluZyk7CisgICAgZmxvYXQgZGVsdGEgPSBtX2N1clN0YXRlID09IFNj
cm9sbFNuYXBTdGF0ZTo6U25hcHBpbmcgPyBjb21wdXRlU25hcERlbHRhKCkgOiBjb21wdXRlR2xp
ZGVEZWx0YSgpOworICAgIGlmIChkZWx0YSkKKyAgICAgICAgbV9jbGllbnQtPmltbWVkaWF0ZVNj
cm9sbEluQXhpcyhtX2F4aXMsIGRlbHRhKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9jdXJTdGF0
ZSA9IFNjcm9sbFNuYXBTdGF0ZTo6SWRsZTsKKyAgICAgICAgbV9jbGllbnQtPnN0b3BTY3JvbGxT
bmFwVGltZXIoKTsKKyAgICB9Cit9CisKK3ZvaWQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6YmVn
aW5TY3JvbGxTbmFwQW5pbWF0aW9uKFNjcm9sbFNuYXBTdGF0ZSBuZXdTdGF0ZSkKK3sKKyAgICBB
U1NFUlQobmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nIHx8IG5ld1N0YXRlID09
IFNjcm9sbFNuYXBTdGF0ZTo6U25hcHBpbmcpOworICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbV9j
bGllbnQtPnNjcm9sbE9mZnNldEluQXhpcyhtX2F4aXMpOworICAgIGZsb2F0IGluaXRpYWxXaGVl
bERlbHRhID0gYXZlcmFnZUluaXRpYWxXaGVlbERlbHRhKCk7CisgICAgTGF5b3V0VW5pdCBwcm9q
ZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiA9IG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6R2xp
ZGluZyA/IG1fYmVnaW5UcmFja2luZ1doZWVsRGVsdGFPZmZzZXQgKyBMYXlvdXRVbml0KHByb2pl
Y3RlZEluZXJ0aWFsU2Nyb2xsRGlzdGFuY2UoaW5pdGlhbFdoZWVsRGVsdGEpKSA6IG9mZnNldDsK
KyAgICBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiA9IHN0ZDo6bWluKHN0ZDo6bWF4KHByb2pl
Y3RlZFNjcm9sbERlc3RpbmF0aW9uLCBtX3NuYXBPZmZzZXRzLT5maXJzdCgpKSwgbV9zbmFwT2Zm
c2V0cy0+bGFzdCgpKTsKKyAgICBtX2luaXRpYWxPZmZzZXQgPSBvZmZzZXQ7CisgICAgbV90YXJn
ZXRPZmZzZXQgPSBjbG9zZXN0U25hcE9mZnNldCgqbV9zbmFwT2Zmc2V0cywgcHJvamVjdGVkU2Ny
b2xsRGVzdGluYXRpb24sIGluaXRpYWxXaGVlbERlbHRhKTsKKyAgICBpZiAobV9pbml0aWFsT2Zm
c2V0ID09IG1fdGFyZ2V0T2Zmc2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1clN0YXRl
ID0gbmV3U3RhdGU7CisgICAgaWYgKG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGlu
ZykgeworICAgICAgICBtX3Nob3VsZE92ZXJyaWRlV2hlZWxFdmVudCA9IHRydWU7CisgICAgICAg
IG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSA9IGluaXRpYWxXaGVlbERlbHRhOworICAgICAgICBi
b29sIGdsaWRlUmVxdWlyZXNCb29zdDsKKyAgICAgICAgaWYgKGluaXRpYWxXaGVlbERlbHRhID4g
MCkKKyAgICAgICAgICAgIGdsaWRlUmVxdWlyZXNCb29zdCA9IHByb2plY3RlZFNjcm9sbERlc3Rp
bmF0aW9uIC0gb2Zmc2V0IDwgbV90YXJnZXRPZmZzZXQgLSBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5h
dGlvbjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ2xpZGVSZXF1aXJlc0Jvb3N0ID0gb2Zm
c2V0IC0gcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24gPCBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5h
dGlvbiAtIG1fdGFyZ2V0T2Zmc2V0OworCisgICAgICAgIGluaXRpYWxpemVHbGlkZVBhcmFtZXRl
cnMoZ2xpZGVSZXF1aXJlc0Jvb3N0KTsKKyAgICB9CisgICAgbV9jbGllbnQtPnN0YXJ0U2Nyb2xs
U25hcFRpbWVyKCk7Cit9CisKK3ZvaWQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6ZW5kU2Nyb2xs
U25hcEFuaW1hdGlvbigpCit7CisgICAgaWYgKG1fY3VyU3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRl
OjpHbGlkaW5nKQorICAgICAgICBjbGVhckluaXRpYWxXaGVlbERlbHRhV2luZG93KCk7CisKKyAg
ICBtX2N1clN0YXRlID0gU2Nyb2xsU25hcFN0YXRlOjpJZGxlOworICAgIG1fY2xpZW50LT5zdG9w
U2Nyb2xsU25hcFRpbWVyKCk7Cit9CisKKy8vIENvbXB1dGVzIHRoZSBhbW91bnQgdG8gc2Nyb2xs
IGJ5IHdoZW4gcGVyZm9ybWluZyBhICJzbmFwIiBvcGVyYXRpb24sIGkuZS4gd2hlbiBhIHVzZXIg
cmVsZWFzZXMgdGhlIHRyYWNrcGFkIHdpdGhvdXQgZmxpY2tpbmcuIFRoZSBzbmFwIGRlbHRhCisv
LyBpcyBhIGZ1bmN0aW9uIG9mIHByb2dyZXNzIHQsIHdoZXJlIHQgaXMgZXF1YWwgdG8gRElTVEFO
Q0VfVFJBVkVMRUQgLyBUT1RBTF9ESVNUQU5DRSwgRElTVEFOQ0VfVFJBVkVMRUQgaXMgdGhlIGRp
c3RhbmNlIGZyb20gdGhlIGluaXRpYWxPZmZzZXQKKy8vIHRvIHRoZSBjdXJyZW50IG9mZnNldCwg
YW5kIFRPVEFMX0RJU1RBTkNFIGlzIHRoZSBkaXN0YW5jZSBmcm9tIGluaXRpYWxPZmZzZXQgdG8g
dGFyZ2V0T2Zmc2V0LiBUaGUgc25hcHBpbmcgZXF1YXRpb24gaXMgYXMgZm9sbG93czoKKy8vIGRl
bHRhKHQpID0gTUFHTklUVURFICogc2luKFBJICogdCkuIE1BR05JVFVERSBpbmRpY2F0ZXMgdGhl
IHRvcCBzcGVlZCByZWFjaGVkIG5lYXIgdGhlIG1pZGRsZSBvZiB0aGUgYW5pbWF0aW9uICh0ID0g
MC41KSwgYW5kIGlzIGEgbGluZWFyCisvLyByZWxhdGlvbnNoaXAgb2YgdGhlIGRpc3RhbmNlIHRy
YXZlbGVkLCBjbGFtcGVkIGJ5IGFyYml0cmFyeSBtaW4gYW5kIG1heCB2YWx1ZXMuCitmbG9hdCBB
eGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpjb21wdXRlU25hcERlbHRhKCkgY29uc3QKK3sKKyAgICBM
YXlvdXRVbml0IG9mZnNldCA9IG1fY2xpZW50LT5zY3JvbGxPZmZzZXRJbkF4aXMobV9heGlzKTsK
KyAgICBib29sIGNhbkNvbXB1dGVTbmFwID0gIChtX2luaXRpYWxPZmZzZXQgPD0gb2Zmc2V0ICYm
IG9mZnNldCA8IG1fdGFyZ2V0T2Zmc2V0KSB8fCAobV90YXJnZXRPZmZzZXQgPCBvZmZzZXQgJiYg
b2Zmc2V0IDw9IG1faW5pdGlhbE9mZnNldCk7CisgICAgaWYgKG1fY3VyU3RhdGUgIT0gU2Nyb2xs
U25hcFN0YXRlOjpTbmFwcGluZyB8fCAhY2FuQ29tcHV0ZVNuYXApCisgICAgICAgIHJldHVybiAw
OworCisgICAgaW50IHNpZ24gPSBtX2luaXRpYWxPZmZzZXQgPCBtX3RhcmdldE9mZnNldCA/IDEg
OiAtMTsKKyAgICBmbG9hdCBwcm9ncmVzcyA9ICgoZmxvYXQpKG9mZnNldCAtIG1faW5pdGlhbE9m
ZnNldCkpIC8gKG1fdGFyZ2V0T2Zmc2V0IC0gbV9pbml0aWFsT2Zmc2V0KTsKKyAgICAvLyBUaHJl
c2hvbGQgdGhlIGRpc3RhbmNlIGJlZm9yZSBjb21wdXRpbmcgbWFnbml0dWRlLCBzbyBvbmx5IGRp
c3RhbmNlcyB3aXRoaW4gYSBjZXJ0YWluIHJhbmdlIGFyZSBjb25zaWRlcmVkLgorICAgIGZsb2F0
IHRocmVzaG9sZGVkRGlzdGFuY2UgPSBzdGQ6Om1pbihzdGQ6Om1heDxmbG9hdD4oKG1fdGFyZ2V0
T2Zmc2V0IC0gbV9pbml0aWFsT2Zmc2V0KSAqIHNpZ24sIHNuYXBUaHJlc2hvbGRMb3cpLCBzbmFw
VGhyZXNob2xkSGlnaCk7CisgICAgZmxvYXQgbWFnbml0dWRlID0gc25hcE1hZ25pdHVkZU1pbiAr
IChzbmFwTWFnbml0dWRlTWF4IC0gc25hcE1hZ25pdHVkZU1pbikgKiAodGhyZXNob2xkZWREaXN0
YW5jZSAtIHNuYXBUaHJlc2hvbGRMb3cpIC8gKHNuYXBUaHJlc2hvbGRIaWdoIC0gc25hcFRocmVz
aG9sZExvdyk7CisgICAgZmxvYXQgcmF3U25hcEFtb3VudCA9IHN0ZDo6bWF4PGZsb2F0PigxLCBt
YWduaXR1ZGUgKiBzaW4ocGlGbG9hdCAqIHByb2dyZXNzKSk7CisgICAgaWYgKChtX3RhcmdldE9m
ZnNldCA8IG9mZnNldCAmJiBvZmZzZXQgLSByYXdTbmFwQW1vdW50IDwgbV90YXJnZXRPZmZzZXQp
IHx8IChtX3RhcmdldE9mZnNldCA+IG9mZnNldCAmJiBvZmZzZXQgKyByYXdTbmFwQW1vdW50ID4g
bV90YXJnZXRPZmZzZXQpKQorICAgICAgICByZXR1cm4gbV90YXJnZXRPZmZzZXQgLSBvZmZzZXQ7
CisKKyAgICByZXR1cm4gc2lnbiAqIHJhd1NuYXBBbW91bnQ7Cit9CisKKy8vIENvbXB1dGVzIHRo
ZSBhbW91bnQgdG8gc2Nyb2xsIGJ5IHdoZW4gcGVyZm9ybWluZyBhICJnbGlkZSIgb3BlcmF0aW9u
LCBpLmUuIHdoZW4gYSB1c2VyIHJlbGVhc2VzIHRoZSB0cmFja3BhZCB3aXRoIGFuIGluaXRpYWwg
dmVsb2NpdHkuIEhlcmUsCisvLyB3ZSB3YW50IHRoZSBzY3JvbGwgb2Zmc2V0IHRvIGFuaW1hdGUg
ZGlyZWN0bHkgdG8gdGhlIHNuYXAgcG9pbnQuIFRoZSBzbmFwIGRlbHRhIGlzIGEgZnVuY3Rpb24g
b2YgcHJvZ3Jlc3MgdCwgd2hlcmUgdCBpcyBlcXVhbCB0bworLy8gRElTVEFOQ0VfVFJBVkVMRUQg
LyBUT1RBTF9ESVNUQU5DRSwgRElTVEFOQ0VfVFJBVkVMRUQgaXMgdGhlIGRpc3RhbmNlIGZyb20g
dGhlIGluaXRpYWxPZmZzZXQgdG8gdGhlIGN1cnJlbnQgb2Zmc2V0LCBhbmQgVE9UQUxfRElTVEFO
Q0UgaXMKKy8vIHRoZSBkaXN0YW5jZSBmcm9tIGluaXRpYWxPZmZzZXQgdG8gdGFyZ2V0T2Zmc2V0
LgorLy8gVGhlIGdlbmVyYWwgbW9kZWwgb2Ygb3VyIGdsaWRpbmcgZXF1YXRpb24gaXMgZGVsdGEo
dCkgPSBNQUdOSVRVREUgKiAoMSArIGNvcyhQSSAqIHQgKyBQSEFTRV9TSElGVCkpLiBUaGlzIHdh
cyBkZXRlcm1pbmVkIGFmdGVyIGV4YW1pbmluZyB0aGUKKy8vIG1vbWVudHVtIHZlbG9jaXR5IGN1
cnZlIGFzIGEgZnVuY3Rpb24gb2YgcHJvZ3Jlc3MuIFRvIGNvbXB1dGUgTUFHTklUVURFIGFuZCBQ
SEFTRV9TSElGVCwgd2UgdXNlIGluaXRpYWwgdmVsb2NpdHkgVjAgYW5kIHRoZSBmaW5hbCB2ZWxv
Y2l0eSBWRiwKKy8vIGJvdGggYXMgd2hlZWwgZGVsdGFzIChwaXhlbHMgcGVyIHRpbWVzdGVwKS4g
VkYgc2hvdWxkIGJlIGEgc21hbGwgdmFsdWUgKDwgMTApIGNob3NlbiBiYXNlZCBvbiB0aGUgaW5p
dGlhbCB2ZWxvY2l0eSBhbmQgVE9UQUxfRElTVEFOQ0UuCisvLyBXZSBhbHNvIGVuZm9yY2UgdGhl
IGZvbGxvd2luZyBjb25zdHJhaW50cyBmb3IgdGhlIGdsaWRpbmcgZXF1YXRpb246CisvLyAgIDEu
IGRlbHRhKDApID0gVjAsIHNpbmNlIHdlIHdhbnQgdGhlIGluaXRpYWwgdmVsb2NpdHkgb2YgdGhl
IGdsaWRpbmcgYW5pbWF0aW9uIHRvIG1hdGNoIHRoZSB1c2VyJ3Mgc2Nyb2xsIHZlbG9jaXR5LiBU
aGUgZXhjZXB0aW9uIHRvIHRoaXMgaXMKKy8vICAgICAgd2hlbiB0aGUgZ2xpZGUgdmVsb2NpdHkg
aXMgbm90IGVub3VnaCB0byBuYXR1cmFsbHkgcmVhY2ggdGhlIG5leHQgc25hcCBwb2ludCwgYW5k
IHRodXMgcmVxdWlyZXMgYSBib29zdCAoc2VlIGluaXRpYWxpemVHbGlkZVBhcmFtZXRlcnMpCisv
LyAgIDIuIGRlbHRhKDEpID0gVkYsIHNpbmNlIGF0IHQ9MSwgdGhlIGFuaW1hdGlvbiBoYXMgY29t
cGxldGVkIGFuZCB3ZSB3YW50IHRoZSBsYXN0IHdoZWVsIGRlbHRhIHRvIG1hdGNoIHRoZSBmaW5h
bCB2ZWxvY2l0eSBWRi4gTm90ZSB0aGF0IHRoaXMKKy8vICAgICAgZG9lc24ndCBndWFyYW50ZWUg
dGhhdCB0aGUgZmluYWwgdmVsb2NpdHkgd2lsbCBiZSBleGFjdGx5IFZGLiBIb3dldmVyLCBhc3N1
bWluZyB0aGF0IHRoZSBpbml0aWFsIHZlbG9jaXR5IGlzIG11Y2ggbGVzcyB0aGFuIFRPVEFMX0RJ
U1RBTkNFLAorLy8gICAgICB0aGUgbGFzdCB3aGVlbCBkZWx0YSB3aWxsIGJlIHZlcnkgY2xvc2Us
IGlmIG5vdCB0aGUgc2FtZSwgYXMgVkYuCisvLyBMZXQgTUFHTklUVURFID0gKFYwICsgVkYpIC8g
MiBhbmQgUEhBU0VfU0hJRlQgPSBhcmNjb3MoKFYwIC0gVkYpIC8gKFYwICsgVkYpKS4gT2JzZXJ2
ZSB0aGF0IGRlbHRhKDApIGFuZCBkZWx0YSgxKSBldmFsdWF0ZSwgcmVzcGVjdGl2ZWx5LCB0byBW
MAorLy8gYW5kIFZGLiBUaHVzLCB3ZSBjYW4gZXhwcmVzcyBvdXIgZ2xpZGluZyBlcXVhdGlvbiBh
bGwgaW4gdGVybXMgb2YgVjAsIFZGIGFuZCB0LgorZmxvYXQgQXhpc1Njcm9sbFNuYXBBbmltYXRv
cjo6Y29tcHV0ZUdsaWRlRGVsdGEoKSBjb25zdAoreworICAgIExheW91dFVuaXQgb2Zmc2V0ID0g
bV9jbGllbnQtPnNjcm9sbE9mZnNldEluQXhpcyhtX2F4aXMpOworICAgIGJvb2wgY2FuQ29tcHV0
ZUdsaWRlID0gKG1faW5pdGlhbE9mZnNldCA8PSBvZmZzZXQgJiYgb2Zmc2V0IDwgbV90YXJnZXRP
ZmZzZXQpIHx8IChtX3RhcmdldE9mZnNldCA8IG9mZnNldCAmJiBvZmZzZXQgPD0gbV9pbml0aWFs
T2Zmc2V0KTsKKyAgICBpZiAobV9jdXJTdGF0ZSAhPSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcg
fHwgIWNhbkNvbXB1dGVHbGlkZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmbG9hdCBwcm9n
cmVzcyA9ICgoZmxvYXQpKG9mZnNldCAtIG1faW5pdGlhbE9mZnNldCkpIC8gKG1fdGFyZ2V0T2Zm
c2V0IC0gbV9pbml0aWFsT2Zmc2V0KTsKKyAgICBmbG9hdCBzaGlmdCA9IGNlaWwobV9nbGlkZU1h
Z25pdHVkZSAqICgxICsgY29zKHBpRmxvYXQgKiBwcm9ncmVzcyArIG1fZ2xpZGVQaGFzZVNoaWZ0
KSkpOworICAgIHNoaWZ0ID0gbV9pbml0aWFsT2Zmc2V0IDwgbV90YXJnZXRPZmZzZXQgPyBzdGQ6
Om1heDxmbG9hdD4oc2hpZnQsIDEpIDogc3RkOjptaW48ZmxvYXQ+KHNoaWZ0LCAtMSk7CisgICAg
aWYgKChtX2luaXRpYWxPZmZzZXQgPCBtX3RhcmdldE9mZnNldCAmJiBvZmZzZXQgKyBzaGlmdCA+
IG1fdGFyZ2V0T2Zmc2V0KSB8fCAobV9pbml0aWFsT2Zmc2V0ID4gbV90YXJnZXRPZmZzZXQgJiYg
b2Zmc2V0ICsgc2hpZnQgPCBtX3RhcmdldE9mZnNldCkpCisgICAgICAgIHJldHVybiBtX3Rhcmdl
dE9mZnNldCAtIG9mZnNldDsKKworICAgIHJldHVybiBzaGlmdDsKK30KKwordm9pZCBBeGlzU2Ny
b2xsU25hcEFuaW1hdG9yOjppbml0aWFsaXplR2xpZGVQYXJhbWV0ZXJzKGJvb2wgc2hvdWxkSW5j
cmVhc2VJbml0aWFsV2hlZWxEZWx0YSkKK3sKKyAgICAvLyBGSVhNRTogR2xpZGUgYm9vc3QgaXMg
YSBoYWNreSB3YXkgdG8gc3BlZWQgdXAgbmF0dXJhbCBzY3JvbGxpbmcgdmVsb2NpdHkuIFdlIHNo
b3VsZCBmaW5kIGEgYmV0dGVyIHdheSB0byBhY2NvbXBsaXNoIHRoaXMuCisgICAgaWYgKHNob3Vs
ZEluY3JlYXNlSW5pdGlhbFdoZWVsRGVsdGEpCisgICAgICAgIG1fZ2xpZGVJbml0aWFsV2hlZWxE
ZWx0YSAqPSBnbGlkZUJvb3N0TXVsdGlwbGllcjsKKworICAgIC8vIEZJWE1FOiBUaGVyZSBtdXN0
IGJlIGEgYmV0dGVyIHdheSB0byBkZXRlcm1pbmUgYSBnb29kIHRhcmdldCBkZWx0YSB0aGFuIG11
bHRpcGx5aW5nIGJ5IGEgZmFjdG9yIGFuZCBjbGFtcGluZyB0byBtaW4vbWF4IHZhbHVlcy4KKyAg
ICBmbG9hdCB0YXJnZXRGaW5hbFdoZWVsRGVsdGEgPSBpbml0aWFsVG9GaW5hbE1vbWVudHVtRmFj
dG9yICogKG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSA8IDAgPyAtbV9nbGlkZUluaXRpYWxXaGVl
bERlbHRhIDogbV9nbGlkZUluaXRpYWxXaGVlbERlbHRhKTsKKyAgICB0YXJnZXRGaW5hbFdoZWVs
RGVsdGEgPSBzdGQ6Om1pbihzdGQ6Om1heCh0YXJnZXRGaW5hbFdoZWVsRGVsdGEsIG1pblRhcmdl
dFdoZWVsRGVsdGEpLCBtYXhUYXJnZXRXaGVlbERlbHRhKTsKKyAgICBtX2dsaWRlTWFnbml0dWRl
ID0gKG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSArIHRhcmdldEZpbmFsV2hlZWxEZWx0YSkgLyAy
OworICAgIG1fZ2xpZGVQaGFzZVNoaWZ0ID0gYWNvcygobV9nbGlkZUluaXRpYWxXaGVlbERlbHRh
IC0gdGFyZ2V0RmluYWxXaGVlbERlbHRhKSAvIChtX2dsaWRlSW5pdGlhbFdoZWVsRGVsdGEgKyB0
YXJnZXRGaW5hbFdoZWVsRGVsdGEpKTsKK30KKwordm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9y
OjpwdXNoSW5pdGlhbFdoZWVsRGVsdGEoZmxvYXQgd2hlZWxEZWx0YSkKK3sKKyAgICBpZiAobV9u
dW1XaGVlbERlbHRhc1RyYWNrZWQgPCB3aGVlbERlbHRhV2luZG93U2l6ZSkKKyAgICAgICAgbV93
aGVlbERlbHRhV2luZG93W21fbnVtV2hlZWxEZWx0YXNUcmFja2VkKytdID0gd2hlZWxEZWx0YTsK
K30KKworZmxvYXQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6YXZlcmFnZUluaXRpYWxXaGVlbERl
bHRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbnVtV2hlZWxEZWx0YXNUcmFja2VkKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIGZsb2F0IHN1bSA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBtX251bVdoZWVsRGVsdGFzVHJhY2tlZDsgaSsrKQorICAgICAgICBzdW0gKz0gbV93aGVlbERl
bHRhV2luZG93W2ldOworCisgICAgcmV0dXJuIHN1bSAvIG1fbnVtV2hlZWxEZWx0YXNUcmFja2Vk
OworfQorCit2b2lkIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmNsZWFySW5pdGlhbFdoZWVsRGVs
dGFXaW5kb3coKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9udW1XaGVlbERlbHRhc1Ry
YWNrZWQ7IGkrKykKKyAgICAgICAgbV93aGVlbERlbHRhV2luZG93W2ldID0gMDsKKworICAgIG1f
bnVtV2hlZWxEZWx0YXNUcmFja2VkID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gQ1NTX1NDUk9MTF9TTkFQCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236573</attachid>
            <date>2014-08-13 19:03:03 -0700</date>
            <delta_ts>2014-08-14 09:52:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135768-20140813190253.patch</filename>
            <type>text/plain</type>
            <size>30460</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyNTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDUwNDZkMDIzZDBhMzQ2
MzQ2MGJjNTU4NzBlMDljNWI0NDBjOWIxMS4uNDE3NWRiNGYxOTlmODc0YmE2OWMwZTg1ZGJiZmI4
MDdmZmUyOWY4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ3IEBACiAyMDE0LTA4LTEzICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCisgICAgICAgIEltcGxlbWVudCBz
Y3JvbGwgc25hcHBpbmcgYW5pbWF0aW9ucyBvbiBNYWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTc2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGluZyB0aGUgc2Nyb2xsIHNuYXAgYW5p
bWF0aW9ucyByZXF1aXJlZCBmb3Igc25hcHBpbmcgaW4gYm90aCBvdmVyZmxvdyBhbmQgbWFpbmZy
YW1lIGFyZWFzIG9uIE1hYy4gU2luY2Ugd2UgcmVjZWl2ZSBhIHNlcmllcworICAgICAgICBvZiBk
aXNjcmV0ZSB3aGVlbCBldmVudHMsIHdlIG5lZWQgdG8gcHJlZGljdCB0aGUgZGlzdGFuY2Ugd2Ug
bmVlZCB0byB0cmF2ZXJzZSwgY29tcHV0ZSB0aGUgYXBwcm9wcmlhdGUgc25hcCBwb2ludCwgYW5k
IHRoZW4gY29tcHV0ZQorICAgICAgICBhbiBhbmltYXRpb24gY3VydmUgdG8gdGhhdCBsb2NhdGlv
bi4gVGhlIHNuYXAgYW5pbWF0aW9ucyBhcmUgc3BsaXQgaW50byB0d28gdHlwZXM6IHNuYXBwaW5n
LCB3aGljaCBoYW5kbGVzIGxldHRpbmcgZ28gb2YgdGhlIHRyYWNrcGFkCisgICAgICAgIHdpdGgg
emVybyB2ZWxvY2l0eSwgYW5kIGdsaWRpbmcsIHdoaWNoIGhhbmRsZXMgZmxpY2sgZ2VzdHVyZXMu
IEluIGJvdGggY2FzZXMsIHNpbnVzb2lkYWwgY3VydmVzIGFyZSB1c2VkIHRvIGVhc2UgYW5pbWF0
aW9uIHRvIHRoZSB0YXJnZXQKKyAgICAgICAgbG9jYXRpb24uIEluIHRoZSBmb3JtZXIgY2FzZSwg
dGhlIGluaXRpYWwgdmVsb2NpdHkgaXMgbG93LCBhbmQgaW5jcmVhc2VzIHRvIGEgbWF4aW11bSB2
YWx1ZSBkdXJpbmcgdGhlIG1pZGRsZSBvZiB0aGUgYW5pbWF0aW9uIGJlZm9yZQorICAgICAgICBk
ZWNyZWFzaW5nIHRvIDAuIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIGN1cnZlIGlzIGNvbXB1dGVk
IHN1Y2ggdGhhdCB0aGUgaW5pdGlhbCB2ZWxvY2l0eSBtYXRjaGVzIHRoZSB1c2VyJ3Mgc2Nyb2xs
IHZlbG9jaXR5LCBhbmQgdGhlCisgICAgICAgIGZpbmFsIHZlbG9jaXR5IG1hdGNoZXMgYSBsb3dl
ciBmaW5hbCB2ZWxvY2l0eSB0aGF0IGlzIHNvbWV3aGF0IGFyYml0cmFyaWx5IGNvbXB1dGVkLiAo
U2VlIHRoZSBGSVhNRSBpbgorICAgICAgICBBeGlzU2Nyb2xsU25hcE9mZnNldHM6OmluaXRpYWxp
emVHbGlkZVBhcmFtZXRlcnMpLiBIb3cgdGhlIGVxdWF0aW9ucyBhbmQgY29uc3RhbnRzIHdlcmUg
Y2hvc2VuIGlzIGRlc2NyaWJlZCBpbiBncmVhdGVyIGRldGFpbCBpbiB0aGUKKyAgICAgICAgY29t
bWVudHMgYWJvdmUgQXhpc1Njcm9sbFNuYXBPZmZzZXRzOjpjb21wdXRlR2xpZGVEZWx0YSBhbmQg
QXhpc1Njcm9sbFNuYXBPZmZzZXRzOjpjb21wdXRlU25hcERlbHRhLgorCisgICAgICAgIE5vIHRl
c3RzLCBzaW5jZSB0aGVyZSBpcyBubyBvYnNlcnZhYmxlIGNoYW5nZSBpbiBiZWhhdmlvci4gVGVz
dHMgd2lsbCBiZSBpbmNsdWRlZCB3aGVuIGlPUyBhbmQgTWFjIHNjcm9sbGluZyBhcmVhcyBob29r
IGludG8gdGhpcyBjb2RlLgorCisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiAKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwOiAKKyAgICAgICAgKFdlYkNvcmU6OmNs
b3Nlc3RTbmFwT2Zmc2V0KTogQ29tcHV0ZXMgdGhlIGNsb3Nlc3Qgc25hcCBvZmZzZXQgZ2l2ZW4g
dmVsb2NpdHkgYW5kIHByZGljdGVkIGRlc3RpbmF0aW9uLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xs
aW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9BeGlz
U2Nyb2xsU25hcEFuaW1hdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9s
bFNuYXBBbmltYXRvckNsaWVudDo6fkF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OnRvV2hlZWxFdmVudFN0YXR1cyk6IENvbnZlcnRzIGEgcGFpciBvZiBQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZXMgdG8gYSBXaGVlbEV2ZW50U3RhdHVzLgorICAgICAgICAo
V2ViQ29yZTo6cHJvamVjdGVkSW5lcnRpYWxTY3JvbGxEaXN0YW5jZSk6IEF0dGVtcHRzIHRvIHBy
ZWRpY3QgdGhlIGRpc3RhbmNlIGNvdmVyZWQgYnkgdGhlIGluZXJ0aWFsIHNjcm9sbGluZyBwaGFz
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OkF4aXNTY3JvbGxT
bmFwQW5pbWF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6
aGFuZGxlV2hlZWxFdmVudCk6IFVwZGF0ZXMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yLCBnaXZlbiBhIFBsYXRmb3JtV2hlZWxFdmVudAorICAgICAgICAo
V2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50
KTogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgb3ZlcnJpZGUgYSB3aGVlbCBl
dmVudCBnaXZlbiB0aGUgYW5pbWF0b3IncyBpbnRlcm5hbCBzdGF0ZS4KKyAgICAgICAgKFdlYkNv
cmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OnNjcm9sbFNuYXBBbmltYXRpb25VcGRhdGUpOiBV
cGRhdGVzIGEgc2luZ2xlIGxvb3Agb2YgdGhlIHNjcm9sbCBzbmFwcGluZyBhbmltYXRpb24uCisg
ICAgICAgIChXZWJDb3JlOjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpiZWdpblNjcm9sbFNuYXBB
bmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6ZW5k
U2Nyb2xsU25hcEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBeGlzU2Nyb2xsU25hcEFu
aW1hdG9yOjpjb21wdXRlU25hcERlbHRhKTogU2VlIGNvbW1lbnRzIGZvciBtb3JlIGluZm9ybWF0
aW9uLgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6Y29tcHV0ZUds
aWRlRGVsdGEpOiBTZWUgY29tbWVudHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIChX
ZWJDb3JlOjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjppbml0aWFsaXplR2xpZGVQYXJhbWV0ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OnB1c2hJbml0aWFs
V2hlZWxEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjph
dmVyYWdlSW5pdGlhbFdoZWVsRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNu
YXBBbmltYXRvcjo6Y2xlYXJJbml0aWFsV2hlZWxEZWx0YVdpbmRvdyk6CisKKzIwMTQtMDgtMTIg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKICAgICAgICAgQ29tcHV0
ZSBhbmQgc3RvcmUgc25hcCBwb2ludCBwb3NpdGlvbnMKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTI2OAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtl
CmluZGV4IDQxOGMyNTQ0ODQwNWI5NTI5ZGI3NDljM2M1Zjc0MWJmZjk3MDNhMGUuLjUzYWMzYWNk
MGM4MmRjN2FkMjBiZWZjZjFiNDZiYzc5MGEwNTc2YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNt
YWtlCkBAIC0xMzEsNiArMTMxLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vbWFjL1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uTWFjLm1tCiAgICAg
cGxhdGZvcm0vbWFjL1NoYXJlZEJ1ZmZlck1hYy5tbQogICAgIHBsYXRmb3JtL21hYy9TaGFyZWRU
aW1lck1hYy5tbQorICAgIHBsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tCiAg
ICAgcGxhdGZvcm0vbWFjL1NvdW5kTWFjLm1tCiAgICAgcGxhdGZvcm0vbWFjL1N1ZGRlblRlcm1p
bmF0aW9uLm1tCiAgICAgcGxhdGZvcm0vbWFjL1N5c3RlbVNsZWVwTGlzdGVuZXJNYWMubW0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBmMGFhMDQxZGNiMjdiZTNlODJmODhjYjhhZDE2NjM4Zjg1NTM5NWU4Li4zMWFlYWMyYTYxNTdh
NWZkZTAxMzgzNzY1MGU1ODQ0NzA2NDkzMTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MjQ3LDYgKzYyNDcsOCBAQAogCQlG
NDJGRkI0NjE5ODRCNzE2MDBGNjgzN0YgLyogTGVuZ3RoUmVwZWF0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDJGRkI0NTE5ODRCNzE2MDBGNjgzN0Yg
LyogTGVuZ3RoUmVwZWF0LmggKi87IH07CiAJCUY0NUMyMzFEMTk5NUI3M0IwMEE2RTJFMyAvKiBB
eGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjQ1QzIzMUIxOTk1QjczQjAwQTZFMkUzIC8qIEF4aXNTY3JvbGxTbmFw
T2Zmc2V0cy5jcHAgKi87IH07CiAJCUY0NUMyMzFFMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Ny
b2xsU25hcE9mZnNldHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY0NUMyMzFDMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGNDc4
NzU1NDE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3ODc1NTIxOTk4M0FGRjAw
MjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlGNDc4NzU1NTE5OTgzQUZGMDAyNEEyODcgLyog
QXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY0Nzg3NTUzMTk5ODNBRkYwMDI0QTI4NyAvKiBBeGlzU2Nyb2xsU25h
cEFuaW1hdG9yLm1tICovOyB9OwogCQlGNDdBNUUzRTE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVT
Y3JvbGxTbmFwUG9pbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNDdBNUUzQjE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRjQ3
QTVFM0YxOTVCOEU0ODAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDdBNUUzQTE5NUI4QzhB
MDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNwcCAqLzsgfTsKIAkJRjUwNjY0Rjcx
NTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MDY2NEY1MTU3RjUyREMwMEFDMjI2RiAvKiBG
b3JtQ29udHJvbGxlci5jcHAgKi87IH07CkBAIC0xMzc2Niw2ICsxMzc2OCw4IEBACiAJCUY0MkZG
QjQ1MTk4NEI3MTYwMEY2ODM3RiAvKiBMZW5ndGhSZXBlYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTGVuZ3RoUmVwZWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUY0NUMyMzFCMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXhpc1Njcm9sbFNuYXBPZmZz
ZXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjQ1QzIzMUMxOTk1QjczQjAw
QTZFMkUzIC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRjQ3ODc1NTIxOTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXhpc1Njcm9sbFNuYXBBbmlt
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGNDc4NzU1MzE5OTgzQUZGMDAy
NEEyODcgLyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUY0N0E1RTNBMTk1QjhDOEEwMDQ4MzEwMCAvKiBTdHlsZVNjcm9s
bFNuYXBQb2ludHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3R5
bGVTY3JvbGxTbmFwUG9pbnRzLmNwcDsgcGF0aCA9IHN0eWxlL1N0eWxlU2Nyb2xsU25hcFBvaW50
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0N0E1RTNCMTk1QjhDOEEwMDQ4
MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmg7IHBhdGggPSBzdHlsZS9TdHlsZVNjcm9s
bFNuYXBQb2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjUwNjY0RjUxNTdG
NTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZvcm1Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE2NDA4LDYgKzE2NDEyLDggQEAKIAkJNjU4MkExNDgwOTk5OUQ2QzAwQkVFQjZE
IC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJ
RjQ3ODc1NTIxOTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCAqLywK
KwkJCQlGNDc4NzU1MzE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5t
bSAqLywKIAkJCQk2NUE2NDBGMDA1MzNCQjFGMDA4NUU3NzcgLyogQmxvY2tFeGNlcHRpb25zLmgg
Ki8sCiAJCQkJNjVGODA2OTcwNTREOUY4NjAwOEJGNzc2IC8qIEJsb2NrRXhjZXB0aW9ucy5tbSAq
LywKIAkJCQkyOTE5QTFFQTE2QjMzNzg5MDA3ODcyMTMgLyogQ29udGVudEZpbHRlck1hYy5tbSAq
LywKQEAgLTI2MjU5LDYgKzI2MjY1LDcgQEAKIAkJCQlCMjIyN0E5NzBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4QTBFMEEx
MjZFRjFEQjAwOTc4RjdBIC8qIFNWR1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODFE
RDQ5QzEzQkExQTYwMDBEQzc2MjcgLyogU1ZHUHJvcGVydHlJbmZvLmggaW4gSGVhZGVycyAqLywK
KwkJCQlGNDc4NzU1NDE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4QTBFMEIxMjZFRjFEQjAwOTc4RjdBIC8qIFNWR1Byb3Bl
cnR5VGVhck9mZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg4QTBFMEMxMjZFRjFEQjAwOTc4RjdB
IC8qIFNWR1Byb3BlcnR5VHJhaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0E5QTBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
QEAgLTI4MTc0LDYgKzI4MTgxLDcgQEAKIAkJCQlCRTYxMDM5RDE4QTlENjUyMDBERDUwRDcgLyog
SlNEYXRhQ3VlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxNjJBNDU3MTAxMTQ2NDcwMERGRjNF
RCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTQxNjJBNDU0MTAxMTQ1RTMwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUY0Nzg3NTU1MTk5ODNBRkYwMDI0QTI4NyAv
KiBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRBMTVFRDEx
MkIwM0Y5NDAwM0E1ODNBIC8qIEpTRGVsYXlOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMx
RkIxQTY1MTIwQTVEM0YwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2ZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMxRkIxQTZDMTIwQTVENjkwMERDMDJBMCAvKiBKU0RldmljZU1vdGlvbkV2
ZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAKaW5kZXggZjAxMzNmZGQw
NDBmZDIzZmMwODk4N2U5NDY2ZjYxNDJlMDA0MmJiMS4uZjA0YzZmNDkyNjBjYTM1YmJiNDA3MzAx
NzY1ZTc5ZWM3Njk3MjliMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwCkBAIC0xNDUsNiArMTQ1LDM5IEBAIHZv
aWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSYgc2Ny
b2xsYWJsZUFyZWEsIEhUTUxFbGVtCiAgICAgfQogfQogCitMYXlvdXRVbml0IGNsb3Nlc3RTbmFw
T2Zmc2V0KGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHMsIExheW91dFVuaXQg
c2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5KQoreworICAgIEFTU0VSVChzbmFwT2Zm
c2V0cy5zaXplKCkpOworICAgIGlmIChzY3JvbGxEZXN0aW5hdGlvbiA8PSBzbmFwT2Zmc2V0cy5m
aXJzdCgpKQorICAgICAgICByZXR1cm4gc25hcE9mZnNldHMuZmlyc3QoKTsKKworICAgIGlmIChz
Y3JvbGxEZXN0aW5hdGlvbiA+PSBzbmFwT2Zmc2V0cy5sYXN0KCkpCisgICAgICAgIHJldHVybiBz
bmFwT2Zmc2V0cy5sYXN0KCk7CisKKyAgICBzaXplX3QgbG93ZXJJbmRleCA9IDA7CisgICAgc2l6
ZV90IHVwcGVySW5kZXggPSBzbmFwT2Zmc2V0cy5zaXplKCkgLSAxOworICAgIHdoaWxlIChsb3dl
ckluZGV4IDwgdXBwZXJJbmRleCAtIDEpIHsKKyAgICAgICAgc2l6ZV90IG1pZGRsZUluZGV4ID0g
KGxvd2VySW5kZXggKyB1cHBlckluZGV4KSAvIDI7CisgICAgICAgIGlmIChzY3JvbGxEZXN0aW5h
dGlvbiA8IHNuYXBPZmZzZXRzLmF0KG1pZGRsZUluZGV4KSkKKyAgICAgICAgICAgIHVwcGVySW5k
ZXggPSBtaWRkbGVJbmRleDsKKyAgICAgICAgZWxzZSBpZiAoc2Nyb2xsRGVzdGluYXRpb24gPiBz
bmFwT2Zmc2V0cy5hdChtaWRkbGVJbmRleCkpCisgICAgICAgICAgICBsb3dlckluZGV4ID0gbWlk
ZGxlSW5kZXg7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdXBwZXJJbmRleCA9IG1pZGRs
ZUluZGV4OworICAgICAgICAgICAgbG93ZXJJbmRleCA9IG1pZGRsZUluZGV4OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgTGF5b3V0VW5pdCBsb3dlclNuYXBQb3Np
dGlvbiA9IHNuYXBPZmZzZXRzLmF0KGxvd2VySW5kZXgpOworICAgIExheW91dFVuaXQgdXBwZXJT
bmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0cy5hdCh1cHBlckluZGV4KTsKKyAgICAvLyBOb256ZXJv
IHZlbG9jaXR5IGluZGljYXRlcyBhIGZsaWNrIGdlc3R1cmUuIEV2ZW4gaWYgYW5vdGhlciBzbmFw
IHBvaW50IGlzIGNsb3Nlciwgc25hcCB0byB0aGUgb25lIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhl
IGZsaWNrIGdlc3R1cmUuCisgICAgaWYgKHZlbG9jaXR5KQorICAgICAgICByZXR1cm4gdmVsb2Np
dHkgPCAwID8gbG93ZXJTbmFwUG9zaXRpb24gOiB1cHBlclNuYXBQb3NpdGlvbjsKKworICAgIGJv
b2wgaXNDbG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID0gc2Nyb2xsRGVzdGluYXRpb24gLSBsb3dl
clNuYXBQb3NpdGlvbiA8PSB1cHBlclNuYXBQb3NpdGlvbiAtIHNjcm9sbERlc3RpbmF0aW9uOwor
ICAgIHJldHVybiBpc0Nsb3NlclRvTG93ZXJTbmFwUG9zaXRpb24gPyBsb3dlclNuYXBQb3NpdGlv
biA6IHVwcGVyU25hcFBvc2l0aW9uOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBDU1NfU0NST0xMX1NOQVAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgKaW5kZXggZWRkZmM0YTM5ZDI2ODcyMDcw
MDQ4NDkxNzAyOThjNDRhNTVkYTMxYS4uNTZkMjgwNzJmOWRmMmJmZTFhMzA0OTVjMDgyMGYwZjkx
OTM5NzVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Nj
cm9sbFNuYXBPZmZzZXRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhp
c1Njcm9sbFNuYXBPZmZzZXRzLmgKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgUmVuZGVyU3R5bGU7
CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIAogdm9pZCB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9s
bGFibGVBcmVhKFNjcm9sbGFibGVBcmVhJiwgSFRNTEVsZW1lbnQmIHNjcm9sbGluZ0VsZW1lbnQs
IGNvbnN0IFJlbmRlckJveCYgc2Nyb2xsaW5nRWxlbWVudEJveCwgY29uc3QgUmVuZGVyU3R5bGUm
IHNjcm9sbGluZ0VsZW1lbnRTdHlsZSk7CitMYXlvdXRVbml0IGNsb3Nlc3RTbmFwT2Zmc2V0KGNv
bnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHMsIExheW91dFVuaXQgc2Nyb2xsRGVz
dGluYXRpb24sIGZsb2F0IHZlbG9jaXR5KTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmlt
YXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0
b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41ZjJlNWVlYmUxODhhYTdiMDAwYmU5ZGU3OGExM2YwZDhlYzBiMTc5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0F4aXNTY3Jv
bGxTbmFwQW5pbWF0b3IuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
QXhpc1Njcm9sbFNuYXBBbmltYXRvcl9oCisjZGVmaW5lIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3Jf
aAorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKworI2luY2x1ZGUgIkF4aXNTY3JvbGxT
bmFwT2Zmc2V0cy5oIgorI2luY2x1ZGUgIkxheW91dFVuaXQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2VudW0gY2xhc3MgU2Nyb2xsU25hcFN0YXRlIHsKKyAgICBTbmFwcGluZywKKyAg
ICBHbGlkaW5nLAorICAgIElkbGUKK307CisKK2VudW0gY2xhc3MgV2hlZWxFdmVudFN0YXR1cyB7
CisgICAgVXNlclNjcm9sbEJlZ2luLAorICAgIFVzZXJTY3JvbGxpbmcsCisgICAgVXNlclNjcm9s
bEVuZCwKKyAgICBJbmVydGlhbFNjcm9sbEJlZ2luLAorICAgIEluZXJ0aWFsU2Nyb2xsaW5nLAor
ICAgIEluZXJ0aWFsU2Nyb2xsRW5kLAorICAgIFVua25vd24KK307CisKK2NsYXNzIEF4aXNTY3Jv
bGxTbmFwQW5pbWF0b3JDbGllbnQgeworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkF4aXNTY3Jv
bGxTbmFwQW5pbWF0b3JDbGllbnQoKSB7IH0KKworcHVibGljOgorICAgIHZpcnR1YWwgTGF5b3V0
VW5pdCBzY3JvbGxPZmZzZXRJbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGltbWVkaWF0ZVNjcm9sbEluQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZsb2F0IHZlbG9j
aXR5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0U2Nyb2xsU25hcFRpbWVyKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzdG9wU2Nyb2xsU25hcFRpbWVyKCkgPSAwOworfTsKKworY2xhc3Mg
QXhpc1Njcm9sbFNuYXBBbmltYXRvciB7CitwdWJsaWM6CisgICAgQXhpc1Njcm9sbFNuYXBBbmlt
YXRvcihBeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50KiwgVmVjdG9yPExheW91dFVuaXQ+Kiwg
U2Nyb2xsRXZlbnRBeGlzKTsKKyAgICB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50Jik7CisgICAgYm9vbCBzaG91bGRPdmVycmlkZVdoZWVsRXZlbnQoY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50JikgY29uc3Q7CisgICAgdm9pZCBzY3JvbGxTbmFwQW5pbWF0aW9u
VXBkYXRlKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBiZWdpblNjcm9sbFNuYXBBbmltYXRpb24o
U2Nyb2xsU25hcFN0YXRlKTsKKyAgICB2b2lkIGVuZFNjcm9sbFNuYXBBbmltYXRpb24oKTsKKwor
ICAgIGZsb2F0IGNvbXB1dGVTbmFwRGVsdGEoKSBjb25zdDsKKyAgICBmbG9hdCBjb21wdXRlR2xp
ZGVEZWx0YSgpIGNvbnN0OworCisgICAgdm9pZCBpbml0aWFsaXplR2xpZGVQYXJhbWV0ZXJzKGJv
b2wpOworICAgIHZvaWQgcHVzaEluaXRpYWxXaGVlbERlbHRhKGZsb2F0KTsKKyAgICBmbG9hdCBh
dmVyYWdlSW5pdGlhbFdoZWVsRGVsdGEoKSBjb25zdDsKKyAgICB2b2lkIGNsZWFySW5pdGlhbFdo
ZWVsRGVsdGFXaW5kb3coKTsKKworICAgIHN0YXRpYyBjb25zdCBpbnQgd2hlZWxEZWx0YVdpbmRv
d1NpemUgPSAzOworCisgICAgQXhpc1Njcm9sbFNuYXBBbmltYXRvckNsaWVudCogbV9jbGllbnQ7
CisgICAgVmVjdG9yPExheW91dFVuaXQ+KiBtX3NuYXBPZmZzZXRzOworICAgIFNjcm9sbEV2ZW50
QXhpcyBtX2F4aXM7CisgICAgLy8gVXNlZCB0byB0cmFjayBib3RoIHNuYXBwaW5nIGFuZCBnbGlk
aW5nIGJlaGF2aW9ycy4KKyAgICBTY3JvbGxTbmFwU3RhdGUgbV9jdXJTdGF0ZTsKKyAgICBMYXlv
dXRVbml0IG1faW5pdGlhbE9mZnNldDsKKyAgICBMYXlvdXRVbml0IG1fdGFyZ2V0T2Zmc2V0Owor
ICAgIC8vIFVzZWQgdG8gdHJhY2sgZ2xpZGluZyBiZWhhdmlvci4KKyAgICBMYXlvdXRVbml0IG1f
YmVnaW5UcmFja2luZ1doZWVsRGVsdGFPZmZzZXQ7CisgICAgaW50IG1fbnVtV2hlZWxEZWx0YXNU
cmFja2VkOworICAgIGZsb2F0IG1fd2hlZWxEZWx0YVdpbmRvd1t3aGVlbERlbHRhV2luZG93U2l6
ZV07CisgICAgZmxvYXQgbV9nbGlkZU1hZ25pdHVkZTsKKyAgICBmbG9hdCBtX2dsaWRlUGhhc2VT
aGlmdDsKKyAgICBmbG9hdCBtX2dsaWRlSW5pdGlhbFdoZWVsRGVsdGE7CisgICAgYm9vbCBtX3No
b3VsZE92ZXJyaWRlV2hlZWxFdmVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisKKyNlbmRpZiAvLyBBeGlzU2Nyb2xs
U25hcEFuaW1hdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9B
eGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0F4
aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWFiY2M3MjhmMzI0MTUyYWM1YjQx
ODk2NDM0MGYyNGY1YjdiYTFhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tCkBAIC0wLDAgKzEsMjk1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkF4aXNTY3JvbGxTbmFw
QW5pbWF0b3IuaCIKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY29uc3QgZmxvYXQgaW5lcnRpYWxTY3JvbGxQcmVkaWN0aW9uRmFjdG9yID0g
MTYuNjc4OTsKK2NvbnN0IGZsb2F0IHNuYXBNYWduaXR1ZGVNYXggPSAyNTsKK2NvbnN0IGZsb2F0
IHNuYXBNYWduaXR1ZGVNaW4gPSA1OworY29uc3QgZmxvYXQgc25hcFRocmVzaG9sZEhpZ2ggPSAx
MDAwOworY29uc3QgZmxvYXQgc25hcFRocmVzaG9sZExvdyA9IDUwOworY29uc3QgZmxvYXQgZ2xp
ZGVCb29zdE11bHRpcGxpZXIgPSAzLjU7Citjb25zdCBmbG9hdCBtYXhUYXJnZXRXaGVlbERlbHRh
ID0gNzsKK2NvbnN0IGZsb2F0IG1pblRhcmdldFdoZWVsRGVsdGEgPSAzLjU7Citjb25zdCBmbG9h
dCBpbml0aWFsVG9GaW5hbE1vbWVudHVtRmFjdG9yID0gMS4wIC8gNDAuMDsKKworc3RhdGljIGlu
bGluZSBXaGVlbEV2ZW50U3RhdHVzIHRvV2hlZWxFdmVudFN0YXR1cyhQbGF0Zm9ybVdoZWVsRXZl
bnRQaGFzZSBwaGFzZSwgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbW9tZW50dW1QaGFzZSkKK3sK
KyAgICBpZiAocGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VOb25lKSB7CisgICAgICAg
IHN3aXRjaCAobW9tZW50dW1QaGFzZSkgeworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlQmVnYW46CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6SW5lcnRp
YWxTY3JvbGxCZWdpbjsKKworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hh
bmdlZDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpJbmVydGlhbFNjcm9s
bGluZzsKKworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQ6CisgICAg
ICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxFbmQ7CisKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtu
b3duOyAKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9y
bVdoZWVsRXZlbnRQaGFzZU5vbmUpIHsKKyAgICAgICAgc3dpdGNoIChwaGFzZSkgeworICAgICAg
ICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW46CisgICAgICAgICAgICByZXR1cm4g
V2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEJlZ2luOworCisgICAgICAgIGNhc2UgUGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkOgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRT
dGF0dXM6OlVzZXJTY3JvbGxpbmc7CisKKyAgICAgICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQ
aGFzZUVuZGVkOgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3Jv
bGxFbmQ7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50
U3RhdHVzOjpVbmtub3duOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBXaGVlbEV2ZW50
U3RhdHVzOjpVbmtub3duOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IHByb2plY3RlZEluZXJ0
aWFsU2Nyb2xsRGlzdGFuY2UoZmxvYXQgaW5pdGlhbFdoZWVsRGVsdGEpCit7CisgICAgLy8gRklY
TUU6IEV4cGVyaW1lbnRzIHdpdGggaW5lcnRpYWwgc2Nyb2xsaW5nIHNob3cgYSBmYWlybHkgY29u
c2lzdGVudCBsaW5lYXIgcmVsYXRpb25zaGlwIGJldHdlZW4gaW5pdGlhbCB3aGVlbCBkZWx0YSBh
bmQgdG90YWwgZGlzdGFuY2Ugc2Nyb2xsZWQuCisgICAgLy8gSW4gdGhlIGZ1dHVyZSwgd2UnbGwg
d2FudCB0byBmaW5kIGEgbW9yZSBhY2N1cmF0ZSB3YXkgb2YgaW5lcnRpYWwgc2Nyb2xsIHByZWRp
Y3Rpb24uCisgICAgcmV0dXJuIGluZXJ0aWFsU2Nyb2xsUHJlZGljdGlvbkZhY3RvciAqIGluaXRp
YWxXaGVlbERlbHRhOworfQorCitBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpBeGlzU2Nyb2xsU25h
cEFuaW1hdG9yKEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQqIGNsaWVudCwgVmVjdG9yPExh
eW91dFVuaXQ+KiBzbmFwT2Zmc2V0cywgU2Nyb2xsRXZlbnRBeGlzIGF4aXMpCisgICAgOiBtX2Ns
aWVudChjbGllbnQpCisgICAgLCBtX3NuYXBPZmZzZXRzKHNuYXBPZmZzZXRzKQorICAgICwgbV9h
eGlzKGF4aXMpCisgICAgLCBtX2N1clN0YXRlKFNjcm9sbFNuYXBTdGF0ZTo6SWRsZSkKKyAgICAs
IG1faW5pdGlhbE9mZnNldCgwKQorICAgICwgbV90YXJnZXRPZmZzZXQoMCkKKyAgICAsIG1fYmVn
aW5UcmFja2luZ1doZWVsRGVsdGFPZmZzZXQoMCkKKyAgICAsIG1fbnVtV2hlZWxEZWx0YXNUcmFj
a2VkKDApCisgICAgLCBtX2dsaWRlTWFnbml0dWRlKDApCisgICAgLCBtX2dsaWRlUGhhc2VTaGlm
dCgwKQorICAgICwgbV9nbGlkZUluaXRpYWxXaGVlbERlbHRhKDApCisgICAgLCBtX3Nob3VsZE92
ZXJyaWRlV2hlZWxFdmVudChmYWxzZSkKK3sKK30KKwordm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1h
dG9yOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQpCit7
CisgICAgZmxvYXQgc2Nyb2xsRGVsdGEgPSBtX2F4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jp
em9udGFsID8gLWV2ZW50LmRlbHRhWCgpIDogLWV2ZW50LmRlbHRhWSgpOworICAgIFdoZWVsRXZl
bnRTdGF0dXMgd2hlZWxTdGF0dXMgPSB0b1doZWVsRXZlbnRTdGF0dXMoZXZlbnQucGhhc2UoKSwg
ZXZlbnQubW9tZW50dW1QaGFzZSgpKTsKKyAgICBpZiAoKHdoZWVsU3RhdHVzID09IFdoZWVsRXZl
bnRTdGF0dXM6OlVzZXJTY3JvbGxpbmcgfHwgd2hlZWxTdGF0dXMgPT0gV2hlZWxFdmVudFN0YXR1
czo6SW5lcnRpYWxTY3JvbGxpbmcpICYmICFzY3JvbGxEZWx0YSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc3dpdGNoICh3aGVlbFN0YXR1cykgeworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6
VXNlclNjcm9sbEJlZ2luOgorICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbGlu
ZzoKKyAgICAgICAgZW5kU2Nyb2xsU25hcEFuaW1hdGlvbigpOworICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEVuZDoKKyAgICAgICAgYmVnaW5T
Y3JvbGxTbmFwQW5pbWF0aW9uKFNjcm9sbFNuYXBTdGF0ZTo6U25hcHBpbmcpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxCZWdpbjoK
KyAgICAgICAgLy8gQmVnaW4gdHJhY2tpbmcgd2hlZWwgZGVsdGFzIGZvciBnbGlkZSBwcmVkaWN0
aW9uLgorICAgICAgICBlbmRTY3JvbGxTbmFwQW5pbWF0aW9uKCk7CisgICAgICAgIHB1c2hJbml0
aWFsV2hlZWxEZWx0YShzY3JvbGxEZWx0YSk7CisgICAgICAgIG1fYmVnaW5UcmFja2luZ1doZWVs
RGVsdGFPZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0SW5BeGlzKG1fYXhpcyk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBXaGVlbEV2ZW50U3RhdHVzOjpJbmVydGlhbFNjcm9sbGlu
ZzoKKyAgICAgICAgaWYgKG1fY3VyU3RhdGUgIT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nKSB7
CisgICAgICAgICAgICBpZiAobV9udW1XaGVlbERlbHRhc1RyYWNrZWQgPCB3aGVlbERlbHRhV2lu
ZG93U2l6ZSkKKyAgICAgICAgICAgICAgICBwdXNoSW5pdGlhbFdoZWVsRGVsdGEoc2Nyb2xsRGVs
dGEpOworCisgICAgICAgICAgICBpZiAobV9udW1XaGVlbERlbHRhc1RyYWNrZWQgPT0gd2hlZWxE
ZWx0YVdpbmRvd1NpemUpCisgICAgICAgICAgICAgICAgYmVnaW5TY3JvbGxTbmFwQW5pbWF0aW9u
KFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsRW5kOgorICAgICAgICBj
bGVhckluaXRpYWxXaGVlbERlbHRhV2luZG93KCk7CisgICAgICAgIG1fc2hvdWxkT3ZlcnJpZGVX
aGVlbEV2ZW50ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXaGVlbEV2ZW50
U3RhdHVzOjpVbmtub3duOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCitib29sIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OnNob3VsZE92
ZXJyaWRlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KSBjb25zdAor
eworICAgIHJldHVybiBtX3Nob3VsZE92ZXJyaWRlV2hlZWxFdmVudCAmJiB0b1doZWVsRXZlbnRT
dGF0dXMoZXZlbnQucGhhc2UoKSwgZXZlbnQubW9tZW50dW1QaGFzZSgpKSA9PSBXaGVlbEV2ZW50
U3RhdHVzOjpJbmVydGlhbFNjcm9sbGluZzsKK30KKwordm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1h
dG9yOjpzY3JvbGxTbmFwQW5pbWF0aW9uVXBkYXRlKCkKK3sKKyAgICBBU1NFUlQobV9jdXJTdGF0
ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgfHwgbV9jdXJTdGF0ZSA9PSBTY3JvbGxTbmFw
U3RhdGU6OlNuYXBwaW5nKTsKKyAgICBmbG9hdCBkZWx0YSA9IG1fY3VyU3RhdGUgPT0gU2Nyb2xs
U25hcFN0YXRlOjpTbmFwcGluZyA/IGNvbXB1dGVTbmFwRGVsdGEoKSA6IGNvbXB1dGVHbGlkZURl
bHRhKCk7CisgICAgaWYgKGRlbHRhKQorICAgICAgICBtX2NsaWVudC0+aW1tZWRpYXRlU2Nyb2xs
SW5BeGlzKG1fYXhpcywgZGVsdGEpOworICAgIGVsc2UgeworICAgICAgICBtX2N1clN0YXRlID0g
U2Nyb2xsU25hcFN0YXRlOjpJZGxlOworICAgICAgICBtX2NsaWVudC0+c3RvcFNjcm9sbFNuYXBU
aW1lcigpOworICAgIH0KK30KKwordm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpiZWdpblNj
cm9sbFNuYXBBbmltYXRpb24oU2Nyb2xsU25hcFN0YXRlIG5ld1N0YXRlKQoreworICAgIEFTU0VS
VChuZXdTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgfHwgbmV3U3RhdGUgPT0gU2Ny
b2xsU25hcFN0YXRlOjpTbmFwcGluZyk7CisgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVu
dC0+c2Nyb2xsT2Zmc2V0SW5BeGlzKG1fYXhpcyk7CisgICAgZmxvYXQgaW5pdGlhbFdoZWVsRGVs
dGEgPSBhdmVyYWdlSW5pdGlhbFdoZWVsRGVsdGEoKTsKKyAgICBMYXlvdXRVbml0IHByb2plY3Rl
ZFNjcm9sbERlc3RpbmF0aW9uID0gbmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5n
ID8gbV9iZWdpblRyYWNraW5nV2hlZWxEZWx0YU9mZnNldCArIExheW91dFVuaXQocHJvamVjdGVk
SW5lcnRpYWxTY3JvbGxEaXN0YW5jZShpbml0aWFsV2hlZWxEZWx0YSkpIDogb2Zmc2V0OworICAg
IHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uID0gc3RkOjptaW4oc3RkOjptYXgocHJvamVjdGVk
U2Nyb2xsRGVzdGluYXRpb24sIG1fc25hcE9mZnNldHMtPmZpcnN0KCkpLCBtX3NuYXBPZmZzZXRz
LT5sYXN0KCkpOworICAgIG1faW5pdGlhbE9mZnNldCA9IG9mZnNldDsKKyAgICBtX3RhcmdldE9m
ZnNldCA9IGNsb3Nlc3RTbmFwT2Zmc2V0KCptX3NuYXBPZmZzZXRzLCBwcm9qZWN0ZWRTY3JvbGxE
ZXN0aW5hdGlvbiwgaW5pdGlhbFdoZWVsRGVsdGEpOworICAgIGlmIChtX2luaXRpYWxPZmZzZXQg
PT0gbV90YXJnZXRPZmZzZXQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3VyU3RhdGUgPSBu
ZXdTdGF0ZTsKKyAgICBpZiAobmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nKSB7
CisgICAgICAgIG1fc2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50ID0gdHJ1ZTsKKyAgICAgICAgbV9n
bGlkZUluaXRpYWxXaGVlbERlbHRhID0gaW5pdGlhbFdoZWVsRGVsdGE7CisgICAgICAgIGJvb2wg
Z2xpZGVSZXF1aXJlc0Jvb3N0OworICAgICAgICBpZiAoaW5pdGlhbFdoZWVsRGVsdGEgPiAwKQor
ICAgICAgICAgICAgZ2xpZGVSZXF1aXJlc0Jvb3N0ID0gcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRp
b24gLSBvZmZzZXQgPCBtX3RhcmdldE9mZnNldCAtIHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9u
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBnbGlkZVJlcXVpcmVzQm9vc3QgPSBvZmZzZXQg
LSBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiA8IHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9u
IC0gbV90YXJnZXRPZmZzZXQ7CisKKyAgICAgICAgaW5pdGlhbGl6ZUdsaWRlUGFyYW1ldGVycyhn
bGlkZVJlcXVpcmVzQm9vc3QpOworICAgIH0KKyAgICBtX2NsaWVudC0+c3RhcnRTY3JvbGxTbmFw
VGltZXIoKTsKK30KKwordm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjplbmRTY3JvbGxTbmFw
QW5pbWF0aW9uKCkKK3sKKyAgICBpZiAobV9jdXJTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6Okds
aWRpbmcpCisgICAgICAgIGNsZWFySW5pdGlhbFdoZWVsRGVsdGFXaW5kb3coKTsKKworICAgIG1f
Y3VyU3RhdGUgPSBTY3JvbGxTbmFwU3RhdGU6OklkbGU7CisgICAgbV9jbGllbnQtPnN0b3BTY3Jv
bGxTbmFwVGltZXIoKTsKK30KKworLy8gQ29tcHV0ZXMgdGhlIGFtb3VudCB0byBzY3JvbGwgYnkg
d2hlbiBwZXJmb3JtaW5nIGEgInNuYXAiIG9wZXJhdGlvbiwgaS5lLiB3aGVuIGEgdXNlciByZWxl
YXNlcyB0aGUgdHJhY2twYWQgd2l0aG91dCBmbGlja2luZy4gVGhlIHNuYXAgZGVsdGEKKy8vIGlz
IGEgZnVuY3Rpb24gb2YgcHJvZ3Jlc3MgdCwgd2hlcmUgdCBpcyBlcXVhbCB0byBESVNUQU5DRV9U
UkFWRUxFRCAvIFRPVEFMX0RJU1RBTkNFLCBESVNUQU5DRV9UUkFWRUxFRCBpcyB0aGUgZGlzdGFu
Y2UgZnJvbSB0aGUgaW5pdGlhbE9mZnNldAorLy8gdG8gdGhlIGN1cnJlbnQgb2Zmc2V0LCBhbmQg
VE9UQUxfRElTVEFOQ0UgaXMgdGhlIGRpc3RhbmNlIGZyb20gaW5pdGlhbE9mZnNldCB0byB0YXJn
ZXRPZmZzZXQuIFRoZSBzbmFwcGluZyBlcXVhdGlvbiBpcyBhcyBmb2xsb3dzOgorLy8gZGVsdGEo
dCkgPSBNQUdOSVRVREUgKiBzaW4oUEkgKiB0KS4gTUFHTklUVURFIGluZGljYXRlcyB0aGUgdG9w
IHNwZWVkIHJlYWNoZWQgbmVhciB0aGUgbWlkZGxlIG9mIHRoZSBhbmltYXRpb24gKHQgPSAwLjUp
LCBhbmQgaXMgYSBsaW5lYXIKKy8vIHJlbGF0aW9uc2hpcCBvZiB0aGUgZGlzdGFuY2UgdHJhdmVs
ZWQsIGNsYW1wZWQgYnkgYXJiaXRyYXJ5IG1pbiBhbmQgbWF4IHZhbHVlcy4KK2Zsb2F0IEF4aXNT
Y3JvbGxTbmFwQW5pbWF0b3I6OmNvbXB1dGVTbmFwRGVsdGEoKSBjb25zdAoreworICAgIExheW91
dFVuaXQgb2Zmc2V0ID0gbV9jbGllbnQtPnNjcm9sbE9mZnNldEluQXhpcyhtX2F4aXMpOworICAg
IGJvb2wgY2FuQ29tcHV0ZVNuYXAgPSAgKG1faW5pdGlhbE9mZnNldCA8PSBvZmZzZXQgJiYgb2Zm
c2V0IDwgbV90YXJnZXRPZmZzZXQpIHx8IChtX3RhcmdldE9mZnNldCA8IG9mZnNldCAmJiBvZmZz
ZXQgPD0gbV9pbml0aWFsT2Zmc2V0KTsKKyAgICBpZiAobV9jdXJTdGF0ZSAhPSBTY3JvbGxTbmFw
U3RhdGU6OlNuYXBwaW5nIHx8ICFjYW5Db21wdXRlU25hcCkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBpbnQgc2lnbiA9IG1faW5pdGlhbE9mZnNldCA8IG1fdGFyZ2V0T2Zmc2V0ID8gMSA6IC0x
OworICAgIGZsb2F0IHByb2dyZXNzID0gKChmbG9hdCkob2Zmc2V0IC0gbV9pbml0aWFsT2Zmc2V0
KSkgLyAobV90YXJnZXRPZmZzZXQgLSBtX2luaXRpYWxPZmZzZXQpOworICAgIC8vIFRocmVzaG9s
ZCB0aGUgZGlzdGFuY2UgYmVmb3JlIGNvbXB1dGluZyBtYWduaXR1ZGUsIHNvIG9ubHkgZGlzdGFu
Y2VzIHdpdGhpbiBhIGNlcnRhaW4gcmFuZ2UgYXJlIGNvbnNpZGVyZWQuCisgICAgZmxvYXQgdGhy
ZXNob2xkZWREaXN0YW5jZSA9IHN0ZDo6bWluKHN0ZDo6bWF4PGZsb2F0PigobV90YXJnZXRPZmZz
ZXQgLSBtX2luaXRpYWxPZmZzZXQpICogc2lnbiwgc25hcFRocmVzaG9sZExvdyksIHNuYXBUaHJl
c2hvbGRIaWdoKTsKKyAgICBmbG9hdCBtYWduaXR1ZGUgPSBzbmFwTWFnbml0dWRlTWluICsgKHNu
YXBNYWduaXR1ZGVNYXggLSBzbmFwTWFnbml0dWRlTWluKSAqICh0aHJlc2hvbGRlZERpc3RhbmNl
IC0gc25hcFRocmVzaG9sZExvdykgLyAoc25hcFRocmVzaG9sZEhpZ2ggLSBzbmFwVGhyZXNob2xk
TG93KTsKKyAgICBmbG9hdCByYXdTbmFwQW1vdW50ID0gc3RkOjptYXg8ZmxvYXQ+KDEsIG1hZ25p
dHVkZSAqIHNpbihwaUZsb2F0ICogcHJvZ3Jlc3MpKTsKKyAgICBpZiAoKG1fdGFyZ2V0T2Zmc2V0
IDwgb2Zmc2V0ICYmIG9mZnNldCAtIHJhd1NuYXBBbW91bnQgPCBtX3RhcmdldE9mZnNldCkgfHwg
KG1fdGFyZ2V0T2Zmc2V0ID4gb2Zmc2V0ICYmIG9mZnNldCArIHJhd1NuYXBBbW91bnQgPiBtX3Rh
cmdldE9mZnNldCkpCisgICAgICAgIHJldHVybiBtX3RhcmdldE9mZnNldCAtIG9mZnNldDsKKwor
ICAgIHJldHVybiBzaWduICogcmF3U25hcEFtb3VudDsKK30KKworLy8gQ29tcHV0ZXMgdGhlIGFt
b3VudCB0byBzY3JvbGwgYnkgd2hlbiBwZXJmb3JtaW5nIGEgImdsaWRlIiBvcGVyYXRpb24sIGku
ZS4gd2hlbiBhIHVzZXIgcmVsZWFzZXMgdGhlIHRyYWNrcGFkIHdpdGggYW4gaW5pdGlhbCB2ZWxv
Y2l0eS4gSGVyZSwKKy8vIHdlIHdhbnQgdGhlIHNjcm9sbCBvZmZzZXQgdG8gYW5pbWF0ZSBkaXJl
Y3RseSB0byB0aGUgc25hcCBwb2ludC4gVGhlIHNuYXAgZGVsdGEgaXMgYSBmdW5jdGlvbiBvZiBw
cm9ncmVzcyB0LCB3aGVyZSB0IGlzIGVxdWFsIHRvCisvLyBESVNUQU5DRV9UUkFWRUxFRCAvIFRP
VEFMX0RJU1RBTkNFLCBESVNUQU5DRV9UUkFWRUxFRCBpcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUg
aW5pdGlhbE9mZnNldCB0byB0aGUgY3VycmVudCBvZmZzZXQsIGFuZCBUT1RBTF9ESVNUQU5DRSBp
cworLy8gdGhlIGRpc3RhbmNlIGZyb20gaW5pdGlhbE9mZnNldCB0byB0YXJnZXRPZmZzZXQuCisv
LyBUaGUgZ2VuZXJhbCBtb2RlbCBvZiBvdXIgZ2xpZGluZyBlcXVhdGlvbiBpcyBkZWx0YSh0KSA9
IE1BR05JVFVERSAqICgxICsgY29zKFBJICogdCArIFBIQVNFX1NISUZUKSkuIFRoaXMgd2FzIGRl
dGVybWluZWQgYWZ0ZXIgZXhhbWluaW5nIHRoZQorLy8gbW9tZW50dW0gdmVsb2NpdHkgY3VydmUg
YXMgYSBmdW5jdGlvbiBvZiBwcm9ncmVzcy4gVG8gY29tcHV0ZSBNQUdOSVRVREUgYW5kIFBIQVNF
X1NISUZULCB3ZSB1c2UgaW5pdGlhbCB2ZWxvY2l0eSBWMCBhbmQgdGhlIGZpbmFsIHZlbG9jaXR5
IFZGLAorLy8gYm90aCBhcyB3aGVlbCBkZWx0YXMgKHBpeGVscyBwZXIgdGltZXN0ZXApLiBWRiBz
aG91bGQgYmUgYSBzbWFsbCB2YWx1ZSAoPCAxMCkgY2hvc2VuIGJhc2VkIG9uIHRoZSBpbml0aWFs
IHZlbG9jaXR5IGFuZCBUT1RBTF9ESVNUQU5DRS4KKy8vIFdlIGFsc28gZW5mb3JjZSB0aGUgZm9s
bG93aW5nIGNvbnN0cmFpbnRzIGZvciB0aGUgZ2xpZGluZyBlcXVhdGlvbjoKKy8vICAgMS4gZGVs
dGEoMCkgPSBWMCwgc2luY2Ugd2Ugd2FudCB0aGUgaW5pdGlhbCB2ZWxvY2l0eSBvZiB0aGUgZ2xp
ZGluZyBhbmltYXRpb24gdG8gbWF0Y2ggdGhlIHVzZXIncyBzY3JvbGwgdmVsb2NpdHkuIFRoZSBl
eGNlcHRpb24gdG8gdGhpcyBpcworLy8gICAgICB3aGVuIHRoZSBnbGlkZSB2ZWxvY2l0eSBpcyBu
b3QgZW5vdWdoIHRvIG5hdHVyYWxseSByZWFjaCB0aGUgbmV4dCBzbmFwIHBvaW50LCBhbmQgdGh1
cyByZXF1aXJlcyBhIGJvb3N0IChzZWUgaW5pdGlhbGl6ZUdsaWRlUGFyYW1ldGVycykKKy8vICAg
Mi4gZGVsdGEoMSkgPSBWRiwgc2luY2UgYXQgdD0xLCB0aGUgYW5pbWF0aW9uIGhhcyBjb21wbGV0
ZWQgYW5kIHdlIHdhbnQgdGhlIGxhc3Qgd2hlZWwgZGVsdGEgdG8gbWF0Y2ggdGhlIGZpbmFsIHZl
bG9jaXR5IFZGLiBOb3RlIHRoYXQgdGhpcworLy8gICAgICBkb2Vzbid0IGd1YXJhbnRlZSB0aGF0
IHRoZSBmaW5hbCB2ZWxvY2l0eSB3aWxsIGJlIGV4YWN0bHkgVkYuIEhvd2V2ZXIsIGFzc3VtaW5n
IHRoYXQgdGhlIGluaXRpYWwgdmVsb2NpdHkgaXMgbXVjaCBsZXNzIHRoYW4gVE9UQUxfRElTVEFO
Q0UsCisvLyAgICAgIHRoZSBsYXN0IHdoZWVsIGRlbHRhIHdpbGwgYmUgdmVyeSBjbG9zZSwgaWYg
bm90IHRoZSBzYW1lLCBhcyBWRi4KKy8vIEZvciBNQUdOSVRVREUgPSAoVjAgKyBWRikgLyAyIGFu
ZCBQSEFTRV9TSElGVCA9IGFyY2NvcygoVjAgLSBWRikgLyAoVjAgKyBWRikpLCBvYnNlcnZlIHRo
YXQgZGVsdGEoMCkgYW5kIGRlbHRhKDEpIGV2YWx1YXRlIHJlc3BlY3RpdmVseSB0byBWMAorLy8g
YW5kIFZGLiBUaHVzLCB3ZSBjYW4gZXhwcmVzcyBvdXIgZ2xpZGluZyBlcXVhdGlvbiBhbGwgaW4g
dGVybXMgb2YgVjAsIFZGIGFuZCB0LgorZmxvYXQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6Y29t
cHV0ZUdsaWRlRGVsdGEoKSBjb25zdAoreworICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbV9jbGll
bnQtPnNjcm9sbE9mZnNldEluQXhpcyhtX2F4aXMpOworICAgIGJvb2wgY2FuQ29tcHV0ZUdsaWRl
ID0gKG1faW5pdGlhbE9mZnNldCA8PSBvZmZzZXQgJiYgb2Zmc2V0IDwgbV90YXJnZXRPZmZzZXQp
IHx8IChtX3RhcmdldE9mZnNldCA8IG9mZnNldCAmJiBvZmZzZXQgPD0gbV9pbml0aWFsT2Zmc2V0
KTsKKyAgICBpZiAobV9jdXJTdGF0ZSAhPSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgfHwgIWNh
bkNvbXB1dGVHbGlkZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmbG9hdCBwcm9ncmVzcyA9
ICgoZmxvYXQpKG9mZnNldCAtIG1faW5pdGlhbE9mZnNldCkpIC8gKG1fdGFyZ2V0T2Zmc2V0IC0g
bV9pbml0aWFsT2Zmc2V0KTsKKyAgICBmbG9hdCBzaGlmdCA9IGNlaWwobV9nbGlkZU1hZ25pdHVk
ZSAqICgxICsgY29zKHBpRmxvYXQgKiBwcm9ncmVzcyArIG1fZ2xpZGVQaGFzZVNoaWZ0KSkpOwor
ICAgIHNoaWZ0ID0gbV9pbml0aWFsT2Zmc2V0IDwgbV90YXJnZXRPZmZzZXQgPyBzdGQ6Om1heDxm
bG9hdD4oc2hpZnQsIDEpIDogc3RkOjptaW48ZmxvYXQ+KHNoaWZ0LCAtMSk7CisgICAgaWYgKCht
X2luaXRpYWxPZmZzZXQgPCBtX3RhcmdldE9mZnNldCAmJiBvZmZzZXQgKyBzaGlmdCA+IG1fdGFy
Z2V0T2Zmc2V0KSB8fCAobV9pbml0aWFsT2Zmc2V0ID4gbV90YXJnZXRPZmZzZXQgJiYgb2Zmc2V0
ICsgc2hpZnQgPCBtX3RhcmdldE9mZnNldCkpCisgICAgICAgIHJldHVybiBtX3RhcmdldE9mZnNl
dCAtIG9mZnNldDsKKworICAgIHJldHVybiBzaGlmdDsKK30KKwordm9pZCBBeGlzU2Nyb2xsU25h
cEFuaW1hdG9yOjppbml0aWFsaXplR2xpZGVQYXJhbWV0ZXJzKGJvb2wgc2hvdWxkSW5jcmVhc2VJ
bml0aWFsV2hlZWxEZWx0YSkKK3sKKyAgICAvLyBGSVhNRTogR2xpZGUgYm9vc3QgaXMgYSBoYWNr
eSB3YXkgdG8gc3BlZWQgdXAgbmF0dXJhbCBzY3JvbGxpbmcgdmVsb2NpdHkuIFdlIHNob3VsZCBm
aW5kIGEgYmV0dGVyIHdheSB0byBhY2NvbXBsaXNoIHRoaXMuCisgICAgaWYgKHNob3VsZEluY3Jl
YXNlSW5pdGlhbFdoZWVsRGVsdGEpCisgICAgICAgIG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSAq
PSBnbGlkZUJvb3N0TXVsdGlwbGllcjsKKworICAgIC8vIEZJWE1FOiBUaGVyZSBtdXN0IGJlIGEg
YmV0dGVyIHdheSB0byBkZXRlcm1pbmUgYSBnb29kIHRhcmdldCBkZWx0YSB0aGFuIG11bHRpcGx5
aW5nIGJ5IGEgZmFjdG9yIGFuZCBjbGFtcGluZyB0byBtaW4vbWF4IHZhbHVlcy4KKyAgICBmbG9h
dCB0YXJnZXRGaW5hbFdoZWVsRGVsdGEgPSBpbml0aWFsVG9GaW5hbE1vbWVudHVtRmFjdG9yICog
KG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSA8IDAgPyAtbV9nbGlkZUluaXRpYWxXaGVlbERlbHRh
IDogbV9nbGlkZUluaXRpYWxXaGVlbERlbHRhKTsKKyAgICB0YXJnZXRGaW5hbFdoZWVsRGVsdGEg
PSBzdGQ6Om1pbihzdGQ6Om1heCh0YXJnZXRGaW5hbFdoZWVsRGVsdGEsIG1pblRhcmdldFdoZWVs
RGVsdGEpLCBtYXhUYXJnZXRXaGVlbERlbHRhKTsKKyAgICBtX2dsaWRlTWFnbml0dWRlID0gKG1f
Z2xpZGVJbml0aWFsV2hlZWxEZWx0YSArIHRhcmdldEZpbmFsV2hlZWxEZWx0YSkgLyAyOworICAg
IG1fZ2xpZGVQaGFzZVNoaWZ0ID0gYWNvcygobV9nbGlkZUluaXRpYWxXaGVlbERlbHRhIC0gdGFy
Z2V0RmluYWxXaGVlbERlbHRhKSAvIChtX2dsaWRlSW5pdGlhbFdoZWVsRGVsdGEgKyB0YXJnZXRG
aW5hbFdoZWVsRGVsdGEpKTsKK30KKwordm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpwdXNo
SW5pdGlhbFdoZWVsRGVsdGEoZmxvYXQgd2hlZWxEZWx0YSkKK3sKKyAgICBpZiAobV9udW1XaGVl
bERlbHRhc1RyYWNrZWQgPCB3aGVlbERlbHRhV2luZG93U2l6ZSkKKyAgICAgICAgbV93aGVlbERl
bHRhV2luZG93W21fbnVtV2hlZWxEZWx0YXNUcmFja2VkKytdID0gd2hlZWxEZWx0YTsKK30KKwor
ZmxvYXQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6YXZlcmFnZUluaXRpYWxXaGVlbERlbHRhKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fbnVtV2hlZWxEZWx0YXNUcmFja2VkKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGZsb2F0IHN1bSA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX251
bVdoZWVsRGVsdGFzVHJhY2tlZDsgaSsrKQorICAgICAgICBzdW0gKz0gbV93aGVlbERlbHRhV2lu
ZG93W2ldOworCisgICAgcmV0dXJuIHN1bSAvIG1fbnVtV2hlZWxEZWx0YXNUcmFja2VkOworfQor
Cit2b2lkIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmNsZWFySW5pdGlhbFdoZWVsRGVsdGFXaW5k
b3coKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9udW1XaGVlbERlbHRhc1RyYWNrZWQ7
IGkrKykKKyAgICAgICAgbV93aGVlbERlbHRhV2luZG93W2ldID0gMDsKKworICAgIG1fbnVtV2hl
ZWxEZWx0YXNUcmFja2VkID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gQ1NTX1NDUk9MTF9TTkFQCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236596</attachid>
            <date>2014-08-14 09:52:20 -0700</date>
            <delta_ts>2014-08-14 09:56:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135768-20140814095210.patch</filename>
            <type>text/plain</type>
            <size>30021</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyNTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmJhYWNhMzczMjY3Njgy
OWQyNjA4ZmMxYzVjNTMxMmM5M2YzOGEwMi4uOTA1MTE5NTkzNWFlNTQ0MDIyM2UxMTVlYjNiNjFh
YTc1MWJmMTE5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTA4LTE0ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBz
Y3JvbGwgc25hcHBpbmcgYW5pbWF0aW9ucyBvbiBNYWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTc2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGluZyB0aGUgc2Nyb2xsIHNuYXAgYW5p
bWF0aW9ucyByZXF1aXJlZCBmb3Igc25hcHBpbmcgaW4gYm90aCBvdmVyZmxvdyBhbmQgbWFpbmZy
YW1lIGFyZWFzIG9uIE1hYy4gU2luY2Ugd2UgcmVjZWl2ZSBhIHNlcmllcworICAgICAgICBvZiBk
aXNjcmV0ZSB3aGVlbCBldmVudHMsIHdlIG5lZWQgdG8gcHJlZGljdCB0aGUgZGlzdGFuY2Ugd2Ug
bmVlZCB0byB0cmF2ZXJzZSwgY29tcHV0ZSB0aGUgYXBwcm9wcmlhdGUgc25hcCBwb2ludCwgYW5k
IHRoZW4gY29tcHV0ZQorICAgICAgICBhbiBhbmltYXRpb24gY3VydmUgdG8gdGhhdCBsb2NhdGlv
bi4gVGhlIHNuYXAgYW5pbWF0aW9ucyBhcmUgc3BsaXQgaW50byB0d28gdHlwZXM6IHNuYXBwaW5n
LCB3aGljaCBoYW5kbGVzIGxldHRpbmcgZ28gb2YgdGhlIHRyYWNrcGFkCisgICAgICAgIHdpdGgg
emVybyB2ZWxvY2l0eSwgYW5kIGdsaWRpbmcsIHdoaWNoIGhhbmRsZXMgZmxpY2sgZ2VzdHVyZXMu
IEluIGJvdGggY2FzZXMsIHNpbnVzb2lkYWwgY3VydmVzIGFyZSB1c2VkIHRvIGVhc2UgYW5pbWF0
aW9uIHRvIHRoZSB0YXJnZXQKKyAgICAgICAgbG9jYXRpb24uIEluIHRoZSBmb3JtZXIgY2FzZSwg
dGhlIGluaXRpYWwgdmVsb2NpdHkgaXMgbG93LCBhbmQgaW5jcmVhc2VzIHRvIGEgbWF4aW11bSB2
YWx1ZSBkdXJpbmcgdGhlIG1pZGRsZSBvZiB0aGUgYW5pbWF0aW9uIGJlZm9yZQorICAgICAgICBk
ZWNyZWFzaW5nIHRvIDAuIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIGN1cnZlIGlzIGNvbXB1dGVk
IHN1Y2ggdGhhdCB0aGUgaW5pdGlhbCB2ZWxvY2l0eSBtYXRjaGVzIHRoZSB1c2VyJ3Mgc2Nyb2xs
IHZlbG9jaXR5LCBhbmQgdGhlCisgICAgICAgIGZpbmFsIHZlbG9jaXR5IG1hdGNoZXMgYSBsb3dl
ciBmaW5hbCB2ZWxvY2l0eSB0aGF0IGlzIHNvbWV3aGF0IGFyYml0cmFyaWx5IGNvbXB1dGVkLiAo
U2VlIHRoZSBGSVhNRSBpbgorICAgICAgICBBeGlzU2Nyb2xsU25hcE9mZnNldHM6OmluaXRpYWxp
emVHbGlkZVBhcmFtZXRlcnMpLiBIb3cgdGhlIGVxdWF0aW9ucyBhbmQgY29uc3RhbnRzIHdlcmUg
Y2hvc2VuIGlzIGRlc2NyaWJlZCBpbiBncmVhdGVyIGRldGFpbCBpbiB0aGUKKyAgICAgICAgY29t
bWVudHMgYWJvdmUgQXhpc1Njcm9sbFNuYXBPZmZzZXRzOjpjb21wdXRlR2xpZGVEZWx0YSBhbmQg
QXhpc1Njcm9sbFNuYXBPZmZzZXRzOjpjb21wdXRlU25hcERlbHRhLiBOb3RlIHRoYXQgdGhlIGZp
bmFsIHZlbG9jaXR5IHNob3VsZAorICAgICAgICBpZGVhbGx5IGJlIGVxdWFsIHRvIDAuIEhvd2V2
ZXIsIHdpdGggdGhpcyBwYXJ0aWN1bGFyIGN1cnZlLCB0aGlzIGNhdXNlZCB0aGUgYW5pbWF0aW9u
IHRvIGZlZWwgdG9vIHNsb3cgbmVhciB0aGUgc25hcCBwb2ludC4KKworICAgICAgICBObyB0ZXN0
cywgc2luY2UgdGhlcmUgaXMgbm8gb2JzZXJ2YWJsZSBjaGFuZ2UgaW4gYmVoYXZpb3IuIFRlc3Rz
IHdpbGwgYmUgaW5jbHVkZWQgd2hlbiBpT1MgYW5kIE1hYyBzY3JvbGxpbmcgYXJlYXMgaG9vayBp
bnRvIHRoaXMgY29kZS4KKworICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogCisgICAgICAgICogcGFnZS9zY3Jv
bGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcDogCisgICAgICAgIChXZWJDb3JlOjpjbG9z
ZXN0U25hcE9mZnNldCk6IENvbXB1dGVzIHRoZSBjbG9zZXN0IHNuYXAgb2Zmc2V0IGdpdmVuIHZl
bG9jaXR5IGFuZCBwcmRpY3RlZCBkZXN0aW5hdGlvbi4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQXhpc1Nj
cm9sbFNuYXBBbmltYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxT
bmFwQW5pbWF0b3JDbGllbnQ6On5BeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjp0b1doZWVsRXZlbnRTdGF0dXMpOiBDb252ZXJ0cyBhIHBhaXIgb2YgUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2VzIHRvIGEgV2hlZWxFdmVudFN0YXR1cy4KKyAgICAgICAgKFdl
YkNvcmU6OnByb2plY3RlZEluZXJ0aWFsU2Nyb2xsRGlzdGFuY2UpOiBBdHRlbXB0cyB0byBwcmVk
aWN0IHRoZSBkaXN0YW5jZSBjb3ZlcmVkIGJ5IHRoZSBpbmVydGlhbCBzY3JvbGxpbmcgcGhhc2Uu
CisgICAgICAgIChXZWJDb3JlOjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpBeGlzU2Nyb2xsU25h
cEFuaW1hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6Omhh
bmRsZVdoZWVsRXZlbnQpOiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgQXhpc1Nj
cm9sbFNuYXBBbmltYXRvciwgZ2l2ZW4gYSBQbGF0Zm9ybVdoZWVsRXZlbnQKKyAgICAgICAgKFdl
YkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OnNob3VsZE92ZXJyaWRlV2hlZWxFdmVudCk6
IERldGVybWluZXMgd2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIG92ZXJyaWRlIGEgd2hlZWwgZXZl
bnQgZ2l2ZW4gdGhlIGFuaW1hdG9yJ3MgaW50ZXJuYWwgc3RhdGUuCisgICAgICAgIChXZWJDb3Jl
OjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpzY3JvbGxTbmFwQW5pbWF0aW9uVXBkYXRlKTogVXBk
YXRlcyBhIHNpbmdsZSBsb29wIG9mIHRoZSBzY3JvbGwgc25hcHBpbmcgYW5pbWF0aW9uLgorICAg
ICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6YmVnaW5TY3JvbGxTbmFwQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmVuZFNj
cm9sbFNuYXBBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmlt
YXRvcjo6Y29tcHV0ZVNuYXBEZWx0YSk6IFNlZSBjb21tZW50cyBmb3IgbW9yZSBpbmZvcm1hdGlv
bi4KKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmNvbXB1dGVHbGlk
ZURlbHRhKTogU2VlIGNvbW1lbnRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAoV2Vi
Q29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6aW5pdGlhbGl6ZUdsaWRlUGFyYW1ldGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpwdXNoSW5pdGlhbFdo
ZWVsRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6YXZl
cmFnZUluaXRpYWxXaGVlbERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFw
QW5pbWF0b3I6OmNsZWFySW5pdGlhbFdoZWVsRGVsdGFXaW5kb3cpOgorCiAyMDE0LTA4LTE0ICBK
ZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFtNU0VdIEFsdGVyaW5n
IHRoZSBxdWFsaXR5IG9mIGEgWW91VHViZSB2aWRlbyB3aWxsIGNhdXNlIHRoZSB2aWRlbyB0byBk
aXN0b3J0IGFuZCBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21h
a2UKaW5kZXggNDE4YzI1NDQ4NDA1Yjk1MjlkYjc0OWMzYzVmNzQxYmZmOTcwM2EwZS4uNTZiNDg3
MjM2OTAyNDJjYjMwZWVkNTQ2NDRiODMyZGU3ZDgzM2I0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMu
Y21ha2UKQEAgLTkzLDYgKzkzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmNwcAogCisgICAg
cGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0KICAgICBwbGF0Zm9ybS9tYWMv
QmxvY2tFeGNlcHRpb25zLm1tCiAgICAgcGxhdGZvcm0vbWFjL0NvbnRlbnRGaWx0ZXJNYWMubW0K
ICAgICBwbGF0Zm9ybS9tYWMvQ29udGV4dE1lbnVJdGVtTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjBhYTA0MWRjYjI3
YmUzZTgyZjg4Y2I4YWQxNjYzOGY4NTUzOTVlOC4uMzFhZWFjMmE2MTU3YTVmZGUwMTM4Mzc2NTBl
NTg0NDcwNjQ5MzE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNjI0Nyw2ICs2MjQ3LDggQEAKIAkJRjQyRkZCNDYxOTg0Qjcx
NjAwRjY4MzdGIC8qIExlbmd0aFJlcGVhdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjQyRkZCNDUxOTg0QjcxNjAwRjY4MzdGIC8qIExlbmd0aFJlcGVh
dC5oICovOyB9OwogCQlGNDVDMjMxRDE5OTVCNzNCMDBBNkUyRTMgLyogQXhpc1Njcm9sbFNuYXBP
ZmZzZXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0NUMyMzFCMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwICov
OyB9OwogCQlGNDVDMjMxRTE5OTVCNzNCMDBBNkUyRTMgLyogQXhpc1Njcm9sbFNuYXBPZmZzZXRz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDVDMjMx
QzE5OTVCNzNCMDBBNkUyRTMgLyogQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRjQ3ODc1NTQxOTk4M0FGRjAw
MjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0Nzg3NTUyMTk5ODNBRkYwMDI0QTI4NyAvKiBBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJRjQ3ODc1NTUxOTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFw
QW5pbWF0b3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNDc4NzU1MzE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbSAq
LzsgfTsKIAkJRjQ3QTVFM0UxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3QTVF
M0IxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0N0E1RTNGMTk1QjhFNDgw
MDQ4MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3QTVFM0ExOTVCOEM4QTAwNDgzMTAwIC8qIFN0
eWxlU2Nyb2xsU25hcFBvaW50cy5jcHAgKi87IH07CiAJCUY1MDY2NEY3MTU3RjUyREMwMEFDMjI2
RiAvKiBGb3JtQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTA2NjRGNTE1N0Y1MkRDMDBBQzIyNkYgLyogRm9ybUNvbnRyb2xsZXIu
Y3BwICovOyB9OwpAQCAtMTM3NjYsNiArMTM3NjgsOCBAQAogCQlGNDJGRkI0NTE5ODRCNzE2MDBG
NjgzN0YgLyogTGVuZ3RoUmVwZWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExlbmd0aFJlcGVhdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDVDMjMxQjE5
OTVCNzNCMDBBNkUyRTMgLyogQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NUMyMzFDMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlz
U2Nyb2xsU25hcE9mZnNldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXhp
c1Njcm9sbFNuYXBPZmZzZXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0Nzg3
NTUyMTk5ODNBRkYwMDI0QTI4NyAvKiBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjQ3ODc1NTMxOTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNT
Y3JvbGxTbmFwQW5pbWF0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGNDdBNUUzQTE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0eWxlU2Nyb2xsU25hcFBv
aW50cy5jcHA7IHBhdGggPSBzdHlsZS9TdHlsZVNjcm9sbFNuYXBQb2ludHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNDdBNUUzQjE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVT
Y3JvbGxTbmFwUG9pbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0eWxl
U2Nyb2xsU25hcFBvaW50cy5oOyBwYXRoID0gc3R5bGUvU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1MDY2NEY1MTU3RjUyREMwMEFDMjI2RiAv
KiBGb3JtQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGb3JtQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjQw
OCw2ICsxNjQxMiw4IEBACiAJCTY1ODJBMTQ4MDk5OTlENkMwMEJFRUI2RCAvKiBtYWMgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUY0Nzg3NTUyMTk5ODNB
RkYwMDI0QTI4NyAvKiBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmggKi8sCisJCQkJRjQ3ODc1NTMx
OTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0gKi8sCiAJCQkJNjVB
NjQwRjAwNTMzQkIxRjAwODVFNzc3IC8qIEJsb2NrRXhjZXB0aW9ucy5oICovLAogCQkJCTY1Rjgw
Njk3MDU0RDlGODYwMDhCRjc3NiAvKiBCbG9ja0V4Y2VwdGlvbnMubW0gKi8sCiAJCQkJMjkxOUEx
RUExNkIzMzc4OTAwNzg3MjEzIC8qIENvbnRlbnRGaWx0ZXJNYWMubW0gKi8sCkBAIC0yNjI1OSw2
ICsyNjI2NSw3IEBACiAJCQkJQjIyMjdBOTcwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1ByZXNlcnZl
QXNwZWN0UmF0aW8uaCBpbiBIZWFkZXJzICovLAogCQkJCTA4OEEwRTBBMTI2RUYxREIwMDk3OEY3
QSAvKiBTVkdQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgxREQ0OUMxM0JBMUE2MDAw
REM3NjI3IC8qIFNWR1Byb3BlcnR5SW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjQ3ODc1NTQx
OTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTA4OEEwRTBCMTI2RUYxREIwMDk3OEY3QSAvKiBTVkdQcm9wZXJ0eVRlYXJPZmYuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4OEEwRTBDMTI2RUYxREIwMDk3OEY3QSAvKiBTVkdQcm9wZXJ0
eVRyYWl0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBOUEwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODE3NCw2ICsy
ODE4MSw3IEBACiAJCQkJQkU2MTAzOUQxOEE5RDY1MjAwREQ1MEQ3IC8qIEpTRGF0YUN1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0MTYyQTQ1NzEwMTE0NjQ3MDBERkYzRUQgLyogSlNEZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTYyQTQ1NDEwMTE0
NUUzMDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlGNDc4NzU1NTE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Njcm9sbFNu
YXBBbmltYXRvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZEQTE1RUQxMTJCMDNGOTQwMDNBNTgz
QSAvKiBKU0RlbGF5Tm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMUZCMUE2NTEyMEE1RDNG
MDBEQzAyQTAgLyogSlNEZXZpY2VNb3Rpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkz
MUZCMUE2QzEyMEE1RDY5MDBEQzAyQTAgLyogSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
QXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgKaW5kZXggZWRkZmM0YTM5ZDI2ODcyMDcwMDQ4NDkxNzAy
OThjNDRhNTVkYTMxYS4uYzk1MzZmYzUyNTk1YTZmZGUwYjA4Mzc4MWE1NjJlYmEyMTU1ZGEzMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBP
ZmZzZXRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNu
YXBPZmZzZXRzLmgKQEAgLTQyLDYgKzQyLDQwIEBAIGNsYXNzIFNjcm9sbGFibGVBcmVhOwogCiB2
b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmLCBI
VE1MRWxlbWVudCYgc2Nyb2xsaW5nRWxlbWVudCwgY29uc3QgUmVuZGVyQm94JiBzY3JvbGxpbmdF
bGVtZW50Qm94LCBjb25zdCBSZW5kZXJTdHlsZSYgc2Nyb2xsaW5nRWxlbWVudFN0eWxlKTsKIAor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitMYXlvdXRVbml0IGNsb3Nlc3RTbmFwT2Zmc2V0KGNvbnN0
IFZlY3RvcjxMYXlvdXRVbml0PiYgc25hcE9mZnNldHMsIExheW91dFVuaXQgc2Nyb2xsRGVzdGlu
YXRpb24sIGZsb2F0IHZlbG9jaXR5KQoreworICAgIEFTU0VSVChzbmFwT2Zmc2V0cy5zaXplKCkp
OworICAgIGlmIChzY3JvbGxEZXN0aW5hdGlvbiA8PSBzbmFwT2Zmc2V0cy5maXJzdCgpKQorICAg
ICAgICByZXR1cm4gc25hcE9mZnNldHMuZmlyc3QoKTsKKworICAgIGlmIChzY3JvbGxEZXN0aW5h
dGlvbiA+PSBzbmFwT2Zmc2V0cy5sYXN0KCkpCisgICAgICAgIHJldHVybiBzbmFwT2Zmc2V0cy5s
YXN0KCk7CisKKyAgICBzaXplX3QgbG93ZXJJbmRleCA9IDA7CisgICAgc2l6ZV90IHVwcGVySW5k
ZXggPSBzbmFwT2Zmc2V0cy5zaXplKCkgLSAxOworICAgIHdoaWxlIChsb3dlckluZGV4IDwgdXBw
ZXJJbmRleCAtIDEpIHsKKyAgICAgICAgc2l6ZV90IG1pZGRsZUluZGV4ID0gKGxvd2VySW5kZXgg
KyB1cHBlckluZGV4KSAvIDI7CisgICAgICAgIGlmIChzY3JvbGxEZXN0aW5hdGlvbiA8IHNuYXBP
ZmZzZXRzW21pZGRsZUluZGV4XSkKKyAgICAgICAgICAgIHVwcGVySW5kZXggPSBtaWRkbGVJbmRl
eDsKKyAgICAgICAgZWxzZSBpZiAoc2Nyb2xsRGVzdGluYXRpb24gPiBzbmFwT2Zmc2V0c1ttaWRk
bGVJbmRleF0pCisgICAgICAgICAgICBsb3dlckluZGV4ID0gbWlkZGxlSW5kZXg7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgdXBwZXJJbmRleCA9IG1pZGRsZUluZGV4OworICAgICAgICAg
ICAgbG93ZXJJbmRleCA9IG1pZGRsZUluZGV4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisgICAgTGF5b3V0VW5pdCBsb3dlclNuYXBQb3NpdGlvbiA9IHNuYXBPZmZzZXRz
W2xvd2VySW5kZXhdOworICAgIExheW91dFVuaXQgdXBwZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zm
c2V0c1t1cHBlckluZGV4XTsKKyAgICAvLyBOb256ZXJvIHZlbG9jaXR5IGluZGljYXRlcyBhIGZs
aWNrIGdlc3R1cmUuIEV2ZW4gaWYgYW5vdGhlciBzbmFwIHBvaW50IGlzIGNsb3Nlciwgc25hcCB0
byB0aGUgb25lIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGZsaWNrIGdlc3R1cmUuCisgICAgaWYg
KHZlbG9jaXR5KQorICAgICAgICByZXR1cm4gdmVsb2NpdHkgPCAwID8gbG93ZXJTbmFwUG9zaXRp
b24gOiB1cHBlclNuYXBQb3NpdGlvbjsKKworICAgIGJvb2wgaXNDbG9zZXJUb0xvd2VyU25hcFBv
c2l0aW9uID0gc2Nyb2xsRGVzdGluYXRpb24gLSBsb3dlclNuYXBQb3NpdGlvbiA8PSB1cHBlclNu
YXBQb3NpdGlvbiAtIHNjcm9sbERlc3RpbmF0aW9uOworICAgIHJldHVybiBpc0Nsb3NlclRvTG93
ZXJTbmFwUG9zaXRpb24gPyBsb3dlclNuYXBQb3NpdGlvbiA6IHVwcGVyU25hcFBvc2l0aW9uOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBDU1NfU0NST0xMX1NOQVAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFu
aW1hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmlt
YXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmYzMDg0OWI0YTk2NWIyOTkxYTJjNzk0MWY4NDk4YjRmY2YwZWNj
N2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Nj
cm9sbFNuYXBBbmltYXRvci5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yX2gKKyNkZWZpbmUgQXhpc1Njcm9sbFNuYXBBbmltYXRv
cl9oCisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorCisjaW5jbHVkZSAiQXhpc1Njcm9s
bFNuYXBPZmZzZXRzLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworZW51bSBjbGFzcyBTY3JvbGxTbmFwU3RhdGUgeworICAgIFNuYXBwaW5nLAor
ICAgIEdsaWRpbmcsCisgICAgSWRsZQorfTsKKworZW51bSBjbGFzcyBXaGVlbEV2ZW50U3RhdHVz
IHsKKyAgICBVc2VyU2Nyb2xsQmVnaW4sCisgICAgVXNlclNjcm9sbGluZywKKyAgICBVc2VyU2Ny
b2xsRW5kLAorICAgIEluZXJ0aWFsU2Nyb2xsQmVnaW4sCisgICAgSW5lcnRpYWxTY3JvbGxpbmcs
CisgICAgSW5lcnRpYWxTY3JvbGxFbmQsCisgICAgVW5rbm93bgorfTsKKworY2xhc3MgQXhpc1Nj
cm9sbFNuYXBBbmltYXRvckNsaWVudCB7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+QXhpc1Nj
cm9sbFNuYXBBbmltYXRvckNsaWVudCgpIHsgfQorCitwdWJsaWM6CisgICAgdmlydHVhbCBMYXlv
dXRVbml0IHNjcm9sbE9mZnNldEluQXhpcyhTY3JvbGxFdmVudEF4aXMpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgaW1tZWRpYXRlU2Nyb2xsSW5BeGlzKFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgdmVs
b2NpdHkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRTY3JvbGxTbmFwVGltZXIoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHN0b3BTY3JvbGxTbmFwVGltZXIoKSA9IDA7Cit9OworCitjbGFz
cyBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yIHsKK3B1YmxpYzoKKyAgICBBeGlzU2Nyb2xsU25hcEFu
aW1hdG9yKEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQqLCBWZWN0b3I8TGF5b3V0VW5pdD4q
IHNuYXBPZmZzZXRzLCBTY3JvbGxFdmVudEF4aXMpOworICAgIHZvaWQgaGFuZGxlV2hlZWxFdmVu
dChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKyAgICBib29sIHNob3VsZE92ZXJyaWRlV2hl
ZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBjb25zdDsKKyAgICB2b2lkIHNjcm9s
bFNuYXBBbmltYXRpb25VcGRhdGUoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGJlZ2luU2Nyb2xs
U25hcEFuaW1hdGlvbihTY3JvbGxTbmFwU3RhdGUpOworICAgIHZvaWQgZW5kU2Nyb2xsU25hcEFu
aW1hdGlvbigpOworCisgICAgZmxvYXQgY29tcHV0ZVNuYXBEZWx0YSgpIGNvbnN0OworICAgIGZs
b2F0IGNvbXB1dGVHbGlkZURlbHRhKCkgY29uc3Q7CisKKyAgICB2b2lkIGluaXRpYWxpemVHbGlk
ZVBhcmFtZXRlcnMoYm9vbCk7CisgICAgdm9pZCBwdXNoSW5pdGlhbFdoZWVsRGVsdGEoZmxvYXQp
OworICAgIGZsb2F0IGF2ZXJhZ2VJbml0aWFsV2hlZWxEZWx0YSgpIGNvbnN0OworICAgIHZvaWQg
Y2xlYXJJbml0aWFsV2hlZWxEZWx0YVdpbmRvdygpOworCisgICAgc3RhdGljIGNvbnN0IGludCB3
aGVlbERlbHRhV2luZG93U2l6ZSA9IDM7CisKKyAgICBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xp
ZW50KiBtX2NsaWVudDsKKyAgICBWZWN0b3I8TGF5b3V0VW5pdD4qIG1fc25hcE9mZnNldHM7Cisg
ICAgU2Nyb2xsRXZlbnRBeGlzIG1fYXhpczsKKyAgICAvLyBVc2VkIHRvIHRyYWNrIGJvdGggc25h
cHBpbmcgYW5kIGdsaWRpbmcgYmVoYXZpb3JzLgorICAgIFNjcm9sbFNuYXBTdGF0ZSBtX2N1cnJl
bnRTdGF0ZTsKKyAgICBMYXlvdXRVbml0IG1faW5pdGlhbE9mZnNldDsKKyAgICBMYXlvdXRVbml0
IG1fdGFyZ2V0T2Zmc2V0OworICAgIC8vIFVzZWQgdG8gdHJhY2sgZ2xpZGluZyBiZWhhdmlvci4K
KyAgICBMYXlvdXRVbml0IG1fYmVnaW5UcmFja2luZ1doZWVsRGVsdGFPZmZzZXQ7CisgICAgaW50
IG1fbnVtV2hlZWxEZWx0YXNUcmFja2VkOworICAgIGZsb2F0IG1fd2hlZWxEZWx0YVdpbmRvd1t3
aGVlbERlbHRhV2luZG93U2l6ZV07CisgICAgZmxvYXQgbV9nbGlkZU1hZ25pdHVkZTsKKyAgICBm
bG9hdCBtX2dsaWRlUGhhc2VTaGlmdDsKKyAgICBmbG9hdCBtX2dsaWRlSW5pdGlhbFdoZWVsRGVs
dGE7CisgICAgYm9vbCBtX3Nob3VsZE92ZXJyaWRlV2hlZWxFdmVudDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisKKyNl
bmRpZiAvLyBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjEx
M2Q2OGY3NjQzYmY5NmM4N2NhMzlkNzY4MjcyZTM3M2NjYzY0ZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tCkBA
IC0wLDAgKzEsMjk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCIKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgZmxvYXQgaW5lcnRpYWxTY3JvbGxQ
cmVkaWN0aW9uRmFjdG9yID0gMTYuNjc4OTsKK2NvbnN0IGZsb2F0IHNuYXBNYWduaXR1ZGVNYXgg
PSAyNTsKK2NvbnN0IGZsb2F0IHNuYXBNYWduaXR1ZGVNaW4gPSA1OworY29uc3QgZmxvYXQgc25h
cFRocmVzaG9sZEhpZ2ggPSAxMDAwOworY29uc3QgZmxvYXQgc25hcFRocmVzaG9sZExvdyA9IDUw
OworY29uc3QgZmxvYXQgZ2xpZGVCb29zdE11bHRpcGxpZXIgPSAzLjU7Citjb25zdCBmbG9hdCBt
YXhUYXJnZXRXaGVlbERlbHRhID0gNzsKK2NvbnN0IGZsb2F0IG1pblRhcmdldFdoZWVsRGVsdGEg
PSAzLjU7Citjb25zdCBmbG9hdCBpbml0aWFsVG9GaW5hbE1vbWVudHVtRmFjdG9yID0gMS4wIC8g
NDAuMDsKKworc3RhdGljIGlubGluZSBXaGVlbEV2ZW50U3RhdHVzIHRvV2hlZWxFdmVudFN0YXR1
cyhQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFzZSwgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2Ug
bW9tZW50dW1QaGFzZSkKK3sKKyAgICBpZiAocGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhh
c2VOb25lKSB7CisgICAgICAgIHN3aXRjaCAobW9tZW50dW1QaGFzZSkgeworICAgICAgICBjYXNl
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW46CisgICAgICAgICAgICByZXR1cm4gV2hlZWxF
dmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxCZWdpbjsKKworICAgICAgICBjYXNlIFBsYXRmb3Jt
V2hlZWxFdmVudFBoYXNlQ2hhbmdlZDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3Rh
dHVzOjpJbmVydGlhbFNjcm9sbGluZzsKKworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlRW5kZWQ6CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6SW5lcnRp
YWxTY3JvbGxFbmQ7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBXaGVl
bEV2ZW50U3RhdHVzOjpVbmtub3duOyAKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobW9tZW50
dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpIHsKKyAgICAgICAgc3dpdGNo
IChwaGFzZSkgeworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW46Cisg
ICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEJlZ2luOworCisg
ICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkOgorICAgICAgICAgICAg
cmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxpbmc7CisKKyAgICAgICAgY2FzZSBQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkOgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZl
bnRTdGF0dXM6OlVzZXJTY3JvbGxFbmQ7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOworfQorCitzdGF0aWMgaW5saW5lIGZs
b2F0IHByb2plY3RlZEluZXJ0aWFsU2Nyb2xsRGlzdGFuY2UoZmxvYXQgaW5pdGlhbFdoZWVsRGVs
dGEpCit7CisgICAgLy8gRklYTUU6IEV4cGVyaW1lbnRzIHdpdGggaW5lcnRpYWwgc2Nyb2xsaW5n
IHNob3cgYSBmYWlybHkgY29uc2lzdGVudCBsaW5lYXIgcmVsYXRpb25zaGlwIGJldHdlZW4gaW5p
dGlhbCB3aGVlbCBkZWx0YSBhbmQgdG90YWwgZGlzdGFuY2Ugc2Nyb2xsZWQuCisgICAgLy8gSW4g
dGhlIGZ1dHVyZSwgd2UnbGwgd2FudCB0byBmaW5kIGEgbW9yZSBhY2N1cmF0ZSB3YXkgb2YgaW5l
cnRpYWwgc2Nyb2xsIHByZWRpY3Rpb24uCisgICAgcmV0dXJuIGluZXJ0aWFsU2Nyb2xsUHJlZGlj
dGlvbkZhY3RvciAqIGluaXRpYWxXaGVlbERlbHRhOworfQorCitBeGlzU2Nyb2xsU25hcEFuaW1h
dG9yOjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yKEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQq
IGNsaWVudCwgVmVjdG9yPExheW91dFVuaXQ+KiBzbmFwT2Zmc2V0cywgU2Nyb2xsRXZlbnRBeGlz
IGF4aXMpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3NuYXBPZmZzZXRzKHNuYXBP
ZmZzZXRzKQorICAgICwgbV9heGlzKGF4aXMpCisgICAgLCBtX2N1cnJlbnRTdGF0ZShTY3JvbGxT
bmFwU3RhdGU6OklkbGUpCisgICAgLCBtX2luaXRpYWxPZmZzZXQoMCkKKyAgICAsIG1fdGFyZ2V0
T2Zmc2V0KDApCisgICAgLCBtX2JlZ2luVHJhY2tpbmdXaGVlbERlbHRhT2Zmc2V0KDApCisgICAg
LCBtX251bVdoZWVsRGVsdGFzVHJhY2tlZCgwKQorICAgICwgbV9nbGlkZU1hZ25pdHVkZSgwKQor
ICAgICwgbV9nbGlkZVBoYXNlU2hpZnQoMCkKKyAgICAsIG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0
YSgwKQorICAgICwgbV9zaG91bGRPdmVycmlkZVdoZWVsRXZlbnQoZmFsc2UpCit7Cit9CisKK3Zv
aWQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmIGV2ZW50KQoreworICAgIGZsb2F0IHNjcm9sbERlbHRhID0gbV9heGlzID09
IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IC1ldmVudC5kZWx0YVgoKSA6IC1ldmVudC5k
ZWx0YVkoKTsKKyAgICBXaGVlbEV2ZW50U3RhdHVzIHdoZWVsU3RhdHVzID0gdG9XaGVlbEV2ZW50
U3RhdHVzKGV2ZW50LnBoYXNlKCksIGV2ZW50Lm1vbWVudHVtUGhhc2UoKSk7CisgICAgaWYgKCh3
aGVlbFN0YXR1cyA9PSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsaW5nIHx8IHdoZWVsU3Rh
dHVzID09IFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsaW5nKSAmJiAhc2Nyb2xsRGVs
dGEpCisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAod2hlZWxTdGF0dXMpIHsKKyAgICBj
YXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxCZWdpbjoKKyAgICBjYXNlIFdoZWVsRXZl
bnRTdGF0dXM6OlVzZXJTY3JvbGxpbmc6CisgICAgICAgIGVuZFNjcm9sbFNuYXBBbmltYXRpb24o
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3Jv
bGxFbmQ6CisgICAgICAgIGJlZ2luU2Nyb2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFwU3RhdGU6
OlNuYXBwaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6
OkluZXJ0aWFsU2Nyb2xsQmVnaW46CisgICAgICAgIC8vIEJlZ2luIHRyYWNraW5nIHdoZWVsIGRl
bHRhcyBmb3IgZ2xpZGUgcHJlZGljdGlvbi4KKyAgICAgICAgZW5kU2Nyb2xsU25hcEFuaW1hdGlv
bigpOworICAgICAgICBwdXNoSW5pdGlhbFdoZWVsRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgICAg
ICBtX2JlZ2luVHJhY2tpbmdXaGVlbERlbHRhT2Zmc2V0ID0gbV9jbGllbnQtPnNjcm9sbE9mZnNl
dEluQXhpcyhtX2F4aXMpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2hlZWxFdmVudFN0
YXR1czo6SW5lcnRpYWxTY3JvbGxpbmc6CisgICAgICAgIGlmIChtX2N1cnJlbnRTdGF0ZSAhPSBT
Y3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcpIHsKKyAgICAgICAgICAgIGlmIChtX251bVdoZWVsRGVs
dGFzVHJhY2tlZCA8IHdoZWVsRGVsdGFXaW5kb3dTaXplKQorICAgICAgICAgICAgICAgIHB1c2hJ
bml0aWFsV2hlZWxEZWx0YShzY3JvbGxEZWx0YSk7CisKKyAgICAgICAgICAgIGlmIChtX251bVdo
ZWVsRGVsdGFzVHJhY2tlZCA9PSB3aGVlbERlbHRhV2luZG93U2l6ZSkKKyAgICAgICAgICAgICAg
ICBiZWdpblNjcm9sbFNuYXBBbmltYXRpb24oU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6SW5l
cnRpYWxTY3JvbGxFbmQ6CisgICAgICAgIGNsZWFySW5pdGlhbFdoZWVsRGVsdGFXaW5kb3coKTsK
KyAgICAgICAgbV9zaG91bGRPdmVycmlkZVdoZWVsRXZlbnQgPSBmYWxzZTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVua25vd246CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK2Jvb2wgQXhpc1Nj
cm9sbFNuYXBBbmltYXRvcjo6c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3Jt
V2hlZWxFdmVudCYgZXZlbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2hvdWxkT3ZlcnJpZGVX
aGVlbEV2ZW50ICYmIHRvV2hlZWxFdmVudFN0YXR1cyhldmVudC5waGFzZSgpLCBldmVudC5tb21l
bnR1bVBoYXNlKCkpID09IFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsaW5nOworfQor
Cit2b2lkIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OnNjcm9sbFNuYXBBbmltYXRpb25VcGRhdGUo
KQoreworICAgIEFTU0VSVChtX2N1cnJlbnRTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRp
bmcgfHwgbV9jdXJyZW50U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZyk7CisgICAg
ZmxvYXQgZGVsdGEgPSBtX2N1cnJlbnRTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5n
ID8gY29tcHV0ZVNuYXBEZWx0YSgpIDogY29tcHV0ZUdsaWRlRGVsdGEoKTsKKyAgICBpZiAoZGVs
dGEpCisgICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3JvbGxJbkF4aXMobV9heGlzLCBkZWx0
YSk7CisgICAgZWxzZSB7CisgICAgICAgIG1fY3VycmVudFN0YXRlID0gU2Nyb2xsU25hcFN0YXRl
OjpJZGxlOworICAgICAgICBtX2NsaWVudC0+c3RvcFNjcm9sbFNuYXBUaW1lcigpOworICAgIH0K
K30KKwordm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpiZWdpblNjcm9sbFNuYXBBbmltYXRp
b24oU2Nyb2xsU25hcFN0YXRlIG5ld1N0YXRlKQoreworICAgIEFTU0VSVChuZXdTdGF0ZSA9PSBT
Y3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgfHwgbmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpT
bmFwcGluZyk7CisgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0
SW5BeGlzKG1fYXhpcyk7CisgICAgZmxvYXQgaW5pdGlhbFdoZWVsRGVsdGEgPSBhdmVyYWdlSW5p
dGlhbFdoZWVsRGVsdGEoKTsKKyAgICBMYXlvdXRVbml0IHByb2plY3RlZFNjcm9sbERlc3RpbmF0
aW9uID0gbmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nID8gbV9iZWdpblRyYWNr
aW5nV2hlZWxEZWx0YU9mZnNldCArIExheW91dFVuaXQocHJvamVjdGVkSW5lcnRpYWxTY3JvbGxE
aXN0YW5jZShpbml0aWFsV2hlZWxEZWx0YSkpIDogb2Zmc2V0OworICAgIHByb2plY3RlZFNjcm9s
bERlc3RpbmF0aW9uID0gc3RkOjptaW4oc3RkOjptYXgocHJvamVjdGVkU2Nyb2xsRGVzdGluYXRp
b24sIG1fc25hcE9mZnNldHMtPmZpcnN0KCkpLCBtX3NuYXBPZmZzZXRzLT5sYXN0KCkpOworICAg
IG1faW5pdGlhbE9mZnNldCA9IG9mZnNldDsKKyAgICBtX3RhcmdldE9mZnNldCA9IGNsb3Nlc3RT
bmFwT2Zmc2V0PExheW91dFVuaXQ+KCptX3NuYXBPZmZzZXRzLCBwcm9qZWN0ZWRTY3JvbGxEZXN0
aW5hdGlvbiwgaW5pdGlhbFdoZWVsRGVsdGEpOworICAgIGlmIChtX2luaXRpYWxPZmZzZXQgPT0g
bV90YXJnZXRPZmZzZXQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3VycmVudFN0YXRlID0g
bmV3U3RhdGU7CisgICAgaWYgKG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZykg
eworICAgICAgICBtX3Nob3VsZE92ZXJyaWRlV2hlZWxFdmVudCA9IHRydWU7CisgICAgICAgIG1f
Z2xpZGVJbml0aWFsV2hlZWxEZWx0YSA9IGluaXRpYWxXaGVlbERlbHRhOworICAgICAgICBib29s
IGdsaWRlUmVxdWlyZXNCb29zdDsKKyAgICAgICAgaWYgKGluaXRpYWxXaGVlbERlbHRhID4gMCkK
KyAgICAgICAgICAgIGdsaWRlUmVxdWlyZXNCb29zdCA9IHByb2plY3RlZFNjcm9sbERlc3RpbmF0
aW9uIC0gb2Zmc2V0IDwgbV90YXJnZXRPZmZzZXQgLSBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlv
bjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ2xpZGVSZXF1aXJlc0Jvb3N0ID0gb2Zmc2V0
IC0gcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24gPCBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlv
biAtIG1fdGFyZ2V0T2Zmc2V0OworCisgICAgICAgIGluaXRpYWxpemVHbGlkZVBhcmFtZXRlcnMo
Z2xpZGVSZXF1aXJlc0Jvb3N0KTsKKyAgICB9CisgICAgbV9jbGllbnQtPnN0YXJ0U2Nyb2xsU25h
cFRpbWVyKCk7Cit9CisKK3ZvaWQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6ZW5kU2Nyb2xsU25h
cEFuaW1hdGlvbigpCit7CisgICAgaWYgKG1fY3VycmVudFN0YXRlID09IFNjcm9sbFNuYXBTdGF0
ZTo6R2xpZGluZykKKyAgICAgICAgY2xlYXJJbml0aWFsV2hlZWxEZWx0YVdpbmRvdygpOworCisg
ICAgbV9jdXJyZW50U3RhdGUgPSBTY3JvbGxTbmFwU3RhdGU6OklkbGU7CisgICAgbV9jbGllbnQt
PnN0b3BTY3JvbGxTbmFwVGltZXIoKTsKK30KKworLy8gQ29tcHV0ZXMgdGhlIGFtb3VudCB0byBz
Y3JvbGwgYnkgd2hlbiBwZXJmb3JtaW5nIGEgInNuYXAiIG9wZXJhdGlvbiwgaS5lLiB3aGVuIGEg
dXNlciByZWxlYXNlcyB0aGUgdHJhY2twYWQgd2l0aG91dCBmbGlja2luZy4gVGhlIHNuYXAgZGVs
dGEKKy8vIGlzIGEgZnVuY3Rpb24gb2YgcHJvZ3Jlc3MgdCwgd2hlcmUgdCBpcyBlcXVhbCB0byBE
SVNUQU5DRV9UUkFWRUxFRCAvIFRPVEFMX0RJU1RBTkNFLCBESVNUQU5DRV9UUkFWRUxFRCBpcyB0
aGUgZGlzdGFuY2UgZnJvbSB0aGUgaW5pdGlhbE9mZnNldAorLy8gdG8gdGhlIGN1cnJlbnQgb2Zm
c2V0LCBhbmQgVE9UQUxfRElTVEFOQ0UgaXMgdGhlIGRpc3RhbmNlIGZyb20gaW5pdGlhbE9mZnNl
dCB0byB0YXJnZXRPZmZzZXQuIFRoZSBzbmFwcGluZyBlcXVhdGlvbiBpcyBhcyBmb2xsb3dzOgor
Ly8gZGVsdGEodCkgPSBNQUdOSVRVREUgKiBzaW4oUEkgKiB0KS4gTUFHTklUVURFIGluZGljYXRl
cyB0aGUgdG9wIHNwZWVkIHJlYWNoZWQgbmVhciB0aGUgbWlkZGxlIG9mIHRoZSBhbmltYXRpb24g
KHQgPSAwLjUpLCBhbmQgaXMgYSBsaW5lYXIKKy8vIHJlbGF0aW9uc2hpcCBvZiB0aGUgZGlzdGFu
Y2UgdHJhdmVsZWQsIGNsYW1wZWQgYnkgYXJiaXRyYXJ5IG1pbiBhbmQgbWF4IHZhbHVlcy4KK2Zs
b2F0IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmNvbXB1dGVTbmFwRGVsdGEoKSBjb25zdAorewor
ICAgIExheW91dFVuaXQgb2Zmc2V0ID0gbV9jbGllbnQtPnNjcm9sbE9mZnNldEluQXhpcyhtX2F4
aXMpOworICAgIGJvb2wgY2FuQ29tcHV0ZVNuYXAgPSAgKG1faW5pdGlhbE9mZnNldCA8PSBvZmZz
ZXQgJiYgb2Zmc2V0IDwgbV90YXJnZXRPZmZzZXQpIHx8IChtX3RhcmdldE9mZnNldCA8IG9mZnNl
dCAmJiBvZmZzZXQgPD0gbV9pbml0aWFsT2Zmc2V0KTsKKyAgICBpZiAobV9jdXJyZW50U3RhdGUg
IT0gU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZyB8fCAhY2FuQ29tcHV0ZVNuYXApCisgICAgICAg
IHJldHVybiAwOworCisgICAgaW50IHNpZ24gPSBtX2luaXRpYWxPZmZzZXQgPCBtX3RhcmdldE9m
ZnNldCA/IDEgOiAtMTsKKyAgICBmbG9hdCBwcm9ncmVzcyA9ICgoZmxvYXQpKG9mZnNldCAtIG1f
aW5pdGlhbE9mZnNldCkpIC8gKG1fdGFyZ2V0T2Zmc2V0IC0gbV9pbml0aWFsT2Zmc2V0KTsKKyAg
ICAvLyBUaHJlc2hvbGQgdGhlIGRpc3RhbmNlIGJlZm9yZSBjb21wdXRpbmcgbWFnbml0dWRlLCBz
byBvbmx5IGRpc3RhbmNlcyB3aXRoaW4gYSBjZXJ0YWluIHJhbmdlIGFyZSBjb25zaWRlcmVkLgor
ICAgIGZsb2F0IHRocmVzaG9sZGVkRGlzdGFuY2UgPSBzdGQ6Om1pbihzdGQ6Om1heDxmbG9hdD4o
KG1fdGFyZ2V0T2Zmc2V0IC0gbV9pbml0aWFsT2Zmc2V0KSAqIHNpZ24sIHNuYXBUaHJlc2hvbGRM
b3cpLCBzbmFwVGhyZXNob2xkSGlnaCk7CisgICAgZmxvYXQgbWFnbml0dWRlID0gc25hcE1hZ25p
dHVkZU1pbiArIChzbmFwTWFnbml0dWRlTWF4IC0gc25hcE1hZ25pdHVkZU1pbikgKiAodGhyZXNo
b2xkZWREaXN0YW5jZSAtIHNuYXBUaHJlc2hvbGRMb3cpIC8gKHNuYXBUaHJlc2hvbGRIaWdoIC0g
c25hcFRocmVzaG9sZExvdyk7CisgICAgZmxvYXQgcmF3U25hcEFtb3VudCA9IHN0ZDo6bWF4PGZs
b2F0PigxLCBtYWduaXR1ZGUgKiBzaW4ocGlGbG9hdCAqIHByb2dyZXNzKSk7CisgICAgaWYgKCht
X3RhcmdldE9mZnNldCA8IG9mZnNldCAmJiBvZmZzZXQgLSByYXdTbmFwQW1vdW50IDwgbV90YXJn
ZXRPZmZzZXQpIHx8IChtX3RhcmdldE9mZnNldCA+IG9mZnNldCAmJiBvZmZzZXQgKyByYXdTbmFw
QW1vdW50ID4gbV90YXJnZXRPZmZzZXQpKQorICAgICAgICByZXR1cm4gbV90YXJnZXRPZmZzZXQg
LSBvZmZzZXQ7CisKKyAgICByZXR1cm4gc2lnbiAqIHJhd1NuYXBBbW91bnQ7Cit9CisKKy8vIENv
bXB1dGVzIHRoZSBhbW91bnQgdG8gc2Nyb2xsIGJ5IHdoZW4gcGVyZm9ybWluZyBhICJnbGlkZSIg
b3BlcmF0aW9uLCBpLmUuIHdoZW4gYSB1c2VyIHJlbGVhc2VzIHRoZSB0cmFja3BhZCB3aXRoIGFu
IGluaXRpYWwgdmVsb2NpdHkuIEhlcmUsCisvLyB3ZSB3YW50IHRoZSBzY3JvbGwgb2Zmc2V0IHRv
IGFuaW1hdGUgZGlyZWN0bHkgdG8gdGhlIHNuYXAgcG9pbnQuIFRoZSBzbmFwIGRlbHRhIGlzIGEg
ZnVuY3Rpb24gb2YgcHJvZ3Jlc3MgdCwgd2hlcmUgdCBpcyBlcXVhbCB0bworLy8gRElTVEFOQ0Vf
VFJBVkVMRUQgLyBUT1RBTF9ESVNUQU5DRSwgRElTVEFOQ0VfVFJBVkVMRUQgaXMgdGhlIGRpc3Rh
bmNlIGZyb20gdGhlIGluaXRpYWxPZmZzZXQgdG8gdGhlIGN1cnJlbnQgb2Zmc2V0LCBhbmQgVE9U
QUxfRElTVEFOQ0UgaXMKKy8vIHRoZSBkaXN0YW5jZSBmcm9tIGluaXRpYWxPZmZzZXQgdG8gdGFy
Z2V0T2Zmc2V0LgorLy8gVGhlIGdlbmVyYWwgbW9kZWwgb2Ygb3VyIGdsaWRpbmcgZXF1YXRpb24g
aXMgZGVsdGEodCkgPSBNQUdOSVRVREUgKiAoMSArIGNvcyhQSSAqIHQgKyBQSEFTRV9TSElGVCkp
LiBUaGlzIHdhcyBkZXRlcm1pbmVkIGFmdGVyIGV4YW1pbmluZyB0aGUKKy8vIG1vbWVudHVtIHZl
bG9jaXR5IGN1cnZlIGFzIGEgZnVuY3Rpb24gb2YgcHJvZ3Jlc3MuIFRvIGNvbXB1dGUgTUFHTklU
VURFIGFuZCBQSEFTRV9TSElGVCwgd2UgdXNlIGluaXRpYWwgdmVsb2NpdHkgVjAgYW5kIHRoZSBm
aW5hbCB2ZWxvY2l0eSBWRiwKKy8vIGJvdGggYXMgd2hlZWwgZGVsdGFzIChwaXhlbHMgcGVyIHRp
bWVzdGVwKS4gVkYgc2hvdWxkIGJlIGEgc21hbGwgdmFsdWUgKDwgMTApIGNob3NlbiBiYXNlZCBv
biB0aGUgaW5pdGlhbCB2ZWxvY2l0eSBhbmQgVE9UQUxfRElTVEFOQ0UuCisvLyBXZSBhbHNvIGVu
Zm9yY2UgdGhlIGZvbGxvd2luZyBjb25zdHJhaW50cyBmb3IgdGhlIGdsaWRpbmcgZXF1YXRpb246
CisvLyAgIDEuIGRlbHRhKDApID0gVjAsIHNpbmNlIHdlIHdhbnQgdGhlIGluaXRpYWwgdmVsb2Np
dHkgb2YgdGhlIGdsaWRpbmcgYW5pbWF0aW9uIHRvIG1hdGNoIHRoZSB1c2VyJ3Mgc2Nyb2xsIHZl
bG9jaXR5LiBUaGUgZXhjZXB0aW9uIHRvIHRoaXMgaXMKKy8vICAgICAgd2hlbiB0aGUgZ2xpZGUg
dmVsb2NpdHkgaXMgbm90IGVub3VnaCB0byBuYXR1cmFsbHkgcmVhY2ggdGhlIG5leHQgc25hcCBw
b2ludCwgYW5kIHRodXMgcmVxdWlyZXMgYSBib29zdCAoc2VlIGluaXRpYWxpemVHbGlkZVBhcmFt
ZXRlcnMpCisvLyAgIDIuIGRlbHRhKDEpID0gVkYsIHNpbmNlIGF0IHQ9MSwgdGhlIGFuaW1hdGlv
biBoYXMgY29tcGxldGVkIGFuZCB3ZSB3YW50IHRoZSBsYXN0IHdoZWVsIGRlbHRhIHRvIG1hdGNo
IHRoZSBmaW5hbCB2ZWxvY2l0eSBWRi4gTm90ZSB0aGF0IHRoaXMKKy8vICAgICAgZG9lc24ndCBn
dWFyYW50ZWUgdGhhdCB0aGUgZmluYWwgdmVsb2NpdHkgd2lsbCBiZSBleGFjdGx5IFZGLiBIb3dl
dmVyLCBhc3N1bWluZyB0aGF0IHRoZSBpbml0aWFsIHZlbG9jaXR5IGlzIG11Y2ggbGVzcyB0aGFu
IFRPVEFMX0RJU1RBTkNFLAorLy8gICAgICB0aGUgbGFzdCB3aGVlbCBkZWx0YSB3aWxsIGJlIHZl
cnkgY2xvc2UsIGlmIG5vdCB0aGUgc2FtZSwgYXMgVkYuCisvLyBGb3IgTUFHTklUVURFID0gKFYw
ICsgVkYpIC8gMiBhbmQgUEhBU0VfU0hJRlQgPSBhcmNjb3MoKFYwIC0gVkYpIC8gKFYwICsgVkYp
KSwgb2JzZXJ2ZSB0aGF0IGRlbHRhKDApIGFuZCBkZWx0YSgxKSBldmFsdWF0ZSByZXNwZWN0aXZl
bHkgdG8gVjAKKy8vIGFuZCBWRi4gVGh1cywgd2UgY2FuIGV4cHJlc3Mgb3VyIGdsaWRpbmcgZXF1
YXRpb24gYWxsIGluIHRlcm1zIG9mIFYwLCBWRiBhbmQgdC4KK2Zsb2F0IEF4aXNTY3JvbGxTbmFw
QW5pbWF0b3I6OmNvbXB1dGVHbGlkZURlbHRhKCkgY29uc3QKK3sKKyAgICBMYXlvdXRVbml0IG9m
ZnNldCA9IG1fY2xpZW50LT5zY3JvbGxPZmZzZXRJbkF4aXMobV9heGlzKTsKKyAgICBib29sIGNh
bkNvbXB1dGVHbGlkZSA9IChtX2luaXRpYWxPZmZzZXQgPD0gb2Zmc2V0ICYmIG9mZnNldCA8IG1f
dGFyZ2V0T2Zmc2V0KSB8fCAobV90YXJnZXRPZmZzZXQgPCBvZmZzZXQgJiYgb2Zmc2V0IDw9IG1f
aW5pdGlhbE9mZnNldCk7CisgICAgaWYgKG1fY3VycmVudFN0YXRlICE9IFNjcm9sbFNuYXBTdGF0
ZTo6R2xpZGluZyB8fCAhY2FuQ29tcHV0ZUdsaWRlKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGZsb2F0IHByb2dyZXNzID0gKChmbG9hdCkob2Zmc2V0IC0gbV9pbml0aWFsT2Zmc2V0KSkgLyAo
bV90YXJnZXRPZmZzZXQgLSBtX2luaXRpYWxPZmZzZXQpOworICAgIGZsb2F0IHNoaWZ0ID0gY2Vp
bChtX2dsaWRlTWFnbml0dWRlICogKDEgKyBjb3MocGlGbG9hdCAqIHByb2dyZXNzICsgbV9nbGlk
ZVBoYXNlU2hpZnQpKSk7CisgICAgc2hpZnQgPSBtX2luaXRpYWxPZmZzZXQgPCBtX3RhcmdldE9m
ZnNldCA/IHN0ZDo6bWF4PGZsb2F0PihzaGlmdCwgMSkgOiBzdGQ6Om1pbjxmbG9hdD4oc2hpZnQs
IC0xKTsKKyAgICBpZiAoKG1faW5pdGlhbE9mZnNldCA8IG1fdGFyZ2V0T2Zmc2V0ICYmIG9mZnNl
dCArIHNoaWZ0ID4gbV90YXJnZXRPZmZzZXQpIHx8IChtX2luaXRpYWxPZmZzZXQgPiBtX3Rhcmdl
dE9mZnNldCAmJiBvZmZzZXQgKyBzaGlmdCA8IG1fdGFyZ2V0T2Zmc2V0KSkKKyAgICAgICAgcmV0
dXJuIG1fdGFyZ2V0T2Zmc2V0IC0gb2Zmc2V0OworCisgICAgcmV0dXJuIHNoaWZ0OworfQorCit2
b2lkIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmluaXRpYWxpemVHbGlkZVBhcmFtZXRlcnMoYm9v
bCBzaG91bGRJbmNyZWFzZUluaXRpYWxXaGVlbERlbHRhKQoreworICAgIC8vIEZJWE1FOiBHbGlk
ZSBib29zdCBpcyBhIGhhY2t5IHdheSB0byBzcGVlZCB1cCBuYXR1cmFsIHNjcm9sbGluZyB2ZWxv
Y2l0eS4gV2Ugc2hvdWxkIGZpbmQgYSBiZXR0ZXIgd2F5IHRvIGFjY29tcGxpc2ggdGhpcy4KKyAg
ICBpZiAoc2hvdWxkSW5jcmVhc2VJbml0aWFsV2hlZWxEZWx0YSkKKyAgICAgICAgbV9nbGlkZUlu
aXRpYWxXaGVlbERlbHRhICo9IGdsaWRlQm9vc3RNdWx0aXBsaWVyOworCisgICAgLy8gRklYTUU6
IFRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgd2F5IHRvIGRldGVybWluZSBhIGdvb2QgdGFyZ2V0IGRl
bHRhIHRoYW4gbXVsdGlwbHlpbmcgYnkgYSBmYWN0b3IgYW5kIGNsYW1waW5nIHRvIG1pbi9tYXgg
dmFsdWVzLgorICAgIGZsb2F0IHRhcmdldEZpbmFsV2hlZWxEZWx0YSA9IGluaXRpYWxUb0ZpbmFs
TW9tZW50dW1GYWN0b3IgKiAobV9nbGlkZUluaXRpYWxXaGVlbERlbHRhIDwgMCA/IC1tX2dsaWRl
SW5pdGlhbFdoZWVsRGVsdGEgOiBtX2dsaWRlSW5pdGlhbFdoZWVsRGVsdGEpOworICAgIHRhcmdl
dEZpbmFsV2hlZWxEZWx0YSA9IHN0ZDo6bWluKHN0ZDo6bWF4KHRhcmdldEZpbmFsV2hlZWxEZWx0
YSwgbWluVGFyZ2V0V2hlZWxEZWx0YSksIG1heFRhcmdldFdoZWVsRGVsdGEpOworICAgIG1fZ2xp
ZGVNYWduaXR1ZGUgPSAobV9nbGlkZUluaXRpYWxXaGVlbERlbHRhICsgdGFyZ2V0RmluYWxXaGVl
bERlbHRhKSAvIDI7CisgICAgbV9nbGlkZVBoYXNlU2hpZnQgPSBhY29zKChtX2dsaWRlSW5pdGlh
bFdoZWVsRGVsdGEgLSB0YXJnZXRGaW5hbFdoZWVsRGVsdGEpIC8gKG1fZ2xpZGVJbml0aWFsV2hl
ZWxEZWx0YSArIHRhcmdldEZpbmFsV2hlZWxEZWx0YSkpOworfQorCit2b2lkIEF4aXNTY3JvbGxT
bmFwQW5pbWF0b3I6OnB1c2hJbml0aWFsV2hlZWxEZWx0YShmbG9hdCB3aGVlbERlbHRhKQorewor
ICAgIGlmIChtX251bVdoZWVsRGVsdGFzVHJhY2tlZCA8IHdoZWVsRGVsdGFXaW5kb3dTaXplKQor
ICAgICAgICBtX3doZWVsRGVsdGFXaW5kb3dbbV9udW1XaGVlbERlbHRhc1RyYWNrZWQrK10gPSB3
aGVlbERlbHRhOworfQorCitmbG9hdCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjphdmVyYWdlSW5p
dGlhbFdoZWVsRGVsdGEoKSBjb25zdAoreworICAgIGlmICghbV9udW1XaGVlbERlbHRhc1RyYWNr
ZWQpCisgICAgICAgIHJldHVybiAwOworCisgICAgZmxvYXQgc3VtID0gMDsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG1fbnVtV2hlZWxEZWx0YXNUcmFja2VkOyBpKyspCisgICAgICAgIHN1bSAr
PSBtX3doZWVsRGVsdGFXaW5kb3dbaV07CisKKyAgICByZXR1cm4gc3VtIC8gbV9udW1XaGVlbERl
bHRhc1RyYWNrZWQ7Cit9CisKK3ZvaWQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6Y2xlYXJJbml0
aWFsV2hlZWxEZWx0YVdpbmRvdygpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX251bVdo
ZWVsRGVsdGFzVHJhY2tlZDsgaSsrKQorICAgICAgICBtX3doZWVsRGVsdGFXaW5kb3dbaV0gPSAw
OworCisgICAgbV9udW1XaGVlbERlbHRhc1RyYWNrZWQgPSAwOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDU1NfU0NST0xMX1NOQVAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236597</attachid>
            <date>2014-08-14 09:56:14 -0700</date>
            <delta_ts>2014-08-14 12:40:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135768-20140814095604.patch</filename>
            <type>text/plain</type>
            <size>30132</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyNTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmJhYWNhMzczMjY3Njgy
OWQyNjA4ZmMxYzVjNTMxMmM5M2YzOGEwMi4uOTA1MTE5NTkzNWFlNTQ0MDIyM2UxMTVlYjNiNjFh
YTc1MWJmMTE5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE0LTA4LTE0ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBz
Y3JvbGwgc25hcHBpbmcgYW5pbWF0aW9ucyBvbiBNYWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTc2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGluZyB0aGUgc2Nyb2xsIHNuYXAgYW5p
bWF0aW9ucyByZXF1aXJlZCBmb3Igc25hcHBpbmcgaW4gYm90aCBvdmVyZmxvdyBhbmQgbWFpbmZy
YW1lIGFyZWFzIG9uIE1hYy4gU2luY2Ugd2UgcmVjZWl2ZSBhIHNlcmllcworICAgICAgICBvZiBk
aXNjcmV0ZSB3aGVlbCBldmVudHMsIHdlIG5lZWQgdG8gcHJlZGljdCB0aGUgZGlzdGFuY2Ugd2Ug
bmVlZCB0byB0cmF2ZXJzZSwgY29tcHV0ZSB0aGUgYXBwcm9wcmlhdGUgc25hcCBwb2ludCwgYW5k
IHRoZW4gY29tcHV0ZQorICAgICAgICBhbiBhbmltYXRpb24gY3VydmUgdG8gdGhhdCBsb2NhdGlv
bi4gVGhlIHNuYXAgYW5pbWF0aW9ucyBhcmUgc3BsaXQgaW50byB0d28gdHlwZXM6IHNuYXBwaW5n
LCB3aGljaCBoYW5kbGVzIGxldHRpbmcgZ28gb2YgdGhlIHRyYWNrcGFkCisgICAgICAgIHdpdGgg
emVybyB2ZWxvY2l0eSwgYW5kIGdsaWRpbmcsIHdoaWNoIGhhbmRsZXMgZmxpY2sgZ2VzdHVyZXMu
IEluIGJvdGggY2FzZXMsIHNpbnVzb2lkYWwgY3VydmVzIGFyZSB1c2VkIHRvIGVhc2UgYW5pbWF0
aW9uIHRvIHRoZSB0YXJnZXQKKyAgICAgICAgbG9jYXRpb24uIEluIHRoZSBmb3JtZXIgY2FzZSwg
dGhlIGluaXRpYWwgdmVsb2NpdHkgaXMgbG93LCBhbmQgaW5jcmVhc2VzIHRvIGEgbWF4aW11bSB2
YWx1ZSBkdXJpbmcgdGhlIG1pZGRsZSBvZiB0aGUgYW5pbWF0aW9uIGJlZm9yZQorICAgICAgICBk
ZWNyZWFzaW5nIHRvIDAuIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIGN1cnZlIGlzIGNvbXB1dGVk
IHN1Y2ggdGhhdCB0aGUgaW5pdGlhbCB2ZWxvY2l0eSBtYXRjaGVzIHRoZSB1c2VyJ3Mgc2Nyb2xs
IHZlbG9jaXR5LCBhbmQgdGhlCisgICAgICAgIGZpbmFsIHZlbG9jaXR5IG1hdGNoZXMgYSBsb3dl
ciBmaW5hbCB2ZWxvY2l0eSB0aGF0IGlzIHNvbWV3aGF0IGFyYml0cmFyaWx5IGNvbXB1dGVkLiAo
U2VlIHRoZSBGSVhNRSBpbgorICAgICAgICBBeGlzU2Nyb2xsU25hcE9mZnNldHM6OmluaXRpYWxp
emVHbGlkZVBhcmFtZXRlcnMpLiBIb3cgdGhlIGVxdWF0aW9ucyBhbmQgY29uc3RhbnRzIHdlcmUg
Y2hvc2VuIGlzIGRlc2NyaWJlZCBpbiBncmVhdGVyIGRldGFpbCBpbiB0aGUKKyAgICAgICAgY29t
bWVudHMgYWJvdmUgQXhpc1Njcm9sbFNuYXBPZmZzZXRzOjpjb21wdXRlR2xpZGVEZWx0YSBhbmQg
QXhpc1Njcm9sbFNuYXBPZmZzZXRzOjpjb21wdXRlU25hcERlbHRhLiBOb3RlIHRoYXQgdGhlIGZp
bmFsIHZlbG9jaXR5IHNob3VsZAorICAgICAgICBpZGVhbGx5IGJlIGVxdWFsIHRvIDAuIEhvd2V2
ZXIsIHdpdGggdGhpcyBwYXJ0aWN1bGFyIGN1cnZlLCB0aGlzIGNhdXNlZCB0aGUgYW5pbWF0aW9u
IHRvIGZlZWwgdG9vIHNsb3cgbmVhciB0aGUgc25hcCBwb2ludC4KKworICAgICAgICBObyB0ZXN0
cywgc2luY2UgdGhlcmUgaXMgbm8gb2JzZXJ2YWJsZSBjaGFuZ2UgaW4gYmVoYXZpb3IuIFRlc3Rz
IHdpbGwgYmUgaW5jbHVkZWQgd2hlbiBpT1MgYW5kIE1hYyBzY3JvbGxpbmcgYXJlYXMgaG9vayBp
bnRvIHRoaXMgY29kZS4KKworICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogCisgICAgICAgICogcGFnZS9zY3Jv
bGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcDogCisgICAgICAgIChXZWJDb3JlOjpjbG9z
ZXN0U25hcE9mZnNldCk6IENvbXB1dGVzIHRoZSBjbG9zZXN0IHNuYXAgb2Zmc2V0IGdpdmVuIHZl
bG9jaXR5IGFuZCBwcmRpY3RlZCBkZXN0aW5hdGlvbi4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQXhpc1Nj
cm9sbFNuYXBBbmltYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxT
bmFwQW5pbWF0b3JDbGllbnQ6On5BeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjp0b1doZWVsRXZlbnRTdGF0dXMpOiBDb252ZXJ0cyBhIHBhaXIgb2YgUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2VzIHRvIGEgV2hlZWxFdmVudFN0YXR1cy4KKyAgICAgICAgKFdl
YkNvcmU6OnByb2plY3RlZEluZXJ0aWFsU2Nyb2xsRGlzdGFuY2UpOiBBdHRlbXB0cyB0byBwcmVk
aWN0IHRoZSBkaXN0YW5jZSBjb3ZlcmVkIGJ5IHRoZSBpbmVydGlhbCBzY3JvbGxpbmcgcGhhc2Uu
CisgICAgICAgIChXZWJDb3JlOjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpBeGlzU2Nyb2xsU25h
cEFuaW1hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6Omhh
bmRsZVdoZWVsRXZlbnQpOiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgQXhpc1Nj
cm9sbFNuYXBBbmltYXRvciwgZ2l2ZW4gYSBQbGF0Zm9ybVdoZWVsRXZlbnQKKyAgICAgICAgKFdl
YkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OnNob3VsZE92ZXJyaWRlV2hlZWxFdmVudCk6
IERldGVybWluZXMgd2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIG92ZXJyaWRlIGEgd2hlZWwgZXZl
bnQgZ2l2ZW4gdGhlIGFuaW1hdG9yJ3MgaW50ZXJuYWwgc3RhdGUuCisgICAgICAgIChXZWJDb3Jl
OjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpzY3JvbGxTbmFwQW5pbWF0aW9uVXBkYXRlKTogVXBk
YXRlcyBhIHNpbmdsZSBsb29wIG9mIHRoZSBzY3JvbGwgc25hcHBpbmcgYW5pbWF0aW9uLgorICAg
ICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6YmVnaW5TY3JvbGxTbmFwQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmVuZFNj
cm9sbFNuYXBBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmlt
YXRvcjo6Y29tcHV0ZVNuYXBEZWx0YSk6IFNlZSBjb21tZW50cyBmb3IgbW9yZSBpbmZvcm1hdGlv
bi4KKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmNvbXB1dGVHbGlk
ZURlbHRhKTogU2VlIGNvbW1lbnRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAoV2Vi
Q29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6aW5pdGlhbGl6ZUdsaWRlUGFyYW1ldGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpwdXNoSW5pdGlhbFdo
ZWVsRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6YXZl
cmFnZUluaXRpYWxXaGVlbERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFw
QW5pbWF0b3I6OmNsZWFySW5pdGlhbFdoZWVsRGVsdGFXaW5kb3cpOgorCiAyMDE0LTA4LTE0ICBK
ZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFtNU0VdIEFsdGVyaW5n
IHRoZSBxdWFsaXR5IG9mIGEgWW91VHViZSB2aWRlbyB3aWxsIGNhdXNlIHRoZSB2aWRlbyB0byBk
aXN0b3J0IGFuZCBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21h
a2UKaW5kZXggNDE4YzI1NDQ4NDA1Yjk1MjlkYjc0OWMzYzVmNzQxYmZmOTcwM2EwZS4uNTZiNDg3
MjM2OTAyNDJjYjMwZWVkNTQ2NDRiODMyZGU3ZDgzM2I0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMu
Y21ha2UKQEAgLTkzLDYgKzkzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhEYXRhLmNwcAogCisgICAg
cGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0KICAgICBwbGF0Zm9ybS9tYWMv
QmxvY2tFeGNlcHRpb25zLm1tCiAgICAgcGxhdGZvcm0vbWFjL0NvbnRlbnRGaWx0ZXJNYWMubW0K
ICAgICBwbGF0Zm9ybS9tYWMvQ29udGV4dE1lbnVJdGVtTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjBhYTA0MWRjYjI3
YmUzZTgyZjg4Y2I4YWQxNjYzOGY4NTUzOTVlOC4uMzFhZWFjMmE2MTU3YTVmZGUwMTM4Mzc2NTBl
NTg0NDcwNjQ5MzE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNjI0Nyw2ICs2MjQ3LDggQEAKIAkJRjQyRkZCNDYxOTg0Qjcx
NjAwRjY4MzdGIC8qIExlbmd0aFJlcGVhdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjQyRkZCNDUxOTg0QjcxNjAwRjY4MzdGIC8qIExlbmd0aFJlcGVh
dC5oICovOyB9OwogCQlGNDVDMjMxRDE5OTVCNzNCMDBBNkUyRTMgLyogQXhpc1Njcm9sbFNuYXBP
ZmZzZXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY0NUMyMzFCMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuY3BwICov
OyB9OwogCQlGNDVDMjMxRTE5OTVCNzNCMDBBNkUyRTMgLyogQXhpc1Njcm9sbFNuYXBPZmZzZXRz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNDVDMjMx
QzE5OTVCNzNCMDBBNkUyRTMgLyogQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRjQ3ODc1NTQxOTk4M0FGRjAw
MjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0Nzg3NTUyMTk5ODNBRkYwMDI0QTI4NyAvKiBBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJRjQ3ODc1NTUxOTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFw
QW5pbWF0b3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNDc4NzU1MzE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbSAq
LzsgfTsKIAkJRjQ3QTVFM0UxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3QTVF
M0IxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0N0E1RTNGMTk1QjhFNDgw
MDQ4MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3QTVFM0ExOTVCOEM4QTAwNDgzMTAwIC8qIFN0
eWxlU2Nyb2xsU25hcFBvaW50cy5jcHAgKi87IH07CiAJCUY1MDY2NEY3MTU3RjUyREMwMEFDMjI2
RiAvKiBGb3JtQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTA2NjRGNTE1N0Y1MkRDMDBBQzIyNkYgLyogRm9ybUNvbnRyb2xsZXIu
Y3BwICovOyB9OwpAQCAtMTM3NjYsNiArMTM3NjgsOCBAQAogCQlGNDJGRkI0NTE5ODRCNzE2MDBG
NjgzN0YgLyogTGVuZ3RoUmVwZWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExlbmd0aFJlcGVhdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDVDMjMxQjE5
OTVCNzNCMDBBNkUyRTMgLyogQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NUMyMzFDMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlz
U2Nyb2xsU25hcE9mZnNldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXhp
c1Njcm9sbFNuYXBPZmZzZXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUY0Nzg3
NTUyMTk5ODNBRkYwMDI0QTI4NyAvKiBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjQ3ODc1NTMxOTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNT
Y3JvbGxTbmFwQW5pbWF0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGNDdBNUUzQTE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0eWxlU2Nyb2xsU25hcFBv
aW50cy5jcHA7IHBhdGggPSBzdHlsZS9TdHlsZVNjcm9sbFNuYXBQb2ludHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNDdBNUUzQjE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVT
Y3JvbGxTbmFwUG9pbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0eWxl
U2Nyb2xsU25hcFBvaW50cy5oOyBwYXRoID0gc3R5bGUvU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1MDY2NEY1MTU3RjUyREMwMEFDMjI2RiAv
KiBGb3JtQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBGb3JtQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjQw
OCw2ICsxNjQxMiw4IEBACiAJCTY1ODJBMTQ4MDk5OTlENkMwMEJFRUI2RCAvKiBtYWMgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUY0Nzg3NTUyMTk5ODNB
RkYwMDI0QTI4NyAvKiBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmggKi8sCisJCQkJRjQ3ODc1NTMx
OTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0gKi8sCiAJCQkJNjVB
NjQwRjAwNTMzQkIxRjAwODVFNzc3IC8qIEJsb2NrRXhjZXB0aW9ucy5oICovLAogCQkJCTY1Rjgw
Njk3MDU0RDlGODYwMDhCRjc3NiAvKiBCbG9ja0V4Y2VwdGlvbnMubW0gKi8sCiAJCQkJMjkxOUEx
RUExNkIzMzc4OTAwNzg3MjEzIC8qIENvbnRlbnRGaWx0ZXJNYWMubW0gKi8sCkBAIC0yNjI1OSw2
ICsyNjI2NSw3IEBACiAJCQkJQjIyMjdBOTcwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1ByZXNlcnZl
QXNwZWN0UmF0aW8uaCBpbiBIZWFkZXJzICovLAogCQkJCTA4OEEwRTBBMTI2RUYxREIwMDk3OEY3
QSAvKiBTVkdQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgxREQ0OUMxM0JBMUE2MDAw
REM3NjI3IC8qIFNWR1Byb3BlcnR5SW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJRjQ3ODc1NTQx
OTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTA4OEEwRTBCMTI2RUYxREIwMDk3OEY3QSAvKiBTVkdQcm9wZXJ0eVRlYXJPZmYuaCBp
biBIZWFkZXJzICovLAogCQkJCTA4OEEwRTBDMTI2RUYxREIwMDk3OEY3QSAvKiBTVkdQcm9wZXJ0
eVRyYWl0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBOUEwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODE3NCw2ICsy
ODE4MSw3IEBACiAJCQkJQkU2MTAzOUQxOEE5RDY1MjAwREQ1MEQ3IC8qIEpTRGF0YUN1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0MTYyQTQ1NzEwMTE0NjQ3MDBERkYzRUQgLyogSlNEZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTYyQTQ1NDEwMTE0
NUUzMDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlGNDc4NzU1NTE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Njcm9sbFNu
YXBBbmltYXRvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZEQTE1RUQxMTJCMDNGOTQwMDNBNTgz
QSAvKiBKU0RlbGF5Tm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMUZCMUE2NTEyMEE1RDNG
MDBEQzAyQTAgLyogSlNEZXZpY2VNb3Rpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkz
MUZCMUE2QzEyMEE1RDY5MDBEQzAyQTAgLyogSlNEZXZpY2VNb3Rpb25FdmVudEN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
QXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgKaW5kZXggZWRkZmM0YTM5ZDI2ODcyMDcwMDQ4NDkxNzAy
OThjNDRhNTVkYTMxYS4uNTIxN2QxZjcxYTE5Zjc0ZjI5NWJhYjVmZjhlZGQyZjYxNmM5MzdjZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBP
ZmZzZXRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNu
YXBPZmZzZXRzLmgKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCiAKLSNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIK
ICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAg
LTQyLDYgKzQxLDQwIEBAIGNsYXNzIFNjcm9sbGFibGVBcmVhOwogCiB2b2lkIHVwZGF0ZVNuYXBP
ZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmLCBIVE1MRWxlbWVudCYgc2Ny
b2xsaW5nRWxlbWVudCwgY29uc3QgUmVuZGVyQm94JiBzY3JvbGxpbmdFbGVtZW50Qm94LCBjb25z
dCBSZW5kZXJTdHlsZSYgc2Nyb2xsaW5nRWxlbWVudFN0eWxlKTsKIAordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CitUIGNsb3Nlc3RTbmFwT2Zmc2V0KGNvbnN0IFZlY3RvcjxUPiYgc25hcE9mZnNldHMs
IFQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5KQoreworICAgIEFTU0VSVChzbmFw
T2Zmc2V0cy5zaXplKCkpOworICAgIGlmIChzY3JvbGxEZXN0aW5hdGlvbiA8PSBzbmFwT2Zmc2V0
cy5maXJzdCgpKQorICAgICAgICByZXR1cm4gc25hcE9mZnNldHMuZmlyc3QoKTsKKworICAgIGlm
IChzY3JvbGxEZXN0aW5hdGlvbiA+PSBzbmFwT2Zmc2V0cy5sYXN0KCkpCisgICAgICAgIHJldHVy
biBzbmFwT2Zmc2V0cy5sYXN0KCk7CisKKyAgICBzaXplX3QgbG93ZXJJbmRleCA9IDA7CisgICAg
c2l6ZV90IHVwcGVySW5kZXggPSBzbmFwT2Zmc2V0cy5zaXplKCkgLSAxOworICAgIHdoaWxlIChs
b3dlckluZGV4IDwgdXBwZXJJbmRleCAtIDEpIHsKKyAgICAgICAgc2l6ZV90IG1pZGRsZUluZGV4
ID0gKGxvd2VySW5kZXggKyB1cHBlckluZGV4KSAvIDI7CisgICAgICAgIGlmIChzY3JvbGxEZXN0
aW5hdGlvbiA8IHNuYXBPZmZzZXRzW21pZGRsZUluZGV4XSkKKyAgICAgICAgICAgIHVwcGVySW5k
ZXggPSBtaWRkbGVJbmRleDsKKyAgICAgICAgZWxzZSBpZiAoc2Nyb2xsRGVzdGluYXRpb24gPiBz
bmFwT2Zmc2V0c1ttaWRkbGVJbmRleF0pCisgICAgICAgICAgICBsb3dlckluZGV4ID0gbWlkZGxl
SW5kZXg7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdXBwZXJJbmRleCA9IG1pZGRsZUlu
ZGV4OworICAgICAgICAgICAgbG93ZXJJbmRleCA9IG1pZGRsZUluZGV4OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgVCBsb3dlclNuYXBQb3NpdGlvbiA9IHNuYXBP
ZmZzZXRzW2xvd2VySW5kZXhdOworICAgIFQgdXBwZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0
c1t1cHBlckluZGV4XTsKKyAgICAvLyBOb256ZXJvIHZlbG9jaXR5IGluZGljYXRlcyBhIGZsaWNr
IGdlc3R1cmUuIEV2ZW4gaWYgYW5vdGhlciBzbmFwIHBvaW50IGlzIGNsb3Nlciwgc25hcCB0byB0
aGUgb25lIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGZsaWNrIGdlc3R1cmUuCisgICAgaWYgKHZl
bG9jaXR5KQorICAgICAgICByZXR1cm4gdmVsb2NpdHkgPCAwID8gbG93ZXJTbmFwUG9zaXRpb24g
OiB1cHBlclNuYXBQb3NpdGlvbjsKKworICAgIGJvb2wgaXNDbG9zZXJUb0xvd2VyU25hcFBvc2l0
aW9uID0gc2Nyb2xsRGVzdGluYXRpb24gLSBsb3dlclNuYXBQb3NpdGlvbiA8PSB1cHBlclNuYXBQ
b3NpdGlvbiAtIHNjcm9sbERlc3RpbmF0aW9uOworICAgIHJldHVybiBpc0Nsb3NlclRvTG93ZXJT
bmFwUG9zaXRpb24gPyBsb3dlclNuYXBQb3NpdGlvbiA6IHVwcGVyU25hcFBvc2l0aW9uOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBDU1NfU0NST0xMX1NOQVAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1h
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRv
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmYzMDg0OWI0YTk2NWIyOTkxYTJjNzk0MWY4NDk4YjRmY2YwZWNjN2YK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Njcm9s
bFNuYXBBbmltYXRvci5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBB
eGlzU2Nyb2xsU25hcEFuaW1hdG9yX2gKKyNkZWZpbmUgQXhpc1Njcm9sbFNuYXBBbmltYXRvcl9o
CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorCisjaW5jbHVkZSAiQXhpc1Njcm9sbFNu
YXBPZmZzZXRzLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworZW51bSBjbGFzcyBTY3JvbGxTbmFwU3RhdGUgeworICAgIFNuYXBwaW5nLAorICAg
IEdsaWRpbmcsCisgICAgSWRsZQorfTsKKworZW51bSBjbGFzcyBXaGVlbEV2ZW50U3RhdHVzIHsK
KyAgICBVc2VyU2Nyb2xsQmVnaW4sCisgICAgVXNlclNjcm9sbGluZywKKyAgICBVc2VyU2Nyb2xs
RW5kLAorICAgIEluZXJ0aWFsU2Nyb2xsQmVnaW4sCisgICAgSW5lcnRpYWxTY3JvbGxpbmcsCisg
ICAgSW5lcnRpYWxTY3JvbGxFbmQsCisgICAgVW5rbm93bgorfTsKKworY2xhc3MgQXhpc1Njcm9s
bFNuYXBBbmltYXRvckNsaWVudCB7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+QXhpc1Njcm9s
bFNuYXBBbmltYXRvckNsaWVudCgpIHsgfQorCitwdWJsaWM6CisgICAgdmlydHVhbCBMYXlvdXRV
bml0IHNjcm9sbE9mZnNldEluQXhpcyhTY3JvbGxFdmVudEF4aXMpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgaW1tZWRpYXRlU2Nyb2xsSW5BeGlzKFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgdmVsb2Np
dHkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRTY3JvbGxTbmFwVGltZXIoKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHN0b3BTY3JvbGxTbmFwVGltZXIoKSA9IDA7Cit9OworCitjbGFzcyBB
eGlzU2Nyb2xsU25hcEFuaW1hdG9yIHsKK3B1YmxpYzoKKyAgICBBeGlzU2Nyb2xsU25hcEFuaW1h
dG9yKEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQqLCBWZWN0b3I8TGF5b3V0VW5pdD4qIHNu
YXBPZmZzZXRzLCBTY3JvbGxFdmVudEF4aXMpOworICAgIHZvaWQgaGFuZGxlV2hlZWxFdmVudChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKyAgICBib29sIHNob3VsZE92ZXJyaWRlV2hlZWxF
dmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBjb25zdDsKKyAgICB2b2lkIHNjcm9sbFNu
YXBBbmltYXRpb25VcGRhdGUoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGJlZ2luU2Nyb2xsU25h
cEFuaW1hdGlvbihTY3JvbGxTbmFwU3RhdGUpOworICAgIHZvaWQgZW5kU2Nyb2xsU25hcEFuaW1h
dGlvbigpOworCisgICAgZmxvYXQgY29tcHV0ZVNuYXBEZWx0YSgpIGNvbnN0OworICAgIGZsb2F0
IGNvbXB1dGVHbGlkZURlbHRhKCkgY29uc3Q7CisKKyAgICB2b2lkIGluaXRpYWxpemVHbGlkZVBh
cmFtZXRlcnMoYm9vbCk7CisgICAgdm9pZCBwdXNoSW5pdGlhbFdoZWVsRGVsdGEoZmxvYXQpOwor
ICAgIGZsb2F0IGF2ZXJhZ2VJbml0aWFsV2hlZWxEZWx0YSgpIGNvbnN0OworICAgIHZvaWQgY2xl
YXJJbml0aWFsV2hlZWxEZWx0YVdpbmRvdygpOworCisgICAgc3RhdGljIGNvbnN0IGludCB3aGVl
bERlbHRhV2luZG93U2l6ZSA9IDM7CisKKyAgICBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50
KiBtX2NsaWVudDsKKyAgICBWZWN0b3I8TGF5b3V0VW5pdD4qIG1fc25hcE9mZnNldHM7CisgICAg
U2Nyb2xsRXZlbnRBeGlzIG1fYXhpczsKKyAgICAvLyBVc2VkIHRvIHRyYWNrIGJvdGggc25hcHBp
bmcgYW5kIGdsaWRpbmcgYmVoYXZpb3JzLgorICAgIFNjcm9sbFNuYXBTdGF0ZSBtX2N1cnJlbnRT
dGF0ZTsKKyAgICBMYXlvdXRVbml0IG1faW5pdGlhbE9mZnNldDsKKyAgICBMYXlvdXRVbml0IG1f
dGFyZ2V0T2Zmc2V0OworICAgIC8vIFVzZWQgdG8gdHJhY2sgZ2xpZGluZyBiZWhhdmlvci4KKyAg
ICBMYXlvdXRVbml0IG1fYmVnaW5UcmFja2luZ1doZWVsRGVsdGFPZmZzZXQ7CisgICAgaW50IG1f
bnVtV2hlZWxEZWx0YXNUcmFja2VkOworICAgIGZsb2F0IG1fd2hlZWxEZWx0YVdpbmRvd1t3aGVl
bERlbHRhV2luZG93U2l6ZV07CisgICAgZmxvYXQgbV9nbGlkZU1hZ25pdHVkZTsKKyAgICBmbG9h
dCBtX2dsaWRlUGhhc2VTaGlmdDsKKyAgICBmbG9hdCBtX2dsaWRlSW5pdGlhbFdoZWVsRGVsdGE7
CisgICAgYm9vbCBtX3Nob3VsZE92ZXJyaWRlV2hlZWxFdmVudDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisKKyNlbmRp
ZiAvLyBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjExM2Q2
OGY3NjQzYmY5NmM4N2NhMzlkNzY4MjcyZTM3M2NjYzY0ZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tCkBAIC0w
LDAgKzEsMjk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCIKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgZmxvYXQgaW5lcnRpYWxTY3JvbGxQcmVk
aWN0aW9uRmFjdG9yID0gMTYuNjc4OTsKK2NvbnN0IGZsb2F0IHNuYXBNYWduaXR1ZGVNYXggPSAy
NTsKK2NvbnN0IGZsb2F0IHNuYXBNYWduaXR1ZGVNaW4gPSA1OworY29uc3QgZmxvYXQgc25hcFRo
cmVzaG9sZEhpZ2ggPSAxMDAwOworY29uc3QgZmxvYXQgc25hcFRocmVzaG9sZExvdyA9IDUwOwor
Y29uc3QgZmxvYXQgZ2xpZGVCb29zdE11bHRpcGxpZXIgPSAzLjU7Citjb25zdCBmbG9hdCBtYXhU
YXJnZXRXaGVlbERlbHRhID0gNzsKK2NvbnN0IGZsb2F0IG1pblRhcmdldFdoZWVsRGVsdGEgPSAz
LjU7Citjb25zdCBmbG9hdCBpbml0aWFsVG9GaW5hbE1vbWVudHVtRmFjdG9yID0gMS4wIC8gNDAu
MDsKKworc3RhdGljIGlubGluZSBXaGVlbEV2ZW50U3RhdHVzIHRvV2hlZWxFdmVudFN0YXR1cyhQ
bGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFzZSwgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgbW9t
ZW50dW1QaGFzZSkKK3sKKyAgICBpZiAocGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VO
b25lKSB7CisgICAgICAgIHN3aXRjaCAobW9tZW50dW1QaGFzZSkgeworICAgICAgICBjYXNlIFBs
YXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW46CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVu
dFN0YXR1czo6SW5lcnRpYWxTY3JvbGxCZWdpbjsKKworICAgICAgICBjYXNlIFBsYXRmb3JtV2hl
ZWxFdmVudFBoYXNlQ2hhbmdlZDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVz
OjpJbmVydGlhbFNjcm9sbGluZzsKKworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBo
YXNlRW5kZWQ6CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxT
Y3JvbGxFbmQ7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEV2
ZW50U3RhdHVzOjpVbmtub3duOyAKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobW9tZW50dW1Q
aGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpIHsKKyAgICAgICAgc3dpdGNoIChw
aGFzZSkgeworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW46CisgICAg
ICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEJlZ2luOworCisgICAg
ICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkOgorICAgICAgICAgICAgcmV0
dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxpbmc7CisKKyAgICAgICAgY2FzZSBQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkOgorICAgICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRT
dGF0dXM6OlVzZXJTY3JvbGxFbmQ7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0
IHByb2plY3RlZEluZXJ0aWFsU2Nyb2xsRGlzdGFuY2UoZmxvYXQgaW5pdGlhbFdoZWVsRGVsdGEp
Cit7CisgICAgLy8gRklYTUU6IEV4cGVyaW1lbnRzIHdpdGggaW5lcnRpYWwgc2Nyb2xsaW5nIHNo
b3cgYSBmYWlybHkgY29uc2lzdGVudCBsaW5lYXIgcmVsYXRpb25zaGlwIGJldHdlZW4gaW5pdGlh
bCB3aGVlbCBkZWx0YSBhbmQgdG90YWwgZGlzdGFuY2Ugc2Nyb2xsZWQuCisgICAgLy8gSW4gdGhl
IGZ1dHVyZSwgd2UnbGwgd2FudCB0byBmaW5kIGEgbW9yZSBhY2N1cmF0ZSB3YXkgb2YgaW5lcnRp
YWwgc2Nyb2xsIHByZWRpY3Rpb24uCisgICAgcmV0dXJuIGluZXJ0aWFsU2Nyb2xsUHJlZGljdGlv
bkZhY3RvciAqIGluaXRpYWxXaGVlbERlbHRhOworfQorCitBeGlzU2Nyb2xsU25hcEFuaW1hdG9y
OjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yKEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQqIGNs
aWVudCwgVmVjdG9yPExheW91dFVuaXQ+KiBzbmFwT2Zmc2V0cywgU2Nyb2xsRXZlbnRBeGlzIGF4
aXMpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3NuYXBPZmZzZXRzKHNuYXBPZmZz
ZXRzKQorICAgICwgbV9heGlzKGF4aXMpCisgICAgLCBtX2N1cnJlbnRTdGF0ZShTY3JvbGxTbmFw
U3RhdGU6OklkbGUpCisgICAgLCBtX2luaXRpYWxPZmZzZXQoMCkKKyAgICAsIG1fdGFyZ2V0T2Zm
c2V0KDApCisgICAgLCBtX2JlZ2luVHJhY2tpbmdXaGVlbERlbHRhT2Zmc2V0KDApCisgICAgLCBt
X251bVdoZWVsRGVsdGFzVHJhY2tlZCgwKQorICAgICwgbV9nbGlkZU1hZ25pdHVkZSgwKQorICAg
ICwgbV9nbGlkZVBoYXNlU2hpZnQoMCkKKyAgICAsIG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSgw
KQorICAgICwgbV9zaG91bGRPdmVycmlkZVdoZWVsRXZlbnQoZmFsc2UpCit7Cit9CisKK3ZvaWQg
QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmIGV2ZW50KQoreworICAgIGZsb2F0IHNjcm9sbERlbHRhID0gbV9heGlzID09IFNj
cm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCA/IC1ldmVudC5kZWx0YVgoKSA6IC1ldmVudC5kZWx0
YVkoKTsKKyAgICBXaGVlbEV2ZW50U3RhdHVzIHdoZWVsU3RhdHVzID0gdG9XaGVlbEV2ZW50U3Rh
dHVzKGV2ZW50LnBoYXNlKCksIGV2ZW50Lm1vbWVudHVtUGhhc2UoKSk7CisgICAgaWYgKCh3aGVl
bFN0YXR1cyA9PSBXaGVlbEV2ZW50U3RhdHVzOjpVc2VyU2Nyb2xsaW5nIHx8IHdoZWVsU3RhdHVz
ID09IFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsaW5nKSAmJiAhc2Nyb2xsRGVsdGEp
CisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAod2hlZWxTdGF0dXMpIHsKKyAgICBjYXNl
IFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxCZWdpbjoKKyAgICBjYXNlIFdoZWVsRXZlbnRT
dGF0dXM6OlVzZXJTY3JvbGxpbmc6CisgICAgICAgIGVuZFNjcm9sbFNuYXBBbmltYXRpb24oKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxF
bmQ6CisgICAgICAgIGJlZ2luU2Nyb2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFwU3RhdGU6OlNu
YXBwaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6Oklu
ZXJ0aWFsU2Nyb2xsQmVnaW46CisgICAgICAgIC8vIEJlZ2luIHRyYWNraW5nIHdoZWVsIGRlbHRh
cyBmb3IgZ2xpZGUgcHJlZGljdGlvbi4KKyAgICAgICAgZW5kU2Nyb2xsU25hcEFuaW1hdGlvbigp
OworICAgICAgICBwdXNoSW5pdGlhbFdoZWVsRGVsdGEoc2Nyb2xsRGVsdGEpOworICAgICAgICBt
X2JlZ2luVHJhY2tpbmdXaGVlbERlbHRhT2Zmc2V0ID0gbV9jbGllbnQtPnNjcm9sbE9mZnNldElu
QXhpcyhtX2F4aXMpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1
czo6SW5lcnRpYWxTY3JvbGxpbmc6CisgICAgICAgIGlmIChtX2N1cnJlbnRTdGF0ZSAhPSBTY3Jv
bGxTbmFwU3RhdGU6OkdsaWRpbmcpIHsKKyAgICAgICAgICAgIGlmIChtX251bVdoZWVsRGVsdGFz
VHJhY2tlZCA8IHdoZWVsRGVsdGFXaW5kb3dTaXplKQorICAgICAgICAgICAgICAgIHB1c2hJbml0
aWFsV2hlZWxEZWx0YShzY3JvbGxEZWx0YSk7CisKKyAgICAgICAgICAgIGlmIChtX251bVdoZWVs
RGVsdGFzVHJhY2tlZCA9PSB3aGVlbERlbHRhV2luZG93U2l6ZSkKKyAgICAgICAgICAgICAgICBi
ZWdpblNjcm9sbFNuYXBBbmltYXRpb24oU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nKTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6SW5lcnRp
YWxTY3JvbGxFbmQ6CisgICAgICAgIGNsZWFySW5pdGlhbFdoZWVsRGVsdGFXaW5kb3coKTsKKyAg
ICAgICAgbV9zaG91bGRPdmVycmlkZVdoZWVsRXZlbnQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVua25vd246CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK2Jvb2wgQXhpc1Njcm9s
bFNuYXBBbmltYXRvcjo6c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hl
ZWxFdmVudCYgZXZlbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2hvdWxkT3ZlcnJpZGVXaGVl
bEV2ZW50ICYmIHRvV2hlZWxFdmVudFN0YXR1cyhldmVudC5waGFzZSgpLCBldmVudC5tb21lbnR1
bVBoYXNlKCkpID09IFdoZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsaW5nOworfQorCit2
b2lkIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OnNjcm9sbFNuYXBBbmltYXRpb25VcGRhdGUoKQor
eworICAgIEFTU0VSVChtX2N1cnJlbnRTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcg
fHwgbV9jdXJyZW50U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZyk7CisgICAgZmxv
YXQgZGVsdGEgPSBtX2N1cnJlbnRTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nID8g
Y29tcHV0ZVNuYXBEZWx0YSgpIDogY29tcHV0ZUdsaWRlRGVsdGEoKTsKKyAgICBpZiAoZGVsdGEp
CisgICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3JvbGxJbkF4aXMobV9heGlzLCBkZWx0YSk7
CisgICAgZWxzZSB7CisgICAgICAgIG1fY3VycmVudFN0YXRlID0gU2Nyb2xsU25hcFN0YXRlOjpJ
ZGxlOworICAgICAgICBtX2NsaWVudC0+c3RvcFNjcm9sbFNuYXBUaW1lcigpOworICAgIH0KK30K
Kwordm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpiZWdpblNjcm9sbFNuYXBBbmltYXRpb24o
U2Nyb2xsU25hcFN0YXRlIG5ld1N0YXRlKQoreworICAgIEFTU0VSVChuZXdTdGF0ZSA9PSBTY3Jv
bGxTbmFwU3RhdGU6OkdsaWRpbmcgfHwgbmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpTbmFw
cGluZyk7CisgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0SW5B
eGlzKG1fYXhpcyk7CisgICAgZmxvYXQgaW5pdGlhbFdoZWVsRGVsdGEgPSBhdmVyYWdlSW5pdGlh
bFdoZWVsRGVsdGEoKTsKKyAgICBMYXlvdXRVbml0IHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9u
ID0gbmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nID8gbV9iZWdpblRyYWNraW5n
V2hlZWxEZWx0YU9mZnNldCArIExheW91dFVuaXQocHJvamVjdGVkSW5lcnRpYWxTY3JvbGxEaXN0
YW5jZShpbml0aWFsV2hlZWxEZWx0YSkpIDogb2Zmc2V0OworICAgIHByb2plY3RlZFNjcm9sbERl
c3RpbmF0aW9uID0gc3RkOjptaW4oc3RkOjptYXgocHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24s
IG1fc25hcE9mZnNldHMtPmZpcnN0KCkpLCBtX3NuYXBPZmZzZXRzLT5sYXN0KCkpOworICAgIG1f
aW5pdGlhbE9mZnNldCA9IG9mZnNldDsKKyAgICBtX3RhcmdldE9mZnNldCA9IGNsb3Nlc3RTbmFw
T2Zmc2V0PExheW91dFVuaXQ+KCptX3NuYXBPZmZzZXRzLCBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5h
dGlvbiwgaW5pdGlhbFdoZWVsRGVsdGEpOworICAgIGlmIChtX2luaXRpYWxPZmZzZXQgPT0gbV90
YXJnZXRPZmZzZXQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY3VycmVudFN0YXRlID0gbmV3
U3RhdGU7CisgICAgaWYgKG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZykgewor
ICAgICAgICBtX3Nob3VsZE92ZXJyaWRlV2hlZWxFdmVudCA9IHRydWU7CisgICAgICAgIG1fZ2xp
ZGVJbml0aWFsV2hlZWxEZWx0YSA9IGluaXRpYWxXaGVlbERlbHRhOworICAgICAgICBib29sIGds
aWRlUmVxdWlyZXNCb29zdDsKKyAgICAgICAgaWYgKGluaXRpYWxXaGVlbERlbHRhID4gMCkKKyAg
ICAgICAgICAgIGdsaWRlUmVxdWlyZXNCb29zdCA9IHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9u
IC0gb2Zmc2V0IDwgbV90YXJnZXRPZmZzZXQgLSBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbjsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ2xpZGVSZXF1aXJlc0Jvb3N0ID0gb2Zmc2V0IC0g
cHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24gPCBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiAt
IG1fdGFyZ2V0T2Zmc2V0OworCisgICAgICAgIGluaXRpYWxpemVHbGlkZVBhcmFtZXRlcnMoZ2xp
ZGVSZXF1aXJlc0Jvb3N0KTsKKyAgICB9CisgICAgbV9jbGllbnQtPnN0YXJ0U2Nyb2xsU25hcFRp
bWVyKCk7Cit9CisKK3ZvaWQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6ZW5kU2Nyb2xsU25hcEFu
aW1hdGlvbigpCit7CisgICAgaWYgKG1fY3VycmVudFN0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6
R2xpZGluZykKKyAgICAgICAgY2xlYXJJbml0aWFsV2hlZWxEZWx0YVdpbmRvdygpOworCisgICAg
bV9jdXJyZW50U3RhdGUgPSBTY3JvbGxTbmFwU3RhdGU6OklkbGU7CisgICAgbV9jbGllbnQtPnN0
b3BTY3JvbGxTbmFwVGltZXIoKTsKK30KKworLy8gQ29tcHV0ZXMgdGhlIGFtb3VudCB0byBzY3Jv
bGwgYnkgd2hlbiBwZXJmb3JtaW5nIGEgInNuYXAiIG9wZXJhdGlvbiwgaS5lLiB3aGVuIGEgdXNl
ciByZWxlYXNlcyB0aGUgdHJhY2twYWQgd2l0aG91dCBmbGlja2luZy4gVGhlIHNuYXAgZGVsdGEK
Ky8vIGlzIGEgZnVuY3Rpb24gb2YgcHJvZ3Jlc3MgdCwgd2hlcmUgdCBpcyBlcXVhbCB0byBESVNU
QU5DRV9UUkFWRUxFRCAvIFRPVEFMX0RJU1RBTkNFLCBESVNUQU5DRV9UUkFWRUxFRCBpcyB0aGUg
ZGlzdGFuY2UgZnJvbSB0aGUgaW5pdGlhbE9mZnNldAorLy8gdG8gdGhlIGN1cnJlbnQgb2Zmc2V0
LCBhbmQgVE9UQUxfRElTVEFOQ0UgaXMgdGhlIGRpc3RhbmNlIGZyb20gaW5pdGlhbE9mZnNldCB0
byB0YXJnZXRPZmZzZXQuIFRoZSBzbmFwcGluZyBlcXVhdGlvbiBpcyBhcyBmb2xsb3dzOgorLy8g
ZGVsdGEodCkgPSBNQUdOSVRVREUgKiBzaW4oUEkgKiB0KS4gTUFHTklUVURFIGluZGljYXRlcyB0
aGUgdG9wIHNwZWVkIHJlYWNoZWQgbmVhciB0aGUgbWlkZGxlIG9mIHRoZSBhbmltYXRpb24gKHQg
PSAwLjUpLCBhbmQgaXMgYSBsaW5lYXIKKy8vIHJlbGF0aW9uc2hpcCBvZiB0aGUgZGlzdGFuY2Ug
dHJhdmVsZWQsIGNsYW1wZWQgYnkgYXJiaXRyYXJ5IG1pbiBhbmQgbWF4IHZhbHVlcy4KK2Zsb2F0
IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmNvbXB1dGVTbmFwRGVsdGEoKSBjb25zdAoreworICAg
IExheW91dFVuaXQgb2Zmc2V0ID0gbV9jbGllbnQtPnNjcm9sbE9mZnNldEluQXhpcyhtX2F4aXMp
OworICAgIGJvb2wgY2FuQ29tcHV0ZVNuYXAgPSAgKG1faW5pdGlhbE9mZnNldCA8PSBvZmZzZXQg
JiYgb2Zmc2V0IDwgbV90YXJnZXRPZmZzZXQpIHx8IChtX3RhcmdldE9mZnNldCA8IG9mZnNldCAm
JiBvZmZzZXQgPD0gbV9pbml0aWFsT2Zmc2V0KTsKKyAgICBpZiAobV9jdXJyZW50U3RhdGUgIT0g
U2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZyB8fCAhY2FuQ29tcHV0ZVNuYXApCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaW50IHNpZ24gPSBtX2luaXRpYWxPZmZzZXQgPCBtX3RhcmdldE9mZnNl
dCA/IDEgOiAtMTsKKyAgICBmbG9hdCBwcm9ncmVzcyA9ICgoZmxvYXQpKG9mZnNldCAtIG1faW5p
dGlhbE9mZnNldCkpIC8gKG1fdGFyZ2V0T2Zmc2V0IC0gbV9pbml0aWFsT2Zmc2V0KTsKKyAgICAv
LyBUaHJlc2hvbGQgdGhlIGRpc3RhbmNlIGJlZm9yZSBjb21wdXRpbmcgbWFnbml0dWRlLCBzbyBv
bmx5IGRpc3RhbmNlcyB3aXRoaW4gYSBjZXJ0YWluIHJhbmdlIGFyZSBjb25zaWRlcmVkLgorICAg
IGZsb2F0IHRocmVzaG9sZGVkRGlzdGFuY2UgPSBzdGQ6Om1pbihzdGQ6Om1heDxmbG9hdD4oKG1f
dGFyZ2V0T2Zmc2V0IC0gbV9pbml0aWFsT2Zmc2V0KSAqIHNpZ24sIHNuYXBUaHJlc2hvbGRMb3cp
LCBzbmFwVGhyZXNob2xkSGlnaCk7CisgICAgZmxvYXQgbWFnbml0dWRlID0gc25hcE1hZ25pdHVk
ZU1pbiArIChzbmFwTWFnbml0dWRlTWF4IC0gc25hcE1hZ25pdHVkZU1pbikgKiAodGhyZXNob2xk
ZWREaXN0YW5jZSAtIHNuYXBUaHJlc2hvbGRMb3cpIC8gKHNuYXBUaHJlc2hvbGRIaWdoIC0gc25h
cFRocmVzaG9sZExvdyk7CisgICAgZmxvYXQgcmF3U25hcEFtb3VudCA9IHN0ZDo6bWF4PGZsb2F0
PigxLCBtYWduaXR1ZGUgKiBzaW4ocGlGbG9hdCAqIHByb2dyZXNzKSk7CisgICAgaWYgKChtX3Rh
cmdldE9mZnNldCA8IG9mZnNldCAmJiBvZmZzZXQgLSByYXdTbmFwQW1vdW50IDwgbV90YXJnZXRP
ZmZzZXQpIHx8IChtX3RhcmdldE9mZnNldCA+IG9mZnNldCAmJiBvZmZzZXQgKyByYXdTbmFwQW1v
dW50ID4gbV90YXJnZXRPZmZzZXQpKQorICAgICAgICByZXR1cm4gbV90YXJnZXRPZmZzZXQgLSBv
ZmZzZXQ7CisKKyAgICByZXR1cm4gc2lnbiAqIHJhd1NuYXBBbW91bnQ7Cit9CisKKy8vIENvbXB1
dGVzIHRoZSBhbW91bnQgdG8gc2Nyb2xsIGJ5IHdoZW4gcGVyZm9ybWluZyBhICJnbGlkZSIgb3Bl
cmF0aW9uLCBpLmUuIHdoZW4gYSB1c2VyIHJlbGVhc2VzIHRoZSB0cmFja3BhZCB3aXRoIGFuIGlu
aXRpYWwgdmVsb2NpdHkuIEhlcmUsCisvLyB3ZSB3YW50IHRoZSBzY3JvbGwgb2Zmc2V0IHRvIGFu
aW1hdGUgZGlyZWN0bHkgdG8gdGhlIHNuYXAgcG9pbnQuIFRoZSBzbmFwIGRlbHRhIGlzIGEgZnVu
Y3Rpb24gb2YgcHJvZ3Jlc3MgdCwgd2hlcmUgdCBpcyBlcXVhbCB0bworLy8gRElTVEFOQ0VfVFJB
VkVMRUQgLyBUT1RBTF9ESVNUQU5DRSwgRElTVEFOQ0VfVFJBVkVMRUQgaXMgdGhlIGRpc3RhbmNl
IGZyb20gdGhlIGluaXRpYWxPZmZzZXQgdG8gdGhlIGN1cnJlbnQgb2Zmc2V0LCBhbmQgVE9UQUxf
RElTVEFOQ0UgaXMKKy8vIHRoZSBkaXN0YW5jZSBmcm9tIGluaXRpYWxPZmZzZXQgdG8gdGFyZ2V0
T2Zmc2V0LgorLy8gVGhlIGdlbmVyYWwgbW9kZWwgb2Ygb3VyIGdsaWRpbmcgZXF1YXRpb24gaXMg
ZGVsdGEodCkgPSBNQUdOSVRVREUgKiAoMSArIGNvcyhQSSAqIHQgKyBQSEFTRV9TSElGVCkpLiBU
aGlzIHdhcyBkZXRlcm1pbmVkIGFmdGVyIGV4YW1pbmluZyB0aGUKKy8vIG1vbWVudHVtIHZlbG9j
aXR5IGN1cnZlIGFzIGEgZnVuY3Rpb24gb2YgcHJvZ3Jlc3MuIFRvIGNvbXB1dGUgTUFHTklUVURF
IGFuZCBQSEFTRV9TSElGVCwgd2UgdXNlIGluaXRpYWwgdmVsb2NpdHkgVjAgYW5kIHRoZSBmaW5h
bCB2ZWxvY2l0eSBWRiwKKy8vIGJvdGggYXMgd2hlZWwgZGVsdGFzIChwaXhlbHMgcGVyIHRpbWVz
dGVwKS4gVkYgc2hvdWxkIGJlIGEgc21hbGwgdmFsdWUgKDwgMTApIGNob3NlbiBiYXNlZCBvbiB0
aGUgaW5pdGlhbCB2ZWxvY2l0eSBhbmQgVE9UQUxfRElTVEFOQ0UuCisvLyBXZSBhbHNvIGVuZm9y
Y2UgdGhlIGZvbGxvd2luZyBjb25zdHJhaW50cyBmb3IgdGhlIGdsaWRpbmcgZXF1YXRpb246Cisv
LyAgIDEuIGRlbHRhKDApID0gVjAsIHNpbmNlIHdlIHdhbnQgdGhlIGluaXRpYWwgdmVsb2NpdHkg
b2YgdGhlIGdsaWRpbmcgYW5pbWF0aW9uIHRvIG1hdGNoIHRoZSB1c2VyJ3Mgc2Nyb2xsIHZlbG9j
aXR5LiBUaGUgZXhjZXB0aW9uIHRvIHRoaXMgaXMKKy8vICAgICAgd2hlbiB0aGUgZ2xpZGUgdmVs
b2NpdHkgaXMgbm90IGVub3VnaCB0byBuYXR1cmFsbHkgcmVhY2ggdGhlIG5leHQgc25hcCBwb2lu
dCwgYW5kIHRodXMgcmVxdWlyZXMgYSBib29zdCAoc2VlIGluaXRpYWxpemVHbGlkZVBhcmFtZXRl
cnMpCisvLyAgIDIuIGRlbHRhKDEpID0gVkYsIHNpbmNlIGF0IHQ9MSwgdGhlIGFuaW1hdGlvbiBo
YXMgY29tcGxldGVkIGFuZCB3ZSB3YW50IHRoZSBsYXN0IHdoZWVsIGRlbHRhIHRvIG1hdGNoIHRo
ZSBmaW5hbCB2ZWxvY2l0eSBWRi4gTm90ZSB0aGF0IHRoaXMKKy8vICAgICAgZG9lc24ndCBndWFy
YW50ZWUgdGhhdCB0aGUgZmluYWwgdmVsb2NpdHkgd2lsbCBiZSBleGFjdGx5IFZGLiBIb3dldmVy
LCBhc3N1bWluZyB0aGF0IHRoZSBpbml0aWFsIHZlbG9jaXR5IGlzIG11Y2ggbGVzcyB0aGFuIFRP
VEFMX0RJU1RBTkNFLAorLy8gICAgICB0aGUgbGFzdCB3aGVlbCBkZWx0YSB3aWxsIGJlIHZlcnkg
Y2xvc2UsIGlmIG5vdCB0aGUgc2FtZSwgYXMgVkYuCisvLyBGb3IgTUFHTklUVURFID0gKFYwICsg
VkYpIC8gMiBhbmQgUEhBU0VfU0hJRlQgPSBhcmNjb3MoKFYwIC0gVkYpIC8gKFYwICsgVkYpKSwg
b2JzZXJ2ZSB0aGF0IGRlbHRhKDApIGFuZCBkZWx0YSgxKSBldmFsdWF0ZSByZXNwZWN0aXZlbHkg
dG8gVjAKKy8vIGFuZCBWRi4gVGh1cywgd2UgY2FuIGV4cHJlc3Mgb3VyIGdsaWRpbmcgZXF1YXRp
b24gYWxsIGluIHRlcm1zIG9mIFYwLCBWRiBhbmQgdC4KK2Zsb2F0IEF4aXNTY3JvbGxTbmFwQW5p
bWF0b3I6OmNvbXB1dGVHbGlkZURlbHRhKCkgY29uc3QKK3sKKyAgICBMYXlvdXRVbml0IG9mZnNl
dCA9IG1fY2xpZW50LT5zY3JvbGxPZmZzZXRJbkF4aXMobV9heGlzKTsKKyAgICBib29sIGNhbkNv
bXB1dGVHbGlkZSA9IChtX2luaXRpYWxPZmZzZXQgPD0gb2Zmc2V0ICYmIG9mZnNldCA8IG1fdGFy
Z2V0T2Zmc2V0KSB8fCAobV90YXJnZXRPZmZzZXQgPCBvZmZzZXQgJiYgb2Zmc2V0IDw9IG1faW5p
dGlhbE9mZnNldCk7CisgICAgaWYgKG1fY3VycmVudFN0YXRlICE9IFNjcm9sbFNuYXBTdGF0ZTo6
R2xpZGluZyB8fCAhY2FuQ29tcHV0ZUdsaWRlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZs
b2F0IHByb2dyZXNzID0gKChmbG9hdCkob2Zmc2V0IC0gbV9pbml0aWFsT2Zmc2V0KSkgLyAobV90
YXJnZXRPZmZzZXQgLSBtX2luaXRpYWxPZmZzZXQpOworICAgIGZsb2F0IHNoaWZ0ID0gY2VpbCht
X2dsaWRlTWFnbml0dWRlICogKDEgKyBjb3MocGlGbG9hdCAqIHByb2dyZXNzICsgbV9nbGlkZVBo
YXNlU2hpZnQpKSk7CisgICAgc2hpZnQgPSBtX2luaXRpYWxPZmZzZXQgPCBtX3RhcmdldE9mZnNl
dCA/IHN0ZDo6bWF4PGZsb2F0PihzaGlmdCwgMSkgOiBzdGQ6Om1pbjxmbG9hdD4oc2hpZnQsIC0x
KTsKKyAgICBpZiAoKG1faW5pdGlhbE9mZnNldCA8IG1fdGFyZ2V0T2Zmc2V0ICYmIG9mZnNldCAr
IHNoaWZ0ID4gbV90YXJnZXRPZmZzZXQpIHx8IChtX2luaXRpYWxPZmZzZXQgPiBtX3RhcmdldE9m
ZnNldCAmJiBvZmZzZXQgKyBzaGlmdCA8IG1fdGFyZ2V0T2Zmc2V0KSkKKyAgICAgICAgcmV0dXJu
IG1fdGFyZ2V0T2Zmc2V0IC0gb2Zmc2V0OworCisgICAgcmV0dXJuIHNoaWZ0OworfQorCit2b2lk
IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmluaXRpYWxpemVHbGlkZVBhcmFtZXRlcnMoYm9vbCBz
aG91bGRJbmNyZWFzZUluaXRpYWxXaGVlbERlbHRhKQoreworICAgIC8vIEZJWE1FOiBHbGlkZSBi
b29zdCBpcyBhIGhhY2t5IHdheSB0byBzcGVlZCB1cCBuYXR1cmFsIHNjcm9sbGluZyB2ZWxvY2l0
eS4gV2Ugc2hvdWxkIGZpbmQgYSBiZXR0ZXIgd2F5IHRvIGFjY29tcGxpc2ggdGhpcy4KKyAgICBp
ZiAoc2hvdWxkSW5jcmVhc2VJbml0aWFsV2hlZWxEZWx0YSkKKyAgICAgICAgbV9nbGlkZUluaXRp
YWxXaGVlbERlbHRhICo9IGdsaWRlQm9vc3RNdWx0aXBsaWVyOworCisgICAgLy8gRklYTUU6IFRo
ZXJlIG11c3QgYmUgYSBiZXR0ZXIgd2F5IHRvIGRldGVybWluZSBhIGdvb2QgdGFyZ2V0IGRlbHRh
IHRoYW4gbXVsdGlwbHlpbmcgYnkgYSBmYWN0b3IgYW5kIGNsYW1waW5nIHRvIG1pbi9tYXggdmFs
dWVzLgorICAgIGZsb2F0IHRhcmdldEZpbmFsV2hlZWxEZWx0YSA9IGluaXRpYWxUb0ZpbmFsTW9t
ZW50dW1GYWN0b3IgKiAobV9nbGlkZUluaXRpYWxXaGVlbERlbHRhIDwgMCA/IC1tX2dsaWRlSW5p
dGlhbFdoZWVsRGVsdGEgOiBtX2dsaWRlSW5pdGlhbFdoZWVsRGVsdGEpOworICAgIHRhcmdldEZp
bmFsV2hlZWxEZWx0YSA9IHN0ZDo6bWluKHN0ZDo6bWF4KHRhcmdldEZpbmFsV2hlZWxEZWx0YSwg
bWluVGFyZ2V0V2hlZWxEZWx0YSksIG1heFRhcmdldFdoZWVsRGVsdGEpOworICAgIG1fZ2xpZGVN
YWduaXR1ZGUgPSAobV9nbGlkZUluaXRpYWxXaGVlbERlbHRhICsgdGFyZ2V0RmluYWxXaGVlbERl
bHRhKSAvIDI7CisgICAgbV9nbGlkZVBoYXNlU2hpZnQgPSBhY29zKChtX2dsaWRlSW5pdGlhbFdo
ZWVsRGVsdGEgLSB0YXJnZXRGaW5hbFdoZWVsRGVsdGEpIC8gKG1fZ2xpZGVJbml0aWFsV2hlZWxE
ZWx0YSArIHRhcmdldEZpbmFsV2hlZWxEZWx0YSkpOworfQorCit2b2lkIEF4aXNTY3JvbGxTbmFw
QW5pbWF0b3I6OnB1c2hJbml0aWFsV2hlZWxEZWx0YShmbG9hdCB3aGVlbERlbHRhKQoreworICAg
IGlmIChtX251bVdoZWVsRGVsdGFzVHJhY2tlZCA8IHdoZWVsRGVsdGFXaW5kb3dTaXplKQorICAg
ICAgICBtX3doZWVsRGVsdGFXaW5kb3dbbV9udW1XaGVlbERlbHRhc1RyYWNrZWQrK10gPSB3aGVl
bERlbHRhOworfQorCitmbG9hdCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjphdmVyYWdlSW5pdGlh
bFdoZWVsRGVsdGEoKSBjb25zdAoreworICAgIGlmICghbV9udW1XaGVlbERlbHRhc1RyYWNrZWQp
CisgICAgICAgIHJldHVybiAwOworCisgICAgZmxvYXQgc3VtID0gMDsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG1fbnVtV2hlZWxEZWx0YXNUcmFja2VkOyBpKyspCisgICAgICAgIHN1bSArPSBt
X3doZWVsRGVsdGFXaW5kb3dbaV07CisKKyAgICByZXR1cm4gc3VtIC8gbV9udW1XaGVlbERlbHRh
c1RyYWNrZWQ7Cit9CisKK3ZvaWQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6Y2xlYXJJbml0aWFs
V2hlZWxEZWx0YVdpbmRvdygpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX251bVdoZWVs
RGVsdGFzVHJhY2tlZDsgaSsrKQorICAgICAgICBtX3doZWVsRGVsdGFXaW5kb3dbaV0gPSAwOwor
CisgICAgbV9udW1XaGVlbERlbHRhc1RyYWNrZWQgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBDU1NfU0NST0xMX1NOQVAK
</data>
<flag name="review"
          id="261251"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236630</attachid>
            <date>2014-08-14 15:39:46 -0700</date>
            <delta_ts>2014-08-14 17:21:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135768-20140814153936.patch</filename>
            <type>text/plain</type>
            <size>30464</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyNjA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDVkZmQzYmY3NDgwYmNh
MWI1ZTg2ODA5NGEwNDdkNDljOWQ2MGIzYy4uMDEyZTM2YTUyOWNlNWNmNWRiYjhmYjMxYzYxMjI1
NTJjZDViZWI5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDE0LTA4LTE0ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBz
Y3JvbGwgc25hcHBpbmcgYW5pbWF0aW9ucyBvbiBNYWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTc2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGluZyB0aGUgc2Nyb2xsIHNuYXAgYW5p
bWF0aW9ucyByZXF1aXJlZCBmb3Igc25hcHBpbmcgaW4gYm90aCBvdmVyZmxvdyBhbmQgbWFpbmZy
YW1lIGFyZWFzIG9uIE1hYy4KKyAgICAgICAgU2luY2Ugd2UgcmVjZWl2ZSBhIHNlcmllcyBvZiBk
aXNjcmV0ZSB3aGVlbCBldmVudHMsIHdlIG5lZWQgdG8gcHJlZGljdCB0aGUgZGlzdGFuY2Ugd2Ug
bmVlZCB0byB0cmF2ZXJzZSwKKyAgICAgICAgY29tcHV0ZSB0aGUgYXBwcm9wcmlhdGUgc25hcCBw
b2ludCwgYW5kIHRoZW4gY29tcHV0ZSBhbiBhbmltYXRpb24gY3VydmUgdG8gdGhhdCBsb2NhdGlv
bi4gVGhlIHNuYXAgYW5pbWF0aW9ucworICAgICAgICBhcmUgc3BsaXQgaW50byB0d28gdHlwZXM6
IHNuYXBwaW5nLCB3aGljaCBoYW5kbGVzIGxldHRpbmcgZ28gb2YgdGhlIHRyYWNrcGFkIHdpdGgg
emVybyB2ZWxvY2l0eSwgYW5kIGdsaWRpbmcsCisgICAgICAgIHdoaWNoIGhhbmRsZXMgZmxpY2sg
Z2VzdHVyZXMuIEluIGJvdGggY2FzZXMsIHNpbnVzb2lkYWwgY3VydmVzIGFyZSB1c2VkIHRvIGVh
c2UgYW5pbWF0aW9uIHRvIHRoZSB0YXJnZXQKKyAgICAgICAgbG9jYXRpb24uIEluIHRoZSBmb3Jt
ZXIgY2FzZSwgdGhlIGluaXRpYWwgdmVsb2NpdHkgaXMgbG93LCBhbmQgaW5jcmVhc2VzIHRvIGEg
bWF4aW11bSB2YWx1ZSBkdXJpbmcgdGhlIG1pZGRsZQorICAgICAgICBvZiB0aGUgYW5pbWF0aW9u
IGJlZm9yZSBkZWNyZWFzaW5nIHRvIDAuIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIGN1cnZlIGlz
IGNvbXB1dGVkIHN1Y2ggdGhhdCB0aGUgaW5pdGlhbAorICAgICAgICB2ZWxvY2l0eSBtYXRjaGVz
IHRoZSB1c2VyJ3Mgc2Nyb2xsIHZlbG9jaXR5LCBhbmQgdGhlIGZpbmFsIHZlbG9jaXR5IG1hdGNo
ZXMgYSBsb3dlciBmaW5hbCB2ZWxvY2l0eSB0aGF0IGlzCisgICAgICAgIHNvbWV3aGF0IGFyYml0
cmFyaWx5IGNvbXB1dGVkLiAoU2VlIHRoZSBGSVhNRSBpbiBBeGlzU2Nyb2xsU25hcE9mZnNldHM6
OmluaXRpYWxpemVHbGlkZVBhcmFtZXRlcnMpLiBIb3cgdGhlCisgICAgICAgIGVxdWF0aW9ucyBh
bmQgY29uc3RhbnRzIHdlcmUgY2hvc2VuIGlzIGRlc2NyaWJlZCBpbiBncmVhdGVyIGRldGFpbCBp
biB0aGUgY29tbWVudHMgYWJvdmUKKyAgICAgICAgQXhpc1Njcm9sbFNuYXBPZmZzZXRzOjpjb21w
dXRlR2xpZGVEZWx0YSBhbmQgQXhpc1Njcm9sbFNuYXBPZmZzZXRzOjpjb21wdXRlU25hcERlbHRh
LiBOb3RlIHRoYXQgdGhlIGZpbmFsCisgICAgICAgIHZlbG9jaXR5IHNob3VsZCBpZGVhbGx5IGJl
IGVxdWFsIHRvIDAuIEhvd2V2ZXIsIHdpdGggdGhpcyBwYXJ0aWN1bGFyIGN1cnZlLCB0aGlzIGNh
dXNlZCB0aGUgYW5pbWF0aW9uIHRvIGZlZWwKKyAgICAgICAgdG9vIHNsb3cgbmVhciB0aGUgc25h
cCBwb2ludC4KKworICAgICAgICBObyB0ZXN0cywgc2luY2UgdGhlcmUgaXMgbm8gb2JzZXJ2YWJs
ZSBjaGFuZ2UgaW4gYmVoYXZpb3IuIFRlc3RzIHdpbGwgYmUgaW5jbHVkZWQgd2hlbiBpT1MgYW5k
IE1hYyBzY3JvbGxpbmcKKyAgICAgICAgYXJlYXMgaG9vayBpbnRvIHRoaXMgY29kZS4KKworICAg
ICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajogCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBP
ZmZzZXRzLmNwcDogCisgICAgICAgIChXZWJDb3JlOjpjbG9zZXN0U25hcE9mZnNldCk6IENvbXB1
dGVzIHRoZSBjbG9zZXN0IHNuYXAgb2Zmc2V0IGdpdmVuIHZlbG9jaXR5IGFuZCBwcmRpY3RlZCBk
ZXN0aW5hdGlvbi4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNl
dHMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQ6On5B
eGlzU2Nyb2xsU25hcEFuaW1hdG9yQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQXhp
c1Njcm9sbFNuYXBBbmltYXRvci5tbTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp0b1doZWVs
RXZlbnRTdGF0dXMpOiBDb252ZXJ0cyBhIHBhaXIgb2YgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2Vz
IHRvIGEgV2hlZWxFdmVudFN0YXR1cy4KKyAgICAgICAgKFdlYkNvcmU6OnByb2plY3RlZEluZXJ0
aWFsU2Nyb2xsRGlzdGFuY2UpOiBBdHRlbXB0cyB0byBwcmVkaWN0IHRoZSBkaXN0YW5jZSBjb3Zl
cmVkIGJ5IHRoZSBpbmVydGlhbCBzY3JvbGxpbmcgcGhhc2UuCisgICAgICAgIChXZWJDb3JlOjpB
eGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQpOiBVcGRh
dGVzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgQXhpc1Njcm9sbFNuYXBBbmltYXRvciwgZ2l2
ZW4gYSBQbGF0Zm9ybVdoZWVsRXZlbnQKKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFw
QW5pbWF0b3I6OnNob3VsZE92ZXJyaWRlV2hlZWxFdmVudCk6IERldGVybWluZXMgd2hldGhlciBv
ciBub3Qgd2Ugc2hvdWxkIG92ZXJyaWRlIGEgd2hlZWwgZXZlbnQgZ2l2ZW4gdGhlIGFuaW1hdG9y
J3MgaW50ZXJuYWwgc3RhdGUuCisgICAgICAgIChXZWJDb3JlOjpBeGlzU2Nyb2xsU25hcEFuaW1h
dG9yOjpzY3JvbGxTbmFwQW5pbWF0aW9uVXBkYXRlKTogVXBkYXRlcyBhIHNpbmdsZSBsb29wIG9m
IHRoZSBzY3JvbGwgc25hcHBpbmcgYW5pbWF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Nj
cm9sbFNuYXBBbmltYXRvcjo6YmVnaW5TY3JvbGxTbmFwQW5pbWF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmVuZFNjcm9sbFNuYXBBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6Y29tcHV0ZVNuYXBEZWx0
YSk6IFNlZSBjb21tZW50cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6
OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmNvbXB1dGVHbGlkZURlbHRhKTogU2VlIGNvbW1lbnRz
IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBB
bmltYXRvcjo6aW5pdGlhbGl6ZUdsaWRlUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpB
eGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpwdXNoSW5pdGlhbFdoZWVsRGVsdGEpOgorICAgICAgICAo
V2ViQ29yZTo6QXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6YXZlcmFnZUluaXRpYWxXaGVlbERlbHRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmNsZWFySW5pdGlh
bFdoZWVsRGVsdGFXaW5kb3cpOgorCiAyMDE0LTA4LTE0ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdo
YW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIENvcnJlY3QgYnVpbGQgd2hlbiBEZXJpdmVk
U291cmNlcyBsb2NhdGlvbiBub3Qgc3VwcGxpZWQgYnkgYnVpbGQgZW52aXJvbm1lbnQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1NYWMuY21ha2UKaW5kZXggNDE4YzI1NDQ4NDA1Yjk1MjlkYjc0OWMzYzVmNzQxYmZm
OTcwM2EwZS4uNTZiNDg3MjM2OTAyNDJjYjMwZWVkNTQ2NDRiODMyZGU3ZDgzM2I0YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTkzLDYgKzkzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZU1hdGhE
YXRhLmNwcAogCisgICAgcGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0KICAg
ICBwbGF0Zm9ybS9tYWMvQmxvY2tFeGNlcHRpb25zLm1tCiAgICAgcGxhdGZvcm0vbWFjL0NvbnRl
bnRGaWx0ZXJNYWMubW0KICAgICBwbGF0Zm9ybS9tYWMvQ29udGV4dE1lbnVJdGVtTWFjLm1tCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZjBhYTA0MWRjYjI3YmUzZTgyZjg4Y2I4YWQxNjYzOGY4NTUzOTVlOC4uMzFhZWFjMmE2MTU3
YTVmZGUwMTM4Mzc2NTBlNTg0NDcwNjQ5MzE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjI0Nyw2ICs2MjQ3LDggQEAKIAkJ
RjQyRkZCNDYxOTg0QjcxNjAwRjY4MzdGIC8qIExlbmd0aFJlcGVhdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQyRkZCNDUxOTg0QjcxNjAwRjY4MzdG
IC8qIExlbmd0aFJlcGVhdC5oICovOyB9OwogCQlGNDVDMjMxRDE5OTVCNzNCMDBBNkUyRTMgLyog
QXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY0NUMyMzFCMTk5NUI3M0IwMEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25h
cE9mZnNldHMuY3BwICovOyB9OwogCQlGNDVDMjMxRTE5OTVCNzNCMDBBNkUyRTMgLyogQXhpc1Nj
cm9sbFNuYXBPZmZzZXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNDVDMjMxQzE5OTVCNzNCMDBBNkUyRTMgLyogQXhpc1Njcm9sbFNuYXBPZmZzZXRz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRjQ3
ODc1NTQxOTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY0Nzg3NTUyMTk5ODNBRkYw
MDI0QTI4NyAvKiBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRjQ3ODc1NTUxOTk4M0FGRjAwMjRBMjg3IC8q
IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNDc4NzU1MzE5OTgzQUZGMDAyNEEyODcgLyogQXhpc1Njcm9sbFNu
YXBBbmltYXRvci5tbSAqLzsgfTsKIAkJRjQ3QTVFM0UxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxl
U2Nyb2xsU25hcFBvaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjQ3QTVFM0IxOTVCOEM4QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUY0
N0E1RTNGMTk1QjhFNDgwMDQ4MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjQ3QTVFM0ExOTVCOEM4
QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5jcHAgKi87IH07CiAJCUY1MDY2NEY3
MTU3RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTA2NjRGNTE1N0Y1MkRDMDBBQzIyNkYgLyog
Rm9ybUNvbnRyb2xsZXIuY3BwICovOyB9OwpAQCAtMTM3NjYsNiArMTM3NjgsOCBAQAogCQlGNDJG
RkI0NTE5ODRCNzE2MDBGNjgzN0YgLyogTGVuZ3RoUmVwZWF0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExlbmd0aFJlcGVhdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGNDVDMjMxQjE5OTVCNzNCMDBBNkUyRTMgLyogQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF4aXNTY3JvbGxTbmFwT2Zm
c2V0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY0NUMyMzFDMTk5NUI3M0Iw
MEE2RTJFMyAvKiBBeGlzU2Nyb2xsU25hcE9mZnNldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUY0Nzg3NTUyMTk5ODNBRkYwMDI0QTI4NyAvKiBBeGlzU2Nyb2xsU25hcEFuaW1h
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF4aXNTY3JvbGxTbmFwQW5p
bWF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRjQ3ODc1NTMxOTk4M0FGRjAw
MjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGNDdBNUUzQTE5NUI4QzhBMDA0ODMxMDAgLyogU3R5bGVTY3Jv
bGxTbmFwUG9pbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0
eWxlU2Nyb2xsU25hcFBvaW50cy5jcHA7IHBhdGggPSBzdHlsZS9TdHlsZVNjcm9sbFNuYXBQb2lu
dHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNDdBNUUzQjE5NUI4QzhBMDA0
ODMxMDAgLyogU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oOyBwYXRoID0gc3R5bGUvU3R5bGVTY3Jv
bGxTbmFwUG9pbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1MDY2NEY1MTU3
RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGb3JtQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNjQwOCw2ICsxNjQxMiw4IEBACiAJCTY1ODJBMTQ4MDk5OTlENkMwMEJFRUI2
RCAvKiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CUY0Nzg3NTUyMTk5ODNBRkYwMDI0QTI4NyAvKiBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yLmggKi8s
CisJCQkJRjQ3ODc1NTMxOTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3Iu
bW0gKi8sCiAJCQkJNjVBNjQwRjAwNTMzQkIxRjAwODVFNzc3IC8qIEJsb2NrRXhjZXB0aW9ucy5o
ICovLAogCQkJCTY1RjgwNjk3MDU0RDlGODYwMDhCRjc3NiAvKiBCbG9ja0V4Y2VwdGlvbnMubW0g
Ki8sCiAJCQkJMjkxOUExRUExNkIzMzc4OTAwNzg3MjEzIC8qIENvbnRlbnRGaWx0ZXJNYWMubW0g
Ki8sCkBAIC0yNjI1OSw2ICsyNjI2NSw3IEBACiAJCQkJQjIyMjdBOTcwRDAwQkYyMjAwNzFCNzgy
IC8qIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCBpbiBIZWFkZXJzICovLAogCQkJCTA4OEEwRTBB
MTI2RUYxREIwMDk3OEY3QSAvKiBTVkdQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDgx
REQ0OUMxM0JBMUE2MDAwREM3NjI3IC8qIFNWR1Byb3BlcnR5SW5mby5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRjQ3ODc1NTQxOTk4M0FGRjAwMjRBMjg3IC8qIEF4aXNTY3JvbGxTbmFwQW5pbWF0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTA4OEEwRTBCMTI2RUYxREIwMDk3OEY3QSAvKiBTVkdQcm9w
ZXJ0eVRlYXJPZmYuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4OEEwRTBDMTI2RUYxREIwMDk3OEY3
QSAvKiBTVkdQcm9wZXJ0eVRyYWl0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBOUEwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yODE3NCw2ICsyODE4MSw3IEBACiAJCQkJQkU2MTAzOUQxOEE5RDY1MjAwREQ1MEQ3IC8q
IEpTRGF0YUN1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTYyQTQ1NzEwMTE0NjQ3MDBERkYz
RUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk0MTYyQTQ1NDEwMTE0NUUzMDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGNDc4NzU1NTE5OTgzQUZGMDAyNEEyODcg
LyogQXhpc1Njcm9sbFNuYXBBbmltYXRvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZEQTE1RUQx
MTJCMDNGOTQwMDNBNTgzQSAvKiBKU0RlbGF5Tm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkz
MUZCMUE2NTEyMEE1RDNGMDBEQzAyQTAgLyogSlNEZXZpY2VNb3Rpb25FdmVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzMUZCMUE2QzEyMEE1RDY5MDBEQzAyQTAgLyogSlNEZXZpY2VNb3Rpb25F
dmVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgKaW5kZXggZWRkZmM0YTM5ZDI2
ODcyMDcwMDQ4NDkxNzAyOThjNDRhNTVkYTMxYS4uNTIxN2QxZjcxYTE5Zjc0ZjI5NWJhYjVmZjhl
ZGQyZjYxNmM5MzdjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
QXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCiAKLSNpbmNsdWRlICJMYXlvdXRVbml0LmgiCiAjaW5jbHVkZSAi
U2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KQEAgLTQyLDYgKzQxLDQwIEBAIGNsYXNzIFNjcm9sbGFibGVBcmVhOwogCiB2
b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEmLCBI
VE1MRWxlbWVudCYgc2Nyb2xsaW5nRWxlbWVudCwgY29uc3QgUmVuZGVyQm94JiBzY3JvbGxpbmdF
bGVtZW50Qm94LCBjb25zdCBSZW5kZXJTdHlsZSYgc2Nyb2xsaW5nRWxlbWVudFN0eWxlKTsKIAor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitUIGNsb3Nlc3RTbmFwT2Zmc2V0KGNvbnN0IFZlY3RvcjxU
PiYgc25hcE9mZnNldHMsIFQgc2Nyb2xsRGVzdGluYXRpb24sIGZsb2F0IHZlbG9jaXR5KQorewor
ICAgIEFTU0VSVChzbmFwT2Zmc2V0cy5zaXplKCkpOworICAgIGlmIChzY3JvbGxEZXN0aW5hdGlv
biA8PSBzbmFwT2Zmc2V0cy5maXJzdCgpKQorICAgICAgICByZXR1cm4gc25hcE9mZnNldHMuZmly
c3QoKTsKKworICAgIGlmIChzY3JvbGxEZXN0aW5hdGlvbiA+PSBzbmFwT2Zmc2V0cy5sYXN0KCkp
CisgICAgICAgIHJldHVybiBzbmFwT2Zmc2V0cy5sYXN0KCk7CisKKyAgICBzaXplX3QgbG93ZXJJ
bmRleCA9IDA7CisgICAgc2l6ZV90IHVwcGVySW5kZXggPSBzbmFwT2Zmc2V0cy5zaXplKCkgLSAx
OworICAgIHdoaWxlIChsb3dlckluZGV4IDwgdXBwZXJJbmRleCAtIDEpIHsKKyAgICAgICAgc2l6
ZV90IG1pZGRsZUluZGV4ID0gKGxvd2VySW5kZXggKyB1cHBlckluZGV4KSAvIDI7CisgICAgICAg
IGlmIChzY3JvbGxEZXN0aW5hdGlvbiA8IHNuYXBPZmZzZXRzW21pZGRsZUluZGV4XSkKKyAgICAg
ICAgICAgIHVwcGVySW5kZXggPSBtaWRkbGVJbmRleDsKKyAgICAgICAgZWxzZSBpZiAoc2Nyb2xs
RGVzdGluYXRpb24gPiBzbmFwT2Zmc2V0c1ttaWRkbGVJbmRleF0pCisgICAgICAgICAgICBsb3dl
ckluZGV4ID0gbWlkZGxlSW5kZXg7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdXBwZXJJ
bmRleCA9IG1pZGRsZUluZGV4OworICAgICAgICAgICAgbG93ZXJJbmRleCA9IG1pZGRsZUluZGV4
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgVCBsb3dlclNuYXBQ
b3NpdGlvbiA9IHNuYXBPZmZzZXRzW2xvd2VySW5kZXhdOworICAgIFQgdXBwZXJTbmFwUG9zaXRp
b24gPSBzbmFwT2Zmc2V0c1t1cHBlckluZGV4XTsKKyAgICAvLyBOb256ZXJvIHZlbG9jaXR5IGlu
ZGljYXRlcyBhIGZsaWNrIGdlc3R1cmUuIEV2ZW4gaWYgYW5vdGhlciBzbmFwIHBvaW50IGlzIGNs
b3Nlciwgc25hcCB0byB0aGUgb25lIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGZsaWNrIGdlc3R1
cmUuCisgICAgaWYgKHZlbG9jaXR5KQorICAgICAgICByZXR1cm4gdmVsb2NpdHkgPCAwID8gbG93
ZXJTbmFwUG9zaXRpb24gOiB1cHBlclNuYXBQb3NpdGlvbjsKKworICAgIGJvb2wgaXNDbG9zZXJU
b0xvd2VyU25hcFBvc2l0aW9uID0gc2Nyb2xsRGVzdGluYXRpb24gLSBsb3dlclNuYXBQb3NpdGlv
biA8PSB1cHBlclNuYXBQb3NpdGlvbiAtIHNjcm9sbERlc3RpbmF0aW9uOworICAgIHJldHVybiBp
c0Nsb3NlclRvTG93ZXJTbmFwUG9zaXRpb24gPyBsb3dlclNuYXBQb3NpdGlvbiA6IHVwcGVyU25h
cFBvc2l0aW9uOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBDU1Nf
U0NST0xMX1NOQVAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlz
U2Nyb2xsU25hcEFuaW1hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQXhpc1Nj
cm9sbFNuYXBBbmltYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzMDg0OWI0YTk2NWIyOTkxYTJjNzk0MWY4
NDk4YjRmY2YwZWNjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvQXhpc1Njcm9sbFNuYXBBbmltYXRvci5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yX2gKKyNkZWZpbmUgQXhpc1Njcm9s
bFNuYXBBbmltYXRvcl9oCisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorCisjaW5jbHVk
ZSAiQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgiCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBTY3JvbGxTbmFwU3RhdGUgeworICAg
IFNuYXBwaW5nLAorICAgIEdsaWRpbmcsCisgICAgSWRsZQorfTsKKworZW51bSBjbGFzcyBXaGVl
bEV2ZW50U3RhdHVzIHsKKyAgICBVc2VyU2Nyb2xsQmVnaW4sCisgICAgVXNlclNjcm9sbGluZywK
KyAgICBVc2VyU2Nyb2xsRW5kLAorICAgIEluZXJ0aWFsU2Nyb2xsQmVnaW4sCisgICAgSW5lcnRp
YWxTY3JvbGxpbmcsCisgICAgSW5lcnRpYWxTY3JvbGxFbmQsCisgICAgVW5rbm93bgorfTsKKwor
Y2xhc3MgQXhpc1Njcm9sbFNuYXBBbmltYXRvckNsaWVudCB7Citwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCB+QXhpc1Njcm9sbFNuYXBBbmltYXRvckNsaWVudCgpIHsgfQorCitwdWJsaWM6CisgICAg
dmlydHVhbCBMYXlvdXRVbml0IHNjcm9sbE9mZnNldEluQXhpcyhTY3JvbGxFdmVudEF4aXMpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgaW1tZWRpYXRlU2Nyb2xsSW5BeGlzKFNjcm9sbEV2ZW50QXhp
cywgZmxvYXQgdmVsb2NpdHkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRTY3JvbGxTbmFw
VGltZXIoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BTY3JvbGxTbmFwVGltZXIoKSA9IDA7
Cit9OworCitjbGFzcyBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yIHsKK3B1YmxpYzoKKyAgICBBeGlz
U2Nyb2xsU25hcEFuaW1hdG9yKEF4aXNTY3JvbGxTbmFwQW5pbWF0b3JDbGllbnQqLCBWZWN0b3I8
TGF5b3V0VW5pdD4qIHNuYXBPZmZzZXRzLCBTY3JvbGxFdmVudEF4aXMpOworICAgIHZvaWQgaGFu
ZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKyAgICBib29sIHNob3Vs
ZE92ZXJyaWRlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBjb25zdDsKKyAg
ICB2b2lkIHNjcm9sbFNuYXBBbmltYXRpb25VcGRhdGUoKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IGJlZ2luU2Nyb2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFwU3RhdGUpOworICAgIHZvaWQgZW5k
U2Nyb2xsU25hcEFuaW1hdGlvbigpOworCisgICAgZmxvYXQgY29tcHV0ZVNuYXBEZWx0YSgpIGNv
bnN0OworICAgIGZsb2F0IGNvbXB1dGVHbGlkZURlbHRhKCkgY29uc3Q7CisKKyAgICB2b2lkIGlu
aXRpYWxpemVHbGlkZVBhcmFtZXRlcnMoYm9vbCk7CisgICAgdm9pZCBwdXNoSW5pdGlhbFdoZWVs
RGVsdGEoZmxvYXQpOworICAgIGZsb2F0IGF2ZXJhZ2VJbml0aWFsV2hlZWxEZWx0YSgpIGNvbnN0
OworICAgIHZvaWQgY2xlYXJJbml0aWFsV2hlZWxEZWx0YVdpbmRvdygpOworCisgICAgc3RhdGlj
IGNvbnN0IGludCB3aGVlbERlbHRhV2luZG93U2l6ZSA9IDM7CisKKyAgICBBeGlzU2Nyb2xsU25h
cEFuaW1hdG9yQ2xpZW50KiBtX2NsaWVudDsKKyAgICBWZWN0b3I8TGF5b3V0VW5pdD4qIG1fc25h
cE9mZnNldHM7CisgICAgU2Nyb2xsRXZlbnRBeGlzIG1fYXhpczsKKyAgICAvLyBVc2VkIHRvIHRy
YWNrIGJvdGggc25hcHBpbmcgYW5kIGdsaWRpbmcgYmVoYXZpb3JzLgorICAgIFNjcm9sbFNuYXBT
dGF0ZSBtX2N1cnJlbnRTdGF0ZTsKKyAgICBMYXlvdXRVbml0IG1faW5pdGlhbE9mZnNldDsKKyAg
ICBMYXlvdXRVbml0IG1fdGFyZ2V0T2Zmc2V0OworICAgIC8vIFVzZWQgdG8gdHJhY2sgZ2xpZGlu
ZyBiZWhhdmlvci4KKyAgICBMYXlvdXRVbml0IG1fYmVnaW5UcmFja2luZ1doZWVsRGVsdGFPZmZz
ZXQ7CisgICAgaW50IG1fbnVtV2hlZWxEZWx0YXNUcmFja2VkOworICAgIGZsb2F0IG1fd2hlZWxE
ZWx0YVdpbmRvd1t3aGVlbERlbHRhV2luZG93U2l6ZV07CisgICAgZmxvYXQgbV9nbGlkZU1hZ25p
dHVkZTsKKyAgICBmbG9hdCBtX2dsaWRlUGhhc2VTaGlmdDsKKyAgICBmbG9hdCBtX2dsaWRlSW5p
dGlhbFdoZWVsRGVsdGE7CisgICAgYm9vbCBtX3Nob3VsZE92ZXJyaWRlV2hlZWxFdmVudDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApCisKKyNlbmRpZiAvLyBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFuaW1hdG9yLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0F4aXNTY3JvbGxTbmFwQW5pbWF0b3IubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZTg2ZDRmOTJlODVlNjM0YTk2NTVmMTUzZGUzNzBhZTdlZWVhZGQ5MAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9BeGlzU2Nyb2xsU25hcEFu
aW1hdG9yLm1tCkBAIC0wLDAgKzEsMjk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkF4aXNTY3JvbGxTbmFwQW5pbWF0b3IuaCIKKworI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgZmxvYXQgaW5l
cnRpYWxTY3JvbGxQcmVkaWN0aW9uRmFjdG9yID0gMTYuNzsKK2NvbnN0IGZsb2F0IHNuYXBNYWdu
aXR1ZGVNYXggPSAyNTsKK2NvbnN0IGZsb2F0IHNuYXBNYWduaXR1ZGVNaW4gPSA1OworY29uc3Qg
ZmxvYXQgc25hcFRocmVzaG9sZEhpZ2ggPSAxMDAwOworY29uc3QgZmxvYXQgc25hcFRocmVzaG9s
ZExvdyA9IDUwOworY29uc3QgZmxvYXQgZ2xpZGVCb29zdE11bHRpcGxpZXIgPSAzLjU7Citjb25z
dCBmbG9hdCBtYXhUYXJnZXRXaGVlbERlbHRhID0gNzsKK2NvbnN0IGZsb2F0IG1pblRhcmdldFdo
ZWVsRGVsdGEgPSAzLjU7Citjb25zdCBmbG9hdCBpbml0aWFsVG9GaW5hbE1vbWVudHVtRmFjdG9y
ID0gMS4wIC8gNDAuMDsKKworc3RhdGljIGlubGluZSBXaGVlbEV2ZW50U3RhdHVzIHRvV2hlZWxF
dmVudFN0YXR1cyhQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSBwaGFzZSwgUGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2UgbW9tZW50dW1QaGFzZSkKK3sKKyAgICBpZiAocGhhc2UgPT0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2VOb25lKSB7CisgICAgICAgIHN3aXRjaCAobW9tZW50dW1QaGFzZSkgeworICAg
ICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW46CisgICAgICAgICAgICByZXR1
cm4gV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxCZWdpbjsKKworICAgICAgICBjYXNl
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdlZDoKKyAgICAgICAgICAgIHJldHVybiBXaGVl
bEV2ZW50U3RhdHVzOjpJbmVydGlhbFNjcm9sbGluZzsKKworICAgICAgICBjYXNlIFBsYXRmb3Jt
V2hlZWxFdmVudFBoYXNlRW5kZWQ6CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1
czo6SW5lcnRpYWxTY3JvbGxFbmQ7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOyAKKyAgICAgICAgfQorICAgIH0KKyAgICBp
ZiAobW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpIHsKKyAgICAg
ICAgc3dpdGNoIChwaGFzZSkgeworICAgICAgICBjYXNlIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNl
QmVnYW46CisgICAgICAgICAgICByZXR1cm4gV2hlZWxFdmVudFN0YXR1czo6VXNlclNjcm9sbEJl
Z2luOworCisgICAgICAgIGNhc2UgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkOgorICAg
ICAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxpbmc7CisKKyAgICAg
ICAgY2FzZSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkOgorICAgICAgICAgICAgcmV0dXJu
IFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxFbmQ7CisKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBXaGVlbEV2ZW50U3RhdHVzOjpVbmtub3duOworfQorCitzdGF0aWMg
aW5saW5lIGZsb2F0IHByb2plY3RlZEluZXJ0aWFsU2Nyb2xsRGlzdGFuY2UoZmxvYXQgaW5pdGlh
bFdoZWVsRGVsdGEpCit7CisgICAgLy8gRklYTUU6IEV4cGVyaW1lbnRzIHdpdGggaW5lcnRpYWwg
c2Nyb2xsaW5nIHNob3cgYSBmYWlybHkgY29uc2lzdGVudCBsaW5lYXIgcmVsYXRpb25zaGlwIGJl
dHdlZW4gaW5pdGlhbCB3aGVlbCBkZWx0YSBhbmQgdG90YWwgZGlzdGFuY2Ugc2Nyb2xsZWQuCisg
ICAgLy8gSW4gdGhlIGZ1dHVyZSwgd2UnbGwgd2FudCB0byBmaW5kIGEgbW9yZSBhY2N1cmF0ZSB3
YXkgb2YgaW5lcnRpYWwgc2Nyb2xsIHByZWRpY3Rpb24uCisgICAgcmV0dXJuIGluZXJ0aWFsU2Ny
b2xsUHJlZGljdGlvbkZhY3RvciAqIGluaXRpYWxXaGVlbERlbHRhOworfQorCitBeGlzU2Nyb2xs
U25hcEFuaW1hdG9yOjpBeGlzU2Nyb2xsU25hcEFuaW1hdG9yKEF4aXNTY3JvbGxTbmFwQW5pbWF0
b3JDbGllbnQqIGNsaWVudCwgVmVjdG9yPExheW91dFVuaXQ+KiBzbmFwT2Zmc2V0cywgU2Nyb2xs
RXZlbnRBeGlzIGF4aXMpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3NuYXBPZmZz
ZXRzKHNuYXBPZmZzZXRzKQorICAgICwgbV9heGlzKGF4aXMpCisgICAgLCBtX2N1cnJlbnRTdGF0
ZShTY3JvbGxTbmFwU3RhdGU6OklkbGUpCisgICAgLCBtX2luaXRpYWxPZmZzZXQoMCkKKyAgICAs
IG1fdGFyZ2V0T2Zmc2V0KDApCisgICAgLCBtX2JlZ2luVHJhY2tpbmdXaGVlbERlbHRhT2Zmc2V0
KDApCisgICAgLCBtX251bVdoZWVsRGVsdGFzVHJhY2tlZCgwKQorICAgICwgbV9nbGlkZU1hZ25p
dHVkZSgwKQorICAgICwgbV9nbGlkZVBoYXNlU2hpZnQoMCkKKyAgICAsIG1fZ2xpZGVJbml0aWFs
V2hlZWxEZWx0YSgwKQorICAgICwgbV9zaG91bGRPdmVycmlkZVdoZWVsRXZlbnQoZmFsc2UpCit7
Cit9CisKK3ZvaWQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQoreworICAgIGZsb2F0IHdoZWVsRGVsdGEgPSBt
X2F4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsID8gLWV2ZW50LmRlbHRhWCgpIDog
LWV2ZW50LmRlbHRhWSgpOworICAgIFdoZWVsRXZlbnRTdGF0dXMgd2hlZWxTdGF0dXMgPSB0b1do
ZWVsRXZlbnRTdGF0dXMoZXZlbnQucGhhc2UoKSwgZXZlbnQubW9tZW50dW1QaGFzZSgpKTsKKyAg
ICBpZiAoKHdoZWVsU3RhdHVzID09IFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxpbmcgfHwg
d2hlZWxTdGF0dXMgPT0gV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxpbmcgfHwgd2hl
ZWxTdGF0dXMgPT0gV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxCZWdpbikgJiYgIXdo
ZWVsRGVsdGEpCisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAod2hlZWxTdGF0dXMpIHsK
KyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxCZWdpbjoKKyAgICBjYXNlIFdo
ZWVsRXZlbnRTdGF0dXM6OlVzZXJTY3JvbGxpbmc6CisgICAgICAgIGVuZFNjcm9sbFNuYXBBbmlt
YXRpb24oKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdoZWVsRXZlbnRTdGF0dXM6OlVz
ZXJTY3JvbGxFbmQ6CisgICAgICAgIGJlZ2luU2Nyb2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFw
U3RhdGU6OlNuYXBwaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdoZWVsRXZlbnRT
dGF0dXM6OkluZXJ0aWFsU2Nyb2xsQmVnaW46CisgICAgICAgIC8vIEJlZ2luIHRyYWNraW5nIHdo
ZWVsIGRlbHRhcyBmb3IgZ2xpZGUgcHJlZGljdGlvbi4KKyAgICAgICAgZW5kU2Nyb2xsU25hcEFu
aW1hdGlvbigpOworICAgICAgICBwdXNoSW5pdGlhbFdoZWVsRGVsdGEod2hlZWxEZWx0YSk7Cisg
ICAgICAgIG1fYmVnaW5UcmFja2luZ1doZWVsRGVsdGFPZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xs
T2Zmc2V0SW5BeGlzKG1fYXhpcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBXaGVlbEV2
ZW50U3RhdHVzOjpJbmVydGlhbFNjcm9sbGluZzoKKyAgICAgICAgaWYgKG1fY3VycmVudFN0YXRl
ICE9IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZykgeworICAgICAgICAgICAgLy8gRklYTUU6IElu
dmVzdGlnYXRlIHdoeSBzbWFsbCB3aGVlbCBkZWx0YXMgcHVzaGVkIGludG8gdGhlIHdpbmRvdyB3
aXRob3V0IHRoZSA8IC0xLCA+IDEgY2hlY2suCisgICAgICAgICAgICBpZiAobV9udW1XaGVlbERl
bHRhc1RyYWNrZWQgPCB3aGVlbERlbHRhV2luZG93U2l6ZSAmJiAod2hlZWxEZWx0YSA8IC0xIHx8
IHdoZWVsRGVsdGEgPiAxKSkKKyAgICAgICAgICAgICAgICBwdXNoSW5pdGlhbFdoZWVsRGVsdGEo
d2hlZWxEZWx0YSk7CisKKyAgICAgICAgICAgIGlmIChtX251bVdoZWVsRGVsdGFzVHJhY2tlZCA9
PSB3aGVlbERlbHRhV2luZG93U2l6ZSkKKyAgICAgICAgICAgICAgICBiZWdpblNjcm9sbFNuYXBB
bmltYXRpb24oU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgV2hlZWxFdmVudFN0YXR1czo6SW5lcnRpYWxTY3JvbGxFbmQ6Cisg
ICAgICAgIGNsZWFySW5pdGlhbFdoZWVsRGVsdGFXaW5kb3coKTsKKyAgICAgICAgbV9zaG91bGRP
dmVycmlkZVdoZWVsRXZlbnQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFdo
ZWVsRXZlbnRTdGF0dXM6OlVua25vd246CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK2Jvb2wgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6
c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50ICYmIHRvV2hl
ZWxFdmVudFN0YXR1cyhldmVudC5waGFzZSgpLCBldmVudC5tb21lbnR1bVBoYXNlKCkpID09IFdo
ZWVsRXZlbnRTdGF0dXM6OkluZXJ0aWFsU2Nyb2xsaW5nOworfQorCit2b2lkIEF4aXNTY3JvbGxT
bmFwQW5pbWF0b3I6OnNjcm9sbFNuYXBBbmltYXRpb25VcGRhdGUoKQoreworICAgIEFTU0VSVCht
X2N1cnJlbnRTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgfHwgbV9jdXJyZW50U3Rh
dGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZyk7CisgICAgZmxvYXQgZGVsdGEgPSBtX2N1
cnJlbnRTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nID8gY29tcHV0ZVNuYXBEZWx0
YSgpIDogY29tcHV0ZUdsaWRlRGVsdGEoKTsKKyAgICBpZiAoZGVsdGEpCisgICAgICAgIG1fY2xp
ZW50LT5pbW1lZGlhdGVTY3JvbGxJbkF4aXMobV9heGlzLCBkZWx0YSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIGVuZFNjcm9sbFNuYXBBbmltYXRpb24oKTsKKyAgICAgICAgbV9jdXJyZW50U3RhdGUg
PSBTY3JvbGxTbmFwU3RhdGU6OklkbGU7CisgICAgfQorfQorCit2b2lkIEF4aXNTY3JvbGxTbmFw
QW5pbWF0b3I6OmJlZ2luU2Nyb2xsU25hcEFuaW1hdGlvbihTY3JvbGxTbmFwU3RhdGUgbmV3U3Rh
dGUpCit7CisgICAgQVNTRVJUKG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGluZyB8
fCBuZXdTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nKTsKKyAgICBMYXlvdXRVbml0
IG9mZnNldCA9IG1fY2xpZW50LT5zY3JvbGxPZmZzZXRJbkF4aXMobV9heGlzKTsKKyAgICBmbG9h
dCBpbml0aWFsV2hlZWxEZWx0YSA9IG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6R2xpZGlu
ZyA/IGF2ZXJhZ2VJbml0aWFsV2hlZWxEZWx0YSgpIDogMDsKKyAgICBMYXlvdXRVbml0IHByb2pl
Y3RlZFNjcm9sbERlc3RpbmF0aW9uID0gbmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlk
aW5nID8gbV9iZWdpblRyYWNraW5nV2hlZWxEZWx0YU9mZnNldCArIExheW91dFVuaXQocHJvamVj
dGVkSW5lcnRpYWxTY3JvbGxEaXN0YW5jZShpbml0aWFsV2hlZWxEZWx0YSkpIDogb2Zmc2V0Owor
ICAgIHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uID0gc3RkOjptaW4oc3RkOjptYXgocHJvamVj
dGVkU2Nyb2xsRGVzdGluYXRpb24sIG1fc25hcE9mZnNldHMtPmZpcnN0KCkpLCBtX3NuYXBPZmZz
ZXRzLT5sYXN0KCkpOworICAgIG1faW5pdGlhbE9mZnNldCA9IG9mZnNldDsKKyAgICBtX3Rhcmdl
dE9mZnNldCA9IGNsb3Nlc3RTbmFwT2Zmc2V0PExheW91dFVuaXQ+KCptX3NuYXBPZmZzZXRzLCBw
cm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiwgaW5pdGlhbFdoZWVsRGVsdGEpOworICAgIGlmICht
X2luaXRpYWxPZmZzZXQgPT0gbV90YXJnZXRPZmZzZXQpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fY3VycmVudFN0YXRlID0gbmV3U3RhdGU7CisgICAgaWYgKG5ld1N0YXRlID09IFNjcm9sbFNu
YXBTdGF0ZTo6R2xpZGluZykgeworICAgICAgICBtX3Nob3VsZE92ZXJyaWRlV2hlZWxFdmVudCA9
IHRydWU7CisgICAgICAgIG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSA9IGluaXRpYWxXaGVlbERl
bHRhOworICAgICAgICBib29sIGdsaWRlUmVxdWlyZXNCb29zdDsKKyAgICAgICAgaWYgKGluaXRp
YWxXaGVlbERlbHRhID4gMCkKKyAgICAgICAgICAgIGdsaWRlUmVxdWlyZXNCb29zdCA9IHByb2pl
Y3RlZFNjcm9sbERlc3RpbmF0aW9uIC0gb2Zmc2V0IDwgbV90YXJnZXRPZmZzZXQgLSBwcm9qZWN0
ZWRTY3JvbGxEZXN0aW5hdGlvbjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ2xpZGVSZXF1
aXJlc0Jvb3N0ID0gb2Zmc2V0IC0gcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24gPCBwcm9qZWN0
ZWRTY3JvbGxEZXN0aW5hdGlvbiAtIG1fdGFyZ2V0T2Zmc2V0OworCisgICAgICAgIGluaXRpYWxp
emVHbGlkZVBhcmFtZXRlcnMoZ2xpZGVSZXF1aXJlc0Jvb3N0KTsKKyAgICAgICAgY2xlYXJJbml0
aWFsV2hlZWxEZWx0YVdpbmRvdygpOworICAgIH0KKyAgICBtX2NsaWVudC0+c3RhcnRTY3JvbGxT
bmFwVGltZXIoKTsKK30KKwordm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjplbmRTY3JvbGxT
bmFwQW5pbWF0aW9uKCkKK3sKKyAgICBpZiAobV9jdXJyZW50U3RhdGUgPT0gU2Nyb2xsU25hcFN0
YXRlOjpHbGlkaW5nKQorICAgICAgICBjbGVhckluaXRpYWxXaGVlbERlbHRhV2luZG93KCk7CisK
KyAgICBtX2N1cnJlbnRTdGF0ZSA9IFNjcm9sbFNuYXBTdGF0ZTo6SWRsZTsKKyAgICBtX2NsaWVu
dC0+c3RvcFNjcm9sbFNuYXBUaW1lcigpOworfQorCisvLyBDb21wdXRlcyB0aGUgYW1vdW50IHRv
IHNjcm9sbCBieSB3aGVuIHBlcmZvcm1pbmcgYSAic25hcCIgb3BlcmF0aW9uLCBpLmUuIHdoZW4g
YSB1c2VyIHJlbGVhc2VzIHRoZSB0cmFja3BhZCB3aXRob3V0IGZsaWNraW5nLiBUaGUgc25hcCBk
ZWx0YQorLy8gaXMgYSBmdW5jdGlvbiBvZiBwcm9ncmVzcyB0LCB3aGVyZSB0IGlzIGVxdWFsIHRv
IERJU1RBTkNFX1RSQVZFTEVEIC8gVE9UQUxfRElTVEFOQ0UsIERJU1RBTkNFX1RSQVZFTEVEIGlz
IHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBpbml0aWFsT2Zmc2V0CisvLyB0byB0aGUgY3VycmVudCBv
ZmZzZXQsIGFuZCBUT1RBTF9ESVNUQU5DRSBpcyB0aGUgZGlzdGFuY2UgZnJvbSBpbml0aWFsT2Zm
c2V0IHRvIHRhcmdldE9mZnNldC4gVGhlIHNuYXBwaW5nIGVxdWF0aW9uIGlzIGFzIGZvbGxvd3M6
CisvLyBkZWx0YSh0KSA9IE1BR05JVFVERSAqIHNpbihQSSAqIHQpLiBNQUdOSVRVREUgaW5kaWNh
dGVzIHRoZSB0b3Agc3BlZWQgcmVhY2hlZCBuZWFyIHRoZSBtaWRkbGUgb2YgdGhlIGFuaW1hdGlv
biAodCA9IDAuNSksIGFuZCBpcyBhIGxpbmVhcgorLy8gcmVsYXRpb25zaGlwIG9mIHRoZSBkaXN0
YW5jZSB0cmF2ZWxlZCwgY2xhbXBlZCBieSBhcmJpdHJhcnkgbWluIGFuZCBtYXggdmFsdWVzLgor
ZmxvYXQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6Y29tcHV0ZVNuYXBEZWx0YSgpIGNvbnN0Cit7
CisgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBtX2NsaWVudC0+c2Nyb2xsT2Zmc2V0SW5BeGlzKG1f
YXhpcyk7CisgICAgYm9vbCBjYW5Db21wdXRlU25hcCA9ICAobV9pbml0aWFsT2Zmc2V0IDw9IG9m
ZnNldCAmJiBvZmZzZXQgPCBtX3RhcmdldE9mZnNldCkgfHwgKG1fdGFyZ2V0T2Zmc2V0IDwgb2Zm
c2V0ICYmIG9mZnNldCA8PSBtX2luaXRpYWxPZmZzZXQpOworICAgIGlmIChtX2N1cnJlbnRTdGF0
ZSAhPSBTY3JvbGxTbmFwU3RhdGU6OlNuYXBwaW5nIHx8ICFjYW5Db21wdXRlU25hcCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBpbnQgc2lnbiA9IG1faW5pdGlhbE9mZnNldCA8IG1fdGFyZ2V0
T2Zmc2V0ID8gMSA6IC0xOworICAgIGZsb2F0IHByb2dyZXNzID0gKChmbG9hdCkob2Zmc2V0IC0g
bV9pbml0aWFsT2Zmc2V0KSkgLyAobV90YXJnZXRPZmZzZXQgLSBtX2luaXRpYWxPZmZzZXQpOwor
ICAgIC8vIFRocmVzaG9sZCB0aGUgZGlzdGFuY2UgYmVmb3JlIGNvbXB1dGluZyBtYWduaXR1ZGUs
IHNvIG9ubHkgZGlzdGFuY2VzIHdpdGhpbiBhIGNlcnRhaW4gcmFuZ2UgYXJlIGNvbnNpZGVyZWQu
CisgICAgZmxvYXQgdGhyZXNob2xkZWREaXN0YW5jZSA9IHN0ZDo6bWluKHN0ZDo6bWF4PGZsb2F0
PigobV90YXJnZXRPZmZzZXQgLSBtX2luaXRpYWxPZmZzZXQpICogc2lnbiwgc25hcFRocmVzaG9s
ZExvdyksIHNuYXBUaHJlc2hvbGRIaWdoKTsKKyAgICBmbG9hdCBtYWduaXR1ZGUgPSBzbmFwTWFn
bml0dWRlTWluICsgKHNuYXBNYWduaXR1ZGVNYXggLSBzbmFwTWFnbml0dWRlTWluKSAqICh0aHJl
c2hvbGRlZERpc3RhbmNlIC0gc25hcFRocmVzaG9sZExvdykgLyAoc25hcFRocmVzaG9sZEhpZ2gg
LSBzbmFwVGhyZXNob2xkTG93KTsKKyAgICBmbG9hdCByYXdTbmFwQW1vdW50ID0gc3RkOjptYXg8
ZmxvYXQ+KDEsIG1hZ25pdHVkZSAqIHNpbihwaUZsb2F0ICogcHJvZ3Jlc3MpKTsKKyAgICBpZiAo
KG1fdGFyZ2V0T2Zmc2V0IDwgb2Zmc2V0ICYmIG9mZnNldCAtIHJhd1NuYXBBbW91bnQgPCBtX3Rh
cmdldE9mZnNldCkgfHwgKG1fdGFyZ2V0T2Zmc2V0ID4gb2Zmc2V0ICYmIG9mZnNldCArIHJhd1Nu
YXBBbW91bnQgPiBtX3RhcmdldE9mZnNldCkpCisgICAgICAgIHJldHVybiBtX3RhcmdldE9mZnNl
dCAtIG9mZnNldDsKKworICAgIHJldHVybiBzaWduICogcmF3U25hcEFtb3VudDsKK30KKworLy8g
Q29tcHV0ZXMgdGhlIGFtb3VudCB0byBzY3JvbGwgYnkgd2hlbiBwZXJmb3JtaW5nIGEgImdsaWRl
IiBvcGVyYXRpb24sIGkuZS4gd2hlbiBhIHVzZXIgcmVsZWFzZXMgdGhlIHRyYWNrcGFkIHdpdGgg
YW4gaW5pdGlhbCB2ZWxvY2l0eS4gSGVyZSwKKy8vIHdlIHdhbnQgdGhlIHNjcm9sbCBvZmZzZXQg
dG8gYW5pbWF0ZSBkaXJlY3RseSB0byB0aGUgc25hcCBwb2ludC4gVGhlIHNuYXAgZGVsdGEgaXMg
YSBmdW5jdGlvbiBvZiBwcm9ncmVzcyB0LCB3aGVyZSB0IGlzIGVxdWFsIHRvCisvLyBESVNUQU5D
RV9UUkFWRUxFRCAvIFRPVEFMX0RJU1RBTkNFLCBESVNUQU5DRV9UUkFWRUxFRCBpcyB0aGUgZGlz
dGFuY2UgZnJvbSB0aGUgaW5pdGlhbE9mZnNldCB0byB0aGUgY3VycmVudCBvZmZzZXQsIGFuZCBU
T1RBTF9ESVNUQU5DRSBpcworLy8gdGhlIGRpc3RhbmNlIGZyb20gaW5pdGlhbE9mZnNldCB0byB0
YXJnZXRPZmZzZXQuCisvLyBUaGUgZ2VuZXJhbCBtb2RlbCBvZiBvdXIgZ2xpZGluZyBlcXVhdGlv
biBpcyBkZWx0YSh0KSA9IE1BR05JVFVERSAqICgxICsgY29zKFBJICogdCArIFBIQVNFX1NISUZU
KSkuIFRoaXMgd2FzIGRldGVybWluZWQgYWZ0ZXIgZXhhbWluaW5nIHRoZQorLy8gbW9tZW50dW0g
dmVsb2NpdHkgY3VydmUgYXMgYSBmdW5jdGlvbiBvZiBwcm9ncmVzcy4gVG8gY29tcHV0ZSBNQUdO
SVRVREUgYW5kIFBIQVNFX1NISUZULCB3ZSB1c2UgaW5pdGlhbCB2ZWxvY2l0eSBWMCBhbmQgdGhl
IGZpbmFsIHZlbG9jaXR5IFZGLAorLy8gYm90aCBhcyB3aGVlbCBkZWx0YXMgKHBpeGVscyBwZXIg
dGltZXN0ZXApLiBWRiBzaG91bGQgYmUgYSBzbWFsbCB2YWx1ZSAoPCAxMCkgY2hvc2VuIGJhc2Vk
IG9uIHRoZSBpbml0aWFsIHZlbG9jaXR5IGFuZCBUT1RBTF9ESVNUQU5DRS4KKy8vIFdlIGFsc28g
ZW5mb3JjZSB0aGUgZm9sbG93aW5nIGNvbnN0cmFpbnRzIGZvciB0aGUgZ2xpZGluZyBlcXVhdGlv
bjoKKy8vICAgMS4gZGVsdGEoMCkgPSBWMCwgc2luY2Ugd2Ugd2FudCB0aGUgaW5pdGlhbCB2ZWxv
Y2l0eSBvZiB0aGUgZ2xpZGluZyBhbmltYXRpb24gdG8gbWF0Y2ggdGhlIHVzZXIncyBzY3JvbGwg
dmVsb2NpdHkuIFRoZSBleGNlcHRpb24gdG8gdGhpcyBpcworLy8gICAgICB3aGVuIHRoZSBnbGlk
ZSB2ZWxvY2l0eSBpcyBub3QgZW5vdWdoIHRvIG5hdHVyYWxseSByZWFjaCB0aGUgbmV4dCBzbmFw
IHBvaW50LCBhbmQgdGh1cyByZXF1aXJlcyBhIGJvb3N0IChzZWUgaW5pdGlhbGl6ZUdsaWRlUGFy
YW1ldGVycykKKy8vICAgMi4gZGVsdGEoMSkgPSBWRiwgc2luY2UgYXQgdD0xLCB0aGUgYW5pbWF0
aW9uIGhhcyBjb21wbGV0ZWQgYW5kIHdlIHdhbnQgdGhlIGxhc3Qgd2hlZWwgZGVsdGEgdG8gbWF0
Y2ggdGhlIGZpbmFsIHZlbG9jaXR5IFZGLiBOb3RlIHRoYXQgdGhpcworLy8gICAgICBkb2Vzbid0
IGd1YXJhbnRlZSB0aGF0IHRoZSBmaW5hbCB2ZWxvY2l0eSB3aWxsIGJlIGV4YWN0bHkgVkYuIEhv
d2V2ZXIsIGFzc3VtaW5nIHRoYXQgdGhlIGluaXRpYWwgdmVsb2NpdHkgaXMgbXVjaCBsZXNzIHRo
YW4gVE9UQUxfRElTVEFOQ0UsCisvLyAgICAgIHRoZSBsYXN0IHdoZWVsIGRlbHRhIHdpbGwgYmUg
dmVyeSBjbG9zZSwgaWYgbm90IHRoZSBzYW1lLCBhcyBWRi4KKy8vIEZvciBNQUdOSVRVREUgPSAo
VjAgKyBWRikgLyAyIGFuZCBQSEFTRV9TSElGVCA9IGFyY2NvcygoVjAgLSBWRikgLyAoVjAgKyBW
RikpLCBvYnNlcnZlIHRoYXQgZGVsdGEoMCkgYW5kIGRlbHRhKDEpIGV2YWx1YXRlIHJlc3BlY3Rp
dmVseSB0byBWMAorLy8gYW5kIFZGLiBUaHVzLCB3ZSBjYW4gZXhwcmVzcyBvdXIgZ2xpZGluZyBl
cXVhdGlvbiBhbGwgaW4gdGVybXMgb2YgVjAsIFZGIGFuZCB0LgorZmxvYXQgQXhpc1Njcm9sbFNu
YXBBbmltYXRvcjo6Y29tcHV0ZUdsaWRlRGVsdGEoKSBjb25zdAoreworICAgIExheW91dFVuaXQg
b2Zmc2V0ID0gbV9jbGllbnQtPnNjcm9sbE9mZnNldEluQXhpcyhtX2F4aXMpOworICAgIGJvb2wg
Y2FuQ29tcHV0ZUdsaWRlID0gKG1faW5pdGlhbE9mZnNldCA8PSBvZmZzZXQgJiYgb2Zmc2V0IDwg
bV90YXJnZXRPZmZzZXQpIHx8IChtX3RhcmdldE9mZnNldCA8IG9mZnNldCAmJiBvZmZzZXQgPD0g
bV9pbml0aWFsT2Zmc2V0KTsKKyAgICBpZiAobV9jdXJyZW50U3RhdGUgIT0gU2Nyb2xsU25hcFN0
YXRlOjpHbGlkaW5nIHx8ICFjYW5Db21wdXRlR2xpZGUpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgZmxvYXQgcHJvZ3Jlc3MgPSAoKGZsb2F0KShvZmZzZXQgLSBtX2luaXRpYWxPZmZzZXQpKSAv
IChtX3RhcmdldE9mZnNldCAtIG1faW5pdGlhbE9mZnNldCk7CisgICAgZmxvYXQgc2hpZnQgPSBj
ZWlsKG1fZ2xpZGVNYWduaXR1ZGUgKiAoMSArIGNvcyhwaUZsb2F0ICogcHJvZ3Jlc3MgKyBtX2ds
aWRlUGhhc2VTaGlmdCkpKTsKKyAgICBzaGlmdCA9IG1faW5pdGlhbE9mZnNldCA8IG1fdGFyZ2V0
T2Zmc2V0ID8gc3RkOjptYXg8ZmxvYXQ+KHNoaWZ0LCAxKSA6IHN0ZDo6bWluPGZsb2F0PihzaGlm
dCwgLTEpOworICAgIGlmICgobV9pbml0aWFsT2Zmc2V0IDwgbV90YXJnZXRPZmZzZXQgJiYgb2Zm
c2V0ICsgc2hpZnQgPiBtX3RhcmdldE9mZnNldCkgfHwgKG1faW5pdGlhbE9mZnNldCA+IG1fdGFy
Z2V0T2Zmc2V0ICYmIG9mZnNldCArIHNoaWZ0IDwgbV90YXJnZXRPZmZzZXQpKQorICAgICAgICBy
ZXR1cm4gbV90YXJnZXRPZmZzZXQgLSBvZmZzZXQ7CisKKyAgICByZXR1cm4gc2hpZnQ7Cit9CisK
K3ZvaWQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6aW5pdGlhbGl6ZUdsaWRlUGFyYW1ldGVycyhi
b29sIHNob3VsZEluY3JlYXNlSW5pdGlhbFdoZWVsRGVsdGEpCit7CisgICAgLy8gRklYTUU6IEds
aWRlIGJvb3N0IGlzIGEgaGFja3kgd2F5IHRvIHNwZWVkIHVwIG5hdHVyYWwgc2Nyb2xsaW5nIHZl
bG9jaXR5LiBXZSBzaG91bGQgZmluZCBhIGJldHRlciB3YXkgdG8gYWNjb21wbGlzaCB0aGlzLgor
ICAgIGlmIChzaG91bGRJbmNyZWFzZUluaXRpYWxXaGVlbERlbHRhKQorICAgICAgICBtX2dsaWRl
SW5pdGlhbFdoZWVsRGVsdGEgKj0gZ2xpZGVCb29zdE11bHRpcGxpZXI7CisKKyAgICAvLyBGSVhN
RTogVGhlcmUgbXVzdCBiZSBhIGJldHRlciB3YXkgdG8gZGV0ZXJtaW5lIGEgZ29vZCB0YXJnZXQg
ZGVsdGEgdGhhbiBtdWx0aXBseWluZyBieSBhIGZhY3RvciBhbmQgY2xhbXBpbmcgdG8gbWluL21h
eCB2YWx1ZXMuCisgICAgZmxvYXQgdGFyZ2V0RmluYWxXaGVlbERlbHRhID0gaW5pdGlhbFRvRmlu
YWxNb21lbnR1bUZhY3RvciAqIChtX2dsaWRlSW5pdGlhbFdoZWVsRGVsdGEgPCAwID8gLW1fZ2xp
ZGVJbml0aWFsV2hlZWxEZWx0YSA6IG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSk7CisgICAgdGFy
Z2V0RmluYWxXaGVlbERlbHRhID0gKG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSA+IDAgPyAxIDog
LTEpICogc3RkOjptaW4oc3RkOjptYXgodGFyZ2V0RmluYWxXaGVlbERlbHRhLCBtaW5UYXJnZXRX
aGVlbERlbHRhKSwgbWF4VGFyZ2V0V2hlZWxEZWx0YSk7CisgICAgbV9nbGlkZU1hZ25pdHVkZSA9
IChtX2dsaWRlSW5pdGlhbFdoZWVsRGVsdGEgKyB0YXJnZXRGaW5hbFdoZWVsRGVsdGEpIC8gMjsK
KyAgICBtX2dsaWRlUGhhc2VTaGlmdCA9IGFjb3MoKG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSAt
IHRhcmdldEZpbmFsV2hlZWxEZWx0YSkgLyAobV9nbGlkZUluaXRpYWxXaGVlbERlbHRhICsgdGFy
Z2V0RmluYWxXaGVlbERlbHRhKSk7Cit9CisKK3ZvaWQgQXhpc1Njcm9sbFNuYXBBbmltYXRvcjo6
cHVzaEluaXRpYWxXaGVlbERlbHRhKGZsb2F0IHdoZWVsRGVsdGEpCit7CisgICAgaWYgKG1fbnVt
V2hlZWxEZWx0YXNUcmFja2VkIDwgd2hlZWxEZWx0YVdpbmRvd1NpemUpCisgICAgICAgIG1fd2hl
ZWxEZWx0YVdpbmRvd1ttX251bVdoZWVsRGVsdGFzVHJhY2tlZCsrXSA9IHdoZWVsRGVsdGE7Cit9
CisKK2Zsb2F0IEF4aXNTY3JvbGxTbmFwQW5pbWF0b3I6OmF2ZXJhZ2VJbml0aWFsV2hlZWxEZWx0
YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX251bVdoZWVsRGVsdGFzVHJhY2tlZCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBmbG9hdCBzdW0gPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bV9udW1XaGVlbERlbHRhc1RyYWNrZWQ7IGkrKykKKyAgICAgICAgc3VtICs9IG1fd2hlZWxEZWx0
YVdpbmRvd1tpXTsKKworICAgIHJldHVybiBzdW0gLyBtX251bVdoZWVsRGVsdGFzVHJhY2tlZDsK
K30KKwordm9pZCBBeGlzU2Nyb2xsU25hcEFuaW1hdG9yOjpjbGVhckluaXRpYWxXaGVlbERlbHRh
V2luZG93KCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbnVtV2hlZWxEZWx0YXNUcmFj
a2VkOyBpKyspCisgICAgICAgIG1fd2hlZWxEZWx0YVdpbmRvd1tpXSA9IDA7CisKKyAgICBtX251
bVdoZWVsRGVsdGFzVHJhY2tlZCA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIENTU19TQ1JPTExfU05BUAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>