<?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>76660</bug_id>
          
          <creation_ts>2012-01-19 13:36:49 -0800</creation_ts>
          <short_desc>[Texmap] Divide TextureMapperNode.cpp to 3 files.</short_desc>
          <delta_ts>2012-02-15 00:26:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>77004</dependson>
          <blocked>75918</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>hausmann</cc>
    
    <cc>igor.oliveira</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>538985</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-19 13:36:49 -0800</bug_when>
    <thetext>TextureMapperNode.cpp is becoming too complex to maintain. Essentially, it can be renamed/divided to 3 parts:
1. painting and tree management, should be called TextureMapperLayer (like ChromiumLayer)
2. animation management, should be called TextureMapperAnimation
3. backing-store/tile management, should be called TextureMapperBackingStore.

There are several fixes pending for each of these parts, it would make it much easier to perform those fixes after the files are divided.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539134</commentid>
    <comment_count>1</comment_count>
      <attachid>123219</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-19 16:12:47 -0800</bug_when>
    <thetext>Created attachment 123219
Patch 1: Animations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540299</commentid>
    <comment_count>2</comment_count>
      <attachid>123219</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-01-22 11:40:35 -0800</bug_when>
    <thetext>Comment on attachment 123219
Patch 1: Animations

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

Looks fine, but maybe someone else wants to have a look

&gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:368
&gt; +    bool listsMatch, hasBigRotation;

two lines please

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.cpp:32
&gt; +    if (!duration)
&gt; +        return 0;
&gt; +    const int loopCount = runningTime / duration;

I would normally add newlines after returns like this one

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.cpp:80
&gt; +        return solveCubicBezierFunction(ctf-&gt;x1(),
&gt; +                                        ctf-&gt;y1(),
&gt; +                                        ctf-&gt;x2(),
&gt; +                                        ctf-&gt;y2(),
&gt; +                                        progress, duration);

why not just keep that one line, is should be no longer than the line above

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.cpp:94
&gt; +    // Optimization: special case the edge values (0 and 1).
&gt; +    if (progress == 1.0 || !progress) {

uh I dont like our coding style for this :-)

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.h:38
&gt; +    enum PlayState { PlayingState, PausedState, StoppedState };

why not AnimationState?

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.h:76
&gt; +    bool hasActiveAnimationsOfType(AnimatedPropertyID type) const;

Would it make sense as a template?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540300</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-22 11:47:57 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.h:38
&gt; &gt; +    enum PlayState { PlayingState, PausedState, StoppedState };
&gt; 
&gt; why not AnimationState?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.h:76
&gt; &gt; +    bool hasActiveAnimationsOfType(AnimatedPropertyID type) const;
&gt; 
&gt; Would it make sense as a template?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540301</commentid>
    <comment_count>4</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-22 11:49:00 -0800</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.h:76
&gt; &gt; &gt; +    bool hasActiveAnimationsOfType(AnimatedPropertyID type) const;
&gt; &gt; 
&gt; &gt; Would it make sense as a template?
I don&apos;t really understand what that would give us. Something like  
bool hasActiveAnimationsOfType&lt;AnimatedPropertyID&gt;() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540304</commentid>
    <comment_count>5</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-22 11:49:59 -0800</bug_when>
    <thetext>&gt; Looks fine, but maybe someone else wants to have a look
&gt; 
Jocelyn/Igor, interested in taking a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540346</commentid>
    <comment_count>6</comment_count>
      <attachid>123506</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-22 18:25:59 -0800</bug_when>
    <thetext>Created attachment 123506
Patch 1: Move animations to TextureMapperAnimations

Addressed some of Kenneth&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540350</commentid>
    <comment_count>7</comment_count>
      <attachid>123507</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-22 18:51:14 -0800</bug_when>
    <thetext>Created attachment 123507
Patch 1: Move animations to TextureMapperAnimations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540351</commentid>
    <comment_count>8</comment_count>
      <attachid>123508</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-22 18:55:37 -0800</bug_when>
    <thetext>Created attachment 123508
Patch 1: Move animations to TextureMapperAnimations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540441</commentid>
    <comment_count>9</comment_count>
      <attachid>123508</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-01-23 01:59:24 -0800</bug_when>
    <thetext>Comment on attachment 123508
Patch 1: Move animations to TextureMapperAnimations

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

&gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:-381
&gt; -    for (size_t i = 0; i &lt; m_animations.size(); ++i) {
&gt; -        // The same animation name can be used for two animations with different properties.
&gt; -        if (m_animations[i]-&gt;name != keyframesName || m_animations[i]-&gt;keyframes.property() != valueList.property())
&gt; -            continue;
&gt; -
&gt; -        // We already have a copy of this animation, that means that we&apos;re resuming it rather than adding it.
&gt; -        RefPtr&lt;TextureMapperAnimation&gt;&amp; animation = m_animations[i];
&gt; -        animation-&gt;animation = Animation::create(anim);
&gt; -        animation-&gt;paused = false;
&gt; -        animation-&gt;startTime = WTF::currentTime() - timeOffset;
&gt; -        notifyChange(TextureMapperNode::AnimationChange);
&gt; -        m_animationStartedTimer.startOneShot(0);
&gt; -        return true;
&gt; -    }

I don&apos;t see a functional equivalent of this part. Is it intentional?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540442</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-01-23 02:01:32 -0800</bug_when>
    <thetext>Apart from my comment I think this is a nice move.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540501</commentid>
    <comment_count>11</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-23 06:03:52 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 123508 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123508&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:-381
&gt; &gt; -    for (size_t i = 0; i &lt; m_animations.size(); ++i) {
&gt; &gt; -        // The same animation name can be used for two animations with different properties.
&gt; &gt; -        if (m_animations[i]-&gt;name != keyframesName || m_animations[i]-&gt;keyframes.property() != valueList.property())
&gt; &gt; -            continue;
&gt; &gt; -
&gt; &gt; -        // We already have a copy of this animation, that means that we&apos;re resuming it rather than adding it.
&gt; &gt; -        RefPtr&lt;TextureMapperAnimation&gt;&amp; animation = m_animations[i];
&gt; &gt; -        animation-&gt;animation = Animation::create(anim);
&gt; &gt; -        animation-&gt;paused = false;
&gt; &gt; -        animation-&gt;startTime = WTF::currentTime() - timeOffset;
&gt; &gt; -        notifyChange(TextureMapperNode::AnimationChange);
&gt; &gt; -        m_animationStartedTimer.startOneShot(0);
&gt; &gt; -        return true;
&gt; &gt; -    }
&gt; 
&gt; I don&apos;t see a functional equivalent of this part. Is it intentional?
The functional equivalent part was in GraphicsLayerTextureMapper::addAnimation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541046</commentid>
    <comment_count>12</comment_count>
      <attachid>123508</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-23 18:02:06 -0800</bug_when>
    <thetext>Comment on attachment 123508
Patch 1: Move animations to TextureMapperAnimations

Rejecting attachment 123508 from commit-queue.

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

Last 500 characters of output:
ueue/Tools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 70, in run_and_handle_errors
    self._run(tool, options, state)
  File &quot;/mnt/git/webkit-commit-queue/Tools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 64, in _run
    step(tool, options).run(state)
  File &quot;/mnt/git/webkit-commit-queue/Tools/Scripts/webkitpy/tool/steps/validatereviewer.py&quot;, line 53, in run
    if changelog_entry.has_valid_reviewer():
AttributeError: &apos;NoneType&apos; object has no attribute &apos;has_valid_reviewer&apos;

Full output: http://queues.webkit.org/results/11275149</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541296</commentid>
    <comment_count>13</comment_count>
      <attachid>123726</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-24 06:47:52 -0800</bug_when>
    <thetext>Created attachment 123726
Patch 1: Move animations to TextureMapperAnimations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541301</commentid>
    <comment_count>14</comment_count>
      <attachid>123726</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-24 06:52:13 -0800</bug_when>
    <thetext>Comment on attachment 123726
Patch 1: Move animations to TextureMapperAnimations

Rejecting attachment 123726 from commit-queue.

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

Last 500 characters of output:
ueue/Tools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 70, in run_and_handle_errors
    self._run(tool, options, state)
  File &quot;/mnt/git/webkit-commit-queue/Tools/Scripts/webkitpy/tool/commands/stepsequence.py&quot;, line 64, in _run
    step(tool, options).run(state)
  File &quot;/mnt/git/webkit-commit-queue/Tools/Scripts/webkitpy/tool/steps/validatereviewer.py&quot;, line 53, in run
    if changelog_entry.has_valid_reviewer():
AttributeError: &apos;NoneType&apos; object has no attribute &apos;has_valid_reviewer&apos;

Full output: http://queues.webkit.org/results/11336331</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541866</commentid>
    <comment_count>15</comment_count>
      <attachid>123848</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-24 17:06:42 -0800</bug_when>
    <thetext>Created attachment 123848
Patch 1: Animations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541948</commentid>
    <comment_count>16</comment_count>
      <attachid>123848</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-24 18:42:02 -0800</bug_when>
    <thetext>Comment on attachment 123848
Patch 1: Animations

Rejecting attachment 123848 from commit-queue.

New failing tests:
media/audio-garbage-collect.html
Full output: http://queues.webkit.org/results/11177146</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541967</commentid>
    <comment_count>17</comment_count>
      <attachid>123848</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-24 19:30:26 -0800</bug_when>
    <thetext>Comment on attachment 123848
Patch 1: Animations

Rejected due to a flaky test, trying again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542135</commentid>
    <comment_count>18</comment_count>
      <attachid>123848</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-25 03:11:27 -0800</bug_when>
    <thetext>Comment on attachment 123848
Patch 1: Animations

Clearing flags on attachment: 123848

Committed r105858: &lt;http://trac.webkit.org/changeset/105858&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542137</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-25 03:11:32 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542148</commentid>
    <comment_count>20</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-01-25 03:32:29 -0800</bug_when>
    <thetext>Reopen, because it made animations/transition-and-animation-2.html and animations/3d/transform-perspective.html crash on Qt. Could you check what happened?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542176</commentid>
    <comment_count>21</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-01-25 04:17:27 -0800</bug_when>
    <thetext>http://build.webkit.sed.hu/results/x86-64%20Linux%20Qt%20Debug/r105858%20%2820616%29/results.html

ASSERTION FAILED: i &lt; size()
../../../../Source/JavaScriptCore/wtf/Vector.h(520) : T&amp; WTF::Vector&lt;T, inlineCapacity&gt;::at(size_t) [with T = WTF::RefPtr&lt;WebCore::TransformOperation&gt;, long unsigned int inlineCapacity = 0ul]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542193</commentid>
    <comment_count>22</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-01-25 04:40:41 -0800</bug_when>
    <thetext>I rolled out it to make bots able to catch new regressions again: http://trac.webkit.org/changeset/105868

Please fix the bug and then feel free to reland the fixed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542222</commentid>
    <comment_count>23</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-25 06:15:16 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Reopen, because it made animations/transition-and-animation-2.html and animations/3d/transform-perspective.html crash on Qt. Could you check what happened?

Looking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542418</commentid>
    <comment_count>24</comment_count>
      <attachid>123969</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-25 10:21:07 -0800</bug_when>
    <thetext>Created attachment 123969
Patch 1: Move animations to TextureMapperAnimations

Fixed issue that caused some tests to crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542597</commentid>
    <comment_count>25</comment_count>
      <attachid>124003</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-25 13:55:27 -0800</bug_when>
    <thetext>Created attachment 124003
Patch 1: Move animations to TextureMapperAnimations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542601</commentid>
    <comment_count>26</comment_count>
      <attachid>124006</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-25 13:58:37 -0800</bug_when>
    <thetext>Created attachment 124006
Patch 1: Move animations to TextureMapperAnimations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542613</commentid>
    <comment_count>27</comment_count>
      <attachid>124006</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-25 14:13:44 -0800</bug_when>
    <thetext>Comment on attachment 124006
Patch 1: Move animations to TextureMapperAnimations

Clearing flags on attachment: 124006

Committed r105925: &lt;http://trac.webkit.org/changeset/105925&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542614</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-25 14:13:51 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542803</commentid>
    <comment_count>29</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-25 17:22:11 -0800</bug_when>
    <thetext>2 more patches coming...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554159</commentid>
    <comment_count>30</comment_count>
      <attachid>123508</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-10 10:20:24 -0800</bug_when>
    <thetext>Comment on attachment 123508
Patch 1: Move animations to TextureMapperAnimations

Cleared Kenneth Rohde Christiansen&apos;s review+ from obsolete attachment 123508 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556255</commentid>
    <comment_count>31</comment_count>
      <attachid>126966</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-14 05:43:44 -0800</bug_when>
    <thetext>Created attachment 126966
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556257</commentid>
    <comment_count>32</comment_count>
      <attachid>126967</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-14 05:44:50 -0800</bug_when>
    <thetext>Created attachment 126967
Patch 2: Rename TextureMapperNode to TextureMapperLayer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556259</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-14 05:46:50 -0800</bug_when>
    <thetext>Attachment 126967 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
First, rewinding head to replay your work on top of it...
Applying: [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets
Using index info to reconstruct a base tree...
&lt;stdin&gt;:1578: trailing whitespace.
        
&lt;stdin&gt;:1647: trailing whitespace.
    
&lt;stdin&gt;:1657: trailing whitespace.
    
&lt;stdin&gt;:1672: trailing whitespace.
        return 0;        
&lt;stdin&gt;:1674: trailing whitespace.
    
warning: squelched 7 whitespace errors
warning: 12 lines add whitespace errors.
Falling back to patching base and 3-way merge...
warning: too many files (created: 168776 deleted: 3), skipping inexact rename detection
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Auto-merging Source/WebKit2/ChangeLog
CONFLICT (content): Merge conflict in Source/WebKit2/ChangeLog
Auto-merging Tools/ChangeLog
CONFLICT (content): Merge conflict in Tools/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556260</commentid>
    <comment_count>34</comment_count>
      <attachid>126967</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-02-14 05:48:28 -0800</bug_when>
    <thetext>Comment on attachment 126967
Patch 2: Rename TextureMapperNode to TextureMapperLayer

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556293</commentid>
    <comment_count>35</comment_count>
      <attachid>126967</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-14 07:35:07 -0800</bug_when>
    <thetext>Comment on attachment 126967
Patch 2: Rename TextureMapperNode to TextureMapperLayer

Rejecting attachment 126967 from commit-queue.

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

Last 500 characters of output:
file Source/WebKit/qt/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebKit/qt/WebCoreSupport/PageClientQt.cpp
patching file Source/WebKit/qt/WebCoreSupport/PageClientQt.h
patching file Source/WebKit2/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Kenneth Ro...&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue/

Full output: http://queues.webkit.org/results/11514335</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556960</commentid>
    <comment_count>36</comment_count>
      <attachid>127122</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-14 23:25:29 -0800</bug_when>
    <thetext>Created attachment 127122
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556974</commentid>
    <comment_count>37</comment_count>
      <attachid>127122</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-15 00:26:50 -0800</bug_when>
    <thetext>Comment on attachment 127122
Patch

Clearing flags on attachment: 127122

Committed r107787: &lt;http://trac.webkit.org/changeset/107787&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556975</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-15 00:26:57 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123219</attachid>
            <date>2012-01-19 16:12:47 -0800</date>
            <delta_ts>2012-01-22 18:25:59 -0800</delta_ts>
            <desc>Patch 1: Animations</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>35486</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmY2ZjNDYxLi44MzIyNDIyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzcg
QEAKKyAyMDEyLTAxLTE5ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CisgCisgICAgICAgIFtUZXhtYXBdIERpdmlkZSBUZXh0dXJlTWFwcGVyTm9kZS5jcHAgdG8g
MyBmaWxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc2NjYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U3BsaXQgdGhlIGFuaW1hdGlvbiBwYXJ0IG9mIFRleHR1cmVNYXBwZXJOb2RlIG91dCB0byBhIHNl
cGFyYXRlIGZpbGUsIGNhbGxlZAorICAgICAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uLgorICAg
ICAgICBQcm92aWRlIGEgY2xlYW4gaW50ZXJmYWNlIGZvciB0aGF0IGNsYXNzLCB0aGF0IGFsbG93
cyBzZXBhcmF0aW5nIHRoZSBpbnRlcm5hbHMgb2YgdGhlIHNjZW5lCisgICAgICAgIHBhaW50aW5n
IGZyb20gdGhlIGludGVybmFscyBvZiB0aGUgYW5pbWF0aW9uIGludGVycG9sYXRpb24uCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiBFeGlzdGluZyBhbmltYXRpb24gdGVzdHMgY292ZXIgdGhpcy4K
KworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZGVkIG5ldyBUZXh0dXJlTWFwcGVy
LXJlbGF0ZWQgZmlsZXMuCisgICAgICAgICogVGFyZ2V0LnByaTogQWRkZWQgbmV3IFRleHR1cmVN
YXBwZXItcmVsYXRlZCBmaWxlcy4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZGVkIG5ldyBU
ZXh0dXJlTWFwcGVyLXJlbGF0ZWQgZmlsZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnBhdXNlQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpyZW1vdmVBbmltYXRpb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyQW5pbWF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdB
bmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQW5p
bWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0FuaW1h
dGlvbnNSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6
c3luY0NvbXBvc2l0aW5nU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyTm9kZS5oOgorCjIwMTItMDEtMTkgIE5vJ2FtIFJvc2VudGhhbCAgPG5v
YW0ucm9zZW50aGFsQG5va2lhLmNvbT4KCiAgICAgICAgIFtUZXhtYXBdIFRleHR1cmVNYXBwZXIg
Y3JlYXRlcyB0d28gbWFueSBiaWcgaW50ZXJtZWRpYXRlIHN1cmZhY2VzCiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjMzNgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQppbmRleCBiYmIyNjU5Li4zZDI1ODQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KQEAgLTU2ODgsOSArNTY4OCwxMSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
TGF5ZXJUcmFuc2Zvcm0uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyLmgKIHdlYmNvcmVndGtfc291cmNlcyArPSBcCkBAIC01NzA2LDkgKzU3MDgs
MTEgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmggXAoJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIFwK
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgg
XAoJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJBbmltYXRpb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgK
IHdlYmNvcmVndGtfc291cmNlcyArPSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA0NTdkYjBjLi5mNDA5YTRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKQEAgLTM5MjksNiArMzkyOSw3IEBAIGNvbnRhaW5zKENPTkZJRywgdGV4
bWFwKSB7CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJh
bnNmb3JtLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ci5oIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmlt
YXRpb24uaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
Tm9kZS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyLmgKIApAQCAtMzkzNiw2ICszOTM3LDcgQEAgY29udGFpbnMoQ09ORklHLCB0
ZXhtYXApIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNw
cCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5jcHAg
XAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAgXAor
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5j
cHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUu
Y3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggN2I1MTdkNC4uZjA5ZDJmNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMzk2MSw2ICszOTYxLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyTm9kZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLmNwcAppbmRleCA3ZWY5ODE4Li42ZTZjZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTM2NSw1OSArMzY1LDI2IEBAIGJvb2wgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYgdmFsdWVMaXN0CiAgICAgaWYgKCFhbmltIHx8IGFuaW0tPmlzRW1wdHlPclplcm9EdXJhdGlv
bigpIHx8IHZhbHVlTGlzdC5zaXplKCkgPCAyIHx8ICh2YWx1ZUxpc3QucHJvcGVydHkoKSAhPSBB
bmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtICYmIHZhbHVlTGlzdC5wcm9wZXJ0eSgpICE9
IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgLy8gVGhlIHNhbWUgYW5pbWF0aW9uIG5hbWUgY2FuIGJlIHVzZWQgZm9yIHR3byBhbmltYXRp
b25zIHdpdGggZGlmZmVyZW50IHByb3BlcnRpZXMuCi0gICAgICAgIGlmIChtX2FuaW1hdGlvbnNb
aV0tPm5hbWUgIT0ga2V5ZnJhbWVzTmFtZSB8fCBtX2FuaW1hdGlvbnNbaV0tPmtleWZyYW1lcy5w
cm9wZXJ0eSgpICE9IHZhbHVlTGlzdC5wcm9wZXJ0eSgpKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGEgY29weSBvZiB0aGlzIGFuaW1hdGlvbiwg
dGhhdCBtZWFucyB0aGF0IHdlJ3JlIHJlc3VtaW5nIGl0IHJhdGhlciB0aGFuIGFkZGluZyBpdC4K
LSAgICAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJBbmltYXRpb24+JiBhbmltYXRpb24gPSBtX2Fu
aW1hdGlvbnNbaV07Ci0gICAgICAgIGFuaW1hdGlvbi0+YW5pbWF0aW9uID0gQW5pbWF0aW9uOjpj
cmVhdGUoYW5pbSk7Ci0gICAgICAgIGFuaW1hdGlvbi0+cGF1c2VkID0gZmFsc2U7Ci0gICAgICAg
IGFuaW1hdGlvbi0+c3RhcnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpIC0gdGltZU9mZnNldDsK
LSAgICAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpBbmltYXRpb25DaGFuZ2Up
OwotICAgICAgICBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBib29sIGxpc3RzTWF0Y2gsIGhhc0JpZ1JvdGF0
aW9uOworICAgIFZlY3RvcjxUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGU+IGZ1bmN0
aW9uTGlzdDsKIAotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiBhbmltYXRpb24g
PSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpjcmVhdGUodmFsdWVMaXN0KTsKLSAgICBhbmltYXRp
b24tPmJveFNpemUgPSBib3hTaXplOwotICAgIGFuaW1hdGlvbi0+bmFtZSA9IGtleWZyYW1lc05h
bWU7Ci0gICAgYW5pbWF0aW9uLT5hbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZShhbmltKTsK
LSAgICBhbmltYXRpb24tPnBhdXNlZCA9IGZhbHNlOwotICAgIGFuaW1hdGlvbi0+c3RhcnRUaW1l
ID0gV1RGOjpjdXJyZW50VGltZSgpIC0gdGltZU9mZnNldDsKLQotICAgIGlmICh2YWx1ZUxpc3Qu
cHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKSB7Ci0gICAgICAg
IGJvb2wgaGFzQmlnUm90YXRpb247IC8vIE5vdCB1c2VkLCBidXQgcmVxdWlyZWQgYXMgYSBwb2lu
dGVyIHBhcmFtZXRlciBmb3IgdGhlIGZ1bmN0aW9uLgotICAgICAgICBmZXRjaFRyYW5zZm9ybU9w
ZXJhdGlvbkxpc3QodmFsdWVMaXN0LCBhbmltYXRpb24tPmZ1bmN0aW9uTGlzdCwgYW5pbWF0aW9u
LT5saXN0c01hdGNoLCBoYXNCaWdSb3RhdGlvbik7Ci0gICAgfQorICAgIGlmICh2YWx1ZUxpc3Qu
cHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKQorICAgICAgICBm
ZXRjaFRyYW5zZm9ybU9wZXJhdGlvbkxpc3QodmFsdWVMaXN0LCBmdW5jdGlvbkxpc3QsIGxpc3Rz
TWF0Y2gsIGhhc0JpZ1JvdGF0aW9uKTsKIAotICAgIG1fYW5pbWF0aW9ucy5hcHBlbmQoYW5pbWF0
aW9uKTsKKyAgICBtX2FuaW1hdGlvbnMuYWRkKGtleWZyYW1lc05hbWUsIFRleHR1cmVNYXBwZXJB
bmltYXRpb24odmFsdWVMaXN0LCBib3hTaXplLCBhbmltLCB0aW1lT2Zmc2V0LCBmdW5jdGlvbkxp
c3QsIGxpc3RzTWF0Y2gpKTsKICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkFu
aW1hdGlvbkNoYW5nZSk7CiAgICAgbV9hbmltYXRpb25TdGFydGVkVGltZXIuc3RhcnRPbmVTaG90
KDApOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91Ymxl
IHRpbWVPZmZzZXQpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS0+bmFtZSAhPSBhbmlt
YXRpb25OYW1lKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1fYW5pbWF0aW9uc1tp
XS0+cGF1c2VkID0gdHJ1ZTsKLSAgICAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2Rl
OjpBbmltYXRpb25DaGFuZ2UpOwotICAgIH0KKyAgICBtX2FuaW1hdGlvbnMucGF1c2UoYW5pbWF0
aW9uTmFtZSwgdGltZU9mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCiB7Ci0gICAg
Zm9yIChpbnQgaSA9IG1fYW5pbWF0aW9ucy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAg
ICAgICAvLyBUaGUgc2FtZSBhbmltYXRpb24gbmFtZSBjYW4gYmUgdXNlZCBmb3IgdHdvIGFuaW1h
dGlvbnMgd2l0aCBkaWZmZXJlbnQgcHJvcGVydGllcy4gV2Ugc2hvdWxkIHJlbW92ZSBib3RoLgot
ICAgICAgICBpZiAobV9hbmltYXRpb25zW2ldLT5uYW1lICE9IGFuaW1hdGlvbk5hbWUpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9hbmltYXRpb25zLnJlbW92ZShpKTsKLSAgICAg
ICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpBbmltYXRpb25DaGFuZ2UpOwotICAg
IH0KKyAgICBtX2FuaW1hdGlvbnMucmVtb3ZlKGFuaW1hdGlvbk5hbWUpOwogfQogCiB2b2lkIEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphbmltYXRpb25TdGFydGVkVGltZXJGaXJlZChUaW1l
cjxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4qKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuaAppbmRleCBlYmI5YjUzLi4xNzJmZGRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuaApAQCAtOTUsNyArOTUsNyBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9zeW5jUXVldWVkOwogICAgIGludCBtX2NoYW5nZU1hc2s7CiAgICAgVGV4dHVyZU1hcHBl
ck5vZGU6OkNvbnRlbnREYXRhIG1fcGVuZGluZ0NvbnRlbnQ7Ci0gICAgVmVjdG9yPFJlZlB0cjxU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiA+IG1fYW5pbWF0aW9uczsKKyAgICBUZXh0dXJlTWFwcGVy
QW5pbWF0aW9ucyBtX2FuaW1hdGlvbnM7CiAgICAgdm9pZCBhbmltYXRpb25TdGFydGVkVGltZXJG
aXJlZChUaW1lcjxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4qKTsKICAgICBUaW1lcjxHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcj4gbV9hbmltYXRpb25TdGFydGVkVGltZXI7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwCmluZGV4IGU2OWRlMjkuLjBiZWZmYzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyQW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAKQEAgLTAsMCArMSwyNDMgQEAKKy8q
CisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIgorCisjaW5jbHVkZSAiQ3VycmVu
dFRpbWUuaCIKKyNpbmNsdWRlICJVbml0QmV6aWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIGRvdWJsZSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUoZG91YmxlIHJ1bm5pbmdU
aW1lLCBkb3VibGUgZHVyYXRpb24sIGJvb2wgYWx0ZXJuYXRlKQoreworICAgIGlmICghZHVyYXRp
b24pCisgICAgICAgIHJldHVybiAwOworICAgIGNvbnN0IGludCBsb29wQ291bnQgPSBydW5uaW5n
VGltZSAvIGR1cmF0aW9uOworICAgIGNvbnN0IGRvdWJsZSBsYXN0RnVsbExvb3AgPSBkdXJhdGlv
biAqIGRvdWJsZShsb29wQ291bnQpOworICAgIGNvbnN0IGRvdWJsZSByZW1haW5kZXIgPSBydW5u
aW5nVGltZSAtIGxhc3RGdWxsTG9vcDsKKyAgICBjb25zdCBkb3VibGUgbm9ybWFsaXplZCA9IHJl
bWFpbmRlciAvIGR1cmF0aW9uOworICAgIHJldHVybiAobG9vcENvdW50ICUgMiAmJiBhbHRlcm5h
dGUpID8gKDEgLSBub3JtYWxpemVkKSA6IG5vcm1hbGl6ZWQ7Cit9CisKK3N0YXRpYyBmbG9hdCBh
cHBseU9wYWNpdHlBbmltYXRpb24oZmxvYXQgZnJvbU9wYWNpdHksIGZsb2F0IHRvT3BhY2l0eSwg
ZG91YmxlIHByb2dyZXNzKQoreworICAgIC8vIE9wdGltaXphdGlvbjogc3BlY2lhbCBjYXNlIHRo
ZSBlZGdlIHZhbHVlcyAoMCBhbmQgMSkuCisgICAgaWYgKHByb2dyZXNzID09IDEuMCkKKyAgICAg
ICAgcmV0dXJuIHRvT3BhY2l0eTsKKworICAgIGlmICghcHJvZ3Jlc3MpCisgICAgICAgIHJldHVy
biBmcm9tT3BhY2l0eTsKKworICAgIHJldHVybiBmcm9tT3BhY2l0eSArIHByb2dyZXNzICogKHRv
T3BhY2l0eSAtIGZyb21PcGFjaXR5KTsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVF
cHNpbG9uKGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICByZXR1cm4gMS4wIC8gKDIwMC4wICogZHVy
YXRpb24pOworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUN1YmljQmV6aWVyRnVuY3Rp
b24oZG91YmxlIHAxeCwgZG91YmxlIHAxeSwgZG91YmxlIHAyeCwgZG91YmxlIHAyeSwgZG91Ymxl
IHQsIGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICBVbml0QmV6aWVyIGJlemllcihwMXgsIHAxeSwg
cDJ4LCBwMnkpOworICAgIHJldHVybiBiZXppZXIuc29sdmUodCwgc29sdmVFcHNpbG9uKGR1cmF0
aW9uKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlU3RlcHNGdW5jdGlvbihpbnQg
bnVtU3RlcHMsIGJvb2wgc3RlcEF0U3RhcnQsIGRvdWJsZSB0KQoreworICAgIGlmIChzdGVwQXRT
dGFydCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWluKDEuMCwgKGZsb29yKG51bVN0ZXBzICogdCkg
KyAxKSAvIG51bVN0ZXBzKTsKKyAgICByZXR1cm4gZmxvb3IobnVtU3RlcHMgKiB0KSAvIG51bVN0
ZXBzOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5VGltaW5nRnVuY3Rpb24oY29uc3Qg
VGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uLCBmbG9hdCBwcm9ncmVzcywgZG91YmxlIGR1
cmF0aW9uKQoreworICAgIGlmICghdGltaW5nRnVuY3Rpb24pCisgICAgICAgIHJldHVybiBwcm9n
cmVzczsKKworICAgIGlmICh0aW1pbmdGdW5jdGlvbi0+aXNDdWJpY0JlemllclRpbWluZ0Z1bmN0
aW9uKCkpIHsKKyAgICAgICAgY29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiogY3RmID0g
c3RhdGljX2Nhc3Q8Y29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0
aW9uKTsKKyAgICAgICAgcmV0dXJuIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihjdGYtPngxKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RmLT55MSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0Zi0+eDIoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGYtPnkyKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MsIGR1cmF0aW9uKTsKKyAgICB9CisK
KyAgICBpZiAodGltaW5nRnVuY3Rpb24tPmlzU3RlcHNUaW1pbmdGdW5jdGlvbigpKSB7CisgICAg
ICAgIGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qIHN0ZiA9IHN0YXRpY19jYXN0PGNvbnN0IFN0
ZXBzVGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbik7CisgICAgICAgIHJldHVybiBzb2x2
ZVN0ZXBzRnVuY3Rpb24oc3RmLT5udW1iZXJPZlN0ZXBzKCksIHN0Zi0+c3RlcEF0U3RhcnQoKSwg
ZG91YmxlKHByb2dyZXNzKSk7CisgICAgfQorCisgICAgcmV0dXJuIHByb2dyZXNzOworfQorCitz
dGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggYXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9ucyogZnJvbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogdG8s
IGRvdWJsZSBwcm9ncmVzcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgVmVjdG9yPFRy
YW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZT4gZnVuY3Rpb25MaXN0LCBib29sIGxpc3Rz
TWF0Y2gpCit7CisgICAgLy8gT3B0aW1pemF0aW9uOiBzcGVjaWFsIGNhc2UgdGhlIGVkZ2UgdmFs
dWVzICgwIGFuZCAxKS4KKyAgICBpZiAocHJvZ3Jlc3MgPT0gMS4wIHx8ICFwcm9ncmVzcykgewor
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgICAgIGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbnMqIG9wcyA9IHByb2dyZXNzID8gdG8gOiBmcm9tOworICAgICAgICBvcHMt
PmFwcGx5KGJveFNpemUsIG1hdHJpeCk7CisgICAgICAgIHJldHVybiBtYXRyaXg7CisgICAgfQor
CisgICAgaWYgKCFsaXN0c01hdGNoKSB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRv
TWF0cml4LCBmcm9tTWF0cml4OworICAgICAgICB0by0+YXBwbHkoYm94U2l6ZSwgdG9NYXRyaXgp
OworICAgICAgICBmcm9tLT5hcHBseShib3hTaXplLCBmcm9tTWF0cml4KTsKKyAgICAgICAgdG9N
YXRyaXguYmxlbmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3MpOworICAgICAgICByZXR1cm4gdG9NYXRy
aXg7CisgICAgfQorCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OworCisgICAgaWYg
KCF0by0+c2l6ZSgpKSB7CisgICAgICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHN3YXAg
PSB0bzsKKyAgICAgICAgdG8gPSBmcm9tOworICAgICAgICBmcm9tID0gc3dhcDsKKyAgICB9IGVs
c2UgaWYgKCFmcm9tLT5zaXplKCkpCisgICAgICAgIHByb2dyZXNzID0gMS4wIC0gcHJvZ3Jlc3M7
CisKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kZWQoKnRvKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGZ1bmN0aW9uTGlzdC5zaXplKCk7ICsraSkKKyAgICAgICAgYmxlbmRlZC5v
cGVyYXRpb25zKClbaV0tPmJsZW5kKGZyb20tPmF0KGkpLCBwcm9ncmVzcywgIWZyb20tPmF0KGkp
KS0+YXBwbHkobWF0cml4LCBib3hTaXplKTsKKworICAgIHJldHVybiBtYXRyaXg7Cit9CisKKwor
VGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbihjb25zdCBLZXlm
cmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBB
bmltYXRpb24qIGFuaW1hdGlvbiwgZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IFZlY3RvcjxUcmFu
c2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGU+JiBmdW5jdGlvbkxpc3QsIGJvb2wgbGlzdHNN
YXRjaCkKKyAgICA6IG1fa2V5ZnJhbWVzKGtleWZyYW1lcykKKyAgICAsIG1fYm94U2l6ZShib3hT
aXplKQorICAgICwgbV9hbmltYXRpb24oQW5pbWF0aW9uOjpjcmVhdGUoYW5pbWF0aW9uKSkKKyAg
ICAsIG1fZnVuY3Rpb25MaXN0KGZ1bmN0aW9uTGlzdCkKKyAgICAsIG1fbGlzdHNNYXRjaChsaXN0
c01hdGNoKQorICAgICwgbV9zdGFydFRpbWUoV1RGOjpjdXJyZW50VGltZSgpIC0gdGltZU9mZnNl
dCkKKyAgICAsIG1fcGF1c2VUaW1lKDApCisgICAgLCBtX3N0YXRlKFBsYXlpbmdTdGF0ZSkKK3sK
K30KKwordm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjphcHBseUludGVybmFsKFRleHR1cmVN
YXBwZXJBbmltYXRpb25DbGllbnQqIGNsaWVudCwgY29uc3QgQW5pbWF0aW9uVmFsdWUqIGZyb20s
IGNvbnN0IEFuaW1hdGlvblZhbHVlKiB0bywgZmxvYXQgcHJvZ3Jlc3MpCit7CisgICAgc3dpdGNo
IChtX2tleWZyYW1lcy5wcm9wZXJ0eSgpKSB7CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5T3Bh
Y2l0eToKKyAgICAgICAgY2xpZW50LT5zZXRPcGFjaXR5KGFwcGx5T3BhY2l0eUFuaW1hdGlvbigo
c3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRpb25WYWx1ZSo+KGZyb20pLT52YWx1ZSgpKSwg
KHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUqPih0byktPnZhbHVlKCkpLCBw
cm9ncmVzcykpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBbmltYXRlZFByb3BlcnR5V2Vi
a2l0VHJhbnNmb3JtOgorICAgICAgICBjbGllbnQtPnNldFRyYW5zZm9ybShhcHBseVRyYW5zZm9y
bUFuaW1hdGlvbihzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSo+KGZy
b20pLT52YWx1ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSo+
KHRvKS0+dmFsdWUoKSwgcHJvZ3Jlc3MsIG1fYm94U2l6ZSwgbV9mdW5jdGlvbkxpc3QsIG1fbGlz
dHNNYXRjaCkpOworICAgICAgICByZXR1cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitib29sIFRleHR1cmVNYXBwZXJBbmltYXRpb246
OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICBpZiAoc3RhdGUoKSAhPSBTdG9wcGVkU3RhdGUpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIG1fYW5pbWF0aW9uLT5maWxsc0Zvcndh
cmRzKCk7Cit9CisKK2Jvb2wgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6Omhhc0FjdGl2ZUFuaW1h
dGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eUlEIHR5cGUpIGNvbnN0Cit7CisgICAgSGFzaE1h
cDxTdHJpbmcsIFRleHR1cmVNYXBwZXJBbmltYXRpb24+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X2FuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPFN0cmluZywgVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBh
bmltYXRpb24gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAoYW5pbWF0aW9uLmlzQWN0aXZlKCkg
JiYgYW5pbWF0aW9uLnByb3BlcnR5KCkgPT0gdHlwZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVGV4dHVyZU1hcHBlckFuaW1h
dGlvbnM6Omhhc1J1bm5pbmdBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICBIYXNoTWFwPFN0cmlu
ZywgVGV4dHVyZU1hcHBlckFuaW1hdGlvbj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0
aW9ucy5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlv
biA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChhbmltYXRpb24uc3RhdGUoKSA9PSBUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uOjpQbGF5aW5nU3RhdGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckFuaW1h
dGlvbjo6YXBwbHkoVGV4dHVyZU1hcHBlckFuaW1hdGlvbkNsaWVudCogY2xpZW50KQoreworICAg
IGlmIChzdGF0ZSgpID09IFN0b3BwZWRTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG91
YmxlIHRvdGFsUnVubmluZ1RpbWUgPSBtX3N0YXRlID09IFBhdXNlZFN0YXRlID8gbV9wYXVzZVRp
bWUgOiBXVEY6OmN1cnJlbnRUaW1lKCkgLSBtX3N0YXJ0VGltZTsKKyAgICBkb3VibGUgbm9ybWFs
aXplZFZhbHVlID0gbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlKHRvdGFsUnVubmluZ1RpbWUsIG1f
YW5pbWF0aW9uLT5kdXJhdGlvbigpLCBtX2FuaW1hdGlvbi0+ZGlyZWN0aW9uKCkpOworCisgICAg
aWYgKG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpICE9IEFuaW1hdGlvbjo6SXRlcmF0aW9u
Q291bnRJbmZpbml0ZSAmJiB0b3RhbFJ1bm5pbmdUaW1lID49IG1fYW5pbWF0aW9uLT5kdXJhdGlv
bigpICogbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkpCisgICAgICAgIHNldFN0YXRlKFN0
b3BwZWRTdGF0ZSk7CisKKyAgICBpZiAoIW5vcm1hbGl6ZWRWYWx1ZSkgeworICAgICAgICBhcHBs
eUludGVybmFsKGNsaWVudCwgbV9rZXlmcmFtZXMuYXQoMCksIG1fa2V5ZnJhbWVzLmF0KDEpLCAw
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobm9ybWFsaXplZFZhbHVlID09IDEu
MCkgeworICAgICAgICBhcHBseUludGVybmFsKGNsaWVudCwgbV9rZXlmcmFtZXMuYXQobV9rZXlm
cmFtZXMuc2l6ZSgpIC0gMiksIG1fa2V5ZnJhbWVzLmF0KG1fa2V5ZnJhbWVzLnNpemUoKSAtIDEp
LCAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9rZXlmcmFtZXMuc2l6ZSgp
ID09IDIpIHsKKyAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gYXBwbHlUaW1pbmdGdW5jdGlvbiht
X2FuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS5nZXQoKSwgbm9ybWFsaXplZFZhbHVlLCBtX2Fu
aW1hdGlvbi0+ZHVyYXRpb24oKSk7CisgICAgICAgIGFwcGx5SW50ZXJuYWwoY2xpZW50LCBtX2tl
eWZyYW1lcy5hdCgwKSwgbV9rZXlmcmFtZXMuYXQoMSksIG5vcm1hbGl6ZWRWYWx1ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fa2V5ZnJh
bWVzLnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICBjb25zdCBBbmltYXRpb25WYWx1ZSogZnJv
bSA9IG1fa2V5ZnJhbWVzLmF0KGkpOworICAgICAgICBjb25zdCBBbmltYXRpb25WYWx1ZSogdG8g
PSBtX2tleWZyYW1lcy5hdChpICsgMSk7CisgICAgICAgIGlmIChmcm9tLT5rZXlUaW1lKCkgPiBu
b3JtYWxpemVkVmFsdWUgfHwgdG8tPmtleVRpbWUoKSA8IG5vcm1hbGl6ZWRWYWx1ZSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IChub3JtYWxpemVk
VmFsdWUgLSBmcm9tLT5rZXlUaW1lKCkpIC8gKHRvLT5rZXlUaW1lKCkgLSBmcm9tLT5rZXlUaW1l
KCkpOworICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBhcHBseVRpbWluZ0Z1bmN0aW9uKGZyb20t
PnRpbWluZ0Z1bmN0aW9uKCksIG5vcm1hbGl6ZWRWYWx1ZSwgbV9hbmltYXRpb24tPmR1cmF0aW9u
KCkpOworICAgICAgICBhcHBseUludGVybmFsKGNsaWVudCwgZnJvbSwgdG8sIG5vcm1hbGl6ZWRW
YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uOjpwYXVzZShkb3VibGUgb2Zmc2V0KQoreworICAgIC8vIEZJWE1FOiBzaG91bGQgYXBw
bHkgb2Zmc2V0IGhlcmUuCisgICAgc2V0U3RhdGUoUGF1c2VkU3RhdGUpOworICAgIG1fcGF1c2VU
aW1lID0gV1RGOjpjdXJyZW50VGltZSgpIC0gb2Zmc2V0OworfQorCit2b2lkIFRleHR1cmVNYXBw
ZXJBbmltYXRpb25zOjpwYXVzZShjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSBvZmZzZXQpCit7
CisgICAgSGFzaE1hcDxTdHJpbmcsIFRleHR1cmVNYXBwZXJBbmltYXRpb24+OjppdGVyYXRvciBp
dCA9IG1fYW5pbWF0aW9ucy5maW5kKG5hbWUpOworICAgIGlmIChpdCA9PSBtX2FuaW1hdGlvbnMu
ZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpdC0+c2Vjb25kLnBhdXNlKG9mZnNldCk7Cit9
CisKK3ZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6OmFwcGx5KFRleHR1cmVNYXBwZXJBbmlt
YXRpb25DbGllbnQqIGNsaWVudCkKK3sKKyAgICBIYXNoTWFwPFN0cmluZywgVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbj46Oml0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKKyAgICBmb3Ig
KEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPjo6aXRlcmF0b3IgaXQgPSBt
X2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25k
LmFwcGx5KGNsaWVudCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oCmlu
ZGV4IGU2OWRlMjkuLjdlMTE1ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaApA
QCAtMCwwICsxLDgzIEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uX2gKKyNkZWZpbmUgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbl9oCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiSGFzaE1h
cC5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHR1cmVN
YXBwZXJBbmltYXRpb25DbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHNldE9wYWNpdHkoZmxvYXQpID0gMDsKK307CisKK2NsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRp
b24geworcHVibGljOgorICAgIGVudW0gUGxheVN0YXRlIHsgUGxheWluZ1N0YXRlLCBQYXVzZWRT
dGF0ZSwgU3RvcHBlZFN0YXRlIH07CisKKyAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKCkKKyAg
ICAgICAgOiBtX2tleWZyYW1lcyhBbmltYXRlZFByb3BlcnR5SW52YWxpZCkKKyAgICB7IH0KKyAg
ICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3Qg
SW50U2l6ZSYsIGNvbnN0IEFuaW1hdGlvbiosIGRvdWJsZSwgY29uc3QgVmVjdG9yPFRyYW5zZm9y
bU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZT4mLCBib29sKTsKKyAgICB2b2lkIGFwcGx5KFRleHR1
cmVNYXBwZXJBbmltYXRpb25DbGllbnQqKTsKKyAgICB2b2lkIHBhdXNlKGRvdWJsZSk7CisgICAg
UGxheVN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgc2V0
U3RhdGUoUGxheVN0YXRlIHMpIHsgbV9zdGF0ZSA9IHM7IH0KKyAgICBBbmltYXRlZFByb3BlcnR5
SUQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lcy5wcm9wZXJ0eSgpOyB9Cisg
ICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgYXBwbHlJbnRl
cm5hbChUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50KiwgY29uc3QgQW5pbWF0aW9uVmFsdWUq
IGZyb20sIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB0bywgZmxvYXQgcHJvZ3Jlc3MpOworICAgIEtl
eWZyYW1lVmFsdWVMaXN0IG1fa2V5ZnJhbWVzOworICAgIEludFNpemUgbV9ib3hTaXplOworICAg
IFJlZlB0cjxBbmltYXRpb24+IG1fYW5pbWF0aW9uOworICAgIFN0cmluZyBtX25hbWU7CisgICAg
VmVjdG9yPFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZT4gbV9mdW5jdGlvbkxpc3Q7
CisgICAgYm9vbCBtX2xpc3RzTWF0Y2g7CisgICAgYm9vbCBtX2hhc0JpZ1JvdGF0aW9uOworICAg
IGRvdWJsZSBtX3N0YXJ0VGltZTsKKyAgICBkb3VibGUgbV9wYXVzZVRpbWU7CisgICAgUGxheVN0
YXRlIG1fc3RhdGU7Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucyB7CitwdWJs
aWM6CisgICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMoKSB7IH0KKworICAgIHZvaWQgYWRkKGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9u
KSB7IG1fYW5pbWF0aW9ucy5hZGQobmFtZSwgYW5pbWF0aW9uKTsgfQorICAgIHZvaWQgcmVtb3Zl
KGNvbnN0IFN0cmluZyYgbmFtZSkgeyBtX2FuaW1hdGlvbnMucmVtb3ZlKG5hbWUpOyB9CisgICAg
dm9pZCBwYXVzZShjb25zdCBTdHJpbmcmLCBkb3VibGUpOworICAgIHZvaWQgYXBwbHkoVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbkNsaWVudCopOworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fYW5pbWF0aW9ucy5pc0VtcHR5KCk7IH0KKworICAgIGJvb2wgaGFzUnVubmluZ0FuaW1h
dGlvbnMoKSBjb25zdDsKKyAgICBib29sIGhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0
ZWRQcm9wZXJ0eUlEIHR5cGUpIGNvbnN0OworCitwcml2YXRlOgorICAgIEhhc2hNYXA8U3RyaW5n
LCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiBtX2FuaW1hdGlvbnM7Cit9OworCit9CisjZW5kaWYg
Ly8gVGV4dHVyZU1hcHBlckFuaW1hdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcAppbmRl
eCAyNzYyNTE3Li4yMTdhOTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKQEAgLTU4NSwx
MSArNTg1LDggQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVT
ZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAgICAgICAgICAgbGF5ZXItPm1f
ZWZmZWN0VGFyZ2V0ID0gdGhpczsKICAgICB9CiAKLSAgICBpZiAoY2hhbmdlTWFzayAmIEFuaW1h
dGlvbkNoYW5nZSkgewotICAgICAgICBtX2FuaW1hdGlvbnMuY2xlYXIoKTsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBncmFwaGljc0xheWVyLT5tX2FuaW1hdGlvbnMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICBtX2FuaW1hdGlvbnMuYXBwZW5kKGdyYXBoaWNzTGF5ZXItPm1fYW5p
bWF0aW9uc1tpXSk7Ci0gICAgfQorICAgIGlmIChjaGFuZ2VNYXNrICYgQW5pbWF0aW9uQ2hhbmdl
KQorICAgICAgICBtX2FuaW1hdGlvbnMgPSBncmFwaGljc0xheWVyLT5tX2FuaW1hdGlvbnM7CiAK
ICAgICBtX3N0YXRlLm1hc2tMYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhpY3NMYXll
ci0+bWFza0xheWVyKCkpOwogICAgIG1fc3RhdGUucmVwbGljYUxheWVyID0gdG9UZXh0dXJlTWFw
cGVyTm9kZShncmFwaGljc0xheWVyLT5yZXBsaWNhTGF5ZXIoKSk7CkBAIC02MTQsMTEgKzYxMSw2
IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhCiAgICAgaWYgKCFtX2N1cnJlbnRDb250ZW50Lm5l
ZWRzRGlzcGxheSkKICAgICAgICAgbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXlSZWN0LnVu
aXRlKHBlbmRpbmdDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QpOwogCi0gICAgaWYgKCFoYXNPcGFj
aXR5QW5pbWF0aW9uKCkpCi0gICAgICAgIG1fb3BhY2l0eSA9IG1fc3RhdGUub3BhY2l0eTsKLSAg
ICBpZiAoIWhhc1RyYW5zZm9ybUFuaW1hdGlvbigpKQotICAgICAgICBtX3RyYW5zZm9ybS5zZXRM
b2NhbFRyYW5zZm9ybShtX3N0YXRlLnRyYW5zZm9ybSk7Ci0KICAgICBtX3RyYW5zZm9ybS5zZXRQ
b3NpdGlvbihtX3N0YXRlLnBvcyk7CiAgICAgbV90cmFuc2Zvcm0uc2V0QW5jaG9yUG9pbnQobV9z
dGF0ZS5hbmNob3JQb2ludCk7CiAgICAgbV90cmFuc2Zvcm0uc2V0U2l6ZShtX3N0YXRlLnNpemUp
OwpAQCAtNjI4LDEwICs2MjAsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9z
aXRpbmdTdGF0ZVNlbGYoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYQogCiBib29sIFRl
eHR1cmVNYXBwZXJOb2RlOjpkZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygp
IGNvbnN0CiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgaWYgKCFtX2FuaW1hdGlvbnNbaV0tPnBhdXNlZCkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBpZiAobV9hbmltYXRpb25zLmhhc1J1bm5pbmdB
bmltYXRpb25zKCkpCisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChtX2NoaWxkcmVu
W2ldLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQpAQCAtNjQxLDE5
NyArNjMxLDE4IEBAIGJvb2wgVGV4dHVyZU1hcHBlck5vZGU6OmRlc2NlbmRhbnRzT3JTZWxmSGF2
ZVJ1bm5pbmdBbmltYXRpb25zKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRp
YyBkb3VibGUgbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlKGRvdWJsZSBydW5uaW5nVGltZSwgZG91
YmxlIGR1cmF0aW9uLCBib29sIGFsdGVybmF0ZSkKLXsKLSAgICBpZiAoIWR1cmF0aW9uKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBjb25zdCBpbnQgbG9vcENvdW50ID0gcnVubmluZ1RpbWUgLyBk
dXJhdGlvbjsKLSAgICBjb25zdCBkb3VibGUgbGFzdEZ1bGxMb29wID0gZHVyYXRpb24gKiBkb3Vi
bGUobG9vcENvdW50KTsKLSAgICBjb25zdCBkb3VibGUgcmVtYWluZGVyID0gcnVubmluZ1RpbWUg
LSBsYXN0RnVsbExvb3A7Ci0gICAgY29uc3QgZG91YmxlIG5vcm1hbGl6ZWQgPSByZW1haW5kZXIg
LyBkdXJhdGlvbjsKLSAgICByZXR1cm4gKGxvb3BDb3VudCAlIDIgJiYgYWx0ZXJuYXRlKSA/ICgx
IC0gbm9ybWFsaXplZCkgOiBub3JtYWxpemVkOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2Rl
OjphcHBseU9wYWNpdHlBbmltYXRpb24oZmxvYXQgZnJvbU9wYWNpdHksIGZsb2F0IHRvT3BhY2l0
eSwgZG91YmxlIHByb2dyZXNzKQotewotICAgIC8vIE9wdGltaXphdGlvbjogc3BlY2lhbCBjYXNl
IHRoZSBlZGdlIHZhbHVlcyAoMCBhbmQgMSkuCi0gICAgaWYgKHByb2dyZXNzID09IDEuMCkKLSAg
ICAgICAgc2V0T3BhY2l0eSh0b09wYWNpdHkpOwotICAgIGVsc2UgaWYgKCFwcm9ncmVzcykKLSAg
ICAgICAgc2V0T3BhY2l0eShmcm9tT3BhY2l0eSk7Ci0gICAgZWxzZQotICAgICAgICBzZXRPcGFj
aXR5KGZyb21PcGFjaXR5ICsgcHJvZ3Jlc3MgKiAodG9PcGFjaXR5IC0gZnJvbU9wYWNpdHkpKTsK
LX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVFcHNpbG9uKGRvdWJsZSBkdXJhdGlvbikK
LXsKLSAgICByZXR1cm4gMS4wIC8gKDIwMC4wICogZHVyYXRpb24pOwotfQotCi1zdGF0aWMgaW5s
aW5lIGRvdWJsZSBzb2x2ZUN1YmljQmV6aWVyRnVuY3Rpb24oZG91YmxlIHAxeCwgZG91YmxlIHAx
eSwgZG91YmxlIHAyeCwgZG91YmxlIHAyeSwgZG91YmxlIHQsIGRvdWJsZSBkdXJhdGlvbikKLXsK
LSAgICBVbml0QmV6aWVyIGJlemllcihwMXgsIHAxeSwgcDJ4LCBwMnkpOwotICAgIHJldHVybiBi
ZXppZXIuc29sdmUodCwgc29sdmVFcHNpbG9uKGR1cmF0aW9uKSk7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgZG91YmxlIHNvbHZlU3RlcHNGdW5jdGlvbihpbnQgbnVtU3RlcHMsIGJvb2wgc3RlcEF0U3Rh
cnQsIGRvdWJsZSB0KQotewotICAgIGlmIChzdGVwQXRTdGFydCkKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bWluKDEuMCwgKGZsb29yKG51bVN0ZXBzICogdCkgKyAxKSAvIG51bVN0ZXBzKTsKLSAgICBy
ZXR1cm4gZmxvb3IobnVtU3RlcHMgKiB0KSAvIG51bVN0ZXBzOwotfQotCi1zdGF0aWMgaW5saW5l
IGZsb2F0IGFwcGx5VGltaW5nRnVuY3Rpb24oY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1
bmN0aW9uLCBmbG9hdCBwcm9ncmVzcywgZG91YmxlIGR1cmF0aW9uKQotewotICAgIGlmICghdGlt
aW5nRnVuY3Rpb24pCi0gICAgICAgIHJldHVybiBwcm9ncmVzczsKLQotICAgIGlmICh0aW1pbmdG
dW5jdGlvbi0+aXNDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgY29uc3Qg
Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiogY3RmID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3ViaWNC
ZXppZXJUaW1pbmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIHNv
bHZlQ3ViaWNCZXppZXJGdW5jdGlvbihjdGYtPngxKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3RmLT55MSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGN0Zi0+eDIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjdGYtPnkyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvZ3Jlc3MsIGR1cmF0aW9uKTsKLSAgICB9Ci0KLSAgICBpZiAodGltaW5nRnVuY3Rpb24t
PmlzU3RlcHNUaW1pbmdGdW5jdGlvbigpKSB7Ci0gICAgICAgIGNvbnN0IFN0ZXBzVGltaW5nRnVu
Y3Rpb24qIHN0ZiA9IHN0YXRpY19jYXN0PGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qPih0aW1p
bmdGdW5jdGlvbik7Ci0gICAgICAgIHJldHVybiBzb2x2ZVN0ZXBzRnVuY3Rpb24oc3RmLT5udW1i
ZXJPZlN0ZXBzKCksIHN0Zi0+c3RlcEF0U3RhcnQoKSwgZG91YmxlKHByb2dyZXNzKSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHByb2dyZXNzOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjph
cHBseVRyYW5zZm9ybUFuaW1hdGlvbihjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmlt
YXRpb24sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbnMqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpz
eW5jQW5pbWF0aW9ucygpCiB7Ci0gICAgLy8gT3B0aW1pemF0aW9uOiBzcGVjaWFsIGNhc2UgdGhl
IGVkZ2UgdmFsdWVzICgwIGFuZCAxKS4KLSAgICBpZiAocHJvZ3Jlc3MgPT0gMS4wIHx8ICFwcm9n
cmVzcykgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7Ci0gICAgICAgIGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIG9wcyA9IHByb2dyZXNzID8gdG8gOiBmcm9tOwotICAg
ICAgICBvcHMtPmFwcGx5KGFuaW1hdGlvbi5ib3hTaXplLCBtYXRyaXgpOwotICAgICAgICBzZXRU
cmFuc2Zvcm0obWF0cml4KTsKLSAgICB9Ci0KLSAgICBpZiAoIWFuaW1hdGlvbi5saXN0c01hdGNo
KSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRvTWF0cml4LCBmcm9tTWF0cml4Owot
ICAgICAgICB0by0+YXBwbHkoYW5pbWF0aW9uLmJveFNpemUsIHRvTWF0cml4KTsKLSAgICAgICAg
ZnJvbS0+YXBwbHkoYW5pbWF0aW9uLmJveFNpemUsIGZyb21NYXRyaXgpOwotICAgICAgICB0b01h
dHJpeC5ibGVuZChmcm9tTWF0cml4LCBwcm9ncmVzcyk7Ci0gICAgICAgIHNldFRyYW5zZm9ybSh0
b01hdHJpeCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBtYXRyaXg7Ci0KLSAgICBpZiAoIXRvLT5zaXplKCkpIHsKLSAgICAgICAgY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9ucyogc3dhcCA9IHRvOwotICAgICAgICB0byA9IGZyb207Ci0gICAgICAg
IGZyb20gPSBzd2FwOwotICAgIH0gZWxzZSBpZiAoIWZyb20tPnNpemUoKSkKLSAgICAgICAgcHJv
Z3Jlc3MgPSAxLjAgLSBwcm9ncmVzczsKLQotICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRl
ZCgqdG8pOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYW5pbWF0aW9uLmZ1bmN0aW9uTGlz
dC5zaXplKCk7ICsraSkKLSAgICAgICAgYmxlbmRlZC5vcGVyYXRpb25zKClbaV0tPmJsZW5kKGZy
b20tPmF0KGkpLCBwcm9ncmVzcywgIWZyb20tPmF0KGkpKS0+YXBwbHkobWF0cml4LCBhbmltYXRp
b24uYm94U2l6ZSk7Ci0KLSAgICBzZXRUcmFuc2Zvcm0obWF0cml4KTsKLX0KLQotdm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6YXBwbHlBbmltYXRpb25GcmFtZShjb25zdCBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uJiBhbmltYXRpb24sIGNvbnN0IEFuaW1hdGlvblZhbHVlKiBmcm9tLCBjb25zdCBBbmlt
YXRpb25WYWx1ZSogdG8sIGZsb2F0IHByb2dyZXNzKQotewotICAgIHN3aXRjaCAoYW5pbWF0aW9u
LmtleWZyYW1lcy5wcm9wZXJ0eSgpKSB7Ci0gICAgY2FzZSBBbmltYXRlZFByb3BlcnR5T3BhY2l0
eToKLSAgICAgICAgYXBwbHlPcGFjaXR5QW5pbWF0aW9uKChzdGF0aWNfY2FzdDxjb25zdCBGbG9h
dEFuaW1hdGlvblZhbHVlKj4oZnJvbSktPnZhbHVlKCkpLCAoc3RhdGljX2Nhc3Q8Y29uc3QgRmxv
YXRBbmltYXRpb25WYWx1ZSo+KHRvKS0+dmFsdWUoKSksIHByb2dyZXNzKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybToKLSAgICAgICAg
YXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oYW5pbWF0aW9uLCBzdGF0aWNfY2FzdDxjb25zdCBUcmFu
c2Zvcm1BbmltYXRpb25WYWx1ZSo+KGZyb20pLT52YWx1ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBU
cmFuc2Zvcm1BbmltYXRpb25WYWx1ZSo+KHRvKS0+dmFsdWUoKSwgcHJvZ3Jlc3MpOwotICAgICAg
ICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgfQotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjphcHBseUFuaW1hdGlvbihjb25zdCBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24sIGRvdWJsZSBub3JtYWxpemVkVmFsdWUp
Ci17Ci0gICAgLy8gT3B0aW1pemF0aW9uOiBzcGVjaWFsIGNhc2UgdGhlIGVkZ2UgdmFsdWVzICgw
IGFuZCAxKS4KLSAgICBpZiAoIW5vcm1hbGl6ZWRWYWx1ZSkgewotICAgICAgICBhcHBseUFuaW1h
dGlvbkZyYW1lKGFuaW1hdGlvbiwgYW5pbWF0aW9uLmtleWZyYW1lcy5hdCgwKSwgYW5pbWF0aW9u
LmtleWZyYW1lcy5hdCgxKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKG5v
cm1hbGl6ZWRWYWx1ZSA9PSAxLjApIHsKLSAgICAgICAgYXBwbHlBbmltYXRpb25GcmFtZShhbmlt
YXRpb24sIGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoYW5pbWF0aW9uLmtleWZyYW1lcy5zaXplKCkg
LSAyKSwgYW5pbWF0aW9uLmtleWZyYW1lcy5hdChhbmltYXRpb24ua2V5ZnJhbWVzLnNpemUoKSAt
IDEpLCAxKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoYW5pbWF0aW9uLmtleWZy
YW1lcy5zaXplKCkgPT0gMikgewotICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBhcHBseVRpbWlu
Z0Z1bmN0aW9uKGFuaW1hdGlvbi5hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCksIG5v
cm1hbGl6ZWRWYWx1ZSwgYW5pbWF0aW9uLmFuaW1hdGlvbi0+ZHVyYXRpb24oKSk7Ci0gICAgICAg
IGFwcGx5QW5pbWF0aW9uRnJhbWUoYW5pbWF0aW9uLCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KDAp
LCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KDEpLCBub3JtYWxpemVkVmFsdWUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRpb24ua2V5
ZnJhbWVzLnNpemUoKSAtIDE7ICsraSkgewotICAgICAgICBjb25zdCBBbmltYXRpb25WYWx1ZSog
ZnJvbSA9IGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoaSk7Ci0gICAgICAgIGNvbnN0IEFuaW1hdGlv
blZhbHVlKiB0byA9IGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoaSArIDEpOwotICAgICAgICBpZiAo
ZnJvbS0+a2V5VGltZSgpID4gbm9ybWFsaXplZFZhbHVlIHx8IHRvLT5rZXlUaW1lKCkgPCBub3Jt
YWxpemVkVmFsdWUpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBub3JtYWxpemVk
VmFsdWUgPSAobm9ybWFsaXplZFZhbHVlIC0gZnJvbS0+a2V5VGltZSgpKSAvICh0by0+a2V5VGlt
ZSgpIC0gZnJvbS0+a2V5VGltZSgpKTsKLSAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gYXBwbHlU
aW1pbmdGdW5jdGlvbihmcm9tLT50aW1pbmdGdW5jdGlvbigpLCBub3JtYWxpemVkVmFsdWUsIGFu
aW1hdGlvbi5hbmltYXRpb24tPmR1cmF0aW9uKCkpOwotICAgICAgICBhcHBseUFuaW1hdGlvbkZy
YW1lKGFuaW1hdGlvbiwgZnJvbSwgdG8sIG5vcm1hbGl6ZWRWYWx1ZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLX0KLQotYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6aGFzT3BhY2l0eUFuaW1hdGlv
bigpIGNvbnN0Ci17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0
aW9uID0gKm1fYW5pbWF0aW9uc1tpXS5nZXQoKTsKLSAgICAgICAgaWYgKGFuaW1hdGlvbi5rZXlm
cmFtZXMucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVGV4dHVy
ZU1hcHBlck5vZGU6Omhhc1RyYW5zZm9ybUFuaW1hdGlvbigpIGNvbnN0Ci17Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29u
c3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uID0gKm1fYW5pbWF0aW9uc1tpXS5n
ZXQoKTsKLSAgICAgICAgaWYgKGFuaW1hdGlvbi5rZXlmcmFtZXMucHJvcGVydHkoKSA9PSBBbmlt
YXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3lu
Y0FuaW1hdGlvbnMoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGxheWVyKQotewotICAgIGZv
ciAoaW50IGkgPSBtX2FuaW1hdGlvbnMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAg
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJBbmltYXRpb24+IGFuaW1hdGlvbiA9IG1fYW5pbWF0aW9u
c1tpXTsKLQotICAgICAgICBkb3VibGUgdG90YWxSdW5uaW5nVGltZSA9IFdURjo6Y3VycmVudFRp
bWUoKSAtIGFuaW1hdGlvbi0+c3RhcnRUaW1lOwotICAgICAgICBSZWZQdHI8QW5pbWF0aW9uPiBh
bmltID0gYW5pbWF0aW9uLT5hbmltYXRpb247Ci0gICAgICAgIGRvdWJsZSBub3JtYWxpemVkVmFs
dWUgPSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUodG90YWxSdW5uaW5nVGltZSwgYW5pbS0+ZHVy
YXRpb24oKSwgYW5pbS0+ZGlyZWN0aW9uKCkpOwotCi0gICAgICAgIGlmIChhbmltLT5pdGVyYXRp
b25Db3VudCgpICE9IEFuaW1hdGlvbjo6SXRlcmF0aW9uQ291bnRJbmZpbml0ZSAmJiB0b3RhbFJ1
bm5pbmdUaW1lID49IGFuaW0tPmR1cmF0aW9uKCkgKiBhbmltLT5pdGVyYXRpb25Db3VudCgpKSB7
Ci0gICAgICAgICAgICAvLyBXZSBhcHBseSBhbiBhbmltYXRpb24gdGhhdCB2ZXJ5IGNsb3NlIHRv
IHRoZSBlZGdlLCBzbyB0aGF0IHRoZSBmaW5hbCBmcmFtZSBpcyBhcHBsaWVkLCBvdGVyd2lzZSB3
ZSBtaWdodCBnZXQsIGZvciBleGFtcGxlLCBhbiBvcGFjaXR5IG9mIDAuMDEgd2hpY2ggaXMgc3Rp
bGwgdmlzaWJsZS4KLSAgICAgICAgICAgIGlmIChhbmltLT5maWxsc0ZvcndhcmRzKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoYW5pbWF0aW9uLT5rZXlmcmFtZXMucHJvcGVydHkoKSA9PSBBbmlt
YXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKQotICAgICAgICAgICAgICAgICAgICBzZXRUcmFu
c2Zvcm0obV9zdGF0ZS50cmFuc2Zvcm0pOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFuaW1h
dGlvbi0+a2V5ZnJhbWVzLnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpCi0g
ICAgICAgICAgICAgICAgICAgIHNldE9wYWNpdHkobV9zdGF0ZS5vcGFjaXR5KTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgbV9hbmltYXRpb25zLnJlbW92ZShpKTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFhbmltYXRpb24tPnBhdXNlZCkK
LSAgICAgICAgICAgIGFwcGx5QW5pbWF0aW9uKCphbmltYXRpb24uZ2V0KCksIG5vcm1hbGl6ZWRW
YWx1ZSk7Ci0gICAgfQorICAgIG1fYW5pbWF0aW9ucy5hcHBseSh0aGlzKTsKKyAgICBpZiAoIW1f
YW5pbWF0aW9ucy5oYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlXZWJr
aXRUcmFuc2Zvcm0pKQorICAgICAgICBzZXRUcmFuc2Zvcm0obV9zdGF0ZS50cmFuc2Zvcm0pOwor
ICAgIGlmICghbV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQ
cm9wZXJ0eU9wYWNpdHkpKQorICAgICAgICBzZXRPcGFjaXR5KG1fc3RhdGUub3BhY2l0eSk7CiB9
CiAKIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNBbmltYXRpb25zUmVjdXJzaXZlbHkoKQog
ewotICAgIHN5bmNBbmltYXRpb25zKDApOworICAgIHN5bmNBbmltYXRpb25zKCk7CiAKICAgICBm
b3IgKGludCBpID0gbV9jaGlsZHJlbi5zaXplKCkgLSAxOyBpID49IDA7IC0taSkKICAgICAgICAg
bV9jaGlsZHJlbltpXS0+c3luY0FuaW1hdGlvbnNSZWN1cnNpdmVseSgpOwpAQCAtODU1LDggKzY2
Niw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljCiAgICAgaWYgKG1fc3RhdGUucmVwbGljYUxh
eWVyKQogICAgICAgICBtX3N0YXRlLnJlcGxpY2FMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUo
dG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihncmFwaGljc0xheWVyLT5yZXBsaWNhTGF5ZXIo
KSksIHRleHR1cmVNYXBwZXIpOwogCi0gICAgc3luY0FuaW1hdGlvbnMoZ3JhcGhpY3NMYXllcik7
Ci0KKyAgICBzeW5jQW5pbWF0aW9ucygpOwogICAgIGNvbXB1dGVUaWxlcygpOwogCiAgICAgaWYg
KGdyYXBoaWNzTGF5ZXIpCkBAIC04NzksMTEgKzY4OSw1IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFw
aGljCiAgICAgfQogfQogCi1UZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMpCi0gICAgOiBrZXlmcmFtZXMo
dmFsdWVzKQotewogfQotCi19Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaAppbmRleCBl
NjQ2NzJiLi40YmMzMGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaApAQCAtMjcsMTAgKzI3LDkg
QEAKICNpbmNsdWRlICJJbnRQb2ludEhhc2guaCIKICNpbmNsdWRlICJMYXllclRyYW5zZm9ybS5o
IgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1PcGVyYXRp
b25zLmgiCi0jaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVk
ZSAiVW5pdEJlemllci5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTU3LDIyICs1
Niw3IEBAIHB1YmxpYzoKICAgICB7IH0KIH07CiAKLWNsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRp
b24gOiBwdWJsaWMgUmVmQ291bnRlZDxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiB7Ci1wdWJsaWM6
Ci0gICAgU3RyaW5nIG5hbWU7Ci0gICAgS2V5ZnJhbWVWYWx1ZUxpc3Qga2V5ZnJhbWVzOwotICAg
IEludFNpemUgYm94U2l6ZTsKLSAgICBSZWZQdHI8QW5pbWF0aW9uPiBhbmltYXRpb247Ci0gICAg
Ym9vbCBwYXVzZWQ7Ci0gICAgVmVjdG9yPFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlw
ZT4gZnVuY3Rpb25MaXN0OwotICAgIGJvb2wgbGlzdHNNYXRjaDsKLSAgICBib29sIGhhc0JpZ1Jv
dGF0aW9uOwotICAgIGRvdWJsZSBzdGFydFRpbWU7Ci0gICAgVGV4dHVyZU1hcHBlckFuaW1hdGlv
bihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1
cmVNYXBwZXJBbmltYXRpb24+IGNyZWF0ZShjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVz
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlckFuaW1hdGlvbih2YWx1ZXMpKTsg
fQotfTsKLQotY2xhc3MgVGV4dHVyZU1hcHBlck5vZGUgeworY2xhc3MgVGV4dHVyZU1hcHBlck5v
ZGUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlckFuaW1hdGlvbkNsaWVudCB7CiAKIHB1YmxpYzoKICAg
ICAvLyBUaGlzIHNldCBvZiBmbGFncyBoZWxwIHVzIGRlZmVyIHdoaWNoIHByb3BlcnRpZXMgb2Yg
dGhlIGxheWVyIGhhdmUgYmVlbgpAQCAtMTk4LDEzICsxODIsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgcGFpbnRTZWxmQW5kQ2hpbGRyZW5XaXRoUmVwbGljYShjb25zdCBUZXh0dXJlTWFwcGVyUGFp
bnRPcHRpb25zJik7CiAgICAgdm9pZCByZW5kZXJDb250ZW50KFRleHR1cmVNYXBwZXIqLCBHcmFw
aGljc0xheWVyKik7CiAKLSAgICB2b2lkIHN5bmNBbmltYXRpb25zKEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyKik7Ci0gICAgdm9pZCBhcHBseUFuaW1hdGlvbihjb25zdCBUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uJiwgZG91YmxlIHJ1bm5pbmdUaW1lKTsKLSAgICB2b2lkIGFwcGx5QW5pbWF0aW9u
RnJhbWUoY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYsIGNvbnN0IEFuaW1hdGlvblZhbHVl
KiBmcm9tLCBjb25zdCBBbmltYXRpb25WYWx1ZSogdG8sIGZsb2F0IHByb2dyZXNzKTsKLSAgICB2
b2lkIGFwcGx5T3BhY2l0eUFuaW1hdGlvbihmbG9hdCBmcm9tT3BhY2l0eSwgZmxvYXQgdG9PcGFj
aXR5LCBkb3VibGUpOwotICAgIHZvaWQgYXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oY29uc3QgVGV4
dHVyZU1hcHBlckFuaW1hdGlvbiYsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHN0YXJ0LCBj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBlbmQsIGRvdWJsZSk7Ci0gICAgYm9vbCBoYXNPcGFj
aXR5QW5pbWF0aW9uKCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNUcmFuc2Zvcm1BbmltYXRpb24oKSBj
b25zdDsKKyAgICB2b2lkIHN5bmNBbmltYXRpb25zKCk7CiAgICAgYm9vbCBpc1Zpc2libGUoKSBj
b25zdDsKICAgICBib29sIHNob3VsZFBhaW50VG9JbnRlcm1lZGlhdGVTdXJmYWNlKCkgY29uc3Q7
CiAKQEAgLTMxNSw4ICsyOTMsNyBAQCBwcml2YXRlOgogCiAgICAgU3RhdGUgbV9zdGF0ZTsKICAg
ICBUZXh0dXJlTWFwcGVyKiBtX3RleHR1cmVNYXBwZXI7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPFRl
eHR1cmVNYXBwZXJBbmltYXRpb24+ID4gbV9hbmltYXRpb25zOworICAgIFRleHR1cmVNYXBwZXJB
bmltYXRpb25zIG1fYW5pbWF0aW9uczsKIH07CiAKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>123506</attachid>
            <date>2012-01-22 18:25:59 -0800</date>
            <delta_ts>2012-01-22 18:51:14 -0800</delta_ts>
            <desc>Patch 1: Move animations to TextureMapperAnimations</desc>
            <filename>patch.diff</filename>
            <type>application/octet-stream</type>
            <size>26785</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3Yzg5ZmU4Li5hYWE4YjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUg
QEAKKyAyMDEyLTAxLTIxICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CisKKyAgICAgICAgW1RleG1hcF0gRGl2aWRlIFRleHR1cmVNYXBwZXJOb2RlLmNwcCB0byAz
IGZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzY2NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBT
cGxpdCB0aGUgYW5pbWF0aW9uIHBhcnQgb2YgVGV4dHVyZU1hcHBlck5vZGUgb3V0IHRvIGEgc2Vw
YXJhdGUgZmlsZSwgY2FsbGVkCisgICAgICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb24uCisgICAg
ICAgIFByb3ZpZGUgYSBjbGVhbiBpbnRlcmZhY2UgZm9yIHRoYXQgY2xhc3MsIHRoYXQgYWxsb3dz
IHNlcGFyYXRpbmcgdGhlIGludGVybmFscyBvZiB0aGUgc2NlbmUKKyAgICAgICAgcGFpbnRpbmcg
ZnJvbSB0aGUgaW50ZXJuYWxzIG9mIHRoZSBhbmltYXRpb24gaW50ZXJwb2xhdGlvbi4KKworICAg
ICAgICBObyBuZXcgdGVzdHMuIEV4aXN0aW5nIGFuaW1hdGlvbiB0ZXN0cyBjb3ZlciB0aGlzLgor
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkZWQgbmV3IFRleHR1cmVNYXBwZXIt
cmVsYXRlZCBmaWxlcy4KKyAgICAgICAgKiBUYXJnZXQucHJpOiBBZGRlZCBuZXcgVGV4dHVyZU1h
cHBlci1yZWxhdGVkIGZpbGVzLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQgbmV3IFRl
eHR1cmVNYXBwZXItcmVsYXRlZCBmaWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGF1c2VBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnJlbW92ZUFuaW1hdGlvbik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJBbmltYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0Fu
aW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNBbmlt
YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQW5pbWF0
aW9uc1JlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpz
eW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmg6CisKIDIwMTItMDEtMjEgIERhdmlkIFJldmVtYW4gIDxyZXZl
bWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIEluY3JlbWVudGFsIHRleHR1
cmUgdXBkYXRlcyBhcmUgbm90IGF0b21pYy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmlu
ZGV4IDIxMzAxYzcuLmIxMzRhY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAt
NTY5Nyw2ICs1Njk3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlv
bi5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyQW5pbWF0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaApAQCAtNTcx
NSw2ICs1NzE3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyQW5pbWF0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
aW5kZXggMWNhMDllNi4uYTM4MjY5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zOTMzLDYgKzM5MzMsNyBA
QCBjb250YWlucyhDT05GSUcsIHRleG1hcCkgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCiAKQEAgLTM5NDAsNiArMzk0MSw3
IEBAIGNvbnRhaW5zKENPTkZJRywgdGV4bWFwKSB7CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L1RleHR1cmVNYXBwZXJRdC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvTGF5ZXJUcmFuc2Zvcm0uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXIuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IDJmMTA5MzcuLjVkNjdhY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM5NjgsNiArMzk2OCw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJB
bmltYXRpb24uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckFuaW1hdGlvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggN2VmOTgxOC4uZjQ3OGI5ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCkBAIC0zNjUsNTkg
KzM2NSwyNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24o
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdAogICAgIGlmICghYW5pbSB8fCBhbmlt
LT5pc0VtcHR5T3JaZXJvRHVyYXRpb24oKSB8fCB2YWx1ZUxpc3Quc2l6ZSgpIDwgMiB8fCAodmFs
dWVMaXN0LnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSAmJiB2
YWx1ZUxpc3QucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRpb25z
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIC8vIFRoZSBzYW1lIGFuaW1hdGlvbiBuYW1lIGNhbiBi
ZSB1c2VkIGZvciB0d28gYW5pbWF0aW9ucyB3aXRoIGRpZmZlcmVudCBwcm9wZXJ0aWVzLgotICAg
ICAgICBpZiAobV9hbmltYXRpb25zW2ldLT5uYW1lICE9IGtleWZyYW1lc05hbWUgfHwgbV9hbmlt
YXRpb25zW2ldLT5rZXlmcmFtZXMucHJvcGVydHkoKSAhPSB2YWx1ZUxpc3QucHJvcGVydHkoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIGNv
cHkgb2YgdGhpcyBhbmltYXRpb24sIHRoYXQgbWVhbnMgdGhhdCB3ZSdyZSByZXN1bWluZyBpdCBy
YXRoZXIgdGhhbiBhZGRpbmcgaXQuCi0gICAgICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uPiYgYW5pbWF0aW9uID0gbV9hbmltYXRpb25zW2ldOwotICAgICAgICBhbmltYXRpb24tPmFu
aW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKGFuaW0pOwotICAgICAgICBhbmltYXRpb24tPnBh
dXNlZCA9IGZhbHNlOwotICAgICAgICBhbmltYXRpb24tPnN0YXJ0VGltZSA9IFdURjo6Y3VycmVu
dFRpbWUoKSAtIHRpbWVPZmZzZXQ7Ci0gICAgICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
Tm9kZTo6QW5pbWF0aW9uQ2hhbmdlKTsKLSAgICAgICAgbV9hbmltYXRpb25TdGFydGVkVGltZXIu
c3RhcnRPbmVTaG90KDApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgYm9vbCBs
aXN0c01hdGNoOworICAgIGJvb2wgaGFzQmlnUm90YXRpb247CisgICAgVmVjdG9yPFRyYW5zZm9y
bU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZT4gZnVuY3Rpb25MaXN0OwogCi0gICAgUmVmUHRyPFRl
eHR1cmVNYXBwZXJBbmltYXRpb24+IGFuaW1hdGlvbiA9IFRleHR1cmVNYXBwZXJBbmltYXRpb246
OmNyZWF0ZSh2YWx1ZUxpc3QpOwotICAgIGFuaW1hdGlvbi0+Ym94U2l6ZSA9IGJveFNpemU7Ci0g
ICAgYW5pbWF0aW9uLT5uYW1lID0ga2V5ZnJhbWVzTmFtZTsKLSAgICBhbmltYXRpb24tPmFuaW1h
dGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKGFuaW0pOwotICAgIGFuaW1hdGlvbi0+cGF1c2VkID0g
ZmFsc2U7Ci0gICAgYW5pbWF0aW9uLT5zdGFydFRpbWUgPSBXVEY6OmN1cnJlbnRUaW1lKCkgLSB0
aW1lT2Zmc2V0OwotCi0gICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm0pIHsKLSAgICAgICAgYm9vbCBoYXNCaWdSb3RhdGlvbjsgLy8g
Tm90IHVzZWQsIGJ1dCByZXF1aXJlZCBhcyBhIHBvaW50ZXIgcGFyYW1ldGVyIGZvciB0aGUgZnVu
Y3Rpb24uCi0gICAgICAgIGZldGNoVHJhbnNmb3JtT3BlcmF0aW9uTGlzdCh2YWx1ZUxpc3QsIGFu
aW1hdGlvbi0+ZnVuY3Rpb25MaXN0LCBhbmltYXRpb24tPmxpc3RzTWF0Y2gsIGhhc0JpZ1JvdGF0
aW9uKTsKLSAgICB9CisgICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm0pCisgICAgICAgIGZldGNoVHJhbnNmb3JtT3BlcmF0aW9uTGlz
dCh2YWx1ZUxpc3QsIGZ1bmN0aW9uTGlzdCwgbGlzdHNNYXRjaCwgaGFzQmlnUm90YXRpb24pOwog
Ci0gICAgbV9hbmltYXRpb25zLmFwcGVuZChhbmltYXRpb24pOworICAgIG1fYW5pbWF0aW9ucy5h
ZGQoa2V5ZnJhbWVzTmFtZSwgVGV4dHVyZU1hcHBlckFuaW1hdGlvbih2YWx1ZUxpc3QsIGJveFNp
emUsIGFuaW0sIHRpbWVPZmZzZXQsIGZ1bmN0aW9uTGlzdCwgbGlzdHNNYXRjaCkpOwogICAgIG5v
dGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QW5pbWF0aW9uQ2hhbmdlKTsKICAgICBtX2Fu
aW1hdGlvblN0YXJ0ZWRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGF1c2VBbmltYXRpb24oY29u
c3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKIHsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBp
ZiAobV9hbmltYXRpb25zW2ldLT5uYW1lICE9IGFuaW1hdGlvbk5hbWUpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgbV9hbmltYXRpb25zW2ldLT5wYXVzZWQgPSB0cnVlOwotICAgICAg
ICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkFuaW1hdGlvbkNoYW5nZSk7Ci0gICAg
fQorICAgIG1fYW5pbWF0aW9ucy5wYXVzZShhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKIH0K
IAogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKIHsKLSAgICBmb3IgKGludCBpID0gbV9hbmltYXRpb25z
LnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIC8vIFRoZSBzYW1lIGFuaW1hdGlv
biBuYW1lIGNhbiBiZSB1c2VkIGZvciB0d28gYW5pbWF0aW9ucyB3aXRoIGRpZmZlcmVudCBwcm9w
ZXJ0aWVzLiBXZSBzaG91bGQgcmVtb3ZlIGJvdGguCi0gICAgICAgIGlmIChtX2FuaW1hdGlvbnNb
aV0tPm5hbWUgIT0gYW5pbWF0aW9uTmFtZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBtX2FuaW1hdGlvbnMucmVtb3ZlKGkpOwotICAgICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlck5vZGU6OkFuaW1hdGlvbkNoYW5nZSk7Ci0gICAgfQorICAgIG1fYW5pbWF0aW9ucy5yZW1v
dmUoYW5pbWF0aW9uTmFtZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OmFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyPiopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCmluZGV4IGViYjli
NTMuLjE3MmZkZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCkBA
IC05NSw3ICs5NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3N5bmNRdWV1ZWQ7CiAgICAgaW50
IG1fY2hhbmdlTWFzazsKICAgICBUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudERhdGEgbV9wZW5k
aW5nQ29udGVudDsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHR1cmVNYXBwZXJBbmltYXRpb24+ID4g
bV9hbmltYXRpb25zOworICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIG1fYW5pbWF0aW9uczsK
ICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyPiopOwogICAgIFRpbWVyPEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPiBt
X2FuaW1hdGlvblN0YXJ0ZWRUaW1lcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlv
bi5jcHAKaW5kZXggMGJlZmZjMi4uOGM5MWQ4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5p
bWF0aW9uLmNwcApAQCAtMjMsMTIgKzIzLDE0IEBACiAjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIK
ICNpbmNsdWRlICJVbml0QmV6aWVyLmgiCiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBkb3VibGUgbm9ybWFsaXplZEFuaW1hdGlvblZhbHVl
KGRvdWJsZSBydW5uaW5nVGltZSwgZG91YmxlIGR1cmF0aW9uLCBib29sIGFsdGVybmF0ZSkKIHsK
ICAgICBpZiAoIWR1cmF0aW9uKQogICAgICAgICByZXR1cm4gMDsKKwogICAgIGNvbnN0IGludCBs
b29wQ291bnQgPSBydW5uaW5nVGltZSAvIGR1cmF0aW9uOwogICAgIGNvbnN0IGRvdWJsZSBsYXN0
RnVsbExvb3AgPSBkdXJhdGlvbiAqIGRvdWJsZShsb29wQ291bnQpOwogICAgIGNvbnN0IGRvdWJs
ZSByZW1haW5kZXIgPSBydW5uaW5nVGltZSAtIGxhc3RGdWxsTG9vcDsKQEAgLTU1LDggKzU3LDcg
QEAgc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVFcHNpbG9uKGRvdWJsZSBkdXJhdGlvbikKIAog
c3RhdGljIGlubGluZSBkb3VibGUgc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKGRvdWJsZSBwMXgs
IGRvdWJsZSBwMXksIGRvdWJsZSBwMngsIGRvdWJsZSBwMnksIGRvdWJsZSB0LCBkb3VibGUgZHVy
YXRpb24pCiB7Ci0gICAgVW5pdEJlemllciBiZXppZXIocDF4LCBwMXksIHAyeCwgcDJ5KTsKLSAg
ICByZXR1cm4gYmV6aWVyLnNvbHZlKHQsIHNvbHZlRXBzaWxvbihkdXJhdGlvbikpOworICAgIHJl
dHVybiBVbml0QmV6aWVyKHAxeCwgcDF5LCBwMngsIHAyeSkuc29sdmUodCwgc29sdmVFcHNpbG9u
KGR1cmF0aW9uKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlU3RlcHNGdW5jdGlv
bihpbnQgbnVtU3RlcHMsIGJvb2wgc3RlcEF0U3RhcnQsIGRvdWJsZSB0KQpAQCAtNzMsMTEgKzc0
LDcgQEAgc3RhdGljIGlubGluZSBmbG9hdCBhcHBseVRpbWluZ0Z1bmN0aW9uKGNvbnN0IFRpbWlu
Z0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbiwgZmwKIAogICAgIGlmICh0aW1pbmdGdW5jdGlvbi0+
aXNDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKCkpIHsKICAgICAgICAgY29uc3QgQ3ViaWNCZXpp
ZXJUaW1pbmdGdW5jdGlvbiogY3RmID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIHNvbHZlQ3ViaWNC
ZXppZXJGdW5jdGlvbihjdGYtPngxKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3RmLT55MSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGN0Zi0+eDIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
dGYtPnkyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jl
c3MsIGR1cmF0aW9uKTsKKyAgICAgICAgcmV0dXJuIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihj
dGYtPngxKCksIGN0Zi0+eTEoKSwgY3RmLT54MigpLCBjdGYtPnkyKCksIHByb2dyZXNzLCBkdXJh
dGlvbik7CiAgICAgfQogCiAgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc1N0ZXBzVGltaW5nRnVu
Y3Rpb24oKSkgewpAQCAtOTEsNyArODgsNyBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5VGlt
aW5nRnVuY3Rpb24oY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uLCBmbAogc3Rh
dGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbnMqIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHRvLCBk
b3VibGUgcHJvZ3Jlc3MsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IFZlY3RvcjxUcmFu
c2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGU+IGZ1bmN0aW9uTGlzdCwgYm9vbCBsaXN0c01h
dGNoKQogewogICAgIC8vIE9wdGltaXphdGlvbjogc3BlY2lhbCBjYXNlIHRoZSBlZGdlIHZhbHVl
cyAoMCBhbmQgMSkuCi0gICAgaWYgKHByb2dyZXNzID09IDEuMCB8fCAhcHJvZ3Jlc3MpIHsKKyAg
ICBpZiAocHJvZ3Jlc3MgPT0gMS4gfHwgIXByb2dyZXNzKSB7CiAgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1hdHJpeDsKICAgICAgICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogb3Bz
ID0gcHJvZ3Jlc3MgPyB0byA6IGZyb207CiAgICAgICAgIG9wcy0+YXBwbHkoYm94U2l6ZSwgbWF0
cml4KTsKQEAgLTI0MSwzICsyMzgsNCBAQCB2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjph
cHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50KiBjbGllbnQpCiB9CiAKIH0KKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgKaW5kZXggN2UxMTVlZC4uNWUyMjZlOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJBbmltYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRpb25DbGllbnQgewpAQCAtMzUsNyArMzYsNyBAQCBw
dWJsaWM6CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRpb24gewogcHVibGljOgotICAgIGVu
dW0gUGxheVN0YXRlIHsgUGxheWluZ1N0YXRlLCBQYXVzZWRTdGF0ZSwgU3RvcHBlZFN0YXRlIH07
CisgICAgZW51bSBBbmltYXRpb25TdGF0ZSB7IFBsYXlpbmdTdGF0ZSwgUGF1c2VkU3RhdGUsIFN0
b3BwZWRTdGF0ZSB9OwogCiAgICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbigpCiAgICAgICAgIDog
bV9rZXlmcmFtZXMoQW5pbWF0ZWRQcm9wZXJ0eUludmFsaWQpCkBAIC00Myw4ICs0NCw4IEBAIHB1
YmxpYzoKICAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0
JiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEFuaW1hdGlvbiosIGRvdWJsZSwgY29uc3QgVmVjdG9y
PFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZT4mLCBib29sKTsKICAgICB2b2lkIGFw
cGx5KFRleHR1cmVNYXBwZXJBbmltYXRpb25DbGllbnQqKTsKICAgICB2b2lkIHBhdXNlKGRvdWJs
ZSk7Ci0gICAgUGxheVN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQotICAg
IHZvaWQgc2V0U3RhdGUoUGxheVN0YXRlIHMpIHsgbV9zdGF0ZSA9IHM7IH0KKyAgICBBbmltYXRp
b25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICB2b2lkIHNldFN0
YXRlKEFuaW1hdGlvblN0YXRlIHMpIHsgbV9zdGF0ZSA9IHM7IH0KICAgICBBbmltYXRlZFByb3Bl
cnR5SUQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lcy5wcm9wZXJ0eSgpOyB9
CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogCkBAIC01OSw3ICs2MCw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2hhc0JpZ1JvdGF0aW9uOwogICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKICAg
ICBkb3VibGUgbV9wYXVzZVRpbWU7Ci0gICAgUGxheVN0YXRlIG1fc3RhdGU7CisgICAgQW5pbWF0
aW9uU3RhdGUgbV9zdGF0ZTsKIH07CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIHsK
QEAgLTgwLDQgKzgxLDYgQEAgcHJpdmF0ZToKIH07CiAKIH0KKyNlbmRpZiAvLyBVU0UoVEVYVFVS
RV9NQVBQRVIpCisKICNlbmRpZiAvLyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlck5vZGUuY3BwCmluZGV4IDI3NjI1MTcuLjIxN2E5NTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJOb2RlLmNwcApAQCAtNTg1LDExICs1ODUsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpz
eW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYQog
ICAgICAgICAgICBsYXllci0+bV9lZmZlY3RUYXJnZXQgPSB0aGlzOwogICAgIH0KIAotICAgIGlm
IChjaGFuZ2VNYXNrICYgQW5pbWF0aW9uQ2hhbmdlKSB7Ci0gICAgICAgIG1fYW5pbWF0aW9ucy5j
bGVhcigpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdyYXBoaWNzTGF5ZXItPm1f
YW5pbWF0aW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fYW5pbWF0aW9ucy5hcHBlbmQo
Z3JhcGhpY3NMYXllci0+bV9hbmltYXRpb25zW2ldKTsKLSAgICB9CisgICAgaWYgKGNoYW5nZU1h
c2sgJiBBbmltYXRpb25DaGFuZ2UpCisgICAgICAgIG1fYW5pbWF0aW9ucyA9IGdyYXBoaWNzTGF5
ZXItPm1fYW5pbWF0aW9uczsKIAogICAgIG1fc3RhdGUubWFza0xheWVyID0gdG9UZXh0dXJlTWFw
cGVyTm9kZShncmFwaGljc0xheWVyLT5tYXNrTGF5ZXIoKSk7CiAgICAgbV9zdGF0ZS5yZXBsaWNh
TGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnJlcGxpY2FMYXllcigp
KTsKQEAgLTYxNCwxMSArNjExLDYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBv
c2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAgICBpZiAo
IW1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5KQogICAgICAgICBtX2N1cnJlbnRDb250ZW50
Lm5lZWRzRGlzcGxheVJlY3QudW5pdGUocGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7
CiAKLSAgICBpZiAoIWhhc09wYWNpdHlBbmltYXRpb24oKSkKLSAgICAgICAgbV9vcGFjaXR5ID0g
bV9zdGF0ZS5vcGFjaXR5OwotICAgIGlmICghaGFzVHJhbnNmb3JtQW5pbWF0aW9uKCkpCi0gICAg
ICAgIG1fdHJhbnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKG1fc3RhdGUudHJhbnNmb3JtKTsKLQog
ICAgIG1fdHJhbnNmb3JtLnNldFBvc2l0aW9uKG1fc3RhdGUucG9zKTsKICAgICBtX3RyYW5zZm9y
bS5zZXRBbmNob3JQb2ludChtX3N0YXRlLmFuY2hvclBvaW50KTsKICAgICBtX3RyYW5zZm9ybS5z
ZXRTaXplKG1fc3RhdGUuc2l6ZSk7CkBAIC02MjgsMTAgKzYyMCw4IEBAIHZvaWQgVGV4dHVyZU1h
cHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlciogZ3JhCiAKIGJvb2wgVGV4dHVyZU1hcHBlck5vZGU6OmRlc2NlbmRhbnRzT3JTZWxmSGF2
ZVJ1bm5pbmdBbmltYXRpb25zKCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIW1fYW5pbWF0aW9uc1tp
XS0+cGF1c2VkKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChtX2Fu
aW1hdGlvbnMuaGFzUnVubmluZ0FuaW1hdGlvbnMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgaWYgKG1fY2hpbGRyZW5baV0tPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmlt
YXRpb25zKCkpCkBAIC02NDEsMTk3ICs2MzEsMTggQEAgYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6
ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotc3RhdGljIGRvdWJsZSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUoZG91
YmxlIHJ1bm5pbmdUaW1lLCBkb3VibGUgZHVyYXRpb24sIGJvb2wgYWx0ZXJuYXRlKQotewotICAg
IGlmICghZHVyYXRpb24pCi0gICAgICAgIHJldHVybiAwOwotICAgIGNvbnN0IGludCBsb29wQ291
bnQgPSBydW5uaW5nVGltZSAvIGR1cmF0aW9uOwotICAgIGNvbnN0IGRvdWJsZSBsYXN0RnVsbExv
b3AgPSBkdXJhdGlvbiAqIGRvdWJsZShsb29wQ291bnQpOwotICAgIGNvbnN0IGRvdWJsZSByZW1h
aW5kZXIgPSBydW5uaW5nVGltZSAtIGxhc3RGdWxsTG9vcDsKLSAgICBjb25zdCBkb3VibGUgbm9y
bWFsaXplZCA9IHJlbWFpbmRlciAvIGR1cmF0aW9uOwotICAgIHJldHVybiAobG9vcENvdW50ICUg
MiAmJiBhbHRlcm5hdGUpID8gKDEgLSBub3JtYWxpemVkKSA6IG5vcm1hbGl6ZWQ7Ci19Ci0KLXZv
aWQgVGV4dHVyZU1hcHBlck5vZGU6OmFwcGx5T3BhY2l0eUFuaW1hdGlvbihmbG9hdCBmcm9tT3Bh
Y2l0eSwgZmxvYXQgdG9PcGFjaXR5LCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gT3B0aW1p
emF0aW9uOiBzcGVjaWFsIGNhc2UgdGhlIGVkZ2UgdmFsdWVzICgwIGFuZCAxKS4KLSAgICBpZiAo
cHJvZ3Jlc3MgPT0gMS4wKQotICAgICAgICBzZXRPcGFjaXR5KHRvT3BhY2l0eSk7Ci0gICAgZWxz
ZSBpZiAoIXByb2dyZXNzKQotICAgICAgICBzZXRPcGFjaXR5KGZyb21PcGFjaXR5KTsKLSAgICBl
bHNlCi0gICAgICAgIHNldE9wYWNpdHkoZnJvbU9wYWNpdHkgKyBwcm9ncmVzcyAqICh0b09wYWNp
dHkgLSBmcm9tT3BhY2l0eSkpOwotfQotCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUVwc2ls
b24oZG91YmxlIGR1cmF0aW9uKQotewotICAgIHJldHVybiAxLjAgLyAoMjAwLjAgKiBkdXJhdGlv
bik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihk
b3VibGUgcDF4LCBkb3VibGUgcDF5LCBkb3VibGUgcDJ4LCBkb3VibGUgcDJ5LCBkb3VibGUgdCwg
ZG91YmxlIGR1cmF0aW9uKQotewotICAgIFVuaXRCZXppZXIgYmV6aWVyKHAxeCwgcDF5LCBwMngs
IHAyeSk7Ci0gICAgcmV0dXJuIGJlemllci5zb2x2ZSh0LCBzb2x2ZUVwc2lsb24oZHVyYXRpb24p
KTsKLX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVTdGVwc0Z1bmN0aW9uKGludCBudW1T
dGVwcywgYm9vbCBzdGVwQXRTdGFydCwgZG91YmxlIHQpCi17Ci0gICAgaWYgKHN0ZXBBdFN0YXJ0
KQotICAgICAgICByZXR1cm4gc3RkOjptaW4oMS4wLCAoZmxvb3IobnVtU3RlcHMgKiB0KSArIDEp
IC8gbnVtU3RlcHMpOwotICAgIHJldHVybiBmbG9vcihudW1TdGVwcyAqIHQpIC8gbnVtU3RlcHM7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgYXBwbHlUaW1pbmdGdW5jdGlvbihjb25zdCBUaW1p
bmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24sIGZsb2F0IHByb2dyZXNzLCBkb3VibGUgZHVyYXRp
b24pCi17Ci0gICAgaWYgKCF0aW1pbmdGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIHByb2dyZXNz
OwotCi0gICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24o
KSkgewotICAgICAgICBjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBjdGYgPSBzdGF0
aWNfY2FzdDxjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24p
OwotICAgICAgICByZXR1cm4gc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKGN0Zi0+eDEoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGYtPnkxKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RmLT54MigpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0Zi0+eTIoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcywgZHVyYXRpb24pOwotICAgIH0KLQotICAg
IGlmICh0aW1pbmdGdW5jdGlvbi0+aXNTdGVwc1RpbWluZ0Z1bmN0aW9uKCkpIHsKLSAgICAgICAg
Y29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbiogc3RmID0gc3RhdGljX2Nhc3Q8Y29uc3QgU3RlcHNU
aW1pbmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIHNvbHZlU3Rl
cHNGdW5jdGlvbihzdGYtPm51bWJlck9mU3RlcHMoKSwgc3RmLT5zdGVwQXRTdGFydCgpLCBkb3Vi
bGUocHJvZ3Jlc3MpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcHJvZ3Jlc3M7Ci19Ci0KLXZvaWQg
VGV4dHVyZU1hcHBlck5vZGU6OmFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKGNvbnN0IFRleHR1cmVN
YXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogZnJv
bSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3ZvaWQg
VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNBbmltYXRpb25zKCkKIHsKLSAgICAvLyBPcHRpbWl6YXRp
b246IHNwZWNpYWwgY2FzZSB0aGUgZWRnZSB2YWx1ZXMgKDAgYW5kIDEpLgotICAgIGlmIChwcm9n
cmVzcyA9PSAxLjAgfHwgIXByb2dyZXNzKSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1hdHJpeDsKLSAgICAgICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogb3BzID0gcHJvZ3Jl
c3MgPyB0byA6IGZyb207Ci0gICAgICAgIG9wcy0+YXBwbHkoYW5pbWF0aW9uLmJveFNpemUsIG1h
dHJpeCk7Ci0gICAgICAgIHNldFRyYW5zZm9ybShtYXRyaXgpOwotICAgIH0KLQotICAgIGlmICgh
YW5pbWF0aW9uLmxpc3RzTWF0Y2gpIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdG9N
YXRyaXgsIGZyb21NYXRyaXg7Ci0gICAgICAgIHRvLT5hcHBseShhbmltYXRpb24uYm94U2l6ZSwg
dG9NYXRyaXgpOwotICAgICAgICBmcm9tLT5hcHBseShhbmltYXRpb24uYm94U2l6ZSwgZnJvbU1h
dHJpeCk7Ci0gICAgICAgIHRvTWF0cml4LmJsZW5kKGZyb21NYXRyaXgsIHByb2dyZXNzKTsKLSAg
ICAgICAgc2V0VHJhbnNmb3JtKHRvTWF0cml4KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLQotICAgIGlmICghdG8tPnNpemUoKSkg
ewotICAgICAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBzd2FwID0gdG87Ci0gICAgICAg
IHRvID0gZnJvbTsKLSAgICAgICAgZnJvbSA9IHN3YXA7Ci0gICAgfSBlbHNlIGlmICghZnJvbS0+
c2l6ZSgpKQotICAgICAgICBwcm9ncmVzcyA9IDEuMCAtIHByb2dyZXNzOwotCi0gICAgVHJhbnNm
b3JtT3BlcmF0aW9ucyBibGVuZGVkKCp0byk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBh
bmltYXRpb24uZnVuY3Rpb25MaXN0LnNpemUoKTsgKytpKQotICAgICAgICBibGVuZGVkLm9wZXJh
dGlvbnMoKVtpXS0+YmxlbmQoZnJvbS0+YXQoaSksIHByb2dyZXNzLCAhZnJvbS0+YXQoaSkpLT5h
cHBseShtYXRyaXgsIGFuaW1hdGlvbi5ib3hTaXplKTsKLQotICAgIHNldFRyYW5zZm9ybShtYXRy
aXgpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjphcHBseUFuaW1hdGlvbkZyYW1lKGNv
bnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiwgY29uc3QgQW5pbWF0aW9uVmFs
dWUqIGZyb20sIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB0bywgZmxvYXQgcHJvZ3Jlc3MpCi17Ci0g
ICAgc3dpdGNoIChhbmltYXRpb24ua2V5ZnJhbWVzLnByb3BlcnR5KCkpIHsKLSAgICBjYXNlIEFu
aW1hdGVkUHJvcGVydHlPcGFjaXR5OgotICAgICAgICBhcHBseU9wYWNpdHlBbmltYXRpb24oKHN0
YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUqPihmcm9tKS0+dmFsdWUoKSksIChz
dGF0aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVlKj4odG8pLT52YWx1ZSgpKSwgcHJv
Z3Jlc3MpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBBbmltYXRlZFByb3BlcnR5V2Via2l0
VHJhbnNmb3JtOgotICAgICAgICBhcHBseVRyYW5zZm9ybUFuaW1hdGlvbihhbmltYXRpb24sIHN0
YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKj4oZnJvbSktPnZhbHVlKCks
IHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKj4odG8pLT52YWx1ZSgp
LCBwcm9ncmVzcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmFw
cGx5QW5pbWF0aW9uKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiwgZG91
YmxlIG5vcm1hbGl6ZWRWYWx1ZSkKLXsKLSAgICAvLyBPcHRpbWl6YXRpb246IHNwZWNpYWwgY2Fz
ZSB0aGUgZWRnZSB2YWx1ZXMgKDAgYW5kIDEpLgotICAgIGlmICghbm9ybWFsaXplZFZhbHVlKSB7
Ci0gICAgICAgIGFwcGx5QW5pbWF0aW9uRnJhbWUoYW5pbWF0aW9uLCBhbmltYXRpb24ua2V5ZnJh
bWVzLmF0KDApLCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KDEpLCAwKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAobm9ybWFsaXplZFZhbHVlID09IDEuMCkgewotICAgICAgICBhcHBs
eUFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvbiwgYW5pbWF0aW9uLmtleWZyYW1lcy5hdChhbmltYXRp
b24ua2V5ZnJhbWVzLnNpemUoKSAtIDIpLCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KGFuaW1hdGlv
bi5rZXlmcmFtZXMuc2l6ZSgpIC0gMSksIDEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmIChhbmltYXRpb24ua2V5ZnJhbWVzLnNpemUoKSA9PSAyKSB7Ci0gICAgICAgIG5vcm1hbGl6
ZWRWYWx1ZSA9IGFwcGx5VGltaW5nRnVuY3Rpb24oYW5pbWF0aW9uLmFuaW1hdGlvbi0+dGltaW5n
RnVuY3Rpb24oKS5nZXQoKSwgbm9ybWFsaXplZFZhbHVlLCBhbmltYXRpb24uYW5pbWF0aW9uLT5k
dXJhdGlvbigpKTsKLSAgICAgICAgYXBwbHlBbmltYXRpb25GcmFtZShhbmltYXRpb24sIGFuaW1h
dGlvbi5rZXlmcmFtZXMuYXQoMCksIGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoMSksIG5vcm1hbGl6
ZWRWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGFuaW1hdGlvbi5rZXlmcmFtZXMuc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgIGNv
bnN0IEFuaW1hdGlvblZhbHVlKiBmcm9tID0gYW5pbWF0aW9uLmtleWZyYW1lcy5hdChpKTsKLSAg
ICAgICAgY29uc3QgQW5pbWF0aW9uVmFsdWUqIHRvID0gYW5pbWF0aW9uLmtleWZyYW1lcy5hdChp
ICsgMSk7Ci0gICAgICAgIGlmIChmcm9tLT5rZXlUaW1lKCkgPiBub3JtYWxpemVkVmFsdWUgfHwg
dG8tPmtleVRpbWUoKSA8IG5vcm1hbGl6ZWRWYWx1ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IChub3JtYWxpemVkVmFsdWUgLSBmcm9tLT5rZXlU
aW1lKCkpIC8gKHRvLT5rZXlUaW1lKCkgLSBmcm9tLT5rZXlUaW1lKCkpOwotICAgICAgICBub3Jt
YWxpemVkVmFsdWUgPSBhcHBseVRpbWluZ0Z1bmN0aW9uKGZyb20tPnRpbWluZ0Z1bmN0aW9uKCks
IG5vcm1hbGl6ZWRWYWx1ZSwgYW5pbWF0aW9uLmFuaW1hdGlvbi0+ZHVyYXRpb24oKSk7Ci0gICAg
ICAgIGFwcGx5QW5pbWF0aW9uRnJhbWUoYW5pbWF0aW9uLCBmcm9tLCB0bywgbm9ybWFsaXplZFZh
bHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1ib29sIFRleHR1cmVNYXBwZXJOb2Rl
OjpoYXNPcGFjaXR5QW5pbWF0aW9uKCkgY29uc3QKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uJiBhbmltYXRpb24gPSAqbV9hbmltYXRpb25zW2ldLmdldCgpOwotICAgICAg
ICBpZiAoYW5pbWF0aW9uLmtleWZyYW1lcy5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlP
cGFjaXR5KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6aGFzVHJhbnNmb3JtQW5pbWF0aW9uKCkg
Y29uc3QKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7
ICsraSkgewotICAgICAgICBjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24g
PSAqbV9hbmltYXRpb25zW2ldLmdldCgpOwotICAgICAgICBpZiAoYW5pbWF0aW9uLmtleWZyYW1l
cy5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjpzeW5jQW5pbWF0aW9ucyhHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ciogbGF5ZXIpCi17Ci0gICAgZm9yIChpbnQgaSA9IG1fYW5pbWF0aW9ucy5zaXplKCkgLSAxOyBp
ID49IDA7IC0taSkgewotICAgICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gYW5p
bWF0aW9uID0gbV9hbmltYXRpb25zW2ldOwotCi0gICAgICAgIGRvdWJsZSB0b3RhbFJ1bm5pbmdU
aW1lID0gV1RGOjpjdXJyZW50VGltZSgpIC0gYW5pbWF0aW9uLT5zdGFydFRpbWU7Ci0gICAgICAg
IFJlZlB0cjxBbmltYXRpb24+IGFuaW0gPSBhbmltYXRpb24tPmFuaW1hdGlvbjsKLSAgICAgICAg
ZG91YmxlIG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZSh0b3RhbFJ1
bm5pbmdUaW1lLCBhbmltLT5kdXJhdGlvbigpLCBhbmltLT5kaXJlY3Rpb24oKSk7Ci0KLSAgICAg
ICAgaWYgKGFuaW0tPml0ZXJhdGlvbkNvdW50KCkgIT0gQW5pbWF0aW9uOjpJdGVyYXRpb25Db3Vu
dEluZmluaXRlICYmIHRvdGFsUnVubmluZ1RpbWUgPj0gYW5pbS0+ZHVyYXRpb24oKSAqIGFuaW0t
Pml0ZXJhdGlvbkNvdW50KCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGFwcGx5IGFuIGFuaW1hdGlv
biB0aGF0IHZlcnkgY2xvc2UgdG8gdGhlIGVkZ2UsIHNvIHRoYXQgdGhlIGZpbmFsIGZyYW1lIGlz
IGFwcGxpZWQsIG90ZXJ3aXNlIHdlIG1pZ2h0IGdldCwgZm9yIGV4YW1wbGUsIGFuIG9wYWNpdHkg
b2YgMC4wMSB3aGljaCBpcyBzdGlsbCB2aXNpYmxlLgotICAgICAgICAgICAgaWYgKGFuaW0tPmZp
bGxzRm9yd2FyZHMoKSkgewotICAgICAgICAgICAgICAgIGlmIChhbmltYXRpb24tPmtleWZyYW1l
cy5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCi0gICAgICAg
ICAgICAgICAgICAgIHNldFRyYW5zZm9ybShtX3N0YXRlLnRyYW5zZm9ybSk7Ci0gICAgICAgICAg
ICAgICAgZWxzZSBpZiAoYW5pbWF0aW9uLT5rZXlmcmFtZXMucHJvcGVydHkoKSA9PSBBbmltYXRl
ZFByb3BlcnR5T3BhY2l0eSkKLSAgICAgICAgICAgICAgICAgICAgc2V0T3BhY2l0eShtX3N0YXRl
Lm9wYWNpdHkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX2FuaW1hdGlvbnMucmVt
b3ZlKGkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
IWFuaW1hdGlvbi0+cGF1c2VkKQotICAgICAgICAgICAgYXBwbHlBbmltYXRpb24oKmFuaW1hdGlv
bi5nZXQoKSwgbm9ybWFsaXplZFZhbHVlKTsKLSAgICB9CisgICAgbV9hbmltYXRpb25zLmFwcGx5
KHRoaXMpOworICAgIGlmICghbV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUo
QW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkpCisgICAgICAgIHNldFRyYW5zZm9ybSht
X3N0YXRlLnRyYW5zZm9ybSk7CisgICAgaWYgKCFtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0
aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkpCisgICAgICAgIHNldE9wYWNpdHko
bV9zdGF0ZS5vcGFjaXR5KTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0FuaW1h
dGlvbnNSZWN1cnNpdmVseSgpCiB7Ci0gICAgc3luY0FuaW1hdGlvbnMoMCk7CisgICAgc3luY0Fu
aW1hdGlvbnMoKTsKIAogICAgIGZvciAoaW50IGkgPSBtX2NoaWxkcmVuLnNpemUoKSAtIDE7IGkg
Pj0gMDsgLS1pKQogICAgICAgICBtX2NoaWxkcmVuW2ldLT5zeW5jQW5pbWF0aW9uc1JlY3Vyc2l2
ZWx5KCk7CkBAIC04NTUsOCArNjY2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0Nv
bXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWMKICAgICBp
ZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCiAgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5z
eW5jQ29tcG9zaXRpbmdTdGF0ZSh0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGdyYXBoaWNz
TGF5ZXItPnJlcGxpY2FMYXllcigpKSwgdGV4dHVyZU1hcHBlcik7CiAKLSAgICBzeW5jQW5pbWF0
aW9ucyhncmFwaGljc0xheWVyKTsKLQorICAgIHN5bmNBbmltYXRpb25zKCk7CiAgICAgY29tcHV0
ZVRpbGVzKCk7CiAKICAgICBpZiAoZ3JhcGhpY3NMYXllcikKQEAgLTg3OSwxMSArNjg5LDUgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIqIGdyYXBoaWMKICAgICB9CiB9CiAKLVRleHR1cmVNYXBwZXJBbmltYXRp
b246OlRleHR1cmVNYXBwZXJBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVl
cykKLSAgICA6IGtleWZyYW1lcyh2YWx1ZXMpCi17CiB9Ci0KLX0KLQogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyTm9kZS5oCmluZGV4IGU2NDY3MmIuLjI3YmZmMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5oCkBAIC0yNywxMCArMjcsOSBAQAogI2luY2x1ZGUgIkludFBvaW50SGFzaC5oIgogI2luY2x1
ZGUgIkxheWVyVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJBbmltYXRpb24uaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1
ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb24uaCIKLSNpbmNsdWRlICJVbml0QmV6aWVyLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgpAQCAtNTcsMjIgKzU2LDcgQEAgcHVibGljOgogICAgIHsgfQogfTsKIAotY2xhc3Mg
VGV4dHVyZU1hcHBlckFuaW1hdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJB
bmltYXRpb24+IHsKLXB1YmxpYzoKLSAgICBTdHJpbmcgbmFtZTsKLSAgICBLZXlmcmFtZVZhbHVl
TGlzdCBrZXlmcmFtZXM7Ci0gICAgSW50U2l6ZSBib3hTaXplOwotICAgIFJlZlB0cjxBbmltYXRp
b24+IGFuaW1hdGlvbjsKLSAgICBib29sIHBhdXNlZDsKLSAgICBWZWN0b3I8VHJhbnNmb3JtT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlPiBmdW5jdGlvbkxpc3Q7Ci0gICAgYm9vbCBsaXN0c01hdGNo
OwotICAgIGJvb2wgaGFzQmlnUm90YXRpb247Ci0gICAgZG91YmxlIHN0YXJ0VGltZTsKLSAgICBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0Jik7Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEtleWZy
YW1lVmFsdWVMaXN0JiB2YWx1ZXMpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVy
QW5pbWF0aW9uKHZhbHVlcykpOyB9Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyTm9kZSB7Citj
bGFzcyBUZXh0dXJlTWFwcGVyTm9kZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xp
ZW50IHsKIAogcHVibGljOgogICAgIC8vIFRoaXMgc2V0IG9mIGZsYWdzIGhlbHAgdXMgZGVmZXIg
d2hpY2ggcHJvcGVydGllcyBvZiB0aGUgbGF5ZXIgaGF2ZSBiZWVuCkBAIC0xOTgsMTMgKzE4Miw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludFNlbGZBbmRDaGlsZHJlbldpdGhSZXBsaWNhKGNv
bnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmKTsKICAgICB2b2lkIHJlbmRlckNvbnRlbnQo
VGV4dHVyZU1hcHBlciosIEdyYXBoaWNzTGF5ZXIqKTsKIAotICAgIHZvaWQgc3luY0FuaW1hdGlv
bnMoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqKTsKLSAgICB2b2lkIGFwcGx5QW5pbWF0aW9u
KGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mLCBkb3VibGUgcnVubmluZ1RpbWUpOwotICAg
IHZvaWQgYXBwbHlBbmltYXRpb25GcmFtZShjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiwg
Y29uc3QgQW5pbWF0aW9uVmFsdWUqIGZyb20sIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB0bywgZmxv
YXQgcHJvZ3Jlc3MpOwotICAgIHZvaWQgYXBwbHlPcGFjaXR5QW5pbWF0aW9uKGZsb2F0IGZyb21P
cGFjaXR5LCBmbG9hdCB0b09wYWNpdHksIGRvdWJsZSk7Ci0gICAgdm9pZCBhcHBseVRyYW5zZm9y
bUFuaW1hdGlvbihjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiwgY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9ucyogc3RhcnQsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGVuZCwgZG91Ymxl
KTsKLSAgICBib29sIGhhc09wYWNpdHlBbmltYXRpb24oKSBjb25zdDsKLSAgICBib29sIGhhc1Ry
YW5zZm9ybUFuaW1hdGlvbigpIGNvbnN0OworICAgIHZvaWQgc3luY0FuaW1hdGlvbnMoKTsKICAg
ICBib29sIGlzVmlzaWJsZSgpIGNvbnN0OwogICAgIGJvb2wgc2hvdWxkUGFpbnRUb0ludGVybWVk
aWF0ZVN1cmZhY2UoKSBjb25zdDsKIApAQCAtMzE1LDggKzI5Myw3IEBAIHByaXZhdGU6CiAKICAg
ICBTdGF0ZSBtX3N0YXRlOwogICAgIFRleHR1cmVNYXBwZXIqIG1fdGV4dHVyZU1hcHBlcjsKLQot
ICAgIFZlY3RvcjxSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gPiBtX2FuaW1hdGlvbnM7
CisgICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOwogfTsKIAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123507</attachid>
            <date>2012-01-22 18:51:14 -0800</date>
            <delta_ts>2012-01-22 18:55:37 -0800</delta_ts>
            <desc>Patch 1: Move animations to TextureMapperAnimations</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>28588</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3Yzg5ZmU4Li5hYWE4YjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUg
QEAKKyAyMDEyLTAxLTIxICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CisKKyAgICAgICAgW1RleG1hcF0gRGl2aWRlIFRleHR1cmVNYXBwZXJOb2RlLmNwcCB0byAz
IGZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzY2NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBT
cGxpdCB0aGUgYW5pbWF0aW9uIHBhcnQgb2YgVGV4dHVyZU1hcHBlck5vZGUgb3V0IHRvIGEgc2Vw
YXJhdGUgZmlsZSwgY2FsbGVkCisgICAgICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb24uCisgICAg
ICAgIFByb3ZpZGUgYSBjbGVhbiBpbnRlcmZhY2UgZm9yIHRoYXQgY2xhc3MsIHRoYXQgYWxsb3dz
IHNlcGFyYXRpbmcgdGhlIGludGVybmFscyBvZiB0aGUgc2NlbmUKKyAgICAgICAgcGFpbnRpbmcg
ZnJvbSB0aGUgaW50ZXJuYWxzIG9mIHRoZSBhbmltYXRpb24gaW50ZXJwb2xhdGlvbi4KKworICAg
ICAgICBObyBuZXcgdGVzdHMuIEV4aXN0aW5nIGFuaW1hdGlvbiB0ZXN0cyBjb3ZlciB0aGlzLgor
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkZWQgbmV3IFRleHR1cmVNYXBwZXIt
cmVsYXRlZCBmaWxlcy4KKyAgICAgICAgKiBUYXJnZXQucHJpOiBBZGRlZCBuZXcgVGV4dHVyZU1h
cHBlci1yZWxhdGVkIGZpbGVzLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQgbmV3IFRl
eHR1cmVNYXBwZXItcmVsYXRlZCBmaWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGF1c2VBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnJlbW92ZUFuaW1hdGlvbik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJBbmltYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0Fu
aW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNBbmlt
YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQW5pbWF0
aW9uc1JlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpz
eW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmg6CisKIDIwMTItMDEtMjEgIERhdmlkIFJldmVtYW4gIDxyZXZl
bWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIEluY3JlbWVudGFsIHRleHR1
cmUgdXBkYXRlcyBhcmUgbm90IGF0b21pYy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmlu
ZGV4IDIxMzAxYzcuLmIxMzRhY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAt
NTY5Nyw2ICs1Njk3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlv
bi5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyQW5pbWF0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaApAQCAtNTcx
NSw2ICs1NzE3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyQW5pbWF0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
aW5kZXggMWNhMDllNi4uYTM4MjY5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zOTMzLDYgKzM5MzMsNyBA
QCBjb250YWlucyhDT05GSUcsIHRleG1hcCkgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCiAKQEAgLTM5NDAsNiArMzk0MSw3
IEBAIGNvbnRhaW5zKENPTkZJRywgdGV4bWFwKSB7CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L1RleHR1cmVNYXBwZXJRdC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvTGF5ZXJUcmFuc2Zvcm0uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXIuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IDJmMTA5MzcuLjVkNjdhY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM5NjgsNiArMzk2OCw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJB
bmltYXRpb24uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckFuaW1hdGlvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggN2VmOTgxOC4uZjQ3OGI5ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCkBAIC0zNjUsNTkg
KzM2NSwyNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24o
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdAogICAgIGlmICghYW5pbSB8fCBhbmlt
LT5pc0VtcHR5T3JaZXJvRHVyYXRpb24oKSB8fCB2YWx1ZUxpc3Quc2l6ZSgpIDwgMiB8fCAodmFs
dWVMaXN0LnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSAmJiB2
YWx1ZUxpc3QucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRpb25z
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIC8vIFRoZSBzYW1lIGFuaW1hdGlvbiBuYW1lIGNhbiBi
ZSB1c2VkIGZvciB0d28gYW5pbWF0aW9ucyB3aXRoIGRpZmZlcmVudCBwcm9wZXJ0aWVzLgotICAg
ICAgICBpZiAobV9hbmltYXRpb25zW2ldLT5uYW1lICE9IGtleWZyYW1lc05hbWUgfHwgbV9hbmlt
YXRpb25zW2ldLT5rZXlmcmFtZXMucHJvcGVydHkoKSAhPSB2YWx1ZUxpc3QucHJvcGVydHkoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIGNv
cHkgb2YgdGhpcyBhbmltYXRpb24sIHRoYXQgbWVhbnMgdGhhdCB3ZSdyZSByZXN1bWluZyBpdCBy
YXRoZXIgdGhhbiBhZGRpbmcgaXQuCi0gICAgICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uPiYgYW5pbWF0aW9uID0gbV9hbmltYXRpb25zW2ldOwotICAgICAgICBhbmltYXRpb24tPmFu
aW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKGFuaW0pOwotICAgICAgICBhbmltYXRpb24tPnBh
dXNlZCA9IGZhbHNlOwotICAgICAgICBhbmltYXRpb24tPnN0YXJ0VGltZSA9IFdURjo6Y3VycmVu
dFRpbWUoKSAtIHRpbWVPZmZzZXQ7Ci0gICAgICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
Tm9kZTo6QW5pbWF0aW9uQ2hhbmdlKTsKLSAgICAgICAgbV9hbmltYXRpb25TdGFydGVkVGltZXIu
c3RhcnRPbmVTaG90KDApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgYm9vbCBs
aXN0c01hdGNoOworICAgIGJvb2wgaGFzQmlnUm90YXRpb247CisgICAgVmVjdG9yPFRyYW5zZm9y
bU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZT4gZnVuY3Rpb25MaXN0OwogCi0gICAgUmVmUHRyPFRl
eHR1cmVNYXBwZXJBbmltYXRpb24+IGFuaW1hdGlvbiA9IFRleHR1cmVNYXBwZXJBbmltYXRpb246
OmNyZWF0ZSh2YWx1ZUxpc3QpOwotICAgIGFuaW1hdGlvbi0+Ym94U2l6ZSA9IGJveFNpemU7Ci0g
ICAgYW5pbWF0aW9uLT5uYW1lID0ga2V5ZnJhbWVzTmFtZTsKLSAgICBhbmltYXRpb24tPmFuaW1h
dGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKGFuaW0pOwotICAgIGFuaW1hdGlvbi0+cGF1c2VkID0g
ZmFsc2U7Ci0gICAgYW5pbWF0aW9uLT5zdGFydFRpbWUgPSBXVEY6OmN1cnJlbnRUaW1lKCkgLSB0
aW1lT2Zmc2V0OwotCi0gICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm0pIHsKLSAgICAgICAgYm9vbCBoYXNCaWdSb3RhdGlvbjsgLy8g
Tm90IHVzZWQsIGJ1dCByZXF1aXJlZCBhcyBhIHBvaW50ZXIgcGFyYW1ldGVyIGZvciB0aGUgZnVu
Y3Rpb24uCi0gICAgICAgIGZldGNoVHJhbnNmb3JtT3BlcmF0aW9uTGlzdCh2YWx1ZUxpc3QsIGFu
aW1hdGlvbi0+ZnVuY3Rpb25MaXN0LCBhbmltYXRpb24tPmxpc3RzTWF0Y2gsIGhhc0JpZ1JvdGF0
aW9uKTsKLSAgICB9CisgICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm0pCisgICAgICAgIGZldGNoVHJhbnNmb3JtT3BlcmF0aW9uTGlz
dCh2YWx1ZUxpc3QsIGZ1bmN0aW9uTGlzdCwgbGlzdHNNYXRjaCwgaGFzQmlnUm90YXRpb24pOwog
Ci0gICAgbV9hbmltYXRpb25zLmFwcGVuZChhbmltYXRpb24pOworICAgIG1fYW5pbWF0aW9ucy5h
ZGQoa2V5ZnJhbWVzTmFtZSwgVGV4dHVyZU1hcHBlckFuaW1hdGlvbih2YWx1ZUxpc3QsIGJveFNp
emUsIGFuaW0sIHRpbWVPZmZzZXQsIGZ1bmN0aW9uTGlzdCwgbGlzdHNNYXRjaCkpOwogICAgIG5v
dGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QW5pbWF0aW9uQ2hhbmdlKTsKICAgICBtX2Fu
aW1hdGlvblN0YXJ0ZWRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGF1c2VBbmltYXRpb24oY29u
c3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKIHsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBp
ZiAobV9hbmltYXRpb25zW2ldLT5uYW1lICE9IGFuaW1hdGlvbk5hbWUpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgbV9hbmltYXRpb25zW2ldLT5wYXVzZWQgPSB0cnVlOwotICAgICAg
ICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkFuaW1hdGlvbkNoYW5nZSk7Ci0gICAg
fQorICAgIG1fYW5pbWF0aW9ucy5wYXVzZShhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKIH0K
IAogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKIHsKLSAgICBmb3IgKGludCBpID0gbV9hbmltYXRpb25z
LnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIC8vIFRoZSBzYW1lIGFuaW1hdGlv
biBuYW1lIGNhbiBiZSB1c2VkIGZvciB0d28gYW5pbWF0aW9ucyB3aXRoIGRpZmZlcmVudCBwcm9w
ZXJ0aWVzLiBXZSBzaG91bGQgcmVtb3ZlIGJvdGguCi0gICAgICAgIGlmIChtX2FuaW1hdGlvbnNb
aV0tPm5hbWUgIT0gYW5pbWF0aW9uTmFtZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBtX2FuaW1hdGlvbnMucmVtb3ZlKGkpOwotICAgICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlck5vZGU6OkFuaW1hdGlvbkNoYW5nZSk7Ci0gICAgfQorICAgIG1fYW5pbWF0aW9ucy5yZW1v
dmUoYW5pbWF0aW9uTmFtZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OmFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyPiopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCmluZGV4IGViYjli
NTMuLjE3MmZkZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCkBA
IC05NSw3ICs5NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3N5bmNRdWV1ZWQ7CiAgICAgaW50
IG1fY2hhbmdlTWFzazsKICAgICBUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudERhdGEgbV9wZW5k
aW5nQ29udGVudDsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHR1cmVNYXBwZXJBbmltYXRpb24+ID4g
bV9hbmltYXRpb25zOworICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIG1fYW5pbWF0aW9uczsK
ICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyPiopOwogICAgIFRpbWVyPEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPiBt
X2FuaW1hdGlvblN0YXJ0ZWRUaW1lcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlv
bi5jcHAKaW5kZXggMGJlZmZjMi4uNzIwODNhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5p
bWF0aW9uLmNwcApAQCAtMjMsMTIgKzIzLDE0IEBACiAjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIK
ICNpbmNsdWRlICJVbml0QmV6aWVyLmgiCiAKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBkb3VibGUgbm9ybWFsaXplZEFuaW1hdGlvblZhbHVl
KGRvdWJsZSBydW5uaW5nVGltZSwgZG91YmxlIGR1cmF0aW9uLCBib29sIGFsdGVybmF0ZSkKIHsK
ICAgICBpZiAoIWR1cmF0aW9uKQogICAgICAgICByZXR1cm4gMDsKKwogICAgIGNvbnN0IGludCBs
b29wQ291bnQgPSBydW5uaW5nVGltZSAvIGR1cmF0aW9uOwogICAgIGNvbnN0IGRvdWJsZSBsYXN0
RnVsbExvb3AgPSBkdXJhdGlvbiAqIGRvdWJsZShsb29wQ291bnQpOwogICAgIGNvbnN0IGRvdWJs
ZSByZW1haW5kZXIgPSBydW5uaW5nVGltZSAtIGxhc3RGdWxsTG9vcDsKQEAgLTU1LDggKzU3LDcg
QEAgc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVFcHNpbG9uKGRvdWJsZSBkdXJhdGlvbikKIAog
c3RhdGljIGlubGluZSBkb3VibGUgc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKGRvdWJsZSBwMXgs
IGRvdWJsZSBwMXksIGRvdWJsZSBwMngsIGRvdWJsZSBwMnksIGRvdWJsZSB0LCBkb3VibGUgZHVy
YXRpb24pCiB7Ci0gICAgVW5pdEJlemllciBiZXppZXIocDF4LCBwMXksIHAyeCwgcDJ5KTsKLSAg
ICByZXR1cm4gYmV6aWVyLnNvbHZlKHQsIHNvbHZlRXBzaWxvbihkdXJhdGlvbikpOworICAgIHJl
dHVybiBVbml0QmV6aWVyKHAxeCwgcDF5LCBwMngsIHAyeSkuc29sdmUodCwgc29sdmVFcHNpbG9u
KGR1cmF0aW9uKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlU3RlcHNGdW5jdGlv
bihpbnQgbnVtU3RlcHMsIGJvb2wgc3RlcEF0U3RhcnQsIGRvdWJsZSB0KQpAQCAtNzMsMTEgKzc0
LDcgQEAgc3RhdGljIGlubGluZSBmbG9hdCBhcHBseVRpbWluZ0Z1bmN0aW9uKGNvbnN0IFRpbWlu
Z0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbiwgZmwKIAogICAgIGlmICh0aW1pbmdGdW5jdGlvbi0+
aXNDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKCkpIHsKICAgICAgICAgY29uc3QgQ3ViaWNCZXpp
ZXJUaW1pbmdGdW5jdGlvbiogY3RmID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIHNvbHZlQ3ViaWNC
ZXppZXJGdW5jdGlvbihjdGYtPngxKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3RmLT55MSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGN0Zi0+eDIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
dGYtPnkyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jl
c3MsIGR1cmF0aW9uKTsKKyAgICAgICAgcmV0dXJuIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihj
dGYtPngxKCksIGN0Zi0+eTEoKSwgY3RmLT54MigpLCBjdGYtPnkyKCksIHByb2dyZXNzLCBkdXJh
dGlvbik7CiAgICAgfQogCiAgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc1N0ZXBzVGltaW5nRnVu
Y3Rpb24oKSkgewpAQCAtOTAsMzUgKzg3LDQ5IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgYXBwbHlU
aW1pbmdGdW5jdGlvbihjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24sIGZsCiAK
IHN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhcHBseVRyYW5zZm9ybUFuaW1hdGlvbihjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB0
bywgZG91YmxlIHByb2dyZXNzLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBWZWN0b3I8
VHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlPiBmdW5jdGlvbkxpc3QsIGJvb2wgbGlz
dHNNYXRjaCkKIHsKLSAgICAvLyBPcHRpbWl6YXRpb246IHNwZWNpYWwgY2FzZSB0aGUgZWRnZSB2
YWx1ZXMgKDAgYW5kIDEpLgotICAgIGlmIChwcm9ncmVzcyA9PSAxLjAgfHwgIXByb2dyZXNzKSB7
Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLSAgICAgICAgY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9ucyogb3BzID0gcHJvZ3Jlc3MgPyB0byA6IGZyb207Ci0gICAgICAgIG9w
cy0+YXBwbHkoYm94U2l6ZSwgbWF0cml4KTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRy
aXg7CisKKyAgICAvLyBGaXJzdCBmcmFtZSBvZiBhbiBhbmltYXRpb24uCisgICAgaWYgKCFwcm9n
cmVzcykgeworICAgICAgICBmcm9tLT5hcHBseShib3hTaXplLCBtYXRyaXgpOwogICAgICAgICBy
ZXR1cm4gbWF0cml4OwogICAgIH0KIAorICAgIC8vIExhc3QgZnJhbWUgb2YgYW4gYW5pbWF0aW9u
LgorICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7CisgICAgICAgIHRvLT5hcHBseShib3hTaXplLCBt
YXRyaXgpOworICAgICAgICByZXR1cm4gbWF0cml4OworICAgIH0KKworICAgIC8vIElmIHdlIGhh
dmUgaW5jb21wYXRpYmxlIG9wZXJhdGlvbiBsaXN0cywgd2UgYmxlbmQgdGhlIHJlc3VsdGluZyBt
YXRyaWNlcy4KICAgICBpZiAoIWxpc3RzTWF0Y2gpIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggdG9NYXRyaXgsIGZyb21NYXRyaXg7Ci0gICAgICAgIHRvLT5hcHBseShib3hTaXplLCB0
b01hdHJpeCk7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGZyb21NYXRyaXg7CisgICAg
ICAgIHRvLT5hcHBseShib3hTaXplLCBtYXRyaXgpOwogICAgICAgICBmcm9tLT5hcHBseShib3hT
aXplLCBmcm9tTWF0cml4KTsKLSAgICAgICAgdG9NYXRyaXguYmxlbmQoZnJvbU1hdHJpeCwgcHJv
Z3Jlc3MpOwotICAgICAgICByZXR1cm4gdG9NYXRyaXg7CisgICAgICAgIG1hdHJpeC5ibGVuZChm
cm9tTWF0cml4LCBwcm9ncmVzcyk7CisgICAgICAgIHJldHVybiBtYXRyaXg7CiAgICAgfQogCi0g
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotCisgICAgLy8gQW5pbWF0aW9uIHRvICIt
d2Via2l0LXRyYW5zZm9ybTogbm9uZSIuCiAgICAgaWYgKCF0by0+c2l6ZSgpKSB7Ci0gICAgICAg
IGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHN3YXAgPSB0bzsKLSAgICAgICAgdG8gPSBmcm9t
OwotICAgICAgICBmcm9tID0gc3dhcDsKLSAgICB9IGVsc2UgaWYgKCFmcm9tLT5zaXplKCkpCi0g
ICAgICAgIHByb2dyZXNzID0gMS4wIC0gcHJvZ3Jlc3M7CisgICAgICAgIFRyYW5zZm9ybU9wZXJh
dGlvbnMgYmxlbmRlZCgqdG8pOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0
aW9uTGlzdC5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGJsZW5kZWQub3BlcmF0aW9ucygpW2ld
LT5ibGVuZCgwLCBwcm9ncmVzcywgdHJ1ZSktPmFwcGx5KG1hdHJpeCwgYm94U2l6ZSk7CisgICAg
ICAgIHJldHVybiBtYXRyaXg7CisgICAgfQogCisgICAgLy8gQW5pbWF0aW9uIGZyb20gIi13ZWJr
aXQtdHJhbnNmb3JtOiBub25lIi4KKyAgICBpZiAoIWZyb20tPnNpemUoKSkgeworICAgICAgICBU
cmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kZWQoKmZyb20pOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGZ1bmN0aW9uTGlzdC5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGJsZW5kZWQu
b3BlcmF0aW9ucygpW2ldLT5ibGVuZCgwLCAxLiAtIHByb2dyZXNzLCB0cnVlKS0+YXBwbHkobWF0
cml4LCBib3hTaXplKTsKKyAgICAgICAgcmV0dXJuIG1hdHJpeDsKKyAgICB9CisKKyAgICAvLyBO
b3JtYWwgYW5pbWF0aW9uIHdpdGggYSBtYXRjaGluZyBvcGVyYXRpb24gbGlzdC4KICAgICBUcmFu
c2Zvcm1PcGVyYXRpb25zIGJsZW5kZWQoKnRvKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZ1bmN0aW9uTGlzdC5zaXplKCk7ICsraSkKICAgICAgICAgYmxlbmRlZC5vcGVyYXRpb25zKClb
aV0tPmJsZW5kKGZyb20tPmF0KGkpLCBwcm9ncmVzcywgIWZyb20tPmF0KGkpKS0+YXBwbHkobWF0
cml4LCBib3hTaXplKTsKLQogICAgIHJldHVybiBtYXRyaXg7CiB9CiAKQEAgLTI0MSwzICsyNTIs
NCBAQCB2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjphcHBseShUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uQ2xpZW50KiBjbGllbnQpCiB9CiAKIH0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
QW5pbWF0aW9uLmgKaW5kZXggN2UxMTVlZC4uNWUyMjZlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbi5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKKyNpZiBVU0UoVEVY
VFVSRV9NQVBQRVIpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJB
bmltYXRpb25DbGllbnQgewpAQCAtMzUsNyArMzYsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIFRleHR1
cmVNYXBwZXJBbmltYXRpb24gewogcHVibGljOgotICAgIGVudW0gUGxheVN0YXRlIHsgUGxheWlu
Z1N0YXRlLCBQYXVzZWRTdGF0ZSwgU3RvcHBlZFN0YXRlIH07CisgICAgZW51bSBBbmltYXRpb25T
dGF0ZSB7IFBsYXlpbmdTdGF0ZSwgUGF1c2VkU3RhdGUsIFN0b3BwZWRTdGF0ZSB9OwogCiAgICAg
VGV4dHVyZU1hcHBlckFuaW1hdGlvbigpCiAgICAgICAgIDogbV9rZXlmcmFtZXMoQW5pbWF0ZWRQ
cm9wZXJ0eUludmFsaWQpCkBAIC00Myw4ICs0NCw4IEBAIHB1YmxpYzoKICAgICBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYsIGNv
bnN0IEFuaW1hdGlvbiosIGRvdWJsZSwgY29uc3QgVmVjdG9yPFRyYW5zZm9ybU9wZXJhdGlvbjo6
T3BlcmF0aW9uVHlwZT4mLCBib29sKTsKICAgICB2b2lkIGFwcGx5KFRleHR1cmVNYXBwZXJBbmlt
YXRpb25DbGllbnQqKTsKICAgICB2b2lkIHBhdXNlKGRvdWJsZSk7Ci0gICAgUGxheVN0YXRlIHN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQotICAgIHZvaWQgc2V0U3RhdGUoUGxheVN0
YXRlIHMpIHsgbV9zdGF0ZSA9IHM7IH0KKyAgICBBbmltYXRpb25TdGF0ZSBzdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICB2b2lkIHNldFN0YXRlKEFuaW1hdGlvblN0YXRlIHMp
IHsgbV9zdGF0ZSA9IHM7IH0KICAgICBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkoKSBjb25z
dCB7IHJldHVybiBtX2tleWZyYW1lcy5wcm9wZXJ0eSgpOyB9CiAgICAgYm9vbCBpc0FjdGl2ZSgp
IGNvbnN0OwogCkBAIC01OSw3ICs2MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc0JpZ1Jv
dGF0aW9uOwogICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKICAgICBkb3VibGUgbV9wYXVzZVRpbWU7
Ci0gICAgUGxheVN0YXRlIG1fc3RhdGU7CisgICAgQW5pbWF0aW9uU3RhdGUgbV9zdGF0ZTsKIH07
CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIHsKQEAgLTgwLDQgKzgxLDYgQEAgcHJp
dmF0ZToKIH07CiAKIH0KKyNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVIpCisKICNlbmRpZiAv
LyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCmluZGV4
IDI3NjI1MTcuLjIxN2E5NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcApAQCAtNTg1LDEx
ICs1ODUsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZVNl
bGYoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYQogICAgICAgICAgICBsYXllci0+bV9l
ZmZlY3RUYXJnZXQgPSB0aGlzOwogICAgIH0KIAotICAgIGlmIChjaGFuZ2VNYXNrICYgQW5pbWF0
aW9uQ2hhbmdlKSB7Ci0gICAgICAgIG1fYW5pbWF0aW9ucy5jbGVhcigpOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGdyYXBoaWNzTGF5ZXItPm1fYW5pbWF0aW9ucy5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgIG1fYW5pbWF0aW9ucy5hcHBlbmQoZ3JhcGhpY3NMYXllci0+bV9hbmlt
YXRpb25zW2ldKTsKLSAgICB9CisgICAgaWYgKGNoYW5nZU1hc2sgJiBBbmltYXRpb25DaGFuZ2Up
CisgICAgICAgIG1fYW5pbWF0aW9ucyA9IGdyYXBoaWNzTGF5ZXItPm1fYW5pbWF0aW9uczsKIAog
ICAgIG1fc3RhdGUubWFza0xheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVy
LT5tYXNrTGF5ZXIoKSk7CiAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXIgPSB0b1RleHR1cmVNYXBw
ZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnJlcGxpY2FMYXllcigpKTsKQEAgLTYxNCwxMSArNjExLDYg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAgICBpZiAoIW1fY3VycmVudENvbnRlbnQubmVl
ZHNEaXNwbGF5KQogICAgICAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QudW5p
dGUocGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7CiAKLSAgICBpZiAoIWhhc09wYWNp
dHlBbmltYXRpb24oKSkKLSAgICAgICAgbV9vcGFjaXR5ID0gbV9zdGF0ZS5vcGFjaXR5OwotICAg
IGlmICghaGFzVHJhbnNmb3JtQW5pbWF0aW9uKCkpCi0gICAgICAgIG1fdHJhbnNmb3JtLnNldExv
Y2FsVHJhbnNmb3JtKG1fc3RhdGUudHJhbnNmb3JtKTsKLQogICAgIG1fdHJhbnNmb3JtLnNldFBv
c2l0aW9uKG1fc3RhdGUucG9zKTsKICAgICBtX3RyYW5zZm9ybS5zZXRBbmNob3JQb2ludChtX3N0
YXRlLmFuY2hvclBvaW50KTsKICAgICBtX3RyYW5zZm9ybS5zZXRTaXplKG1fc3RhdGUuc2l6ZSk7
CkBAIC02MjgsMTAgKzYyMCw4IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3Np
dGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhCiAKIGJvb2wgVGV4
dHVyZU1hcHBlck5vZGU6OmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkg
Y29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7
ICsraSkgewotICAgICAgICBpZiAoIW1fYW5pbWF0aW9uc1tpXS0+cGF1c2VkKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChtX2FuaW1hdGlvbnMuaGFzUnVubmluZ0Fu
aW1hdGlvbnMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKG1fY2hpbGRyZW5b
aV0tPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCkBAIC02NDEsMTk3
ICs2MzEsMTggQEAgYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6ZGVzY2VuZGFudHNPclNlbGZIYXZl
UnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGlj
IGRvdWJsZSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUoZG91YmxlIHJ1bm5pbmdUaW1lLCBkb3Vi
bGUgZHVyYXRpb24sIGJvb2wgYWx0ZXJuYXRlKQotewotICAgIGlmICghZHVyYXRpb24pCi0gICAg
ICAgIHJldHVybiAwOwotICAgIGNvbnN0IGludCBsb29wQ291bnQgPSBydW5uaW5nVGltZSAvIGR1
cmF0aW9uOwotICAgIGNvbnN0IGRvdWJsZSBsYXN0RnVsbExvb3AgPSBkdXJhdGlvbiAqIGRvdWJs
ZShsb29wQ291bnQpOwotICAgIGNvbnN0IGRvdWJsZSByZW1haW5kZXIgPSBydW5uaW5nVGltZSAt
IGxhc3RGdWxsTG9vcDsKLSAgICBjb25zdCBkb3VibGUgbm9ybWFsaXplZCA9IHJlbWFpbmRlciAv
IGR1cmF0aW9uOwotICAgIHJldHVybiAobG9vcENvdW50ICUgMiAmJiBhbHRlcm5hdGUpID8gKDEg
LSBub3JtYWxpemVkKSA6IG5vcm1hbGl6ZWQ7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6
OmFwcGx5T3BhY2l0eUFuaW1hdGlvbihmbG9hdCBmcm9tT3BhY2l0eSwgZmxvYXQgdG9PcGFjaXR5
LCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gT3B0aW1pemF0aW9uOiBzcGVjaWFsIGNhc2Ug
dGhlIGVkZ2UgdmFsdWVzICgwIGFuZCAxKS4KLSAgICBpZiAocHJvZ3Jlc3MgPT0gMS4wKQotICAg
ICAgICBzZXRPcGFjaXR5KHRvT3BhY2l0eSk7Ci0gICAgZWxzZSBpZiAoIXByb2dyZXNzKQotICAg
ICAgICBzZXRPcGFjaXR5KGZyb21PcGFjaXR5KTsKLSAgICBlbHNlCi0gICAgICAgIHNldE9wYWNp
dHkoZnJvbU9wYWNpdHkgKyBwcm9ncmVzcyAqICh0b09wYWNpdHkgLSBmcm9tT3BhY2l0eSkpOwot
fQotCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUVwc2lsb24oZG91YmxlIGR1cmF0aW9uKQot
ewotICAgIHJldHVybiAxLjAgLyAoMjAwLjAgKiBkdXJhdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgZG91YmxlIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihkb3VibGUgcDF4LCBkb3VibGUgcDF5
LCBkb3VibGUgcDJ4LCBkb3VibGUgcDJ5LCBkb3VibGUgdCwgZG91YmxlIGR1cmF0aW9uKQotewot
ICAgIFVuaXRCZXppZXIgYmV6aWVyKHAxeCwgcDF5LCBwMngsIHAyeSk7Ci0gICAgcmV0dXJuIGJl
emllci5zb2x2ZSh0LCBzb2x2ZUVwc2lsb24oZHVyYXRpb24pKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBkb3VibGUgc29sdmVTdGVwc0Z1bmN0aW9uKGludCBudW1TdGVwcywgYm9vbCBzdGVwQXRTdGFy
dCwgZG91YmxlIHQpCi17Ci0gICAgaWYgKHN0ZXBBdFN0YXJ0KQotICAgICAgICByZXR1cm4gc3Rk
OjptaW4oMS4wLCAoZmxvb3IobnVtU3RlcHMgKiB0KSArIDEpIC8gbnVtU3RlcHMpOwotICAgIHJl
dHVybiBmbG9vcihudW1TdGVwcyAqIHQpIC8gbnVtU3RlcHM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
ZmxvYXQgYXBwbHlUaW1pbmdGdW5jdGlvbihjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVu
Y3Rpb24sIGZsb2F0IHByb2dyZXNzLCBkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgaWYgKCF0aW1p
bmdGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIHByb2dyZXNzOwotCi0gICAgaWYgKHRpbWluZ0Z1
bmN0aW9uLT5pc0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24oKSkgewotICAgICAgICBjb25zdCBD
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBjdGYgPSBzdGF0aWNfY2FzdDxjb25zdCBDdWJpY0Jl
emllclRpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24pOwotICAgICAgICByZXR1cm4gc29s
dmVDdWJpY0JlemllckZ1bmN0aW9uKGN0Zi0+eDEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjdGYtPnkxKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3RmLT54MigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGN0Zi0+eTIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9ncmVzcywgZHVyYXRpb24pOwotICAgIH0KLQotICAgIGlmICh0aW1pbmdGdW5jdGlvbi0+
aXNTdGVwc1RpbWluZ0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgY29uc3QgU3RlcHNUaW1pbmdGdW5j
dGlvbiogc3RmID0gc3RhdGljX2Nhc3Q8Y29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbio+KHRpbWlu
Z0Z1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIHNvbHZlU3RlcHNGdW5jdGlvbihzdGYtPm51bWJl
ck9mU3RlcHMoKSwgc3RmLT5zdGVwQXRTdGFydCgpLCBkb3VibGUocHJvZ3Jlc3MpKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gcHJvZ3Jlc3M7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmFw
cGx5VHJhbnNmb3JtQW5pbWF0aW9uKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1h
dGlvbiwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogZnJvbSwgY29uc3QgVHJhbnNmb3JtT3Bl
cmF0aW9ucyogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5
bmNBbmltYXRpb25zKCkKIHsKLSAgICAvLyBPcHRpbWl6YXRpb246IHNwZWNpYWwgY2FzZSB0aGUg
ZWRnZSB2YWx1ZXMgKDAgYW5kIDEpLgotICAgIGlmIChwcm9ncmVzcyA9PSAxLjAgfHwgIXByb2dy
ZXNzKSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLSAgICAgICAgY29u
c3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogb3BzID0gcHJvZ3Jlc3MgPyB0byA6IGZyb207Ci0gICAg
ICAgIG9wcy0+YXBwbHkoYW5pbWF0aW9uLmJveFNpemUsIG1hdHJpeCk7Ci0gICAgICAgIHNldFRy
YW5zZm9ybShtYXRyaXgpOwotICAgIH0KLQotICAgIGlmICghYW5pbWF0aW9uLmxpc3RzTWF0Y2gp
IHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdG9NYXRyaXgsIGZyb21NYXRyaXg7Ci0g
ICAgICAgIHRvLT5hcHBseShhbmltYXRpb24uYm94U2l6ZSwgdG9NYXRyaXgpOwotICAgICAgICBm
cm9tLT5hcHBseShhbmltYXRpb24uYm94U2l6ZSwgZnJvbU1hdHJpeCk7Ci0gICAgICAgIHRvTWF0
cml4LmJsZW5kKGZyb21NYXRyaXgsIHByb2dyZXNzKTsKLSAgICAgICAgc2V0VHJhbnNmb3JtKHRv
TWF0cml4KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG1hdHJpeDsKLQotICAgIGlmICghdG8tPnNpemUoKSkgewotICAgICAgICBjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb25zKiBzd2FwID0gdG87Ci0gICAgICAgIHRvID0gZnJvbTsKLSAgICAgICAg
ZnJvbSA9IHN3YXA7Ci0gICAgfSBlbHNlIGlmICghZnJvbS0+c2l6ZSgpKQotICAgICAgICBwcm9n
cmVzcyA9IDEuMCAtIHByb2dyZXNzOwotCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZGVk
KCp0byk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRpb24uZnVuY3Rpb25MaXN0
LnNpemUoKTsgKytpKQotICAgICAgICBibGVuZGVkLm9wZXJhdGlvbnMoKVtpXS0+YmxlbmQoZnJv
bS0+YXQoaSksIHByb2dyZXNzLCAhZnJvbS0+YXQoaSkpLT5hcHBseShtYXRyaXgsIGFuaW1hdGlv
bi5ib3hTaXplKTsKLQotICAgIHNldFRyYW5zZm9ybShtYXRyaXgpOwotfQotCi12b2lkIFRleHR1
cmVNYXBwZXJOb2RlOjphcHBseUFuaW1hdGlvbkZyYW1lKGNvbnN0IFRleHR1cmVNYXBwZXJBbmlt
YXRpb24mIGFuaW1hdGlvbiwgY29uc3QgQW5pbWF0aW9uVmFsdWUqIGZyb20sIGNvbnN0IEFuaW1h
dGlvblZhbHVlKiB0bywgZmxvYXQgcHJvZ3Jlc3MpCi17Ci0gICAgc3dpdGNoIChhbmltYXRpb24u
a2V5ZnJhbWVzLnByb3BlcnR5KCkpIHsKLSAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5
OgotICAgICAgICBhcHBseU9wYWNpdHlBbmltYXRpb24oKHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0
QW5pbWF0aW9uVmFsdWUqPihmcm9tKS0+dmFsdWUoKSksIChzdGF0aWNfY2FzdDxjb25zdCBGbG9h
dEFuaW1hdGlvblZhbHVlKj4odG8pLT52YWx1ZSgpKSwgcHJvZ3Jlc3MpOwotICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtOgotICAgICAgICBh
cHBseVRyYW5zZm9ybUFuaW1hdGlvbihhbmltYXRpb24sIHN0YXRpY19jYXN0PGNvbnN0IFRyYW5z
Zm9ybUFuaW1hdGlvblZhbHVlKj4oZnJvbSktPnZhbHVlKCksIHN0YXRpY19jYXN0PGNvbnN0IFRy
YW5zZm9ybUFuaW1hdGlvblZhbHVlKj4odG8pLT52YWx1ZSgpLCBwcm9ncmVzcyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmFwcGx5QW5pbWF0aW9uKGNvbnN0IFRl
eHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiwgZG91YmxlIG5vcm1hbGl6ZWRWYWx1ZSkK
LXsKLSAgICAvLyBPcHRpbWl6YXRpb246IHNwZWNpYWwgY2FzZSB0aGUgZWRnZSB2YWx1ZXMgKDAg
YW5kIDEpLgotICAgIGlmICghbm9ybWFsaXplZFZhbHVlKSB7Ci0gICAgICAgIGFwcGx5QW5pbWF0
aW9uRnJhbWUoYW5pbWF0aW9uLCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KDApLCBhbmltYXRpb24u
a2V5ZnJhbWVzLmF0KDEpLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAobm9y
bWFsaXplZFZhbHVlID09IDEuMCkgewotICAgICAgICBhcHBseUFuaW1hdGlvbkZyYW1lKGFuaW1h
dGlvbiwgYW5pbWF0aW9uLmtleWZyYW1lcy5hdChhbmltYXRpb24ua2V5ZnJhbWVzLnNpemUoKSAt
IDIpLCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KGFuaW1hdGlvbi5rZXlmcmFtZXMuc2l6ZSgpIC0g
MSksIDEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChhbmltYXRpb24ua2V5ZnJh
bWVzLnNpemUoKSA9PSAyKSB7Ci0gICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IGFwcGx5VGltaW5n
RnVuY3Rpb24oYW5pbWF0aW9uLmFuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS5nZXQoKSwgbm9y
bWFsaXplZFZhbHVlLCBhbmltYXRpb24uYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKLSAgICAgICAg
YXBwbHlBbmltYXRpb25GcmFtZShhbmltYXRpb24sIGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoMCks
IGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoMSksIG5vcm1hbGl6ZWRWYWx1ZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1hdGlvbi5rZXlm
cmFtZXMuc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEFuaW1hdGlvblZhbHVlKiBm
cm9tID0gYW5pbWF0aW9uLmtleWZyYW1lcy5hdChpKTsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9u
VmFsdWUqIHRvID0gYW5pbWF0aW9uLmtleWZyYW1lcy5hdChpICsgMSk7Ci0gICAgICAgIGlmIChm
cm9tLT5rZXlUaW1lKCkgPiBub3JtYWxpemVkVmFsdWUgfHwgdG8tPmtleVRpbWUoKSA8IG5vcm1h
bGl6ZWRWYWx1ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIG5vcm1hbGl6ZWRW
YWx1ZSA9IChub3JtYWxpemVkVmFsdWUgLSBmcm9tLT5rZXlUaW1lKCkpIC8gKHRvLT5rZXlUaW1l
KCkgLSBmcm9tLT5rZXlUaW1lKCkpOwotICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBhcHBseVRp
bWluZ0Z1bmN0aW9uKGZyb20tPnRpbWluZ0Z1bmN0aW9uKCksIG5vcm1hbGl6ZWRWYWx1ZSwgYW5p
bWF0aW9uLmFuaW1hdGlvbi0+ZHVyYXRpb24oKSk7Ci0gICAgICAgIGFwcGx5QW5pbWF0aW9uRnJh
bWUoYW5pbWF0aW9uLCBmcm9tLCB0bywgbm9ybWFsaXplZFZhbHVlKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotfQotCi1ib29sIFRleHR1cmVNYXBwZXJOb2RlOjpoYXNPcGFjaXR5QW5pbWF0aW9u
KCkgY29uc3QKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXpl
KCk7ICsraSkgewotICAgICAgICBjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRp
b24gPSAqbV9hbmltYXRpb25zW2ldLmdldCgpOwotICAgICAgICBpZiAoYW5pbWF0aW9uLmtleWZy
YW1lcy5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUZXh0dXJl
TWFwcGVyTm9kZTo6aGFzVHJhbnNmb3JtQW5pbWF0aW9uKCkgY29uc3QKLXsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25z
dCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24gPSAqbV9hbmltYXRpb25zW2ldLmdl
dCgpOwotICAgICAgICBpZiAoYW5pbWF0aW9uLmtleWZyYW1lcy5wcm9wZXJ0eSgpID09IEFuaW1h
dGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5j
QW5pbWF0aW9ucyhHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogbGF5ZXIpCi17Ci0gICAgZm9y
IChpbnQgaSA9IG1fYW5pbWF0aW9ucy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAg
ICBSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gYW5pbWF0aW9uID0gbV9hbmltYXRpb25z
W2ldOwotCi0gICAgICAgIGRvdWJsZSB0b3RhbFJ1bm5pbmdUaW1lID0gV1RGOjpjdXJyZW50VGlt
ZSgpIC0gYW5pbWF0aW9uLT5zdGFydFRpbWU7Ci0gICAgICAgIFJlZlB0cjxBbmltYXRpb24+IGFu
aW0gPSBhbmltYXRpb24tPmFuaW1hdGlvbjsKLSAgICAgICAgZG91YmxlIG5vcm1hbGl6ZWRWYWx1
ZSA9IG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZSh0b3RhbFJ1bm5pbmdUaW1lLCBhbmltLT5kdXJh
dGlvbigpLCBhbmltLT5kaXJlY3Rpb24oKSk7Ci0KLSAgICAgICAgaWYgKGFuaW0tPml0ZXJhdGlv
bkNvdW50KCkgIT0gQW5pbWF0aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRlICYmIHRvdGFsUnVu
bmluZ1RpbWUgPj0gYW5pbS0+ZHVyYXRpb24oKSAqIGFuaW0tPml0ZXJhdGlvbkNvdW50KCkpIHsK
LSAgICAgICAgICAgIC8vIFdlIGFwcGx5IGFuIGFuaW1hdGlvbiB0aGF0IHZlcnkgY2xvc2UgdG8g
dGhlIGVkZ2UsIHNvIHRoYXQgdGhlIGZpbmFsIGZyYW1lIGlzIGFwcGxpZWQsIG90ZXJ3aXNlIHdl
IG1pZ2h0IGdldCwgZm9yIGV4YW1wbGUsIGFuIG9wYWNpdHkgb2YgMC4wMSB3aGljaCBpcyBzdGls
bCB2aXNpYmxlLgotICAgICAgICAgICAgaWYgKGFuaW0tPmZpbGxzRm9yd2FyZHMoKSkgewotICAg
ICAgICAgICAgICAgIGlmIChhbmltYXRpb24tPmtleWZyYW1lcy5wcm9wZXJ0eSgpID09IEFuaW1h
dGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCi0gICAgICAgICAgICAgICAgICAgIHNldFRyYW5z
Zm9ybShtX3N0YXRlLnRyYW5zZm9ybSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoYW5pbWF0
aW9uLT5rZXlmcmFtZXMucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkKLSAg
ICAgICAgICAgICAgICAgICAgc2V0T3BhY2l0eShtX3N0YXRlLm9wYWNpdHkpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBtX2FuaW1hdGlvbnMucmVtb3ZlKGkpOwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWFuaW1hdGlvbi0+cGF1c2VkKQot
ICAgICAgICAgICAgYXBwbHlBbmltYXRpb24oKmFuaW1hdGlvbi5nZXQoKSwgbm9ybWFsaXplZFZh
bHVlKTsKLSAgICB9CisgICAgbV9hbmltYXRpb25zLmFwcGx5KHRoaXMpOworICAgIGlmICghbV9h
bmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybSkpCisgICAgICAgIHNldFRyYW5zZm9ybShtX3N0YXRlLnRyYW5zZm9ybSk7Cisg
ICAgaWYgKCFtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFBy
b3BlcnR5T3BhY2l0eSkpCisgICAgICAgIHNldE9wYWNpdHkobV9zdGF0ZS5vcGFjaXR5KTsKIH0K
IAogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0FuaW1hdGlvbnNSZWN1cnNpdmVseSgpCiB7
Ci0gICAgc3luY0FuaW1hdGlvbnMoMCk7CisgICAgc3luY0FuaW1hdGlvbnMoKTsKIAogICAgIGZv
ciAoaW50IGkgPSBtX2NoaWxkcmVuLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKQogICAgICAgICBt
X2NoaWxkcmVuW2ldLT5zeW5jQW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCk7CkBAIC04NTUsOCArNjY2
LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWMKICAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5
ZXIpCiAgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSh0
b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGdyYXBoaWNzTGF5ZXItPnJlcGxpY2FMYXllcigp
KSwgdGV4dHVyZU1hcHBlcik7CiAKLSAgICBzeW5jQW5pbWF0aW9ucyhncmFwaGljc0xheWVyKTsK
LQorICAgIHN5bmNBbmltYXRpb25zKCk7CiAgICAgY29tcHV0ZVRpbGVzKCk7CiAKICAgICBpZiAo
Z3JhcGhpY3NMYXllcikKQEAgLTg3OSwxMSArNjg5LDUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBo
aWMKICAgICB9CiB9CiAKLVRleHR1cmVNYXBwZXJBbmltYXRpb246OlRleHR1cmVNYXBwZXJBbmlt
YXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcykKLSAgICA6IGtleWZyYW1lcyh2
YWx1ZXMpCi17CiB9Ci0KLX0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCmluZGV4IGU2
NDY3MmIuLjI3YmZmMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCkBAIC0yNywxMCArMjcsOSBA
QAogI2luY2x1ZGUgIkludFBvaW50SGFzaC5oIgogI2luY2x1ZGUgIkxheWVyVHJhbnNmb3JtLmgi
CiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJBbmlt
YXRpb24uaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlv
bnMuaCIKLSNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRl
ICJVbml0QmV6aWVyLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNTcsMjIgKzU2
LDcgQEAgcHVibGljOgogICAgIHsgfQogfTsKIAotY2xhc3MgVGV4dHVyZU1hcHBlckFuaW1hdGlv
biA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJBbmltYXRpb24+IHsKLXB1YmxpYzoK
LSAgICBTdHJpbmcgbmFtZTsKLSAgICBLZXlmcmFtZVZhbHVlTGlzdCBrZXlmcmFtZXM7Ci0gICAg
SW50U2l6ZSBib3hTaXplOwotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbjsKLSAgICBi
b29sIHBhdXNlZDsKLSAgICBWZWN0b3I8VHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBl
PiBmdW5jdGlvbkxpc3Q7Ci0gICAgYm9vbCBsaXN0c01hdGNoOwotICAgIGJvb2wgaGFzQmlnUm90
YXRpb247Ci0gICAgZG91YmxlIHN0YXJ0VGltZTsKLSAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
KGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0Jik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVy
ZU1hcHBlckFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKHZhbHVlcykpOyB9
Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyTm9kZSB7CitjbGFzcyBUZXh0dXJlTWFwcGVyTm9k
ZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50IHsKIAogcHVibGljOgogICAg
IC8vIFRoaXMgc2V0IG9mIGZsYWdzIGhlbHAgdXMgZGVmZXIgd2hpY2ggcHJvcGVydGllcyBvZiB0
aGUgbGF5ZXIgaGF2ZSBiZWVuCkBAIC0xOTgsMTMgKzE4Miw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwYWludFNlbGZBbmRDaGlsZHJlbldpdGhSZXBsaWNhKGNvbnN0IFRleHR1cmVNYXBwZXJQYWlu
dE9wdGlvbnMmKTsKICAgICB2b2lkIHJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciosIEdyYXBo
aWNzTGF5ZXIqKTsKIAotICAgIHZvaWQgc3luY0FuaW1hdGlvbnMoR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIqKTsKLSAgICB2b2lkIGFwcGx5QW5pbWF0aW9uKGNvbnN0IFRleHR1cmVNYXBwZXJB
bmltYXRpb24mLCBkb3VibGUgcnVubmluZ1RpbWUpOwotICAgIHZvaWQgYXBwbHlBbmltYXRpb25G
cmFtZShjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiwgY29uc3QgQW5pbWF0aW9uVmFsdWUq
IGZyb20sIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB0bywgZmxvYXQgcHJvZ3Jlc3MpOwotICAgIHZv
aWQgYXBwbHlPcGFjaXR5QW5pbWF0aW9uKGZsb2F0IGZyb21PcGFjaXR5LCBmbG9hdCB0b09wYWNp
dHksIGRvdWJsZSk7Ci0gICAgdm9pZCBhcHBseVRyYW5zZm9ybUFuaW1hdGlvbihjb25zdCBUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uJiwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogc3RhcnQsIGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGVuZCwgZG91YmxlKTsKLSAgICBib29sIGhhc09wYWNp
dHlBbmltYXRpb24oKSBjb25zdDsKLSAgICBib29sIGhhc1RyYW5zZm9ybUFuaW1hdGlvbigpIGNv
bnN0OworICAgIHZvaWQgc3luY0FuaW1hdGlvbnMoKTsKICAgICBib29sIGlzVmlzaWJsZSgpIGNv
bnN0OwogICAgIGJvb2wgc2hvdWxkUGFpbnRUb0ludGVybWVkaWF0ZVN1cmZhY2UoKSBjb25zdDsK
IApAQCAtMzE1LDggKzI5Myw3IEBAIHByaXZhdGU6CiAKICAgICBTdGF0ZSBtX3N0YXRlOwogICAg
IFRleHR1cmVNYXBwZXIqIG1fdGV4dHVyZU1hcHBlcjsKLQotICAgIFZlY3RvcjxSZWZQdHI8VGV4
dHVyZU1hcHBlckFuaW1hdGlvbj4gPiBtX2FuaW1hdGlvbnM7CisgICAgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbnMgbV9hbmltYXRpb25zOwogfTsKIAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123508</attachid>
            <date>2012-01-22 18:55:37 -0800</date>
            <delta_ts>2012-02-10 10:20:24 -0800</delta_ts>
            <desc>Patch 1: Move animations to TextureMapperAnimations</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>35656</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3Yzg5ZmU4Li5hYWE4YjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUg
QEAKKyAyMDEyLTAxLTIxICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CisKKyAgICAgICAgW1RleG1hcF0gRGl2aWRlIFRleHR1cmVNYXBwZXJOb2RlLmNwcCB0byAz
IGZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzY2NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBT
cGxpdCB0aGUgYW5pbWF0aW9uIHBhcnQgb2YgVGV4dHVyZU1hcHBlck5vZGUgb3V0IHRvIGEgc2Vw
YXJhdGUgZmlsZSwgY2FsbGVkCisgICAgICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb24uCisgICAg
ICAgIFByb3ZpZGUgYSBjbGVhbiBpbnRlcmZhY2UgZm9yIHRoYXQgY2xhc3MsIHRoYXQgYWxsb3dz
IHNlcGFyYXRpbmcgdGhlIGludGVybmFscyBvZiB0aGUgc2NlbmUKKyAgICAgICAgcGFpbnRpbmcg
ZnJvbSB0aGUgaW50ZXJuYWxzIG9mIHRoZSBhbmltYXRpb24gaW50ZXJwb2xhdGlvbi4KKworICAg
ICAgICBObyBuZXcgdGVzdHMuIEV4aXN0aW5nIGFuaW1hdGlvbiB0ZXN0cyBjb3ZlciB0aGlzLgor
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkZWQgbmV3IFRleHR1cmVNYXBwZXIt
cmVsYXRlZCBmaWxlcy4KKyAgICAgICAgKiBUYXJnZXQucHJpOiBBZGRlZCBuZXcgVGV4dHVyZU1h
cHBlci1yZWxhdGVkIGZpbGVzLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQgbmV3IFRl
eHR1cmVNYXBwZXItcmVsYXRlZCBmaWxlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZEFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGF1c2VBbmltYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnJlbW92ZUFuaW1hdGlvbik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJBbmltYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0Fu
aW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNBbmlt
YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQW5pbWF0
aW9uc1JlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpz
eW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmg6CisKIDIwMTItMDEtMjEgIERhdmlkIFJldmVtYW4gIDxyZXZl
bWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIEluY3JlbWVudGFsIHRleHR1
cmUgdXBkYXRlcyBhcmUgbm90IGF0b21pYy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmlu
ZGV4IDIxMzAxYzcuLmIxMzRhY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAt
NTY5Nyw2ICs1Njk3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlv
bi5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyQW5pbWF0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaApAQCAtNTcx
NSw2ICs1NzE3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyQW5pbWF0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
aW5kZXggMWNhMDllNi4uYTM4MjY5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zOTMzLDYgKzM5MzMsNyBA
QCBjb250YWlucyhDT05GSUcsIHRleG1hcCkgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCiAKQEAgLTM5NDAsNiArMzk0MSw3
IEBAIGNvbnRhaW5zKENPTkZJRywgdGV4bWFwKSB7CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L1RleHR1cmVNYXBwZXJRdC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvTGF5ZXJUcmFuc2Zvcm0uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXIuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IDJmMTA5MzcuLjVkNjdhY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM5NjgsNiArMzk2OCw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJB
bmltYXRpb24uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckFuaW1hdGlvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggN2VmOTgxOC4uZjQ3OGI5ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCkBAIC0zNjUsNTkg
KzM2NSwyNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24o
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdAogICAgIGlmICghYW5pbSB8fCBhbmlt
LT5pc0VtcHR5T3JaZXJvRHVyYXRpb24oKSB8fCB2YWx1ZUxpc3Quc2l6ZSgpIDwgMiB8fCAodmFs
dWVMaXN0LnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSAmJiB2
YWx1ZUxpc3QucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRpb25z
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIC8vIFRoZSBzYW1lIGFuaW1hdGlvbiBuYW1lIGNhbiBi
ZSB1c2VkIGZvciB0d28gYW5pbWF0aW9ucyB3aXRoIGRpZmZlcmVudCBwcm9wZXJ0aWVzLgotICAg
ICAgICBpZiAobV9hbmltYXRpb25zW2ldLT5uYW1lICE9IGtleWZyYW1lc05hbWUgfHwgbV9hbmlt
YXRpb25zW2ldLT5rZXlmcmFtZXMucHJvcGVydHkoKSAhPSB2YWx1ZUxpc3QucHJvcGVydHkoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIGNv
cHkgb2YgdGhpcyBhbmltYXRpb24sIHRoYXQgbWVhbnMgdGhhdCB3ZSdyZSByZXN1bWluZyBpdCBy
YXRoZXIgdGhhbiBhZGRpbmcgaXQuCi0gICAgICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uPiYgYW5pbWF0aW9uID0gbV9hbmltYXRpb25zW2ldOwotICAgICAgICBhbmltYXRpb24tPmFu
aW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKGFuaW0pOwotICAgICAgICBhbmltYXRpb24tPnBh
dXNlZCA9IGZhbHNlOwotICAgICAgICBhbmltYXRpb24tPnN0YXJ0VGltZSA9IFdURjo6Y3VycmVu
dFRpbWUoKSAtIHRpbWVPZmZzZXQ7Ci0gICAgICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
Tm9kZTo6QW5pbWF0aW9uQ2hhbmdlKTsKLSAgICAgICAgbV9hbmltYXRpb25TdGFydGVkVGltZXIu
c3RhcnRPbmVTaG90KDApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgYm9vbCBs
aXN0c01hdGNoOworICAgIGJvb2wgaGFzQmlnUm90YXRpb247CisgICAgVmVjdG9yPFRyYW5zZm9y
bU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZT4gZnVuY3Rpb25MaXN0OwogCi0gICAgUmVmUHRyPFRl
eHR1cmVNYXBwZXJBbmltYXRpb24+IGFuaW1hdGlvbiA9IFRleHR1cmVNYXBwZXJBbmltYXRpb246
OmNyZWF0ZSh2YWx1ZUxpc3QpOwotICAgIGFuaW1hdGlvbi0+Ym94U2l6ZSA9IGJveFNpemU7Ci0g
ICAgYW5pbWF0aW9uLT5uYW1lID0ga2V5ZnJhbWVzTmFtZTsKLSAgICBhbmltYXRpb24tPmFuaW1h
dGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKGFuaW0pOwotICAgIGFuaW1hdGlvbi0+cGF1c2VkID0g
ZmFsc2U7Ci0gICAgYW5pbWF0aW9uLT5zdGFydFRpbWUgPSBXVEY6OmN1cnJlbnRUaW1lKCkgLSB0
aW1lT2Zmc2V0OwotCi0gICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm0pIHsKLSAgICAgICAgYm9vbCBoYXNCaWdSb3RhdGlvbjsgLy8g
Tm90IHVzZWQsIGJ1dCByZXF1aXJlZCBhcyBhIHBvaW50ZXIgcGFyYW1ldGVyIGZvciB0aGUgZnVu
Y3Rpb24uCi0gICAgICAgIGZldGNoVHJhbnNmb3JtT3BlcmF0aW9uTGlzdCh2YWx1ZUxpc3QsIGFu
aW1hdGlvbi0+ZnVuY3Rpb25MaXN0LCBhbmltYXRpb24tPmxpc3RzTWF0Y2gsIGhhc0JpZ1JvdGF0
aW9uKTsKLSAgICB9CisgICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm0pCisgICAgICAgIGZldGNoVHJhbnNmb3JtT3BlcmF0aW9uTGlz
dCh2YWx1ZUxpc3QsIGZ1bmN0aW9uTGlzdCwgbGlzdHNNYXRjaCwgaGFzQmlnUm90YXRpb24pOwog
Ci0gICAgbV9hbmltYXRpb25zLmFwcGVuZChhbmltYXRpb24pOworICAgIG1fYW5pbWF0aW9ucy5h
ZGQoa2V5ZnJhbWVzTmFtZSwgVGV4dHVyZU1hcHBlckFuaW1hdGlvbih2YWx1ZUxpc3QsIGJveFNp
emUsIGFuaW0sIHRpbWVPZmZzZXQsIGZ1bmN0aW9uTGlzdCwgbGlzdHNNYXRjaCkpOwogICAgIG5v
dGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QW5pbWF0aW9uQ2hhbmdlKTsKICAgICBtX2Fu
aW1hdGlvblN0YXJ0ZWRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGF1c2VBbmltYXRpb24oY29u
c3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkKIHsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBp
ZiAobV9hbmltYXRpb25zW2ldLT5uYW1lICE9IGFuaW1hdGlvbk5hbWUpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgbV9hbmltYXRpb25zW2ldLT5wYXVzZWQgPSB0cnVlOwotICAgICAg
ICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkFuaW1hdGlvbkNoYW5nZSk7Ci0gICAg
fQorICAgIG1fYW5pbWF0aW9ucy5wYXVzZShhbmltYXRpb25OYW1lLCB0aW1lT2Zmc2V0KTsKIH0K
IAogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKIHsKLSAgICBmb3IgKGludCBpID0gbV9hbmltYXRpb25z
LnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIC8vIFRoZSBzYW1lIGFuaW1hdGlv
biBuYW1lIGNhbiBiZSB1c2VkIGZvciB0d28gYW5pbWF0aW9ucyB3aXRoIGRpZmZlcmVudCBwcm9w
ZXJ0aWVzLiBXZSBzaG91bGQgcmVtb3ZlIGJvdGguCi0gICAgICAgIGlmIChtX2FuaW1hdGlvbnNb
aV0tPm5hbWUgIT0gYW5pbWF0aW9uTmFtZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBtX2FuaW1hdGlvbnMucmVtb3ZlKGkpOwotICAgICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlck5vZGU6OkFuaW1hdGlvbkNoYW5nZSk7Ci0gICAgfQorICAgIG1fYW5pbWF0aW9ucy5yZW1v
dmUoYW5pbWF0aW9uTmFtZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OmFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyPiopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCmluZGV4IGViYjli
NTMuLjE3MmZkZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCkBA
IC05NSw3ICs5NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3N5bmNRdWV1ZWQ7CiAgICAgaW50
IG1fY2hhbmdlTWFzazsKICAgICBUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudERhdGEgbV9wZW5k
aW5nQ29udGVudDsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHR1cmVNYXBwZXJBbmltYXRpb24+ID4g
bV9hbmltYXRpb25zOworICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIG1fYW5pbWF0aW9uczsK
ICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyPiopOwogICAgIFRpbWVyPEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPiBt
X2FuaW1hdGlvblN0YXJ0ZWRUaW1lcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlv
bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIwODNhNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDI1NSBAQAorLyoKKyBDb3B5cmlnaHQg
KEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisK
KyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgiCisKKyNpbmNsdWRlICJDdXJyZW50VGltZS5oIgorI2lu
Y2x1ZGUgIlVuaXRCZXppZXIuaCIKKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGRvdWJsZSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUoZG91
YmxlIHJ1bm5pbmdUaW1lLCBkb3VibGUgZHVyYXRpb24sIGJvb2wgYWx0ZXJuYXRlKQoreworICAg
IGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgaW50IGxvb3BD
b3VudCA9IHJ1bm5pbmdUaW1lIC8gZHVyYXRpb247CisgICAgY29uc3QgZG91YmxlIGxhc3RGdWxs
TG9vcCA9IGR1cmF0aW9uICogZG91YmxlKGxvb3BDb3VudCk7CisgICAgY29uc3QgZG91YmxlIHJl
bWFpbmRlciA9IHJ1bm5pbmdUaW1lIC0gbGFzdEZ1bGxMb29wOworICAgIGNvbnN0IGRvdWJsZSBu
b3JtYWxpemVkID0gcmVtYWluZGVyIC8gZHVyYXRpb247CisgICAgcmV0dXJuIChsb29wQ291bnQg
JSAyICYmIGFsdGVybmF0ZSkgPyAoMSAtIG5vcm1hbGl6ZWQpIDogbm9ybWFsaXplZDsKK30KKwor
c3RhdGljIGZsb2F0IGFwcGx5T3BhY2l0eUFuaW1hdGlvbihmbG9hdCBmcm9tT3BhY2l0eSwgZmxv
YXQgdG9PcGFjaXR5LCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgLy8gT3B0aW1pemF0aW9uOiBz
cGVjaWFsIGNhc2UgdGhlIGVkZ2UgdmFsdWVzICgwIGFuZCAxKS4KKyAgICBpZiAocHJvZ3Jlc3Mg
PT0gMS4wKQorICAgICAgICByZXR1cm4gdG9PcGFjaXR5OworCisgICAgaWYgKCFwcm9ncmVzcykK
KyAgICAgICAgcmV0dXJuIGZyb21PcGFjaXR5OworCisgICAgcmV0dXJuIGZyb21PcGFjaXR5ICsg
cHJvZ3Jlc3MgKiAodG9PcGFjaXR5IC0gZnJvbU9wYWNpdHkpOworfQorCitzdGF0aWMgaW5saW5l
IGRvdWJsZSBzb2x2ZUVwc2lsb24oZG91YmxlIGR1cmF0aW9uKQoreworICAgIHJldHVybiAxLjAg
LyAoMjAwLjAgKiBkdXJhdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlQ3Vi
aWNCZXppZXJGdW5jdGlvbihkb3VibGUgcDF4LCBkb3VibGUgcDF5LCBkb3VibGUgcDJ4LCBkb3Vi
bGUgcDJ5LCBkb3VibGUgdCwgZG91YmxlIGR1cmF0aW9uKQoreworICAgIHJldHVybiBVbml0QmV6
aWVyKHAxeCwgcDF5LCBwMngsIHAyeSkuc29sdmUodCwgc29sdmVFcHNpbG9uKGR1cmF0aW9uKSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlU3RlcHNGdW5jdGlvbihpbnQgbnVtU3Rl
cHMsIGJvb2wgc3RlcEF0U3RhcnQsIGRvdWJsZSB0KQoreworICAgIGlmIChzdGVwQXRTdGFydCkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bWluKDEuMCwgKGZsb29yKG51bVN0ZXBzICogdCkgKyAxKSAv
IG51bVN0ZXBzKTsKKyAgICByZXR1cm4gZmxvb3IobnVtU3RlcHMgKiB0KSAvIG51bVN0ZXBzOwor
fQorCitzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5VGltaW5nRnVuY3Rpb24oY29uc3QgVGltaW5n
RnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uLCBmbG9hdCBwcm9ncmVzcywgZG91YmxlIGR1cmF0aW9u
KQoreworICAgIGlmICghdGltaW5nRnVuY3Rpb24pCisgICAgICAgIHJldHVybiBwcm9ncmVzczsK
KworICAgIGlmICh0aW1pbmdGdW5jdGlvbi0+aXNDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKCkp
IHsKKyAgICAgICAgY29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiogY3RmID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsK
KyAgICAgICAgcmV0dXJuIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihjdGYtPngxKCksIGN0Zi0+
eTEoKSwgY3RmLT54MigpLCBjdGYtPnkyKCksIHByb2dyZXNzLCBkdXJhdGlvbik7CisgICAgfQor
CisgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc1N0ZXBzVGltaW5nRnVuY3Rpb24oKSkgeworICAg
ICAgICBjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKiBzdGYgPSBzdGF0aWNfY2FzdDxjb25zdCBT
dGVwc1RpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24pOworICAgICAgICByZXR1cm4gc29s
dmVTdGVwc0Z1bmN0aW9uKHN0Zi0+bnVtYmVyT2ZTdGVwcygpLCBzdGYtPnN0ZXBBdFN0YXJ0KCks
IGRvdWJsZShwcm9ncmVzcykpOworICAgIH0KKworICAgIHJldHVybiBwcm9ncmVzczsKK30KKwor
c3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHRv
LCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IFZlY3RvcjxU
cmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGU+IGZ1bmN0aW9uTGlzdCwgYm9vbCBsaXN0
c01hdGNoKQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKworICAgIC8vIEZp
cnN0IGZyYW1lIG9mIGFuIGFuaW1hdGlvbi4KKyAgICBpZiAoIXByb2dyZXNzKSB7CisgICAgICAg
IGZyb20tPmFwcGx5KGJveFNpemUsIG1hdHJpeCk7CisgICAgICAgIHJldHVybiBtYXRyaXg7Cisg
ICAgfQorCisgICAgLy8gTGFzdCBmcmFtZSBvZiBhbiBhbmltYXRpb24uCisgICAgaWYgKHByb2dy
ZXNzID09IDEpIHsKKyAgICAgICAgdG8tPmFwcGx5KGJveFNpemUsIG1hdHJpeCk7CisgICAgICAg
IHJldHVybiBtYXRyaXg7CisgICAgfQorCisgICAgLy8gSWYgd2UgaGF2ZSBpbmNvbXBhdGlibGUg
b3BlcmF0aW9uIGxpc3RzLCB3ZSBibGVuZCB0aGUgcmVzdWx0aW5nIG1hdHJpY2VzLgorICAgIGlm
ICghbGlzdHNNYXRjaCkgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9tTWF0cml4
OworICAgICAgICB0by0+YXBwbHkoYm94U2l6ZSwgbWF0cml4KTsKKyAgICAgICAgZnJvbS0+YXBw
bHkoYm94U2l6ZSwgZnJvbU1hdHJpeCk7CisgICAgICAgIG1hdHJpeC5ibGVuZChmcm9tTWF0cml4
LCBwcm9ncmVzcyk7CisgICAgICAgIHJldHVybiBtYXRyaXg7CisgICAgfQorCisgICAgLy8gQW5p
bWF0aW9uIHRvICItd2Via2l0LXRyYW5zZm9ybTogbm9uZSIuCisgICAgaWYgKCF0by0+c2l6ZSgp
KSB7CisgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRlZCgqdG8pOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uTGlzdC5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIGJsZW5kZWQub3BlcmF0aW9ucygpW2ldLT5ibGVuZCgwLCBwcm9ncmVzcywgdHJ1ZSktPmFw
cGx5KG1hdHJpeCwgYm94U2l6ZSk7CisgICAgICAgIHJldHVybiBtYXRyaXg7CisgICAgfQorCisg
ICAgLy8gQW5pbWF0aW9uIGZyb20gIi13ZWJraXQtdHJhbnNmb3JtOiBub25lIi4KKyAgICBpZiAo
IWZyb20tPnNpemUoKSkgeworICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kZWQoKmZy
b20pOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uTGlzdC5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgIGJsZW5kZWQub3BlcmF0aW9ucygpW2ldLT5ibGVuZCgwLCAxLiAt
IHByb2dyZXNzLCB0cnVlKS0+YXBwbHkobWF0cml4LCBib3hTaXplKTsKKyAgICAgICAgcmV0dXJu
IG1hdHJpeDsKKyAgICB9CisKKyAgICAvLyBOb3JtYWwgYW5pbWF0aW9uIHdpdGggYSBtYXRjaGlu
ZyBvcGVyYXRpb24gbGlzdC4KKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kZWQoKnRvKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uTGlzdC5zaXplKCk7ICsraSkKKyAg
ICAgICAgYmxlbmRlZC5vcGVyYXRpb25zKClbaV0tPmJsZW5kKGZyb20tPmF0KGkpLCBwcm9ncmVz
cywgIWZyb20tPmF0KGkpKS0+YXBwbHkobWF0cml4LCBib3hTaXplKTsKKyAgICByZXR1cm4gbWF0
cml4OworfQorCisKK1RleHR1cmVNYXBwZXJBbmltYXRpb246OlRleHR1cmVNYXBwZXJBbmltYXRp
b24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcywgY29uc3QgSW50U2l6ZSYgYm94
U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25z
dCBWZWN0b3I8VHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlPiYgZnVuY3Rpb25MaXN0
LCBib29sIGxpc3RzTWF0Y2gpCisgICAgOiBtX2tleWZyYW1lcyhrZXlmcmFtZXMpCisgICAgLCBt
X2JveFNpemUoYm94U2l6ZSkKKyAgICAsIG1fYW5pbWF0aW9uKEFuaW1hdGlvbjo6Y3JlYXRlKGFu
aW1hdGlvbikpCisgICAgLCBtX2Z1bmN0aW9uTGlzdChmdW5jdGlvbkxpc3QpCisgICAgLCBtX2xp
c3RzTWF0Y2gobGlzdHNNYXRjaCkKKyAgICAsIG1fc3RhcnRUaW1lKFdURjo6Y3VycmVudFRpbWUo
KSAtIHRpbWVPZmZzZXQpCisgICAgLCBtX3BhdXNlVGltZSgwKQorICAgICwgbV9zdGF0ZShQbGF5
aW5nU3RhdGUpCit7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6YXBwbHlJbnRl
cm5hbChUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50KiBjbGllbnQsIGNvbnN0IEFuaW1hdGlv
blZhbHVlKiBmcm9tLCBjb25zdCBBbmltYXRpb25WYWx1ZSogdG8sIGZsb2F0IHByb2dyZXNzKQor
eworICAgIHN3aXRjaCAobV9rZXlmcmFtZXMucHJvcGVydHkoKSkgeworICAgIGNhc2UgQW5pbWF0
ZWRQcm9wZXJ0eU9wYWNpdHk6CisgICAgICAgIGNsaWVudC0+c2V0T3BhY2l0eShhcHBseU9wYWNp
dHlBbmltYXRpb24oKHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUqPihmcm9t
KS0+dmFsdWUoKSksIChzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVlKj4odG8p
LT52YWx1ZSgpKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQW5pbWF0
ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybToKKyAgICAgICAgY2xpZW50LT5zZXRUcmFuc2Zvcm0o
YXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0
aW9uVmFsdWUqPihmcm9tKS0+dmFsdWUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5p
bWF0aW9uVmFsdWUqPih0byktPnZhbHVlKCksIHByb2dyZXNzLCBtX2JveFNpemUsIG1fZnVuY3Rp
b25MaXN0LCBtX2xpc3RzTWF0Y2gpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworYm9vbCBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgaWYgKHN0YXRlKCkgIT0gU3Rv
cHBlZFN0YXRlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBtX2FuaW1hdGlv
bi0+ZmlsbHNGb3J3YXJkcygpOworfQorCitib29sIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpo
YXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlJRCB0eXBlKSBjb25zdAor
eworICAgIEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPjo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxTdHJpbmcs
IFRleHR1cmVNYXBwZXJBbmltYXRpb24+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9u
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgY29uc3QgVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbiYgYW5pbWF0aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKGFuaW1hdGlv
bi5pc0FjdGl2ZSgpICYmIGFuaW1hdGlvbi5wcm9wZXJ0eSgpID09IHR5cGUpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRleHR1
cmVNYXBwZXJBbmltYXRpb25zOjpoYXNSdW5uaW5nQW5pbWF0aW9ucygpIGNvbnN0Cit7CisgICAg
SGFzaE1hcDxTdHJpbmcsIFRleHR1cmVNYXBwZXJBbmltYXRpb24+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPFN0cmluZywgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uJiBhbmltYXRpb24gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAoYW5pbWF0aW9uLnN0YXRl
KCkgPT0gVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6UGxheWluZ1N0YXRlKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFRleHR1
cmVNYXBwZXJBbmltYXRpb246OmFwcGx5KFRleHR1cmVNYXBwZXJBbmltYXRpb25DbGllbnQqIGNs
aWVudCkKK3sKKyAgICBpZiAoc3RhdGUoKSA9PSBTdG9wcGVkU3RhdGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGRvdWJsZSB0b3RhbFJ1bm5pbmdUaW1lID0gbV9zdGF0ZSA9PSBQYXVzZWRTdGF0
ZSA/IG1fcGF1c2VUaW1lIDogV1RGOjpjdXJyZW50VGltZSgpIC0gbV9zdGFydFRpbWU7CisgICAg
ZG91YmxlIG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZSh0b3RhbFJ1
bm5pbmdUaW1lLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSwgbV9hbmltYXRpb24tPmRpcmVjdGlv
bigpKTsKKworICAgIGlmIChtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmltYXRp
b246Okl0ZXJhdGlvbkNvdW50SW5maW5pdGUgJiYgdG90YWxSdW5uaW5nVGltZSA+PSBtX2FuaW1h
dGlvbi0+ZHVyYXRpb24oKSAqIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpKQorICAgICAg
ICBzZXRTdGF0ZShTdG9wcGVkU3RhdGUpOworCisgICAgaWYgKCFub3JtYWxpemVkVmFsdWUpIHsK
KyAgICAgICAgYXBwbHlJbnRlcm5hbChjbGllbnQsIG1fa2V5ZnJhbWVzLmF0KDApLCBtX2tleWZy
YW1lcy5hdCgxKSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG5vcm1hbGl6
ZWRWYWx1ZSA9PSAxLjApIHsKKyAgICAgICAgYXBwbHlJbnRlcm5hbChjbGllbnQsIG1fa2V5ZnJh
bWVzLmF0KG1fa2V5ZnJhbWVzLnNpemUoKSAtIDIpLCBtX2tleWZyYW1lcy5hdChtX2tleWZyYW1l
cy5zaXplKCkgLSAxKSwgMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fa2V5
ZnJhbWVzLnNpemUoKSA9PSAyKSB7CisgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IGFwcGx5VGlt
aW5nRnVuY3Rpb24obV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCksIG5vcm1hbGl6
ZWRWYWx1ZSwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpOworICAgICAgICBhcHBseUludGVybmFs
KGNsaWVudCwgbV9rZXlmcmFtZXMuYXQoMCksIG1fa2V5ZnJhbWVzLmF0KDEpLCBub3JtYWxpemVk
VmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2tleWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgY29uc3QgQW5pbWF0
aW9uVmFsdWUqIGZyb20gPSBtX2tleWZyYW1lcy5hdChpKTsKKyAgICAgICAgY29uc3QgQW5pbWF0
aW9uVmFsdWUqIHRvID0gbV9rZXlmcmFtZXMuYXQoaSArIDEpOworICAgICAgICBpZiAoZnJvbS0+
a2V5VGltZSgpID4gbm9ybWFsaXplZFZhbHVlIHx8IHRvLT5rZXlUaW1lKCkgPCBub3JtYWxpemVk
VmFsdWUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBub3JtYWxpemVkVmFsdWUg
PSAobm9ybWFsaXplZFZhbHVlIC0gZnJvbS0+a2V5VGltZSgpKSAvICh0by0+a2V5VGltZSgpIC0g
ZnJvbS0+a2V5VGltZSgpKTsKKyAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gYXBwbHlUaW1pbmdG
dW5jdGlvbihmcm9tLT50aW1pbmdGdW5jdGlvbigpLCBub3JtYWxpemVkVmFsdWUsIG1fYW5pbWF0
aW9uLT5kdXJhdGlvbigpKTsKKyAgICAgICAgYXBwbHlJbnRlcm5hbChjbGllbnQsIGZyb20sIHRv
LCBub3JtYWxpemVkVmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgVGV4
dHVyZU1hcHBlckFuaW1hdGlvbjo6cGF1c2UoZG91YmxlIG9mZnNldCkKK3sKKyAgICAvLyBGSVhN
RTogc2hvdWxkIGFwcGx5IG9mZnNldCBoZXJlLgorICAgIHNldFN0YXRlKFBhdXNlZFN0YXRlKTsK
KyAgICBtX3BhdXNlVGltZSA9IFdURjo6Y3VycmVudFRpbWUoKSAtIG9mZnNldDsKK30KKwordm9p
ZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cGF1c2UoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3Vi
bGUgb2Zmc2V0KQoreworICAgIEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
Pjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuZmluZChuYW1lKTsKKyAgICBpZiAoaXQgPT0g
bV9hbmltYXRpb25zLmVuZCgpKQorICAgICAgICByZXR1cm47CisgICAgaXQtPnNlY29uZC5wYXVz
ZShvZmZzZXQpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjphcHBseShUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50KiBjbGllbnQpCit7CisgICAgSGFzaE1hcDxTdHJpbmcs
IFRleHR1cmVNYXBwZXJBbmltYXRpb24+OjppdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5k
KCk7CisgICAgZm9yIChIYXNoTWFwPFN0cmluZywgVGV4dHVyZU1hcHBlckFuaW1hdGlvbj46Oml0
ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgaXQtPnNlY29uZC5hcHBseShjbGllbnQpOworfQorCit9CisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5p
bWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVl
MjI2ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisg
Q29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFRleHR1cmVNYXBwZXJB
bmltYXRpb25faAorI2RlZmluZSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uX2gKKworI2luY2x1ZGUg
IkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJIYXNoTWFwLmgiCisjaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKKyNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVIpCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHR1
cmVNYXBwZXJBbmltYXRpb25DbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBzZXRU
cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHNldE9wYWNpdHkoZmxvYXQpID0gMDsKK307CisKK2NsYXNzIFRleHR1cmVNYXBwZXJBbmlt
YXRpb24geworcHVibGljOgorICAgIGVudW0gQW5pbWF0aW9uU3RhdGUgeyBQbGF5aW5nU3RhdGUs
IFBhdXNlZFN0YXRlLCBTdG9wcGVkU3RhdGUgfTsKKworICAgIFRleHR1cmVNYXBwZXJBbmltYXRp
b24oKQorICAgICAgICA6IG1fa2V5ZnJhbWVzKEFuaW1hdGVkUHJvcGVydHlJbnZhbGlkKQorICAg
IHsgfQorICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3Qm
LCBjb25zdCBJbnRTaXplJiwgY29uc3QgQW5pbWF0aW9uKiwgZG91YmxlLCBjb25zdCBWZWN0b3I8
VHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlPiYsIGJvb2wpOworICAgIHZvaWQgYXBw
bHkoVGV4dHVyZU1hcHBlckFuaW1hdGlvbkNsaWVudCopOworICAgIHZvaWQgcGF1c2UoZG91Ymxl
KTsKKyAgICBBbmltYXRpb25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0K
KyAgICB2b2lkIHNldFN0YXRlKEFuaW1hdGlvblN0YXRlIHMpIHsgbV9zdGF0ZSA9IHM7IH0KKyAg
ICBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1l
cy5wcm9wZXJ0eSgpOyB9CisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIHZvaWQgYXBwbHlJbnRlcm5hbChUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50KiwgY29u
c3QgQW5pbWF0aW9uVmFsdWUqIGZyb20sIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB0bywgZmxvYXQg
cHJvZ3Jlc3MpOworICAgIEtleWZyYW1lVmFsdWVMaXN0IG1fa2V5ZnJhbWVzOworICAgIEludFNp
emUgbV9ib3hTaXplOworICAgIFJlZlB0cjxBbmltYXRpb24+IG1fYW5pbWF0aW9uOworICAgIFN0
cmluZyBtX25hbWU7CisgICAgVmVjdG9yPFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlw
ZT4gbV9mdW5jdGlvbkxpc3Q7CisgICAgYm9vbCBtX2xpc3RzTWF0Y2g7CisgICAgYm9vbCBtX2hh
c0JpZ1JvdGF0aW9uOworICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKKyAgICBkb3VibGUgbV9wYXVz
ZVRpbWU7CisgICAgQW5pbWF0aW9uU3RhdGUgbV9zdGF0ZTsKK307CisKK2NsYXNzIFRleHR1cmVN
YXBwZXJBbmltYXRpb25zIHsKK3B1YmxpYzoKKyAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucygp
IHsgfQorCisgICAgdm9pZCBhZGQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgbV9hbmltYXRpb25zLmFkZChuYW1lLCBhbmltYXRp
b24pOyB9CisgICAgdm9pZCByZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKSB7IG1fYW5pbWF0aW9u
cy5yZW1vdmUobmFtZSk7IH0KKyAgICB2b2lkIHBhdXNlKGNvbnN0IFN0cmluZyYsIGRvdWJsZSk7
CisgICAgdm9pZCBhcHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50Kik7CisgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25zLmlzRW1wdHkoKTsgfQorCisg
ICAgYm9vbCBoYXNSdW5uaW5nQW5pbWF0aW9ucygpIGNvbnN0OworICAgIGJvb2wgaGFzQWN0aXZl
QW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5SUQgdHlwZSkgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgSGFzaE1hcDxTdHJpbmcsIFRleHR1cmVNYXBwZXJBbmltYXRpb24+IG1fYW5pbWF0
aW9uczsKK307CisKK30KKyNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVIpCisKKyNlbmRpZiAv
LyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCmluZGV4
IDI3NjI1MTcuLjIxN2E5NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcApAQCAtNTg1LDEx
ICs1ODUsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZVNl
bGYoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYQogICAgICAgICAgICBsYXllci0+bV9l
ZmZlY3RUYXJnZXQgPSB0aGlzOwogICAgIH0KIAotICAgIGlmIChjaGFuZ2VNYXNrICYgQW5pbWF0
aW9uQ2hhbmdlKSB7Ci0gICAgICAgIG1fYW5pbWF0aW9ucy5jbGVhcigpOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGdyYXBoaWNzTGF5ZXItPm1fYW5pbWF0aW9ucy5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgIG1fYW5pbWF0aW9ucy5hcHBlbmQoZ3JhcGhpY3NMYXllci0+bV9hbmlt
YXRpb25zW2ldKTsKLSAgICB9CisgICAgaWYgKGNoYW5nZU1hc2sgJiBBbmltYXRpb25DaGFuZ2Up
CisgICAgICAgIG1fYW5pbWF0aW9ucyA9IGdyYXBoaWNzTGF5ZXItPm1fYW5pbWF0aW9uczsKIAog
ICAgIG1fc3RhdGUubWFza0xheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVy
LT5tYXNrTGF5ZXIoKSk7CiAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXIgPSB0b1RleHR1cmVNYXBw
ZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnJlcGxpY2FMYXllcigpKTsKQEAgLTYxNCwxMSArNjExLDYg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAgICBpZiAoIW1fY3VycmVudENvbnRlbnQubmVl
ZHNEaXNwbGF5KQogICAgICAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJlY3QudW5p
dGUocGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7CiAKLSAgICBpZiAoIWhhc09wYWNp
dHlBbmltYXRpb24oKSkKLSAgICAgICAgbV9vcGFjaXR5ID0gbV9zdGF0ZS5vcGFjaXR5OwotICAg
IGlmICghaGFzVHJhbnNmb3JtQW5pbWF0aW9uKCkpCi0gICAgICAgIG1fdHJhbnNmb3JtLnNldExv
Y2FsVHJhbnNmb3JtKG1fc3RhdGUudHJhbnNmb3JtKTsKLQogICAgIG1fdHJhbnNmb3JtLnNldFBv
c2l0aW9uKG1fc3RhdGUucG9zKTsKICAgICBtX3RyYW5zZm9ybS5zZXRBbmNob3JQb2ludChtX3N0
YXRlLmFuY2hvclBvaW50KTsKICAgICBtX3RyYW5zZm9ybS5zZXRTaXplKG1fc3RhdGUuc2l6ZSk7
CkBAIC02MjgsMTAgKzYyMCw4IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3Np
dGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhCiAKIGJvb2wgVGV4
dHVyZU1hcHBlck5vZGU6OmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkg
Y29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7
ICsraSkgewotICAgICAgICBpZiAoIW1fYW5pbWF0aW9uc1tpXS0+cGF1c2VkKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChtX2FuaW1hdGlvbnMuaGFzUnVubmluZ0Fu
aW1hdGlvbnMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKG1fY2hpbGRyZW5b
aV0tPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCkBAIC02NDEsMTk3
ICs2MzEsMTggQEAgYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6ZGVzY2VuZGFudHNPclNlbGZIYXZl
UnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGlj
IGRvdWJsZSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUoZG91YmxlIHJ1bm5pbmdUaW1lLCBkb3Vi
bGUgZHVyYXRpb24sIGJvb2wgYWx0ZXJuYXRlKQotewotICAgIGlmICghZHVyYXRpb24pCi0gICAg
ICAgIHJldHVybiAwOwotICAgIGNvbnN0IGludCBsb29wQ291bnQgPSBydW5uaW5nVGltZSAvIGR1
cmF0aW9uOwotICAgIGNvbnN0IGRvdWJsZSBsYXN0RnVsbExvb3AgPSBkdXJhdGlvbiAqIGRvdWJs
ZShsb29wQ291bnQpOwotICAgIGNvbnN0IGRvdWJsZSByZW1haW5kZXIgPSBydW5uaW5nVGltZSAt
IGxhc3RGdWxsTG9vcDsKLSAgICBjb25zdCBkb3VibGUgbm9ybWFsaXplZCA9IHJlbWFpbmRlciAv
IGR1cmF0aW9uOwotICAgIHJldHVybiAobG9vcENvdW50ICUgMiAmJiBhbHRlcm5hdGUpID8gKDEg
LSBub3JtYWxpemVkKSA6IG5vcm1hbGl6ZWQ7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6
OmFwcGx5T3BhY2l0eUFuaW1hdGlvbihmbG9hdCBmcm9tT3BhY2l0eSwgZmxvYXQgdG9PcGFjaXR5
LCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gT3B0aW1pemF0aW9uOiBzcGVjaWFsIGNhc2Ug
dGhlIGVkZ2UgdmFsdWVzICgwIGFuZCAxKS4KLSAgICBpZiAocHJvZ3Jlc3MgPT0gMS4wKQotICAg
ICAgICBzZXRPcGFjaXR5KHRvT3BhY2l0eSk7Ci0gICAgZWxzZSBpZiAoIXByb2dyZXNzKQotICAg
ICAgICBzZXRPcGFjaXR5KGZyb21PcGFjaXR5KTsKLSAgICBlbHNlCi0gICAgICAgIHNldE9wYWNp
dHkoZnJvbU9wYWNpdHkgKyBwcm9ncmVzcyAqICh0b09wYWNpdHkgLSBmcm9tT3BhY2l0eSkpOwot
fQotCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUVwc2lsb24oZG91YmxlIGR1cmF0aW9uKQot
ewotICAgIHJldHVybiAxLjAgLyAoMjAwLjAgKiBkdXJhdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgZG91YmxlIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihkb3VibGUgcDF4LCBkb3VibGUgcDF5
LCBkb3VibGUgcDJ4LCBkb3VibGUgcDJ5LCBkb3VibGUgdCwgZG91YmxlIGR1cmF0aW9uKQotewot
ICAgIFVuaXRCZXppZXIgYmV6aWVyKHAxeCwgcDF5LCBwMngsIHAyeSk7Ci0gICAgcmV0dXJuIGJl
emllci5zb2x2ZSh0LCBzb2x2ZUVwc2lsb24oZHVyYXRpb24pKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBkb3VibGUgc29sdmVTdGVwc0Z1bmN0aW9uKGludCBudW1TdGVwcywgYm9vbCBzdGVwQXRTdGFy
dCwgZG91YmxlIHQpCi17Ci0gICAgaWYgKHN0ZXBBdFN0YXJ0KQotICAgICAgICByZXR1cm4gc3Rk
OjptaW4oMS4wLCAoZmxvb3IobnVtU3RlcHMgKiB0KSArIDEpIC8gbnVtU3RlcHMpOwotICAgIHJl
dHVybiBmbG9vcihudW1TdGVwcyAqIHQpIC8gbnVtU3RlcHM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
ZmxvYXQgYXBwbHlUaW1pbmdGdW5jdGlvbihjb25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVu
Y3Rpb24sIGZsb2F0IHByb2dyZXNzLCBkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgaWYgKCF0aW1p
bmdGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIHByb2dyZXNzOwotCi0gICAgaWYgKHRpbWluZ0Z1
bmN0aW9uLT5pc0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24oKSkgewotICAgICAgICBjb25zdCBD
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBjdGYgPSBzdGF0aWNfY2FzdDxjb25zdCBDdWJpY0Jl
emllclRpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24pOwotICAgICAgICByZXR1cm4gc29s
dmVDdWJpY0JlemllckZ1bmN0aW9uKGN0Zi0+eDEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjdGYtPnkxKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3RmLT54MigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGN0Zi0+eTIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9ncmVzcywgZHVyYXRpb24pOwotICAgIH0KLQotICAgIGlmICh0aW1pbmdGdW5jdGlvbi0+
aXNTdGVwc1RpbWluZ0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgY29uc3QgU3RlcHNUaW1pbmdGdW5j
dGlvbiogc3RmID0gc3RhdGljX2Nhc3Q8Y29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbio+KHRpbWlu
Z0Z1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIHNvbHZlU3RlcHNGdW5jdGlvbihzdGYtPm51bWJl
ck9mU3RlcHMoKSwgc3RmLT5zdGVwQXRTdGFydCgpLCBkb3VibGUocHJvZ3Jlc3MpKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gcHJvZ3Jlc3M7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmFw
cGx5VHJhbnNmb3JtQW5pbWF0aW9uKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1h
dGlvbiwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogZnJvbSwgY29uc3QgVHJhbnNmb3JtT3Bl
cmF0aW9ucyogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3ZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5
bmNBbmltYXRpb25zKCkKIHsKLSAgICAvLyBPcHRpbWl6YXRpb246IHNwZWNpYWwgY2FzZSB0aGUg
ZWRnZSB2YWx1ZXMgKDAgYW5kIDEpLgotICAgIGlmIChwcm9ncmVzcyA9PSAxLjAgfHwgIXByb2dy
ZXNzKSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLSAgICAgICAgY29u
c3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogb3BzID0gcHJvZ3Jlc3MgPyB0byA6IGZyb207Ci0gICAg
ICAgIG9wcy0+YXBwbHkoYW5pbWF0aW9uLmJveFNpemUsIG1hdHJpeCk7Ci0gICAgICAgIHNldFRy
YW5zZm9ybShtYXRyaXgpOwotICAgIH0KLQotICAgIGlmICghYW5pbWF0aW9uLmxpc3RzTWF0Y2gp
IHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdG9NYXRyaXgsIGZyb21NYXRyaXg7Ci0g
ICAgICAgIHRvLT5hcHBseShhbmltYXRpb24uYm94U2l6ZSwgdG9NYXRyaXgpOwotICAgICAgICBm
cm9tLT5hcHBseShhbmltYXRpb24uYm94U2l6ZSwgZnJvbU1hdHJpeCk7Ci0gICAgICAgIHRvTWF0
cml4LmJsZW5kKGZyb21NYXRyaXgsIHByb2dyZXNzKTsKLSAgICAgICAgc2V0VHJhbnNmb3JtKHRv
TWF0cml4KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG1hdHJpeDsKLQotICAgIGlmICghdG8tPnNpemUoKSkgewotICAgICAgICBjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb25zKiBzd2FwID0gdG87Ci0gICAgICAgIHRvID0gZnJvbTsKLSAgICAgICAg
ZnJvbSA9IHN3YXA7Ci0gICAgfSBlbHNlIGlmICghZnJvbS0+c2l6ZSgpKQotICAgICAgICBwcm9n
cmVzcyA9IDEuMCAtIHByb2dyZXNzOwotCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZGVk
KCp0byk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRpb24uZnVuY3Rpb25MaXN0
LnNpemUoKTsgKytpKQotICAgICAgICBibGVuZGVkLm9wZXJhdGlvbnMoKVtpXS0+YmxlbmQoZnJv
bS0+YXQoaSksIHByb2dyZXNzLCAhZnJvbS0+YXQoaSkpLT5hcHBseShtYXRyaXgsIGFuaW1hdGlv
bi5ib3hTaXplKTsKLQotICAgIHNldFRyYW5zZm9ybShtYXRyaXgpOwotfQotCi12b2lkIFRleHR1
cmVNYXBwZXJOb2RlOjphcHBseUFuaW1hdGlvbkZyYW1lKGNvbnN0IFRleHR1cmVNYXBwZXJBbmlt
YXRpb24mIGFuaW1hdGlvbiwgY29uc3QgQW5pbWF0aW9uVmFsdWUqIGZyb20sIGNvbnN0IEFuaW1h
dGlvblZhbHVlKiB0bywgZmxvYXQgcHJvZ3Jlc3MpCi17Ci0gICAgc3dpdGNoIChhbmltYXRpb24u
a2V5ZnJhbWVzLnByb3BlcnR5KCkpIHsKLSAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5
OgotICAgICAgICBhcHBseU9wYWNpdHlBbmltYXRpb24oKHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0
QW5pbWF0aW9uVmFsdWUqPihmcm9tKS0+dmFsdWUoKSksIChzdGF0aWNfY2FzdDxjb25zdCBGbG9h
dEFuaW1hdGlvblZhbHVlKj4odG8pLT52YWx1ZSgpKSwgcHJvZ3Jlc3MpOwotICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtOgotICAgICAgICBh
cHBseVRyYW5zZm9ybUFuaW1hdGlvbihhbmltYXRpb24sIHN0YXRpY19jYXN0PGNvbnN0IFRyYW5z
Zm9ybUFuaW1hdGlvblZhbHVlKj4oZnJvbSktPnZhbHVlKCksIHN0YXRpY19jYXN0PGNvbnN0IFRy
YW5zZm9ybUFuaW1hdGlvblZhbHVlKj4odG8pLT52YWx1ZSgpLCBwcm9ncmVzcyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmFwcGx5QW5pbWF0aW9uKGNvbnN0IFRl
eHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiwgZG91YmxlIG5vcm1hbGl6ZWRWYWx1ZSkK
LXsKLSAgICAvLyBPcHRpbWl6YXRpb246IHNwZWNpYWwgY2FzZSB0aGUgZWRnZSB2YWx1ZXMgKDAg
YW5kIDEpLgotICAgIGlmICghbm9ybWFsaXplZFZhbHVlKSB7Ci0gICAgICAgIGFwcGx5QW5pbWF0
aW9uRnJhbWUoYW5pbWF0aW9uLCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KDApLCBhbmltYXRpb24u
a2V5ZnJhbWVzLmF0KDEpLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAobm9y
bWFsaXplZFZhbHVlID09IDEuMCkgewotICAgICAgICBhcHBseUFuaW1hdGlvbkZyYW1lKGFuaW1h
dGlvbiwgYW5pbWF0aW9uLmtleWZyYW1lcy5hdChhbmltYXRpb24ua2V5ZnJhbWVzLnNpemUoKSAt
IDIpLCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KGFuaW1hdGlvbi5rZXlmcmFtZXMuc2l6ZSgpIC0g
MSksIDEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChhbmltYXRpb24ua2V5ZnJh
bWVzLnNpemUoKSA9PSAyKSB7Ci0gICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IGFwcGx5VGltaW5n
RnVuY3Rpb24oYW5pbWF0aW9uLmFuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS5nZXQoKSwgbm9y
bWFsaXplZFZhbHVlLCBhbmltYXRpb24uYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKLSAgICAgICAg
YXBwbHlBbmltYXRpb25GcmFtZShhbmltYXRpb24sIGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoMCks
IGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoMSksIG5vcm1hbGl6ZWRWYWx1ZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1hdGlvbi5rZXlm
cmFtZXMuc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEFuaW1hdGlvblZhbHVlKiBm
cm9tID0gYW5pbWF0aW9uLmtleWZyYW1lcy5hdChpKTsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9u
VmFsdWUqIHRvID0gYW5pbWF0aW9uLmtleWZyYW1lcy5hdChpICsgMSk7Ci0gICAgICAgIGlmIChm
cm9tLT5rZXlUaW1lKCkgPiBub3JtYWxpemVkVmFsdWUgfHwgdG8tPmtleVRpbWUoKSA8IG5vcm1h
bGl6ZWRWYWx1ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIG5vcm1hbGl6ZWRW
YWx1ZSA9IChub3JtYWxpemVkVmFsdWUgLSBmcm9tLT5rZXlUaW1lKCkpIC8gKHRvLT5rZXlUaW1l
KCkgLSBmcm9tLT5rZXlUaW1lKCkpOwotICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBhcHBseVRp
bWluZ0Z1bmN0aW9uKGZyb20tPnRpbWluZ0Z1bmN0aW9uKCksIG5vcm1hbGl6ZWRWYWx1ZSwgYW5p
bWF0aW9uLmFuaW1hdGlvbi0+ZHVyYXRpb24oKSk7Ci0gICAgICAgIGFwcGx5QW5pbWF0aW9uRnJh
bWUoYW5pbWF0aW9uLCBmcm9tLCB0bywgbm9ybWFsaXplZFZhbHVlKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotfQotCi1ib29sIFRleHR1cmVNYXBwZXJOb2RlOjpoYXNPcGFjaXR5QW5pbWF0aW9u
KCkgY29uc3QKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXpl
KCk7ICsraSkgewotICAgICAgICBjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRp
b24gPSAqbV9hbmltYXRpb25zW2ldLmdldCgpOwotICAgICAgICBpZiAoYW5pbWF0aW9uLmtleWZy
YW1lcy5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBUZXh0dXJl
TWFwcGVyTm9kZTo6aGFzVHJhbnNmb3JtQW5pbWF0aW9uKCkgY29uc3QKLXsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25z
dCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24gPSAqbV9hbmltYXRpb25zW2ldLmdl
dCgpOwotICAgICAgICBpZiAoYW5pbWF0aW9uLmtleWZyYW1lcy5wcm9wZXJ0eSgpID09IEFuaW1h
dGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5j
QW5pbWF0aW9ucyhHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogbGF5ZXIpCi17Ci0gICAgZm9y
IChpbnQgaSA9IG1fYW5pbWF0aW9ucy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAg
ICBSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gYW5pbWF0aW9uID0gbV9hbmltYXRpb25z
W2ldOwotCi0gICAgICAgIGRvdWJsZSB0b3RhbFJ1bm5pbmdUaW1lID0gV1RGOjpjdXJyZW50VGlt
ZSgpIC0gYW5pbWF0aW9uLT5zdGFydFRpbWU7Ci0gICAgICAgIFJlZlB0cjxBbmltYXRpb24+IGFu
aW0gPSBhbmltYXRpb24tPmFuaW1hdGlvbjsKLSAgICAgICAgZG91YmxlIG5vcm1hbGl6ZWRWYWx1
ZSA9IG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZSh0b3RhbFJ1bm5pbmdUaW1lLCBhbmltLT5kdXJh
dGlvbigpLCBhbmltLT5kaXJlY3Rpb24oKSk7Ci0KLSAgICAgICAgaWYgKGFuaW0tPml0ZXJhdGlv
bkNvdW50KCkgIT0gQW5pbWF0aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRlICYmIHRvdGFsUnVu
bmluZ1RpbWUgPj0gYW5pbS0+ZHVyYXRpb24oKSAqIGFuaW0tPml0ZXJhdGlvbkNvdW50KCkpIHsK
LSAgICAgICAgICAgIC8vIFdlIGFwcGx5IGFuIGFuaW1hdGlvbiB0aGF0IHZlcnkgY2xvc2UgdG8g
dGhlIGVkZ2UsIHNvIHRoYXQgdGhlIGZpbmFsIGZyYW1lIGlzIGFwcGxpZWQsIG90ZXJ3aXNlIHdl
IG1pZ2h0IGdldCwgZm9yIGV4YW1wbGUsIGFuIG9wYWNpdHkgb2YgMC4wMSB3aGljaCBpcyBzdGls
bCB2aXNpYmxlLgotICAgICAgICAgICAgaWYgKGFuaW0tPmZpbGxzRm9yd2FyZHMoKSkgewotICAg
ICAgICAgICAgICAgIGlmIChhbmltYXRpb24tPmtleWZyYW1lcy5wcm9wZXJ0eSgpID09IEFuaW1h
dGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCi0gICAgICAgICAgICAgICAgICAgIHNldFRyYW5z
Zm9ybShtX3N0YXRlLnRyYW5zZm9ybSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoYW5pbWF0
aW9uLT5rZXlmcmFtZXMucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkKLSAg
ICAgICAgICAgICAgICAgICAgc2V0T3BhY2l0eShtX3N0YXRlLm9wYWNpdHkpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBtX2FuaW1hdGlvbnMucmVtb3ZlKGkpOwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWFuaW1hdGlvbi0+cGF1c2VkKQot
ICAgICAgICAgICAgYXBwbHlBbmltYXRpb24oKmFuaW1hdGlvbi5nZXQoKSwgbm9ybWFsaXplZFZh
bHVlKTsKLSAgICB9CisgICAgbV9hbmltYXRpb25zLmFwcGx5KHRoaXMpOworICAgIGlmICghbV9h
bmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybSkpCisgICAgICAgIHNldFRyYW5zZm9ybShtX3N0YXRlLnRyYW5zZm9ybSk7Cisg
ICAgaWYgKCFtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFBy
b3BlcnR5T3BhY2l0eSkpCisgICAgICAgIHNldE9wYWNpdHkobV9zdGF0ZS5vcGFjaXR5KTsKIH0K
IAogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0FuaW1hdGlvbnNSZWN1cnNpdmVseSgpCiB7
Ci0gICAgc3luY0FuaW1hdGlvbnMoMCk7CisgICAgc3luY0FuaW1hdGlvbnMoKTsKIAogICAgIGZv
ciAoaW50IGkgPSBtX2NoaWxkcmVuLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKQogICAgICAgICBt
X2NoaWxkcmVuW2ldLT5zeW5jQW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCk7CkBAIC04NTUsOCArNjY2
LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWMKICAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5
ZXIpCiAgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSh0
b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGdyYXBoaWNzTGF5ZXItPnJlcGxpY2FMYXllcigp
KSwgdGV4dHVyZU1hcHBlcik7CiAKLSAgICBzeW5jQW5pbWF0aW9ucyhncmFwaGljc0xheWVyKTsK
LQorICAgIHN5bmNBbmltYXRpb25zKCk7CiAgICAgY29tcHV0ZVRpbGVzKCk7CiAKICAgICBpZiAo
Z3JhcGhpY3NMYXllcikKQEAgLTg3OSwxMSArNjg5LDUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBo
aWMKICAgICB9CiB9CiAKLVRleHR1cmVNYXBwZXJBbmltYXRpb246OlRleHR1cmVNYXBwZXJBbmlt
YXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcykKLSAgICA6IGtleWZyYW1lcyh2
YWx1ZXMpCi17CiB9Ci0KLX0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCmluZGV4IGU2
NDY3MmIuLjI3YmZmMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCkBAIC0yNywxMCArMjcsOSBA
QAogI2luY2x1ZGUgIkludFBvaW50SGFzaC5oIgogI2luY2x1ZGUgIkxheWVyVHJhbnNmb3JtLmgi
CiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJBbmlt
YXRpb24uaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlv
bnMuaCIKLSNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRl
ICJVbml0QmV6aWVyLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNTcsMjIgKzU2
LDcgQEAgcHVibGljOgogICAgIHsgfQogfTsKIAotY2xhc3MgVGV4dHVyZU1hcHBlckFuaW1hdGlv
biA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJBbmltYXRpb24+IHsKLXB1YmxpYzoK
LSAgICBTdHJpbmcgbmFtZTsKLSAgICBLZXlmcmFtZVZhbHVlTGlzdCBrZXlmcmFtZXM7Ci0gICAg
SW50U2l6ZSBib3hTaXplOwotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbjsKLSAgICBi
b29sIHBhdXNlZDsKLSAgICBWZWN0b3I8VHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBl
PiBmdW5jdGlvbkxpc3Q7Ci0gICAgYm9vbCBsaXN0c01hdGNoOwotICAgIGJvb2wgaGFzQmlnUm90
YXRpb247Ci0gICAgZG91YmxlIHN0YXJ0VGltZTsKLSAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
KGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0Jik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dHVy
ZU1hcHBlckFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZXMp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKHZhbHVlcykpOyB9
Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyTm9kZSB7CitjbGFzcyBUZXh0dXJlTWFwcGVyTm9k
ZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50IHsKIAogcHVibGljOgogICAg
IC8vIFRoaXMgc2V0IG9mIGZsYWdzIGhlbHAgdXMgZGVmZXIgd2hpY2ggcHJvcGVydGllcyBvZiB0
aGUgbGF5ZXIgaGF2ZSBiZWVuCkBAIC0xOTgsMTMgKzE4Miw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBwYWludFNlbGZBbmRDaGlsZHJlbldpdGhSZXBsaWNhKGNvbnN0IFRleHR1cmVNYXBwZXJQYWlu
dE9wdGlvbnMmKTsKICAgICB2b2lkIHJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlciosIEdyYXBo
aWNzTGF5ZXIqKTsKIAotICAgIHZvaWQgc3luY0FuaW1hdGlvbnMoR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIqKTsKLSAgICB2b2lkIGFwcGx5QW5pbWF0aW9uKGNvbnN0IFRleHR1cmVNYXBwZXJB
bmltYXRpb24mLCBkb3VibGUgcnVubmluZ1RpbWUpOwotICAgIHZvaWQgYXBwbHlBbmltYXRpb25G
cmFtZShjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiwgY29uc3QgQW5pbWF0aW9uVmFsdWUq
IGZyb20sIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB0bywgZmxvYXQgcHJvZ3Jlc3MpOwotICAgIHZv
aWQgYXBwbHlPcGFjaXR5QW5pbWF0aW9uKGZsb2F0IGZyb21PcGFjaXR5LCBmbG9hdCB0b09wYWNp
dHksIGRvdWJsZSk7Ci0gICAgdm9pZCBhcHBseVRyYW5zZm9ybUFuaW1hdGlvbihjb25zdCBUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uJiwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogc3RhcnQsIGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGVuZCwgZG91YmxlKTsKLSAgICBib29sIGhhc09wYWNp
dHlBbmltYXRpb24oKSBjb25zdDsKLSAgICBib29sIGhhc1RyYW5zZm9ybUFuaW1hdGlvbigpIGNv
bnN0OworICAgIHZvaWQgc3luY0FuaW1hdGlvbnMoKTsKICAgICBib29sIGlzVmlzaWJsZSgpIGNv
bnN0OwogICAgIGJvb2wgc2hvdWxkUGFpbnRUb0ludGVybWVkaWF0ZVN1cmZhY2UoKSBjb25zdDsK
IApAQCAtMzE1LDggKzI5Myw3IEBAIHByaXZhdGU6CiAKICAgICBTdGF0ZSBtX3N0YXRlOwogICAg
IFRleHR1cmVNYXBwZXIqIG1fdGV4dHVyZU1hcHBlcjsKLQotICAgIFZlY3RvcjxSZWZQdHI8VGV4
dHVyZU1hcHBlckFuaW1hdGlvbj4gPiBtX2FuaW1hdGlvbnM7CisgICAgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbnMgbV9hbmltYXRpb25zOwogfTsKIAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123726</attachid>
            <date>2012-01-24 06:47:52 -0800</date>
            <delta_ts>2012-01-24 17:06:42 -0800</delta_ts>
            <desc>Patch 1: Move animations to TextureMapperAnimations</desc>
            <filename>patch-76660.diff</filename>
            <type>text/plain</type>
            <size>35668</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3Yzg5ZmU4Li5hYWE4YjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUg
QEAKKyAyMDEyLTAxLTIxICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5j
b20+CisKKyAgICAgICAgW1RleG1hcF0gRGl2aWRlIFRleHR1cmVNYXBwZXJOb2RlLmNwcCB0byAz
IGZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzY2NjAKKworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4K
KworICAgICAgICBTcGxpdCB0aGUgYW5pbWF0aW9uIHBhcnQgb2YgVGV4dHVyZU1hcHBlck5vZGUg
b3V0IHRvIGEgc2VwYXJhdGUgZmlsZSwgY2FsbGVkCisgICAgICAgIFRleHR1cmVNYXBwZXJBbmlt
YXRpb24uCisgICAgICAgIFByb3ZpZGUgYSBjbGVhbiBpbnRlcmZhY2UgZm9yIHRoYXQgY2xhc3Ms
IHRoYXQgYWxsb3dzIHNlcGFyYXRpbmcgdGhlIGludGVybmFscyBvZiB0aGUgc2NlbmUKKyAgICAg
ICAgcGFpbnRpbmcgZnJvbSB0aGUgaW50ZXJuYWxzIG9mIHRoZSBhbmltYXRpb24gaW50ZXJwb2xh
dGlvbi4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEV4aXN0aW5nIGFuaW1hdGlvbiB0ZXN0cyBj
b3ZlciB0aGlzLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkZWQgbmV3IFRl
eHR1cmVNYXBwZXItcmVsYXRlZCBmaWxlcy4KKyAgICAgICAgKiBUYXJnZXQucHJpOiBBZGRlZCBu
ZXcgVGV4dHVyZU1hcHBlci1yZWxhdGVkIGZpbGVzLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTog
QWRkZWQgbmV3IFRleHR1cmVNYXBwZXItcmVsYXRlZCBmaWxlcy4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZEFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGF1c2VBbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnJlbW92
ZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZik6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6ZGVzY2VuZGFudHNPclNlbGZI
YXZlUnVubmluZ0FuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5v
ZGU6OnN5bmNBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2Rl
OjpzeW5jQW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmg6CisKIDIwMTItMDEtMjEgIERhdmlkIFJl
dmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIEluY3Jl
bWVudGFsIHRleHR1cmUgdXBkYXRlcyBhcmUgbm90IGF0b21pYy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCmluZGV4IDIxMzAxYzcuLmIxMzRhY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQpAQCAtNTY5Nyw2ICs1Njk3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckFuaW1hdGlvbi5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXIuaApAQCAtNTcxNSw2ICs1NzE3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5o
IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbi5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIu
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKaW5kZXggMWNhMDllNi4uYTM4MjY5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zOTMz
LDYgKzM5MzMsNyBAQCBjb250YWlucyhDT05GSUcsIHRleG1hcCkgewogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBcCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5oIFwKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCisgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmggXAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBcCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCiAKQEAgLTM5
NDAsNiArMzk0MSw3IEBAIGNvbnRhaW5zKENPTkZJRywgdGV4bWFwKSB7CiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L1RleHR1cmVNYXBwZXJRdC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zvcm0uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBcCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IDJmMTA5MzcuLjVkNjdhY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM5Njgs
NiArMzk2OCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVy
VHJhbnNmb3JtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJBbmltYXRpb24uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKaW5kZXggN2VmOTgx
OC4uZjQ3OGI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3Bw
CkBAIC0zNjUsNTkgKzM2NSwyNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjph
ZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdAogICAgIGlmICgh
YW5pbSB8fCBhbmltLT5pc0VtcHR5T3JaZXJvRHVyYXRpb24oKSB8fCB2YWx1ZUxpc3Quc2l6ZSgp
IDwgMiB8fCAodmFsdWVMaXN0LnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRy
YW5zZm9ybSAmJiB2YWx1ZUxpc3QucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5T3BhY2l0
eSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9hbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIC8vIFRoZSBzYW1lIGFuaW1hdGlv
biBuYW1lIGNhbiBiZSB1c2VkIGZvciB0d28gYW5pbWF0aW9ucyB3aXRoIGRpZmZlcmVudCBwcm9w
ZXJ0aWVzLgotICAgICAgICBpZiAobV9hbmltYXRpb25zW2ldLT5uYW1lICE9IGtleWZyYW1lc05h
bWUgfHwgbV9hbmltYXRpb25zW2ldLT5rZXlmcmFtZXMucHJvcGVydHkoKSAhPSB2YWx1ZUxpc3Qu
cHJvcGVydHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIFdlIGFscmVh
ZHkgaGF2ZSBhIGNvcHkgb2YgdGhpcyBhbmltYXRpb24sIHRoYXQgbWVhbnMgdGhhdCB3ZSdyZSBy
ZXN1bWluZyBpdCByYXRoZXIgdGhhbiBhZGRpbmcgaXQuCi0gICAgICAgIFJlZlB0cjxUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uPiYgYW5pbWF0aW9uID0gbV9hbmltYXRpb25zW2ldOwotICAgICAgICBh
bmltYXRpb24tPmFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKGFuaW0pOwotICAgICAgICBh
bmltYXRpb24tPnBhdXNlZCA9IGZhbHNlOwotICAgICAgICBhbmltYXRpb24tPnN0YXJ0VGltZSA9
IFdURjo6Y3VycmVudFRpbWUoKSAtIHRpbWVPZmZzZXQ7Ci0gICAgICAgIG5vdGlmeUNoYW5nZShU
ZXh0dXJlTWFwcGVyTm9kZTo6QW5pbWF0aW9uQ2hhbmdlKTsKLSAgICAgICAgbV9hbmltYXRpb25T
dGFydGVkVGltZXIuc3RhcnRPbmVTaG90KDApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
CisgICAgYm9vbCBsaXN0c01hdGNoOworICAgIGJvb2wgaGFzQmlnUm90YXRpb247CisgICAgVmVj
dG9yPFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZT4gZnVuY3Rpb25MaXN0OwogCi0g
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJBbmltYXRpb24+IGFuaW1hdGlvbiA9IFRleHR1cmVNYXBw
ZXJBbmltYXRpb246OmNyZWF0ZSh2YWx1ZUxpc3QpOwotICAgIGFuaW1hdGlvbi0+Ym94U2l6ZSA9
IGJveFNpemU7Ci0gICAgYW5pbWF0aW9uLT5uYW1lID0ga2V5ZnJhbWVzTmFtZTsKLSAgICBhbmlt
YXRpb24tPmFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKGFuaW0pOwotICAgIGFuaW1hdGlv
bi0+cGF1c2VkID0gZmFsc2U7Ci0gICAgYW5pbWF0aW9uLT5zdGFydFRpbWUgPSBXVEY6OmN1cnJl
bnRUaW1lKCkgLSB0aW1lT2Zmc2V0OwotCi0gICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09
IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pIHsKLSAgICAgICAgYm9vbCBoYXNCaWdS
b3RhdGlvbjsgLy8gTm90IHVzZWQsIGJ1dCByZXF1aXJlZCBhcyBhIHBvaW50ZXIgcGFyYW1ldGVy
IGZvciB0aGUgZnVuY3Rpb24uCi0gICAgICAgIGZldGNoVHJhbnNmb3JtT3BlcmF0aW9uTGlzdCh2
YWx1ZUxpc3QsIGFuaW1hdGlvbi0+ZnVuY3Rpb25MaXN0LCBhbmltYXRpb24tPmxpc3RzTWF0Y2gs
IGhhc0JpZ1JvdGF0aW9uKTsKLSAgICB9CisgICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09
IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCisgICAgICAgIGZldGNoVHJhbnNmb3Jt
T3BlcmF0aW9uTGlzdCh2YWx1ZUxpc3QsIGZ1bmN0aW9uTGlzdCwgbGlzdHNNYXRjaCwgaGFzQmln
Um90YXRpb24pOwogCi0gICAgbV9hbmltYXRpb25zLmFwcGVuZChhbmltYXRpb24pOworICAgIG1f
YW5pbWF0aW9ucy5hZGQoa2V5ZnJhbWVzTmFtZSwgVGV4dHVyZU1hcHBlckFuaW1hdGlvbih2YWx1
ZUxpc3QsIGJveFNpemUsIGFuaW0sIHRpbWVPZmZzZXQsIGZ1bmN0aW9uTGlzdCwgbGlzdHNNYXRj
aCkpOwogICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QW5pbWF0aW9uQ2hhbmdl
KTsKICAgICBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0KICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGF1c2VB
bmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCkK
IHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkg
ewotICAgICAgICBpZiAobV9hbmltYXRpb25zW2ldLT5uYW1lICE9IGFuaW1hdGlvbk5hbWUpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9hbmltYXRpb25zW2ldLT5wYXVzZWQgPSB0
cnVlOwotICAgICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkFuaW1hdGlvbkNo
YW5nZSk7Ci0gICAgfQorICAgIG1fYW5pbWF0aW9ucy5wYXVzZShhbmltYXRpb25OYW1lLCB0aW1l
T2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cmVtb3ZlQW5p
bWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKIHsKLSAgICBmb3IgKGludCBpID0g
bV9hbmltYXRpb25zLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIC8vIFRoZSBz
YW1lIGFuaW1hdGlvbiBuYW1lIGNhbiBiZSB1c2VkIGZvciB0d28gYW5pbWF0aW9ucyB3aXRoIGRp
ZmZlcmVudCBwcm9wZXJ0aWVzLiBXZSBzaG91bGQgcmVtb3ZlIGJvdGguCi0gICAgICAgIGlmICht
X2FuaW1hdGlvbnNbaV0tPm5hbWUgIT0gYW5pbWF0aW9uTmFtZSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBtX2FuaW1hdGlvbnMucmVtb3ZlKGkpOwotICAgICAgICBub3RpZnlDaGFu
Z2UoVGV4dHVyZU1hcHBlck5vZGU6OkFuaW1hdGlvbkNoYW5nZSk7Ci0gICAgfQorICAgIG1fYW5p
bWF0aW9ucy5yZW1vdmUoYW5pbWF0aW9uTmFtZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI6OmFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyPiopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5o
CmluZGV4IGViYjliNTMuLjE3MmZkZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlci5oCkBAIC05NSw3ICs5NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3N5bmNRdWV1
ZWQ7CiAgICAgaW50IG1fY2hhbmdlTWFzazsKICAgICBUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVu
dERhdGEgbV9wZW5kaW5nQ29udGVudDsKLSAgICBWZWN0b3I8UmVmUHRyPFRleHR1cmVNYXBwZXJB
bmltYXRpb24+ID4gbV9hbmltYXRpb25zOworICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIG1f
YW5pbWF0aW9uczsKICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyPiopOwogICAgIFRpbWVyPEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyPiBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcjsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckFuaW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIw
ODNhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDI1NSBAQAorLyoK
KyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgiCisKKyNpbmNsdWRlICJDdXJyZW50
VGltZS5oIgorI2luY2x1ZGUgIlVuaXRCZXppZXIuaCIKKworI2lmIFVTRShURVhUVVJFX01BUFBF
UikKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGRvdWJsZSBub3JtYWxpemVkQW5pbWF0
aW9uVmFsdWUoZG91YmxlIHJ1bm5pbmdUaW1lLCBkb3VibGUgZHVyYXRpb24sIGJvb2wgYWx0ZXJu
YXRlKQoreworICAgIGlmICghZHVyYXRpb24pCisgICAgICAgIHJldHVybiAwOworCisgICAgY29u
c3QgaW50IGxvb3BDb3VudCA9IHJ1bm5pbmdUaW1lIC8gZHVyYXRpb247CisgICAgY29uc3QgZG91
YmxlIGxhc3RGdWxsTG9vcCA9IGR1cmF0aW9uICogZG91YmxlKGxvb3BDb3VudCk7CisgICAgY29u
c3QgZG91YmxlIHJlbWFpbmRlciA9IHJ1bm5pbmdUaW1lIC0gbGFzdEZ1bGxMb29wOworICAgIGNv
bnN0IGRvdWJsZSBub3JtYWxpemVkID0gcmVtYWluZGVyIC8gZHVyYXRpb247CisgICAgcmV0dXJu
IChsb29wQ291bnQgJSAyICYmIGFsdGVybmF0ZSkgPyAoMSAtIG5vcm1hbGl6ZWQpIDogbm9ybWFs
aXplZDsKK30KKworc3RhdGljIGZsb2F0IGFwcGx5T3BhY2l0eUFuaW1hdGlvbihmbG9hdCBmcm9t
T3BhY2l0eSwgZmxvYXQgdG9PcGFjaXR5LCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgLy8gT3B0
aW1pemF0aW9uOiBzcGVjaWFsIGNhc2UgdGhlIGVkZ2UgdmFsdWVzICgwIGFuZCAxKS4KKyAgICBp
ZiAocHJvZ3Jlc3MgPT0gMS4wKQorICAgICAgICByZXR1cm4gdG9PcGFjaXR5OworCisgICAgaWYg
KCFwcm9ncmVzcykKKyAgICAgICAgcmV0dXJuIGZyb21PcGFjaXR5OworCisgICAgcmV0dXJuIGZy
b21PcGFjaXR5ICsgcHJvZ3Jlc3MgKiAodG9PcGFjaXR5IC0gZnJvbU9wYWNpdHkpOworfQorCitz
dGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUVwc2lsb24oZG91YmxlIGR1cmF0aW9uKQoreworICAg
IHJldHVybiAxLjAgLyAoMjAwLjAgKiBkdXJhdGlvbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91
YmxlIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihkb3VibGUgcDF4LCBkb3VibGUgcDF5LCBkb3Vi
bGUgcDJ4LCBkb3VibGUgcDJ5LCBkb3VibGUgdCwgZG91YmxlIGR1cmF0aW9uKQoreworICAgIHJl
dHVybiBVbml0QmV6aWVyKHAxeCwgcDF5LCBwMngsIHAyeSkuc29sdmUodCwgc29sdmVFcHNpbG9u
KGR1cmF0aW9uKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlU3RlcHNGdW5jdGlv
bihpbnQgbnVtU3RlcHMsIGJvb2wgc3RlcEF0U3RhcnQsIGRvdWJsZSB0KQoreworICAgIGlmIChz
dGVwQXRTdGFydCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWluKDEuMCwgKGZsb29yKG51bVN0ZXBz
ICogdCkgKyAxKSAvIG51bVN0ZXBzKTsKKyAgICByZXR1cm4gZmxvb3IobnVtU3RlcHMgKiB0KSAv
IG51bVN0ZXBzOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5VGltaW5nRnVuY3Rpb24o
Y29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uLCBmbG9hdCBwcm9ncmVzcywgZG91
YmxlIGR1cmF0aW9uKQoreworICAgIGlmICghdGltaW5nRnVuY3Rpb24pCisgICAgICAgIHJldHVy
biBwcm9ncmVzczsKKworICAgIGlmICh0aW1pbmdGdW5jdGlvbi0+aXNDdWJpY0JlemllclRpbWlu
Z0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgY29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiog
Y3RmID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbio+KHRpbWlu
Z0Z1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJuIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihjdGYt
PngxKCksIGN0Zi0+eTEoKSwgY3RmLT54MigpLCBjdGYtPnkyKCksIHByb2dyZXNzLCBkdXJhdGlv
bik7CisgICAgfQorCisgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc1N0ZXBzVGltaW5nRnVuY3Rp
b24oKSkgeworICAgICAgICBjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKiBzdGYgPSBzdGF0aWNf
Y2FzdDxjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24pOworICAgICAg
ICByZXR1cm4gc29sdmVTdGVwc0Z1bmN0aW9uKHN0Zi0+bnVtYmVyT2ZTdGVwcygpLCBzdGYtPnN0
ZXBBdFN0YXJ0KCksIGRvdWJsZShwcm9ncmVzcykpOworICAgIH0KKworICAgIHJldHVybiBwcm9n
cmVzczsKK30KKworc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFwcGx5VHJhbnNmb3JtQW5p
bWF0aW9uKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbnMqIHRvLCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNv
bnN0IFZlY3RvcjxUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGU+IGZ1bmN0aW9uTGlz
dCwgYm9vbCBsaXN0c01hdGNoKQoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsK
KworICAgIC8vIEZpcnN0IGZyYW1lIG9mIGFuIGFuaW1hdGlvbi4KKyAgICBpZiAoIXByb2dyZXNz
KSB7CisgICAgICAgIGZyb20tPmFwcGx5KGJveFNpemUsIG1hdHJpeCk7CisgICAgICAgIHJldHVy
biBtYXRyaXg7CisgICAgfQorCisgICAgLy8gTGFzdCBmcmFtZSBvZiBhbiBhbmltYXRpb24uCisg
ICAgaWYgKHByb2dyZXNzID09IDEpIHsKKyAgICAgICAgdG8tPmFwcGx5KGJveFNpemUsIG1hdHJp
eCk7CisgICAgICAgIHJldHVybiBtYXRyaXg7CisgICAgfQorCisgICAgLy8gSWYgd2UgaGF2ZSBp
bmNvbXBhdGlibGUgb3BlcmF0aW9uIGxpc3RzLCB3ZSBibGVuZCB0aGUgcmVzdWx0aW5nIG1hdHJp
Y2VzLgorICAgIGlmICghbGlzdHNNYXRjaCkgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBmcm9tTWF0cml4OworICAgICAgICB0by0+YXBwbHkoYm94U2l6ZSwgbWF0cml4KTsKKyAgICAg
ICAgZnJvbS0+YXBwbHkoYm94U2l6ZSwgZnJvbU1hdHJpeCk7CisgICAgICAgIG1hdHJpeC5ibGVu
ZChmcm9tTWF0cml4LCBwcm9ncmVzcyk7CisgICAgICAgIHJldHVybiBtYXRyaXg7CisgICAgfQor
CisgICAgLy8gQW5pbWF0aW9uIHRvICItd2Via2l0LXRyYW5zZm9ybTogbm9uZSIuCisgICAgaWYg
KCF0by0+c2l6ZSgpKSB7CisgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRlZCgqdG8p
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uTGlzdC5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIGJsZW5kZWQub3BlcmF0aW9ucygpW2ldLT5ibGVuZCgwLCBwcm9ncmVz
cywgdHJ1ZSktPmFwcGx5KG1hdHJpeCwgYm94U2l6ZSk7CisgICAgICAgIHJldHVybiBtYXRyaXg7
CisgICAgfQorCisgICAgLy8gQW5pbWF0aW9uIGZyb20gIi13ZWJraXQtdHJhbnNmb3JtOiBub25l
Ii4KKyAgICBpZiAoIWZyb20tPnNpemUoKSkgeworICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25z
IGJsZW5kZWQoKmZyb20pOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9u
TGlzdC5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGJsZW5kZWQub3BlcmF0aW9ucygpW2ldLT5i
bGVuZCgwLCAxLiAtIHByb2dyZXNzLCB0cnVlKS0+YXBwbHkobWF0cml4LCBib3hTaXplKTsKKyAg
ICAgICAgcmV0dXJuIG1hdHJpeDsKKyAgICB9CisKKyAgICAvLyBOb3JtYWwgYW5pbWF0aW9uIHdp
dGggYSBtYXRjaGluZyBvcGVyYXRpb24gbGlzdC4KKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJs
ZW5kZWQoKnRvKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uTGlzdC5zaXpl
KCk7ICsraSkKKyAgICAgICAgYmxlbmRlZC5vcGVyYXRpb25zKClbaV0tPmJsZW5kKGZyb20tPmF0
KGkpLCBwcm9ncmVzcywgIWZyb20tPmF0KGkpKS0+YXBwbHkobWF0cml4LCBib3hTaXplKTsKKyAg
ICByZXR1cm4gbWF0cml4OworfQorCisKK1RleHR1cmVNYXBwZXJBbmltYXRpb246OlRleHR1cmVN
YXBwZXJBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcywgY29uc3Qg
SW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIGRvdWJsZSB0aW1l
T2Zmc2V0LCBjb25zdCBWZWN0b3I8VHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlPiYg
ZnVuY3Rpb25MaXN0LCBib29sIGxpc3RzTWF0Y2gpCisgICAgOiBtX2tleWZyYW1lcyhrZXlmcmFt
ZXMpCisgICAgLCBtX2JveFNpemUoYm94U2l6ZSkKKyAgICAsIG1fYW5pbWF0aW9uKEFuaW1hdGlv
bjo6Y3JlYXRlKGFuaW1hdGlvbikpCisgICAgLCBtX2Z1bmN0aW9uTGlzdChmdW5jdGlvbkxpc3Qp
CisgICAgLCBtX2xpc3RzTWF0Y2gobGlzdHNNYXRjaCkKKyAgICAsIG1fc3RhcnRUaW1lKFdURjo6
Y3VycmVudFRpbWUoKSAtIHRpbWVPZmZzZXQpCisgICAgLCBtX3BhdXNlVGltZSgwKQorICAgICwg
bV9zdGF0ZShQbGF5aW5nU3RhdGUpCit7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlv
bjo6YXBwbHlJbnRlcm5hbChUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50KiBjbGllbnQsIGNv
bnN0IEFuaW1hdGlvblZhbHVlKiBmcm9tLCBjb25zdCBBbmltYXRpb25WYWx1ZSogdG8sIGZsb2F0
IHByb2dyZXNzKQoreworICAgIHN3aXRjaCAobV9rZXlmcmFtZXMucHJvcGVydHkoKSkgeworICAg
IGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6CisgICAgICAgIGNsaWVudC0+c2V0T3BhY2l0
eShhcHBseU9wYWNpdHlBbmltYXRpb24oKHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9u
VmFsdWUqPihmcm9tKS0+dmFsdWUoKSksIChzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1hdGlv
blZhbHVlKj4odG8pLT52YWx1ZSgpKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybToKKyAgICAgICAgY2xpZW50LT5z
ZXRUcmFuc2Zvcm0oYXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oc3RhdGljX2Nhc3Q8Y29uc3QgVHJh
bnNmb3JtQW5pbWF0aW9uVmFsdWUqPihmcm9tKS0+dmFsdWUoKSwgc3RhdGljX2Nhc3Q8Y29uc3Qg
VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqPih0byktPnZhbHVlKCksIHByb2dyZXNzLCBtX2JveFNp
emUsIG1fZnVuY3Rpb25MaXN0LCBtX2xpc3RzTWF0Y2gpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworYm9v
bCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgaWYgKHN0
YXRlKCkgIT0gU3RvcHBlZFN0YXRlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVy
biBtX2FuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpOworfQorCitib29sIFRleHR1cmVNYXBwZXJB
bmltYXRpb25zOjpoYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlJRCB0
eXBlKSBjb25zdAoreworICAgIEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoSGFz
aE1hcDxTdHJpbmcsIFRleHR1cmVNYXBwZXJBbmltYXRpb24+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgY29uc3Qg
VGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAg
aWYgKGFuaW1hdGlvbi5pc0FjdGl2ZSgpICYmIGFuaW1hdGlvbi5wcm9wZXJ0eSgpID09IHR5cGUp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpoYXNSdW5uaW5nQW5pbWF0aW9ucygpIGNv
bnN0Cit7CisgICAgSGFzaE1hcDxTdHJpbmcsIFRleHR1cmVNYXBwZXJBbmltYXRpb24+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPFN0
cmluZywgVGV4dHVyZU1hcHBlckFuaW1hdGlvbj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hbmlt
YXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBjb25zdCBUZXh0dXJl
TWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAoYW5p
bWF0aW9uLnN0YXRlKCkgPT0gVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6UGxheWluZ1N0YXRlKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb246OmFwcGx5KFRleHR1cmVNYXBwZXJBbmltYXRp
b25DbGllbnQqIGNsaWVudCkKK3sKKyAgICBpZiAoc3RhdGUoKSA9PSBTdG9wcGVkU3RhdGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGRvdWJsZSB0b3RhbFJ1bm5pbmdUaW1lID0gbV9zdGF0ZSA9
PSBQYXVzZWRTdGF0ZSA/IG1fcGF1c2VUaW1lIDogV1RGOjpjdXJyZW50VGltZSgpIC0gbV9zdGFy
dFRpbWU7CisgICAgZG91YmxlIG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZWRBbmltYXRpb25W
YWx1ZSh0b3RhbFJ1bm5pbmdUaW1lLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSwgbV9hbmltYXRp
b24tPmRpcmVjdGlvbigpKTsKKworICAgIGlmIChtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQo
KSAhPSBBbmltYXRpb246Okl0ZXJhdGlvbkNvdW50SW5maW5pdGUgJiYgdG90YWxSdW5uaW5nVGlt
ZSA+PSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAqIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3Vu
dCgpKQorICAgICAgICBzZXRTdGF0ZShTdG9wcGVkU3RhdGUpOworCisgICAgaWYgKCFub3JtYWxp
emVkVmFsdWUpIHsKKyAgICAgICAgYXBwbHlJbnRlcm5hbChjbGllbnQsIG1fa2V5ZnJhbWVzLmF0
KDApLCBtX2tleWZyYW1lcy5hdCgxKSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKG5vcm1hbGl6ZWRWYWx1ZSA9PSAxLjApIHsKKyAgICAgICAgYXBwbHlJbnRlcm5hbChjbGll
bnQsIG1fa2V5ZnJhbWVzLmF0KG1fa2V5ZnJhbWVzLnNpemUoKSAtIDIpLCBtX2tleWZyYW1lcy5h
dChtX2tleWZyYW1lcy5zaXplKCkgLSAxKSwgMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKG1fa2V5ZnJhbWVzLnNpemUoKSA9PSAyKSB7CisgICAgICAgIG5vcm1hbGl6ZWRWYWx1
ZSA9IGFwcGx5VGltaW5nRnVuY3Rpb24obV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkuZ2V0
KCksIG5vcm1hbGl6ZWRWYWx1ZSwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpOworICAgICAgICBh
cHBseUludGVybmFsKGNsaWVudCwgbV9rZXlmcmFtZXMuYXQoMCksIG1fa2V5ZnJhbWVzLmF0KDEp
LCBub3JtYWxpemVkVmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2tleWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAg
Y29uc3QgQW5pbWF0aW9uVmFsdWUqIGZyb20gPSBtX2tleWZyYW1lcy5hdChpKTsKKyAgICAgICAg
Y29uc3QgQW5pbWF0aW9uVmFsdWUqIHRvID0gbV9rZXlmcmFtZXMuYXQoaSArIDEpOworICAgICAg
ICBpZiAoZnJvbS0+a2V5VGltZSgpID4gbm9ybWFsaXplZFZhbHVlIHx8IHRvLT5rZXlUaW1lKCkg
PCBub3JtYWxpemVkVmFsdWUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBub3Jt
YWxpemVkVmFsdWUgPSAobm9ybWFsaXplZFZhbHVlIC0gZnJvbS0+a2V5VGltZSgpKSAvICh0by0+
a2V5VGltZSgpIC0gZnJvbS0+a2V5VGltZSgpKTsKKyAgICAgICAgbm9ybWFsaXplZFZhbHVlID0g
YXBwbHlUaW1pbmdGdW5jdGlvbihmcm9tLT50aW1pbmdGdW5jdGlvbigpLCBub3JtYWxpemVkVmFs
dWUsIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKKyAgICAgICAgYXBwbHlJbnRlcm5hbChjbGll
bnQsIGZyb20sIHRvLCBub3JtYWxpemVkVmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3ZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6cGF1c2UoZG91YmxlIG9mZnNldCkKK3sK
KyAgICAvLyBGSVhNRTogc2hvdWxkIGFwcGx5IG9mZnNldCBoZXJlLgorICAgIHNldFN0YXRlKFBh
dXNlZFN0YXRlKTsKKyAgICBtX3BhdXNlVGltZSA9IFdURjo6Y3VycmVudFRpbWUoKSAtIG9mZnNl
dDsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cGF1c2UoY29uc3QgU3RyaW5n
JiBuYW1lLCBkb3VibGUgb2Zmc2V0KQoreworICAgIEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuZmluZChuYW1lKTsKKyAg
ICBpZiAoaXQgPT0gbV9hbmltYXRpb25zLmVuZCgpKQorICAgICAgICByZXR1cm47CisgICAgaXQt
PnNlY29uZC5wYXVzZShvZmZzZXQpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25z
OjphcHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50KiBjbGllbnQpCit7CisgICAgSGFz
aE1hcDxTdHJpbmcsIFRleHR1cmVNYXBwZXJBbmltYXRpb24+OjppdGVyYXRvciBlbmQgPSBtX2Fu
aW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPFN0cmluZywgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbj46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgaXQtPnNlY29uZC5hcHBseShjbGllbnQpOworfQorCit9CisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjVlMjI2ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oCkBAIC0wLDAgKzEs
ODYgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFRl
eHR1cmVNYXBwZXJBbmltYXRpb25faAorI2RlZmluZSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uX2gK
KworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJIYXNoTWFwLmgiCisjaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFRleHR1cmVNYXBwZXJBbmltYXRpb25DbGllbnQgeworcHVibGljOgorICAgIHZpcnR1
YWwgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpID0gMDsKK307CisKK2NsYXNzIFRleHR1
cmVNYXBwZXJBbmltYXRpb24geworcHVibGljOgorICAgIGVudW0gQW5pbWF0aW9uU3RhdGUgeyBQ
bGF5aW5nU3RhdGUsIFBhdXNlZFN0YXRlLCBTdG9wcGVkU3RhdGUgfTsKKworICAgIFRleHR1cmVN
YXBwZXJBbmltYXRpb24oKQorICAgICAgICA6IG1fa2V5ZnJhbWVzKEFuaW1hdGVkUHJvcGVydHlJ
bnZhbGlkKQorICAgIHsgfQorICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb24oY29uc3QgS2V5ZnJh
bWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgQW5pbWF0aW9uKiwgZG91YmxlLCBj
b25zdCBWZWN0b3I8VHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlPiYsIGJvb2wpOwor
ICAgIHZvaWQgYXBwbHkoVGV4dHVyZU1hcHBlckFuaW1hdGlvbkNsaWVudCopOworICAgIHZvaWQg
cGF1c2UoZG91YmxlKTsKKyAgICBBbmltYXRpb25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGU7IH0KKyAgICB2b2lkIHNldFN0YXRlKEFuaW1hdGlvblN0YXRlIHMpIHsgbV9zdGF0
ZSA9IHM7IH0KKyAgICBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVy
biBtX2tleWZyYW1lcy5wcm9wZXJ0eSgpOyB9CisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIHZvaWQgYXBwbHlJbnRlcm5hbChUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
Q2xpZW50KiwgY29uc3QgQW5pbWF0aW9uVmFsdWUqIGZyb20sIGNvbnN0IEFuaW1hdGlvblZhbHVl
KiB0bywgZmxvYXQgcHJvZ3Jlc3MpOworICAgIEtleWZyYW1lVmFsdWVMaXN0IG1fa2V5ZnJhbWVz
OworICAgIEludFNpemUgbV9ib3hTaXplOworICAgIFJlZlB0cjxBbmltYXRpb24+IG1fYW5pbWF0
aW9uOworICAgIFN0cmluZyBtX25hbWU7CisgICAgVmVjdG9yPFRyYW5zZm9ybU9wZXJhdGlvbjo6
T3BlcmF0aW9uVHlwZT4gbV9mdW5jdGlvbkxpc3Q7CisgICAgYm9vbCBtX2xpc3RzTWF0Y2g7Cisg
ICAgYm9vbCBtX2hhc0JpZ1JvdGF0aW9uOworICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKKyAgICBk
b3VibGUgbV9wYXVzZVRpbWU7CisgICAgQW5pbWF0aW9uU3RhdGUgbV9zdGF0ZTsKK307CisKK2Ns
YXNzIFRleHR1cmVNYXBwZXJBbmltYXRpb25zIHsKK3B1YmxpYzoKKyAgICBUZXh0dXJlTWFwcGVy
QW5pbWF0aW9ucygpIHsgfQorCisgICAgdm9pZCBhZGQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgbV9hbmltYXRpb25zLmFkZChu
YW1lLCBhbmltYXRpb24pOyB9CisgICAgdm9pZCByZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKSB7
IG1fYW5pbWF0aW9ucy5yZW1vdmUobmFtZSk7IH0KKyAgICB2b2lkIHBhdXNlKGNvbnN0IFN0cmlu
ZyYsIGRvdWJsZSk7CisgICAgdm9pZCBhcHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50
Kik7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25zLmlzRW1w
dHkoKTsgfQorCisgICAgYm9vbCBoYXNSdW5uaW5nQW5pbWF0aW9ucygpIGNvbnN0OworICAgIGJv
b2wgaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5SUQgdHlwZSkgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxTdHJpbmcsIFRleHR1cmVNYXBwZXJBbmltYXRp
b24+IG1fYW5pbWF0aW9uczsKK307CisKK30KKyNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVIp
CisKKyNlbmRpZiAvLyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5v
ZGUuY3BwCmluZGV4IDI3NjI1MTcuLjIxN2E5NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNw
cApAQCAtNTg1LDExICs1ODUsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9z
aXRpbmdTdGF0ZVNlbGYoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYQogICAgICAgICAg
ICBsYXllci0+bV9lZmZlY3RUYXJnZXQgPSB0aGlzOwogICAgIH0KIAotICAgIGlmIChjaGFuZ2VN
YXNrICYgQW5pbWF0aW9uQ2hhbmdlKSB7Ci0gICAgICAgIG1fYW5pbWF0aW9ucy5jbGVhcigpOwot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdyYXBoaWNzTGF5ZXItPm1fYW5pbWF0aW9u
cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fYW5pbWF0aW9ucy5hcHBlbmQoZ3JhcGhpY3NM
YXllci0+bV9hbmltYXRpb25zW2ldKTsKLSAgICB9CisgICAgaWYgKGNoYW5nZU1hc2sgJiBBbmlt
YXRpb25DaGFuZ2UpCisgICAgICAgIG1fYW5pbWF0aW9ucyA9IGdyYXBoaWNzTGF5ZXItPm1fYW5p
bWF0aW9uczsKIAogICAgIG1fc3RhdGUubWFza0xheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShn
cmFwaGljc0xheWVyLT5tYXNrTGF5ZXIoKSk7CiAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXIgPSB0
b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnJlcGxpY2FMYXllcigpKTsKQEAgLTYx
NCwxMSArNjExLDYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3Rh
dGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAgICBpZiAoIW1fY3VycmVu
dENvbnRlbnQubmVlZHNEaXNwbGF5KQogICAgICAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlz
cGxheVJlY3QudW5pdGUocGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7CiAKLSAgICBp
ZiAoIWhhc09wYWNpdHlBbmltYXRpb24oKSkKLSAgICAgICAgbV9vcGFjaXR5ID0gbV9zdGF0ZS5v
cGFjaXR5OwotICAgIGlmICghaGFzVHJhbnNmb3JtQW5pbWF0aW9uKCkpCi0gICAgICAgIG1fdHJh
bnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKG1fc3RhdGUudHJhbnNmb3JtKTsKLQogICAgIG1fdHJh
bnNmb3JtLnNldFBvc2l0aW9uKG1fc3RhdGUucG9zKTsKICAgICBtX3RyYW5zZm9ybS5zZXRBbmNo
b3JQb2ludChtX3N0YXRlLmFuY2hvclBvaW50KTsKICAgICBtX3RyYW5zZm9ybS5zZXRTaXplKG1f
c3RhdGUuc2l6ZSk7CkBAIC02MjgsMTAgKzYyMCw4IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6
OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3Jh
CiAKIGJvb2wgVGV4dHVyZU1hcHBlck5vZGU6OmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdB
bmltYXRpb25zKCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0
aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIW1fYW5pbWF0aW9uc1tpXS0+cGF1c2Vk
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChtX2FuaW1hdGlvbnMu
aGFzUnVubmluZ0FuaW1hdGlvbnMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYg
KG1fY2hpbGRyZW5baV0tPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkp
CkBAIC02NDEsMTk3ICs2MzEsMTggQEAgYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6ZGVzY2VuZGFu
dHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotc3RhdGljIGRvdWJsZSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUoZG91YmxlIHJ1bm5p
bmdUaW1lLCBkb3VibGUgZHVyYXRpb24sIGJvb2wgYWx0ZXJuYXRlKQotewotICAgIGlmICghZHVy
YXRpb24pCi0gICAgICAgIHJldHVybiAwOwotICAgIGNvbnN0IGludCBsb29wQ291bnQgPSBydW5u
aW5nVGltZSAvIGR1cmF0aW9uOwotICAgIGNvbnN0IGRvdWJsZSBsYXN0RnVsbExvb3AgPSBkdXJh
dGlvbiAqIGRvdWJsZShsb29wQ291bnQpOwotICAgIGNvbnN0IGRvdWJsZSByZW1haW5kZXIgPSBy
dW5uaW5nVGltZSAtIGxhc3RGdWxsTG9vcDsKLSAgICBjb25zdCBkb3VibGUgbm9ybWFsaXplZCA9
IHJlbWFpbmRlciAvIGR1cmF0aW9uOwotICAgIHJldHVybiAobG9vcENvdW50ICUgMiAmJiBhbHRl
cm5hdGUpID8gKDEgLSBub3JtYWxpemVkKSA6IG5vcm1hbGl6ZWQ7Ci19Ci0KLXZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OmFwcGx5T3BhY2l0eUFuaW1hdGlvbihmbG9hdCBmcm9tT3BhY2l0eSwgZmxv
YXQgdG9PcGFjaXR5LCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gT3B0aW1pemF0aW9uOiBz
cGVjaWFsIGNhc2UgdGhlIGVkZ2UgdmFsdWVzICgwIGFuZCAxKS4KLSAgICBpZiAocHJvZ3Jlc3Mg
PT0gMS4wKQotICAgICAgICBzZXRPcGFjaXR5KHRvT3BhY2l0eSk7Ci0gICAgZWxzZSBpZiAoIXBy
b2dyZXNzKQotICAgICAgICBzZXRPcGFjaXR5KGZyb21PcGFjaXR5KTsKLSAgICBlbHNlCi0gICAg
ICAgIHNldE9wYWNpdHkoZnJvbU9wYWNpdHkgKyBwcm9ncmVzcyAqICh0b09wYWNpdHkgLSBmcm9t
T3BhY2l0eSkpOwotfQotCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUVwc2lsb24oZG91Ymxl
IGR1cmF0aW9uKQotewotICAgIHJldHVybiAxLjAgLyAoMjAwLjAgKiBkdXJhdGlvbik7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihkb3VibGUgcDF4
LCBkb3VibGUgcDF5LCBkb3VibGUgcDJ4LCBkb3VibGUgcDJ5LCBkb3VibGUgdCwgZG91YmxlIGR1
cmF0aW9uKQotewotICAgIFVuaXRCZXppZXIgYmV6aWVyKHAxeCwgcDF5LCBwMngsIHAyeSk7Ci0g
ICAgcmV0dXJuIGJlemllci5zb2x2ZSh0LCBzb2x2ZUVwc2lsb24oZHVyYXRpb24pKTsKLX0KLQot
c3RhdGljIGlubGluZSBkb3VibGUgc29sdmVTdGVwc0Z1bmN0aW9uKGludCBudW1TdGVwcywgYm9v
bCBzdGVwQXRTdGFydCwgZG91YmxlIHQpCi17Ci0gICAgaWYgKHN0ZXBBdFN0YXJ0KQotICAgICAg
ICByZXR1cm4gc3RkOjptaW4oMS4wLCAoZmxvb3IobnVtU3RlcHMgKiB0KSArIDEpIC8gbnVtU3Rl
cHMpOwotICAgIHJldHVybiBmbG9vcihudW1TdGVwcyAqIHQpIC8gbnVtU3RlcHM7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgZmxvYXQgYXBwbHlUaW1pbmdGdW5jdGlvbihjb25zdCBUaW1pbmdGdW5jdGlv
biogdGltaW5nRnVuY3Rpb24sIGZsb2F0IHByb2dyZXNzLCBkb3VibGUgZHVyYXRpb24pCi17Ci0g
ICAgaWYgKCF0aW1pbmdGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIHByb2dyZXNzOwotCi0gICAg
aWYgKHRpbWluZ0Z1bmN0aW9uLT5pc0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24oKSkgewotICAg
ICAgICBjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBjdGYgPSBzdGF0aWNfY2FzdDxj
b25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24pOwotICAgICAg
ICByZXR1cm4gc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKGN0Zi0+eDEoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGYtPnkxKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3RmLT54MigpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGN0Zi0+eTIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9ncmVzcywgZHVyYXRpb24pOwotICAgIH0KLQotICAgIGlmICh0aW1p
bmdGdW5jdGlvbi0+aXNTdGVwc1RpbWluZ0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgY29uc3QgU3Rl
cHNUaW1pbmdGdW5jdGlvbiogc3RmID0gc3RhdGljX2Nhc3Q8Y29uc3QgU3RlcHNUaW1pbmdGdW5j
dGlvbio+KHRpbWluZ0Z1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIHNvbHZlU3RlcHNGdW5jdGlv
bihzdGYtPm51bWJlck9mU3RlcHMoKSwgc3RmLT5zdGVwQXRTdGFydCgpLCBkb3VibGUocHJvZ3Jl
c3MpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcHJvZ3Jlc3M7Ci19Ci0KLXZvaWQgVGV4dHVyZU1h
cHBlck5vZGU6OmFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKGNvbnN0IFRleHR1cmVNYXBwZXJBbmlt
YXRpb24mIGFuaW1hdGlvbiwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogZnJvbSwgY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9ucyogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3ZvaWQgVGV4dHVyZU1h
cHBlck5vZGU6OnN5bmNBbmltYXRpb25zKCkKIHsKLSAgICAvLyBPcHRpbWl6YXRpb246IHNwZWNp
YWwgY2FzZSB0aGUgZWRnZSB2YWx1ZXMgKDAgYW5kIDEpLgotICAgIGlmIChwcm9ncmVzcyA9PSAx
LjAgfHwgIXByb2dyZXNzKSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsK
LSAgICAgICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogb3BzID0gcHJvZ3Jlc3MgPyB0byA6
IGZyb207Ci0gICAgICAgIG9wcy0+YXBwbHkoYW5pbWF0aW9uLmJveFNpemUsIG1hdHJpeCk7Ci0g
ICAgICAgIHNldFRyYW5zZm9ybShtYXRyaXgpOwotICAgIH0KLQotICAgIGlmICghYW5pbWF0aW9u
Lmxpc3RzTWF0Y2gpIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdG9NYXRyaXgsIGZy
b21NYXRyaXg7Ci0gICAgICAgIHRvLT5hcHBseShhbmltYXRpb24uYm94U2l6ZSwgdG9NYXRyaXgp
OwotICAgICAgICBmcm9tLT5hcHBseShhbmltYXRpb24uYm94U2l6ZSwgZnJvbU1hdHJpeCk7Ci0g
ICAgICAgIHRvTWF0cml4LmJsZW5kKGZyb21NYXRyaXgsIHByb2dyZXNzKTsKLSAgICAgICAgc2V0
VHJhbnNmb3JtKHRvTWF0cml4KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLQotICAgIGlmICghdG8tPnNpemUoKSkgewotICAgICAg
ICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBzd2FwID0gdG87Ci0gICAgICAgIHRvID0gZnJv
bTsKLSAgICAgICAgZnJvbSA9IHN3YXA7Ci0gICAgfSBlbHNlIGlmICghZnJvbS0+c2l6ZSgpKQot
ICAgICAgICBwcm9ncmVzcyA9IDEuMCAtIHByb2dyZXNzOwotCi0gICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBibGVuZGVkKCp0byk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRpb24u
ZnVuY3Rpb25MaXN0LnNpemUoKTsgKytpKQotICAgICAgICBibGVuZGVkLm9wZXJhdGlvbnMoKVtp
XS0+YmxlbmQoZnJvbS0+YXQoaSksIHByb2dyZXNzLCAhZnJvbS0+YXQoaSkpLT5hcHBseShtYXRy
aXgsIGFuaW1hdGlvbi5ib3hTaXplKTsKLQotICAgIHNldFRyYW5zZm9ybShtYXRyaXgpOwotfQot
Ci12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjphcHBseUFuaW1hdGlvbkZyYW1lKGNvbnN0IFRleHR1
cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiwgY29uc3QgQW5pbWF0aW9uVmFsdWUqIGZyb20s
IGNvbnN0IEFuaW1hdGlvblZhbHVlKiB0bywgZmxvYXQgcHJvZ3Jlc3MpCi17Ci0gICAgc3dpdGNo
IChhbmltYXRpb24ua2V5ZnJhbWVzLnByb3BlcnR5KCkpIHsKLSAgICBjYXNlIEFuaW1hdGVkUHJv
cGVydHlPcGFjaXR5OgotICAgICAgICBhcHBseU9wYWNpdHlBbmltYXRpb24oKHN0YXRpY19jYXN0
PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUqPihmcm9tKS0+dmFsdWUoKSksIChzdGF0aWNfY2Fz
dDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVlKj4odG8pLT52YWx1ZSgpKSwgcHJvZ3Jlc3MpOwot
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3Jt
OgotICAgICAgICBhcHBseVRyYW5zZm9ybUFuaW1hdGlvbihhbmltYXRpb24sIHN0YXRpY19jYXN0
PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKj4oZnJvbSktPnZhbHVlKCksIHN0YXRpY19j
YXN0PGNvbnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKj4odG8pLT52YWx1ZSgpLCBwcm9ncmVz
cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmFwcGx5QW5pbWF0
aW9uKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiwgZG91YmxlIG5vcm1h
bGl6ZWRWYWx1ZSkKLXsKLSAgICAvLyBPcHRpbWl6YXRpb246IHNwZWNpYWwgY2FzZSB0aGUgZWRn
ZSB2YWx1ZXMgKDAgYW5kIDEpLgotICAgIGlmICghbm9ybWFsaXplZFZhbHVlKSB7Ci0gICAgICAg
IGFwcGx5QW5pbWF0aW9uRnJhbWUoYW5pbWF0aW9uLCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KDAp
LCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KDEpLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAobm9ybWFsaXplZFZhbHVlID09IDEuMCkgewotICAgICAgICBhcHBseUFuaW1hdGlv
bkZyYW1lKGFuaW1hdGlvbiwgYW5pbWF0aW9uLmtleWZyYW1lcy5hdChhbmltYXRpb24ua2V5ZnJh
bWVzLnNpemUoKSAtIDIpLCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KGFuaW1hdGlvbi5rZXlmcmFt
ZXMuc2l6ZSgpIC0gMSksIDEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChhbmlt
YXRpb24ua2V5ZnJhbWVzLnNpemUoKSA9PSAyKSB7Ci0gICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9
IGFwcGx5VGltaW5nRnVuY3Rpb24oYW5pbWF0aW9uLmFuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24o
KS5nZXQoKSwgbm9ybWFsaXplZFZhbHVlLCBhbmltYXRpb24uYW5pbWF0aW9uLT5kdXJhdGlvbigp
KTsKLSAgICAgICAgYXBwbHlBbmltYXRpb25GcmFtZShhbmltYXRpb24sIGFuaW1hdGlvbi5rZXlm
cmFtZXMuYXQoMCksIGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoMSksIG5vcm1hbGl6ZWRWYWx1ZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFu
aW1hdGlvbi5rZXlmcmFtZXMuc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEFuaW1h
dGlvblZhbHVlKiBmcm9tID0gYW5pbWF0aW9uLmtleWZyYW1lcy5hdChpKTsKLSAgICAgICAgY29u
c3QgQW5pbWF0aW9uVmFsdWUqIHRvID0gYW5pbWF0aW9uLmtleWZyYW1lcy5hdChpICsgMSk7Ci0g
ICAgICAgIGlmIChmcm9tLT5rZXlUaW1lKCkgPiBub3JtYWxpemVkVmFsdWUgfHwgdG8tPmtleVRp
bWUoKSA8IG5vcm1hbGl6ZWRWYWx1ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IG5vcm1hbGl6ZWRWYWx1ZSA9IChub3JtYWxpemVkVmFsdWUgLSBmcm9tLT5rZXlUaW1lKCkpIC8g
KHRvLT5rZXlUaW1lKCkgLSBmcm9tLT5rZXlUaW1lKCkpOwotICAgICAgICBub3JtYWxpemVkVmFs
dWUgPSBhcHBseVRpbWluZ0Z1bmN0aW9uKGZyb20tPnRpbWluZ0Z1bmN0aW9uKCksIG5vcm1hbGl6
ZWRWYWx1ZSwgYW5pbWF0aW9uLmFuaW1hdGlvbi0+ZHVyYXRpb24oKSk7Ci0gICAgICAgIGFwcGx5
QW5pbWF0aW9uRnJhbWUoYW5pbWF0aW9uLCBmcm9tLCB0bywgbm9ybWFsaXplZFZhbHVlKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1ib29sIFRleHR1cmVNYXBwZXJOb2RlOjpoYXNPcGFj
aXR5QW5pbWF0aW9uKCkgY29uc3QKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5p
bWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uJiBhbmltYXRpb24gPSAqbV9hbmltYXRpb25zW2ldLmdldCgpOwotICAgICAgICBpZiAoYW5p
bWF0aW9uLmtleWZyYW1lcy5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6aGFzVHJhbnNmb3JtQW5pbWF0aW9uKCkgY29uc3QKLXsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewot
ICAgICAgICBjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24gPSAqbV9hbmlt
YXRpb25zW2ldLmdldCgpOwotICAgICAgICBpZiAoYW5pbWF0aW9uLmtleWZyYW1lcy5wcm9wZXJ0
eSgpID09IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpzeW5jQW5pbWF0aW9ucyhHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogbGF5ZXIp
Ci17Ci0gICAgZm9yIChpbnQgaSA9IG1fYW5pbWF0aW9ucy5zaXplKCkgLSAxOyBpID49IDA7IC0t
aSkgewotICAgICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gYW5pbWF0aW9uID0g
bV9hbmltYXRpb25zW2ldOwotCi0gICAgICAgIGRvdWJsZSB0b3RhbFJ1bm5pbmdUaW1lID0gV1RG
OjpjdXJyZW50VGltZSgpIC0gYW5pbWF0aW9uLT5zdGFydFRpbWU7Ci0gICAgICAgIFJlZlB0cjxB
bmltYXRpb24+IGFuaW0gPSBhbmltYXRpb24tPmFuaW1hdGlvbjsKLSAgICAgICAgZG91YmxlIG5v
cm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZSh0b3RhbFJ1bm5pbmdUaW1l
LCBhbmltLT5kdXJhdGlvbigpLCBhbmltLT5kaXJlY3Rpb24oKSk7Ci0KLSAgICAgICAgaWYgKGFu
aW0tPml0ZXJhdGlvbkNvdW50KCkgIT0gQW5pbWF0aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRl
ICYmIHRvdGFsUnVubmluZ1RpbWUgPj0gYW5pbS0+ZHVyYXRpb24oKSAqIGFuaW0tPml0ZXJhdGlv
bkNvdW50KCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGFwcGx5IGFuIGFuaW1hdGlvbiB0aGF0IHZl
cnkgY2xvc2UgdG8gdGhlIGVkZ2UsIHNvIHRoYXQgdGhlIGZpbmFsIGZyYW1lIGlzIGFwcGxpZWQs
IG90ZXJ3aXNlIHdlIG1pZ2h0IGdldCwgZm9yIGV4YW1wbGUsIGFuIG9wYWNpdHkgb2YgMC4wMSB3
aGljaCBpcyBzdGlsbCB2aXNpYmxlLgotICAgICAgICAgICAgaWYgKGFuaW0tPmZpbGxzRm9yd2Fy
ZHMoKSkgewotICAgICAgICAgICAgICAgIGlmIChhbmltYXRpb24tPmtleWZyYW1lcy5wcm9wZXJ0
eSgpID09IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCi0gICAgICAgICAgICAgICAg
ICAgIHNldFRyYW5zZm9ybShtX3N0YXRlLnRyYW5zZm9ybSk7Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAoYW5pbWF0aW9uLT5rZXlmcmFtZXMucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5
T3BhY2l0eSkKLSAgICAgICAgICAgICAgICAgICAgc2V0T3BhY2l0eShtX3N0YXRlLm9wYWNpdHkp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX2FuaW1hdGlvbnMucmVtb3ZlKGkpOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWFuaW1hdGlv
bi0+cGF1c2VkKQotICAgICAgICAgICAgYXBwbHlBbmltYXRpb24oKmFuaW1hdGlvbi5nZXQoKSwg
bm9ybWFsaXplZFZhbHVlKTsKLSAgICB9CisgICAgbV9hbmltYXRpb25zLmFwcGx5KHRoaXMpOwor
ICAgIGlmICghbV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkpCisgICAgICAgIHNldFRyYW5zZm9ybShtX3N0YXRlLnRy
YW5zZm9ybSk7CisgICAgaWYgKCFtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlw
ZShBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkpCisgICAgICAgIHNldE9wYWNpdHkobV9zdGF0ZS5v
cGFjaXR5KTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0FuaW1hdGlvbnNSZWN1
cnNpdmVseSgpCiB7Ci0gICAgc3luY0FuaW1hdGlvbnMoMCk7CisgICAgc3luY0FuaW1hdGlvbnMo
KTsKIAogICAgIGZvciAoaW50IGkgPSBtX2NoaWxkcmVuLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1p
KQogICAgICAgICBtX2NoaWxkcmVuW2ldLT5zeW5jQW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCk7CkBA
IC04NTUsOCArNjY2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5n
U3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWMKICAgICBpZiAobV9zdGF0
ZS5yZXBsaWNhTGF5ZXIpCiAgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5zeW5jQ29tcG9z
aXRpbmdTdGF0ZSh0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGdyYXBoaWNzTGF5ZXItPnJl
cGxpY2FMYXllcigpKSwgdGV4dHVyZU1hcHBlcik7CiAKLSAgICBzeW5jQW5pbWF0aW9ucyhncmFw
aGljc0xheWVyKTsKLQorICAgIHN5bmNBbmltYXRpb25zKCk7CiAgICAgY29tcHV0ZVRpbGVzKCk7
CiAKICAgICBpZiAoZ3JhcGhpY3NMYXllcikKQEAgLTg3OSwxMSArNjg5LDUgQEAgdm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIqIGdyYXBoaWMKICAgICB9CiB9CiAKLVRleHR1cmVNYXBwZXJBbmltYXRpb246OlRleHR1
cmVNYXBwZXJBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcykKLSAgICA6
IGtleWZyYW1lcyh2YWx1ZXMpCi17CiB9Ci0KLX0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5oCmluZGV4IGU2NDY3MmIuLjI3YmZmMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCkBAIC0y
NywxMCArMjcsOSBAQAogI2luY2x1ZGUgIkludFBvaW50SGFzaC5oIgogI2luY2x1ZGUgIkxheWVy
VHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJBbmltYXRpb24uaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlRyYW5z
Zm9ybU9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24u
aCIKLSNpbmNsdWRlICJVbml0QmV6aWVyLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpA
QCAtNTcsMjIgKzU2LDcgQEAgcHVibGljOgogICAgIHsgfQogfTsKIAotY2xhc3MgVGV4dHVyZU1h
cHBlckFuaW1hdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJBbmltYXRpb24+
IHsKLXB1YmxpYzoKLSAgICBTdHJpbmcgbmFtZTsKLSAgICBLZXlmcmFtZVZhbHVlTGlzdCBrZXlm
cmFtZXM7Ci0gICAgSW50U2l6ZSBib3hTaXplOwotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1h
dGlvbjsKLSAgICBib29sIHBhdXNlZDsKLSAgICBWZWN0b3I8VHJhbnNmb3JtT3BlcmF0aW9uOjpP
cGVyYXRpb25UeXBlPiBmdW5jdGlvbkxpc3Q7Ci0gICAgYm9vbCBsaXN0c01hdGNoOwotICAgIGJv
b2wgaGFzQmlnUm90YXRpb247Ci0gICAgZG91YmxlIHN0YXJ0VGltZTsKLSAgICBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0Jik7Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiB2YWx1ZXMpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
KHZhbHVlcykpOyB9Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyTm9kZSB7CitjbGFzcyBUZXh0
dXJlTWFwcGVyTm9kZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50IHsKIAog
cHVibGljOgogICAgIC8vIFRoaXMgc2V0IG9mIGZsYWdzIGhlbHAgdXMgZGVmZXIgd2hpY2ggcHJv
cGVydGllcyBvZiB0aGUgbGF5ZXIgaGF2ZSBiZWVuCkBAIC0xOTgsMTMgKzE4Miw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBwYWludFNlbGZBbmRDaGlsZHJlbldpdGhSZXBsaWNhKGNvbnN0IFRleHR1
cmVNYXBwZXJQYWludE9wdGlvbnMmKTsKICAgICB2b2lkIHJlbmRlckNvbnRlbnQoVGV4dHVyZU1h
cHBlciosIEdyYXBoaWNzTGF5ZXIqKTsKIAotICAgIHZvaWQgc3luY0FuaW1hdGlvbnMoR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIqKTsKLSAgICB2b2lkIGFwcGx5QW5pbWF0aW9uKGNvbnN0IFRl
eHR1cmVNYXBwZXJBbmltYXRpb24mLCBkb3VibGUgcnVubmluZ1RpbWUpOwotICAgIHZvaWQgYXBw
bHlBbmltYXRpb25GcmFtZShjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiwgY29uc3QgQW5p
bWF0aW9uVmFsdWUqIGZyb20sIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB0bywgZmxvYXQgcHJvZ3Jl
c3MpOwotICAgIHZvaWQgYXBwbHlPcGFjaXR5QW5pbWF0aW9uKGZsb2F0IGZyb21PcGFjaXR5LCBm
bG9hdCB0b09wYWNpdHksIGRvdWJsZSk7Ci0gICAgdm9pZCBhcHBseVRyYW5zZm9ybUFuaW1hdGlv
bihjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9u
cyogc3RhcnQsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGVuZCwgZG91YmxlKTsKLSAgICBi
b29sIGhhc09wYWNpdHlBbmltYXRpb24oKSBjb25zdDsKLSAgICBib29sIGhhc1RyYW5zZm9ybUFu
aW1hdGlvbigpIGNvbnN0OworICAgIHZvaWQgc3luY0FuaW1hdGlvbnMoKTsKICAgICBib29sIGlz
VmlzaWJsZSgpIGNvbnN0OwogICAgIGJvb2wgc2hvdWxkUGFpbnRUb0ludGVybWVkaWF0ZVN1cmZh
Y2UoKSBjb25zdDsKIApAQCAtMzE1LDggKzI5Myw3IEBAIHByaXZhdGU6CiAKICAgICBTdGF0ZSBt
X3N0YXRlOwogICAgIFRleHR1cmVNYXBwZXIqIG1fdGV4dHVyZU1hcHBlcjsKLQotICAgIFZlY3Rv
cjxSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gPiBtX2FuaW1hdGlvbnM7CisgICAgVGV4
dHVyZU1hcHBlckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOwogfTsKIAogCg==
</data>
<flag name="commit-queue"
          id="124830"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123848</attachid>
            <date>2012-01-24 17:06:42 -0800</date>
            <delta_ts>2012-01-25 10:21:07 -0800</delta_ts>
            <desc>Patch 1: Animations</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>35667</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3Yzg5ZmU4Li5hYWE4YjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUg
QEAKKzIwMTItMDEtMjEgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbVGV4bWFwXSBEaXZpZGUgVGV4dHVyZU1hcHBlck5vZGUuY3BwIHRvIDMg
ZmlsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NjY2MAorCisgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgor
CisgICAgICAgIFNwbGl0IHRoZSBhbmltYXRpb24gcGFydCBvZiBUZXh0dXJlTWFwcGVyTm9kZSBv
dXQgdG8gYSBzZXBhcmF0ZSBmaWxlLCBjYWxsZWQKKyAgICAgICAgVGV4dHVyZU1hcHBlckFuaW1h
dGlvbi4KKyAgICAgICAgUHJvdmlkZSBhIGNsZWFuIGludGVyZmFjZSBmb3IgdGhhdCBjbGFzcywg
dGhhdCBhbGxvd3Mgc2VwYXJhdGluZyB0aGUgaW50ZXJuYWxzIG9mIHRoZSBzY2VuZQorICAgICAg
ICBwYWludGluZyBmcm9tIHRoZSBpbnRlcm5hbHMgb2YgdGhlIGFuaW1hdGlvbiBpbnRlcnBvbGF0
aW9uLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gRXhpc3RpbmcgYW5pbWF0aW9uIHRlc3RzIGNv
dmVyIHRoaXMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGRlZCBuZXcgVGV4
dHVyZU1hcHBlci1yZWxhdGVkIGZpbGVzLgorICAgICAgICAqIFRhcmdldC5wcmk6IEFkZGVkIG5l
dyBUZXh0dXJlTWFwcGVyLXJlbGF0ZWQgZmlsZXMuCisgICAgICAgICogV2ViQ29yZS5neXBpOiBB
ZGRlZCBuZXcgVGV4dHVyZU1hcHBlci1yZWxhdGVkIGZpbGVzLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpwYXVzZUFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cmVtb3Zl
QW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpkZXNjZW5kYW50c09yU2VsZkhh
dmVSdW5uaW5nQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZTo6c3luY0FuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6
OnN5bmNBbmltYXRpb25zUmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaDoKKwogMjAxMi0wMS0yMSAgRGF2aWQgUmV2
ZW1hbiAgPHJldmVtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gSW5jcmVt
ZW50YWwgdGV4dHVyZSB1cGRhdGVzIGFyZSBub3QgYXRvbWljLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KaW5kZXggMjEzMDFjNy4uYjEzNGFjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCkBAIC01Njk3LDYgKzU2OTcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyQW5pbWF0aW9uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ci5oCkBAIC01NzE1LDYgKzU3MTcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgg
XAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
QW5pbWF0aW9uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJBbmltYXRpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmggXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQppbmRleCAxY2EwOWU2Li5hMzgyNjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTM5MzMs
NiArMzkzMyw3IEBAIGNvbnRhaW5zKENPTkZJRywgdGV4bWFwKSB7CiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIFwKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmggXAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oIFwKKyAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaCBcCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIFwKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKIApAQCAtMzk0
MCw2ICszOTQxLDcgQEAgY29udGFpbnMoQ09ORklHLCB0ZXhtYXApIHsKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvVGV4dHVyZU1hcHBlclF0LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIFwKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggMmYxMDkzNy4uNWQ2N2FjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzk2OCw2
ICszOTY4LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJU
cmFuc2Zvcm0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAppbmRleCA3ZWY5ODE4
Li5mNDc4YjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAK
QEAgLTM2NSw1OSArMzY1LDI3IEBAIGJvb2wgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFk
ZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0CiAgICAgaWYgKCFh
bmltIHx8IGFuaW0tPmlzRW1wdHlPclplcm9EdXJhdGlvbigpIHx8IHZhbHVlTGlzdC5zaXplKCkg
PCAyIHx8ICh2YWx1ZUxpc3QucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJh
bnNmb3JtICYmIHZhbHVlTGlzdC5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgLy8gVGhlIHNhbWUgYW5pbWF0aW9u
IG5hbWUgY2FuIGJlIHVzZWQgZm9yIHR3byBhbmltYXRpb25zIHdpdGggZGlmZmVyZW50IHByb3Bl
cnRpZXMuCi0gICAgICAgIGlmIChtX2FuaW1hdGlvbnNbaV0tPm5hbWUgIT0ga2V5ZnJhbWVzTmFt
ZSB8fCBtX2FuaW1hdGlvbnNbaV0tPmtleWZyYW1lcy5wcm9wZXJ0eSgpICE9IHZhbHVlTGlzdC5w
cm9wZXJ0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gV2UgYWxyZWFk
eSBoYXZlIGEgY29weSBvZiB0aGlzIGFuaW1hdGlvbiwgdGhhdCBtZWFucyB0aGF0IHdlJ3JlIHJl
c3VtaW5nIGl0IHJhdGhlciB0aGFuIGFkZGluZyBpdC4KLSAgICAgICAgUmVmUHRyPFRleHR1cmVN
YXBwZXJBbmltYXRpb24+JiBhbmltYXRpb24gPSBtX2FuaW1hdGlvbnNbaV07Ci0gICAgICAgIGFu
aW1hdGlvbi0+YW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoYW5pbSk7Ci0gICAgICAgIGFu
aW1hdGlvbi0+cGF1c2VkID0gZmFsc2U7Ci0gICAgICAgIGFuaW1hdGlvbi0+c3RhcnRUaW1lID0g
V1RGOjpjdXJyZW50VGltZSgpIC0gdGltZU9mZnNldDsKLSAgICAgICAgbm90aWZ5Q2hhbmdlKFRl
eHR1cmVNYXBwZXJOb2RlOjpBbmltYXRpb25DaGFuZ2UpOwotICAgICAgICBtX2FuaW1hdGlvblN0
YXJ0ZWRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
KyAgICBib29sIGxpc3RzTWF0Y2g7CisgICAgYm9vbCBoYXNCaWdSb3RhdGlvbjsKKyAgICBWZWN0
b3I8VHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlPiBmdW5jdGlvbkxpc3Q7CiAKLSAg
ICBSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gYW5pbWF0aW9uID0gVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbjo6Y3JlYXRlKHZhbHVlTGlzdCk7Ci0gICAgYW5pbWF0aW9uLT5ib3hTaXplID0g
Ym94U2l6ZTsKLSAgICBhbmltYXRpb24tPm5hbWUgPSBrZXlmcmFtZXNOYW1lOwotICAgIGFuaW1h
dGlvbi0+YW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoYW5pbSk7Ci0gICAgYW5pbWF0aW9u
LT5wYXVzZWQgPSBmYWxzZTsKLSAgICBhbmltYXRpb24tPnN0YXJ0VGltZSA9IFdURjo6Y3VycmVu
dFRpbWUoKSAtIHRpbWVPZmZzZXQ7Ci0KLSAgICBpZiAodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0g
QW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkgewotICAgICAgICBib29sIGhhc0JpZ1Jv
dGF0aW9uOyAvLyBOb3QgdXNlZCwgYnV0IHJlcXVpcmVkIGFzIGEgcG9pbnRlciBwYXJhbWV0ZXIg
Zm9yIHRoZSBmdW5jdGlvbi4KLSAgICAgICAgZmV0Y2hUcmFuc2Zvcm1PcGVyYXRpb25MaXN0KHZh
bHVlTGlzdCwgYW5pbWF0aW9uLT5mdW5jdGlvbkxpc3QsIGFuaW1hdGlvbi0+bGlzdHNNYXRjaCwg
aGFzQmlnUm90YXRpb24pOwotICAgIH0KKyAgICBpZiAodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0g
QW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkKKyAgICAgICAgZmV0Y2hUcmFuc2Zvcm1P
cGVyYXRpb25MaXN0KHZhbHVlTGlzdCwgZnVuY3Rpb25MaXN0LCBsaXN0c01hdGNoLCBoYXNCaWdS
b3RhdGlvbik7CiAKLSAgICBtX2FuaW1hdGlvbnMuYXBwZW5kKGFuaW1hdGlvbik7CisgICAgbV9h
bmltYXRpb25zLmFkZChrZXlmcmFtZXNOYW1lLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKHZhbHVl
TGlzdCwgYm94U2l6ZSwgYW5pbSwgdGltZU9mZnNldCwgZnVuY3Rpb25MaXN0LCBsaXN0c01hdGNo
KSk7CiAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpBbmltYXRpb25DaGFuZ2Up
OwogICAgIG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLQogICAgIHJl
dHVybiB0cnVlOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpwYXVzZUFu
aW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KQog
ewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRpb25zLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvbnNbaV0tPm5hbWUgIT0gYW5pbWF0aW9uTmFtZSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBtX2FuaW1hdGlvbnNbaV0tPnBhdXNlZCA9IHRy
dWU7Ci0gICAgICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QW5pbWF0aW9uQ2hh
bmdlKTsKLSAgICB9CisgICAgbV9hbmltYXRpb25zLnBhdXNlKGFuaW1hdGlvbk5hbWUsIHRpbWVP
ZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpyZW1vdmVBbmlt
YXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQogewotICAgIGZvciAoaW50IGkgPSBt
X2FuaW1hdGlvbnMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgLy8gVGhlIHNh
bWUgYW5pbWF0aW9uIG5hbWUgY2FuIGJlIHVzZWQgZm9yIHR3byBhbmltYXRpb25zIHdpdGggZGlm
ZmVyZW50IHByb3BlcnRpZXMuIFdlIHNob3VsZCByZW1vdmUgYm90aC4KLSAgICAgICAgaWYgKG1f
YW5pbWF0aW9uc1tpXS0+bmFtZSAhPSBhbmltYXRpb25OYW1lKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIG1fYW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAgICAgIG5vdGlmeUNoYW5n
ZShUZXh0dXJlTWFwcGVyTm9kZTo6QW5pbWF0aW9uQ2hhbmdlKTsKLSAgICB9CisgICAgbV9hbmlt
YXRpb25zLnJlbW92ZShhbmltYXRpb25OYW1lKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQoVGltZXI8R3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI+KikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgK
aW5kZXggZWJiOWI1My4uMTcyZmRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLmgKQEAgLTk1LDcgKzk1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc3luY1F1ZXVl
ZDsKICAgICBpbnQgbV9jaGFuZ2VNYXNrOwogICAgIFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50
RGF0YSBtX3BlbmRpbmdDb250ZW50OwotICAgIFZlY3RvcjxSZWZQdHI8VGV4dHVyZU1hcHBlckFu
aW1hdGlvbj4gPiBtX2FuaW1hdGlvbnM7CisgICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgbV9h
bmltYXRpb25zOwogICAgIHZvaWQgYW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQoVGltZXI8R3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI+Kik7CiAgICAgVGltZXI8R3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI+IG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyQW5pbWF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjA4
M2E2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwCkBAIC0wLDAgKzEsMjU1IEBACisvKgor
IENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJBbmltYXRpb24uaCIKKworI2luY2x1ZGUgIkN1cnJlbnRU
aW1lLmgiCisjaW5jbHVkZSAiVW5pdEJlemllci5oIgorCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVS
KQorbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgZG91YmxlIG5vcm1hbGl6ZWRBbmltYXRp
b25WYWx1ZShkb3VibGUgcnVubmluZ1RpbWUsIGRvdWJsZSBkdXJhdGlvbiwgYm9vbCBhbHRlcm5h
dGUpCit7CisgICAgaWYgKCFkdXJhdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25z
dCBpbnQgbG9vcENvdW50ID0gcnVubmluZ1RpbWUgLyBkdXJhdGlvbjsKKyAgICBjb25zdCBkb3Vi
bGUgbGFzdEZ1bGxMb29wID0gZHVyYXRpb24gKiBkb3VibGUobG9vcENvdW50KTsKKyAgICBjb25z
dCBkb3VibGUgcmVtYWluZGVyID0gcnVubmluZ1RpbWUgLSBsYXN0RnVsbExvb3A7CisgICAgY29u
c3QgZG91YmxlIG5vcm1hbGl6ZWQgPSByZW1haW5kZXIgLyBkdXJhdGlvbjsKKyAgICByZXR1cm4g
KGxvb3BDb3VudCAlIDIgJiYgYWx0ZXJuYXRlKSA/ICgxIC0gbm9ybWFsaXplZCkgOiBub3JtYWxp
emVkOworfQorCitzdGF0aWMgZmxvYXQgYXBwbHlPcGFjaXR5QW5pbWF0aW9uKGZsb2F0IGZyb21P
cGFjaXR5LCBmbG9hdCB0b09wYWNpdHksIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICAvLyBPcHRp
bWl6YXRpb246IHNwZWNpYWwgY2FzZSB0aGUgZWRnZSB2YWx1ZXMgKDAgYW5kIDEpLgorICAgIGlm
IChwcm9ncmVzcyA9PSAxLjApCisgICAgICAgIHJldHVybiB0b09wYWNpdHk7CisKKyAgICBpZiAo
IXByb2dyZXNzKQorICAgICAgICByZXR1cm4gZnJvbU9wYWNpdHk7CisKKyAgICByZXR1cm4gZnJv
bU9wYWNpdHkgKyBwcm9ncmVzcyAqICh0b09wYWNpdHkgLSBmcm9tT3BhY2l0eSk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlRXBzaWxvbihkb3VibGUgZHVyYXRpb24pCit7CisgICAg
cmV0dXJuIDEuMCAvICgyMDAuMCAqIGR1cmF0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBkb3Vi
bGUgc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKGRvdWJsZSBwMXgsIGRvdWJsZSBwMXksIGRvdWJs
ZSBwMngsIGRvdWJsZSBwMnksIGRvdWJsZSB0LCBkb3VibGUgZHVyYXRpb24pCit7CisgICAgcmV0
dXJuIFVuaXRCZXppZXIocDF4LCBwMXksIHAyeCwgcDJ5KS5zb2x2ZSh0LCBzb2x2ZUVwc2lsb24o
ZHVyYXRpb24pKTsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVTdGVwc0Z1bmN0aW9u
KGludCBudW1TdGVwcywgYm9vbCBzdGVwQXRTdGFydCwgZG91YmxlIHQpCit7CisgICAgaWYgKHN0
ZXBBdFN0YXJ0KQorICAgICAgICByZXR1cm4gc3RkOjptaW4oMS4wLCAoZmxvb3IobnVtU3RlcHMg
KiB0KSArIDEpIC8gbnVtU3RlcHMpOworICAgIHJldHVybiBmbG9vcihudW1TdGVwcyAqIHQpIC8g
bnVtU3RlcHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgYXBwbHlUaW1pbmdGdW5jdGlvbihj
b25zdCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24sIGZsb2F0IHByb2dyZXNzLCBkb3Vi
bGUgZHVyYXRpb24pCit7CisgICAgaWYgKCF0aW1pbmdGdW5jdGlvbikKKyAgICAgICAgcmV0dXJu
IHByb2dyZXNzOworCisgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc0N1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb24oKSkgeworICAgICAgICBjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBj
dGYgPSBzdGF0aWNfY2FzdDxjb25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4odGltaW5n
RnVuY3Rpb24pOworICAgICAgICByZXR1cm4gc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKGN0Zi0+
eDEoKSwgY3RmLT55MSgpLCBjdGYtPngyKCksIGN0Zi0+eTIoKSwgcHJvZ3Jlc3MsIGR1cmF0aW9u
KTsKKyAgICB9CisKKyAgICBpZiAodGltaW5nRnVuY3Rpb24tPmlzU3RlcHNUaW1pbmdGdW5jdGlv
bigpKSB7CisgICAgICAgIGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qIHN0ZiA9IHN0YXRpY19j
YXN0PGNvbnN0IFN0ZXBzVGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbik7CisgICAgICAg
IHJldHVybiBzb2x2ZVN0ZXBzRnVuY3Rpb24oc3RmLT5udW1iZXJPZlN0ZXBzKCksIHN0Zi0+c3Rl
cEF0U3RhcnQoKSwgZG91YmxlKHByb2dyZXNzKSk7CisgICAgfQorCisgICAgcmV0dXJuIHByb2dy
ZXNzOworfQorCitzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggYXBwbHlUcmFuc2Zvcm1Bbmlt
YXRpb24oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogZnJvbSwgY29uc3QgVHJhbnNmb3JtT3Bl
cmF0aW9ucyogdG8sIGRvdWJsZSBwcm9ncmVzcywgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29u
c3QgVmVjdG9yPFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZT4gZnVuY3Rpb25MaXN0
LCBib29sIGxpc3RzTWF0Y2gpCit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4Owor
CisgICAgLy8gRmlyc3QgZnJhbWUgb2YgYW4gYW5pbWF0aW9uLgorICAgIGlmICghcHJvZ3Jlc3Mp
IHsKKyAgICAgICAgZnJvbS0+YXBwbHkoYm94U2l6ZSwgbWF0cml4KTsKKyAgICAgICAgcmV0dXJu
IG1hdHJpeDsKKyAgICB9CisKKyAgICAvLyBMYXN0IGZyYW1lIG9mIGFuIGFuaW1hdGlvbi4KKyAg
ICBpZiAocHJvZ3Jlc3MgPT0gMSkgeworICAgICAgICB0by0+YXBwbHkoYm94U2l6ZSwgbWF0cml4
KTsKKyAgICAgICAgcmV0dXJuIG1hdHJpeDsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBoYXZlIGlu
Y29tcGF0aWJsZSBvcGVyYXRpb24gbGlzdHMsIHdlIGJsZW5kIHRoZSByZXN1bHRpbmcgbWF0cmlj
ZXMuCisgICAgaWYgKCFsaXN0c01hdGNoKSB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGZyb21NYXRyaXg7CisgICAgICAgIHRvLT5hcHBseShib3hTaXplLCBtYXRyaXgpOworICAgICAg
ICBmcm9tLT5hcHBseShib3hTaXplLCBmcm9tTWF0cml4KTsKKyAgICAgICAgbWF0cml4LmJsZW5k
KGZyb21NYXRyaXgsIHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIG1hdHJpeDsKKyAgICB9CisK
KyAgICAvLyBBbmltYXRpb24gdG8gIi13ZWJraXQtdHJhbnNmb3JtOiBub25lIi4KKyAgICBpZiAo
IXRvLT5zaXplKCkpIHsKKyAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZGVkKCp0byk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25MaXN0LnNpemUoKTsgKytp
KQorICAgICAgICAgICAgYmxlbmRlZC5vcGVyYXRpb25zKClbaV0tPmJsZW5kKDAsIHByb2dyZXNz
LCB0cnVlKS0+YXBwbHkobWF0cml4LCBib3hTaXplKTsKKyAgICAgICAgcmV0dXJuIG1hdHJpeDsK
KyAgICB9CisKKyAgICAvLyBBbmltYXRpb24gZnJvbSAiLXdlYmtpdC10cmFuc2Zvcm06IG5vbmUi
LgorICAgIGlmICghZnJvbS0+c2l6ZSgpKSB7CisgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMg
YmxlbmRlZCgqZnJvbSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25M
aXN0LnNpemUoKTsgKytpKQorICAgICAgICAgICAgYmxlbmRlZC5vcGVyYXRpb25zKClbaV0tPmJs
ZW5kKDAsIDEuIC0gcHJvZ3Jlc3MsIHRydWUpLT5hcHBseShtYXRyaXgsIGJveFNpemUpOworICAg
ICAgICByZXR1cm4gbWF0cml4OworICAgIH0KKworICAgIC8vIE5vcm1hbCBhbmltYXRpb24gd2l0
aCBhIG1hdGNoaW5nIG9wZXJhdGlvbiBsaXN0LgorICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxl
bmRlZCgqdG8pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25MaXN0LnNpemUo
KTsgKytpKQorICAgICAgICBibGVuZGVkLm9wZXJhdGlvbnMoKVtpXS0+YmxlbmQoZnJvbS0+YXQo
aSksIHByb2dyZXNzLCAhZnJvbS0+YXQoaSkpLT5hcHBseShtYXRyaXgsIGJveFNpemUpOworICAg
IHJldHVybiBtYXRyaXg7Cit9CisKKworVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6VGV4dHVyZU1h
cHBlckFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzLCBjb25zdCBJ
bnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgZG91YmxlIHRpbWVP
ZmZzZXQsIGNvbnN0IFZlY3RvcjxUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGU+JiBm
dW5jdGlvbkxpc3QsIGJvb2wgbGlzdHNNYXRjaCkKKyAgICA6IG1fa2V5ZnJhbWVzKGtleWZyYW1l
cykKKyAgICAsIG1fYm94U2l6ZShib3hTaXplKQorICAgICwgbV9hbmltYXRpb24oQW5pbWF0aW9u
OjpjcmVhdGUoYW5pbWF0aW9uKSkKKyAgICAsIG1fZnVuY3Rpb25MaXN0KGZ1bmN0aW9uTGlzdCkK
KyAgICAsIG1fbGlzdHNNYXRjaChsaXN0c01hdGNoKQorICAgICwgbV9zdGFydFRpbWUoV1RGOjpj
dXJyZW50VGltZSgpIC0gdGltZU9mZnNldCkKKyAgICAsIG1fcGF1c2VUaW1lKDApCisgICAgLCBt
X3N0YXRlKFBsYXlpbmdTdGF0ZSkKK3sKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
OjphcHBseUludGVybmFsKFRleHR1cmVNYXBwZXJBbmltYXRpb25DbGllbnQqIGNsaWVudCwgY29u
c3QgQW5pbWF0aW9uVmFsdWUqIGZyb20sIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB0bywgZmxvYXQg
cHJvZ3Jlc3MpCit7CisgICAgc3dpdGNoIChtX2tleWZyYW1lcy5wcm9wZXJ0eSgpKSB7CisgICAg
Y2FzZSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eToKKyAgICAgICAgY2xpZW50LT5zZXRPcGFjaXR5
KGFwcGx5T3BhY2l0eUFuaW1hdGlvbigoc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRpb25W
YWx1ZSo+KGZyb20pLT52YWx1ZSgpKSwgKHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9u
VmFsdWUqPih0byktPnZhbHVlKCkpLCBwcm9ncmVzcykpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtOgorICAgICAgICBjbGllbnQtPnNl
dFRyYW5zZm9ybShhcHBseVRyYW5zZm9ybUFuaW1hdGlvbihzdGF0aWNfY2FzdDxjb25zdCBUcmFu
c2Zvcm1BbmltYXRpb25WYWx1ZSo+KGZyb20pLT52YWx1ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBU
cmFuc2Zvcm1BbmltYXRpb25WYWx1ZSo+KHRvKS0+dmFsdWUoKSwgcHJvZ3Jlc3MsIG1fYm94U2l6
ZSwgbV9mdW5jdGlvbkxpc3QsIG1fbGlzdHNNYXRjaCkpOworICAgICAgICByZXR1cm47CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitib29s
IFRleHR1cmVNYXBwZXJBbmltYXRpb246OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICBpZiAoc3Rh
dGUoKSAhPSBTdG9wcGVkU3RhdGUpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJu
IG1fYW5pbWF0aW9uLT5maWxsc0ZvcndhcmRzKCk7Cit9CisKK2Jvb2wgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbnM6Omhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eUlEIHR5
cGUpIGNvbnN0Cit7CisgICAgSGFzaE1hcDxTdHJpbmcsIFRleHR1cmVNYXBwZXJBbmltYXRpb24+
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChIYXNo
TWFwPFN0cmluZywgVGV4dHVyZU1hcHBlckFuaW1hdGlvbj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBjb25zdCBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24gPSBpdC0+c2Vjb25kOworICAgICAgICBp
ZiAoYW5pbWF0aW9uLmlzQWN0aXZlKCkgJiYgYW5pbWF0aW9uLnByb3BlcnR5KCkgPT0gdHlwZSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6Omhhc1J1bm5pbmdBbmltYXRpb25zKCkgY29u
c3QKK3sKKyAgICBIYXNoTWFwPFN0cmluZywgVGV4dHVyZU1hcHBlckFuaW1hdGlvbj46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8U3Ry
aW5nLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1h
dGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0IFRleHR1cmVN
YXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChhbmlt
YXRpb24uc3RhdGUoKSA9PSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpQbGF5aW5nU3RhdGUpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6YXBwbHkoVGV4dHVyZU1hcHBlckFuaW1hdGlv
bkNsaWVudCogY2xpZW50KQoreworICAgIGlmIChzdGF0ZSgpID09IFN0b3BwZWRTdGF0ZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZG91YmxlIHRvdGFsUnVubmluZ1RpbWUgPSBtX3N0YXRlID09
IFBhdXNlZFN0YXRlID8gbV9wYXVzZVRpbWUgOiBXVEY6OmN1cnJlbnRUaW1lKCkgLSBtX3N0YXJ0
VGltZTsKKyAgICBkb3VibGUgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplZEFuaW1hdGlvblZh
bHVlKHRvdGFsUnVubmluZ1RpbWUsIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpLCBtX2FuaW1hdGlv
bi0+ZGlyZWN0aW9uKCkpOworCisgICAgaWYgKG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgp
ICE9IEFuaW1hdGlvbjo6SXRlcmF0aW9uQ291bnRJbmZpbml0ZSAmJiB0b3RhbFJ1bm5pbmdUaW1l
ID49IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpICogbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50
KCkpCisgICAgICAgIHNldFN0YXRlKFN0b3BwZWRTdGF0ZSk7CisKKyAgICBpZiAoIW5vcm1hbGl6
ZWRWYWx1ZSkgeworICAgICAgICBhcHBseUludGVybmFsKGNsaWVudCwgbV9rZXlmcmFtZXMuYXQo
MCksIG1fa2V5ZnJhbWVzLmF0KDEpLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAobm9ybWFsaXplZFZhbHVlID09IDEuMCkgeworICAgICAgICBhcHBseUludGVybmFsKGNsaWVu
dCwgbV9rZXlmcmFtZXMuYXQobV9rZXlmcmFtZXMuc2l6ZSgpIC0gMiksIG1fa2V5ZnJhbWVzLmF0
KG1fa2V5ZnJhbWVzLnNpemUoKSAtIDEpLCAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAobV9rZXlmcmFtZXMuc2l6ZSgpID09IDIpIHsKKyAgICAgICAgbm9ybWFsaXplZFZhbHVl
ID0gYXBwbHlUaW1pbmdGdW5jdGlvbihtX2FuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS5nZXQo
KSwgbm9ybWFsaXplZFZhbHVlLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSk7CisgICAgICAgIGFw
cGx5SW50ZXJuYWwoY2xpZW50LCBtX2tleWZyYW1lcy5hdCgwKSwgbV9rZXlmcmFtZXMuYXQoMSks
IG5vcm1hbGl6ZWRWYWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICBj
b25zdCBBbmltYXRpb25WYWx1ZSogZnJvbSA9IG1fa2V5ZnJhbWVzLmF0KGkpOworICAgICAgICBj
b25zdCBBbmltYXRpb25WYWx1ZSogdG8gPSBtX2tleWZyYW1lcy5hdChpICsgMSk7CisgICAgICAg
IGlmIChmcm9tLT5rZXlUaW1lKCkgPiBub3JtYWxpemVkVmFsdWUgfHwgdG8tPmtleVRpbWUoKSA8
IG5vcm1hbGl6ZWRWYWx1ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG5vcm1h
bGl6ZWRWYWx1ZSA9IChub3JtYWxpemVkVmFsdWUgLSBmcm9tLT5rZXlUaW1lKCkpIC8gKHRvLT5r
ZXlUaW1lKCkgLSBmcm9tLT5rZXlUaW1lKCkpOworICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBh
cHBseVRpbWluZ0Z1bmN0aW9uKGZyb20tPnRpbWluZ0Z1bmN0aW9uKCksIG5vcm1hbGl6ZWRWYWx1
ZSwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpOworICAgICAgICBhcHBseUludGVybmFsKGNsaWVu
dCwgZnJvbSwgdG8sIG5vcm1hbGl6ZWRWYWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpwYXVzZShkb3VibGUgb2Zmc2V0KQorewor
ICAgIC8vIEZJWE1FOiBzaG91bGQgYXBwbHkgb2Zmc2V0IGhlcmUuCisgICAgc2V0U3RhdGUoUGF1
c2VkU3RhdGUpOworICAgIG1fcGF1c2VUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpIC0gb2Zmc2V0
OworfQorCit2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjpwYXVzZShjb25zdCBTdHJpbmcm
IG5hbWUsIGRvdWJsZSBvZmZzZXQpCit7CisgICAgSGFzaE1hcDxTdHJpbmcsIFRleHR1cmVNYXBw
ZXJBbmltYXRpb24+OjppdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5maW5kKG5hbWUpOworICAg
IGlmIChpdCA9PSBtX2FuaW1hdGlvbnMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpdC0+
c2Vjb25kLnBhdXNlKG9mZnNldCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnM6
OmFwcGx5KFRleHR1cmVNYXBwZXJBbmltYXRpb25DbGllbnQqIGNsaWVudCkKK3sKKyAgICBIYXNo
TWFwPFN0cmluZywgVGV4dHVyZU1hcHBlckFuaW1hdGlvbj46Oml0ZXJhdG9yIGVuZCA9IG1fYW5p
bWF0aW9ucy5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQorICAgICAgICBpdC0+c2Vjb25kLmFwcGx5KGNsaWVudCk7Cit9CisKK30KKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNWUyMjZlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgKQEAgLTAsMCArMSw4
NiBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgVGV4
dHVyZU1hcHBlckFuaW1hdGlvbl9oCisjZGVmaW5lIFRleHR1cmVNYXBwZXJBbmltYXRpb25faAor
CisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkhhc2hNYXAuaCIKKyNpbmNs
dWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgVGV4dHVyZU1hcHBlckFuaW1hdGlvbkNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgPSAwOworfTsKKworY2xhc3MgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBBbmltYXRpb25TdGF0ZSB7IFBs
YXlpbmdTdGF0ZSwgUGF1c2VkU3RhdGUsIFN0b3BwZWRTdGF0ZSB9OworCisgICAgVGV4dHVyZU1h
cHBlckFuaW1hdGlvbigpCisgICAgICAgIDogbV9rZXlmcmFtZXMoQW5pbWF0ZWRQcm9wZXJ0eUlu
dmFsaWQpCisgICAgeyB9CisgICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbihjb25zdCBLZXlmcmFt
ZVZhbHVlTGlzdCYsIGNvbnN0IEludFNpemUmLCBjb25zdCBBbmltYXRpb24qLCBkb3VibGUsIGNv
bnN0IFZlY3RvcjxUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGU+JiwgYm9vbCk7Cisg
ICAgdm9pZCBhcHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50Kik7CisgICAgdm9pZCBw
YXVzZShkb3VibGUpOworICAgIEFuaW1hdGlvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZTsgfQorICAgIHZvaWQgc2V0U3RhdGUoQW5pbWF0aW9uU3RhdGUgcykgeyBtX3N0YXRl
ID0gczsgfQorICAgIEFuaW1hdGVkUHJvcGVydHlJRCBwcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fa2V5ZnJhbWVzLnByb3BlcnR5KCk7IH0KKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBhcHBseUludGVybmFsKFRleHR1cmVNYXBwZXJBbmltYXRpb25D
bGllbnQqLCBjb25zdCBBbmltYXRpb25WYWx1ZSogZnJvbSwgY29uc3QgQW5pbWF0aW9uVmFsdWUq
IHRvLCBmbG9hdCBwcm9ncmVzcyk7CisgICAgS2V5ZnJhbWVWYWx1ZUxpc3QgbV9rZXlmcmFtZXM7
CisgICAgSW50U2l6ZSBtX2JveFNpemU7CisgICAgUmVmUHRyPEFuaW1hdGlvbj4gbV9hbmltYXRp
b247CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBWZWN0b3I8VHJhbnNmb3JtT3BlcmF0aW9uOjpP
cGVyYXRpb25UeXBlPiBtX2Z1bmN0aW9uTGlzdDsKKyAgICBib29sIG1fbGlzdHNNYXRjaDsKKyAg
ICBib29sIG1faGFzQmlnUm90YXRpb247CisgICAgZG91YmxlIG1fc3RhcnRUaW1lOworICAgIGRv
dWJsZSBtX3BhdXNlVGltZTsKKyAgICBBbmltYXRpb25TdGF0ZSBtX3N0YXRlOworfTsKKworY2xh
c3MgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgeworcHVibGljOgorICAgIFRleHR1cmVNYXBwZXJB
bmltYXRpb25zKCkgeyB9CisKKyAgICB2b2lkIGFkZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbikgeyBtX2FuaW1hdGlvbnMuYWRkKG5h
bWUsIGFuaW1hdGlvbik7IH0KKyAgICB2b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpIHsg
bV9hbmltYXRpb25zLnJlbW92ZShuYW1lKTsgfQorICAgIHZvaWQgcGF1c2UoY29uc3QgU3RyaW5n
JiwgZG91YmxlKTsKKyAgICB2b2lkIGFwcGx5KFRleHR1cmVNYXBwZXJBbmltYXRpb25DbGllbnQq
KTsKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbnMuaXNFbXB0
eSgpOyB9CisKKyAgICBib29sIGhhc1J1bm5pbmdBbmltYXRpb25zKCkgY29uc3Q7CisgICAgYm9v
bCBoYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlJRCB0eXBlKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBIYXNoTWFwPFN0cmluZywgVGV4dHVyZU1hcHBlckFuaW1hdGlv
bj4gbV9hbmltYXRpb25zOworfTsKKworfQorI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUikK
KworI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJBbmltYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5jcHAKaW5kZXggMjc2MjUxNy4uMjE3YTk1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3Bw
CkBAIC01ODUsMTEgKzU4NSw4IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3Np
dGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhCiAgICAgICAgICAg
IGxheWVyLT5tX2VmZmVjdFRhcmdldCA9IHRoaXM7CiAgICAgfQogCi0gICAgaWYgKGNoYW5nZU1h
c2sgJiBBbmltYXRpb25DaGFuZ2UpIHsKLSAgICAgICAgbV9hbmltYXRpb25zLmNsZWFyKCk7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3JhcGhpY3NMYXllci0+bV9hbmltYXRpb25z
LnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9hbmltYXRpb25zLmFwcGVuZChncmFwaGljc0xh
eWVyLT5tX2FuaW1hdGlvbnNbaV0pOwotICAgIH0KKyAgICBpZiAoY2hhbmdlTWFzayAmIEFuaW1h
dGlvbkNoYW5nZSkKKyAgICAgICAgbV9hbmltYXRpb25zID0gZ3JhcGhpY3NMYXllci0+bV9hbmlt
YXRpb25zOwogCiAgICAgbV9zdGF0ZS5tYXNrTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGdy
YXBoaWNzTGF5ZXItPm1hc2tMYXllcigpKTsKICAgICBtX3N0YXRlLnJlcGxpY2FMYXllciA9IHRv
VGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhpY3NMYXllci0+cmVwbGljYUxheWVyKCkpOwpAQCAtNjE0
LDExICs2MTEsNiBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0
ZVNlbGYoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYQogICAgIGlmICghbV9jdXJyZW50
Q29udGVudC5uZWVkc0Rpc3BsYXkpCiAgICAgICAgIG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNw
bGF5UmVjdC51bml0ZShwZW5kaW5nQ29udGVudC5uZWVkc0Rpc3BsYXlSZWN0KTsKIAotICAgIGlm
ICghaGFzT3BhY2l0eUFuaW1hdGlvbigpKQotICAgICAgICBtX29wYWNpdHkgPSBtX3N0YXRlLm9w
YWNpdHk7Ci0gICAgaWYgKCFoYXNUcmFuc2Zvcm1BbmltYXRpb24oKSkKLSAgICAgICAgbV90cmFu
c2Zvcm0uc2V0TG9jYWxUcmFuc2Zvcm0obV9zdGF0ZS50cmFuc2Zvcm0pOwotCiAgICAgbV90cmFu
c2Zvcm0uc2V0UG9zaXRpb24obV9zdGF0ZS5wb3MpOwogICAgIG1fdHJhbnNmb3JtLnNldEFuY2hv
clBvaW50KG1fc3RhdGUuYW5jaG9yUG9pbnQpOwogICAgIG1fdHJhbnNmb3JtLnNldFNpemUobV9z
dGF0ZS5zaXplKTsKQEAgLTYyOCwxMCArNjIwLDggQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEK
IAogYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0Fu
aW1hdGlvbnMoKSBjb25zdAogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRp
b25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9hbmltYXRpb25zW2ldLT5wYXVzZWQp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgaWYgKG1fYW5pbWF0aW9ucy5o
YXNSdW5uaW5nQW5pbWF0aW9ucygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAo
bV9jaGlsZHJlbltpXS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkK
QEAgLTY0MSwxOTcgKzYzMSwxOCBAQCBib29sIFRleHR1cmVNYXBwZXJOb2RlOjpkZXNjZW5kYW50
c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1zdGF0aWMgZG91YmxlIG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZShkb3VibGUgcnVubmlu
Z1RpbWUsIGRvdWJsZSBkdXJhdGlvbiwgYm9vbCBhbHRlcm5hdGUpCi17Ci0gICAgaWYgKCFkdXJh
dGlvbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY29uc3QgaW50IGxvb3BDb3VudCA9IHJ1bm5p
bmdUaW1lIC8gZHVyYXRpb247Ci0gICAgY29uc3QgZG91YmxlIGxhc3RGdWxsTG9vcCA9IGR1cmF0
aW9uICogZG91YmxlKGxvb3BDb3VudCk7Ci0gICAgY29uc3QgZG91YmxlIHJlbWFpbmRlciA9IHJ1
bm5pbmdUaW1lIC0gbGFzdEZ1bGxMb29wOwotICAgIGNvbnN0IGRvdWJsZSBub3JtYWxpemVkID0g
cmVtYWluZGVyIC8gZHVyYXRpb247Ci0gICAgcmV0dXJuIChsb29wQ291bnQgJSAyICYmIGFsdGVy
bmF0ZSkgPyAoMSAtIG5vcm1hbGl6ZWQpIDogbm9ybWFsaXplZDsKLX0KLQotdm9pZCBUZXh0dXJl
TWFwcGVyTm9kZTo6YXBwbHlPcGFjaXR5QW5pbWF0aW9uKGZsb2F0IGZyb21PcGFjaXR5LCBmbG9h
dCB0b09wYWNpdHksIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICAvLyBPcHRpbWl6YXRpb246IHNw
ZWNpYWwgY2FzZSB0aGUgZWRnZSB2YWx1ZXMgKDAgYW5kIDEpLgotICAgIGlmIChwcm9ncmVzcyA9
PSAxLjApCi0gICAgICAgIHNldE9wYWNpdHkodG9PcGFjaXR5KTsKLSAgICBlbHNlIGlmICghcHJv
Z3Jlc3MpCi0gICAgICAgIHNldE9wYWNpdHkoZnJvbU9wYWNpdHkpOwotICAgIGVsc2UKLSAgICAg
ICAgc2V0T3BhY2l0eShmcm9tT3BhY2l0eSArIHByb2dyZXNzICogKHRvT3BhY2l0eSAtIGZyb21P
cGFjaXR5KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG91YmxlIHNvbHZlRXBzaWxvbihkb3VibGUg
ZHVyYXRpb24pCi17Ci0gICAgcmV0dXJuIDEuMCAvICgyMDAuMCAqIGR1cmF0aW9uKTsKLX0KLQot
c3RhdGljIGlubGluZSBkb3VibGUgc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKGRvdWJsZSBwMXgs
IGRvdWJsZSBwMXksIGRvdWJsZSBwMngsIGRvdWJsZSBwMnksIGRvdWJsZSB0LCBkb3VibGUgZHVy
YXRpb24pCi17Ci0gICAgVW5pdEJlemllciBiZXppZXIocDF4LCBwMXksIHAyeCwgcDJ5KTsKLSAg
ICByZXR1cm4gYmV6aWVyLnNvbHZlKHQsIHNvbHZlRXBzaWxvbihkdXJhdGlvbikpOwotfQotCi1z
dGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZVN0ZXBzRnVuY3Rpb24oaW50IG51bVN0ZXBzLCBib29s
IHN0ZXBBdFN0YXJ0LCBkb3VibGUgdCkKLXsKLSAgICBpZiAoc3RlcEF0U3RhcnQpCi0gICAgICAg
IHJldHVybiBzdGQ6Om1pbigxLjAsIChmbG9vcihudW1TdGVwcyAqIHQpICsgMSkgLyBudW1TdGVw
cyk7Ci0gICAgcmV0dXJuIGZsb29yKG51bVN0ZXBzICogdCkgLyBudW1TdGVwczsKLX0KLQotc3Rh
dGljIGlubGluZSBmbG9hdCBhcHBseVRpbWluZ0Z1bmN0aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9u
KiB0aW1pbmdGdW5jdGlvbiwgZmxvYXQgcHJvZ3Jlc3MsIGRvdWJsZSBkdXJhdGlvbikKLXsKLSAg
ICBpZiAoIXRpbWluZ0Z1bmN0aW9uKQotICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7Ci0KLSAgICBp
ZiAodGltaW5nRnVuY3Rpb24tPmlzQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbigpKSB7Ci0gICAg
ICAgIGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qIGN0ZiA9IHN0YXRpY19jYXN0PGNv
bnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbik7Ci0gICAgICAg
IHJldHVybiBzb2x2ZUN1YmljQmV6aWVyRnVuY3Rpb24oY3RmLT54MSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0Zi0+eTEoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjdGYtPngyKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3RmLT55MigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByb2dyZXNzLCBkdXJhdGlvbik7Ci0gICAgfQotCi0gICAgaWYgKHRpbWlu
Z0Z1bmN0aW9uLT5pc1N0ZXBzVGltaW5nRnVuY3Rpb24oKSkgewotICAgICAgICBjb25zdCBTdGVw
c1RpbWluZ0Z1bmN0aW9uKiBzdGYgPSBzdGF0aWNfY2FzdDxjb25zdCBTdGVwc1RpbWluZ0Z1bmN0
aW9uKj4odGltaW5nRnVuY3Rpb24pOwotICAgICAgICByZXR1cm4gc29sdmVTdGVwc0Z1bmN0aW9u
KHN0Zi0+bnVtYmVyT2ZTdGVwcygpLCBzdGYtPnN0ZXBBdFN0YXJ0KCksIGRvdWJsZShwcm9ncmVz
cykpOwotICAgIH0KLQotICAgIHJldHVybiBwcm9ncmVzczsKLX0KLQotdm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6YXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1h
dGlvbiYgYW5pbWF0aW9uLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBmcm9tLCBjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb25zKiB0bywgZG91YmxlIHByb2dyZXNzKQordm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6c3luY0FuaW1hdGlvbnMoKQogewotICAgIC8vIE9wdGltaXphdGlvbjogc3BlY2lh
bCBjYXNlIHRoZSBlZGdlIHZhbHVlcyAoMCBhbmQgMSkuCi0gICAgaWYgKHByb2dyZXNzID09IDEu
MCB8fCAhcHJvZ3Jlc3MpIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4Owot
ICAgICAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBvcHMgPSBwcm9ncmVzcyA/IHRvIDog
ZnJvbTsKLSAgICAgICAgb3BzLT5hcHBseShhbmltYXRpb24uYm94U2l6ZSwgbWF0cml4KTsKLSAg
ICAgICAgc2V0VHJhbnNmb3JtKG1hdHJpeCk7Ci0gICAgfQotCi0gICAgaWYgKCFhbmltYXRpb24u
bGlzdHNNYXRjaCkgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0b01hdHJpeCwgZnJv
bU1hdHJpeDsKLSAgICAgICAgdG8tPmFwcGx5KGFuaW1hdGlvbi5ib3hTaXplLCB0b01hdHJpeCk7
Ci0gICAgICAgIGZyb20tPmFwcGx5KGFuaW1hdGlvbi5ib3hTaXplLCBmcm9tTWF0cml4KTsKLSAg
ICAgICAgdG9NYXRyaXguYmxlbmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3MpOwotICAgICAgICBzZXRU
cmFuc2Zvcm0odG9NYXRyaXgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbWF0cml4OwotCi0gICAgaWYgKCF0by0+c2l6ZSgpKSB7Ci0gICAgICAg
IGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHN3YXAgPSB0bzsKLSAgICAgICAgdG8gPSBmcm9t
OwotICAgICAgICBmcm9tID0gc3dhcDsKLSAgICB9IGVsc2UgaWYgKCFmcm9tLT5zaXplKCkpCi0g
ICAgICAgIHByb2dyZXNzID0gMS4wIC0gcHJvZ3Jlc3M7Ci0KLSAgICBUcmFuc2Zvcm1PcGVyYXRp
b25zIGJsZW5kZWQoKnRvKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1hdGlvbi5m
dW5jdGlvbkxpc3Quc2l6ZSgpOyArK2kpCi0gICAgICAgIGJsZW5kZWQub3BlcmF0aW9ucygpW2ld
LT5ibGVuZChmcm9tLT5hdChpKSwgcHJvZ3Jlc3MsICFmcm9tLT5hdChpKSktPmFwcGx5KG1hdHJp
eCwgYW5pbWF0aW9uLmJveFNpemUpOwotCi0gICAgc2V0VHJhbnNmb3JtKG1hdHJpeCk7Ci19Ci0K
LXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmFwcGx5QW5pbWF0aW9uRnJhbWUoY29uc3QgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uLCBjb25zdCBBbmltYXRpb25WYWx1ZSogZnJvbSwg
Y29uc3QgQW5pbWF0aW9uVmFsdWUqIHRvLCBmbG9hdCBwcm9ncmVzcykKLXsKLSAgICBzd2l0Y2gg
KGFuaW1hdGlvbi5rZXlmcmFtZXMucHJvcGVydHkoKSkgewotICAgIGNhc2UgQW5pbWF0ZWRQcm9w
ZXJ0eU9wYWNpdHk6Ci0gICAgICAgIGFwcGx5T3BhY2l0eUFuaW1hdGlvbigoc3RhdGljX2Nhc3Q8
Y29uc3QgRmxvYXRBbmltYXRpb25WYWx1ZSo+KGZyb20pLT52YWx1ZSgpKSwgKHN0YXRpY19jYXN0
PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUqPih0byktPnZhbHVlKCkpLCBwcm9ncmVzcyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06
Ci0gICAgICAgIGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKGFuaW1hdGlvbiwgc3RhdGljX2Nhc3Q8
Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqPihmcm9tKS0+dmFsdWUoKSwgc3RhdGljX2Nh
c3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqPih0byktPnZhbHVlKCksIHByb2dyZXNz
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6YXBwbHlBbmltYXRp
b24oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uLCBkb3VibGUgbm9ybWFs
aXplZFZhbHVlKQotewotICAgIC8vIE9wdGltaXphdGlvbjogc3BlY2lhbCBjYXNlIHRoZSBlZGdl
IHZhbHVlcyAoMCBhbmQgMSkuCi0gICAgaWYgKCFub3JtYWxpemVkVmFsdWUpIHsKLSAgICAgICAg
YXBwbHlBbmltYXRpb25GcmFtZShhbmltYXRpb24sIGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoMCks
IGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoMSksIDApOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlmIChub3JtYWxpemVkVmFsdWUgPT0gMS4wKSB7Ci0gICAgICAgIGFwcGx5QW5pbWF0aW9u
RnJhbWUoYW5pbWF0aW9uLCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KGFuaW1hdGlvbi5rZXlmcmFt
ZXMuc2l6ZSgpIC0gMiksIGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoYW5pbWF0aW9uLmtleWZyYW1l
cy5zaXplKCkgLSAxKSwgMSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGFuaW1h
dGlvbi5rZXlmcmFtZXMuc2l6ZSgpID09IDIpIHsKLSAgICAgICAgbm9ybWFsaXplZFZhbHVlID0g
YXBwbHlUaW1pbmdGdW5jdGlvbihhbmltYXRpb24uYW5pbWF0aW9uLT50aW1pbmdGdW5jdGlvbigp
LmdldCgpLCBub3JtYWxpemVkVmFsdWUsIGFuaW1hdGlvbi5hbmltYXRpb24tPmR1cmF0aW9uKCkp
OwotICAgICAgICBhcHBseUFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvbiwgYW5pbWF0aW9uLmtleWZy
YW1lcy5hdCgwKSwgYW5pbWF0aW9uLmtleWZyYW1lcy5hdCgxKSwgbm9ybWFsaXplZFZhbHVlKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYW5p
bWF0aW9uLmtleWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAgICAgY29uc3QgQW5pbWF0
aW9uVmFsdWUqIGZyb20gPSBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KGkpOwotICAgICAgICBjb25z
dCBBbmltYXRpb25WYWx1ZSogdG8gPSBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KGkgKyAxKTsKLSAg
ICAgICAgaWYgKGZyb20tPmtleVRpbWUoKSA+IG5vcm1hbGl6ZWRWYWx1ZSB8fCB0by0+a2V5VGlt
ZSgpIDwgbm9ybWFsaXplZFZhbHVlKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
bm9ybWFsaXplZFZhbHVlID0gKG5vcm1hbGl6ZWRWYWx1ZSAtIGZyb20tPmtleVRpbWUoKSkgLyAo
dG8tPmtleVRpbWUoKSAtIGZyb20tPmtleVRpbWUoKSk7Ci0gICAgICAgIG5vcm1hbGl6ZWRWYWx1
ZSA9IGFwcGx5VGltaW5nRnVuY3Rpb24oZnJvbS0+dGltaW5nRnVuY3Rpb24oKSwgbm9ybWFsaXpl
ZFZhbHVlLCBhbmltYXRpb24uYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKLSAgICAgICAgYXBwbHlB
bmltYXRpb25GcmFtZShhbmltYXRpb24sIGZyb20sIHRvLCBub3JtYWxpemVkVmFsdWUpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci19Ci0KLWJvb2wgVGV4dHVyZU1hcHBlck5vZGU6Omhhc09wYWNp
dHlBbmltYXRpb24oKSBjb25zdAotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmlt
YXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRp
b24mIGFuaW1hdGlvbiA9ICptX2FuaW1hdGlvbnNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChhbmlt
YXRpb24ua2V5ZnJhbWVzLnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIFRleHR1cmVNYXBwZXJOb2RlOjpoYXNUcmFuc2Zvcm1BbmltYXRpb24oKSBjb25zdAotewot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiA9ICptX2FuaW1h
dGlvbnNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChhbmltYXRpb24ua2V5ZnJhbWVzLnByb3BlcnR5
KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OnN5bmNBbmltYXRpb25zKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBsYXllcikK
LXsKLSAgICBmb3IgKGludCBpID0gbV9hbmltYXRpb25zLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1p
KSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiBhbmltYXRpb24gPSBt
X2FuaW1hdGlvbnNbaV07Ci0KLSAgICAgICAgZG91YmxlIHRvdGFsUnVubmluZ1RpbWUgPSBXVEY6
OmN1cnJlbnRUaW1lKCkgLSBhbmltYXRpb24tPnN0YXJ0VGltZTsKLSAgICAgICAgUmVmUHRyPEFu
aW1hdGlvbj4gYW5pbSA9IGFuaW1hdGlvbi0+YW5pbWF0aW9uOwotICAgICAgICBkb3VibGUgbm9y
bWFsaXplZFZhbHVlID0gbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlKHRvdGFsUnVubmluZ1RpbWUs
IGFuaW0tPmR1cmF0aW9uKCksIGFuaW0tPmRpcmVjdGlvbigpKTsKLQotICAgICAgICBpZiAoYW5p
bS0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmltYXRpb246Okl0ZXJhdGlvbkNvdW50SW5maW5pdGUg
JiYgdG90YWxSdW5uaW5nVGltZSA+PSBhbmltLT5kdXJhdGlvbigpICogYW5pbS0+aXRlcmF0aW9u
Q291bnQoKSkgewotICAgICAgICAgICAgLy8gV2UgYXBwbHkgYW4gYW5pbWF0aW9uIHRoYXQgdmVy
eSBjbG9zZSB0byB0aGUgZWRnZSwgc28gdGhhdCB0aGUgZmluYWwgZnJhbWUgaXMgYXBwbGllZCwg
b3Rlcndpc2Ugd2UgbWlnaHQgZ2V0LCBmb3IgZXhhbXBsZSwgYW4gb3BhY2l0eSBvZiAwLjAxIHdo
aWNoIGlzIHN0aWxsIHZpc2libGUuCi0gICAgICAgICAgICBpZiAoYW5pbS0+ZmlsbHNGb3J3YXJk
cygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFuaW1hdGlvbi0+a2V5ZnJhbWVzLnByb3BlcnR5
KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkKLSAgICAgICAgICAgICAgICAg
ICAgc2V0VHJhbnNmb3JtKG1fc3RhdGUudHJhbnNmb3JtKTsKLSAgICAgICAgICAgICAgICBlbHNl
IGlmIChhbmltYXRpb24tPmtleWZyYW1lcy5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlP
cGFjaXR5KQotICAgICAgICAgICAgICAgICAgICBzZXRPcGFjaXR5KG1fc3RhdGUub3BhY2l0eSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1fYW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghYW5pbWF0aW9u
LT5wYXVzZWQpCi0gICAgICAgICAgICBhcHBseUFuaW1hdGlvbigqYW5pbWF0aW9uLmdldCgpLCBu
b3JtYWxpemVkVmFsdWUpOwotICAgIH0KKyAgICBtX2FuaW1hdGlvbnMuYXBwbHkodGhpcyk7Cisg
ICAgaWYgKCFtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFBy
b3BlcnR5V2Via2l0VHJhbnNmb3JtKSkKKyAgICAgICAgc2V0VHJhbnNmb3JtKG1fc3RhdGUudHJh
bnNmb3JtKTsKKyAgICBpZiAoIW1fYW5pbWF0aW9ucy5oYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBl
KEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSkKKyAgICAgICAgc2V0T3BhY2l0eShtX3N0YXRlLm9w
YWNpdHkpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQW5pbWF0aW9uc1JlY3Vy
c2l2ZWx5KCkKIHsKLSAgICBzeW5jQW5pbWF0aW9ucygwKTsKKyAgICBzeW5jQW5pbWF0aW9ucygp
OwogCiAgICAgZm9yIChpbnQgaSA9IG1fY2hpbGRyZW4uc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkp
CiAgICAgICAgIG1fY2hpbGRyZW5baV0tPnN5bmNBbmltYXRpb25zUmVjdXJzaXZlbHkoKTsKQEAg
LTg1NSw4ICs2NjYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdT
dGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpYwogICAgIGlmIChtX3N0YXRl
LnJlcGxpY2FMYXllcikKICAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPnN5bmNDb21wb3Np
dGluZ1N0YXRlKHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoZ3JhcGhpY3NMYXllci0+cmVw
bGljYUxheWVyKCkpLCB0ZXh0dXJlTWFwcGVyKTsKIAotICAgIHN5bmNBbmltYXRpb25zKGdyYXBo
aWNzTGF5ZXIpOwotCisgICAgc3luY0FuaW1hdGlvbnMoKTsKICAgICBjb21wdXRlVGlsZXMoKTsK
IAogICAgIGlmIChncmFwaGljc0xheWVyKQpAQCAtODc5LDExICs2ODksNSBAQCB2b2lkIFRleHR1
cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlciogZ3JhcGhpYwogICAgIH0KIH0KIAotVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6VGV4dHVy
ZU1hcHBlckFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVzKQotICAgIDog
a2V5ZnJhbWVzKHZhbHVlcykKLXsKIH0KLQotfQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2Rl
LmgKaW5kZXggZTY0NjcyYi4uMjdiZmYxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKQEAgLTI3
LDEwICsyNyw5IEBACiAjaW5jbHVkZSAiSW50UG9pbnRIYXNoLmgiCiAjaW5jbHVkZSAiTGF5ZXJU
cmFuc2Zvcm0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiVHJhbnNm
b3JtT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5o
IgotI2luY2x1ZGUgIlVuaXRCZXppZXIuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBA
IC01NywyMiArNTYsNyBAQCBwdWJsaWM6CiAgICAgeyB9CiB9OwogCi1jbGFzcyBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4g
ewotcHVibGljOgotICAgIFN0cmluZyBuYW1lOwotICAgIEtleWZyYW1lVmFsdWVMaXN0IGtleWZy
YW1lczsKLSAgICBJbnRTaXplIGJveFNpemU7Ci0gICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0
aW9uOwotICAgIGJvb2wgcGF1c2VkOwotICAgIFZlY3RvcjxUcmFuc2Zvcm1PcGVyYXRpb246Ok9w
ZXJhdGlvblR5cGU+IGZ1bmN0aW9uTGlzdDsKLSAgICBib29sIGxpc3RzTWF0Y2g7Ci0gICAgYm9v
bCBoYXNCaWdSb3RhdGlvbjsKLSAgICBkb3VibGUgc3RhcnRUaW1lOwotICAgIFRleHR1cmVNYXBw
ZXJBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmKTsKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgS2V5ZnJhbWVWYWx1ZUxp
c3QmIHZhbHVlcykgeyByZXR1cm4gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJBbmltYXRpb24o
dmFsdWVzKSk7IH0KLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBwZXJOb2RlIHsKK2NsYXNzIFRleHR1
cmVNYXBwZXJOb2RlIDogcHVibGljIFRleHR1cmVNYXBwZXJBbmltYXRpb25DbGllbnQgewogCiBw
dWJsaWM6CiAgICAgLy8gVGhpcyBzZXQgb2YgZmxhZ3MgaGVscCB1cyBkZWZlciB3aGljaCBwcm9w
ZXJ0aWVzIG9mIHRoZSBsYXllciBoYXZlIGJlZW4KQEAgLTE5OCwxMyArMTgyLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHBhaW50U2VsZkFuZENoaWxkcmVuV2l0aFJlcGxpY2EoY29uc3QgVGV4dHVy
ZU1hcHBlclBhaW50T3B0aW9ucyYpOwogICAgIHZvaWQgcmVuZGVyQ29udGVudChUZXh0dXJlTWFw
cGVyKiwgR3JhcGhpY3NMYXllciopOwogCi0gICAgdm9pZCBzeW5jQW5pbWF0aW9ucyhHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlciopOwotICAgIHZvaWQgYXBwbHlBbmltYXRpb24oY29uc3QgVGV4
dHVyZU1hcHBlckFuaW1hdGlvbiYsIGRvdWJsZSBydW5uaW5nVGltZSk7Ci0gICAgdm9pZCBhcHBs
eUFuaW1hdGlvbkZyYW1lKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mLCBjb25zdCBBbmlt
YXRpb25WYWx1ZSogZnJvbSwgY29uc3QgQW5pbWF0aW9uVmFsdWUqIHRvLCBmbG9hdCBwcm9ncmVz
cyk7Ci0gICAgdm9pZCBhcHBseU9wYWNpdHlBbmltYXRpb24oZmxvYXQgZnJvbU9wYWNpdHksIGZs
b2F0IHRvT3BhY2l0eSwgZG91YmxlKTsKLSAgICB2b2lkIGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9u
KGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
KiBzdGFydCwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogZW5kLCBkb3VibGUpOwotICAgIGJv
b2wgaGFzT3BhY2l0eUFuaW1hdGlvbigpIGNvbnN0OwotICAgIGJvb2wgaGFzVHJhbnNmb3JtQW5p
bWF0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOwogICAgIGJvb2wgaXNW
aXNpYmxlKCkgY29uc3Q7CiAgICAgYm9vbCBzaG91bGRQYWludFRvSW50ZXJtZWRpYXRlU3VyZmFj
ZSgpIGNvbnN0OwogCkBAIC0zMTUsOCArMjkzLDcgQEAgcHJpdmF0ZToKIAogICAgIFN0YXRlIG1f
c3RhdGU7CiAgICAgVGV4dHVyZU1hcHBlciogbV90ZXh0dXJlTWFwcGVyOwotCi0gICAgVmVjdG9y
PFJlZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiA+IG1fYW5pbWF0aW9uczsKKyAgICBUZXh0
dXJlTWFwcGVyQW5pbWF0aW9ucyBtX2FuaW1hdGlvbnM7CiB9OwogCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123969</attachid>
            <date>2012-01-25 10:21:07 -0800</date>
            <delta_ts>2012-01-25 13:55:27 -0800</delta_ts>
            <desc>Patch 1: Move animations to TextureMapperAnimations</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>22356</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjOTJiNjRhLi42MjQ2ZmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUg
QEAKKzIwMTItMDEtMjUgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbVGV4bWFwXSBEaXZpZGUgVGV4dHVyZU1hcHBlck5vZGUuY3BwIHRvIDMg
ZmlsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NjY2MAorCisgICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4K
KworICAgICAgICAgU3BsaXQgdGhlIGFuaW1hdGlvbiBwYXJ0IG9mIFRleHR1cmVNYXBwZXJOb2Rl
IG91dCB0byBhIHNlcGFyYXRlIGZpbGUsIGNhbGxlZAorICAgICAgICAgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbi4KKyAgICAgICAgIFByb3ZpZGUgYSBjbGVhbiBpbnRlcmZhY2UgZm9yIHRoYXQgY2xh
c3MsIHRoYXQgYWxsb3dzIHNlcGFyYXRpbmcgdGhlIGludGVybmFscyBvZiB0aGUgc2NlbmUKKyAg
ICAgICAgIHBhaW50aW5nIGZyb20gdGhlIGludGVybmFscyBvZiB0aGUgYW5pbWF0aW9uIGludGVy
cG9sYXRpb24uCisKKyAgICAgICAgIE5vIG5ldyB0ZXN0cy4gRXhpc3RpbmcgYW5pbWF0aW9uIHRl
c3RzIGNvdmVyIHRoaXMuCisKKyAgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAg
ICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZEFuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGF1c2VBbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnJl
bW92ZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9z
aXRpbmdTdGF0ZVNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmRl
c2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyTm9kZTo6c3luY0FuaW1hdGlvbnNSZWN1cnNpdmVseSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oOgorICAgICAg
ICAoVGV4dHVyZU1hcHBlck5vZGUpOgorCiAyMDEyLTAxLTI1ICBKb3NlcGggUGVjb3Jhcm8gIDxw
ZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvNzY5NDE+
IFdlYiBJbnNwZWN0b3I6IFJlbW92ZSBVbnVzZWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LnNlYXJj
aCBTdHViCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAyMTk1ODZmLi5jMDA4YjUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU3MTksNiArNTcxOSw4IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0xheWVyVHJhbnNmb3JtLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5v
ZGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlck5vZGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKQEAgLTU3MzcsNiArNTczOSw4IEBAIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0xheWVyVHJhbnNmb3JtLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlck5vZGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGNmOTI5MWEuLjAzZWFi
NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQpAQCAtMzkyOSw2ICszOTI5LDcgQEAgY29udGFpbnMoQ09ORklHLCB0
ZXhtYXApIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJU
cmFuc2Zvcm0uaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyLmggXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFu
aW1hdGlvbi5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJOb2RlLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXIuaAogCkBAIC0zOTM2LDYgKzM5MzcsNyBAQCBjb250YWlucyhDT05GSUcs
IHRleG1hcCkgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQu
Y3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNw
cCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBc
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9u
LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxNjE0ZmI0Li4zNTcwZmNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC0zNTcyLDYgKzM1NzIsOCBAQAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJOb2RlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuY3BwCmluZGV4IDdlZjk4MTguLmY0NzhiOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtMzY1LDU5ICszNjUsMjcgQEAgYm9vbCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiB2YWx1ZUxpc3QKICAgICBpZiAoIWFuaW0gfHwgYW5pbS0+aXNFbXB0eU9yWmVyb0R1cmF0
aW9uKCkgfHwgdmFsdWVMaXN0LnNpemUoKSA8IDIgfHwgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpICE9
IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0gJiYgdmFsdWVMaXN0LnByb3BlcnR5KCkg
IT0gQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAg
ICAgICAvLyBUaGUgc2FtZSBhbmltYXRpb24gbmFtZSBjYW4gYmUgdXNlZCBmb3IgdHdvIGFuaW1h
dGlvbnMgd2l0aCBkaWZmZXJlbnQgcHJvcGVydGllcy4KLSAgICAgICAgaWYgKG1fYW5pbWF0aW9u
c1tpXS0+bmFtZSAhPSBrZXlmcmFtZXNOYW1lIHx8IG1fYW5pbWF0aW9uc1tpXS0+a2V5ZnJhbWVz
LnByb3BlcnR5KCkgIT0gdmFsdWVMaXN0LnByb3BlcnR5KCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYSBjb3B5IG9mIHRoaXMgYW5pbWF0aW9u
LCB0aGF0IG1lYW5zIHRoYXQgd2UncmUgcmVzdW1pbmcgaXQgcmF0aGVyIHRoYW4gYWRkaW5nIGl0
LgotICAgICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4mIGFuaW1hdGlvbiA9IG1f
YW5pbWF0aW9uc1tpXTsKLSAgICAgICAgYW5pbWF0aW9uLT5hbmltYXRpb24gPSBBbmltYXRpb246
OmNyZWF0ZShhbmltKTsKLSAgICAgICAgYW5pbWF0aW9uLT5wYXVzZWQgPSBmYWxzZTsKLSAgICAg
ICAgYW5pbWF0aW9uLT5zdGFydFRpbWUgPSBXVEY6OmN1cnJlbnRUaW1lKCkgLSB0aW1lT2Zmc2V0
OwotICAgICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkFuaW1hdGlvbkNoYW5n
ZSk7Ci0gICAgICAgIG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGJvb2wgbGlzdHNNYXRjaDsKKyAgICBib29s
IGhhc0JpZ1JvdGF0aW9uOworICAgIFZlY3RvcjxUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlv
blR5cGU+IGZ1bmN0aW9uTGlzdDsKIAotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
PiBhbmltYXRpb24gPSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpjcmVhdGUodmFsdWVMaXN0KTsK
LSAgICBhbmltYXRpb24tPmJveFNpemUgPSBib3hTaXplOwotICAgIGFuaW1hdGlvbi0+bmFtZSA9
IGtleWZyYW1lc05hbWU7Ci0gICAgYW5pbWF0aW9uLT5hbmltYXRpb24gPSBBbmltYXRpb246OmNy
ZWF0ZShhbmltKTsKLSAgICBhbmltYXRpb24tPnBhdXNlZCA9IGZhbHNlOwotICAgIGFuaW1hdGlv
bi0+c3RhcnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpIC0gdGltZU9mZnNldDsKLQotICAgIGlm
ICh2YWx1ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3Jt
KSB7Ci0gICAgICAgIGJvb2wgaGFzQmlnUm90YXRpb247IC8vIE5vdCB1c2VkLCBidXQgcmVxdWly
ZWQgYXMgYSBwb2ludGVyIHBhcmFtZXRlciBmb3IgdGhlIGZ1bmN0aW9uLgotICAgICAgICBmZXRj
aFRyYW5zZm9ybU9wZXJhdGlvbkxpc3QodmFsdWVMaXN0LCBhbmltYXRpb24tPmZ1bmN0aW9uTGlz
dCwgYW5pbWF0aW9uLT5saXN0c01hdGNoLCBoYXNCaWdSb3RhdGlvbik7Ci0gICAgfQorICAgIGlm
ICh2YWx1ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3Jt
KQorICAgICAgICBmZXRjaFRyYW5zZm9ybU9wZXJhdGlvbkxpc3QodmFsdWVMaXN0LCBmdW5jdGlv
bkxpc3QsIGxpc3RzTWF0Y2gsIGhhc0JpZ1JvdGF0aW9uKTsKIAotICAgIG1fYW5pbWF0aW9ucy5h
cHBlbmQoYW5pbWF0aW9uKTsKKyAgICBtX2FuaW1hdGlvbnMuYWRkKGtleWZyYW1lc05hbWUsIFRl
eHR1cmVNYXBwZXJBbmltYXRpb24odmFsdWVMaXN0LCBib3hTaXplLCBhbmltLCB0aW1lT2Zmc2V0
LCBmdW5jdGlvbkxpc3QsIGxpc3RzTWF0Y2gpKTsKICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlck5vZGU6OkFuaW1hdGlvbkNoYW5nZSk7CiAgICAgbV9hbmltYXRpb25TdGFydGVkVGltZXIu
c3RhcnRPbmVTaG90KDApOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9u
TmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS0+
bmFtZSAhPSBhbmltYXRpb25OYW1lKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1f
YW5pbWF0aW9uc1tpXS0+cGF1c2VkID0gdHJ1ZTsKLSAgICAgICAgbm90aWZ5Q2hhbmdlKFRleHR1
cmVNYXBwZXJOb2RlOjpBbmltYXRpb25DaGFuZ2UpOwotICAgIH0KKyAgICBtX2FuaW1hdGlvbnMu
cGF1c2UoYW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5h
bWUpCiB7Ci0gICAgZm9yIChpbnQgaSA9IG1fYW5pbWF0aW9ucy5zaXplKCkgLSAxOyBpID49IDA7
IC0taSkgewotICAgICAgICAvLyBUaGUgc2FtZSBhbmltYXRpb24gbmFtZSBjYW4gYmUgdXNlZCBm
b3IgdHdvIGFuaW1hdGlvbnMgd2l0aCBkaWZmZXJlbnQgcHJvcGVydGllcy4gV2Ugc2hvdWxkIHJl
bW92ZSBib3RoLgotICAgICAgICBpZiAobV9hbmltYXRpb25zW2ldLT5uYW1lICE9IGFuaW1hdGlv
bk5hbWUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9hbmltYXRpb25zLnJlbW92
ZShpKTsKLSAgICAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpBbmltYXRpb25D
aGFuZ2UpOwotICAgIH0KKyAgICBtX2FuaW1hdGlvbnMucmVtb3ZlKGFuaW1hdGlvbk5hbWUpOwog
fQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphbmltYXRpb25TdGFydGVkVGlt
ZXJGaXJlZChUaW1lcjxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4qKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuaAppbmRleCBlYmI5YjUzLi4xNzJmZGRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaApAQCAtOTUsNyArOTUsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9zeW5jUXVldWVkOwogICAgIGludCBtX2NoYW5nZU1hc2s7CiAgICAg
VGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnREYXRhIG1fcGVuZGluZ0NvbnRlbnQ7Ci0gICAgVmVj
dG9yPFJlZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiA+IG1fYW5pbWF0aW9uczsKKyAgICBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9ucyBtX2FuaW1hdGlvbnM7CiAgICAgdm9pZCBhbmltYXRpb25T
dGFydGVkVGltZXJGaXJlZChUaW1lcjxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4qKTsKICAg
ICBUaW1lcjxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4gbV9hbmltYXRpb25TdGFydGVkVGlt
ZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKaW5kZXggYjY4ZTgxMi4uY2NmNDliYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCkBAIC01ODUsMTEgKzU4NSw4IEBAIHZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlciogZ3JhCiAgICAgICAgICAgIGxheWVyLT5tX2VmZmVjdFRhcmdldCA9IHRoaXM7
CiAgICAgfQogCi0gICAgaWYgKGNoYW5nZU1hc2sgJiBBbmltYXRpb25DaGFuZ2UpIHsKLSAgICAg
ICAgbV9hbmltYXRpb25zLmNsZWFyKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Z3JhcGhpY3NMYXllci0+bV9hbmltYXRpb25zLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9h
bmltYXRpb25zLmFwcGVuZChncmFwaGljc0xheWVyLT5tX2FuaW1hdGlvbnNbaV0pOwotICAgIH0K
KyAgICBpZiAoY2hhbmdlTWFzayAmIEFuaW1hdGlvbkNoYW5nZSkKKyAgICAgICAgbV9hbmltYXRp
b25zID0gZ3JhcGhpY3NMYXllci0+bV9hbmltYXRpb25zOwogCiAgICAgbV9zdGF0ZS5tYXNrTGF5
ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPm1hc2tMYXllcigpKTsKICAg
ICBtX3N0YXRlLnJlcGxpY2FMYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhpY3NMYXll
ci0+cmVwbGljYUxheWVyKCkpOwpAQCAtNjE0LDExICs2MTEsNiBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIqIGdyYQogICAgIGlmICghbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkpCiAgICAgICAg
IG1fY3VycmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC51bml0ZShwZW5kaW5nQ29udGVudC5u
ZWVkc0Rpc3BsYXlSZWN0KTsKIAotICAgIGlmICghaGFzT3BhY2l0eUFuaW1hdGlvbigpKQotICAg
ICAgICBtX29wYWNpdHkgPSBtX3N0YXRlLm9wYWNpdHk7Ci0gICAgaWYgKCFoYXNUcmFuc2Zvcm1B
bmltYXRpb24oKSkKLSAgICAgICAgbV90cmFuc2Zvcm0uc2V0TG9jYWxUcmFuc2Zvcm0obV9zdGF0
ZS50cmFuc2Zvcm0pOwotCiAgICAgbV90cmFuc2Zvcm0uc2V0UG9zaXRpb24obV9zdGF0ZS5wb3Mp
OwogICAgIG1fdHJhbnNmb3JtLnNldEFuY2hvclBvaW50KG1fc3RhdGUuYW5jaG9yUG9pbnQpOwog
ICAgIG1fdHJhbnNmb3JtLnNldFNpemUobV9zdGF0ZS5zaXplKTsKQEAgLTYyOCwxMCArNjIwLDgg
QEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKIAogYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6ZGVz
Y2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAogewotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
ICghbV9hbmltYXRpb25zW2ldLT5wYXVzZWQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9CisgICAgaWYgKG1fYW5pbWF0aW9ucy5oYXNSdW5uaW5nQW5pbWF0aW9ucygpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5z
aXplKCk7ICsraSkgewogICAgICAgICBpZiAobV9jaGlsZHJlbltpXS0+ZGVzY2VuZGFudHNPclNl
bGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKQEAgLTY0MSwxOTcgKzYzMSwxOCBAQCBib29sIFRl
eHR1cmVNYXBwZXJOb2RlOjpkZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygp
IGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgZG91YmxlIG5vcm1hbGl6ZWRB
bmltYXRpb25WYWx1ZShkb3VibGUgcnVubmluZ1RpbWUsIGRvdWJsZSBkdXJhdGlvbiwgYm9vbCBh
bHRlcm5hdGUpCi17Ci0gICAgaWYgKCFkdXJhdGlvbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
Y29uc3QgaW50IGxvb3BDb3VudCA9IHJ1bm5pbmdUaW1lIC8gZHVyYXRpb247Ci0gICAgY29uc3Qg
ZG91YmxlIGxhc3RGdWxsTG9vcCA9IGR1cmF0aW9uICogZG91YmxlKGxvb3BDb3VudCk7Ci0gICAg
Y29uc3QgZG91YmxlIHJlbWFpbmRlciA9IHJ1bm5pbmdUaW1lIC0gbGFzdEZ1bGxMb29wOwotICAg
IGNvbnN0IGRvdWJsZSBub3JtYWxpemVkID0gcmVtYWluZGVyIC8gZHVyYXRpb247Ci0gICAgcmV0
dXJuIChsb29wQ291bnQgJSAyICYmIGFsdGVybmF0ZSkgPyAoMSAtIG5vcm1hbGl6ZWQpIDogbm9y
bWFsaXplZDsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6YXBwbHlPcGFjaXR5QW5pbWF0
aW9uKGZsb2F0IGZyb21PcGFjaXR5LCBmbG9hdCB0b09wYWNpdHksIGRvdWJsZSBwcm9ncmVzcykK
LXsKLSAgICAvLyBPcHRpbWl6YXRpb246IHNwZWNpYWwgY2FzZSB0aGUgZWRnZSB2YWx1ZXMgKDAg
YW5kIDEpLgotICAgIGlmIChwcm9ncmVzcyA9PSAxLjApCi0gICAgICAgIHNldE9wYWNpdHkodG9P
cGFjaXR5KTsKLSAgICBlbHNlIGlmICghcHJvZ3Jlc3MpCi0gICAgICAgIHNldE9wYWNpdHkoZnJv
bU9wYWNpdHkpOwotICAgIGVsc2UKLSAgICAgICAgc2V0T3BhY2l0eShmcm9tT3BhY2l0eSArIHBy
b2dyZXNzICogKHRvT3BhY2l0eSAtIGZyb21PcGFjaXR5KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
ZG91YmxlIHNvbHZlRXBzaWxvbihkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgcmV0dXJuIDEuMCAv
ICgyMDAuMCAqIGR1cmF0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVDdWJp
Y0JlemllckZ1bmN0aW9uKGRvdWJsZSBwMXgsIGRvdWJsZSBwMXksIGRvdWJsZSBwMngsIGRvdWJs
ZSBwMnksIGRvdWJsZSB0LCBkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgVW5pdEJlemllciBiZXpp
ZXIocDF4LCBwMXksIHAyeCwgcDJ5KTsKLSAgICByZXR1cm4gYmV6aWVyLnNvbHZlKHQsIHNvbHZl
RXBzaWxvbihkdXJhdGlvbikpOwotfQotCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZVN0ZXBz
RnVuY3Rpb24oaW50IG51bVN0ZXBzLCBib29sIHN0ZXBBdFN0YXJ0LCBkb3VibGUgdCkKLXsKLSAg
ICBpZiAoc3RlcEF0U3RhcnQpCi0gICAgICAgIHJldHVybiBzdGQ6Om1pbigxLjAsIChmbG9vcihu
dW1TdGVwcyAqIHQpICsgMSkgLyBudW1TdGVwcyk7Ci0gICAgcmV0dXJuIGZsb29yKG51bVN0ZXBz
ICogdCkgLyBudW1TdGVwczsKLX0KLQotc3RhdGljIGlubGluZSBmbG9hdCBhcHBseVRpbWluZ0Z1
bmN0aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbiwgZmxvYXQgcHJvZ3Jl
c3MsIGRvdWJsZSBkdXJhdGlvbikKLXsKLSAgICBpZiAoIXRpbWluZ0Z1bmN0aW9uKQotICAgICAg
ICByZXR1cm4gcHJvZ3Jlc3M7Ci0KLSAgICBpZiAodGltaW5nRnVuY3Rpb24tPmlzQ3ViaWNCZXpp
ZXJUaW1pbmdGdW5jdGlvbigpKSB7Ci0gICAgICAgIGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVu
Y3Rpb24qIGN0ZiA9IHN0YXRpY19jYXN0PGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24q
Pih0aW1pbmdGdW5jdGlvbik7Ci0gICAgICAgIHJldHVybiBzb2x2ZUN1YmljQmV6aWVyRnVuY3Rp
b24oY3RmLT54MSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0
Zi0+eTEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGYtPngy
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RmLT55MigpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzLCBkdXJhdGlv
bik7Ci0gICAgfQotCi0gICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc1N0ZXBzVGltaW5nRnVuY3Rp
b24oKSkgewotICAgICAgICBjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKiBzdGYgPSBzdGF0aWNf
Y2FzdDxjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24pOwotICAgICAg
ICByZXR1cm4gc29sdmVTdGVwc0Z1bmN0aW9uKHN0Zi0+bnVtYmVyT2ZTdGVwcygpLCBzdGYtPnN0
ZXBBdFN0YXJ0KCksIGRvdWJsZShwcm9ncmVzcykpOwotICAgIH0KLQotICAgIHJldHVybiBwcm9n
cmVzczsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6YXBwbHlUcmFuc2Zvcm1BbmltYXRp
b24oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uLCBjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb25zKiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB0bywgZG91Ymxl
IHByb2dyZXNzKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0FuaW1hdGlvbnMoKQogewot
ICAgIC8vIE9wdGltaXphdGlvbjogc3BlY2lhbCBjYXNlIHRoZSBlZGdlIHZhbHVlcyAoMCBhbmQg
MSkuCi0gICAgaWYgKHByb2dyZXNzID09IDEuMCB8fCAhcHJvZ3Jlc3MpIHsKLSAgICAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotICAgICAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b25zKiBvcHMgPSBwcm9ncmVzcyA/IHRvIDogZnJvbTsKLSAgICAgICAgb3BzLT5hcHBseShhbmlt
YXRpb24uYm94U2l6ZSwgbWF0cml4KTsKLSAgICAgICAgc2V0VHJhbnNmb3JtKG1hdHJpeCk7Ci0g
ICAgfQotCi0gICAgaWYgKCFhbmltYXRpb24ubGlzdHNNYXRjaCkgewotICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0b01hdHJpeCwgZnJvbU1hdHJpeDsKLSAgICAgICAgdG8tPmFwcGx5KGFu
aW1hdGlvbi5ib3hTaXplLCB0b01hdHJpeCk7Ci0gICAgICAgIGZyb20tPmFwcGx5KGFuaW1hdGlv
bi5ib3hTaXplLCBmcm9tTWF0cml4KTsKLSAgICAgICAgdG9NYXRyaXguYmxlbmQoZnJvbU1hdHJp
eCwgcHJvZ3Jlc3MpOwotICAgICAgICBzZXRUcmFuc2Zvcm0odG9NYXRyaXgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotCi0gICAg
aWYgKCF0by0+c2l6ZSgpKSB7Ci0gICAgICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHN3
YXAgPSB0bzsKLSAgICAgICAgdG8gPSBmcm9tOwotICAgICAgICBmcm9tID0gc3dhcDsKLSAgICB9
IGVsc2UgaWYgKCFmcm9tLT5zaXplKCkpCi0gICAgICAgIHByb2dyZXNzID0gMS4wIC0gcHJvZ3Jl
c3M7Ci0KLSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kZWQoKnRvKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFuaW1hdGlvbi5mdW5jdGlvbkxpc3Quc2l6ZSgpOyArK2kpCi0gICAg
ICAgIGJsZW5kZWQub3BlcmF0aW9ucygpW2ldLT5ibGVuZChmcm9tLT5hdChpKSwgcHJvZ3Jlc3Ms
ICFmcm9tLT5hdChpKSktPmFwcGx5KG1hdHJpeCwgYW5pbWF0aW9uLmJveFNpemUpOwotCi0gICAg
c2V0VHJhbnNmb3JtKG1hdHJpeCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmFwcGx5
QW5pbWF0aW9uRnJhbWUoY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uLCBj
b25zdCBBbmltYXRpb25WYWx1ZSogZnJvbSwgY29uc3QgQW5pbWF0aW9uVmFsdWUqIHRvLCBmbG9h
dCBwcm9ncmVzcykKLXsKLSAgICBzd2l0Y2ggKGFuaW1hdGlvbi5rZXlmcmFtZXMucHJvcGVydHko
KSkgewotICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6Ci0gICAgICAgIGFwcGx5T3Bh
Y2l0eUFuaW1hdGlvbigoc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRpb25WYWx1ZSo+KGZy
b20pLT52YWx1ZSgpKSwgKHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUqPih0
byktPnZhbHVlKCkpLCBwcm9ncmVzcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEFuaW1h
dGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06Ci0gICAgICAgIGFwcGx5VHJhbnNmb3JtQW5pbWF0
aW9uKGFuaW1hdGlvbiwgc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUq
Pihmcm9tKS0+dmFsdWUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFs
dWUqPih0byktPnZhbHVlKCksIHByb2dyZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6YXBwbHlBbmltYXRpb24oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlv
biYgYW5pbWF0aW9uLCBkb3VibGUgbm9ybWFsaXplZFZhbHVlKQotewotICAgIC8vIE9wdGltaXph
dGlvbjogc3BlY2lhbCBjYXNlIHRoZSBlZGdlIHZhbHVlcyAoMCBhbmQgMSkuCi0gICAgaWYgKCFu
b3JtYWxpemVkVmFsdWUpIHsKLSAgICAgICAgYXBwbHlBbmltYXRpb25GcmFtZShhbmltYXRpb24s
IGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoMCksIGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoMSksIDAp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChub3JtYWxpemVkVmFsdWUgPT0gMS4w
KSB7Ci0gICAgICAgIGFwcGx5QW5pbWF0aW9uRnJhbWUoYW5pbWF0aW9uLCBhbmltYXRpb24ua2V5
ZnJhbWVzLmF0KGFuaW1hdGlvbi5rZXlmcmFtZXMuc2l6ZSgpIC0gMiksIGFuaW1hdGlvbi5rZXlm
cmFtZXMuYXQoYW5pbWF0aW9uLmtleWZyYW1lcy5zaXplKCkgLSAxKSwgMSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgaWYgKGFuaW1hdGlvbi5rZXlmcmFtZXMuc2l6ZSgpID09IDIpIHsK
LSAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gYXBwbHlUaW1pbmdGdW5jdGlvbihhbmltYXRpb24u
YW5pbWF0aW9uLT50aW1pbmdGdW5jdGlvbigpLmdldCgpLCBub3JtYWxpemVkVmFsdWUsIGFuaW1h
dGlvbi5hbmltYXRpb24tPmR1cmF0aW9uKCkpOwotICAgICAgICBhcHBseUFuaW1hdGlvbkZyYW1l
KGFuaW1hdGlvbiwgYW5pbWF0aW9uLmtleWZyYW1lcy5hdCgwKSwgYW5pbWF0aW9uLmtleWZyYW1l
cy5hdCgxKSwgbm9ybWFsaXplZFZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYW5pbWF0aW9uLmtleWZyYW1lcy5zaXplKCkgLSAxOyAr
K2kpIHsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9uVmFsdWUqIGZyb20gPSBhbmltYXRpb24ua2V5
ZnJhbWVzLmF0KGkpOwotICAgICAgICBjb25zdCBBbmltYXRpb25WYWx1ZSogdG8gPSBhbmltYXRp
b24ua2V5ZnJhbWVzLmF0KGkgKyAxKTsKLSAgICAgICAgaWYgKGZyb20tPmtleVRpbWUoKSA+IG5v
cm1hbGl6ZWRWYWx1ZSB8fCB0by0+a2V5VGltZSgpIDwgbm9ybWFsaXplZFZhbHVlKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gKG5vcm1hbGl6ZWRW
YWx1ZSAtIGZyb20tPmtleVRpbWUoKSkgLyAodG8tPmtleVRpbWUoKSAtIGZyb20tPmtleVRpbWUo
KSk7Ci0gICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IGFwcGx5VGltaW5nRnVuY3Rpb24oZnJvbS0+
dGltaW5nRnVuY3Rpb24oKSwgbm9ybWFsaXplZFZhbHVlLCBhbmltYXRpb24uYW5pbWF0aW9uLT5k
dXJhdGlvbigpKTsKLSAgICAgICAgYXBwbHlBbmltYXRpb25GcmFtZShhbmltYXRpb24sIGZyb20s
IHRvLCBub3JtYWxpemVkVmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLWJvb2wg
VGV4dHVyZU1hcHBlck5vZGU6Omhhc09wYWNpdHlBbmltYXRpb24oKSBjb25zdAotewotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiA9ICptX2FuaW1hdGlvbnNb
aV0uZ2V0KCk7Ci0gICAgICAgIGlmIChhbmltYXRpb24ua2V5ZnJhbWVzLnByb3BlcnR5KCkgPT0g
QW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRleHR1cmVNYXBwZXJOb2RlOjpoYXNUcmFu
c2Zvcm1BbmltYXRpb24oKSBjb25zdAotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9h
bmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFRleHR1cmVNYXBwZXJBbmlt
YXRpb24mIGFuaW1hdGlvbiA9ICptX2FuaW1hdGlvbnNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChh
bmltYXRpb24ua2V5ZnJhbWVzLnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRy
YW5zZm9ybSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNBbmltYXRpb25zKEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyKiBsYXllcikKLXsKLSAgICBmb3IgKGludCBpID0gbV9hbmltYXRp
b25zLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uPiBhbmltYXRpb24gPSBtX2FuaW1hdGlvbnNbaV07Ci0KLSAgICAgICAgZG91
YmxlIHRvdGFsUnVubmluZ1RpbWUgPSBXVEY6OmN1cnJlbnRUaW1lKCkgLSBhbmltYXRpb24tPnN0
YXJ0VGltZTsKLSAgICAgICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbSA9IGFuaW1hdGlvbi0+YW5p
bWF0aW9uOwotICAgICAgICBkb3VibGUgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplZEFuaW1h
dGlvblZhbHVlKHRvdGFsUnVubmluZ1RpbWUsIGFuaW0tPmR1cmF0aW9uKCksIGFuaW0tPmRpcmVj
dGlvbigpKTsKLQotICAgICAgICBpZiAoYW5pbS0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmltYXRp
b246Okl0ZXJhdGlvbkNvdW50SW5maW5pdGUgJiYgdG90YWxSdW5uaW5nVGltZSA+PSBhbmltLT5k
dXJhdGlvbigpICogYW5pbS0+aXRlcmF0aW9uQ291bnQoKSkgewotICAgICAgICAgICAgLy8gV2Ug
YXBwbHkgYW4gYW5pbWF0aW9uIHRoYXQgdmVyeSBjbG9zZSB0byB0aGUgZWRnZSwgc28gdGhhdCB0
aGUgZmluYWwgZnJhbWUgaXMgYXBwbGllZCwgb3Rlcndpc2Ugd2UgbWlnaHQgZ2V0LCBmb3IgZXhh
bXBsZSwgYW4gb3BhY2l0eSBvZiAwLjAxIHdoaWNoIGlzIHN0aWxsIHZpc2libGUuCi0gICAgICAg
ICAgICBpZiAoYW5pbS0+ZmlsbHNGb3J3YXJkcygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFu
aW1hdGlvbi0+a2V5ZnJhbWVzLnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRy
YW5zZm9ybSkKLSAgICAgICAgICAgICAgICAgICAgc2V0VHJhbnNmb3JtKG1fc3RhdGUudHJhbnNm
b3JtKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChhbmltYXRpb24tPmtleWZyYW1lcy5wcm9w
ZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KQotICAgICAgICAgICAgICAgICAgICBz
ZXRPcGFjaXR5KG1fc3RhdGUub3BhY2l0eSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IG1fYW5pbWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghYW5pbWF0aW9uLT5wYXVzZWQpCi0gICAgICAgICAgICBhcHBseUFu
aW1hdGlvbigqYW5pbWF0aW9uLmdldCgpLCBub3JtYWxpemVkVmFsdWUpOwotICAgIH0KKyAgICBt
X2FuaW1hdGlvbnMuYXBwbHkodGhpcyk7CisgICAgaWYgKCFtX2FuaW1hdGlvbnMuaGFzQWN0aXZl
QW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKSkKKyAgICAg
ICAgc2V0VHJhbnNmb3JtKG1fc3RhdGUudHJhbnNmb3JtKTsKKyAgICBpZiAoIW1fYW5pbWF0aW9u
cy5oYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSkKKyAg
ICAgICAgc2V0T3BhY2l0eShtX3N0YXRlLm9wYWNpdHkpOwogfQogCiB2b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpzeW5jQW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCkKIHsKLSAgICBzeW5jQW5pbWF0aW9u
cygwKTsKKyAgICBzeW5jQW5pbWF0aW9ucygpOwogCiAgICAgZm9yIChpbnQgaSA9IG1fY2hpbGRy
ZW4uc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpCiAgICAgICAgIG1fY2hpbGRyZW5baV0tPnN5bmNB
bmltYXRpb25zUmVjdXJzaXZlbHkoKTsKQEAgLTg1NSw4ICs2NjYsNyBAQCB2b2lkIFRleHR1cmVN
YXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ciogZ3JhcGhpYwogICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikKICAgICAgICAgbV9zdGF0
ZS5yZXBsaWNhTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIoZ3JhcGhpY3NMYXllci0+cmVwbGljYUxheWVyKCkpLCB0ZXh0dXJlTWFwcGVyKTsK
IAotICAgIHN5bmNBbmltYXRpb25zKGdyYXBoaWNzTGF5ZXIpOwotCisgICAgc3luY0FuaW1hdGlv
bnMoKTsKICAgICBjb21wdXRlVGlsZXMoKTsKIAogICAgIGlmIChncmFwaGljc0xheWVyKQpAQCAt
ODc5LDExICs2ODksNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdT
dGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpYwogICAgIH0KIH0KIAotVGV4
dHVyZU1hcHBlckFuaW1hdGlvbjo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbihjb25zdCBLZXlmcmFt
ZVZhbHVlTGlzdCYgdmFsdWVzKQotICAgIDoga2V5ZnJhbWVzKHZhbHVlcykKLXsKIH0KLQotfQot
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKaW5kZXggYTY5NjFlOC4uZmU0YjE0YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmgKQEAgLTI3LDEwICsyNyw5IEBACiAjaW5jbHVkZSAiSW50UG9p
bnRIYXNoLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIgogI2luY2x1ZGUg
IlRpbWVyLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIlRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIlVuaXRCZXppZXIuaCIKICNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC01NywyMiArNTYsNyBAQCBwdWJsaWM6CiAgICAg
eyB9CiB9OwogCi1jbGFzcyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uIDogcHVibGljIFJlZkNvdW50
ZWQ8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gewotcHVibGljOgotICAgIFN0cmluZyBuYW1lOwot
ICAgIEtleWZyYW1lVmFsdWVMaXN0IGtleWZyYW1lczsKLSAgICBJbnRTaXplIGJveFNpemU7Ci0g
ICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uOwotICAgIGJvb2wgcGF1c2VkOwotICAgIFZl
Y3RvcjxUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGU+IGZ1bmN0aW9uTGlzdDsKLSAg
ICBib29sIGxpc3RzTWF0Y2g7Ci0gICAgYm9vbCBoYXNCaWdSb3RhdGlvbjsKLSAgICBkb3VibGUg
c3RhcnRUaW1lOwotICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiBj
cmVhdGUoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcykgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IFRleHR1cmVNYXBwZXJBbmltYXRpb24odmFsdWVzKSk7IH0KLX07Ci0KLWNsYXNzIFRleHR1
cmVNYXBwZXJOb2RlIHsKK2NsYXNzIFRleHR1cmVNYXBwZXJOb2RlIDogcHVibGljIFRleHR1cmVN
YXBwZXJBbmltYXRpb25DbGllbnQgewogCiBwdWJsaWM6CiAgICAgLy8gVGhpcyBzZXQgb2YgZmxh
Z3MgaGVscCB1cyBkZWZlciB3aGljaCBwcm9wZXJ0aWVzIG9mIHRoZSBsYXllciBoYXZlIGJlZW4K
QEAgLTE5OCwxMyArMTgyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50U2VsZkFuZENoaWxk
cmVuV2l0aFJlcGxpY2EoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYpOwogICAgIHZv
aWQgcmVuZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiwgR3JhcGhpY3NMYXllciopOwogCi0gICAg
dm9pZCBzeW5jQW5pbWF0aW9ucyhHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciopOwotICAgIHZv
aWQgYXBwbHlBbmltYXRpb24oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYsIGRvdWJsZSBy
dW5uaW5nVGltZSk7Ci0gICAgdm9pZCBhcHBseUFuaW1hdGlvbkZyYW1lKGNvbnN0IFRleHR1cmVN
YXBwZXJBbmltYXRpb24mLCBjb25zdCBBbmltYXRpb25WYWx1ZSogZnJvbSwgY29uc3QgQW5pbWF0
aW9uVmFsdWUqIHRvLCBmbG9hdCBwcm9ncmVzcyk7Ci0gICAgdm9pZCBhcHBseU9wYWNpdHlBbmlt
YXRpb24oZmxvYXQgZnJvbU9wYWNpdHksIGZsb2F0IHRvT3BhY2l0eSwgZG91YmxlKTsKLSAgICB2
b2lkIGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24m
LCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBzdGFydCwgY29uc3QgVHJhbnNmb3JtT3BlcmF0
aW9ucyogZW5kLCBkb3VibGUpOwotICAgIGJvb2wgaGFzT3BhY2l0eUFuaW1hdGlvbigpIGNvbnN0
OwotICAgIGJvb2wgaGFzVHJhbnNmb3JtQW5pbWF0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzeW5j
QW5pbWF0aW9ucygpOwogICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Q7CiAgICAgYm9vbCBzaG91
bGRQYWludFRvSW50ZXJtZWRpYXRlU3VyZmFjZSgpIGNvbnN0OwogCkBAIC0zMTUsOCArMjkzLDcg
QEAgcHJpdmF0ZToKIAogICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgVGV4dHVyZU1hcHBlciogbV90
ZXh0dXJlTWFwcGVyOwotCi0gICAgVmVjdG9yPFJlZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
PiA+IG1fYW5pbWF0aW9uczsKKyAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucyBtX2FuaW1hdGlv
bnM7CiB9OwogCiAK
</data>
<flag name="commit-queue"
          id="125132"
          type_id="3"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124003</attachid>
            <date>2012-01-25 13:55:27 -0800</date>
            <delta_ts>2012-01-25 13:58:37 -0800</delta_ts>
            <desc>Patch 1: Move animations to TextureMapperAnimations</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>24803</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxNmYzNmRlLi44NGEzZmQ2
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTItMDEtMjUgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4K
KworICAgICAgICBbVGV4bWFwXSBEaXZpZGUgVGV4dHVyZU1hcHBlck5vZGUuY3BwIHRvIDMgZmls
ZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY2
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291
cmNlL2FwaS5wcmk6CisKIDIwMTItMDEtMjUgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5l
ckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgPHN0eWxlIHNjb3BlZD46IEltcGxlbWVudCByZWdp
c3RlcmluZyBvZiA8c3R5bGUgc2NvcGVkPiB3aXRoIHRoZSBzY29waW5nIGVsZW1lbnQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCBjOTJiNjRhLi42MjQ2ZmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIw
MTItMDEtMjUgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KKwor
ICAgICAgICBbVGV4bWFwXSBEaXZpZGUgVGV4dHVyZU1hcHBlck5vZGUuY3BwIHRvIDMgZmlsZXMu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY2MAor
CisgICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KKworICAg
ICAgICAgU3BsaXQgdGhlIGFuaW1hdGlvbiBwYXJ0IG9mIFRleHR1cmVNYXBwZXJOb2RlIG91dCB0
byBhIHNlcGFyYXRlIGZpbGUsIGNhbGxlZAorICAgICAgICAgVGV4dHVyZU1hcHBlckFuaW1hdGlv
bi4KKyAgICAgICAgIFByb3ZpZGUgYSBjbGVhbiBpbnRlcmZhY2UgZm9yIHRoYXQgY2xhc3MsIHRo
YXQgYWxsb3dzIHNlcGFyYXRpbmcgdGhlIGludGVybmFscyBvZiB0aGUgc2NlbmUKKyAgICAgICAg
IHBhaW50aW5nIGZyb20gdGhlIGludGVybmFscyBvZiB0aGUgYW5pbWF0aW9uIGludGVycG9sYXRp
b24uCisKKyAgICAgICAgIE5vIG5ldyB0ZXN0cy4gRXhpc3RpbmcgYW5pbWF0aW9uIHRlc3RzIGNv
dmVyIHRoaXMuCisKKyAgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBU
YXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZEFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGF1c2VBbmltYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnJlbW92ZUFu
aW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdT
dGF0ZVNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmRlc2NlbmRh
bnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJOb2RlOjpzeW5jQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyTm9kZTo6c3luY0FuaW1hdGlvbnNSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oOgorICAgICAgICAoVGV4
dHVyZU1hcHBlck5vZGUpOgorCiAyMDEyLTAxLTI1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFy
b0BhcHBsZS5jb20+CiAKICAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvNzY5NDE+IFdlYiBJ
bnNwZWN0b3I6IFJlbW92ZSBVbnVzZWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LnNlYXJjaCBTdHVi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAyMTk1ODZmLi5jMDA4YjUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU3MTksNiArNTcxOSw4IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xh
eWVyVHJhbnNmb3JtLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ck5vZGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKQEAgLTU3MzcsNiArNTczOSw4IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVy
VHJhbnNmb3JtLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5v
ZGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGNmOTI5MWEuLjAzZWFiNjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQpAQCAtMzkyOSw2ICszOTI5LDcgQEAgY29udGFpbnMoQ09ORklHLCB0ZXhtYXAp
IHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJUcmFuc2Zv
cm0uaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgg
XAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlv
bi5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2Rl
LmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXIuaAogCkBAIC0zOTM2LDYgKzM5MzcsNyBAQCBjb250YWlucyhDT05GSUcsIHRleG1h
cCkgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQuY3BwIFwK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNwcCBcCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBcCisgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCBc
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAg
XAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxNjE0ZmI0Li4zNTcwZmNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCkBAIC0zNTcyLDYgKzM1NzIsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllci5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuY3BwCmluZGV4IDdlZjk4MTguLmY0NzhiOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtMzY1LDU5ICszNjUsMjcgQEAgYm9vbCBHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2
YWx1ZUxpc3QKICAgICBpZiAoIWFuaW0gfHwgYW5pbS0+aXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkg
fHwgdmFsdWVMaXN0LnNpemUoKSA8IDIgfHwgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpICE9IEFuaW1h
dGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0gJiYgdmFsdWVMaXN0LnByb3BlcnR5KCkgIT0gQW5p
bWF0ZWRQcm9wZXJ0eU9wYWNpdHkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICAv
LyBUaGUgc2FtZSBhbmltYXRpb24gbmFtZSBjYW4gYmUgdXNlZCBmb3IgdHdvIGFuaW1hdGlvbnMg
d2l0aCBkaWZmZXJlbnQgcHJvcGVydGllcy4KLSAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS0+
bmFtZSAhPSBrZXlmcmFtZXNOYW1lIHx8IG1fYW5pbWF0aW9uc1tpXS0+a2V5ZnJhbWVzLnByb3Bl
cnR5KCkgIT0gdmFsdWVMaXN0LnByb3BlcnR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYSBjb3B5IG9mIHRoaXMgYW5pbWF0aW9uLCB0aGF0
IG1lYW5zIHRoYXQgd2UncmUgcmVzdW1pbmcgaXQgcmF0aGVyIHRoYW4gYWRkaW5nIGl0LgotICAg
ICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4mIGFuaW1hdGlvbiA9IG1fYW5pbWF0
aW9uc1tpXTsKLSAgICAgICAgYW5pbWF0aW9uLT5hbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0
ZShhbmltKTsKLSAgICAgICAgYW5pbWF0aW9uLT5wYXVzZWQgPSBmYWxzZTsKLSAgICAgICAgYW5p
bWF0aW9uLT5zdGFydFRpbWUgPSBXVEY6OmN1cnJlbnRUaW1lKCkgLSB0aW1lT2Zmc2V0OwotICAg
ICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkFuaW1hdGlvbkNoYW5nZSk7Ci0g
ICAgICAgIG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGJvb2wgbGlzdHNNYXRjaDsKKyAgICBib29sIGhhc0Jp
Z1JvdGF0aW9uOworICAgIFZlY3RvcjxUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGU+
IGZ1bmN0aW9uTGlzdDsKIAotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiBhbmlt
YXRpb24gPSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpjcmVhdGUodmFsdWVMaXN0KTsKLSAgICBh
bmltYXRpb24tPmJveFNpemUgPSBib3hTaXplOwotICAgIGFuaW1hdGlvbi0+bmFtZSA9IGtleWZy
YW1lc05hbWU7Ci0gICAgYW5pbWF0aW9uLT5hbmltYXRpb24gPSBBbmltYXRpb246OmNyZWF0ZShh
bmltKTsKLSAgICBhbmltYXRpb24tPnBhdXNlZCA9IGZhbHNlOwotICAgIGFuaW1hdGlvbi0+c3Rh
cnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpIC0gdGltZU9mZnNldDsKLQotICAgIGlmICh2YWx1
ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKSB7Ci0g
ICAgICAgIGJvb2wgaGFzQmlnUm90YXRpb247IC8vIE5vdCB1c2VkLCBidXQgcmVxdWlyZWQgYXMg
YSBwb2ludGVyIHBhcmFtZXRlciBmb3IgdGhlIGZ1bmN0aW9uLgotICAgICAgICBmZXRjaFRyYW5z
Zm9ybU9wZXJhdGlvbkxpc3QodmFsdWVMaXN0LCBhbmltYXRpb24tPmZ1bmN0aW9uTGlzdCwgYW5p
bWF0aW9uLT5saXN0c01hdGNoLCBoYXNCaWdSb3RhdGlvbik7Ci0gICAgfQorICAgIGlmICh2YWx1
ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKQorICAg
ICAgICBmZXRjaFRyYW5zZm9ybU9wZXJhdGlvbkxpc3QodmFsdWVMaXN0LCBmdW5jdGlvbkxpc3Qs
IGxpc3RzTWF0Y2gsIGhhc0JpZ1JvdGF0aW9uKTsKIAotICAgIG1fYW5pbWF0aW9ucy5hcHBlbmQo
YW5pbWF0aW9uKTsKKyAgICBtX2FuaW1hdGlvbnMuYWRkKGtleWZyYW1lc05hbWUsIFRleHR1cmVN
YXBwZXJBbmltYXRpb24odmFsdWVMaXN0LCBib3hTaXplLCBhbmltLCB0aW1lT2Zmc2V0LCBmdW5j
dGlvbkxpc3QsIGxpc3RzTWF0Y2gpKTsKICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5v
ZGU6OkFuaW1hdGlvbkNoYW5nZSk7CiAgICAgbV9hbmltYXRpb25TdGFydGVkVGltZXIuc3RhcnRP
bmVTaG90KDApOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwg
ZG91YmxlIHRpbWVPZmZzZXQpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FuaW1h
dGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS0+bmFtZSAh
PSBhbmltYXRpb25OYW1lKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1fYW5pbWF0
aW9uc1tpXS0+cGF1c2VkID0gdHJ1ZTsKLSAgICAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBw
ZXJOb2RlOjpBbmltYXRpb25DaGFuZ2UpOwotICAgIH0KKyAgICBtX2FuaW1hdGlvbnMucGF1c2Uo
YW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCiB7
Ci0gICAgZm9yIChpbnQgaSA9IG1fYW5pbWF0aW9ucy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkg
ewotICAgICAgICAvLyBUaGUgc2FtZSBhbmltYXRpb24gbmFtZSBjYW4gYmUgdXNlZCBmb3IgdHdv
IGFuaW1hdGlvbnMgd2l0aCBkaWZmZXJlbnQgcHJvcGVydGllcy4gV2Ugc2hvdWxkIHJlbW92ZSBi
b3RoLgotICAgICAgICBpZiAobV9hbmltYXRpb25zW2ldLT5uYW1lICE9IGFuaW1hdGlvbk5hbWUp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9hbmltYXRpb25zLnJlbW92ZShpKTsK
LSAgICAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpBbmltYXRpb25DaGFuZ2Up
OwotICAgIH0KKyAgICBtX2FuaW1hdGlvbnMucmVtb3ZlKGFuaW1hdGlvbk5hbWUpOwogfQogCiB2
b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphbmltYXRpb25TdGFydGVkVGltZXJGaXJl
ZChUaW1lcjxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4qKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuaAppbmRleCBlYmI5YjUzLi4xNzJmZGRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaApAQCAtOTUsNyArOTUsNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9zeW5jUXVldWVkOwogICAgIGludCBtX2NoYW5nZU1hc2s7CiAgICAgVGV4dHVy
ZU1hcHBlck5vZGU6OkNvbnRlbnREYXRhIG1fcGVuZGluZ0NvbnRlbnQ7Ci0gICAgVmVjdG9yPFJl
ZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiA+IG1fYW5pbWF0aW9uczsKKyAgICBUZXh0dXJl
TWFwcGVyQW5pbWF0aW9ucyBtX2FuaW1hdGlvbnM7CiAgICAgdm9pZCBhbmltYXRpb25TdGFydGVk
VGltZXJGaXJlZChUaW1lcjxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4qKTsKICAgICBUaW1l
cjxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4gbV9hbmltYXRpb25TdGFydGVkVGltZXI7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKaW5kZXggYjY4ZTgxMi4uY2NmNDliYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlck5vZGUuY3BwCkBAIC01ODUsMTEgKzU4NSw4IEBAIHZvaWQgVGV4dHVyZU1h
cHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlciogZ3JhCiAgICAgICAgICAgIGxheWVyLT5tX2VmZmVjdFRhcmdldCA9IHRoaXM7CiAgICAg
fQogCi0gICAgaWYgKGNoYW5nZU1hc2sgJiBBbmltYXRpb25DaGFuZ2UpIHsKLSAgICAgICAgbV9h
bmltYXRpb25zLmNsZWFyKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3JhcGhp
Y3NMYXllci0+bV9hbmltYXRpb25zLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9hbmltYXRp
b25zLmFwcGVuZChncmFwaGljc0xheWVyLT5tX2FuaW1hdGlvbnNbaV0pOwotICAgIH0KKyAgICBp
ZiAoY2hhbmdlTWFzayAmIEFuaW1hdGlvbkNoYW5nZSkKKyAgICAgICAgbV9hbmltYXRpb25zID0g
Z3JhcGhpY3NMYXllci0+bV9hbmltYXRpb25zOwogCiAgICAgbV9zdGF0ZS5tYXNrTGF5ZXIgPSB0
b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPm1hc2tMYXllcigpKTsKICAgICBtX3N0
YXRlLnJlcGxpY2FMYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhpY3NMYXllci0+cmVw
bGljYUxheWVyKCkpOwpAQCAtNjE0LDExICs2MTEsNiBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2Rl
OjpzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdy
YQogICAgIGlmICghbV9jdXJyZW50Q29udGVudC5uZWVkc0Rpc3BsYXkpCiAgICAgICAgIG1fY3Vy
cmVudENvbnRlbnQubmVlZHNEaXNwbGF5UmVjdC51bml0ZShwZW5kaW5nQ29udGVudC5uZWVkc0Rp
c3BsYXlSZWN0KTsKIAotICAgIGlmICghaGFzT3BhY2l0eUFuaW1hdGlvbigpKQotICAgICAgICBt
X29wYWNpdHkgPSBtX3N0YXRlLm9wYWNpdHk7Ci0gICAgaWYgKCFoYXNUcmFuc2Zvcm1BbmltYXRp
b24oKSkKLSAgICAgICAgbV90cmFuc2Zvcm0uc2V0TG9jYWxUcmFuc2Zvcm0obV9zdGF0ZS50cmFu
c2Zvcm0pOwotCiAgICAgbV90cmFuc2Zvcm0uc2V0UG9zaXRpb24obV9zdGF0ZS5wb3MpOwogICAg
IG1fdHJhbnNmb3JtLnNldEFuY2hvclBvaW50KG1fc3RhdGUuYW5jaG9yUG9pbnQpOwogICAgIG1f
dHJhbnNmb3JtLnNldFNpemUobV9zdGF0ZS5zaXplKTsKQEAgLTYyOCwxMCArNjIwLDggQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyKiBncmEKIAogYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6ZGVzY2VuZGFu
dHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAogewotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9hbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9h
bmltYXRpb25zW2ldLT5wYXVzZWQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Cisg
ICAgaWYgKG1fYW5pbWF0aW9ucy5oYXNSdW5uaW5nQW5pbWF0aW9ucygpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7
ICsraSkgewogICAgICAgICBpZiAobV9jaGlsZHJlbltpXS0+ZGVzY2VuZGFudHNPclNlbGZIYXZl
UnVubmluZ0FuaW1hdGlvbnMoKSkKQEAgLTY0MSwxOTcgKzYzMSwxOCBAQCBib29sIFRleHR1cmVN
YXBwZXJOb2RlOjpkZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpIGNvbnN0
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgZG91YmxlIG5vcm1hbGl6ZWRBbmltYXRp
b25WYWx1ZShkb3VibGUgcnVubmluZ1RpbWUsIGRvdWJsZSBkdXJhdGlvbiwgYm9vbCBhbHRlcm5h
dGUpCi17Ci0gICAgaWYgKCFkdXJhdGlvbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY29uc3Qg
aW50IGxvb3BDb3VudCA9IHJ1bm5pbmdUaW1lIC8gZHVyYXRpb247Ci0gICAgY29uc3QgZG91Ymxl
IGxhc3RGdWxsTG9vcCA9IGR1cmF0aW9uICogZG91YmxlKGxvb3BDb3VudCk7Ci0gICAgY29uc3Qg
ZG91YmxlIHJlbWFpbmRlciA9IHJ1bm5pbmdUaW1lIC0gbGFzdEZ1bGxMb29wOwotICAgIGNvbnN0
IGRvdWJsZSBub3JtYWxpemVkID0gcmVtYWluZGVyIC8gZHVyYXRpb247Ci0gICAgcmV0dXJuIChs
b29wQ291bnQgJSAyICYmIGFsdGVybmF0ZSkgPyAoMSAtIG5vcm1hbGl6ZWQpIDogbm9ybWFsaXpl
ZDsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6YXBwbHlPcGFjaXR5QW5pbWF0aW9uKGZs
b2F0IGZyb21PcGFjaXR5LCBmbG9hdCB0b09wYWNpdHksIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAg
ICAvLyBPcHRpbWl6YXRpb246IHNwZWNpYWwgY2FzZSB0aGUgZWRnZSB2YWx1ZXMgKDAgYW5kIDEp
LgotICAgIGlmIChwcm9ncmVzcyA9PSAxLjApCi0gICAgICAgIHNldE9wYWNpdHkodG9PcGFjaXR5
KTsKLSAgICBlbHNlIGlmICghcHJvZ3Jlc3MpCi0gICAgICAgIHNldE9wYWNpdHkoZnJvbU9wYWNp
dHkpOwotICAgIGVsc2UKLSAgICAgICAgc2V0T3BhY2l0eShmcm9tT3BhY2l0eSArIHByb2dyZXNz
ICogKHRvT3BhY2l0eSAtIGZyb21PcGFjaXR5KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG91Ymxl
IHNvbHZlRXBzaWxvbihkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgcmV0dXJuIDEuMCAvICgyMDAu
MCAqIGR1cmF0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVDdWJpY0Jlemll
ckZ1bmN0aW9uKGRvdWJsZSBwMXgsIGRvdWJsZSBwMXksIGRvdWJsZSBwMngsIGRvdWJsZSBwMnks
IGRvdWJsZSB0LCBkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgVW5pdEJlemllciBiZXppZXIocDF4
LCBwMXksIHAyeCwgcDJ5KTsKLSAgICByZXR1cm4gYmV6aWVyLnNvbHZlKHQsIHNvbHZlRXBzaWxv
bihkdXJhdGlvbikpOwotfQotCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZVN0ZXBzRnVuY3Rp
b24oaW50IG51bVN0ZXBzLCBib29sIHN0ZXBBdFN0YXJ0LCBkb3VibGUgdCkKLXsKLSAgICBpZiAo
c3RlcEF0U3RhcnQpCi0gICAgICAgIHJldHVybiBzdGQ6Om1pbigxLjAsIChmbG9vcihudW1TdGVw
cyAqIHQpICsgMSkgLyBudW1TdGVwcyk7Ci0gICAgcmV0dXJuIGZsb29yKG51bVN0ZXBzICogdCkg
LyBudW1TdGVwczsKLX0KLQotc3RhdGljIGlubGluZSBmbG9hdCBhcHBseVRpbWluZ0Z1bmN0aW9u
KGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbiwgZmxvYXQgcHJvZ3Jlc3MsIGRv
dWJsZSBkdXJhdGlvbikKLXsKLSAgICBpZiAoIXRpbWluZ0Z1bmN0aW9uKQotICAgICAgICByZXR1
cm4gcHJvZ3Jlc3M7Ci0KLSAgICBpZiAodGltaW5nRnVuY3Rpb24tPmlzQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbigpKSB7Ci0gICAgICAgIGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24q
IGN0ZiA9IHN0YXRpY19jYXN0PGNvbnN0IEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qPih0aW1p
bmdGdW5jdGlvbik7Ci0gICAgICAgIHJldHVybiBzb2x2ZUN1YmljQmV6aWVyRnVuY3Rpb24oY3Rm
LT54MSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0Zi0+eTEo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGYtPngyKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RmLT55MigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzLCBkdXJhdGlvbik7Ci0g
ICAgfQotCi0gICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc1N0ZXBzVGltaW5nRnVuY3Rpb24oKSkg
ewotICAgICAgICBjb25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKiBzdGYgPSBzdGF0aWNfY2FzdDxj
b25zdCBTdGVwc1RpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24pOwotICAgICAgICByZXR1
cm4gc29sdmVTdGVwc0Z1bmN0aW9uKHN0Zi0+bnVtYmVyT2ZTdGVwcygpLCBzdGYtPnN0ZXBBdFN0
YXJ0KCksIGRvdWJsZShwcm9ncmVzcykpOwotICAgIH0KLQotICAgIHJldHVybiBwcm9ncmVzczsK
LX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6YXBwbHlUcmFuc2Zvcm1BbmltYXRpb24oY29u
c3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uLCBjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb25zKiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB0bywgZG91YmxlIHByb2dy
ZXNzKQordm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0FuaW1hdGlvbnMoKQogewotICAgIC8v
IE9wdGltaXphdGlvbjogc3BlY2lhbCBjYXNlIHRoZSBlZGdlIHZhbHVlcyAoMCBhbmQgMSkuCi0g
ICAgaWYgKHByb2dyZXNzID09IDEuMCB8fCAhcHJvZ3Jlc3MpIHsKLSAgICAgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbWF0cml4OwotICAgICAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBv
cHMgPSBwcm9ncmVzcyA/IHRvIDogZnJvbTsKLSAgICAgICAgb3BzLT5hcHBseShhbmltYXRpb24u
Ym94U2l6ZSwgbWF0cml4KTsKLSAgICAgICAgc2V0VHJhbnNmb3JtKG1hdHJpeCk7Ci0gICAgfQot
Ci0gICAgaWYgKCFhbmltYXRpb24ubGlzdHNNYXRjaCkgewotICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCB0b01hdHJpeCwgZnJvbU1hdHJpeDsKLSAgICAgICAgdG8tPmFwcGx5KGFuaW1hdGlv
bi5ib3hTaXplLCB0b01hdHJpeCk7Ci0gICAgICAgIGZyb20tPmFwcGx5KGFuaW1hdGlvbi5ib3hT
aXplLCBmcm9tTWF0cml4KTsKLSAgICAgICAgdG9NYXRyaXguYmxlbmQoZnJvbU1hdHJpeCwgcHJv
Z3Jlc3MpOwotICAgICAgICBzZXRUcmFuc2Zvcm0odG9NYXRyaXgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotCi0gICAgaWYgKCF0
by0+c2l6ZSgpKSB7Ci0gICAgICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHN3YXAgPSB0
bzsKLSAgICAgICAgdG8gPSBmcm9tOwotICAgICAgICBmcm9tID0gc3dhcDsKLSAgICB9IGVsc2Ug
aWYgKCFmcm9tLT5zaXplKCkpCi0gICAgICAgIHByb2dyZXNzID0gMS4wIC0gcHJvZ3Jlc3M7Ci0K
LSAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kZWQoKnRvKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFuaW1hdGlvbi5mdW5jdGlvbkxpc3Quc2l6ZSgpOyArK2kpCi0gICAgICAgIGJs
ZW5kZWQub3BlcmF0aW9ucygpW2ldLT5ibGVuZChmcm9tLT5hdChpKSwgcHJvZ3Jlc3MsICFmcm9t
LT5hdChpKSktPmFwcGx5KG1hdHJpeCwgYW5pbWF0aW9uLmJveFNpemUpOwotCi0gICAgc2V0VHJh
bnNmb3JtKG1hdHJpeCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmFwcGx5QW5pbWF0
aW9uRnJhbWUoY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5pbWF0aW9uLCBjb25zdCBB
bmltYXRpb25WYWx1ZSogZnJvbSwgY29uc3QgQW5pbWF0aW9uVmFsdWUqIHRvLCBmbG9hdCBwcm9n
cmVzcykKLXsKLSAgICBzd2l0Y2ggKGFuaW1hdGlvbi5rZXlmcmFtZXMucHJvcGVydHkoKSkgewot
ICAgIGNhc2UgQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6Ci0gICAgICAgIGFwcGx5T3BhY2l0eUFu
aW1hdGlvbigoc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRpb25WYWx1ZSo+KGZyb20pLT52
YWx1ZSgpKSwgKHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0QW5pbWF0aW9uVmFsdWUqPih0byktPnZh
bHVlKCkpLCBwcm9ncmVzcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIEFuaW1hdGVkUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm06Ci0gICAgICAgIGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKGFu
aW1hdGlvbiwgc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqPihmcm9t
KS0+dmFsdWUoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUqPih0
byktPnZhbHVlKCksIHByb2dyZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6YXBwbHlBbmltYXRpb24oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYgYW5p
bWF0aW9uLCBkb3VibGUgbm9ybWFsaXplZFZhbHVlKQotewotICAgIC8vIE9wdGltaXphdGlvbjog
c3BlY2lhbCBjYXNlIHRoZSBlZGdlIHZhbHVlcyAoMCBhbmQgMSkuCi0gICAgaWYgKCFub3JtYWxp
emVkVmFsdWUpIHsKLSAgICAgICAgYXBwbHlBbmltYXRpb25GcmFtZShhbmltYXRpb24sIGFuaW1h
dGlvbi5rZXlmcmFtZXMuYXQoMCksIGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoMSksIDApOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChub3JtYWxpemVkVmFsdWUgPT0gMS4wKSB7Ci0g
ICAgICAgIGFwcGx5QW5pbWF0aW9uRnJhbWUoYW5pbWF0aW9uLCBhbmltYXRpb24ua2V5ZnJhbWVz
LmF0KGFuaW1hdGlvbi5rZXlmcmFtZXMuc2l6ZSgpIC0gMiksIGFuaW1hdGlvbi5rZXlmcmFtZXMu
YXQoYW5pbWF0aW9uLmtleWZyYW1lcy5zaXplKCkgLSAxKSwgMSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKGFuaW1hdGlvbi5rZXlmcmFtZXMuc2l6ZSgpID09IDIpIHsKLSAgICAg
ICAgbm9ybWFsaXplZFZhbHVlID0gYXBwbHlUaW1pbmdGdW5jdGlvbihhbmltYXRpb24uYW5pbWF0
aW9uLT50aW1pbmdGdW5jdGlvbigpLmdldCgpLCBub3JtYWxpemVkVmFsdWUsIGFuaW1hdGlvbi5h
bmltYXRpb24tPmR1cmF0aW9uKCkpOwotICAgICAgICBhcHBseUFuaW1hdGlvbkZyYW1lKGFuaW1h
dGlvbiwgYW5pbWF0aW9uLmtleWZyYW1lcy5hdCgwKSwgYW5pbWF0aW9uLmtleWZyYW1lcy5hdCgx
KSwgbm9ybWFsaXplZFZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYW5pbWF0aW9uLmtleWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsK
LSAgICAgICAgY29uc3QgQW5pbWF0aW9uVmFsdWUqIGZyb20gPSBhbmltYXRpb24ua2V5ZnJhbWVz
LmF0KGkpOwotICAgICAgICBjb25zdCBBbmltYXRpb25WYWx1ZSogdG8gPSBhbmltYXRpb24ua2V5
ZnJhbWVzLmF0KGkgKyAxKTsKLSAgICAgICAgaWYgKGZyb20tPmtleVRpbWUoKSA+IG5vcm1hbGl6
ZWRWYWx1ZSB8fCB0by0+a2V5VGltZSgpIDwgbm9ybWFsaXplZFZhbHVlKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gKG5vcm1hbGl6ZWRWYWx1ZSAt
IGZyb20tPmtleVRpbWUoKSkgLyAodG8tPmtleVRpbWUoKSAtIGZyb20tPmtleVRpbWUoKSk7Ci0g
ICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IGFwcGx5VGltaW5nRnVuY3Rpb24oZnJvbS0+dGltaW5n
RnVuY3Rpb24oKSwgbm9ybWFsaXplZFZhbHVlLCBhbmltYXRpb24uYW5pbWF0aW9uLT5kdXJhdGlv
bigpKTsKLSAgICAgICAgYXBwbHlBbmltYXRpb25GcmFtZShhbmltYXRpb24sIGZyb20sIHRvLCBu
b3JtYWxpemVkVmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLWJvb2wgVGV4dHVy
ZU1hcHBlck5vZGU6Omhhc09wYWNpdHlBbmltYXRpb24oKSBjb25zdAotewotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0
IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiA9ICptX2FuaW1hdGlvbnNbaV0uZ2V0
KCk7Ci0gICAgICAgIGlmIChhbmltYXRpb24ua2V5ZnJhbWVzLnByb3BlcnR5KCkgPT0gQW5pbWF0
ZWRQcm9wZXJ0eU9wYWNpdHkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRleHR1cmVNYXBwZXJOb2RlOjpoYXNUcmFuc2Zvcm1B
bmltYXRpb24oKSBjb25zdAotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hbmltYXRp
b25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24m
IGFuaW1hdGlvbiA9ICptX2FuaW1hdGlvbnNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChhbmltYXRp
b24ua2V5ZnJhbWVzLnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNBbmltYXRpb25zKEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyKiBsYXllcikKLXsKLSAgICBmb3IgKGludCBpID0gbV9hbmltYXRpb25zLnNp
emUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uPiBhbmltYXRpb24gPSBtX2FuaW1hdGlvbnNbaV07Ci0KLSAgICAgICAgZG91YmxlIHRv
dGFsUnVubmluZ1RpbWUgPSBXVEY6OmN1cnJlbnRUaW1lKCkgLSBhbmltYXRpb24tPnN0YXJ0VGlt
ZTsKLSAgICAgICAgUmVmUHRyPEFuaW1hdGlvbj4gYW5pbSA9IGFuaW1hdGlvbi0+YW5pbWF0aW9u
OwotICAgICAgICBkb3VibGUgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplZEFuaW1hdGlvblZh
bHVlKHRvdGFsUnVubmluZ1RpbWUsIGFuaW0tPmR1cmF0aW9uKCksIGFuaW0tPmRpcmVjdGlvbigp
KTsKLQotICAgICAgICBpZiAoYW5pbS0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmltYXRpb246Okl0
ZXJhdGlvbkNvdW50SW5maW5pdGUgJiYgdG90YWxSdW5uaW5nVGltZSA+PSBhbmltLT5kdXJhdGlv
bigpICogYW5pbS0+aXRlcmF0aW9uQ291bnQoKSkgewotICAgICAgICAgICAgLy8gV2UgYXBwbHkg
YW4gYW5pbWF0aW9uIHRoYXQgdmVyeSBjbG9zZSB0byB0aGUgZWRnZSwgc28gdGhhdCB0aGUgZmlu
YWwgZnJhbWUgaXMgYXBwbGllZCwgb3Rlcndpc2Ugd2UgbWlnaHQgZ2V0LCBmb3IgZXhhbXBsZSwg
YW4gb3BhY2l0eSBvZiAwLjAxIHdoaWNoIGlzIHN0aWxsIHZpc2libGUuCi0gICAgICAgICAgICBp
ZiAoYW5pbS0+ZmlsbHNGb3J3YXJkcygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFuaW1hdGlv
bi0+a2V5ZnJhbWVzLnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bSkKLSAgICAgICAgICAgICAgICAgICAgc2V0VHJhbnNmb3JtKG1fc3RhdGUudHJhbnNmb3JtKTsK
LSAgICAgICAgICAgICAgICBlbHNlIGlmIChhbmltYXRpb24tPmtleWZyYW1lcy5wcm9wZXJ0eSgp
ID09IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KQotICAgICAgICAgICAgICAgICAgICBzZXRPcGFj
aXR5KG1fc3RhdGUub3BhY2l0eSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1fYW5p
bWF0aW9ucy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICghYW5pbWF0aW9uLT5wYXVzZWQpCi0gICAgICAgICAgICBhcHBseUFuaW1hdGlv
bigqYW5pbWF0aW9uLmdldCgpLCBub3JtYWxpemVkVmFsdWUpOwotICAgIH0KKyAgICBtX2FuaW1h
dGlvbnMuYXBwbHkodGhpcyk7CisgICAgaWYgKCFtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0
aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKSkKKyAgICAgICAgc2V0
VHJhbnNmb3JtKG1fc3RhdGUudHJhbnNmb3JtKTsKKyAgICBpZiAoIW1fYW5pbWF0aW9ucy5oYXNB
Y3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSkKKyAgICAgICAg
c2V0T3BhY2l0eShtX3N0YXRlLm9wYWNpdHkpOwogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJOb2Rl
OjpzeW5jQW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCkKIHsKLSAgICBzeW5jQW5pbWF0aW9ucygwKTsK
KyAgICBzeW5jQW5pbWF0aW9ucygpOwogCiAgICAgZm9yIChpbnQgaSA9IG1fY2hpbGRyZW4uc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpCiAgICAgICAgIG1fY2hpbGRyZW5baV0tPnN5bmNBbmltYXRp
b25zUmVjdXJzaXZlbHkoKTsKQEAgLTg1NSw4ICs2NjYsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJO
b2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3Jh
cGhpYwogICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikKICAgICAgICAgbV9zdGF0ZS5yZXBs
aWNhTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIoZ3JhcGhpY3NMYXllci0+cmVwbGljYUxheWVyKCkpLCB0ZXh0dXJlTWFwcGVyKTsKIAotICAg
IHN5bmNBbmltYXRpb25zKGdyYXBoaWNzTGF5ZXIpOwotCisgICAgc3luY0FuaW1hdGlvbnMoKTsK
ICAgICBjb21wdXRlVGlsZXMoKTsKIAogICAgIGlmIChncmFwaGljc0xheWVyKQpAQCAtODc5LDEx
ICs2ODksNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpYwogICAgIH0KIH0KIAotVGV4dHVyZU1h
cHBlckFuaW1hdGlvbjo6VGV4dHVyZU1hcHBlckFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVl
TGlzdCYgdmFsdWVzKQotICAgIDoga2V5ZnJhbWVzKHZhbHVlcykKLXsKIH0KLQotfQotCiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgKaW5kZXggYTY5NjFlOC4uZmU0YjE0YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJOb2RlLmgKQEAgLTI3LDEwICsyNyw5IEBACiAjaW5jbHVkZSAiSW50UG9pbnRIYXNo
LmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
LmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIlRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIlVuaXRCZXppZXIuaCIKICNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CkBAIC01NywyMiArNTYsNyBAQCBwdWJsaWM6CiAgICAgeyB9CiB9
OwogCi1jbGFzcyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8VGV4
dHVyZU1hcHBlckFuaW1hdGlvbj4gewotcHVibGljOgotICAgIFN0cmluZyBuYW1lOwotICAgIEtl
eWZyYW1lVmFsdWVMaXN0IGtleWZyYW1lczsKLSAgICBJbnRTaXplIGJveFNpemU7Ci0gICAgUmVm
UHRyPEFuaW1hdGlvbj4gYW5pbWF0aW9uOwotICAgIGJvb2wgcGF1c2VkOwotICAgIFZlY3RvcjxU
cmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGU+IGZ1bmN0aW9uTGlzdDsKLSAgICBib29s
IGxpc3RzTWF0Y2g7Ci0gICAgYm9vbCBoYXNCaWdSb3RhdGlvbjsKLSAgICBkb3VibGUgc3RhcnRU
aW1lOwotICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3Qm
KTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiBjcmVhdGUo
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcykgeyByZXR1cm4gYWRvcHRSZWYobmV3IFRl
eHR1cmVNYXBwZXJBbmltYXRpb24odmFsdWVzKSk7IH0KLX07Ci0KLWNsYXNzIFRleHR1cmVNYXBw
ZXJOb2RlIHsKK2NsYXNzIFRleHR1cmVNYXBwZXJOb2RlIDogcHVibGljIFRleHR1cmVNYXBwZXJB
bmltYXRpb25DbGllbnQgewogCiBwdWJsaWM6CiAgICAgLy8gVGhpcyBzZXQgb2YgZmxhZ3MgaGVs
cCB1cyBkZWZlciB3aGljaCBwcm9wZXJ0aWVzIG9mIHRoZSBsYXllciBoYXZlIGJlZW4KQEAgLTE5
OCwxMyArMTgyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50U2VsZkFuZENoaWxkcmVuV2l0
aFJlcGxpY2EoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYpOwogICAgIHZvaWQgcmVu
ZGVyQ29udGVudChUZXh0dXJlTWFwcGVyKiwgR3JhcGhpY3NMYXllciopOwogCi0gICAgdm9pZCBz
eW5jQW5pbWF0aW9ucyhHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciopOwotICAgIHZvaWQgYXBw
bHlBbmltYXRpb24oY29uc3QgVGV4dHVyZU1hcHBlckFuaW1hdGlvbiYsIGRvdWJsZSBydW5uaW5n
VGltZSk7Ci0gICAgdm9pZCBhcHBseUFuaW1hdGlvbkZyYW1lKGNvbnN0IFRleHR1cmVNYXBwZXJB
bmltYXRpb24mLCBjb25zdCBBbmltYXRpb25WYWx1ZSogZnJvbSwgY29uc3QgQW5pbWF0aW9uVmFs
dWUqIHRvLCBmbG9hdCBwcm9ncmVzcyk7Ci0gICAgdm9pZCBhcHBseU9wYWNpdHlBbmltYXRpb24o
ZmxvYXQgZnJvbU9wYWNpdHksIGZsb2F0IHRvT3BhY2l0eSwgZG91YmxlKTsKLSAgICB2b2lkIGFw
cGx5VHJhbnNmb3JtQW5pbWF0aW9uKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mLCBjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBzdGFydCwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyog
ZW5kLCBkb3VibGUpOwotICAgIGJvb2wgaGFzT3BhY2l0eUFuaW1hdGlvbigpIGNvbnN0OwotICAg
IGJvb2wgaGFzVHJhbnNmb3JtQW5pbWF0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBzeW5jQW5pbWF0
aW9ucygpOwogICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3Q7CiAgICAgYm9vbCBzaG91bGRQYWlu
dFRvSW50ZXJtZWRpYXRlU3VyZmFjZSgpIGNvbnN0OwogCkBAIC0zMTUsOCArMjkzLDcgQEAgcHJp
dmF0ZToKIAogICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgVGV4dHVyZU1hcHBlciogbV90ZXh0dXJl
TWFwcGVyOwotCi0gICAgVmVjdG9yPFJlZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiA+IG1f
YW5pbWF0aW9uczsKKyAgICBUZXh0dXJlTWFwcGVyQW5pbWF0aW9ucyBtX2FuaW1hdGlvbnM7CiB9
OwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggOGE1MGY2NS4uMGMwMGM1NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMyBAQAorMjAxMi0wMS0yNSAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3Nl
bnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFtUZXhtYXBdIERpdmlkZSBUZXh0dXJlTWFwcGVy
Tm9kZS5jcHAgdG8gMyBmaWxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc2NjYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBkZWNsYXJhdGl2ZS9leHBlcmltZW50YWwvZXhwZXJpbWVudGFsLnByaToK
KyAgICAgICAgKiBkZWNsYXJhdGl2ZS9wdWJsaWMucHJpOgorCiAyMDEyLTAxLTE3ICBWaWF0Y2hl
c2xhdiBPc3RhcGVua28gIDxvc3RhcGVua28udmlhdGNoZXNsYXZAbm9raWEuY29tPgogCiAgICAg
ICAgIFtRdF0gRGVidWcgYnVpbGQgZmFpbHMgd2l0aCBkZWJ1ZyBxdDUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhwZXJpbWVudGFsL2V4cGVyaW1lbnRhbC5wcmkg
Yi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4cGVyaW1lbnRhbC9leHBlcmltZW50YWwu
cHJpCmluZGV4IDQ5ZjQ2M2QuLjdhNGQ3ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQv
ZGVjbGFyYXRpdmUvZXhwZXJpbWVudGFsL2V4cGVyaW1lbnRhbC5wcmkKKysrIGIvU291cmNlL1dl
YktpdC9xdC9kZWNsYXJhdGl2ZS9leHBlcmltZW50YWwvZXhwZXJpbWVudGFsLnByaQpAQCAtMjYs
NyArMjYsNyBAQCB3aW5jZSo6TElCUyArPSAkJFFNQUtFX0xJQlNfR1VJCiAKIENPTkZJRyArPSBx
dHdlYmtpdCBxdHdlYmtpdC1wcml2YXRlCiAKLVFUICs9IGRlY2xhcmF0aXZlIHdpZGdldHMgbmV0
d29yaworUVQgKz0gcXVpY2sgZGVjbGFyYXRpdmUgd2lkZ2V0cyBuZXR3b3JrCiAKIERFU1RESVIg
PSAkJHtST09UX0JVSUxEX0RJUn0vaW1wb3J0cy8kJHtUQVJHRVQubW9kdWxlX25hbWV9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcHVibGljLnByaSBiL1NvdXJj
ZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcHVibGljLnByaQppbmRleCAzZTJmYjQ3Li4zNTJiNDZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3B1YmxpYy5wcmkKKysr
IGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wdWJsaWMucHJpCkBAIC0yNiw3ICsyNiw3
IEBAIHdpbmNlKjpMSUJTICs9ICQkUU1BS0VfTElCU19HVUkKIAogQ09ORklHICs9IHF0d2Via2l0
IHF0d2Via2l0LXByaXZhdGUKIAotUVQgKz0gZGVjbGFyYXRpdmUKK1FUICs9IHF1aWNrIGRlY2xh
cmF0aXZlCiBoYXZlUXQoNSk6IFFUICs9IHdpZGdldHMKIAogY29udGFpbnMoUVRfQ09ORklHLCBx
dHF1aWNrMSk6IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9hcGkucHJpIGIvU291cmNlL2FwaS5wcmkK
aW5kZXggOWI3YjI3Yi4uNDlmMzViNCAxMDA2NDQKLS0tIGEvU291cmNlL2FwaS5wcmkKKysrIGIv
U291cmNlL2FwaS5wcmkKQEAgLTIzLDcgKzIzLDcgQEAgV0VCS0lUICs9IHdlYmNvcmUKIAogIW5v
X3dlYmtpdDIgewogICAgIFdFQktJVCArPSB3ZWJraXQyCi0gICAgUVQgKz0gZGVjbGFyYXRpdmUK
KyAgICBRVCArPSBkZWNsYXJhdGl2ZSBxdWljawogCiAgICAgIyBFbnN1cmUgdGhhdCBjaGFuZ2Vz
IHRvIHRoZSBXZWJLaXQyIEFQSSB3aWxsIHRyaWdnZXIgYSBxbWFrZSBvZiB0aGlzCiAgICAgIyBm
aWxlLCB3aGljaCBpbiB0dXJuIHJ1bnMgc3luY3F0IHRvIHVwZGF0ZSB0aGUgZm9yd2FyZGluZyBo
ZWFkZXJzLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124006</attachid>
            <date>2012-01-25 13:58:37 -0800</date>
            <delta_ts>2012-02-14 23:25:02 -0800</delta_ts>
            <desc>Patch 1: Move animations to TextureMapperAnimations</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>35548</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjOTJiNjRhLi42MjQ2ZmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUg
QEAKKzIwMTItMDEtMjUgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbVGV4bWFwXSBEaXZpZGUgVGV4dHVyZU1hcHBlck5vZGUuY3BwIHRvIDMg
ZmlsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NjY2MAorCisgICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4K
KworICAgICAgICAgU3BsaXQgdGhlIGFuaW1hdGlvbiBwYXJ0IG9mIFRleHR1cmVNYXBwZXJOb2Rl
IG91dCB0byBhIHNlcGFyYXRlIGZpbGUsIGNhbGxlZAorICAgICAgICAgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbi4KKyAgICAgICAgIFByb3ZpZGUgYSBjbGVhbiBpbnRlcmZhY2UgZm9yIHRoYXQgY2xh
c3MsIHRoYXQgYWxsb3dzIHNlcGFyYXRpbmcgdGhlIGludGVybmFscyBvZiB0aGUgc2NlbmUKKyAg
ICAgICAgIHBhaW50aW5nIGZyb20gdGhlIGludGVybmFscyBvZiB0aGUgYW5pbWF0aW9uIGludGVy
cG9sYXRpb24uCisKKyAgICAgICAgIE5vIG5ldyB0ZXN0cy4gRXhpc3RpbmcgYW5pbWF0aW9uIHRl
c3RzIGNvdmVyIHRoaXMuCisKKyAgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAg
ICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZEFuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cGF1c2VBbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnJl
bW92ZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9z
aXRpbmdTdGF0ZVNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGU6OmRl
c2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyTm9kZTo6c3luY0FuaW1hdGlvbnNSZWN1cnNpdmVseSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oOgorICAgICAg
ICAoVGV4dHVyZU1hcHBlck5vZGUpOgorCiAyMDEyLTAxLTI1ICBKb3NlcGggUGVjb3Jhcm8gIDxw
ZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvNzY5NDE+
IFdlYiBJbnNwZWN0b3I6IFJlbW92ZSBVbnVzZWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LnNlYXJj
aCBTdHViCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAyMTk1ODZmLi5jMDA4YjUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU3MTksNiArNTcxOSw4IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0xheWVyVHJhbnNmb3JtLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5v
ZGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlck5vZGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKQEAgLTU3MzcsNiArNTczOSw4IEBAIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L0xheWVyVHJhbnNmb3JtLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlck5vZGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGNmOTI5MWEuLjAzZWFi
NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQpAQCAtMzkyOSw2ICszOTI5LDcgQEAgY29udGFpbnMoQ09ORklHLCB0
ZXhtYXApIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvTGF5ZXJU
cmFuc2Zvcm0uaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyLmggXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFu
aW1hdGlvbi5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJOb2RlLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXIuaAogCkBAIC0zOTM2LDYgKzM5MzcsNyBAQCBjb250YWlucyhDT05GSUcs
IHRleG1hcCkgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UZXh0dXJlTWFwcGVyUXQu
Y3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0xheWVyVHJhbnNmb3JtLmNw
cCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBc
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9u
LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9k
ZS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxNjE0ZmI0Li4zNTcwZmNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC0zNTcyLDYgKzM1NzIsOCBAQAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9MYXllclRyYW5zZm9ybS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmNwcCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJOb2RlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuY3BwCmluZGV4IDdlZjk4MTguLmY0NzhiOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcApAQCAtMzY1LDU5ICszNjUsMjcgQEAgYm9vbCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiB2YWx1ZUxpc3QKICAgICBpZiAoIWFuaW0gfHwgYW5pbS0+aXNFbXB0eU9yWmVyb0R1cmF0
aW9uKCkgfHwgdmFsdWVMaXN0LnNpemUoKSA8IDIgfHwgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpICE9
IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0gJiYgdmFsdWVMaXN0LnByb3BlcnR5KCkg
IT0gQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAg
ICAgICAvLyBUaGUgc2FtZSBhbmltYXRpb24gbmFtZSBjYW4gYmUgdXNlZCBmb3IgdHdvIGFuaW1h
dGlvbnMgd2l0aCBkaWZmZXJlbnQgcHJvcGVydGllcy4KLSAgICAgICAgaWYgKG1fYW5pbWF0aW9u
c1tpXS0+bmFtZSAhPSBrZXlmcmFtZXNOYW1lIHx8IG1fYW5pbWF0aW9uc1tpXS0+a2V5ZnJhbWVz
LnByb3BlcnR5KCkgIT0gdmFsdWVMaXN0LnByb3BlcnR5KCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYSBjb3B5IG9mIHRoaXMgYW5pbWF0aW9u
LCB0aGF0IG1lYW5zIHRoYXQgd2UncmUgcmVzdW1pbmcgaXQgcmF0aGVyIHRoYW4gYWRkaW5nIGl0
LgotICAgICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4mIGFuaW1hdGlvbiA9IG1f
YW5pbWF0aW9uc1tpXTsKLSAgICAgICAgYW5pbWF0aW9uLT5hbmltYXRpb24gPSBBbmltYXRpb246
OmNyZWF0ZShhbmltKTsKLSAgICAgICAgYW5pbWF0aW9uLT5wYXVzZWQgPSBmYWxzZTsKLSAgICAg
ICAgYW5pbWF0aW9uLT5zdGFydFRpbWUgPSBXVEY6OmN1cnJlbnRUaW1lKCkgLSB0aW1lT2Zmc2V0
OwotICAgICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkFuaW1hdGlvbkNoYW5n
ZSk7Ci0gICAgICAgIG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGJvb2wgbGlzdHNNYXRjaDsKKyAgICBib29s
IGhhc0JpZ1JvdGF0aW9uOworICAgIFZlY3RvcjxUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlv
blR5cGU+IGZ1bmN0aW9uTGlzdDsKIAotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
PiBhbmltYXRpb24gPSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpjcmVhdGUodmFsdWVMaXN0KTsK
LSAgICBhbmltYXRpb24tPmJveFNpemUgPSBib3hTaXplOwotICAgIGFuaW1hdGlvbi0+bmFtZSA9
IGtleWZyYW1lc05hbWU7Ci0gICAgYW5pbWF0aW9uLT5hbmltYXRpb24gPSBBbmltYXRpb246OmNy
ZWF0ZShhbmltKTsKLSAgICBhbmltYXRpb24tPnBhdXNlZCA9IGZhbHNlOwotICAgIGFuaW1hdGlv
bi0+c3RhcnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpIC0gdGltZU9mZnNldDsKLQotICAgIGlm
ICh2YWx1ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3Jt
KSB7Ci0gICAgICAgIGJvb2wgaGFzQmlnUm90YXRpb247IC8vIE5vdCB1c2VkLCBidXQgcmVxdWly
ZWQgYXMgYSBwb2ludGVyIHBhcmFtZXRlciBmb3IgdGhlIGZ1bmN0aW9uLgotICAgICAgICBmZXRj
aFRyYW5zZm9ybU9wZXJhdGlvbkxpc3QodmFsdWVMaXN0LCBhbmltYXRpb24tPmZ1bmN0aW9uTGlz
dCwgYW5pbWF0aW9uLT5saXN0c01hdGNoLCBoYXNCaWdSb3RhdGlvbik7Ci0gICAgfQorICAgIGlm
ICh2YWx1ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3Jt
KQorICAgICAgICBmZXRjaFRyYW5zZm9ybU9wZXJhdGlvbkxpc3QodmFsdWVMaXN0LCBmdW5jdGlv
bkxpc3QsIGxpc3RzTWF0Y2gsIGhhc0JpZ1JvdGF0aW9uKTsKIAotICAgIG1fYW5pbWF0aW9ucy5h
cHBlbmQoYW5pbWF0aW9uKTsKKyAgICBtX2FuaW1hdGlvbnMuYWRkKGtleWZyYW1lc05hbWUsIFRl
eHR1cmVNYXBwZXJBbmltYXRpb24odmFsdWVMaXN0LCBib3hTaXplLCBhbmltLCB0aW1lT2Zmc2V0
LCBmdW5jdGlvbkxpc3QsIGxpc3RzTWF0Y2gpKTsKICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlck5vZGU6OkFuaW1hdGlvbkNoYW5nZSk7CiAgICAgbV9hbmltYXRpb25TdGFydGVkVGltZXIu
c3RhcnRPbmVTaG90KDApOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXI6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9u
TmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2FuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9uc1tpXS0+
bmFtZSAhPSBhbmltYXRpb25OYW1lKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1f
YW5pbWF0aW9uc1tpXS0+cGF1c2VkID0gdHJ1ZTsKLSAgICAgICAgbm90aWZ5Q2hhbmdlKFRleHR1
cmVNYXBwZXJOb2RlOjpBbmltYXRpb25DaGFuZ2UpOwotICAgIH0KKyAgICBtX2FuaW1hdGlvbnMu
cGF1c2UoYW5pbWF0aW9uTmFtZSwgdGltZU9mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5h
bWUpCiB7Ci0gICAgZm9yIChpbnQgaSA9IG1fYW5pbWF0aW9ucy5zaXplKCkgLSAxOyBpID49IDA7
IC0taSkgewotICAgICAgICAvLyBUaGUgc2FtZSBhbmltYXRpb24gbmFtZSBjYW4gYmUgdXNlZCBm
b3IgdHdvIGFuaW1hdGlvbnMgd2l0aCBkaWZmZXJlbnQgcHJvcGVydGllcy4gV2Ugc2hvdWxkIHJl
bW92ZSBib3RoLgotICAgICAgICBpZiAobV9hbmltYXRpb25zW2ldLT5uYW1lICE9IGFuaW1hdGlv
bk5hbWUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9hbmltYXRpb25zLnJlbW92
ZShpKTsKLSAgICAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpBbmltYXRpb25D
aGFuZ2UpOwotICAgIH0KKyAgICBtX2FuaW1hdGlvbnMucmVtb3ZlKGFuaW1hdGlvbk5hbWUpOwog
fQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphbmltYXRpb25TdGFydGVkVGlt
ZXJGaXJlZChUaW1lcjxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4qKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuaAppbmRleCBlYmI5YjUzLi4xNzJmZGRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaApAQCAtOTUsNyArOTUsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9zeW5jUXVldWVkOwogICAgIGludCBtX2NoYW5nZU1hc2s7CiAgICAg
VGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnREYXRhIG1fcGVuZGluZ0NvbnRlbnQ7Ci0gICAgVmVj
dG9yPFJlZlB0cjxUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPiA+IG1fYW5pbWF0aW9uczsKKyAgICBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9ucyBtX2FuaW1hdGlvbnM7CiAgICAgdm9pZCBhbmltYXRpb25T
dGFydGVkVGltZXJGaXJlZChUaW1lcjxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4qKTsKICAg
ICBUaW1lcjxHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcj4gbV9hbmltYXRpb25TdGFydGVkVGlt
ZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZDE5NmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5j
cHAKQEAgLTAsMCArMSwyNTYgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckFuaW1hdGlv
bi5oIgorCisjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIKKyNpbmNsdWRlICJVbml0QmV6aWVyLmgi
CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyBkb3VibGUgbm9ybWFsaXplZEFuaW1hdGlvblZhbHVlKGRvdWJsZSBydW5uaW5nVGltZSwgZG91
YmxlIGR1cmF0aW9uLCBib29sIGFsdGVybmF0ZSkKK3sKKyAgICBpZiAoIWR1cmF0aW9uKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0IGludCBsb29wQ291bnQgPSBydW5uaW5nVGltZSAv
IGR1cmF0aW9uOworICAgIGNvbnN0IGRvdWJsZSBsYXN0RnVsbExvb3AgPSBkdXJhdGlvbiAqIGRv
dWJsZShsb29wQ291bnQpOworICAgIGNvbnN0IGRvdWJsZSByZW1haW5kZXIgPSBydW5uaW5nVGlt
ZSAtIGxhc3RGdWxsTG9vcDsKKyAgICBjb25zdCBkb3VibGUgbm9ybWFsaXplZCA9IHJlbWFpbmRl
ciAvIGR1cmF0aW9uOworICAgIHJldHVybiAobG9vcENvdW50ICUgMiAmJiBhbHRlcm5hdGUpID8g
KDEgLSBub3JtYWxpemVkKSA6IG5vcm1hbGl6ZWQ7Cit9CisKK3N0YXRpYyBmbG9hdCBhcHBseU9w
YWNpdHlBbmltYXRpb24oZmxvYXQgZnJvbU9wYWNpdHksIGZsb2F0IHRvT3BhY2l0eSwgZG91Ymxl
IHByb2dyZXNzKQoreworICAgIC8vIE9wdGltaXphdGlvbjogc3BlY2lhbCBjYXNlIHRoZSBlZGdl
IHZhbHVlcyAoMCBhbmQgMSkuCisgICAgaWYgKHByb2dyZXNzID09IDEuMCkKKyAgICAgICAgcmV0
dXJuIHRvT3BhY2l0eTsKKworICAgIGlmICghcHJvZ3Jlc3MpCisgICAgICAgIHJldHVybiBmcm9t
T3BhY2l0eTsKKworICAgIHJldHVybiBmcm9tT3BhY2l0eSArIHByb2dyZXNzICogKHRvT3BhY2l0
eSAtIGZyb21PcGFjaXR5KTsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVFcHNpbG9u
KGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICByZXR1cm4gMS4wIC8gKDIwMC4wICogZHVyYXRpb24p
OworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUN1YmljQmV6aWVyRnVuY3Rpb24oZG91
YmxlIHAxeCwgZG91YmxlIHAxeSwgZG91YmxlIHAyeCwgZG91YmxlIHAyeSwgZG91YmxlIHQsIGRv
dWJsZSBkdXJhdGlvbikKK3sKKyAgICByZXR1cm4gVW5pdEJlemllcihwMXgsIHAxeSwgcDJ4LCBw
MnkpLnNvbHZlKHQsIHNvbHZlRXBzaWxvbihkdXJhdGlvbikpOworfQorCitzdGF0aWMgaW5saW5l
IGRvdWJsZSBzb2x2ZVN0ZXBzRnVuY3Rpb24oaW50IG51bVN0ZXBzLCBib29sIHN0ZXBBdFN0YXJ0
LCBkb3VibGUgdCkKK3sKKyAgICBpZiAoc3RlcEF0U3RhcnQpCisgICAgICAgIHJldHVybiBzdGQ6
Om1pbigxLjAsIChmbG9vcihudW1TdGVwcyAqIHQpICsgMSkgLyBudW1TdGVwcyk7CisgICAgcmV0
dXJuIGZsb29yKG51bVN0ZXBzICogdCkgLyBudW1TdGVwczsKK30KKworc3RhdGljIGlubGluZSBm
bG9hdCBhcHBseVRpbWluZ0Z1bmN0aW9uKGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5j
dGlvbiwgZmxvYXQgcHJvZ3Jlc3MsIGRvdWJsZSBkdXJhdGlvbikKK3sKKyAgICBpZiAoIXRpbWlu
Z0Z1bmN0aW9uKQorICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7CisKKyAgICBpZiAodGltaW5nRnVu
Y3Rpb24tPmlzQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbigpKSB7CisgICAgICAgIGNvbnN0IEN1
YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qIGN0ZiA9IHN0YXRpY19jYXN0PGNvbnN0IEN1YmljQmV6
aWVyVGltaW5nRnVuY3Rpb24qPih0aW1pbmdGdW5jdGlvbik7CisgICAgICAgIHJldHVybiBzb2x2
ZUN1YmljQmV6aWVyRnVuY3Rpb24oY3RmLT54MSgpLCBjdGYtPnkxKCksIGN0Zi0+eDIoKSwgY3Rm
LT55MigpLCBwcm9ncmVzcywgZHVyYXRpb24pOworICAgIH0KKworICAgIGlmICh0aW1pbmdGdW5j
dGlvbi0+aXNTdGVwc1RpbWluZ0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgY29uc3QgU3RlcHNUaW1p
bmdGdW5jdGlvbiogc3RmID0gc3RhdGljX2Nhc3Q8Y29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbio+
KHRpbWluZ0Z1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJuIHNvbHZlU3RlcHNGdW5jdGlvbihzdGYt
Pm51bWJlck9mU3RlcHMoKSwgc3RmLT5zdGVwQXRTdGFydCgpLCBkb3VibGUocHJvZ3Jlc3MpKTsK
KyAgICB9CisKKyAgICByZXR1cm4gcHJvZ3Jlc3M7Cit9CisKK3N0YXRpYyBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBhcHBseVRyYW5zZm9ybUFuaW1hdGlvbihjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
KiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB0bywgZG91YmxlIHByb2dyZXNzLCBj
b25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBWZWN0b3I8VHJhbnNmb3JtT3BlcmF0aW9uOjpP
cGVyYXRpb25UeXBlPiBmdW5jdGlvbkxpc3QsIGJvb2wgbGlzdHNNYXRjaCkKK3sKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisKKyAgICAvLyBGaXJzdCBmcmFtZSBvZiBhbiBhbmlt
YXRpb24uCisgICAgaWYgKCFwcm9ncmVzcykgeworICAgICAgICBmcm9tLT5hcHBseShib3hTaXpl
LCBtYXRyaXgpOworICAgICAgICByZXR1cm4gbWF0cml4OworICAgIH0KKworICAgIC8vIExhc3Qg
ZnJhbWUgb2YgYW4gYW5pbWF0aW9uLgorICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7CisgICAgICAg
IHRvLT5hcHBseShib3hTaXplLCBtYXRyaXgpOworICAgICAgICByZXR1cm4gbWF0cml4OworICAg
IH0KKworICAgIC8vIElmIHdlIGhhdmUgaW5jb21wYXRpYmxlIG9wZXJhdGlvbiBsaXN0cywgd2Ug
YmxlbmQgdGhlIHJlc3VsdGluZyBtYXRyaWNlcy4KKyAgICBpZiAoIWxpc3RzTWF0Y2gpIHsKKyAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZnJvbU1hdHJpeDsKKyAgICAgICAgdG8tPmFwcGx5
KGJveFNpemUsIG1hdHJpeCk7CisgICAgICAgIGZyb20tPmFwcGx5KGJveFNpemUsIGZyb21NYXRy
aXgpOworICAgICAgICBtYXRyaXguYmxlbmQoZnJvbU1hdHJpeCwgcHJvZ3Jlc3MpOworICAgICAg
ICByZXR1cm4gbWF0cml4OworICAgIH0KKworICAgIC8vIEFuaW1hdGlvbiB0byAiLXdlYmtpdC10
cmFuc2Zvcm06IG5vbmUiLgorICAgIGlmICghdG8tPnNpemUoKSkgeworICAgICAgICBUcmFuc2Zv
cm1PcGVyYXRpb25zIGJsZW5kZWQoKnRvKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBibGVuZGVkLm9wZXJhdGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGJsZW5kZWQu
b3BlcmF0aW9ucygpW2ldLT5ibGVuZCgwLCBwcm9ncmVzcywgdHJ1ZSktPmFwcGx5KG1hdHJpeCwg
Ym94U2l6ZSk7CisgICAgICAgIHJldHVybiBtYXRyaXg7CisgICAgfQorCisgICAgLy8gQW5pbWF0
aW9uIGZyb20gIi13ZWJraXQtdHJhbnNmb3JtOiBub25lIi4KKyAgICBpZiAoIWZyb20tPnNpemUo
KSkgeworICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kZWQoKmZyb20pOworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsZW5kZWQub3BlcmF0aW9ucygpLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgYmxlbmRlZC5vcGVyYXRpb25zKClbaV0tPmJsZW5kKDAsIDEuIC0gcHJv
Z3Jlc3MsIHRydWUpLT5hcHBseShtYXRyaXgsIGJveFNpemUpOworICAgICAgICByZXR1cm4gbWF0
cml4OworICAgIH0KKworICAgIC8vIE5vcm1hbCBhbmltYXRpb24gd2l0aCBhIG1hdGNoaW5nIG9w
ZXJhdGlvbiBsaXN0LgorICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRlZCgqdG8pOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxlbmRlZC5vcGVyYXRpb25zKCkuc2l6ZSgpOyArK2kp
CisgICAgICAgIGJsZW5kZWQub3BlcmF0aW9ucygpW2ldLT5ibGVuZChmcm9tLT5hdChpKSwgcHJv
Z3Jlc3MsICFmcm9tLT5hdChpKSktPmFwcGx5KG1hdHJpeCwgYm94U2l6ZSk7CisgICAgcmV0dXJu
IG1hdHJpeDsKK30KKworCitUZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjpUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMsIGNvbnN0IEludFNpemUm
IGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBkb3VibGUgdGltZU9mZnNldCwg
Y29uc3QgVmVjdG9yPFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZT4mIGZ1bmN0aW9u
TGlzdCwgYm9vbCBsaXN0c01hdGNoKQorICAgIDogbV9rZXlmcmFtZXMoa2V5ZnJhbWVzKQorICAg
ICwgbV9ib3hTaXplKGJveFNpemUpCisgICAgLCBtX2FuaW1hdGlvbihBbmltYXRpb246OmNyZWF0
ZShhbmltYXRpb24pKQorICAgICwgbV9mdW5jdGlvbkxpc3QoZnVuY3Rpb25MaXN0KQorICAgICwg
bV9saXN0c01hdGNoKGxpc3RzTWF0Y2gpCisgICAgLCBtX3N0YXJ0VGltZShXVEY6OmN1cnJlbnRU
aW1lKCkgLSB0aW1lT2Zmc2V0KQorICAgICwgbV9wYXVzZVRpbWUoMCkKKyAgICAsIG1fc3RhdGUo
UGxheWluZ1N0YXRlKQoreworfQorCit2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb246OmFwcGx5
SW50ZXJuYWwoVGV4dHVyZU1hcHBlckFuaW1hdGlvbkNsaWVudCogY2xpZW50LCBjb25zdCBBbmlt
YXRpb25WYWx1ZSogZnJvbSwgY29uc3QgQW5pbWF0aW9uVmFsdWUqIHRvLCBmbG9hdCBwcm9ncmVz
cykKK3sKKyAgICBzd2l0Y2ggKG1fa2V5ZnJhbWVzLnByb3BlcnR5KCkpIHsKKyAgICBjYXNlIEFu
aW1hdGVkUHJvcGVydHlPcGFjaXR5OgorICAgICAgICBjbGllbnQtPnNldE9wYWNpdHkoYXBwbHlP
cGFjaXR5QW5pbWF0aW9uKChzdGF0aWNfY2FzdDxjb25zdCBGbG9hdEFuaW1hdGlvblZhbHVlKj4o
ZnJvbSktPnZhbHVlKCkpLCAoc3RhdGljX2Nhc3Q8Y29uc3QgRmxvYXRBbmltYXRpb25WYWx1ZSo+
KHRvKS0+dmFsdWUoKSksIHByb2dyZXNzKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFu
aW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06CisgICAgICAgIGNsaWVudC0+c2V0VHJhbnNm
b3JtKGFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9ybUFu
aW1hdGlvblZhbHVlKj4oZnJvbSktPnZhbHVlKCksIHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zZm9y
bUFuaW1hdGlvblZhbHVlKj4odG8pLT52YWx1ZSgpLCBwcm9ncmVzcywgbV9ib3hTaXplLCBtX2Z1
bmN0aW9uTGlzdCwgbV9saXN0c01hdGNoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVy
ZU1hcHBlckFuaW1hdGlvbjo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIGlmIChzdGF0ZSgpICE9
IFN0b3BwZWRTdGF0ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gbV9hbmlt
YXRpb24tPmZpbGxzRm9yd2FyZHMoKTsKK30KKworYm9vbCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9u
czo6aGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5SUQgdHlwZSkgY29u
c3QKK3sKKyAgICBIYXNoTWFwPFN0cmluZywgVGV4dHVyZU1hcHBlckFuaW1hdGlvbj46OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8U3Ry
aW5nLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1h
dGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0IFRleHR1cmVN
YXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChhbmlt
YXRpb24uaXNBY3RpdmUoKSAmJiBhbmltYXRpb24ucHJvcGVydHkoKSA9PSB0eXBlKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6aGFzUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAorewor
ICAgIEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFRl
eHR1cmVNYXBwZXJBbmltYXRpb24+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgY29uc3QgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbiYgYW5pbWF0aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKGFuaW1hdGlvbi5z
dGF0ZSgpID09IFRleHR1cmVNYXBwZXJBbmltYXRpb246OlBsYXlpbmdTdGF0ZSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBU
ZXh0dXJlTWFwcGVyQW5pbWF0aW9uOjphcHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50
KiBjbGllbnQpCit7CisgICAgaWYgKHN0YXRlKCkgPT0gU3RvcHBlZFN0YXRlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBkb3VibGUgdG90YWxSdW5uaW5nVGltZSA9IG1fc3RhdGUgPT0gUGF1c2Vk
U3RhdGUgPyBtX3BhdXNlVGltZSA6IFdURjo6Y3VycmVudFRpbWUoKSAtIG1fc3RhcnRUaW1lOwor
ICAgIGRvdWJsZSBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUodG90
YWxSdW5uaW5nVGltZSwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCksIG1fYW5pbWF0aW9uLT5kaXJl
Y3Rpb24oKSk7CisKKyAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgIT0gQW5p
bWF0aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRlICYmIHRvdGFsUnVubmluZ1RpbWUgPj0gbV9h
bmltYXRpb24tPmR1cmF0aW9uKCkgKiBtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSkKKyAg
ICAgICAgc2V0U3RhdGUoU3RvcHBlZFN0YXRlKTsKKworICAgIGlmICghbm9ybWFsaXplZFZhbHVl
KSB7CisgICAgICAgIGFwcGx5SW50ZXJuYWwoY2xpZW50LCBtX2tleWZyYW1lcy5hdCgwKSwgbV9r
ZXlmcmFtZXMuYXQoMSksIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG5v
cm1hbGl6ZWRWYWx1ZSA9PSAxLjApIHsKKyAgICAgICAgYXBwbHlJbnRlcm5hbChjbGllbnQsIG1f
a2V5ZnJhbWVzLmF0KG1fa2V5ZnJhbWVzLnNpemUoKSAtIDIpLCBtX2tleWZyYW1lcy5hdChtX2tl
eWZyYW1lcy5zaXplKCkgLSAxKSwgMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KG1fa2V5ZnJhbWVzLnNpemUoKSA9PSAyKSB7CisgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IGFw
cGx5VGltaW5nRnVuY3Rpb24obV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkuZ2V0KCksIG5v
cm1hbGl6ZWRWYWx1ZSwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpOworICAgICAgICBhcHBseUlu
dGVybmFsKGNsaWVudCwgbV9rZXlmcmFtZXMuYXQoMCksIG1fa2V5ZnJhbWVzLmF0KDEpLCBub3Jt
YWxpemVkVmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2tleWZyYW1lcy5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
QW5pbWF0aW9uVmFsdWUqIGZyb20gPSBtX2tleWZyYW1lcy5hdChpKTsKKyAgICAgICAgY29uc3Qg
QW5pbWF0aW9uVmFsdWUqIHRvID0gbV9rZXlmcmFtZXMuYXQoaSArIDEpOworICAgICAgICBpZiAo
ZnJvbS0+a2V5VGltZSgpID4gbm9ybWFsaXplZFZhbHVlIHx8IHRvLT5rZXlUaW1lKCkgPCBub3Jt
YWxpemVkVmFsdWUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBub3JtYWxpemVk
VmFsdWUgPSAobm9ybWFsaXplZFZhbHVlIC0gZnJvbS0+a2V5VGltZSgpKSAvICh0by0+a2V5VGlt
ZSgpIC0gZnJvbS0+a2V5VGltZSgpKTsKKyAgICAgICAgbm9ybWFsaXplZFZhbHVlID0gYXBwbHlU
aW1pbmdGdW5jdGlvbihmcm9tLT50aW1pbmdGdW5jdGlvbigpLCBub3JtYWxpemVkVmFsdWUsIG1f
YW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKKyAgICAgICAgYXBwbHlJbnRlcm5hbChjbGllbnQsIGZy
b20sIHRvLCBub3JtYWxpemVkVmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3Zv
aWQgVGV4dHVyZU1hcHBlckFuaW1hdGlvbjo6cGF1c2UoZG91YmxlIG9mZnNldCkKK3sKKyAgICAv
LyBGSVhNRTogc2hvdWxkIGFwcGx5IG9mZnNldCBoZXJlLgorICAgIHNldFN0YXRlKFBhdXNlZFN0
YXRlKTsKKyAgICBtX3BhdXNlVGltZSA9IFdURjo6Y3VycmVudFRpbWUoKSAtIG9mZnNldDsKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uczo6cGF1c2UoY29uc3QgU3RyaW5nJiBuYW1l
LCBkb3VibGUgb2Zmc2V0KQoreworICAgIEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuZmluZChuYW1lKTsKKyAgICBpZiAo
aXQgPT0gbV9hbmltYXRpb25zLmVuZCgpKQorICAgICAgICByZXR1cm47CisgICAgaXQtPnNlY29u
ZC5wYXVzZShvZmZzZXQpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJBbmltYXRpb25zOjphcHBs
eShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50KiBjbGllbnQpCit7CisgICAgSGFzaE1hcDxT
dHJpbmcsIFRleHR1cmVNYXBwZXJBbmltYXRpb24+OjppdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlv
bnMuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPFN0cmluZywgVGV4dHVyZU1hcHBlckFuaW1hdGlv
bj46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICAgICAgaXQtPnNlY29uZC5hcHBseShjbGllbnQpOworfQorCit9CisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjVlMjI2ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oCkBAIC0wLDAgKzEsODYgQEAK
Ky8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFRleHR1cmVN
YXBwZXJBbmltYXRpb25faAorI2RlZmluZSBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uX2gKKworI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJIYXNoTWFwLmgiCisjaW5jbHVkZSAi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFRleHR1cmVNYXBwZXJBbmltYXRpb25DbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9p
ZCBzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpID0gMDsKK307CisKK2NsYXNzIFRleHR1cmVNYXBw
ZXJBbmltYXRpb24geworcHVibGljOgorICAgIGVudW0gQW5pbWF0aW9uU3RhdGUgeyBQbGF5aW5n
U3RhdGUsIFBhdXNlZFN0YXRlLCBTdG9wcGVkU3RhdGUgfTsKKworICAgIFRleHR1cmVNYXBwZXJB
bmltYXRpb24oKQorICAgICAgICA6IG1fa2V5ZnJhbWVzKEFuaW1hdGVkUHJvcGVydHlJbnZhbGlk
KQorICAgIHsgfQorICAgIFRleHR1cmVNYXBwZXJBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgQW5pbWF0aW9uKiwgZG91YmxlLCBjb25zdCBW
ZWN0b3I8VHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlPiYsIGJvb2wpOworICAgIHZv
aWQgYXBwbHkoVGV4dHVyZU1hcHBlckFuaW1hdGlvbkNsaWVudCopOworICAgIHZvaWQgcGF1c2Uo
ZG91YmxlKTsKKyAgICBBbmltYXRpb25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGU7IH0KKyAgICB2b2lkIHNldFN0YXRlKEFuaW1hdGlvblN0YXRlIHMpIHsgbV9zdGF0ZSA9IHM7
IH0KKyAgICBBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX2tl
eWZyYW1lcy5wcm9wZXJ0eSgpOyB9CisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OworCitwcml2
YXRlOgorICAgIHZvaWQgYXBwbHlJbnRlcm5hbChUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50
KiwgY29uc3QgQW5pbWF0aW9uVmFsdWUqIGZyb20sIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB0bywg
ZmxvYXQgcHJvZ3Jlc3MpOworICAgIEtleWZyYW1lVmFsdWVMaXN0IG1fa2V5ZnJhbWVzOworICAg
IEludFNpemUgbV9ib3hTaXplOworICAgIFJlZlB0cjxBbmltYXRpb24+IG1fYW5pbWF0aW9uOwor
ICAgIFN0cmluZyBtX25hbWU7CisgICAgVmVjdG9yPFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0
aW9uVHlwZT4gbV9mdW5jdGlvbkxpc3Q7CisgICAgYm9vbCBtX2xpc3RzTWF0Y2g7CisgICAgYm9v
bCBtX2hhc0JpZ1JvdGF0aW9uOworICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKKyAgICBkb3VibGUg
bV9wYXVzZVRpbWU7CisgICAgQW5pbWF0aW9uU3RhdGUgbV9zdGF0ZTsKK307CisKK2NsYXNzIFRl
eHR1cmVNYXBwZXJBbmltYXRpb25zIHsKK3B1YmxpYzoKKyAgICBUZXh0dXJlTWFwcGVyQW5pbWF0
aW9ucygpIHsgfQorCisgICAgdm9pZCBhZGQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBUZXh0
dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgbV9hbmltYXRpb25zLmFkZChuYW1lLCBh
bmltYXRpb24pOyB9CisgICAgdm9pZCByZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKSB7IG1fYW5p
bWF0aW9ucy5yZW1vdmUobmFtZSk7IH0KKyAgICB2b2lkIHBhdXNlKGNvbnN0IFN0cmluZyYsIGRv
dWJsZSk7CisgICAgdm9pZCBhcHBseShUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50Kik7Cisg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25zLmlzRW1wdHkoKTsg
fQorCisgICAgYm9vbCBoYXNSdW5uaW5nQW5pbWF0aW9ucygpIGNvbnN0OworICAgIGJvb2wgaGFz
QWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5SUQgdHlwZSkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgSGFzaE1hcDxTdHJpbmcsIFRleHR1cmVNYXBwZXJBbmltYXRpb24+IG1f
YW5pbWF0aW9uczsKK307CisKK30KKyNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVIpCisKKyNl
bmRpZiAvLyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3Bw
CmluZGV4IGI2OGU4MTIuLmNjZjQ5YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcApAQCAt
NTg1LDExICs1ODUsOCBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRpbmdT
dGF0ZVNlbGYoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYQogICAgICAgICAgICBsYXll
ci0+bV9lZmZlY3RUYXJnZXQgPSB0aGlzOwogICAgIH0KIAotICAgIGlmIChjaGFuZ2VNYXNrICYg
QW5pbWF0aW9uQ2hhbmdlKSB7Ci0gICAgICAgIG1fYW5pbWF0aW9ucy5jbGVhcigpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdyYXBoaWNzTGF5ZXItPm1fYW5pbWF0aW9ucy5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgIG1fYW5pbWF0aW9ucy5hcHBlbmQoZ3JhcGhpY3NMYXllci0+
bV9hbmltYXRpb25zW2ldKTsKLSAgICB9CisgICAgaWYgKGNoYW5nZU1hc2sgJiBBbmltYXRpb25D
aGFuZ2UpCisgICAgICAgIG1fYW5pbWF0aW9ucyA9IGdyYXBoaWNzTGF5ZXItPm1fYW5pbWF0aW9u
czsKIAogICAgIG1fc3RhdGUubWFza0xheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGlj
c0xheWVyLT5tYXNrTGF5ZXIoKSk7CiAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXIgPSB0b1RleHR1
cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnJlcGxpY2FMYXllcigpKTsKQEAgLTYxNCwxMSAr
NjExLDYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxm
KEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAgICBpZiAoIW1fY3VycmVudENvbnRl
bnQubmVlZHNEaXNwbGF5KQogICAgICAgICBtX2N1cnJlbnRDb250ZW50Lm5lZWRzRGlzcGxheVJl
Y3QudW5pdGUocGVuZGluZ0NvbnRlbnQubmVlZHNEaXNwbGF5UmVjdCk7CiAKLSAgICBpZiAoIWhh
c09wYWNpdHlBbmltYXRpb24oKSkKLSAgICAgICAgbV9vcGFjaXR5ID0gbV9zdGF0ZS5vcGFjaXR5
OwotICAgIGlmICghaGFzVHJhbnNmb3JtQW5pbWF0aW9uKCkpCi0gICAgICAgIG1fdHJhbnNmb3Jt
LnNldExvY2FsVHJhbnNmb3JtKG1fc3RhdGUudHJhbnNmb3JtKTsKLQogICAgIG1fdHJhbnNmb3Jt
LnNldFBvc2l0aW9uKG1fc3RhdGUucG9zKTsKICAgICBtX3RyYW5zZm9ybS5zZXRBbmNob3JQb2lu
dChtX3N0YXRlLmFuY2hvclBvaW50KTsKICAgICBtX3RyYW5zZm9ybS5zZXRTaXplKG1fc3RhdGUu
c2l6ZSk7CkBAIC02MjgsMTAgKzYyMCw4IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmND
b21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhCiAKIGJv
b2wgVGV4dHVyZU1hcHBlck5vZGU6OmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRp
b25zKCkgY29uc3QKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5z
aXplKCk7ICsraSkgewotICAgICAgICBpZiAoIW1fYW5pbWF0aW9uc1tpXS0+cGF1c2VkKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGlmIChtX2FuaW1hdGlvbnMuaGFzUnVu
bmluZ0FuaW1hdGlvbnMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKG1fY2hp
bGRyZW5baV0tPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCkBAIC02
NDEsMTk3ICs2MzEsMTggQEAgYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6ZGVzY2VuZGFudHNPclNl
bGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
c3RhdGljIGRvdWJsZSBub3JtYWxpemVkQW5pbWF0aW9uVmFsdWUoZG91YmxlIHJ1bm5pbmdUaW1l
LCBkb3VibGUgZHVyYXRpb24sIGJvb2wgYWx0ZXJuYXRlKQotewotICAgIGlmICghZHVyYXRpb24p
Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNvbnN0IGludCBsb29wQ291bnQgPSBydW5uaW5nVGlt
ZSAvIGR1cmF0aW9uOwotICAgIGNvbnN0IGRvdWJsZSBsYXN0RnVsbExvb3AgPSBkdXJhdGlvbiAq
IGRvdWJsZShsb29wQ291bnQpOwotICAgIGNvbnN0IGRvdWJsZSByZW1haW5kZXIgPSBydW5uaW5n
VGltZSAtIGxhc3RGdWxsTG9vcDsKLSAgICBjb25zdCBkb3VibGUgbm9ybWFsaXplZCA9IHJlbWFp
bmRlciAvIGR1cmF0aW9uOwotICAgIHJldHVybiAobG9vcENvdW50ICUgMiAmJiBhbHRlcm5hdGUp
ID8gKDEgLSBub3JtYWxpemVkKSA6IG5vcm1hbGl6ZWQ7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OmFwcGx5T3BhY2l0eUFuaW1hdGlvbihmbG9hdCBmcm9tT3BhY2l0eSwgZmxvYXQgdG9P
cGFjaXR5LCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gT3B0aW1pemF0aW9uOiBzcGVjaWFs
IGNhc2UgdGhlIGVkZ2UgdmFsdWVzICgwIGFuZCAxKS4KLSAgICBpZiAocHJvZ3Jlc3MgPT0gMS4w
KQotICAgICAgICBzZXRPcGFjaXR5KHRvT3BhY2l0eSk7Ci0gICAgZWxzZSBpZiAoIXByb2dyZXNz
KQotICAgICAgICBzZXRPcGFjaXR5KGZyb21PcGFjaXR5KTsKLSAgICBlbHNlCi0gICAgICAgIHNl
dE9wYWNpdHkoZnJvbU9wYWNpdHkgKyBwcm9ncmVzcyAqICh0b09wYWNpdHkgLSBmcm9tT3BhY2l0
eSkpOwotfQotCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBzb2x2ZUVwc2lsb24oZG91YmxlIGR1cmF0
aW9uKQotewotICAgIHJldHVybiAxLjAgLyAoMjAwLjAgKiBkdXJhdGlvbik7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgZG91YmxlIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihkb3VibGUgcDF4LCBkb3Vi
bGUgcDF5LCBkb3VibGUgcDJ4LCBkb3VibGUgcDJ5LCBkb3VibGUgdCwgZG91YmxlIGR1cmF0aW9u
KQotewotICAgIFVuaXRCZXppZXIgYmV6aWVyKHAxeCwgcDF5LCBwMngsIHAyeSk7Ci0gICAgcmV0
dXJuIGJlemllci5zb2x2ZSh0LCBzb2x2ZUVwc2lsb24oZHVyYXRpb24pKTsKLX0KLQotc3RhdGlj
IGlubGluZSBkb3VibGUgc29sdmVTdGVwc0Z1bmN0aW9uKGludCBudW1TdGVwcywgYm9vbCBzdGVw
QXRTdGFydCwgZG91YmxlIHQpCi17Ci0gICAgaWYgKHN0ZXBBdFN0YXJ0KQotICAgICAgICByZXR1
cm4gc3RkOjptaW4oMS4wLCAoZmxvb3IobnVtU3RlcHMgKiB0KSArIDEpIC8gbnVtU3RlcHMpOwot
ICAgIHJldHVybiBmbG9vcihudW1TdGVwcyAqIHQpIC8gbnVtU3RlcHM7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgZmxvYXQgYXBwbHlUaW1pbmdGdW5jdGlvbihjb25zdCBUaW1pbmdGdW5jdGlvbiogdGlt
aW5nRnVuY3Rpb24sIGZsb2F0IHByb2dyZXNzLCBkb3VibGUgZHVyYXRpb24pCi17Ci0gICAgaWYg
KCF0aW1pbmdGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIHByb2dyZXNzOwotCi0gICAgaWYgKHRp
bWluZ0Z1bmN0aW9uLT5pc0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24oKSkgewotICAgICAgICBj
b25zdCBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBjdGYgPSBzdGF0aWNfY2FzdDxjb25zdCBD
dWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4odGltaW5nRnVuY3Rpb24pOwotICAgICAgICByZXR1
cm4gc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKGN0Zi0+eDEoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjdGYtPnkxKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3RmLT54MigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGN0Zi0+eTIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcm9ncmVzcywgZHVyYXRpb24pOwotICAgIH0KLQotICAgIGlmICh0aW1pbmdGdW5j
dGlvbi0+aXNTdGVwc1RpbWluZ0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgY29uc3QgU3RlcHNUaW1p
bmdGdW5jdGlvbiogc3RmID0gc3RhdGljX2Nhc3Q8Y29uc3QgU3RlcHNUaW1pbmdGdW5jdGlvbio+
KHRpbWluZ0Z1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIHNvbHZlU3RlcHNGdW5jdGlvbihzdGYt
Pm51bWJlck9mU3RlcHMoKSwgc3RmLT5zdGVwQXRTdGFydCgpLCBkb3VibGUocHJvZ3Jlc3MpKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gcHJvZ3Jlc3M7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OmFwcGx5VHJhbnNmb3JtQW5pbWF0aW9uKGNvbnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24m
IGFuaW1hdGlvbiwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogZnJvbSwgY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3ZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OnN5bmNBbmltYXRpb25zKCkKIHsKLSAgICAvLyBPcHRpbWl6YXRpb246IHNwZWNpYWwgY2Fz
ZSB0aGUgZWRnZSB2YWx1ZXMgKDAgYW5kIDEpLgotICAgIGlmIChwcm9ncmVzcyA9PSAxLjAgfHwg
IXByb2dyZXNzKSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLSAgICAg
ICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogb3BzID0gcHJvZ3Jlc3MgPyB0byA6IGZyb207
Ci0gICAgICAgIG9wcy0+YXBwbHkoYW5pbWF0aW9uLmJveFNpemUsIG1hdHJpeCk7Ci0gICAgICAg
IHNldFRyYW5zZm9ybShtYXRyaXgpOwotICAgIH0KLQotICAgIGlmICghYW5pbWF0aW9uLmxpc3Rz
TWF0Y2gpIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdG9NYXRyaXgsIGZyb21NYXRy
aXg7Ci0gICAgICAgIHRvLT5hcHBseShhbmltYXRpb24uYm94U2l6ZSwgdG9NYXRyaXgpOwotICAg
ICAgICBmcm9tLT5hcHBseShhbmltYXRpb24uYm94U2l6ZSwgZnJvbU1hdHJpeCk7Ci0gICAgICAg
IHRvTWF0cml4LmJsZW5kKGZyb21NYXRyaXgsIHByb2dyZXNzKTsKLSAgICAgICAgc2V0VHJhbnNm
b3JtKHRvTWF0cml4KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1hdHJpeDsKLQotICAgIGlmICghdG8tPnNpemUoKSkgewotICAgICAgICBjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBzd2FwID0gdG87Ci0gICAgICAgIHRvID0gZnJvbTsKLSAg
ICAgICAgZnJvbSA9IHN3YXA7Ci0gICAgfSBlbHNlIGlmICghZnJvbS0+c2l6ZSgpKQotICAgICAg
ICBwcm9ncmVzcyA9IDEuMCAtIHByb2dyZXNzOwotCi0gICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBi
bGVuZGVkKCp0byk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRpb24uZnVuY3Rp
b25MaXN0LnNpemUoKTsgKytpKQotICAgICAgICBibGVuZGVkLm9wZXJhdGlvbnMoKVtpXS0+Ymxl
bmQoZnJvbS0+YXQoaSksIHByb2dyZXNzLCAhZnJvbS0+YXQoaSkpLT5hcHBseShtYXRyaXgsIGFu
aW1hdGlvbi5ib3hTaXplKTsKLQotICAgIHNldFRyYW5zZm9ybShtYXRyaXgpOwotfQotCi12b2lk
IFRleHR1cmVNYXBwZXJOb2RlOjphcHBseUFuaW1hdGlvbkZyYW1lKGNvbnN0IFRleHR1cmVNYXBw
ZXJBbmltYXRpb24mIGFuaW1hdGlvbiwgY29uc3QgQW5pbWF0aW9uVmFsdWUqIGZyb20sIGNvbnN0
IEFuaW1hdGlvblZhbHVlKiB0bywgZmxvYXQgcHJvZ3Jlc3MpCi17Ci0gICAgc3dpdGNoIChhbmlt
YXRpb24ua2V5ZnJhbWVzLnByb3BlcnR5KCkpIHsKLSAgICBjYXNlIEFuaW1hdGVkUHJvcGVydHlP
cGFjaXR5OgotICAgICAgICBhcHBseU9wYWNpdHlBbmltYXRpb24oKHN0YXRpY19jYXN0PGNvbnN0
IEZsb2F0QW5pbWF0aW9uVmFsdWUqPihmcm9tKS0+dmFsdWUoKSksIChzdGF0aWNfY2FzdDxjb25z
dCBGbG9hdEFuaW1hdGlvblZhbHVlKj4odG8pLT52YWx1ZSgpKSwgcHJvZ3Jlc3MpOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtOgotICAg
ICAgICBhcHBseVRyYW5zZm9ybUFuaW1hdGlvbihhbmltYXRpb24sIHN0YXRpY19jYXN0PGNvbnN0
IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKj4oZnJvbSktPnZhbHVlKCksIHN0YXRpY19jYXN0PGNv
bnN0IFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKj4odG8pLT52YWx1ZSgpLCBwcm9ncmVzcyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICB9Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmFwcGx5QW5pbWF0aW9uKGNv
bnN0IFRleHR1cmVNYXBwZXJBbmltYXRpb24mIGFuaW1hdGlvbiwgZG91YmxlIG5vcm1hbGl6ZWRW
YWx1ZSkKLXsKLSAgICAvLyBPcHRpbWl6YXRpb246IHNwZWNpYWwgY2FzZSB0aGUgZWRnZSB2YWx1
ZXMgKDAgYW5kIDEpLgotICAgIGlmICghbm9ybWFsaXplZFZhbHVlKSB7Ci0gICAgICAgIGFwcGx5
QW5pbWF0aW9uRnJhbWUoYW5pbWF0aW9uLCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KDApLCBhbmlt
YXRpb24ua2V5ZnJhbWVzLmF0KDEpLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAobm9ybWFsaXplZFZhbHVlID09IDEuMCkgewotICAgICAgICBhcHBseUFuaW1hdGlvbkZyYW1l
KGFuaW1hdGlvbiwgYW5pbWF0aW9uLmtleWZyYW1lcy5hdChhbmltYXRpb24ua2V5ZnJhbWVzLnNp
emUoKSAtIDIpLCBhbmltYXRpb24ua2V5ZnJhbWVzLmF0KGFuaW1hdGlvbi5rZXlmcmFtZXMuc2l6
ZSgpIC0gMSksIDEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChhbmltYXRpb24u
a2V5ZnJhbWVzLnNpemUoKSA9PSAyKSB7Ci0gICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IGFwcGx5
VGltaW5nRnVuY3Rpb24oYW5pbWF0aW9uLmFuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS5nZXQo
KSwgbm9ybWFsaXplZFZhbHVlLCBhbmltYXRpb24uYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKLSAg
ICAgICAgYXBwbHlBbmltYXRpb25GcmFtZShhbmltYXRpb24sIGFuaW1hdGlvbi5rZXlmcmFtZXMu
YXQoMCksIGFuaW1hdGlvbi5rZXlmcmFtZXMuYXQoMSksIG5vcm1hbGl6ZWRWYWx1ZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1hdGlv
bi5rZXlmcmFtZXMuc2l6ZSgpIC0gMTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEFuaW1hdGlvblZh
bHVlKiBmcm9tID0gYW5pbWF0aW9uLmtleWZyYW1lcy5hdChpKTsKLSAgICAgICAgY29uc3QgQW5p
bWF0aW9uVmFsdWUqIHRvID0gYW5pbWF0aW9uLmtleWZyYW1lcy5hdChpICsgMSk7Ci0gICAgICAg
IGlmIChmcm9tLT5rZXlUaW1lKCkgPiBub3JtYWxpemVkVmFsdWUgfHwgdG8tPmtleVRpbWUoKSA8
IG5vcm1hbGl6ZWRWYWx1ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIG5vcm1h
bGl6ZWRWYWx1ZSA9IChub3JtYWxpemVkVmFsdWUgLSBmcm9tLT5rZXlUaW1lKCkpIC8gKHRvLT5r
ZXlUaW1lKCkgLSBmcm9tLT5rZXlUaW1lKCkpOwotICAgICAgICBub3JtYWxpemVkVmFsdWUgPSBh
cHBseVRpbWluZ0Z1bmN0aW9uKGZyb20tPnRpbWluZ0Z1bmN0aW9uKCksIG5vcm1hbGl6ZWRWYWx1
ZSwgYW5pbWF0aW9uLmFuaW1hdGlvbi0+ZHVyYXRpb24oKSk7Ci0gICAgICAgIGFwcGx5QW5pbWF0
aW9uRnJhbWUoYW5pbWF0aW9uLCBmcm9tLCB0bywgbm9ybWFsaXplZFZhbHVlKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotfQotCi1ib29sIFRleHR1cmVNYXBwZXJOb2RlOjpoYXNPcGFjaXR5QW5p
bWF0aW9uKCkgY29uc3QKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9u
cy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBh
bmltYXRpb24gPSAqbV9hbmltYXRpb25zW2ldLmdldCgpOwotICAgICAgICBpZiAoYW5pbWF0aW9u
LmtleWZyYW1lcy5wcm9wZXJ0eSgpID09IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBU
ZXh0dXJlTWFwcGVyTm9kZTo6aGFzVHJhbnNmb3JtQW5pbWF0aW9uKCkgY29uc3QKLXsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAg
ICBjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiBhbmltYXRpb24gPSAqbV9hbmltYXRpb25z
W2ldLmdldCgpOwotICAgICAgICBpZiAoYW5pbWF0aW9uLmtleWZyYW1lcy5wcm9wZXJ0eSgpID09
IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2Rl
OjpzeW5jQW5pbWF0aW9ucyhHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogbGF5ZXIpCi17Ci0g
ICAgZm9yIChpbnQgaSA9IG1fYW5pbWF0aW9ucy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewot
ICAgICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gYW5pbWF0aW9uID0gbV9hbmlt
YXRpb25zW2ldOwotCi0gICAgICAgIGRvdWJsZSB0b3RhbFJ1bm5pbmdUaW1lID0gV1RGOjpjdXJy
ZW50VGltZSgpIC0gYW5pbWF0aW9uLT5zdGFydFRpbWU7Ci0gICAgICAgIFJlZlB0cjxBbmltYXRp
b24+IGFuaW0gPSBhbmltYXRpb24tPmFuaW1hdGlvbjsKLSAgICAgICAgZG91YmxlIG5vcm1hbGl6
ZWRWYWx1ZSA9IG5vcm1hbGl6ZWRBbmltYXRpb25WYWx1ZSh0b3RhbFJ1bm5pbmdUaW1lLCBhbmlt
LT5kdXJhdGlvbigpLCBhbmltLT5kaXJlY3Rpb24oKSk7Ci0KLSAgICAgICAgaWYgKGFuaW0tPml0
ZXJhdGlvbkNvdW50KCkgIT0gQW5pbWF0aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRlICYmIHRv
dGFsUnVubmluZ1RpbWUgPj0gYW5pbS0+ZHVyYXRpb24oKSAqIGFuaW0tPml0ZXJhdGlvbkNvdW50
KCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGFwcGx5IGFuIGFuaW1hdGlvbiB0aGF0IHZlcnkgY2xv
c2UgdG8gdGhlIGVkZ2UsIHNvIHRoYXQgdGhlIGZpbmFsIGZyYW1lIGlzIGFwcGxpZWQsIG90ZXJ3
aXNlIHdlIG1pZ2h0IGdldCwgZm9yIGV4YW1wbGUsIGFuIG9wYWNpdHkgb2YgMC4wMSB3aGljaCBp
cyBzdGlsbCB2aXNpYmxlLgotICAgICAgICAgICAgaWYgKGFuaW0tPmZpbGxzRm9yd2FyZHMoKSkg
ewotICAgICAgICAgICAgICAgIGlmIChhbmltYXRpb24tPmtleWZyYW1lcy5wcm9wZXJ0eSgpID09
IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCi0gICAgICAgICAgICAgICAgICAgIHNl
dFRyYW5zZm9ybShtX3N0YXRlLnRyYW5zZm9ybSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
YW5pbWF0aW9uLT5rZXlmcmFtZXMucHJvcGVydHkoKSA9PSBBbmltYXRlZFByb3BlcnR5T3BhY2l0
eSkKLSAgICAgICAgICAgICAgICAgICAgc2V0T3BhY2l0eShtX3N0YXRlLm9wYWNpdHkpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBtX2FuaW1hdGlvbnMucmVtb3ZlKGkpOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWFuaW1hdGlvbi0+cGF1
c2VkKQotICAgICAgICAgICAgYXBwbHlBbmltYXRpb24oKmFuaW1hdGlvbi5nZXQoKSwgbm9ybWFs
aXplZFZhbHVlKTsKLSAgICB9CisgICAgbV9hbmltYXRpb25zLmFwcGx5KHRoaXMpOworICAgIGlm
ICghbV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0
eVdlYmtpdFRyYW5zZm9ybSkpCisgICAgICAgIHNldFRyYW5zZm9ybShtX3N0YXRlLnRyYW5zZm9y
bSk7CisgICAgaWYgKCFtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmlt
YXRlZFByb3BlcnR5T3BhY2l0eSkpCisgICAgICAgIHNldE9wYWNpdHkobV9zdGF0ZS5vcGFjaXR5
KTsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0FuaW1hdGlvbnNSZWN1cnNpdmVs
eSgpCiB7Ci0gICAgc3luY0FuaW1hdGlvbnMoMCk7CisgICAgc3luY0FuaW1hdGlvbnMoKTsKIAog
ICAgIGZvciAoaW50IGkgPSBtX2NoaWxkcmVuLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKQogICAg
ICAgICBtX2NoaWxkcmVuW2ldLT5zeW5jQW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCk7CkBAIC04NTUs
OCArNjY2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUo
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWMKICAgICBpZiAobV9zdGF0ZS5yZXBs
aWNhTGF5ZXIpCiAgICAgICAgIG1fc3RhdGUucmVwbGljYUxheWVyLT5zeW5jQ29tcG9zaXRpbmdT
dGF0ZSh0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGdyYXBoaWNzTGF5ZXItPnJlcGxpY2FM
YXllcigpKSwgdGV4dHVyZU1hcHBlcik7CiAKLSAgICBzeW5jQW5pbWF0aW9ucyhncmFwaGljc0xh
eWVyKTsKLQorICAgIHN5bmNBbmltYXRpb25zKCk7CiAgICAgY29tcHV0ZVRpbGVzKCk7CiAKICAg
ICBpZiAoZ3JhcGhpY3NMYXllcikKQEAgLTg3OSwxMSArNjg5LDUgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIq
IGdyYXBoaWMKICAgICB9CiB9CiAKLVRleHR1cmVNYXBwZXJBbmltYXRpb246OlRleHR1cmVNYXBw
ZXJBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlcykKLSAgICA6IGtleWZy
YW1lcyh2YWx1ZXMpCi17CiB9Ci0KLX0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCmlu
ZGV4IGE2OTYxZTguLmZlNGIxNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCkBAIC0yNywxMCAr
MjcsOSBAQAogI2luY2x1ZGUgIkludFBvaW50SGFzaC5oIgogI2luY2x1ZGUgIkxheWVyVHJhbnNm
b3JtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJBbmltYXRpb24uaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybU9w
ZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNp
bmNsdWRlICJVbml0QmV6aWVyLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNTcs
MjIgKzU2LDcgQEAgcHVibGljOgogICAgIHsgfQogfTsKIAotY2xhc3MgVGV4dHVyZU1hcHBlckFu
aW1hdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFRleHR1cmVNYXBwZXJBbmltYXRpb24+IHsKLXB1
YmxpYzoKLSAgICBTdHJpbmcgbmFtZTsKLSAgICBLZXlmcmFtZVZhbHVlTGlzdCBrZXlmcmFtZXM7
Ci0gICAgSW50U2l6ZSBib3hTaXplOwotICAgIFJlZlB0cjxBbmltYXRpb24+IGFuaW1hdGlvbjsK
LSAgICBib29sIHBhdXNlZDsKLSAgICBWZWN0b3I8VHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRp
b25UeXBlPiBmdW5jdGlvbkxpc3Q7Ci0gICAgYm9vbCBsaXN0c01hdGNoOwotICAgIGJvb2wgaGFz
QmlnUm90YXRpb247Ci0gICAgZG91YmxlIHN0YXJ0VGltZTsKLSAgICBUZXh0dXJlTWFwcGVyQW5p
bWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0Jik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2
YWx1ZXMpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKHZhbHVl
cykpOyB9Ci19OwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyTm9kZSB7CitjbGFzcyBUZXh0dXJlTWFw
cGVyTm9kZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50IHsKIAogcHVibGlj
OgogICAgIC8vIFRoaXMgc2V0IG9mIGZsYWdzIGhlbHAgdXMgZGVmZXIgd2hpY2ggcHJvcGVydGll
cyBvZiB0aGUgbGF5ZXIgaGF2ZSBiZWVuCkBAIC0xOTgsMTMgKzE4Miw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBwYWludFNlbGZBbmRDaGlsZHJlbldpdGhSZXBsaWNhKGNvbnN0IFRleHR1cmVNYXBw
ZXJQYWludE9wdGlvbnMmKTsKICAgICB2b2lkIHJlbmRlckNvbnRlbnQoVGV4dHVyZU1hcHBlcios
IEdyYXBoaWNzTGF5ZXIqKTsKIAotICAgIHZvaWQgc3luY0FuaW1hdGlvbnMoR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIqKTsKLSAgICB2b2lkIGFwcGx5QW5pbWF0aW9uKGNvbnN0IFRleHR1cmVN
YXBwZXJBbmltYXRpb24mLCBkb3VibGUgcnVubmluZ1RpbWUpOwotICAgIHZvaWQgYXBwbHlBbmlt
YXRpb25GcmFtZShjb25zdCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiwgY29uc3QgQW5pbWF0aW9u
VmFsdWUqIGZyb20sIGNvbnN0IEFuaW1hdGlvblZhbHVlKiB0bywgZmxvYXQgcHJvZ3Jlc3MpOwot
ICAgIHZvaWQgYXBwbHlPcGFjaXR5QW5pbWF0aW9uKGZsb2F0IGZyb21PcGFjaXR5LCBmbG9hdCB0
b09wYWNpdHksIGRvdWJsZSk7Ci0gICAgdm9pZCBhcHBseVRyYW5zZm9ybUFuaW1hdGlvbihjb25z
dCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uJiwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogc3Rh
cnQsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGVuZCwgZG91YmxlKTsKLSAgICBib29sIGhh
c09wYWNpdHlBbmltYXRpb24oKSBjb25zdDsKLSAgICBib29sIGhhc1RyYW5zZm9ybUFuaW1hdGlv
bigpIGNvbnN0OworICAgIHZvaWQgc3luY0FuaW1hdGlvbnMoKTsKICAgICBib29sIGlzVmlzaWJs
ZSgpIGNvbnN0OwogICAgIGJvb2wgc2hvdWxkUGFpbnRUb0ludGVybWVkaWF0ZVN1cmZhY2UoKSBj
b25zdDsKIApAQCAtMzE1LDggKzI5Myw3IEBAIHByaXZhdGU6CiAKICAgICBTdGF0ZSBtX3N0YXRl
OwogICAgIFRleHR1cmVNYXBwZXIqIG1fdGV4dHVyZU1hcHBlcjsKLQotICAgIFZlY3RvcjxSZWZQ
dHI8VGV4dHVyZU1hcHBlckFuaW1hdGlvbj4gPiBtX2FuaW1hdGlvbnM7CisgICAgVGV4dHVyZU1h
cHBlckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOwogfTsKIAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126966</attachid>
            <date>2012-02-14 05:43:44 -0800</date>
            <delta_ts>2012-02-14 05:44:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>55656</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlYWM2NzMwLi5lYWQxZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTItMDItMTQgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbVGV4bWFwXSBEaXZpZGUgVGV4dHVyZU1hcHBlck5vZGUuY3BwIHRvIDMg
ZmlsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NjY2MAorCisgICAgICAgIFJlbmFtZSBUZXh0dXJlTWFwcGVyTm9kZSB0byBUZXh0dXJlTWFwcGVy
TGF5ZXIuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHA6
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
TGF5ZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaC4KKwogMjAxMi0w
Mi0wOSAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgogCiAgICAg
ICAgIFtRdF1bVGV4bWFwXSBSZWZhY3RvciBiYWNraW5nLXN0b3JlIGNvZGUgaW4gVGV4dHVyZU1h
cHBlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZDBiZDFhMC4uODRhYTVmMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC01NzUxLDggKzU3NTEsOCBAQCB3ZWJj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmggXAogICAgICAgICBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcCBcCiAg
ICAgICAgIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVySW1hZ2VCdWZmZXIuaCBcCi0gICAgICAgIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5jcHAgXAotICAgICAgICBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCBcCisgICAgICAg
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5
ZXIuY3BwIFwKKyAgICAgICAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJMYXllci5oIFwKICAgICAgICAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKIHdlYmNvcmVndGtf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVGV4
dHVyZU1hcHBlckNhaXJvLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA1YWMwZGU4Li4xZDljNmNkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKQEAgLTM5NTcsNyArMzk1Nyw3IEBAIGNvbnRhaW5zKENPTkZJRywgdGV4bWFw
KSB7CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQW5pbWF0
aW9uLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJh
Y2tpbmdTdG9yZS5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJJbWFnZUJ1ZmZlci5oIFwKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJOb2RlLmggXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckxheWVyLmggXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaAogCiAgICAgU09VUkNFUyArPSBcCkBAIC0zOTY2LDcg
KzM5NjYsNyBAQCBjb250YWlucyhDT05GSUcsIHRleG1hcCkgewogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5jcHAgXAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5jcHAgXAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNw
cCBcCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5j
cHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVy
LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlci5jcHAKIAogICAgICF3aW4zMi0qOmNvbnRhaW5zKFFUX0NPTkZJRywgb3Blbmds
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNjVmNTU4Zi4uMzU5ZDdiMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMzU5MCw4ICszNTkwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5o
JywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5v
ZGUuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlck5vZGUuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJMYXllci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyTGF5ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9JZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlv
bi5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCmluZGV4IGQy
ZDM3OWQuLmJkMGRhODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
LmNwcApAQCAtMjAsMTMgKzIwLDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKIAotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJO
b2RlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OkdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICA6IEdyYXBoaWNzTGF5ZXIo
Y2xpZW50KQotICAgICwgbV9ub2RlKGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyTm9kZSgpKSkK
KyAgICAsIG1fbGF5ZXIoYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJMYXllcigpKSkKICAgICAs
IG1fY2hhbmdlTWFzaygwKQogICAgICwgbV9uZWVkc0Rpc3BsYXkoZmFsc2UpCiAgICAgLCBtX2Nv
bnRlbnRzTGF5ZXIoMCkKQEAgLTM0LDcgKzM0LDcgQEAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWUK
IHsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6bm90aWZ5Q2hhbmdlKFRl
eHR1cmVNYXBwZXJOb2RlOjpDaGFuZ2VNYXNrIGNoYW5nZU1hc2spCit2b2lkIEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpDaGFuZ2VN
YXNrIGNoYW5nZU1hc2spCiB7CiAgICAgbV9jaGFuZ2VNYXNrIHw9IGNoYW5nZU1hc2s7CiAgICAg
aWYgKCFjbGllbnQoKSkKQEAgLTY0LDcgKzY0LDcgQEAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6On5HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcigpCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXkoKQogewogICAgIG1fbmVlZHNEaXNwbGF5ID0gdHJ1
ZTsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkRpc3BsYXlDaGFuZ2UpOwor
ICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkRpc3BsYXlDaGFuZ2UpOwogfQog
CiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQogewogICAg
IGlmIChtX2ltYWdlKQogICAgICAgICBzZXRDb250ZW50c1RvSW1hZ2UobV9pbWFnZS5nZXQoKSk7
Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpEaXNwbGF5Q2hhbmdlKTsKKyAg
ICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpEaXNwbGF5Q2hhbmdlKTsKIH0KIAog
LyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC04MywxNCArODMsMTQgQEAgdm9pZCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKICAgICBpZiAobV9uZWVkc0Rpc3BsYXkpCiAgICAgICAgIHJldHVybjsKICAg
ICBtX25lZWRzRGlzcGxheVJlY3QudW5pdGUocmVjdCk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1
cmVNYXBwZXJOb2RlOjpEaXNwbGF5Q2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlckxheWVyOjpEaXNwbGF5Q2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVy
LmgpCiAqLwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0UGFyZW50KEdyYXBo
aWNzTGF5ZXIqIGxheWVyKQogewotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6
UGFyZW50Q2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpQYXJl
bnRDaGFuZ2UpOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBhcmVudChsYXllcik7CiB9CiAKQEAg
LTk4LDcgKzk4LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0UGFyZW50
KEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogKi8KIGJvb2wgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQog
ewotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOwor
ICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkNoaWxkcmVuQ2hhbmdlKTsKICAg
ICByZXR1cm4gR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwogfQogCkBAIC0x
MDYsNyArMTA2LDcgQEAgYm9vbCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q2hpbGRy
ZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGQKICovCiB2b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBsYXllcikKIHsKLSAg
ICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKKyAgICBu
b3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpDaGlsZHJlbkNoYW5nZSk7CiAgICAgR3Jh
cGhpY3NMYXllcjo6YWRkQ2hpbGQobGF5ZXIpOwogfQogCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9p
ZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGQoR3JhcGhpY3NMYXllciogbGF5
ZXIpCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEF0SW5kZXgoR3Jh
cGhpY3NMYXllciogbGF5ZXIsIGludCBpbmRleCkKIHsKICAgICBHcmFwaGljc0xheWVyOjphZGRD
aGlsZEF0SW5kZXgobGF5ZXIsIGluZGV4KTsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxh
eWVyOjpDaGlsZHJlbkNoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpA
QCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENo
aWxkQXRJbmRleChHcmFwaGljc0xheWVyKiBsYXllciwgaW50IGluZGV4CiB2b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBH
cmFwaGljc0xheWVyKiBzaWJsaW5nKQogewogICAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEFi
b3ZlKGxheWVyLCBzaWJsaW5nKTsKLSAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2Rl
OjpDaGlsZHJlbkNoYW5nZSk7CisgICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6
OkNoaWxkcmVuQ2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0x
MzEsNyArMTMxLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRB
Ym92ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXkKIHZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OmFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBo
aWNzTGF5ZXIqIHNpYmxpbmcpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhs
YXllciwgc2libGluZyk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGls
ZHJlbkNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6Q2hpbGRy
ZW5DaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTEzOSw3ICsx
MzksNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEJlbG93KEdy
YXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheQogYm9vbCBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xh
eWVyKiBuZXdDaGlsZCkKIHsKICAgICBpZiAoR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKG9s
ZENoaWxkLCBuZXdDaGlsZCkpIHsKLSAgICAgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJO
b2RlOjpDaGlsZHJlbkNoYW5nZSk7CisgICAgICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
TGF5ZXI6OkNoaWxkcmVuQ2hhbmdlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IHJldHVybiBmYWxzZTsKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjpyZW1vdmVGcm9tUGFyZW50KCkKIHsKICAgICBpZiAoIXBhcmVudCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpQYXJlbnRD
aGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OlBhcmVudENoYW5n
ZSk7CiAgICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOwogfQogCkBAIC0xNjIs
NyArMTYyLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TWFza0xheWVy
KEdyYXBoaWNzTGF5ZXIqIHZhbHVlKQogICAgIGlmICh2YWx1ZSA9PSBtYXNrTGF5ZXIoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcih2YWx1ZSk7Ci0g
ICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpNYXNrTGF5ZXJDaGFuZ2UpOworICAg
IG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6Ok1hc2tMYXllckNoYW5nZSk7CiB9CiAK
IApAQCAtMTczLDcgKzE3Myw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNl
dFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqIHZhbHVlKQogICAgIGlmICh2YWx1ZSA9
PSByZXBsaWNhTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dFJlcGxpY2F0ZWRCeUxheWVyKHZhbHVlKTsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ck5vZGU6OlJlcGxpY2FMYXllckNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBw
ZXJMYXllcjo6UmVwbGljYUxheWVyQ2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xh
eWVyLmgpCkBAIC0xODMsNyArMTgzLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgdmFsdWUpCiAgICAgaWYgKHZhbHVlID09
IHBvc2l0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0xheWVyOjpzZXRQb3Np
dGlvbih2YWx1ZSk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpQb3NpdGlv
bkNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6UG9zaXRpb25D
aGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTE5Myw3ICsxOTMs
NyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRBbmNob3JQb2ludChjb25z
dCBGbG9hdFBvaW50M0QmIHZhbHVlKQogICAgIGlmICh2YWx1ZSA9PSBhbmNob3JQb2ludCgpKQog
ICAgICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQodmFsdWUp
OwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QW5jaG9yUG9pbnRDaGFuZ2Up
OworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkFuY2hvclBvaW50Q2hhbmdl
KTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0yMDQsNyArMjA0LDcgQEAg
dm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0U2l6ZShjb25zdCBGbG9hdFNpemUm
IHZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRTaXplKHZh
bHVlKTsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlNpemVDaGFuZ2UpOwor
ICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OlNpemVDaGFuZ2UpOwogfQogCiAv
KiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHZhbHVlKQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0xheWVyOjpzZXRU
cmFuc2Zvcm0odmFsdWUpOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6VHJh
bnNmb3JtQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpUcmFu
c2Zvcm1DaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTIyNSw3
ICsyMjUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDaGlsZHJlblRy
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeAogICAgIGlmICh2YWx1ZSA9PSBjaGls
ZHJlblRyYW5zZm9ybSgpKQogICAgICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0
Q2hpbGRyZW5UcmFuc2Zvcm0odmFsdWUpOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
Tm9kZTo6Q2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJl
TWFwcGVyTGF5ZXI6OkNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChH
cmFwaGljc0xheWVyLmgpCkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6c2V0UHJlc2VydmVzM0QoYm9vbCB2YWx1ZSkKICAgICBpZiAodmFsdWUgPT0g
cHJlc2VydmVzM0QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBy
ZXNlcnZlczNEKHZhbHVlKTsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlBy
ZXNlcnZlczNEQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpQ
cmVzZXJ2ZXMzRENoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAt
MjQ1LDcgKzI0NSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE1hc2tz
VG9Cb3VuZHMoYm9vbCB2YWx1ZSkKICAgICBpZiAodmFsdWUgPT0gbWFza3NUb0JvdW5kcygpKQog
ICAgICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0JvdW5kcyh2YWx1
ZSk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpNYXNrc1RvQm91bmRzQ2hh
bmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpNYXNrc1RvQm91bmRz
Q2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0yNTQsNyArMjU0
LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0RHJhd3NDb250ZW50KGJv
b2wgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlID09IGRyYXdzQ29udGVudCgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpEcmF3c0NvbnRlbnRD
aGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkRyYXdzQ29udGVu
dENoYW5nZSk7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KHZhbHVlKTsKIH0K
IApAQCAtMjY0LDcgKzI2NCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNl
dENvbnRlbnRzT3BhcXVlKGJvb2wgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlID09IGNvbnRlbnRz
T3BhcXVlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ck5vZGU6OkNvbnRlbnRzT3BhcXVlQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlckxheWVyOjpDb250ZW50c09wYXF1ZUNoYW5nZSk7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0
Q29udGVudHNPcGFxdWUodmFsdWUpOwogfQogCkBAIC0yNzUsNyArMjc1LDcgQEAgdm9pZCBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgdmFsdWUp
CiAgICAgaWYgKHZhbHVlID09IGJhY2tmYWNlVmlzaWJpbGl0eSgpKQogICAgICAgICByZXR1cm47
CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KHZhbHVlKTsKLSAgICBu
b3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkJhY2tmYWNlVmlzaWJpbGl0eUNoYW5nZSk7
CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6QmFja2ZhY2VWaXNpYmlsaXR5
Q2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0yODUsNyArMjg1
LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0T3BhY2l0eShmbG9hdCB2
YWx1ZSkKICAgICBpZiAodmFsdWUgPT0gb3BhY2l0eSgpKQogICAgICAgICByZXR1cm47CiAgICAg
R3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eSh2YWx1ZSk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1
cmVNYXBwZXJOb2RlOjpPcGFjaXR5Q2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlckxheWVyOjpPcGFjaXR5Q2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVy
LmgpCkBAIC0yOTUsNyArMjk1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6
c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHZhbHVlKQogICAgIGlmICh2YWx1ZSA9PSBj
b250ZW50c1JlY3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENv
bnRlbnRzUmVjdCh2YWx1ZSk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpD
b250ZW50c1JlY3RDaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6
OkNvbnRlbnRzUmVjdENoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpA
QCAtMzE0LDcgKzMxNCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENv
bnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgICAgIG1fY29tcG9zaXRlZEltYWdlID0g
MDsKIAogICAgIHNldENvbnRlbnRzVG9NZWRpYShtX2NvbXBvc2l0ZWRJbWFnZS5nZXQoKSk7Ci0g
ICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50Q2hhbmdlKTsKKyAgICBu
b3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpDb250ZW50Q2hhbmdlKTsKICAgICBHcmFw
aGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOwogfQogCkBAIC0zMjQsNyArMzI0
LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb01lZGlh
KFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKgogICAgICAgICByZXR1cm47CiAKICAgICBHcmFw
aGljc0xheWVyOjpzZXRDb250ZW50c1RvTWVkaWEobWVkaWEpOwotICAgIG5vdGlmeUNoYW5nZShU
ZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudENoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1
cmVNYXBwZXJMYXllcjo6Q29udGVudENoYW5nZSk7CiAgICAgbV9jb250ZW50c0xheWVyID0gbWVk
aWE7CiB9CiAKQEAgLTMzMiwxNCArMzMyLDE0IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI6OnNldENvbnRlbnRzVG9NZWRpYShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcioKICov
CiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZv
clRoaXNMYXllck9ubHkoKQogewotICAgIG1fbm9kZS0+c3luY0NvbXBvc2l0aW5nU3RhdGUodGhp
cyk7CisgICAgbV9sYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUodGhpcyk7CiB9CiAKIC8qIFxy
ZWltcCAoR3JhcGhpY3NMYXllci5oKQogKi8KIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYpCiB7Ci0gICAgbV9ub2Rl
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSh0aGlzLCBUZXh0dXJlTWFwcGVyTm9kZTo6VHJhdmVyc2VE
ZXNjZW5kYW50cyk7CisgICAgbV9sYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUodGhpcywgVGV4
dHVyZU1hcHBlckxheWVyOjpUcmF2ZXJzZURlc2NlbmRhbnRzKTsKIH0KIAogYm9vbCBHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0
JiB2YWx1ZUxpc3QsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5p
bSwgY29uc3QgU3RyaW5nJiBrZXlmcmFtZXNOYW1lLCBkb3VibGUgdGltZU9mZnNldCkKQEAgLTM1
Niw3ICszNTYsNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRp
b24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdAogICAgICAgICBsaXN0c01hdGNo
ID0gdmFsaWRhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlTGlzdCwgaGFzQmlnUm90YXRpb24p
ID49IDA7CiAKICAgICBtX2FuaW1hdGlvbnMuYWRkKGtleWZyYW1lc05hbWUsIFRleHR1cmVNYXBw
ZXJBbmltYXRpb24odmFsdWVMaXN0LCBib3hTaXplLCBhbmltLCB0aW1lT2Zmc2V0LCBsaXN0c01h
dGNoKSk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpBbmltYXRpb25DaGFu
Z2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkFuaW1hdGlvbkNoYW5n
ZSk7CiAgICAgbV9hbmltYXRpb25TdGFydGVkVGltZXIuc3RhcnRPbmVTaG90KDApOwogICAgIHJl
dHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaAppbmRl
eCBlMGEwZjcxLi4yNjg5ZDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuaApAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNs
dWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyTm9kZS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgog
CiAjaWYgRU5BQkxFKFdFQkdMKQogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCkBAIC0z
MiwxMiArMzIsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBUZXh0dXJlTWFw
cGVyTm9kZTsKK2NsYXNzIFRleHR1cmVNYXBwZXJMYXllcjsKIGNsYXNzIEJpdG1hcFRleHR1cmU7
CiBjbGFzcyBUZXh0dXJlTWFwcGVyOwogCiBjbGFzcyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ciA6IHB1YmxpYyBHcmFwaGljc0xheWVyIHsKLSAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBl
ck5vZGU7CisgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJMYXllcjsKIAogcHVibGljOgog
ICAgIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKQEAg
LTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFN0
cmluZyYgbmFtZSk7CiAgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkg
Y29uc3QgeyByZXR1cm4gMDsgfQogCi0gICAgdm9pZCBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ck5vZGU6OkNoYW5nZU1hc2sgY2hhbmdlTWFzayk7CisgICAgdm9pZCBub3RpZnlDaGFuZ2UoVGV4
dHVyZU1hcHBlckxheWVyOjpDaGFuZ2VNYXNrIGNoYW5nZU1hc2spOwogICAgIGlubGluZSBpbnQg
Y2hhbmdlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhbmdlTWFzazsgfQogICAgIHZvaWQgZGlk
U3luY2hyb25pemUoKTsKIApAQCAtODUsMTMgKzg1LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiwgZG91YmxlKTsKICAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYpOwogCi0gICAgVGV4dHVyZU1hcHBl
ck5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KKyAgICBUZXh0dXJl
TWFwcGVyTGF5ZXIqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllci5nZXQoKTsgfQogICAg
IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBjb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZW50c0xheWVyOyB9CiAgICAgYm9vbCBuZWVkc0Rpc3BsYXkoKSBjb25zdCB7IHJl
dHVybiBtX25lZWRzRGlzcGxheTsgfQogICAgIEludFJlY3QgbmVlZHNEaXNwbGF5UmVjdCgpIGNv
bnN0IHsgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobV9uZWVkc0Rpc3BsYXlSZWN0KTsgfQogCiBw
cml2YXRlOgotICAgIE93blB0cjxUZXh0dXJlTWFwcGVyTm9kZT4gbV9ub2RlOworICAgIE93blB0
cjxUZXh0dXJlTWFwcGVyTGF5ZXI+IG1fbGF5ZXI7CiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJC
YWNraW5nU3RvcmU+IG1fY29tcG9zaXRlZEltYWdlOwogICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFn
ZTsKICAgICBib29sIG1fc3luY1F1ZXVlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKaW5k
ZXggZGYyYTVmZi4uZGMxNjIwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKQEAgLTE4
LDcgKzE4LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlck5vZGUuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIuaCIKIAogI2luY2x1
ZGUgInN0ZGlvLmgiCiAKQEAgLTMwLDEyICszMCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVRleHR1cmVNYXBwZXJOb2RlKiB0b1RleHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXIq
IGxheWVyKQorVGV4dHVyZU1hcHBlckxheWVyKiB0b1RleHR1cmVNYXBwZXJMYXllcihHcmFwaGlj
c0xheWVyKiBsYXllcikKIHsKLSAgICByZXR1cm4gbGF5ZXIgPyB0b0dyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyKGxheWVyKS0+bm9kZSgpIDogMDsKKyAgICByZXR1cm4gbGF5ZXIgPyB0b0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxheWVyKS0+bGF5ZXIoKSA6IDA7CiB9CiAKLVRleHR1cmVN
YXBwZXJOb2RlKiBUZXh0dXJlTWFwcGVyTm9kZTo6cm9vdExheWVyKCkKK1RleHR1cmVNYXBwZXJM
YXllciogVGV4dHVyZU1hcHBlckxheWVyOjpyb290TGF5ZXIoKQogewogICAgIGlmIChtX2VmZmVj
dFRhcmdldCkKICAgICAgICAgcmV0dXJuIG1fZWZmZWN0VGFyZ2V0LT5yb290TGF5ZXIoKTsKQEAg
LTQ0LDEyICs0NCwxMiBAQCBUZXh0dXJlTWFwcGVyTm9kZSogVGV4dHVyZU1hcHBlck5vZGU6OnJv
b3RMYXllcigpCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6
OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQordm9pZCBU
ZXh0dXJlTWFwcGVyTGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbWF0cml4KQogewogICAgIG1fdHJhbnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKG1hdHJpeCk7
CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNsZWFyQmFja2luZ1N0b3Jlc1JlY3Vyc2l2
ZSgpCit2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6Y2xlYXJCYWNraW5nU3RvcmVzUmVjdXJzaXZl
KCkKIHsKICAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOwogICAgIG1fY29udGVudHNMYXllciA9
IDA7CkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNsZWFyQmFja2lu
Z1N0b3Jlc1JlY3Vyc2l2ZSgpCiAgICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5jbGVhckJhY2tp
bmdTdG9yZXNSZWN1cnNpdmUoKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0
ZVRyYW5zZm9ybXNSZWN1cnNpdmUoKQordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OmNvbXB1dGVU
cmFuc2Zvcm1zUmVjdXJzaXZlKCkKIHsKICAgICBpZiAobV9zaXplLmlzRW1wdHkoKSAmJiBtX3N0
YXRlLm1hc2tzVG9Cb3VuZHMpCiAgICAgICAgIHJldHVybjsKQEAgLTg5LDcgKzg5LDcgQEAgdm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcHV0ZVRyYW5zZm9ybXNSZWN1cnNpdmUoKQogICAgICAg
ICBzb3J0QnlaT3JkZXIobV9jaGlsZHJlbiwgMCwgbV9jaGlsZHJlbi5zaXplKCkpOwogfQogCi12
b2lkIFRleHR1cmVNYXBwZXJOb2RlOjp1cGRhdGVCYWNraW5nU3RvcmUoVGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hcHBlciwgR3JhcGhpY3NMYXllciogbGF5ZXIpCit2b2lkIFRleHR1cmVNYXBwZXJM
YXllcjo6dXBkYXRlQmFja2luZ1N0b3JlKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEdy
YXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIGlmICghbGF5ZXIgfHwgIXRleHR1cmVNYXBwZXIp
CiAgICAgICAgIHJldHVybjsKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJO
b2RlOjp1cGRhdGVCYWNraW5nU3RvcmUoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgR3Jh
cGhpYwogICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZSo+KG1f
YmFja2luZ1N0b3JlLmdldCgpKS0+dXBkYXRlQ29udGVudHModGV4dHVyZU1hcHBlciwgaW1hZ2Uu
Z2V0KCksIG1fc2l6ZSwgZGlydHlSZWN0KTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
cGFpbnQoKQordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnBhaW50KCkKIHsKICAgICBjb21wdXRl
VHJhbnNmb3Jtc1JlY3Vyc2l2ZSgpOwogCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyTm9kZTo6cGFpbnQoKQogICAgIHBhaW50UmVjdXJzaXZlKG9wdGlvbnMpOwogfQogCi12
b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFNlbGYoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50
T3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpwYWludFNlbGYoY29u
c3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICAvLyBXZSBhcHBs
eSB0aGUgZm9sbG93aW5nIHRyYW5zZm9ybSB0byBjb21wZW5zYXRlIGZvciBwYWludGluZyBpbnRv
IGEgc3VyZmFjZSwgYW5kIHRoZW4gYXBwbHkgdGhlIG9mZnNldCBzbyB0aGF0IHRoZSBwYWludGlu
ZyBmaXRzIGluIHRoZSB0YXJnZXQgcmVjdC4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFu
c2Zvcm0gPQpAQCAtMTU5LDE5ICsxNTksMTkgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFp
bnRTZWxmKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgICAg
IG1fY29udGVudHNMYXllci0+cGFpbnRUb1RleHR1cmVNYXBwZXIob3B0aW9ucy50ZXh0dXJlTWFw
cGVyLCBtX3N0YXRlLmNvbnRlbnRzUmVjdCwgdHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrLmdldCgp
KTsKIH0KIAotaW50IFRleHR1cmVNYXBwZXJOb2RlOjpjb21wYXJlR3JhcGhpY3NMYXllcnNaVmFs
dWUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKK2ludCBUZXh0dXJlTWFwcGVyTGF5ZXI6
OmNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZShjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBi
KQogewotICAgIFRleHR1cmVNYXBwZXJOb2RlKiBjb25zdCogbm9kZUEgPSBzdGF0aWNfY2FzdDxU
ZXh0dXJlTWFwcGVyTm9kZSogY29uc3QqPihhKTsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogY29u
c3QqIG5vZGVCID0gc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlck5vZGUqIGNvbnN0Kj4oYik7Ci0g
ICAgcmV0dXJuIGludCgoKCpub2RlQSktPm1fY2VudGVyWiAtICgqbm9kZUIpLT5tX2NlbnRlclop
ICogMTAwMCk7CisgICAgVGV4dHVyZU1hcHBlckxheWVyKiBjb25zdCogbGF5ZXJBID0gc3RhdGlj
X2Nhc3Q8VGV4dHVyZU1hcHBlckxheWVyKiBjb25zdCo+KGEpOworICAgIFRleHR1cmVNYXBwZXJM
YXllciogY29uc3QqIGxheWVyQiA9IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJMYXllciogY29u
c3QqPihiKTsKKyAgICByZXR1cm4gaW50KCgoKmxheWVyQSktPm1fY2VudGVyWiAtICgqbGF5ZXJC
KS0+bV9jZW50ZXJaKSAqIDEwMDApOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzb3J0
QnlaT3JkZXIoVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKiA+JiBhcnJheSwgaW50IGZpcnN0LCBp
bnQgbGFzdCkKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpzb3J0QnlaT3JkZXIoVmVjdG9yPFRl
eHR1cmVNYXBwZXJMYXllciogPiYgYXJyYXksIGludCBmaXJzdCwgaW50IGxhc3QpCiB7Ci0gICAg
cXNvcnQoYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIHNpemVvZihUZXh0dXJlTWFwcGVyTm9k
ZSopLCBjb21wYXJlR3JhcGhpY3NMYXllcnNaVmFsdWUpOworICAgIHFzb3J0KGFycmF5LmRhdGEo
KSwgYXJyYXkuc2l6ZSgpLCBzaXplb2YoVGV4dHVyZU1hcHBlckxheWVyKiksIGNvbXBhcmVHcmFw
aGljc0xheWVyc1pWYWx1ZSk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2Vs
ZkFuZENoaWxkcmVuKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCit2
b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6cGFpbnRTZWxmQW5kQ2hpbGRyZW4oY29uc3QgVGV4dHVy
ZU1hcHBlclBhaW50T3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBib29sIGhhc0NsaXAgPSBtX3N0
YXRlLm1hc2tzVG9Cb3VuZHMgJiYgIW1fY2hpbGRyZW4uaXNFbXB0eSgpOwogICAgIGlmIChoYXND
bGlwKQpAQCAtMTg2LDEzICsxODYsMTMgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRT
ZWxmQW5kQ2hpbGRyZW4oY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYgb3AKICAgICAg
ICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5lbmRDbGlwKCk7CiB9CiAKLUludFJlY3QgVGV4dHVy
ZU1hcHBlck5vZGU6OmludGVybWVkaWF0ZVN1cmZhY2VSZWN0KCkKK0ludFJlY3QgVGV4dHVyZU1h
cHBlckxheWVyOjppbnRlcm1lZGlhdGVTdXJmYWNlUmVjdCgpCiB7CiAgICAgLy8gRklYTUU6IEFk
ZCBhbiBpbnZlcnNlIHRyYW5zZm9ybSB0byBMYXllclRyYW5zZm9ybS4KICAgICByZXR1cm4gaW50
ZXJtZWRpYXRlU3VyZmFjZVJlY3QobV90cmFuc2Zvcm0uY29tYmluZWQoKS5pbnZlcnNlKCkpOwog
fQogCi1JbnRSZWN0IFRleHR1cmVNYXBwZXJOb2RlOjppbnRlcm1lZGlhdGVTdXJmYWNlUmVjdChj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQorSW50UmVjdCBUZXh0dXJlTWFwcGVy
TGF5ZXI6OmludGVybWVkaWF0ZVN1cmZhY2VSZWN0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtYXRyaXgpCiB7CiAgICAgSW50UmVjdCByZWN0OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGxvY2FsVHJhbnNmb3JtID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobWF0cml4KS5tdWx0aXBseSht
X3RyYW5zZm9ybS5jb21iaW5lZCgpKTsKQEAgLTIwOCw3ICsyMDgsNyBAQCBJbnRSZWN0IFRleHR1
cmVNYXBwZXJOb2RlOjppbnRlcm1lZGlhdGVTdXJmYWNlUmVjdChjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbQogICAgIHJldHVybiByZWN0OwogfQogCi1ib29sIFRleHR1cmVNYXBwZXJOb2Rl
OjpzaG91bGRQYWludFRvSW50ZXJtZWRpYXRlU3VyZmFjZSgpIGNvbnN0Citib29sIFRleHR1cmVN
YXBwZXJMYXllcjo6c2hvdWxkUGFpbnRUb0ludGVybWVkaWF0ZVN1cmZhY2UoKSBjb25zdAogewog
ICAgIGJvb2wgaGFzT3BhY2l0eSA9IG1fb3BhY2l0eSA8IDAuOTk7CiAgICAgYm9vbCBoYXNDaGls
ZHJlbiA9ICFtX2NoaWxkcmVuLmlzRW1wdHkoKTsKQEAgLTIzMyw3ICsyMzMsNyBAQCBib29sIFRl
eHR1cmVNYXBwZXJOb2RlOjpzaG91bGRQYWludFRvSW50ZXJtZWRpYXRlU3VyZmFjZSgpIGNvbnN0
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFRleHR1cmVNYXBwZXJOb2RlOjppc1Zpc2li
bGUoKSBjb25zdAorYm9vbCBUZXh0dXJlTWFwcGVyTGF5ZXI6OmlzVmlzaWJsZSgpIGNvbnN0CiB7
CiAgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgJiYgKG1fc3RhdGUubWFza3NUb0JvdW5kcyB8fCBt
X3N0YXRlLm1hc2tMYXllciB8fCBtX2NoaWxkcmVuLmlzRW1wdHkoKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTI0Miw3ICsyNDIsNyBAQCBib29sIFRleHR1cmVNYXBwZXJOb2RlOjppc1Zp
c2libGUoKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJO
b2RlOjpwYWludFNlbGZBbmRDaGlsZHJlbldpdGhSZXBsaWNhKGNvbnN0IFRleHR1cmVNYXBwZXJQ
YWludE9wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6cGFpbnRTZWxm
QW5kQ2hpbGRyZW5XaXRoUmVwbGljYShjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBv
cHRpb25zKQogewogICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikgewogICAgICAgICBUZXh0
dXJlTWFwcGVyUGFpbnRPcHRpb25zIHJlcGxpY2FPcHRpb25zKG9wdGlvbnMpOwpAQCAtMjYwLDcg
KzI2MCw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZkFuZENoaWxkcmVuV2l0
aFJlcGxpY2EoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50CiAgICAgcGFpbnRTZWxmQW5kQ2hpbGRy
ZW4ob3B0aW9ucyk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50UmVjdXJzaXZl
KGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFRleHR1cmVN
YXBwZXJMYXllcjo6cGFpbnRSZWN1cnNpdmUoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9u
cyYgb3B0aW9ucykKIHsKICAgICBpZiAoIWlzVmlzaWJsZSgpKQogICAgICAgICByZXR1cm47CkBA
IC0zMDUsNyArMzA1LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRSZWN1cnNpdmUo
Y29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYgb3B0aW9ucykKICAgICBvcHRpb25zLnRl
eHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCpzdXJmYWNlLmdldCgpLCBzdXJmYWNlUmVjdCwgdGFy
Z2V0VHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrVGV4dHVyZS5nZXQoKSk7CiB9CiAKLVRleHR1cmVN
YXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5vZGUoKQorVGV4dHVyZU1hcHBlckxheWVyOjp+VGV4
dHVyZU1hcHBlckxheWVyKCkKIHsKICAgICBmb3IgKGludCBpID0gbV9jaGlsZHJlbi5zaXplKCkg
LSAxOyBpID49IDA7IC0taSkKICAgICAgICAgbV9jaGlsZHJlbltpXS0+bV9wYXJlbnQgPSAwOwpA
QCAtMzE0LDEyICszMTQsMTIgQEAgVGV4dHVyZU1hcHBlck5vZGU6On5UZXh0dXJlTWFwcGVyTm9k
ZSgpCiAgICAgICAgIG1fcGFyZW50LT5tX2NoaWxkcmVuLnJlbW92ZShtX3BhcmVudC0+bV9jaGls
ZHJlbi5maW5kKHRoaXMpKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBv
c2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIGlu
dCBvcHRpb25zKQordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRl
KEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBpbnQgb3B0aW9ucykK
IHsKICAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZShncmFwaGljc0xheWVyLCByb290TGF5ZXIoKS0+
bV90ZXh0dXJlTWFwcGVyLCBvcHRpb25zKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6
c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFw
aGljc0xheWVyLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQordm9pZCBUZXh0dXJlTWFw
cGVyTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlciogZ3JhcGhpY3NMYXllciwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKIHsKICAg
ICBpbnQgY2hhbmdlTWFzayA9IGdyYXBoaWNzTGF5ZXItPmNoYW5nZU1hc2soKTsKIApAQCAtMzI3
LDE1ICszMjcsMTUgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3Rh
dGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKGNoYW5nZU1hc2sgJiBQYXJlbnRDaGFuZ2UpIHsKLSAgICAgICAgVGV4dHVyZU1h
cHBlck5vZGUqIG5ld1BhcmVudCA9IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhpY3NMYXllci0+
cGFyZW50KCkpOworICAgICAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIG5ld1BhcmVudCA9IHRvVGV4
dHVyZU1hcHBlckxheWVyKGdyYXBoaWNzTGF5ZXItPnBhcmVudCgpKTsKICAgICAgICAgaWYgKG5l
d1BhcmVudCAhPSBtX3BhcmVudCkgewotICAgICAgICAgICAgLy8gUmVtb3ZlIG5vZGUgZnJvbSBj
dXJyZW50IGZyb20gY2hpbGQgbGlzdCBmaXJzdC4KKyAgICAgICAgICAgIC8vIFJlbW92ZSBsYXll
ciBmcm9tIGN1cnJlbnQgZnJvbSBjaGlsZCBsaXN0IGZpcnN0LgogICAgICAgICAgICAgaWYgKG1f
cGFyZW50KSB7CiAgICAgICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gbV9wYXJlbnQtPm1fY2hp
bGRyZW4uZmluZCh0aGlzKTsKICAgICAgICAgICAgICAgICBtX3BhcmVudC0+bV9jaGlsZHJlbi5y
ZW1vdmUoaW5kZXgpOwogICAgICAgICAgICAgICAgIG1fcGFyZW50ID0gMDsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIC8vIFNldCBuZXcgbm9kZSBwYXJlbnQgYW5kIGFkZCBub2RlIHRvIHRo
ZSBwYXJlbnRzIGNoaWxkIGxpc3QuCisgICAgICAgICAgICAvLyBTZXQgbmV3IGxheWVyIHBhcmVu
dCBhbmQgYWRkIGxheWVyIHRvIHRoZSBwYXJlbnRzIGNoaWxkIGxpc3QuCiAgICAgICAgICAgICBp
ZiAobmV3UGFyZW50KSB7CiAgICAgICAgICAgICAgICAgbV9wYXJlbnQgPSBuZXdQYXJlbnQ7CiAg
ICAgICAgICAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4uYXBwZW5kKHRoaXMpOwpAQCAtMzQ0
LDEzICszNDQsMTMgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3Rh
dGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAgICB9CiAKICAgICBpZiAo
Y2hhbmdlTWFzayAmIENoaWxkcmVuQ2hhbmdlKSB7Ci0gICAgICAgIC8vIENsZWFyIGNoaWxkcmVu
IHBhcmVudCBwb2ludGVyIHRvIGF2b2lkIHVuc3luYyBhbmQgY3Jhc2ggb24gbm9kZSBkZWxldGUu
CisgICAgICAgIC8vIENsZWFyIGNoaWxkcmVuIHBhcmVudCBwb2ludGVyIHRvIGF2b2lkIHVuc3lu
YyBhbmQgY3Jhc2ggb24gbGF5ZXIgZGVsZXRlLgogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICBtX2NoaWxkcmVuW2ldLT5t
X3BhcmVudCA9IDA7CiAKICAgICAgICAgbV9jaGlsZHJlbi5jbGVhcigpOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBjaGlsZCA9IHRvVGV4dHVyZU1hcHBl
ck5vZGUoZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4oKVtpXSk7CisgICAgICAgICAgICBUZXh0dXJl
TWFwcGVyTGF5ZXIqIGNoaWxkID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIoZ3JhcGhpY3NMYXllci0+
Y2hpbGRyZW4oKVtpXSk7CiAgICAgICAgICAgICBpZiAoIWNoaWxkKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoY2hpbGQpOwpAQCAtMzYx
LDIwICszNjEsMjAgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3Rh
dGVTZWxmKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAgICBtX3NpemUgPSBncmFw
aGljc0xheWVyLT5zaXplKCk7CiAKICAgICBpZiAoY2hhbmdlTWFzayAmIE1hc2tMYXllckNoYW5n
ZSkgewotICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTm9kZSogbGF5ZXIgPSB0b1RleHR1cmVNYXBw
ZXJOb2RlKGdyYXBoaWNzTGF5ZXItPm1hc2tMYXllcigpKSkKKyAgICAgICBpZiAoVGV4dHVyZU1h
cHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGdyYXBoaWNzTGF5ZXItPm1h
c2tMYXllcigpKSkKICAgICAgICAgICAgbGF5ZXItPm1fZWZmZWN0VGFyZ2V0ID0gdGhpczsKICAg
ICB9CiAKICAgICBpZiAoY2hhbmdlTWFzayAmIFJlcGxpY2FMYXllckNoYW5nZSkgewotICAgICAg
IGlmIChUZXh0dXJlTWFwcGVyTm9kZSogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBo
aWNzTGF5ZXItPnJlcGxpY2FMYXllcigpKSkKKyAgICAgICBpZiAoVGV4dHVyZU1hcHBlckxheWVy
KiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGdyYXBoaWNzTGF5ZXItPnJlcGxpY2FMYXll
cigpKSkKICAgICAgICAgICAgbGF5ZXItPm1fZWZmZWN0VGFyZ2V0ID0gdGhpczsKICAgICB9CiAK
ICAgICBpZiAoY2hhbmdlTWFzayAmIEFuaW1hdGlvbkNoYW5nZSkKICAgICAgICAgbV9hbmltYXRp
b25zID0gZ3JhcGhpY3NMYXllci0+bV9hbmltYXRpb25zOwogCi0gICAgbV9zdGF0ZS5tYXNrTGF5
ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPm1hc2tMYXllcigpKTsKLSAg
ICBtX3N0YXRlLnJlcGxpY2FMYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhpY3NMYXll
ci0+cmVwbGljYUxheWVyKCkpOworICAgIG1fc3RhdGUubWFza0xheWVyID0gdG9UZXh0dXJlTWFw
cGVyTGF5ZXIoZ3JhcGhpY3NMYXllci0+bWFza0xheWVyKCkpOworICAgIG1fc3RhdGUucmVwbGlj
YUxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIoZ3JhcGhpY3NMYXllci0+cmVwbGljYUxheWVy
KCkpOwogICAgIG1fc3RhdGUucG9zID0gZ3JhcGhpY3NMYXllci0+cG9zaXRpb24oKTsKICAgICBt
X3N0YXRlLmFuY2hvclBvaW50ID0gZ3JhcGhpY3NMYXllci0+YW5jaG9yUG9pbnQoKTsKICAgICBt
X3N0YXRlLnNpemUgPSBncmFwaGljc0xheWVyLT5zaXplKCk7CkBAIC00MDAsNyArNDAwLDcgQEAg
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyKiBncmEKICAgICBtX3RyYW5zZm9ybS5zZXRDaGlsZHJlblRyYW5z
Zm9ybShtX3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtKTsKIH0KIAotYm9vbCBUZXh0dXJlTWFwcGVy
Tm9kZTo6ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAorYm9v
bCBUZXh0dXJlTWFwcGVyTGF5ZXI6OmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRp
b25zKCkgY29uc3QKIHsKICAgICBpZiAobV9hbmltYXRpb25zLmhhc1J1bm5pbmdBbmltYXRpb25z
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDEzLDcgKzQxMyw3IEBAIGJvb2wgVGV4dHVy
ZU1hcHBlck5vZGU6OmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkgY29u
c3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNB
bmltYXRpb25zKCkKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpzeW5jQW5pbWF0aW9ucygpCiB7
CiAgICAgbV9hbmltYXRpb25zLmFwcGx5KHRoaXMpOwogICAgIGlmICghbV9hbmltYXRpb25zLmhh
c0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkp
CkBAIC00MjIsNyArNDIyLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0FuaW1hdGlv
bnMoKQogICAgICAgICBzZXRPcGFjaXR5KG1fc3RhdGUub3BhY2l0eSk7CiB9CiAKLXZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OnN5bmNBbmltYXRpb25zUmVjdXJzaXZlbHkoKQordm9pZCBUZXh0dXJl
TWFwcGVyTGF5ZXI6OnN5bmNBbmltYXRpb25zUmVjdXJzaXZlbHkoKQogewogICAgIHN5bmNBbmlt
YXRpb25zKCk7CiAKQEAgLTQzMCw3ICs0MzAsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpz
eW5jQW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCkKICAgICAgICAgbV9jaGlsZHJlbltpXS0+c3luY0Fu
aW1hdGlvbnNSZWN1cnNpdmVseSgpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5j
Q29tcG9zaXRpbmdTdGF0ZShHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXll
ciwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgaW50IG9wdGlvbnMpCit2b2lkIFRleHR1
cmVNYXBwZXJMYXllcjo6c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIqIGdyYXBoaWNzTGF5ZXIsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGludCBv
cHRpb25zKQogewogICAgIGlmICghdGV4dHVyZU1hcHBlcikKICAgICAgICAgcmV0dXJuOwpAQCAt
NDYwLDEwICs0NjAsMTAgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5n
U3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWMKICAgICBpZiAoZ3JhcGhp
Y3NMYXllcikgewogICAgICAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuID0gZ3Jh
cGhpY3NMYXllci0+Y2hpbGRyZW4oKTsKICAgICAgICAgZm9yIChpbnQgaSA9IGNoaWxkcmVuLnNp
emUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSog
bm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUoY2hpbGRyZW5baV0pOwotICAgICAgICAgICAgaWYg
KCFub2RlKQorICAgICAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVy
ZU1hcHBlckxheWVyKGNoaWxkcmVuW2ldKTsKKyAgICAgICAgICAgIGlmICghbGF5ZXIpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBub2RlLT5zeW5jQ29tcG9zaXRpbmdT
dGF0ZSh0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGNoaWxkcmVuW2ldKSwgdGV4dHVyZU1h
cHBlciwgb3B0aW9ucyk7CisgICAgICAgICAgICBsYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUo
dG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihjaGlsZHJlbltpXSksIHRleHR1cmVNYXBwZXIs
IG9wdGlvbnMpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChpbnQgaSA9
IG1fY2hpbGRyZW4uc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVy
LmgKaW5kZXggMTM3YmYwNmEuLjMwNjY2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgKQEAg
LTE3LDggKzE3LDggQEAKICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZu
ZGVmIFRleHR1cmVNYXBwZXJOb2RlX2gKLSNkZWZpbmUgVGV4dHVyZU1hcHBlck5vZGVfaAorI2lm
bmRlZiBUZXh0dXJlTWFwcGVyTGF5ZXJfaAorI2RlZmluZSBUZXh0dXJlTWFwcGVyTGF5ZXJfaAog
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBA
IC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyOwotY2xhc3MgVGV4dHVyZU1hcHBlck5vZGU7CitjbGFzcyBUZXh0dXJl
TWFwcGVyTGF5ZXI7CiBjbGFzcyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjsKIAogY2xhc3Mg
VGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyB7CkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAg
ICB7IH0KIH07CiAKLWNsYXNzIFRleHR1cmVNYXBwZXJOb2RlIDogcHVibGljIFRleHR1cmVNYXBw
ZXJBbmltYXRpb25DbGllbnQgeworY2xhc3MgVGV4dHVyZU1hcHBlckxheWVyIDogcHVibGljIFRl
eHR1cmVNYXBwZXJBbmltYXRpb25DbGllbnQgewogCiBwdWJsaWM6CiAgICAgLy8gVGhpcyBzZXQg
b2YgZmxhZ3MgaGVscCB1cyBkZWZlciB3aGljaCBwcm9wZXJ0aWVzIG9mIHRoZSBsYXllciBoYXZl
IGJlZW4KQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAgICAgICBDb21wdXRhdGlvbnNPbmx5
ID0gMgogICAgIH07CiAKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSgpCisgICAgVGV4dHVyZU1hcHBl
ckxheWVyKCkKICAgICAgICAgOiBtX3BhcmVudCgwKQogICAgICAgICAsIG1fZWZmZWN0VGFyZ2V0
KDApCiAgICAgICAgICwgbV9jb250ZW50c0xheWVyKDApCkBAIC0xMDYsNyArMTA2LDcgQEAgcHVi
bGljOgogICAgICAgICAsIG1fdGV4dHVyZU1hcHBlcigwKQogICAgIHsgfQogCi0gICAgdmlydHVh
bCB+VGV4dHVyZU1hcHBlck5vZGUoKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyTGF5ZXIo
KTsKIAogICAgIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIqLCBpbnQgc3luY09wdGlvbnMgPSAwKTsKICAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0
YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiwgVGV4dHVyZU1hcHBlciosIGludCBzeW5j
T3B0aW9ucyA9IDApOwpAQCAtMTI1LDcgKzEyNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFy
QmFja2luZ1N0b3Jlc1JlY3Vyc2l2ZSgpOwogCiBwcml2YXRlOgotICAgIFRleHR1cmVNYXBwZXJO
b2RlKiByb290TGF5ZXIoKTsKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIHJvb3RMYXllcigpOwog
ICAgIHZvaWQgY29tcHV0ZVRyYW5zZm9ybXNSZWN1cnNpdmUoKTsKICAgICB2b2lkIGNvbXB1dGVP
dmVybGFwc0lmTmVlZGVkKCk7CiAgICAgdm9pZCBjb21wdXRlVGlsZXMoKTsKQEAgLTEzOCw3ICsx
MzgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVTZWxmKEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBUZXh0dXJlTWFwcGVyKiB0ZXh0
dXJlTWFwcGVyKTsKIAogICAgIHN0YXRpYyBpbnQgY29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVl
KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpOwotICAgIHN0YXRpYyB2b2lkIHNvcnRCeVpP
cmRlcihWZWN0b3I8VGV4dHVyZU1hcHBlck5vZGUqID4mIGFycmF5LCBpbnQgZmlyc3QsIGludCBs
YXN0KTsKKyAgICBzdGF0aWMgdm9pZCBzb3J0QnlaT3JkZXIoVmVjdG9yPFRleHR1cmVNYXBwZXJM
YXllciogPiYgYXJyYXksIGludCBmaXJzdCwgaW50IGxhc3QpOwogCiAgICAgUGFzc1JlZlB0cjxC
aXRtYXBUZXh0dXJlPiB0ZXh0dXJlKCkgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUgPyBtX2JhY2tp
bmdTdG9yZS0+dGV4dHVyZSgpIDogMDsgfQogCkBAIC0xNTksOSArMTU5LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIG1fc2l6ZSk7CiAg
ICAgfQogCi0gICAgVmVjdG9yPFRleHR1cmVNYXBwZXJOb2RlKj4gbV9jaGlsZHJlbjsKLSAgICBU
ZXh0dXJlTWFwcGVyTm9kZSogbV9wYXJlbnQ7Ci0gICAgVGV4dHVyZU1hcHBlck5vZGUqIG1fZWZm
ZWN0VGFyZ2V0OworICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyTGF5ZXIqPiBtX2NoaWxkcmVuOwor
ICAgIFRleHR1cmVNYXBwZXJMYXllciogbV9wYXJlbnQ7CisgICAgVGV4dHVyZU1hcHBlckxheWVy
KiBtX2VmZmVjdFRhcmdldDsKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4g
bV9iYWNraW5nU3RvcmU7CiAgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIG1fY29udGVu
dHNMYXllcjsKICAgICBGbG9hdFNpemUgbV9zaXplOwpAQCAtMTgwLDggKzE4MCw4IEBAIHByaXZh
dGU6CiAgICAgICAgIEZsb2F0UmVjdCBjb250ZW50c1JlY3Q7CiAgICAgICAgIEZsb2F0UmVjdCBu
ZWVkc0Rpc3BsYXlSZWN0OwogICAgICAgICBpbnQgZGVzY2VuZGFudHNXaXRoQ29udGVudDsKLSAg
ICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG1hc2tMYXllcjsKLSAgICAgICAgVGV4dHVyZU1hcHBl
ck5vZGUqIHJlcGxpY2FMYXllcjsKKyAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyKiBtYXNrTGF5
ZXI7CisgICAgICAgIFRleHR1cmVNYXBwZXJMYXllciogcmVwbGljYUxheWVyOwogICAgICAgICBi
b29sIHByZXNlcnZlczNEIDogMTsKICAgICAgICAgYm9vbCBtYXNrc1RvQm91bmRzIDogMTsKICAg
ICAgICAgYm9vbCBkcmF3c0NvbnRlbnQgOiAxOwpAQCAtMjE0LDcgKzIxNCw3IEBAIHByaXZhdGU6
CiB9OwogCiAKLVRleHR1cmVNYXBwZXJOb2RlKiB0b1RleHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNz
TGF5ZXIqKTsKK1RleHR1cmVNYXBwZXJMYXllciogdG9UZXh0dXJlTWFwcGVyTGF5ZXIoR3JhcGhp
Y3NMYXllciopOwogCiB9Ci0jZW5kaWYgLy8gVGV4dHVyZU1hcHBlck5vZGVfaAorI2VuZGlmIC8v
IFRleHR1cmVNYXBwZXJMYXllcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggMzhmMzg1NS4uMDgxNTc2
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAyLTE0ICBObydhbSBS
b3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1RleG1hcF0g
RGl2aWRlIFRleHR1cmVNYXBwZXJOb2RlLmNwcCB0byAzIGZpbGVzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NjAKKworICAgICAgICBSZW5hbWUg
VGV4dHVyZU1hcHBlck5vZGUgdG8gVGV4dHVyZU1hcHBlckxheWVyLgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaDoKKyAgICAgICAgKEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYktp
dDo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmVuYWJsZWQpOgorICAgICAgICAoV2Vi
S2l0OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVuZGVyTGF5ZXJzVG9XaW5kb3cp
OgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6YXR0YWNo
Um9vdEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dDo6c3luY0xheWVyc1RpbWVvdXQpOgorCiAyMDEyLTAyLTA5ICBaYW4gRG9iZXJz
ZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CiAKICAgICAgICAgW0dUS10gQWRkIERSVCBzdXBw
b3J0IGZvciBtb2RhbCBkaWFsb2dzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaAppbmRl
eCA0MmE1ZjI0Li43NzgzOTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgKQEAg
LTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiAjaWYgVVNFKFRF
WFRVUkVfTUFQUEVSX0dMKQotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJOb2RlLmgiCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCiAjaW5jbHVkZSAiV2luZG93R0xDb250ZXh0LmgiCiAj
ZW5kaWYKIApAQCAtNzIsNyArNzIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZUlm
TmVjZXNzYXJ5KCk7CiAKICAgICBib29sIG1faW5pdGlhbGl6ZWQ7Ci0gICAgV2ViQ29yZTo6VGV4
dHVyZU1hcHBlck5vZGUqIG1fcm9vdFRleHR1cmVNYXBwZXJOb2RlOworICAgIFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJMYXllciogbV9yb290VGV4dHVyZU1hcHBlckxheWVyOwogICAgIE93blB0cjxX
ZWJDb3JlOjpXaW5kb3dHTENvbnRleHQ+IG1fY29udGV4dDsKICAgICBPd25QdHI8V2ViQ29yZTo6
VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4
dEdMLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdDb250ZXh0R0wuY3BwCmluZGV4IDliZmEzZDAuLjg4Y2Q2ZDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKICNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTm9kZS5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgogI2luY2x1ZGUgIndlYmtpdHdlYnZpZXdw
cml2YXRlLmgiCiAjaW5jbHVkZSA8R0wvZ2wuaD4KICNpbmNsdWRlIDxjYWlyby5oPgpAQCAtNDMs
NyArNDMsNyBAQCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0NvbnRleHQoV2ViS2l0V2ViVmlldyogd2ViVgogICAgIDogbV93ZWJWaWV3KHdlYlZp
ZXcpCiAgICAgLCBtX3N5bmNUaW1lcih0aGlzLCAmQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQ6OnN5bmNMYXllcnNUaW1lb3V0KQogICAgICwgbV9pbml0aWFsaXplZChmYWxzZSkKLSAgICAs
IG1fcm9vdFRleHR1cmVNYXBwZXJOb2RlKDApCisgICAgLCBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5
ZXIoMCkKIHsKIH0KIApAQCAtNjksNyArNjksNyBAQCB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0Ojppbml0aWFsaXplSWZOZWNlc3NhcnkoKQogCiBib29sIEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdDb250ZXh0OjplbmFibGVkKCkKIHsKLSAgICByZXR1cm4gbV9yb290VGV4dHVyZU1h
cHBlck5vZGUgJiYgbV90ZXh0dXJlTWFwcGVyOworICAgIHJldHVybiBtX3Jvb3RUZXh0dXJlTWFw
cGVyTGF5ZXIgJiYgbV90ZXh0dXJlTWFwcGVyOwogfQogCiAKQEAgLTkwLDcgKzkwLDcgQEAgYm9v
bCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVuZGVyTGF5ZXJzVG9XaW5kb3coY29u
c3QgSW50UmVjdCYgY2xpcFJlY3QKICAgICBnbFZpZXdwb3J0KDAsIDAsIGFsbG9jYXRpb24ud2lk
dGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsKIAogICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWlu
dGluZygpOwotICAgIG1fcm9vdFRleHR1cmVNYXBwZXJOb2RlLT5wYWludCgpOworICAgIG1fcm9v
dFRleHR1cmVNYXBwZXJMYXllci0+cGFpbnQoKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBh
aW50aW5nKCk7CiAKICAgICBtX2NvbnRleHQtPmZpbmlzaERyYXdpbmcoKTsKQEAgLTEwMSwxMiAr
MTAxLDEyIEBAIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmF0dGFjaFJvb3RH
cmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoCiB7CiAgICAgaWYgKCFncmFwaGljc0xh
eWVyKSB7CiAgICAgICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXIuY2xlYXIoKTsKLSAgICAgICAgbV9y
b290VGV4dHVyZU1hcHBlck5vZGUgPSAwOworICAgICAgICBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5
ZXIgPSAwOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgbV9yb290R3JhcGhpY3NMYXll
ciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICBtX3Jvb3RUZXh0dXJlTWFwcGVy
Tm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobV9yb290R3JhcGhpY3NMYXllci5nZXQoKSk7Cisg
ICAgbV9yb290VGV4dHVyZU1hcHBlckxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290
R3JhcGhpY3NMYXllci5nZXQoKSk7CiAgICAgbV9yb290R3JhcGhpY3NMYXllci0+YWRkQ2hpbGQo
Z3JhcGhpY3NMYXllcik7CiAgICAgbV9yb290R3JhcGhpY3NMYXllci0+c2V0RHJhd3NDb250ZW50
KHRydWUpOwogICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2Up
OwpAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6
OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoCiAgICAgZ2xWaWV3
cG9ydCgwLCAwLCBhbGxvY2F0aW9uLndpZHRoLCBhbGxvY2F0aW9uLmhlaWdodCk7CiAKICAgICBt
X3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOwotICAgIG1fcm9vdFRl
eHR1cmVNYXBwZXJOb2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7
CisgICAgbV9yb290VGV4dHVyZU1hcHBlckxheWVyLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVy
ZU1hcHBlci5nZXQoKSk7CiAgICAgbV9yb290R3JhcGhpY3NMYXllci0+c3luY0NvbXBvc2l0aW5n
U3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiB9CiAKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzeW5jTGF5ZXJzVGltZW91dChUaW1lcjxBY2Nl
bGVyYXRlZENvbXBvc2l0aQogCiAgICAgcmVuZGVyTGF5ZXJzVG9XaW5kb3coSW50UmVjdCgpKTsK
IAotICAgIGlmICh0b1RleHR1cmVNYXBwZXJOb2RlKG1fcm9vdEdyYXBoaWNzTGF5ZXIuZ2V0KCkp
LT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQorICAgIGlmICh0b1Rl
eHR1cmVNYXBwZXJMYXllcihtX3Jvb3RHcmFwaGljc0xheWVyLmdldCgpKS0+ZGVzY2VuZGFudHNP
clNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKICAgICAgICAgbV9zeW5jVGltZXIuc3RhcnRP
bmVTaG90KDEuMCAvIDYwLjApOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2ViZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAppbmRl
eCAzOWI5ZDIwLi4yMTFmMGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
ZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKQEAgLTEw
NCw3ICsxMDQsNyBAQAogI2VuZGlmCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogI2luY2x1ZGUg
InRleG1hcC9UZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmgiCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oIgogI2VuZGlmCiAj
aW5jbHVkZSAid3RmL0hhc2hNYXAuaCIKICNpbmNsdWRlIDxRTXVsdGlNYXA+CkBAIC0zMzEsNyAr
MzMxLDcgQEAgdm9pZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5kZXJGcm9tVGlsZWRCYWNraW5nU3Rv
cmUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb24KICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKIHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6
cmVuZGVyQ29tcG9zaXRlZExheWVycyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIGNsaXApCiB7Ci0gICAgaWYgKCFyb290VGV4dHVyZU1hcHBlck5vZGUgfHwgIXRleHR1
cmVNYXBwZXIpCisgICAgaWYgKCFyb290VGV4dHVyZU1hcHBlckxheWVyIHx8ICF0ZXh0dXJlTWFw
cGVyKQogICAgICAgICByZXR1cm47CiAKICAgICB0ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0Nv
bnRleHQoY29udGV4dCk7CkBAIC0zNDUsMTEgKzM0NSwxMSBAQCB2b2lkIFFXZWJGcmFtZVByaXZh
dGU6OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbgogICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCiAgICAgICAgICAgICAgICAgdHJhbnNm
b3JtLm0zMSgpLCB0cmFuc2Zvcm0ubTMyKCksIDAsIHRyYW5zZm9ybS5tMzMoKQogICAgICAgICAg
ICAgICAgICk7Ci0gICAgcm9vdFRleHR1cmVNYXBwZXJOb2RlLT5zZXRUcmFuc2Zvcm0obWF0cml4
KTsKLSAgICByb290VGV4dHVyZU1hcHBlck5vZGUtPnNldE9wYWNpdHkocGFpbnRlci0+b3BhY2l0
eSgpKTsKKyAgICByb290VGV4dHVyZU1hcHBlckxheWVyLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsK
KyAgICByb290VGV4dHVyZU1hcHBlckxheWVyLT5zZXRPcGFjaXR5KHBhaW50ZXItPm9wYWNpdHko
KSk7CiAgICAgdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOwogICAgIHRleHR1cmVNYXBw
ZXItPmJlZ2luQ2xpcChtYXRyaXgsIGNsaXApOwotICAgIHJvb3RUZXh0dXJlTWFwcGVyTm9kZS0+
cGFpbnQoKTsKKyAgICByb290VGV4dHVyZU1hcHBlckxheWVyLT5wYWludCgpOwogICAgIHRleHR1
cmVNYXBwZXItPmVuZENsaXAoKTsKICAgICB0ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmggYi9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuaAppbmRleCAzNWZjZTRiLi5mZjE1Nzc3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2ViZnJhbWUuaApAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgV2lkZ2V0UHJpdmF0ZTsKICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVudFF0
OwogICAgIGNsYXNzIENocm9tZUNsaWVudFF0OwotICAgIGNsYXNzIFRleHR1cmVNYXBwZXJOb2Rl
Q2xpZW50UXQ7CisgICAgY2xhc3MgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50UXQ7CiB9CiBjbGFz
cyBRV2ViRnJhbWVEYXRhOwogY2xhc3MgUVdlYkhpdFRlc3RSZXN1bHRQcml2YXRlOwpAQCAtMjM0
LDcgKzIzNCw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OldpZGdldFBy
aXZhdGU7CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ7CiAg
ICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OkNocm9tZUNsaWVudFF0OwotICAgIGZyaWVuZCBjbGFz
cyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0OworICAgIGZyaWVuZCBjbGFzcyBX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnRRdDsKICAgICBRV2ViRnJhbWVQcml2YXRl
ICpkOwogICAgIFFfUFJJVkFURV9TTE9UKGQsIHZvaWQgX3Ffb3JpZW50YXRpb25DaGFuZ2VkKCkp
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaCBiL1Nv
dXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKaW5kZXggMWRiYTZhNS4uNGFiN2I5NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZVZpZXc7CiAgICAgY2xhc3MgSFRNTEZyYW1lT3du
ZXJFbGVtZW50OwogICAgIGNsYXNzIFNjcm9sbGJhcjsKLSAgICBjbGFzcyBUZXh0dXJlTWFwcGVy
Tm9kZTsKKyAgICBjbGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXI7CiB9CiBjbGFzcyBRV2ViUGFnZTsK
IApAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbWFyZ2luV2lkdGgoLTEpCiAg
ICAgICAgICwgbWFyZ2luSGVpZ2h0KC0xKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgICAgICAsIHJvb3RUZXh0dXJlTWFwcGVyTm9k
ZSgwKQorICAgICAgICAsIHJvb3RUZXh0dXJlTWFwcGVyTGF5ZXIoMCkKICNlbmRpZgogICAgICAg
ICB7fQogICAgIHZvaWQgaW5pdChRV2ViRnJhbWUqIHFmcmFtZSwgUVdlYkZyYW1lRGF0YSogZnJh
bWVEYXRhKTsKQEAgLTEyNSw3ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgaW50IG1hcmdpbldpZHRo
OwogICAgIGludCBtYXJnaW5IZWlnaHQ7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGUq
IHJvb3RUZXh0dXJlTWFwcGVyTm9kZTsKKyAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIq
IHJvb3RUZXh0dXJlTWFwcGVyTGF5ZXI7CiAgICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXI+IHRleHR1cmVNYXBwZXI7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCAxNjQ2NDM5Li43
YTk3MDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTAyLTE0ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1RleG1h
cF0gRGl2aWRlIFRleHR1cmVNYXBwZXJOb2RlLmNwcCB0byAzIGZpbGVzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFwaS9xd2ViZnJhbWUuY3BwOgor
ICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyQ29tcG9zaXRlZExheWVycyk6CisgICAg
ICAgICogQXBpL3F3ZWJmcmFtZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogQXBp
L3F3ZWJmcmFtZV9wLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFFXZWJGcmFtZVBy
aXZhdGU6OlFXZWJGcmFtZVByaXZhdGUpOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZSk6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJMYXllckNsaWVudFF0OjpUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnRR
dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnRRdDo6c2V0VGV4
dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnRR
dDo6flRleHR1cmVNYXBwZXJMYXllckNsaWVudFF0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJMYXllckNsaWVudFF0OjpzeW5jUm9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJMYXllckNsaWVudFF0Ojpyb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZUNsaWVudFFXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhZ2VDbGllbnRRV2lkZ2V0OjpzeW5jTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnN5bmNMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oOgorICAgICAgICAoVGV4dHVyZU1h
cHBlckxheWVyQ2xpZW50UXQpOgorICAgICAgICAoUGFnZUNsaWVudFFXaWRnZXQpOgorICAgICAg
ICAoUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCk6CisKIDIwMTItMDItMTIgIEhhamltZSBNb3Jy
aXRhICA8bW9ycml0YUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUGFnZSBzaG91bGQgaGF2ZSBs
ZXNzIGludHJ1c2l2ZSB3YXkgdG8gYXNzb2NpYXRlIEFQSSBpbXBsZW1lbnRhdGlvbiBvYmplY3Rz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50
UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuY3Bw
CmluZGV4IDQ1ZGNmYmIuLmYzYTI3YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKQEAgLTI5LDU0ICsyOSw1NCBAQAogCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5o
IgorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaCIKICNlbmRpZgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKLVRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ6OlRleHR1cmVNYXBw
ZXJOb2RlQ2xpZW50UXQoUVdlYkZyYW1lKiBmcmFtZSwgR3JhcGhpY3NMYXllciogbGF5ZXIpCitU
ZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnRRdDo6VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50UXQoUVdl
YkZyYW1lKiBmcmFtZSwgR3JhcGhpY3NMYXllciogbGF5ZXIpCiAgICAgOiBtX2ZyYW1lKGZyYW1l
KQogICAgICwgbV9yb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyOjpjcmVhdGUoMCkpCiB7
Ci0gICAgbV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJOb2RlID0gcm9vdE5vZGUoKTsKKyAg
ICBtX2ZyYW1lLT5kLT5yb290VGV4dHVyZU1hcHBlckxheWVyID0gcm9vdExheWVyKCk7CiAgICAg
bV9yb290R3JhcGhpY3NMYXllci0+YWRkQ2hpbGQobGF5ZXIpOwogICAgIG1fcm9vdEdyYXBoaWNz
TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7CiAgICAgbV9yb290R3JhcGhpY3NMYXllci0+
c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CiAgICAgbV9yb290R3JhcGhpY3NMYXllci0+c2V0U2l6
ZShJbnRTaXplKDEsIDEpKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0Ojpz
ZXRUZXh0dXJlTWFwcGVyKGNvbnN0IFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4mIHRleHR1cmVN
YXBwZXIpCit2b2lkIFRleHR1cmVNYXBwZXJMYXllckNsaWVudFF0OjpzZXRUZXh0dXJlTWFwcGVy
KGNvbnN0IFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4mIHRleHR1cmVNYXBwZXIpCiB7CiAgICAg
bV9mcmFtZS0+ZC0+dGV4dHVyZU1hcHBlciA9IHRleHR1cmVNYXBwZXI7Ci0gICAgbV9mcmFtZS0+
ZC0+cm9vdFRleHR1cmVNYXBwZXJOb2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fZnJhbWUtPmQtPnRl
eHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIG1fZnJhbWUtPmQtPnJvb3RUZXh0dXJlTWFwcGVyTGF5
ZXItPnNldFRleHR1cmVNYXBwZXIobV9mcmFtZS0+ZC0+dGV4dHVyZU1hcHBlci5nZXQoKSk7CiB9
CiAKLVRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ6On5UZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0
KCkKK1RleHR1cmVNYXBwZXJMYXllckNsaWVudFF0Ojp+VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50
UXQoKQogewotICAgIG1fZnJhbWUtPmQtPnJvb3RUZXh0dXJlTWFwcGVyTm9kZSA9IDA7CisgICAg
bV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJMYXllciA9IDA7CiB9CiAKLXZvaWQgVGV4dHVy
ZU1hcHBlck5vZGVDbGllbnRRdDo6c3luY1Jvb3RMYXllcigpCit2b2lkIFRleHR1cmVNYXBwZXJM
YXllckNsaWVudFF0OjpzeW5jUm9vdExheWVyKCkKIHsKICAgICBtX3Jvb3RHcmFwaGljc0xheWVy
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKIH0KIAotVGV4dHVyZU1h
cHBlck5vZGUqIFRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ6OnJvb3ROb2RlKCkKK1RleHR1cmVN
YXBwZXJMYXllciogVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50UXQ6OnJvb3RMYXllcigpCiB7Ci0g
ICAgcmV0dXJuIHRvVGV4dHVyZU1hcHBlck5vZGUobV9yb290R3JhcGhpY3NMYXllci5nZXQoKSk7
CisgICAgcmV0dXJuIHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdEdyYXBoaWNzTGF5ZXIuZ2V0
KCkpOwogfQogCiAKIHZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVy
KEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIGlmIChsYXllcikgewotICAgICAgICB0ZXh0
dXJlTWFwcGVyTm9kZUNsaWVudCA9IGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyTm9kZUNsaWVu
dFF0KHBhZ2UtPm1haW5GcmFtZSgpLCBsYXllcikpOwotICAgICAgICB0ZXh0dXJlTWFwcGVyTm9k
ZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyOjpjcmVhdGUoKSk7Ci0gICAg
ICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zeW5jUm9vdExheWVyKCk7CisgICAgICAgIFRl
eHR1cmVNYXBwZXJMYXllckNsaWVudCA9IGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyTGF5ZXJD
bGllbnRRdChwYWdlLT5tYWluRnJhbWUoKSwgbGF5ZXIpKTsKKyAgICAgICAgVGV4dHVyZU1hcHBl
ckxheWVyQ2xpZW50LT5zZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXI6OmNyZWF0ZSgpKTsK
KyAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50LT5zeW5jUm9vdExheWVyKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQuY2xlYXIoKTsK
KyAgICBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQuY2xlYXIoKTsKIH0KIAogdm9pZCBQYWdlQ2xp
ZW50UVdpZGdldDo6bWFya0ZvclN5bmMoYm9vbCBzY2hlZHVsZVN5bmMpCkBAIC04OCwxMiArODgs
MTIgQEAgdm9pZCBQYWdlQ2xpZW50UVdpZGdldDo6bWFya0ZvclN5bmMoYm9vbCBzY2hlZHVsZVN5
bmMpCiAKIHZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6OnN5bmNMYXllcnMoVGltZXI8UGFnZUNsaWVu
dFFXaWRnZXQ+KikKIHsKLSAgICBpZiAodGV4dHVyZU1hcHBlck5vZGVDbGllbnQpCi0gICAgICAg
IHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zeW5jUm9vdExheWVyKCk7CisgICAgaWYgKFRleHR1
cmVNYXBwZXJMYXllckNsaWVudCkKKyAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50LT5z
eW5jUm9vdExheWVyKCk7CiAgICAgUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShwYWdlLT5tYWluRnJh
bWUoKSktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsK
LSAgICBpZiAoIXRleHR1cmVNYXBwZXJOb2RlQ2xpZW50KQorICAgIGlmICghVGV4dHVyZU1hcHBl
ckxheWVyQ2xpZW50KQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKHRleHR1cmVNYXBwZXJOb2Rl
Q2xpZW50LT5yb290Tm9kZSgpLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9u
cygpICYmICFzeW5jVGltZXIuaXNBY3RpdmUoKSkKKyAgICBpZiAoVGV4dHVyZU1hcHBlckxheWVy
Q2xpZW50LT5yb290TGF5ZXIoKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlv
bnMoKSAmJiAhc3luY1RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIHN5bmNUaW1lci5zdGFydE9u
ZVNob3QoMS4wIC8gNjAuMCk7CiAgICAgdXBkYXRlKHZpZXctPnJlY3QoKSk7CiB9CkBAIC0yMzks
MTcgKzIzOSwxNyBAQCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OmNyZWF0ZU9yRGVs
ZXRlT3ZlcmxheSgpCiB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnN5bmNMYXllcnMo
KQogewogI2lmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICBpZiAodGV4dHVyZU1hcHBlck5vZGVD
bGllbnQpCi0gICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zeW5jUm9vdExheWVyKCk7
CisgICAgaWYgKFRleHR1cmVNYXBwZXJMYXllckNsaWVudCkKKyAgICAgICAgVGV4dHVyZU1hcHBl
ckxheWVyQ2xpZW50LT5zeW5jUm9vdExheWVyKCk7CiAjZW5kaWYKIAogICAgIFFXZWJGcmFtZVBy
aXZhdGU6OmNvcmUocGFnZS0+bWFpbkZyYW1lKCkpLT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0
YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAg
aWYgKCF0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCkKKyAgICBpZiAoIVRleHR1cmVNYXBwZXJMYXll
ckNsaWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHRleHR1cmVNYXBwZXJOb2RlQ2xp
ZW50LT5yb290Tm9kZSgpLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygp
ICYmICFzeW5jVGltZXIuaXNBY3RpdmUoKSkKKyAgICBpZiAoVGV4dHVyZU1hcHBlckxheWVyQ2xp
ZW50LT5yb290TGF5ZXIoKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMo
KSAmJiAhc3luY1RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIHN5bmNUaW1lci5zdGFydE9uZVNo
b3QoMS4wIC8gNjAuMCk7CiAgICAgdXBkYXRlKHZpZXctPmJvdW5kaW5nUmVjdCgpLnRvQWxpZ25l
ZFJlY3QoKSk7CiAjZW5kaWYKQEAgLTI1OSwxOCArMjU5LDE4IEBAIHZvaWQgUGFnZUNsaWVudFFH
cmFwaGljc1dpZGdldDo6c3luY0xheWVycygpCiB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NXaWRn
ZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIGlm
IChsYXllcikgewotICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCA9IGFkb3B0UHRyKG5l
dyBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0KHBhZ2UtPm1haW5GcmFtZSgpLCBsYXllcikpOwor
ICAgICAgICBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQgPSBhZG9wdFB0cihuZXcgVGV4dHVyZU1h
cHBlckxheWVyQ2xpZW50UXQocGFnZS0+bWFpbkZyYW1lKCksIGxheWVyKSk7CiAjaWYgVVNFKFRF
WFRVUkVfTUFQUEVSX0dMKQogICAgICAgICBRR3JhcGhpY3NWaWV3KiBncmFwaGljc1ZpZXcgPSB2
aWV3LT5zY2VuZSgpLT52aWV3cygpWzBdOwogICAgICAgICBpZiAoZ3JhcGhpY3NWaWV3ICYmIGdy
YXBoaWNzVmlldy0+dmlld3BvcnQoKSAmJiBncmFwaGljc1ZpZXctPnZpZXdwb3J0KCktPmluaGVy
aXRzKCJRR0xXaWRnZXQiKSkgewotICAgICAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQt
PnNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9w
ZW5HTE1vZGUpKTsKKyAgICAgICAgICAgIFRleHR1cmVNYXBwZXJMYXllckNsaWVudC0+c2V0VGV4
dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9k
ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgdGV4
dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlcjo6Y3Jl
YXRlKCkpOworICAgICAgICBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQtPnNldFRleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LmNsZWFyKCk7CisgICAgVGV4dHVyZU1hcHBlckxheWVy
Q2xpZW50LmNsZWFyKCk7CiB9CiAjZWxzZQogdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0
OjpzZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmggYi9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oCmluZGV4IDM0ODA0NDkuLjAz
ODhjMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNs
aWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50
UXQuaApAQCAtNDQsMTMgKzQ0LDEzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKLWNsYXNzIFRl
eHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQgeworY2xhc3MgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50
UXQgewogcHVibGljOgotICAgIFRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQoUVdlYkZyYW1lKiwg
R3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQo
KTsKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnRRdChRV2ViRnJhbWUqLCBHcmFwaGljc0xh
eWVyKik7CisgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50UXQoKTsKICAgICB2
b2lkIHNldFRleHR1cmVNYXBwZXIoY29uc3QgUGFzc093blB0cjxUZXh0dXJlTWFwcGVyPiYpOwog
ICAgIHZvaWQgc3luY1Jvb3RMYXllcigpOwotICAgIFRleHR1cmVNYXBwZXJOb2RlKiByb290Tm9k
ZSgpOworICAgIFRleHR1cmVNYXBwZXJMYXllciogcm9vdExheWVyKCk7CiAKIHByaXZhdGU6CiAg
ICAgUVdlYkZyYW1lKiBtX2ZyYW1lOwpAQCAtMTE0LDcgKzExNCw3IEBAIHB1YmxpYzoKIAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAg
IFRpbWVyPFBhZ2VDbGllbnRRV2lkZ2V0PiBzeW5jVGltZXI7Ci0gICAgT3duUHRyPFRleHR1cmVN
YXBwZXJOb2RlQ2xpZW50UXQ+IHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50OworICAgIE93blB0cjxU
ZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnRRdD4gVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50OwogI2Vu
ZGlmCiB9OwogCkBAIC0yMjMsNyArMjIzLDcgQEAgcHVibGljOgogCiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogI2lmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICBPd25QdHI8VGV4
dHVyZU1hcHBlck5vZGVDbGllbnRRdD4gdGV4dHVyZU1hcHBlck5vZGVDbGllbnQ7CisgICAgT3du
UHRyPFRleHR1cmVNYXBwZXJMYXllckNsaWVudFF0PiBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQ7
CiAjZWxzZQogICAgIFFXZWFrUG9pbnRlcjxRR3JhcGhpY3NPYmplY3Q+IHJvb3RHcmFwaGljc0xh
eWVyOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNmYzNTI1ZS4uMDY0NWE1YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIwIEBACisyMDEyLTAyLTE0ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2Vu
dGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1RleG1hcF0gRGl2aWRlIFRleHR1cmVNYXBwZXJO
b2RlLmNwcCB0byAzIGZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzY2NjAKKworICAgICAgICBSZW5hbWUgVGV4dHVyZU1hcHBlck5vZGUgdG8g
VGV4dHVyZU1hcHBlckxheWVyLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVMYXllcik6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9HcmFwaGljc0NvbnRl
eHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmdldEJhY2tpbmdTdG9y
ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJlUm9vdExheWVy
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJnZUdMUmVzb3VyY2Vz
KToKKwogMjAxMi0wMi0xMyAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEu
Y29tPgogCiAgICAgICAgIFtRdF1bVGV4bWFwXSBSZWZhY3RvciBiYWNraW5nLXN0b3JlIGNvZGUg
aW4gVGV4dHVyZU1hcHBlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9M
YXllclRyZWVIb3N0UHJveHlRdC5jcHAKaW5kZXggNGM0ZjYxOC4uMTA5YWZmYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3Bw
CkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUu
aCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTm9kZS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJMYXllci5oIgogI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKICNpbmNsdWRlICJXZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCkBAIC0xNDksOCAr
MTQ5LDggQEAgY2xhc3MgU2V0Um9vdExheWVyTWVzc2FnZQogUGFzc093blB0cjxHcmFwaGljc0xh
eWVyPiBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkK
IHsKICAgICBHcmFwaGljc0xheWVyKiBuZXdMYXllciA9IG5ldyBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcih0aGlzKTsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1h
cHBlck5vZGUobmV3TGF5ZXIpOwotICAgIG5vZGUtPnNldFNob3VsZFVwZGF0ZUJhY2tpbmdTdG9y
ZUZyb21MYXllcihmYWxzZSk7CisgICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4
dHVyZU1hcHBlckxheWVyKG5ld0xheWVyKTsKKyAgICBsYXllci0+c2V0U2hvdWxkVXBkYXRlQmFj
a2luZ1N0b3JlRnJvbUxheWVyKGZhbHNlKTsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3TGF5ZXIp
OwogfQogCkBAIC0xNzgsMTIgKzE3OCwxMiBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFp
bnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdAogICAg
IGlmICghY3VycmVudFJvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgVGV4dHVyZU1h
cHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGN1cnJlbnRSb290TGF5ZXIpOwor
ICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihjdXJy
ZW50Um9vdExheWVyKTsKIAotICAgIGlmICghbm9kZSkKKyAgICBpZiAoIWxheWVyKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBub2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5n
ZXQoKSk7CisgICAgbGF5ZXItPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgp
KTsKICAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKICAgICBtX3RleHR1cmVN
YXBwZXItPmJpbmRTdXJmYWNlKDApOwogICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKFRy
YW5zZm9ybWF0aW9uTWF0cml4KCksIGNsaXBSZWN0KTsKQEAgLTE5NCwxMiArMTk0LDEyIEBAIHZv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbWF0CiAgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnN5bmNDb21w
b3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogICAgIH0KIAotICAgIG5vZGUtPnBhaW50
KCk7CisgICAgbGF5ZXItPnBhaW50KCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRDbGlwKCk7
CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOwogCi0gICAgaWYgKG5vZGUtPmRl
c2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpIHsKLSAgICAgICAgbm9kZS0+
c3luY0FuaW1hdGlvbnNSZWN1cnNpdmVseSgpOworICAgIGlmIChsYXllci0+ZGVzY2VuZGFudHNP
clNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkgeworICAgICAgICBsYXllci0+c3luY0FuaW1h
dGlvbnNSZWN1cnNpdmVseSgpOwogICAgICAgICBtX3ZpZXdwb3J0VXBkYXRlVGltZXIuc3RhcnRP
bmVTaG90KDApOwogICAgIH0KIH0KQEAgLTIxMCwxNiArMjEwLDE2IEBAIHZvaWQgTGF5ZXJUcmVl
SG9zdFByb3h5OjpwYWludFRvR3JhcGhpY3NDb250ZXh0KFFQYWludGVyKiBwYWludGVyKQogICAg
ICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoKTsKICAgICBBU1NF
UlQobV90ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6
U29mdHdhcmVNb2RlKTsKICAgICBzeW5jUmVtb3RlQ29udGVudCgpOwotICAgIFRleHR1cmVNYXBw
ZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShyb290TGF5ZXIoKSk7CisgICAgVGV4
dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKHJvb3RMYXllcigp
KTsKIAotICAgIGlmICghbm9kZSkKKyAgICBpZiAoIWxheWVyKQogICAgICAgICByZXR1cm47CiAK
ICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KHBhaW50ZXIpOwogICAgIG1fdGV4
dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KCZncmFwaGljc0NvbnRleHQpOwogICAgIG1f
dGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+Ymlu
ZFN1cmZhY2UoMCk7Ci0gICAgbm9kZS0+cGFpbnQoKTsKKyAgICBsYXllci0+cGFpbnQoKTsKICAg
ICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5z
ZXRHcmFwaGljc0NvbnRleHQoMCk7CiB9CkBAIC0zNDMsMTEgKzM0MywxMSBAQCB2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6c2V0Um9vdExheWVySUQoV2ViTGF5ZXJJRCBsYXllcklEKQogUGFzc1Jl
ZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gTGF5ZXJUcmVlSG9zdFByb3h5OjpnZXRCYWNraW5nU3Rv
cmUoV2ViTGF5ZXJJRCBpZCkKIHsKICAgICBlbnN1cmVMYXllcihpZCk7Ci0gICAgVGV4dHVyZU1h
cHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGxheWVyQnlJRChpZCkpOwotICAg
IFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gc3RhdGljX2Nhc3Q8TGF5
ZXJCYWNraW5nU3RvcmUqPihub2RlLT5iYWNraW5nU3RvcmUoKS5nZXQoKSk7CisgICAgVGV4dHVy
ZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGxheWVyQnlJRChpZCkp
OworICAgIFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gc3RhdGljX2Nh
c3Q8TGF5ZXJCYWNraW5nU3RvcmUqPihsYXllci0+YmFja2luZ1N0b3JlKCkuZ2V0KCkpOwogICAg
IGlmICghYmFja2luZ1N0b3JlKSB7CiAgICAgICAgIGJhY2tpbmdTdG9yZSA9IExheWVyQmFja2lu
Z1N0b3JlOjpjcmVhdGUoKTsKLSAgICAgICAgbm9kZS0+c2V0QmFja2luZ1N0b3JlKGJhY2tpbmdT
dG9yZS5nZXQoKSk7CisgICAgICAgIGxheWVyLT5zZXRCYWNraW5nU3RvcmUoYmFja2luZ1N0b3Jl
LmdldCgpKTsKICAgICB9CiAgICAgQVNTRVJUKGJhY2tpbmdTdG9yZSk7CiAgICAgcmV0dXJuIGJh
Y2tpbmdTdG9yZTsKQEAgLTQyMCw3ICs0MjAsNyBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
ZW5zdXJlUm9vdExheWVyKCkKICAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShGbG9hdFNpemUoMS4w
LCAxLjApKTsKICAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKICAgICAgICAgbV90ZXh0dXJlTWFw
cGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwot
ICAgIHRvVGV4dHVyZU1hcHBlck5vZGUobV9yb290TGF5ZXIuZ2V0KCkpLT5zZXRUZXh0dXJlTWFw
cGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CisgICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9y
b290TGF5ZXIuZ2V0KCkpLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7
CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jUmVtb3RlQ29udGVudCgpCkBAIC01
NzcsMTAgKzU3NywxMCBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRl
bnRzUmVjdEFuZFNjYWxlKGNvbnN0IEludFJlY3QmIHJlY3QsIGZsbwogCiB2b2lkIExheWVyVHJl
ZUhvc3RQcm94eTo6cHVyZ2VHTFJlc291cmNlcygpCiB7Ci0gICAgVGV4dHVyZU1hcHBlck5vZGUq
IG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2RlKHJvb3RMYXllcigpKTsKKyAgICBUZXh0dXJlTWFw
cGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIocm9vdExheWVyKCkpOwogCi0g
ICAgaWYgKG5vZGUpCi0gICAgICAgIG5vZGUtPmNsZWFyQmFja2luZ1N0b3Jlc1JlY3Vyc2l2ZSgp
OworICAgIGlmIChsYXllcikKKyAgICAgICAgbGF5ZXItPmNsZWFyQmFja2luZ1N0b3Jlc1JlY3Vy
c2l2ZSgpOwogCiAgICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuY2xlYXIoKTsKICAgICBt
X3RleHR1cmVNYXBwZXIuY2xlYXIoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126967</attachid>
            <date>2012-02-14 05:44:50 -0800</date>
            <delta_ts>2012-02-14 23:25:10 -0800</delta_ts>
            <desc>Patch 2: Rename TextureMapperNode to TextureMapperLayer</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>55648</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlYWM2NzMwLi5lYWQxZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTItMDItMTQgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KKworICAgICAgICBbVGV4bWFwXSBEaXZpZGUgVGV4dHVyZU1hcHBlck5vZGUuY3BwIHRvIDMg
ZmlsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NjY2MAorCisgICAgICAgIFJlbmFtZSBUZXh0dXJlTWFwcGVyTm9kZSB0byBUZXh0dXJlTWFwcGVy
TGF5ZXIuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwOiAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyTm9kZS5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJMYXllci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmguCisKIDIwMTItMDItMDkgIE5v
J2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRd
W1RleG1hcF0gUmVmYWN0b3IgYmFja2luZy1zdG9yZSBjb2RlIGluIFRleHR1cmVNYXBwZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGQwYmQxYTAuLjg0YWE1ZjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNTc1MSw4ICs1NzUxLDggQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZS5oIFwKICAgICAgICAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgXAogICAgICAgICBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdl
QnVmZmVyLmggXAotICAgICAgICBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIFwKLSAgICAgICAgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmggXAorICAgICAgICBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcCBc
CisgICAgICAgIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyTGF5ZXIuaCBcCiAgICAgICAgIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCiB3ZWJjb3JlZ3RrX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1cmVNYXBw
ZXJDYWlyby5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggNWFjMGRlOC4uMWQ5YzZjZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCkBAIC0zOTU3LDcgKzM5NTcsNyBAQCBjb250YWlucyhDT05GSUcsIHRleG1hcCkgewogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIFwK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3Rv
cmUuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1h
Z2VCdWZmZXIuaCBcCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyTm9kZS5oIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJMYXllci5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyLmgKIAogICAgIFNPVVJDRVMgKz0gXApAQCAtMzk2Niw3ICszOTY2LDcg
QEAgY29udGFpbnMoQ09ORklHLCB0ZXhtYXApIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwIFwKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgXAotICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIFwKKyAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAgXAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuY3BwCiAKICAgICAhd2luMzItKjpjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbCkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCmluZGV4IDY1ZjU1OGYuLjM1OWQ3YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1
OTAsOCArMzU5MCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaCcsCi0gICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmNwcCcs
Ci0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2Rl
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
TGF5ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckxheWVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAppbmRleCBkMmQzNzlkLi5i
ZDBkYTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKQEAg
LTIwLDEzICsyMCwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmgiCiAKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTm9kZS5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihH
cmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiAgICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkK
LSAgICAsIG1fbm9kZShhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlck5vZGUoKSkpCisgICAgLCBt
X2xheWVyKGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyTGF5ZXIoKSkpCiAgICAgLCBtX2NoYW5n
ZU1hc2soMCkKICAgICAsIG1fbmVlZHNEaXNwbGF5KGZhbHNlKQogICAgICwgbV9jb250ZW50c0xh
eWVyKDApCkBAIC0zNCw3ICszNCw3IEBAIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllCiB7CiB9CiAK
LXZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6Om5vdGlmeUNoYW5nZShUZXh0dXJlTWFw
cGVyTm9kZTo6Q2hhbmdlTWFzayBjaGFuZ2VNYXNrKQordm9pZCBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6Q2hhbmdlTWFzayBjaGFu
Z2VNYXNrKQogewogICAgIG1fY2hhbmdlTWFzayB8PSBjaGFuZ2VNYXNrOwogICAgIGlmICghY2xp
ZW50KCkpCkBAIC02NCw3ICs2NCw3IEBAIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjp+R3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIoKQogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKICAgICBtX25lZWRzRGlzcGxheSA9IHRydWU7Ci0gICAg
bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpEaXNwbGF5Q2hhbmdlKTsKKyAgICBub3Rp
ZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpEaXNwbGF5Q2hhbmdlKTsKIH0KIAogLyogXHJl
aW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkKIHsKICAgICBpZiAobV9p
bWFnZSkKICAgICAgICAgc2V0Q29udGVudHNUb0ltYWdlKG1faW1hZ2UuZ2V0KCkpOwotICAgIG5v
dGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6RGlzcGxheUNoYW5nZSk7CisgICAgbm90aWZ5
Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6RGlzcGxheUNoYW5nZSk7CiB9CiAKIC8qIFxyZWlt
cCAoR3JhcGhpY3NMYXllci5oKQpAQCAtODMsMTQgKzgzLDE0IEBAIHZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiAgICAgaWYgKG1fbmVlZHNEaXNwbGF5KQogICAgICAgICByZXR1cm47CiAgICAgbV9uZWVk
c0Rpc3BsYXlSZWN0LnVuaXRlKHJlY3QpOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
Tm9kZTo6RGlzcGxheUNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXll
cjo6RGlzcGxheUNoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQogKi8K
IHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFBhcmVudChHcmFwaGljc0xheWVy
KiBsYXllcikKIHsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlBhcmVudENo
YW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6UGFyZW50Q2hhbmdl
KTsKICAgICBHcmFwaGljc0xheWVyOjpzZXRQYXJlbnQobGF5ZXIpOwogfQogCkBAIC05OCw3ICs5
OCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFBhcmVudChHcmFwaGlj
c0xheWVyKiBsYXllcikKICovCiBib29sIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRD
aGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKIHsKLSAgICBu
b3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKKyAgICBub3Rp
ZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpDaGlsZHJlbkNoYW5nZSk7CiAgICAgcmV0dXJu
IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVuKTsKIH0KIApAQCAtMTA2LDcgKzEw
Niw3IEBAIGJvb2wgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENoaWxkcmVuKGNvbnN0
IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkCiAqLwogdm9pZCBHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6YWRkQ2hpbGQoR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7Ci0gICAgbm90aWZ5
Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNoYW5nZSk7CisgICAgbm90aWZ5Q2hh
bmdlKFRleHR1cmVNYXBwZXJMYXllcjo6Q2hpbGRyZW5DaGFuZ2UpOwogICAgIEdyYXBoaWNzTGF5
ZXI6OmFkZENoaWxkKGxheWVyKTsKIH0KIApAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogdm9p
ZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5
ZXIqIGxheWVyLCBpbnQgaW5kZXgpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdElu
ZGV4KGxheWVyLCBpbmRleCk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpD
aGlsZHJlbkNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6Q2hp
bGRyZW5DaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTEyMyw3
ICsxMjMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEF0SW5k
ZXgoR3JhcGhpY3NMYXllciogbGF5ZXIsIGludCBpbmRleAogdm9pZCBHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NM
YXllciogc2libGluZykKIHsKICAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShsYXll
ciwgc2libGluZyk7Ci0gICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRy
ZW5DaGFuZ2UpOworICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpDaGlsZHJl
bkNoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAtMTMxLDcgKzEz
MSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkQWJvdmUoR3Jh
cGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5CiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOjphZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVy
KiBzaWJsaW5nKQogewogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cobGF5ZXIsIHNp
YmxpbmcpOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFu
Z2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkNoaWxkcmVuQ2hhbmdl
KTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0xMzksNyArMTM5LDcgQEAg
dm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xh
eWVyKiBsYXllciwgR3JhcGhpY3NMYXkKIGJvb2wgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OnJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3
Q2hpbGQpCiB7CiAgICAgaWYgKEdyYXBoaWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChvbGRDaGlsZCwg
bmV3Q2hpbGQpKSB7Ci0gICAgICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hp
bGRyZW5DaGFuZ2UpOworICAgICAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpD
aGlsZHJlbkNoYW5nZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6cmVtb3ZlRnJvbVBhcmVudCgpCiB7CiAgICAgaWYgKCFwYXJlbnQoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6UGFyZW50Q2hhbmdlKTsK
KyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpQYXJlbnRDaGFuZ2UpOwogICAg
IEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQoKTsKIH0KIApAQCAtMTYyLDcgKzE2Miw3
IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE1hc2tMYXllcihHcmFwaGlj
c0xheWVyKiB2YWx1ZSkKICAgICBpZiAodmFsdWUgPT0gbWFza0xheWVyKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIodmFsdWUpOwotICAgIG5vdGlm
eUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6TWFza0xheWVyQ2hhbmdlKTsKKyAgICBub3RpZnlD
aGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpNYXNrTGF5ZXJDaGFuZ2UpOwogfQogCiAKQEAgLTE3
Myw3ICsxNzMsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRSZXBsaWNh
dGVkQnlMYXllcihHcmFwaGljc0xheWVyKiB2YWx1ZSkKICAgICBpZiAodmFsdWUgPT0gcmVwbGlj
YUxheWVyKCkpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNh
dGVkQnlMYXllcih2YWx1ZSk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpS
ZXBsaWNhTGF5ZXJDaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6
OlJlcGxpY2FMYXllckNoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpA
QCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFBv
c2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHZhbHVlKQogICAgIGlmICh2YWx1ZSA9PSBwb3NpdGlv
bigpKQogICAgICAgICByZXR1cm47CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24odmFs
dWUpOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6UG9zaXRpb25DaGFuZ2Up
OworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OlBvc2l0aW9uQ2hhbmdlKTsK
IH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0xOTMsNyArMTkzLDcgQEAgdm9p
ZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQ
b2ludDNEJiB2YWx1ZSkKICAgICBpZiAodmFsdWUgPT0gYW5jaG9yUG9pbnQoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KHZhbHVlKTsKLSAgICBu
b3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkFuY2hvclBvaW50Q2hhbmdlKTsKKyAgICBu
b3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpBbmNob3JQb2ludENoYW5nZSk7CiB9CiAK
IC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiB2YWx1ZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0U2l6ZSh2YWx1ZSk7Ci0g
ICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpTaXplQ2hhbmdlKTsKKyAgICBub3Rp
ZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpTaXplQ2hhbmdlKTsKIH0KIAogLyogXHJlaW1w
IChHcmFwaGljc0xheWVyLmgpCkBAIC0yMTUsNyArMjE1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2
YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3Jt
KHZhbHVlKTsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlRyYW5zZm9ybUNo
YW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6VHJhbnNmb3JtQ2hh
bmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0yMjUsNyArMjI1LDcg
QEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgKICAgICBpZiAodmFsdWUgPT0gY2hpbGRyZW5UcmFu
c2Zvcm0oKSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVu
VHJhbnNmb3JtKHZhbHVlKTsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNo
aWxkcmVuVHJhbnNmb3JtQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxh
eWVyOjpDaGlsZHJlblRyYW5zZm9ybUNoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NM
YXllci5oKQpAQCAtMjM1LDcgKzIzNSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXI6OnNldFByZXNlcnZlczNEKGJvb2wgdmFsdWUpCiAgICAgaWYgKHZhbHVlID09IHByZXNlcnZl
czNEKCkpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMz
RCh2YWx1ZSk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpQcmVzZXJ2ZXMz
RENoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6UHJlc2VydmVz
M0RDaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTI0NSw3ICsy
NDUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRNYXNrc1RvQm91bmRz
KGJvb2wgdmFsdWUpCiAgICAgaWYgKHZhbHVlID09IG1hc2tzVG9Cb3VuZHMoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHModmFsdWUpOwotICAg
IG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6TWFza3NUb0JvdW5kc0NoYW5nZSk7Cisg
ICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6TWFza3NUb0JvdW5kc0NoYW5nZSk7
CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAtMjU0LDcgKzI1NCw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldERyYXdzQ29udGVudChib29sIHZhbHVl
KQogewogICAgIGlmICh2YWx1ZSA9PSBkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6RHJhd3NDb250ZW50Q2hhbmdlKTsK
KyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpEcmF3c0NvbnRlbnRDaGFuZ2Up
OwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudCh2YWx1ZSk7CiB9CiAKQEAgLTI2
NCw3ICsyNjQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50
c09wYXF1ZShib29sIHZhbHVlKQogewogICAgIGlmICh2YWx1ZSA9PSBjb250ZW50c09wYXF1ZSgp
KQogICAgICAgICByZXR1cm47Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpD
b250ZW50c09wYXF1ZUNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXll
cjo6Q29udGVudHNPcGFxdWVDaGFuZ2UpOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
T3BhcXVlKHZhbHVlKTsKIH0KIApAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIHZhbHVlKQogICAgIGlm
ICh2YWx1ZSA9PSBiYWNrZmFjZVZpc2liaWxpdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEdy
YXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eSh2YWx1ZSk7Ci0gICAgbm90aWZ5Q2hh
bmdlKFRleHR1cmVNYXBwZXJOb2RlOjpCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2UpOworICAgIG5v
dGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkJhY2tmYWNlVmlzaWJpbGl0eUNoYW5nZSk7
CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAtMjg1LDcgKzI4NSw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE9wYWNpdHkoZmxvYXQgdmFsdWUpCiAg
ICAgaWYgKHZhbHVlID09IG9wYWNpdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNz
TGF5ZXI6OnNldE9wYWNpdHkodmFsdWUpOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
Tm9kZTo6T3BhY2l0eUNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXll
cjo6T3BhY2l0eUNoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAt
Mjk1LDcgKzI5NSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRl
bnRzUmVjdChjb25zdCBJbnRSZWN0JiB2YWx1ZSkKICAgICBpZiAodmFsdWUgPT0gY29udGVudHNS
ZWN0KCkpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Jl
Y3QodmFsdWUpOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudHNS
ZWN0Q2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpDb250ZW50
c1JlY3RDaGFuZ2UpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTMxNCw3
ICszMTQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1Rv
SW1hZ2UoSW1hZ2UqIGltYWdlKQogICAgICAgICBtX2NvbXBvc2l0ZWRJbWFnZSA9IDA7CiAKICAg
ICBzZXRDb250ZW50c1RvTWVkaWEobV9jb21wb3NpdGVkSW1hZ2UuZ2V0KCkpOwotICAgIG5vdGlm
eUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudENoYW5nZSk7CisgICAgbm90aWZ5Q2hh
bmdlKFRleHR1cmVNYXBwZXJMYXllcjo6Q29udGVudENoYW5nZSk7CiAgICAgR3JhcGhpY3NMYXll
cjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKIH0KIApAQCAtMzI0LDcgKzMyNCw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9NZWRpYShUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllcioKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXll
cjo6c2V0Q29udGVudHNUb01lZGlhKG1lZGlhKTsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlck5vZGU6OkNvbnRlbnRDaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
TGF5ZXI6OkNvbnRlbnRDaGFuZ2UpOwogICAgIG1fY29udGVudHNMYXllciA9IG1lZGlhOwogfQog
CkBAIC0zMzIsMTQgKzMzMiwxNCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpz
ZXRDb250ZW50c1RvTWVkaWEoVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqCiAqLwogdm9pZCBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5
ZXJPbmx5KCkKIHsKLSAgICBtX25vZGUtPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRoaXMpOworICAg
IG1fbGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRoaXMpOwogfQogCiAvKiBccmVpbXAgKEdy
YXBoaWNzTGF5ZXIuaCkKICovCiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5j
Q29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKQogewotICAgIG1fbm9kZS0+c3luY0Nv
bXBvc2l0aW5nU3RhdGUodGhpcywgVGV4dHVyZU1hcHBlck5vZGU6OlRyYXZlcnNlRGVzY2VuZGFu
dHMpOworICAgIG1fbGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRoaXMsIFRleHR1cmVNYXBw
ZXJMYXllcjo6VHJhdmVyc2VEZXNjZW5kYW50cyk7CiB9CiAKIGJvb2wgR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI6OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVM
aXN0LCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW0sIGNvbnN0
IFN0cmluZyYga2V5ZnJhbWVzTmFtZSwgZG91YmxlIHRpbWVPZmZzZXQpCkBAIC0zNTYsNyArMzU2
LDcgQEAgYm9vbCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9uKGNvbnN0
IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QKICAgICAgICAgbGlzdHNNYXRjaCA9IHZhbGlk
YXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZUxpc3QsIGhhc0JpZ1JvdGF0aW9uKSA+PSAwOwog
CiAgICAgbV9hbmltYXRpb25zLmFkZChrZXlmcmFtZXNOYW1lLCBUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uKHZhbHVlTGlzdCwgYm94U2l6ZSwgYW5pbSwgdGltZU9mZnNldCwgbGlzdHNNYXRjaCkpOwot
ICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6QW5pbWF0aW9uQ2hhbmdlKTsKKyAg
ICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpBbmltYXRpb25DaGFuZ2UpOwogICAg
IG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKaW5kZXggZTBhMGY3
MS4uMjY4OWQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKQEAg
LTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NMYXllckNsaWVudC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlck5vZGUuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIuaCIKIAogI2lmIEVO
QUJMRShXRUJHTCkKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgpAQCAtMzIsMTIgKzMy
LDEyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgVGV4dHVyZU1hcHBlck5vZGU7
CitjbGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXI7CiBjbGFzcyBCaXRtYXBUZXh0dXJlOwogY2xhc3Mg
VGV4dHVyZU1hcHBlcjsKIAogY2xhc3MgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIgOiBwdWJs
aWMgR3JhcGhpY3NMYXllciB7Ci0gICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJOb2RlOwor
ICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXI7CiAKIHB1YmxpYzoKICAgICBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcihHcmFwaGljc0xheWVyQ2xpZW50Kik7CkBAIC03Nyw3ICs3
Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5h
bWUpOwogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KIAotICAgIHZvaWQgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpD
aGFuZ2VNYXNrIGNoYW5nZU1hc2spOworICAgIHZvaWQgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBw
ZXJMYXllcjo6Q2hhbmdlTWFzayBjaGFuZ2VNYXNrKTsKICAgICBpbmxpbmUgaW50IGNoYW5nZU1h
c2soKSBjb25zdCB7IHJldHVybiBtX2NoYW5nZU1hc2s7IH0KICAgICB2b2lkIGRpZFN5bmNocm9u
aXplKCk7CiAKQEAgLTg1LDEzICs4NSwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBh
dXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYsIGRvdWJsZSk7CiAgICAgdmlydHVhbCB2b2lkIHJl
bW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmKTsKIAotICAgIFRleHR1cmVNYXBwZXJOb2RlKiBu
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlLmdldCgpOyB9CisgICAgVGV4dHVyZU1hcHBlckxh
eWVyKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXIuZ2V0KCk7IH0KICAgICBUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllciogY29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGVudHNMYXllcjsgfQogICAgIGJvb2wgbmVlZHNEaXNwbGF5KCkgY29uc3QgeyByZXR1cm4gbV9u
ZWVkc0Rpc3BsYXk7IH0KICAgICBJbnRSZWN0IG5lZWRzRGlzcGxheVJlY3QoKSBjb25zdCB7IHJl
dHVybiBlbmNsb3NpbmdJbnRSZWN0KG1fbmVlZHNEaXNwbGF5UmVjdCk7IH0KIAogcHJpdmF0ZToK
LSAgICBPd25QdHI8VGV4dHVyZU1hcHBlck5vZGU+IG1fbm9kZTsKKyAgICBPd25QdHI8VGV4dHVy
ZU1hcHBlckxheWVyPiBtX2xheWVyOwogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0
b3JlPiBtX2NvbXBvc2l0ZWRJbWFnZTsKICAgICBSZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CiAgICAg
Ym9vbCBtX3N5bmNRdWV1ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCmluZGV4IGRmMmE1
ZmYuLmRjMTYyMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCkBAIC0xOCw3ICsxOCw3
IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJO
b2RlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCiAKICNpbmNsdWRlICJzdGRp
by5oIgogCkBAIC0zMCwxMiArMzAsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1UZXh0
dXJlTWFwcGVyTm9kZSogdG9UZXh0dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVyKiBsYXllcikK
K1RleHR1cmVNYXBwZXJMYXllciogdG9UZXh0dXJlTWFwcGVyTGF5ZXIoR3JhcGhpY3NMYXllciog
bGF5ZXIpCiB7Ci0gICAgcmV0dXJuIGxheWVyID8gdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cihsYXllciktPm5vZGUoKSA6IDA7CisgICAgcmV0dXJuIGxheWVyID8gdG9HcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcihsYXllciktPmxheWVyKCkgOiAwOwogfQogCi1UZXh0dXJlTWFwcGVyTm9k
ZSogVGV4dHVyZU1hcHBlck5vZGU6OnJvb3RMYXllcigpCitUZXh0dXJlTWFwcGVyTGF5ZXIqIFRl
eHR1cmVNYXBwZXJMYXllcjo6cm9vdExheWVyKCkKIHsKICAgICBpZiAobV9lZmZlY3RUYXJnZXQp
CiAgICAgICAgIHJldHVybiBtX2VmZmVjdFRhcmdldC0+cm9vdExheWVyKCk7CkBAIC00NCwxMiAr
NDQsMTIgQEAgVGV4dHVyZU1hcHBlck5vZGUqIFRleHR1cmVNYXBwZXJOb2RlOjpyb290TGF5ZXIo
KQogICAgIHJldHVybiB0aGlzOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzZXRUcmFu
c2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKK3ZvaWQgVGV4dHVyZU1h
cHBlckxheWVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCkKIHsKICAgICBtX3RyYW5zZm9ybS5zZXRMb2NhbFRyYW5zZm9ybShtYXRyaXgpOwogfQogCi12
b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjbGVhckJhY2tpbmdTdG9yZXNSZWN1cnNpdmUoKQordm9p
ZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OmNsZWFyQmFja2luZ1N0b3Jlc1JlY3Vyc2l2ZSgpCiB7CiAg
ICAgbV9iYWNraW5nU3RvcmUuY2xlYXIoKTsKICAgICBtX2NvbnRlbnRzTGF5ZXIgPSAwOwpAQCAt
NTksNyArNTksNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpjbGVhckJhY2tpbmdTdG9yZXNS
ZWN1cnNpdmUoKQogICAgICAgICBtX3N0YXRlLm1hc2tMYXllci0+Y2xlYXJCYWNraW5nU3RvcmVz
UmVjdXJzaXZlKCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OmNvbXB1dGVUcmFuc2Zv
cm1zUmVjdXJzaXZlKCkKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpjb21wdXRlVHJhbnNmb3Jt
c1JlY3Vyc2l2ZSgpCiB7CiAgICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkgJiYgbV9zdGF0ZS5tYXNr
c1RvQm91bmRzKQogICAgICAgICByZXR1cm47CkBAIC04OSw3ICs4OSw3IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlck5vZGU6OmNvbXB1dGVUcmFuc2Zvcm1zUmVjdXJzaXZlKCkKICAgICAgICAgc29ydEJ5
Wk9yZGVyKG1fY2hpbGRyZW4sIDAsIG1fY2hpbGRyZW4uc2l6ZSgpKTsKIH0KIAotdm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6dXBkYXRlQmFja2luZ1N0b3JlKFRleHR1cmVNYXBwZXIqIHRleHR1cmVN
YXBwZXIsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnVw
ZGF0ZUJhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xh
eWVyKiBsYXllcikKIHsKICAgICBpZiAoIWxheWVyIHx8ICF0ZXh0dXJlTWFwcGVyKQogICAgICAg
ICByZXR1cm47CkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6dXBk
YXRlQmFja2luZ1N0b3JlKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEdyYXBoaWMKICAg
ICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmUqPihtX2JhY2tpbmdT
dG9yZS5nZXQoKSktPnVwZGF0ZUNvbnRlbnRzKHRleHR1cmVNYXBwZXIsIGltYWdlLmdldCgpLCBt
X3NpemUsIGRpcnR5UmVjdCk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50KCkK
K3ZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpwYWludCgpCiB7CiAgICAgY29tcHV0ZVRyYW5zZm9y
bXNSZWN1cnNpdmUoKTsKIApAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5v
ZGU6OnBhaW50KCkKICAgICBwYWludFJlY3Vyc2l2ZShvcHRpb25zKTsKIH0KIAotdm9pZCBUZXh0
dXJlTWFwcGVyTm9kZTo6cGFpbnRTZWxmKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMm
IG9wdGlvbnMpCit2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6cGFpbnRTZWxmKGNvbnN0IFRleHR1
cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgLy8gV2UgYXBwbHkgdGhlIGZv
bGxvd2luZyB0cmFuc2Zvcm0gdG8gY29tcGVuc2F0ZSBmb3IgcGFpbnRpbmcgaW50byBhIHN1cmZh
Y2UsIGFuZCB0aGVuIGFwcGx5IHRoZSBvZmZzZXQgc28gdGhhdCB0aGUgcGFpbnRpbmcgZml0cyBp
biB0aGUgdGFyZ2V0IHJlY3QuCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0K
QEAgLTE1OSwxOSArMTU5LDE5IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZihj
b25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvcHRpb25zKQogICAgICAgICBtX2NvbnRl
bnRzTGF5ZXItPnBhaW50VG9UZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlciwgbV9z
dGF0ZS5jb250ZW50c1JlY3QsIHRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzay5nZXQoKSk7CiB9CiAK
LWludCBUZXh0dXJlTWFwcGVyTm9kZTo6Y29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKGNvbnN0
IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCitpbnQgVGV4dHVyZU1hcHBlckxheWVyOjpjb21wYXJl
R3JhcGhpY3NMYXllcnNaVmFsdWUoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikKIHsKLSAg
ICBUZXh0dXJlTWFwcGVyTm9kZSogY29uc3QqIG5vZGVBID0gc3RhdGljX2Nhc3Q8VGV4dHVyZU1h
cHBlck5vZGUqIGNvbnN0Kj4oYSk7Ci0gICAgVGV4dHVyZU1hcHBlck5vZGUqIGNvbnN0KiBub2Rl
QiA9IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJOb2RlKiBjb25zdCo+KGIpOwotICAgIHJldHVy
biBpbnQoKCgqbm9kZUEpLT5tX2NlbnRlclogLSAoKm5vZGVCKS0+bV9jZW50ZXJaKSAqIDEwMDAp
OworICAgIFRleHR1cmVNYXBwZXJMYXllciogY29uc3QqIGxheWVyQSA9IHN0YXRpY19jYXN0PFRl
eHR1cmVNYXBwZXJMYXllciogY29uc3QqPihhKTsKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGNv
bnN0KiBsYXllckIgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyTGF5ZXIqIGNvbnN0Kj4oYik7
CisgICAgcmV0dXJuIGludCgoKCpsYXllckEpLT5tX2NlbnRlclogLSAoKmxheWVyQiktPm1fY2Vu
dGVyWikgKiAxMDAwKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c29ydEJ5Wk9yZGVy
KFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSogPiYgYXJyYXksIGludCBmaXJzdCwgaW50IGxhc3Qp
Cit2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6c29ydEJ5Wk9yZGVyKFZlY3RvcjxUZXh0dXJlTWFw
cGVyTGF5ZXIqID4mIGFycmF5LCBpbnQgZmlyc3QsIGludCBsYXN0KQogewotICAgIHFzb3J0KGFy
cmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBzaXplb2YoVGV4dHVyZU1hcHBlck5vZGUqKSwgY29t
cGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKTsKKyAgICBxc29ydChhcnJheS5kYXRhKCksIGFycmF5
LnNpemUoKSwgc2l6ZW9mKFRleHR1cmVNYXBwZXJMYXllciopLCBjb21wYXJlR3JhcGhpY3NMYXll
cnNaVmFsdWUpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFNlbGZBbmRDaGls
ZHJlbihjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvcHRpb25zKQordm9pZCBUZXh0
dXJlTWFwcGVyTGF5ZXI6OnBhaW50U2VsZkFuZENoaWxkcmVuKGNvbnN0IFRleHR1cmVNYXBwZXJQ
YWludE9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgYm9vbCBoYXNDbGlwID0gbV9zdGF0ZS5tYXNr
c1RvQm91bmRzICYmICFtX2NoaWxkcmVuLmlzRW1wdHkoKTsKICAgICBpZiAoaGFzQ2xpcCkKQEAg
LTE4NiwxMyArMTg2LDEzIEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50U2VsZkFuZENo
aWxkcmVuKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wCiAgICAgICAgIG9wdGlv
bnMudGV4dHVyZU1hcHBlci0+ZW5kQ2xpcCgpOwogfQogCi1JbnRSZWN0IFRleHR1cmVNYXBwZXJO
b2RlOjppbnRlcm1lZGlhdGVTdXJmYWNlUmVjdCgpCitJbnRSZWN0IFRleHR1cmVNYXBwZXJMYXll
cjo6aW50ZXJtZWRpYXRlU3VyZmFjZVJlY3QoKQogewogICAgIC8vIEZJWE1FOiBBZGQgYW4gaW52
ZXJzZSB0cmFuc2Zvcm0gdG8gTGF5ZXJUcmFuc2Zvcm0uCiAgICAgcmV0dXJuIGludGVybWVkaWF0
ZVN1cmZhY2VSZWN0KG1fdHJhbnNmb3JtLmNvbWJpbmVkKCkuaW52ZXJzZSgpKTsKIH0KIAotSW50
UmVjdCBUZXh0dXJlTWFwcGVyTm9kZTo6aW50ZXJtZWRpYXRlU3VyZmFjZVJlY3QoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKK0ludFJlY3QgVGV4dHVyZU1hcHBlckxheWVyOjpp
bnRlcm1lZGlhdGVTdXJmYWNlUmVjdChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4
KQogewogICAgIEludFJlY3QgcmVjdDsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsb2NhbFRy
YW5zZm9ybSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KG1hdHJpeCkubXVsdGlwbHkobV90cmFuc2Zv
cm0uY29tYmluZWQoKSk7CkBAIC0yMDgsNyArMjA4LDcgQEAgSW50UmVjdCBUZXh0dXJlTWFwcGVy
Tm9kZTo6aW50ZXJtZWRpYXRlU3VyZmFjZVJlY3QoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG0KICAgICByZXR1cm4gcmVjdDsKIH0KIAotYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6c2hvdWxk
UGFpbnRUb0ludGVybWVkaWF0ZVN1cmZhY2UoKSBjb25zdAorYm9vbCBUZXh0dXJlTWFwcGVyTGF5
ZXI6OnNob3VsZFBhaW50VG9JbnRlcm1lZGlhdGVTdXJmYWNlKCkgY29uc3QKIHsKICAgICBib29s
IGhhc09wYWNpdHkgPSBtX29wYWNpdHkgPCAwLjk5OwogICAgIGJvb2wgaGFzQ2hpbGRyZW4gPSAh
bV9jaGlsZHJlbi5pc0VtcHR5KCk7CkBAIC0yMzMsNyArMjMzLDcgQEAgYm9vbCBUZXh0dXJlTWFw
cGVyTm9kZTo6c2hvdWxkUGFpbnRUb0ludGVybWVkaWF0ZVN1cmZhY2UoKSBjb25zdAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6aXNWaXNpYmxlKCkgY29u
c3QKK2Jvb2wgVGV4dHVyZU1hcHBlckxheWVyOjppc1Zpc2libGUoKSBjb25zdAogewogICAgIGlm
IChtX3NpemUuaXNFbXB0eSgpICYmIChtX3N0YXRlLm1hc2tzVG9Cb3VuZHMgfHwgbV9zdGF0ZS5t
YXNrTGF5ZXIgfHwgbV9jaGlsZHJlbi5pc0VtcHR5KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0yNDIsNyArMjQyLDcgQEAgYm9vbCBUZXh0dXJlTWFwcGVyTm9kZTo6aXNWaXNpYmxlKCkg
Y29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6cGFp
bnRTZWxmQW5kQ2hpbGRyZW5XaXRoUmVwbGljYShjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRp
b25zJiBvcHRpb25zKQordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnBhaW50U2VsZkFuZENoaWxk
cmVuV2l0aFJlcGxpY2EoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYgb3B0aW9ucykK
IHsKICAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpIHsKICAgICAgICAgVGV4dHVyZU1hcHBl
clBhaW50T3B0aW9ucyByZXBsaWNhT3B0aW9ucyhvcHRpb25zKTsKQEAgLTI2MCw3ICsyNjAsNyBA
QCB2b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFNlbGZBbmRDaGlsZHJlbldpdGhSZXBsaWNh
KGNvbnN0IFRleHR1cmVNYXBwZXJQYWludAogICAgIHBhaW50U2VsZkFuZENoaWxkcmVuKG9wdGlv
bnMpOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFJlY3Vyc2l2ZShjb25zdCBU
ZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJiBvcHRpb25zKQordm9pZCBUZXh0dXJlTWFwcGVyTGF5
ZXI6OnBhaW50UmVjdXJzaXZlKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlv
bnMpCiB7CiAgICAgaWYgKCFpc1Zpc2libGUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzA1LDcg
KzMwNSw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnBhaW50UmVjdXJzaXZlKGNvbnN0IFRl
eHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgb3B0aW9ucy50ZXh0dXJlTWFw
cGVyLT5kcmF3VGV4dHVyZSgqc3VyZmFjZS5nZXQoKSwgc3VyZmFjZVJlY3QsIHRhcmdldFRyYW5z
Zm9ybSwgb3BhY2l0eSwgbWFza1RleHR1cmUuZ2V0KCkpOwogfQogCi1UZXh0dXJlTWFwcGVyTm9k
ZTo6flRleHR1cmVNYXBwZXJOb2RlKCkKK1RleHR1cmVNYXBwZXJMYXllcjo6flRleHR1cmVNYXBw
ZXJMYXllcigpCiB7CiAgICAgZm9yIChpbnQgaSA9IG1fY2hpbGRyZW4uc2l6ZSgpIC0gMTsgaSA+
PSAwOyAtLWkpCiAgICAgICAgIG1fY2hpbGRyZW5baV0tPm1fcGFyZW50ID0gMDsKQEAgLTMxNCwx
MiArMzE0LDEyIEBAIFRleHR1cmVNYXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5vZGUoKQogICAg
ICAgICBtX3BhcmVudC0+bV9jaGlsZHJlbi5yZW1vdmUobV9wYXJlbnQtPm1fY2hpbGRyZW4uZmlu
ZCh0aGlzKSk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0
YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBpbnQgb3B0aW9u
cykKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgaW50IG9wdGlvbnMpCiB7CiAgICAg
c3luY0NvbXBvc2l0aW5nU3RhdGUoZ3JhcGhpY3NMYXllciwgcm9vdExheWVyKCktPm1fdGV4dHVy
ZU1hcHBlciwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21w
b3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXll
ciwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVy
OjpzeW5jQ29tcG9zaXRpbmdTdGF0ZVNlbGYoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdy
YXBoaWNzTGF5ZXIsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCiB7CiAgICAgaW50IGNo
YW5nZU1hc2sgPSBncmFwaGljc0xheWVyLT5jaGFuZ2VNYXNrKCk7CiAKQEAgLTMyNywxNSArMzI3
LDE1IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChjaGFuZ2VNYXNrICYgUGFyZW50Q2hhbmdlKSB7Ci0gICAgICAgIFRleHR1cmVNYXBwZXJOb2Rl
KiBuZXdQYXJlbnQgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnBhcmVudCgp
KTsKKyAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyKiBuZXdQYXJlbnQgPSB0b1RleHR1cmVNYXBw
ZXJMYXllcihncmFwaGljc0xheWVyLT5wYXJlbnQoKSk7CiAgICAgICAgIGlmIChuZXdQYXJlbnQg
IT0gbV9wYXJlbnQpIHsKLSAgICAgICAgICAgIC8vIFJlbW92ZSBub2RlIGZyb20gY3VycmVudCBm
cm9tIGNoaWxkIGxpc3QgZmlyc3QuCisgICAgICAgICAgICAvLyBSZW1vdmUgbGF5ZXIgZnJvbSBj
dXJyZW50IGZyb20gY2hpbGQgbGlzdCBmaXJzdC4KICAgICAgICAgICAgIGlmIChtX3BhcmVudCkg
ewogICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IG1fcGFyZW50LT5tX2NoaWxkcmVuLmZp
bmQodGhpcyk7CiAgICAgICAgICAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVtb3ZlKGlu
ZGV4KTsKICAgICAgICAgICAgICAgICBtX3BhcmVudCA9IDA7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAvLyBTZXQgbmV3IG5vZGUgcGFyZW50IGFuZCBhZGQgbm9kZSB0byB0aGUgcGFyZW50
cyBjaGlsZCBsaXN0LgorICAgICAgICAgICAgLy8gU2V0IG5ldyBsYXllciBwYXJlbnQgYW5kIGFk
ZCBsYXllciB0byB0aGUgcGFyZW50cyBjaGlsZCBsaXN0LgogICAgICAgICAgICAgaWYgKG5ld1Bh
cmVudCkgewogICAgICAgICAgICAgICAgIG1fcGFyZW50ID0gbmV3UGFyZW50OwogICAgICAgICAg
ICAgICAgIG1fcGFyZW50LT5tX2NoaWxkcmVuLmFwcGVuZCh0aGlzKTsKQEAgLTM0NCwxMyArMzQ0
LDEzIEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhCiAgICAgfQogCiAgICAgaWYgKGNoYW5nZU1h
c2sgJiBDaGlsZHJlbkNoYW5nZSkgewotICAgICAgICAvLyBDbGVhciBjaGlsZHJlbiBwYXJlbnQg
cG9pbnRlciB0byBhdm9pZCB1bnN5bmMgYW5kIGNyYXNoIG9uIG5vZGUgZGVsZXRlLgorICAgICAg
ICAvLyBDbGVhciBjaGlsZHJlbiBwYXJlbnQgcG9pbnRlciB0byBhdm9pZCB1bnN5bmMgYW5kIGNy
YXNoIG9uIGxheWVyIGRlbGV0ZS4KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2No
aWxkcmVuLnNpemUoKTsgaSsrKQogICAgICAgICAgICAgbV9jaGlsZHJlbltpXS0+bV9wYXJlbnQg
PSAwOwogCiAgICAgICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBncmFwaGljc0xheWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBUZXh0dXJlTWFwcGVyTm9kZSogY2hpbGQgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGdy
YXBoaWNzTGF5ZXItPmNoaWxkcmVuKClbaV0pOworICAgICAgICAgICAgVGV4dHVyZU1hcHBlckxh
eWVyKiBjaGlsZCA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVu
KClbaV0pOwogICAgICAgICAgICAgaWYgKCFjaGlsZCkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKQEAgLTM2MSwyMCArMzYx
LDIwIEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogZ3JhCiAgICAgbV9zaXplID0gZ3JhcGhpY3NMYXll
ci0+c2l6ZSgpOwogCiAgICAgaWYgKGNoYW5nZU1hc2sgJiBNYXNrTGF5ZXJDaGFuZ2UpIHsKLSAg
ICAgICBpZiAoVGV4dHVyZU1hcHBlck5vZGUqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShn
cmFwaGljc0xheWVyLT5tYXNrTGF5ZXIoKSkpCisgICAgICAgaWYgKFRleHR1cmVNYXBwZXJMYXll
ciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihncmFwaGljc0xheWVyLT5tYXNrTGF5ZXIo
KSkpCiAgICAgICAgICAgIGxheWVyLT5tX2VmZmVjdFRhcmdldCA9IHRoaXM7CiAgICAgfQogCiAg
ICAgaWYgKGNoYW5nZU1hc2sgJiBSZXBsaWNhTGF5ZXJDaGFuZ2UpIHsKLSAgICAgICBpZiAoVGV4
dHVyZU1hcHBlck5vZGUqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVy
LT5yZXBsaWNhTGF5ZXIoKSkpCisgICAgICAgaWYgKFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIg
PSB0b1RleHR1cmVNYXBwZXJMYXllcihncmFwaGljc0xheWVyLT5yZXBsaWNhTGF5ZXIoKSkpCiAg
ICAgICAgICAgIGxheWVyLT5tX2VmZmVjdFRhcmdldCA9IHRoaXM7CiAgICAgfQogCiAgICAgaWYg
KGNoYW5nZU1hc2sgJiBBbmltYXRpb25DaGFuZ2UpCiAgICAgICAgIG1fYW5pbWF0aW9ucyA9IGdy
YXBoaWNzTGF5ZXItPm1fYW5pbWF0aW9uczsKIAotICAgIG1fc3RhdGUubWFza0xheWVyID0gdG9U
ZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5tYXNrTGF5ZXIoKSk7Ci0gICAgbV9zdGF0
ZS5yZXBsaWNhTGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJOb2RlKGdyYXBoaWNzTGF5ZXItPnJlcGxp
Y2FMYXllcigpKTsKKyAgICBtX3N0YXRlLm1hc2tMYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVy
KGdyYXBoaWNzTGF5ZXItPm1hc2tMYXllcigpKTsKKyAgICBtX3N0YXRlLnJlcGxpY2FMYXllciA9
IHRvVGV4dHVyZU1hcHBlckxheWVyKGdyYXBoaWNzTGF5ZXItPnJlcGxpY2FMYXllcigpKTsKICAg
ICBtX3N0YXRlLnBvcyA9IGdyYXBoaWNzTGF5ZXItPnBvc2l0aW9uKCk7CiAgICAgbV9zdGF0ZS5h
bmNob3JQb2ludCA9IGdyYXBoaWNzTGF5ZXItPmFuY2hvclBvaW50KCk7CiAgICAgbV9zdGF0ZS5z
aXplID0gZ3JhcGhpY3NMYXllci0+c2l6ZSgpOwpAQCAtNDAwLDcgKzQwMCw3IEBAIHZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlciogZ3JhCiAgICAgbV90cmFuc2Zvcm0uc2V0Q2hpbGRyZW5UcmFuc2Zvcm0obV9z
dGF0ZS5jaGlsZHJlblRyYW5zZm9ybSk7CiB9CiAKLWJvb2wgVGV4dHVyZU1hcHBlck5vZGU6OmRl
c2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkgY29uc3QKK2Jvb2wgVGV4dHVy
ZU1hcHBlckxheWVyOjpkZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpIGNv
bnN0CiB7CiAgICAgaWYgKG1fYW5pbWF0aW9ucy5oYXNSdW5uaW5nQW5pbWF0aW9ucygpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQxMyw3ICs0MTMsNyBAQCBib29sIFRleHR1cmVNYXBwZXJO
b2RlOjpkZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpIGNvbnN0CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQW5pbWF0aW9u
cygpCit2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6c3luY0FuaW1hdGlvbnMoKQogewogICAgIG1f
YW5pbWF0aW9ucy5hcHBseSh0aGlzKTsKICAgICBpZiAoIW1fYW5pbWF0aW9ucy5oYXNBY3RpdmVB
bmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pKQpAQCAtNDIy
LDcgKzQyMiw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNBbmltYXRpb25zKCkKICAg
ICAgICAgc2V0T3BhY2l0eShtX3N0YXRlLm9wYWNpdHkpOwogfQogCi12b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpzeW5jQW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCkKK3ZvaWQgVGV4dHVyZU1hcHBlckxh
eWVyOjpzeW5jQW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCkKIHsKICAgICBzeW5jQW5pbWF0aW9ucygp
OwogCkBAIC00MzAsNyArNDMwLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0FuaW1h
dGlvbnNSZWN1cnNpdmVseSgpCiAgICAgICAgIG1fY2hpbGRyZW5baV0tPnN5bmNBbmltYXRpb25z
UmVjdXJzaXZlbHkoKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0
aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIFRleHR1
cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGludCBvcHRpb25zKQordm9pZCBUZXh0dXJlTWFwcGVy
TGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBn
cmFwaGljc0xheWVyLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBpbnQgb3B0aW9ucykK
IHsKICAgICBpZiAoIXRleHR1cmVNYXBwZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTQ2MCwxMCAr
NDYwLDEwIEBAIHZvaWQgVGV4dHVyZU1hcHBlck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlKEdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljCiAgICAgaWYgKGdyYXBoaWNzTGF5ZXIp
IHsKICAgICAgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbiA9IGdyYXBoaWNzTGF5
ZXItPmNoaWxkcmVuKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSBjaGlsZHJlbi5zaXplKCkgLSAx
OyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0
b1RleHR1cmVNYXBwZXJOb2RlKGNoaWxkcmVuW2ldKTsKLSAgICAgICAgICAgIGlmICghbm9kZSkK
KyAgICAgICAgICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJM
YXllcihjaGlsZHJlbltpXSk7CisgICAgICAgICAgICBpZiAoIWxheWVyKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbm9kZS0+c3luY0NvbXBvc2l0aW5nU3RhdGUodG9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihjaGlsZHJlbltpXSksIHRleHR1cmVNYXBwZXIsIG9w
dGlvbnMpOworICAgICAgICAgICAgbGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIoY2hpbGRyZW5baV0pLCB0ZXh0dXJlTWFwcGVyLCBvcHRpb25z
KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBtX2NoaWxk
cmVuLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCmluZGV4
IDEzN2JmMDZhLi4zMDY2NmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCkBAIC0xNyw4ICsx
Nyw4IEBACiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBUZXh0
dXJlTWFwcGVyTm9kZV9oCi0jZGVmaW5lIFRleHR1cmVNYXBwZXJOb2RlX2gKKyNpZm5kZWYgVGV4
dHVyZU1hcHBlckxheWVyX2gKKyNkZWZpbmUgVGV4dHVyZU1hcHBlckxheWVyX2gKIAogI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtMzgsNyAr
MzgsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllcjsKLWNsYXNzIFRleHR1cmVNYXBwZXJOb2RlOworY2xhc3MgVGV4dHVyZU1hcHBlckxh
eWVyOwogY2xhc3MgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI7CiAKIGNsYXNzIFRleHR1cmVN
YXBwZXJQYWludE9wdGlvbnMgewpAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgeyB9CiB9
OwogCi1jbGFzcyBUZXh0dXJlTWFwcGVyTm9kZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyQW5pbWF0
aW9uQ2xpZW50IHsKK2NsYXNzIFRleHR1cmVNYXBwZXJMYXllciA6IHB1YmxpYyBUZXh0dXJlTWFw
cGVyQW5pbWF0aW9uQ2xpZW50IHsKIAogcHVibGljOgogICAgIC8vIFRoaXMgc2V0IG9mIGZsYWdz
IGhlbHAgdXMgZGVmZXIgd2hpY2ggcHJvcGVydGllcyBvZiB0aGUgbGF5ZXIgaGF2ZSBiZWVuCkBA
IC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICAgICAgQ29tcHV0YXRpb25zT25seSA9IDIKICAg
ICB9OwogCi0gICAgVGV4dHVyZU1hcHBlck5vZGUoKQorICAgIFRleHR1cmVNYXBwZXJMYXllcigp
CiAgICAgICAgIDogbV9wYXJlbnQoMCkKICAgICAgICAgLCBtX2VmZmVjdFRhcmdldCgwKQogICAg
ICAgICAsIG1fY29udGVudHNMYXllcigwKQpAQCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAg
ICAgICAgLCBtX3RleHR1cmVNYXBwZXIoMCkKICAgICB7IH0KIAotICAgIHZpcnR1YWwgflRleHR1
cmVNYXBwZXJOb2RlKCk7CisgICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlckxheWVyKCk7CiAKICAg
ICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiwg
aW50IHN5bmNPcHRpb25zID0gMCk7CiAgICAgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlciosIFRleHR1cmVNYXBwZXIqLCBpbnQgc3luY09wdGlvbnMg
PSAwKTsKQEAgLTEyNSw3ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckJhY2tpbmdT
dG9yZXNSZWN1cnNpdmUoKTsKIAogcHJpdmF0ZToKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogcm9v
dExheWVyKCk7CisgICAgVGV4dHVyZU1hcHBlckxheWVyKiByb290TGF5ZXIoKTsKICAgICB2b2lk
IGNvbXB1dGVUcmFuc2Zvcm1zUmVjdXJzaXZlKCk7CiAgICAgdm9pZCBjb21wdXRlT3ZlcmxhcHNJ
Zk5lZWRlZCgpOwogICAgIHZvaWQgY29tcHV0ZVRpbGVzKCk7CkBAIC0xMzgsNyArMTM4LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBl
cik7CiAKICAgICBzdGF0aWMgaW50IGNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZShjb25zdCB2
b2lkKiBhLCBjb25zdCB2b2lkKiBiKTsKLSAgICBzdGF0aWMgdm9pZCBzb3J0QnlaT3JkZXIoVmVj
dG9yPFRleHR1cmVNYXBwZXJOb2RlKiA+JiBhcnJheSwgaW50IGZpcnN0LCBpbnQgbGFzdCk7Cisg
ICAgc3RhdGljIHZvaWQgc29ydEJ5Wk9yZGVyKFZlY3RvcjxUZXh0dXJlTWFwcGVyTGF5ZXIqID4m
IGFycmF5LCBpbnQgZmlyc3QsIGludCBsYXN0KTsKIAogICAgIFBhc3NSZWZQdHI8Qml0bWFwVGV4
dHVyZT4gdGV4dHVyZSgpIHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9iYWNraW5nU3RvcmUt
PnRleHR1cmUoKSA6IDA7IH0KIApAQCAtMTU5LDkgKzE1OSw5IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBtX3NpemUpOwogICAgIH0KIAot
ICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSo+IG1fY2hpbGRyZW47Ci0gICAgVGV4dHVyZU1h
cHBlck5vZGUqIG1fcGFyZW50OwotICAgIFRleHR1cmVNYXBwZXJOb2RlKiBtX2VmZmVjdFRhcmdl
dDsKKyAgICBWZWN0b3I8VGV4dHVyZU1hcHBlckxheWVyKj4gbV9jaGlsZHJlbjsKKyAgICBUZXh0
dXJlTWFwcGVyTGF5ZXIqIG1fcGFyZW50OworICAgIFRleHR1cmVNYXBwZXJMYXllciogbV9lZmZl
Y3RUYXJnZXQ7CiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IG1fYmFja2lu
Z1N0b3JlOwogICAgIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBtX2NvbnRlbnRzTGF5ZXI7
CiAgICAgRmxvYXRTaXplIG1fc2l6ZTsKQEAgLTE4MCw4ICsxODAsOCBAQCBwcml2YXRlOgogICAg
ICAgICBGbG9hdFJlY3QgY29udGVudHNSZWN0OwogICAgICAgICBGbG9hdFJlY3QgbmVlZHNEaXNw
bGF5UmVjdDsKICAgICAgICAgaW50IGRlc2NlbmRhbnRzV2l0aENvbnRlbnQ7Ci0gICAgICAgIFRl
eHR1cmVNYXBwZXJOb2RlKiBtYXNrTGF5ZXI7Ci0gICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBy
ZXBsaWNhTGF5ZXI7CisgICAgICAgIFRleHR1cmVNYXBwZXJMYXllciogbWFza0xheWVyOworICAg
ICAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIHJlcGxpY2FMYXllcjsKICAgICAgICAgYm9vbCBwcmVz
ZXJ2ZXMzRCA6IDE7CiAgICAgICAgIGJvb2wgbWFza3NUb0JvdW5kcyA6IDE7CiAgICAgICAgIGJv
b2wgZHJhd3NDb250ZW50IDogMTsKQEAgLTIxNCw3ICsyMTQsNyBAQCBwcml2YXRlOgogfTsKIAog
Ci1UZXh0dXJlTWFwcGVyTm9kZSogdG9UZXh0dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVyKik7
CitUZXh0dXJlTWFwcGVyTGF5ZXIqIHRvVGV4dHVyZU1hcHBlckxheWVyKEdyYXBoaWNzTGF5ZXIq
KTsKIAogfQotI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJOb2RlX2gKKyNlbmRpZiAvLyBUZXh0dXJl
TWFwcGVyTGF5ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDM4ZjM4NTUuLjA4MTU3NjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0wMi0xNCAgTm8nYW0gUm9zZW50aGFs
ICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFtUZXhtYXBdIERpdmlkZSBU
ZXh0dXJlTWFwcGVyTm9kZS5jcHAgdG8gMyBmaWxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjYwCisKKyAgICAgICAgUmVuYW1lIFRleHR1cmVN
YXBwZXJOb2RlIHRvIFRleHR1cmVNYXBwZXJMYXllci4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdDb250ZXh0Lmg6CisgICAgICAgIChBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4
dCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHRHTC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjplbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlbmRlckxheWVyc1RvV2luZG93KToKKyAgICAg
ICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmF0dGFjaFJvb3RHcmFw
aGljc0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQ6OnN5bmNMYXllcnNUaW1lb3V0KToKKwogMjAxMi0wMi0wOSAgWmFuIERvYmVyc2VrICA8emFu
ZG9iZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAgIFtHVEtdIEFkZCBEUlQgc3VwcG9ydCBmb3Ig
bW9kYWwgZGlhbG9ncwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgKaW5kZXggNDJhNWYy
NC4uNzc4Mzk2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oCkBAIC0yOCw3ICsy
OCw3IEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogI2lmIFVTRShURVhUVVJFX01B
UFBFUl9HTCkKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTm9kZS5oIgorI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJMYXllci5oIgogI2luY2x1ZGUgIldpbmRvd0dMQ29udGV4dC5oIgogI2VuZGlmCiAK
QEAgLTcyLDcgKzcyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVJZk5lY2Vzc2Fy
eSgpOwogCiAgICAgYm9vbCBtX2luaXRpYWxpemVkOwotICAgIFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJOb2RlKiBtX3Jvb3RUZXh0dXJlTWFwcGVyTm9kZTsKKyAgICBXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTGF5ZXIqIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllcjsKICAgICBPd25QdHI8V2ViQ29yZTo6
V2luZG93R0xDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVN
YXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHRHTC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dEdMLmNwcAppbmRleCA5YmZhM2QwLi44OGNkNmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dEdM
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dEdMLmNwcApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlckdMLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyTGF5ZXIuaCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5o
IgogI2luY2x1ZGUgPEdML2dsLmg+CiAjaW5jbHVkZSA8Y2Fpcm8uaD4KQEAgLTQzLDcgKzQzLDcg
QEAgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0KFdlYktpdFdlYlZpZXcqIHdlYlYKICAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQogICAg
ICwgbV9zeW5jVGltZXIodGhpcywgJkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzeW5j
TGF5ZXJzVGltZW91dCkKICAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCi0gICAgLCBtX3Jvb3RU
ZXh0dXJlTWFwcGVyTm9kZSgwKQorICAgICwgbV9yb290VGV4dHVyZU1hcHBlckxheWVyKDApCiB7
CiB9CiAKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4
dDo6aW5pdGlhbGl6ZUlmTmVjZXNzYXJ5KCkKIAogYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dDo6ZW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIG1fcm9vdFRleHR1cmVNYXBwZXJOb2Rl
ICYmIG1fdGV4dHVyZU1hcHBlcjsKKyAgICByZXR1cm4gbV9yb290VGV4dHVyZU1hcHBlckxheWVy
ICYmIG1fdGV4dHVyZU1hcHBlcjsKIH0KIAogCkBAIC05MCw3ICs5MCw3IEBAIGJvb2wgQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlbmRlckxheWVyc1RvV2luZG93KGNvbnN0IEludFJl
Y3QmIGNsaXBSZWN0CiAgICAgZ2xWaWV3cG9ydCgwLCAwLCBhbGxvY2F0aW9uLndpZHRoLCBhbGxv
Y2F0aW9uLmhlaWdodCk7CiAKICAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsK
LSAgICBtX3Jvb3RUZXh0dXJlTWFwcGVyTm9kZS0+cGFpbnQoKTsKKyAgICBtX3Jvb3RUZXh0dXJl
TWFwcGVyTGF5ZXItPnBhaW50KCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygp
OwogCiAgICAgbV9jb250ZXh0LT5maW5pc2hEcmF3aW5nKCk7CkBAIC0xMDEsMTIgKzEwMSwxMiBA
QCB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjphdHRhY2hSb290R3JhcGhpY3NM
YXllcihHcmFwaGljc0xheWVyKiBncmFwaAogewogICAgIGlmICghZ3JhcGhpY3NMYXllcikgewog
ICAgICAgICBtX3Jvb3RHcmFwaGljc0xheWVyLmNsZWFyKCk7Ci0gICAgICAgIG1fcm9vdFRleHR1
cmVNYXBwZXJOb2RlID0gMDsKKyAgICAgICAgbV9yb290VGV4dHVyZU1hcHBlckxheWVyID0gMDsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXIgPSBHcmFw
aGljc0xheWVyOjpjcmVhdGUodGhpcyk7Ci0gICAgbV9yb290VGV4dHVyZU1hcHBlck5vZGUgPSB0
b1RleHR1cmVNYXBwZXJOb2RlKG1fcm9vdEdyYXBoaWNzTGF5ZXIuZ2V0KCkpOworICAgIG1fcm9v
dFRleHR1cmVNYXBwZXJMYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdEdyYXBoaWNz
TGF5ZXIuZ2V0KCkpOwogICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPmFkZENoaWxkKGdyYXBoaWNz
TGF5ZXIpOwogICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsK
ICAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKQEAgLTEy
Nyw3ICsxMjcsNyBAQCB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjphdHRhY2hS
b290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBncmFwaAogICAgIGdsVmlld3BvcnQoMCwg
MCwgYWxsb2NhdGlvbi53aWR0aCwgYWxsb2NhdGlvbi5oZWlnaHQpOwogCiAgICAgbV90ZXh0dXJl
TWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKLSAgICBtX3Jvb3RUZXh0dXJlTWFw
cGVyTm9kZS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIG1f
cm9vdFRleHR1cmVNYXBwZXJMYXllci0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIu
Z2V0KCkpOwogICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9y
VGhpc0xheWVyT25seSgpOwogfQogCkBAIC0xNzMsNyArMTczLDcgQEAgdm9pZCBBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dDo6c3luY0xheWVyc1RpbWVvdXQoVGltZXI8QWNjZWxlcmF0ZWRD
b21wb3NpdGkKIAogICAgIHJlbmRlckxheWVyc1RvV2luZG93KEludFJlY3QoKSk7CiAKLSAgICBp
ZiAodG9UZXh0dXJlTWFwcGVyTm9kZShtX3Jvb3RHcmFwaGljc0xheWVyLmdldCgpKS0+ZGVzY2Vu
ZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKKyAgICBpZiAodG9UZXh0dXJlTWFw
cGVyTGF5ZXIobV9yb290R3JhcGhpY3NMYXllci5nZXQoKSktPmRlc2NlbmRhbnRzT3JTZWxmSGF2
ZVJ1bm5pbmdBbmltYXRpb25zKCkpCiAgICAgICAgIG1fc3luY1RpbWVyLnN0YXJ0T25lU2hvdCgx
LjAgLyA2MC4wKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZy
YW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5jcHAKaW5kZXggMzliOWQy
MC4uMjExZjBlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCkBAIC0xMDQsNyArMTA0
LDcgQEAKICNlbmRpZgogI2lmIFVTRShURVhUVVJFX01BUFBFUikKICNpbmNsdWRlICJ0ZXhtYXAv
VGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIgor
I2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaCIKICNlbmRpZgogI2luY2x1ZGUg
Ind0Zi9IYXNoTWFwLmgiCiAjaW5jbHVkZSA8UU11bHRpTWFwPgpAQCAtMzMxLDcgKzMzMSw3IEBA
IHZvaWQgUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyRnJvbVRpbGVkQmFja2luZ1N0b3JlKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCiB2b2lkIFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckNv
bXBvc2l0ZWRMYXllcnMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBj
bGlwKQogewotICAgIGlmICghcm9vdFRleHR1cmVNYXBwZXJOb2RlIHx8ICF0ZXh0dXJlTWFwcGVy
KQorICAgIGlmICghcm9vdFRleHR1cmVNYXBwZXJMYXllciB8fCAhdGV4dHVyZU1hcHBlcikKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KGNv
bnRleHQpOwpAQCAtMzQ1LDExICszNDUsMTEgQEAgdm9pZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5k
ZXJDb21wb3NpdGVkTGF5ZXJzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW4KICAg
ICAgICAgICAgICAgICAwLCAwLCAxLCAwLAogICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5tMzEo
KSwgdHJhbnNmb3JtLm0zMigpLCAwLCB0cmFuc2Zvcm0ubTMzKCkKICAgICAgICAgICAgICAgICAp
OwotICAgIHJvb3RUZXh0dXJlTWFwcGVyTm9kZS0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7Ci0gICAg
cm9vdFRleHR1cmVNYXBwZXJOb2RlLT5zZXRPcGFjaXR5KHBhaW50ZXItPm9wYWNpdHkoKSk7Cisg
ICAgcm9vdFRleHR1cmVNYXBwZXJMYXllci0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CisgICAgcm9v
dFRleHR1cmVNYXBwZXJMYXllci0+c2V0T3BhY2l0eShwYWludGVyLT5vcGFjaXR5KCkpOwogICAg
IHRleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKICAgICB0ZXh0dXJlTWFwcGVyLT5iZWdp
bkNsaXAobWF0cml4LCBjbGlwKTsKLSAgICByb290VGV4dHVyZU1hcHBlck5vZGUtPnBhaW50KCk7
CisgICAgcm9vdFRleHR1cmVNYXBwZXJMYXllci0+cGFpbnQoKTsKICAgICB0ZXh0dXJlTWFwcGVy
LT5lbmRDbGlwKCk7CiAgICAgdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5oIGIvU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYmZyYW1lLmgKaW5kZXggMzVmY2U0Yi4uZmYxNTc3NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmgKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYmZyYW1lLmgKQEAgLTYwLDcgKzYwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIFdpZGdldFByaXZhdGU7CiAgICAgY2xhc3MgRnJhbWVMb2FkZXJDbGllbnRRdDsKICAgICBj
bGFzcyBDaHJvbWVDbGllbnRRdDsKLSAgICBjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0
OworICAgIGNsYXNzIFRleHR1cmVNYXBwZXJMYXllckNsaWVudFF0OwogfQogY2xhc3MgUVdlYkZy
YW1lRGF0YTsKIGNsYXNzIFFXZWJIaXRUZXN0UmVzdWx0UHJpdmF0ZTsKQEAgLTIzNCw3ICsyMzQs
NyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpXaWRnZXRQcml2YXRlOwog
ICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OwogICAgIGZyaWVu
ZCBjbGFzcyBXZWJDb3JlOjpDaHJvbWVDbGllbnRRdDsKLSAgICBmcmllbmQgY2xhc3MgV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdDsKKyAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50UXQ7CiAgICAgUVdlYkZyYW1lUHJpdmF0ZSAqZDsKICAg
ICBRX1BSSVZBVEVfU0xPVChkLCB2b2lkIF9xX29yaWVudGF0aW9uQ2hhbmdlZCgpKQogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmggYi9Tb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2ViZnJhbWVfcC5oCmluZGV4IDFkYmE2YTUuLjRhYjdiOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZV9wLmgKKysrIGIvU291cmNlL1dlYktp
dC9xdC9BcGkvcXdlYmZyYW1lX3AuaApAQCAtNDksNyArNDksNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgRnJhbWVWaWV3OwogICAgIGNsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVu
dDsKICAgICBjbGFzcyBTY3JvbGxiYXI7Ci0gICAgY2xhc3MgVGV4dHVyZU1hcHBlck5vZGU7Cisg
ICAgY2xhc3MgVGV4dHVyZU1hcHBlckxheWVyOwogfQogY2xhc3MgUVdlYlBhZ2U7CiAKQEAgLTg1
LDcgKzg1LDcgQEAgcHVibGljOgogICAgICAgICAsIG1hcmdpbldpZHRoKC0xKQogICAgICAgICAs
IG1hcmdpbkhlaWdodCgtMSkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKLSAgICAgICAgLCByb290VGV4dHVyZU1hcHBlck5vZGUoMCkKKyAg
ICAgICAgLCByb290VGV4dHVyZU1hcHBlckxheWVyKDApCiAjZW5kaWYKICAgICAgICAge30KICAg
ICB2b2lkIGluaXQoUVdlYkZyYW1lKiBxZnJhbWUsIFFXZWJGcmFtZURhdGEqIGZyYW1lRGF0YSk7
CkBAIC0xMjUsNyArMTI1LDcgQEAgcHVibGljOgogICAgIGludCBtYXJnaW5XaWR0aDsKICAgICBp
bnQgbWFyZ2luSGVpZ2h0OwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNF
KFRFWFRVUkVfTUFQUEVSKQotICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJOb2RlKiByb290VGV4
dHVyZU1hcHBlck5vZGU7CisgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiByb290VGV4
dHVyZU1hcHBlckxheWVyOwogICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiB0ZXh0
dXJlTWFwcGVyOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggMTY0NjQzOS4uN2E5NzA3MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMi0wMi0xNCAgTm8nYW0gUm9zZW50
aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFtUZXhtYXBdIERpdmlk
ZSBUZXh0dXJlTWFwcGVyTm9kZS5jcHAgdG8gMyBmaWxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoKKyAgICAgICAg
KFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMpOgorICAgICAgICAqIEFw
aS9xd2ViZnJhbWUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIEFwaS9xd2ViZnJh
bWVfcC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChRV2ViRnJhbWVQcml2YXRlOjpR
V2ViRnJhbWVQcml2YXRlKToKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGUpOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyTGF5ZXJDbGllbnRRdDo6VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50UXQpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50UXQ6OnNldFRleHR1cmVNYXBw
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50UXQ6On5UZXh0
dXJlTWFwcGVyTGF5ZXJDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVy
TGF5ZXJDbGllbnRRdDo6c3luY1Jvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyTGF5ZXJDbGllbnRRdDo6cm9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VD
bGllbnRRV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpQ
YWdlQ2xpZW50UVdpZGdldDo6c3luY0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ2xp
ZW50UUdyYXBoaWNzV2lkZ2V0OjpzeW5jTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VD
bGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaDoKKyAgICAgICAgKFRleHR1cmVNYXBwZXJMYXll
ckNsaWVudFF0KToKKyAgICAgICAgKFBhZ2VDbGllbnRRV2lkZ2V0KToKKyAgICAgICAgKFBhZ2VD
bGllbnRRR3JhcGhpY3NXaWRnZXQpOgorCiAyMDEyLTAyLTEyICBIYWppbWUgTW9ycml0YSAgPG1v
cnJpdGFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFBhZ2Ugc2hvdWxkIGhhdmUgbGVzcyBpbnRy
dXNpdmUgd2F5IHRvIGFzc29jaWF0ZSBBUEkgaW1wbGVtZW50YXRpb24gb2JqZWN0cy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcAppbmRleCA0
NWRjZmJiLi5mM2EyN2I0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L1BhZ2VDbGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9QYWdlQ2xpZW50UXQuY3BwCkBAIC0yOSw1NCArMjksNTQgQEAKIAogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuaCIKKyNpbmNs
dWRlICJ0ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVIpCi1UZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0OjpUZXh0dXJlTWFwcGVyTm9kZUNs
aWVudFF0KFFXZWJGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQorVGV4dHVyZU1h
cHBlckxheWVyQ2xpZW50UXQ6OlRleHR1cmVNYXBwZXJMYXllckNsaWVudFF0KFFXZWJGcmFtZSog
ZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAs
IG1fcm9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllcjo6Y3JlYXRlKDApKQogewotICAgIG1f
ZnJhbWUtPmQtPnJvb3RUZXh0dXJlTWFwcGVyTm9kZSA9IHJvb3ROb2RlKCk7CisgICAgbV9mcmFt
ZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJMYXllciA9IHJvb3RMYXllcigpOwogICAgIG1fcm9vdEdy
YXBoaWNzTGF5ZXItPmFkZENoaWxkKGxheWVyKTsKICAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5z
ZXREcmF3c0NvbnRlbnQoZmFsc2UpOwogICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldE1hc2tz
VG9Cb3VuZHMoZmFsc2UpOwogICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldFNpemUoSW50U2l6
ZSgxLCAxKSk7CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdDo6c2V0VGV4dHVy
ZU1hcHBlcihjb25zdCBQYXNzT3duUHRyPFRleHR1cmVNYXBwZXI+JiB0ZXh0dXJlTWFwcGVyKQor
dm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnRRdDo6c2V0VGV4dHVyZU1hcHBlcihjb25zdCBQ
YXNzT3duUHRyPFRleHR1cmVNYXBwZXI+JiB0ZXh0dXJlTWFwcGVyKQogewogICAgIG1fZnJhbWUt
PmQtPnRleHR1cmVNYXBwZXIgPSB0ZXh0dXJlTWFwcGVyOwotICAgIG1fZnJhbWUtPmQtPnJvb3RU
ZXh0dXJlTWFwcGVyTm9kZS0+c2V0VGV4dHVyZU1hcHBlcihtX2ZyYW1lLT5kLT50ZXh0dXJlTWFw
cGVyLmdldCgpKTsKKyAgICBtX2ZyYW1lLT5kLT5yb290VGV4dHVyZU1hcHBlckxheWVyLT5zZXRU
ZXh0dXJlTWFwcGVyKG1fZnJhbWUtPmQtPnRleHR1cmVNYXBwZXIuZ2V0KCkpOwogfQogCi1UZXh0
dXJlTWFwcGVyTm9kZUNsaWVudFF0Ojp+VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdCgpCitUZXh0
dXJlTWFwcGVyTGF5ZXJDbGllbnRRdDo6flRleHR1cmVNYXBwZXJMYXllckNsaWVudFF0KCkKIHsK
LSAgICBtX2ZyYW1lLT5kLT5yb290VGV4dHVyZU1hcHBlck5vZGUgPSAwOworICAgIG1fZnJhbWUt
PmQtPnJvb3RUZXh0dXJlTWFwcGVyTGF5ZXIgPSAwOwogfQogCi12b2lkIFRleHR1cmVNYXBwZXJO
b2RlQ2xpZW50UXQ6OnN5bmNSb290TGF5ZXIoKQordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXJDbGll
bnRRdDo6c3luY1Jvb3RMYXllcigpCiB7CiAgICAgbV9yb290R3JhcGhpY3NMYXllci0+c3luY0Nv
bXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiB9CiAKLVRleHR1cmVNYXBwZXJOb2Rl
KiBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0Ojpyb290Tm9kZSgpCitUZXh0dXJlTWFwcGVyTGF5
ZXIqIFRleHR1cmVNYXBwZXJMYXllckNsaWVudFF0Ojpyb290TGF5ZXIoKQogewotICAgIHJldHVy
biB0b1RleHR1cmVNYXBwZXJOb2RlKG1fcm9vdEdyYXBoaWNzTGF5ZXIuZ2V0KCkpOworICAgIHJl
dHVybiB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RHcmFwaGljc0xheWVyLmdldCgpKTsKIH0K
IAogCiB2b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGlj
c0xheWVyKiBsYXllcikKIHsKICAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgdGV4dHVyZU1hcHBl
ck5vZGVDbGllbnQgPSBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdChwYWdl
LT5tYWluRnJhbWUoKSwgbGF5ZXIpKTsKLSAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQt
PnNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCkpOwotICAgICAgICB0ZXh0
dXJlTWFwcGVyTm9kZUNsaWVudC0+c3luY1Jvb3RMYXllcigpOworICAgICAgICBUZXh0dXJlTWFw
cGVyTGF5ZXJDbGllbnQgPSBhZG9wdFB0cihuZXcgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50UXQo
cGFnZS0+bWFpbkZyYW1lKCksIGxheWVyKSk7CisgICAgICAgIFRleHR1cmVNYXBwZXJMYXllckNs
aWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyOjpjcmVhdGUoKSk7CisgICAgICAg
IFRleHR1cmVNYXBwZXJMYXllckNsaWVudC0+c3luY1Jvb3RMYXllcigpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LmNsZWFyKCk7CisgICAgVGV4
dHVyZU1hcHBlckxheWVyQ2xpZW50LmNsZWFyKCk7CiB9CiAKIHZvaWQgUGFnZUNsaWVudFFXaWRn
ZXQ6Om1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKQpAQCAtODgsMTIgKzg4LDEyIEBAIHZv
aWQgUGFnZUNsaWVudFFXaWRnZXQ6Om1hcmtGb3JTeW5jKGJvb2wgc2NoZWR1bGVTeW5jKQogCiB2
b2lkIFBhZ2VDbGllbnRRV2lkZ2V0OjpzeW5jTGF5ZXJzKFRpbWVyPFBhZ2VDbGllbnRRV2lkZ2V0
PiopCiB7Ci0gICAgaWYgKHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50KQotICAgICAgICB0ZXh0dXJl
TWFwcGVyTm9kZUNsaWVudC0+c3luY1Jvb3RMYXllcigpOworICAgIGlmIChUZXh0dXJlTWFwcGVy
TGF5ZXJDbGllbnQpCisgICAgICAgIFRleHR1cmVNYXBwZXJMYXllckNsaWVudC0+c3luY1Jvb3RM
YXllcigpOwogICAgIFFXZWJGcmFtZVByaXZhdGU6OmNvcmUocGFnZS0+bWFpbkZyYW1lKCkpLT52
aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7Ci0gICAgaWYg
KCF0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCkKKyAgICBpZiAoIVRleHR1cmVNYXBwZXJMYXllckNs
aWVudCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICh0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+
cm9vdE5vZGUoKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSAmJiAh
c3luY1RpbWVyLmlzQWN0aXZlKCkpCisgICAgaWYgKFRleHR1cmVNYXBwZXJMYXllckNsaWVudC0+
cm9vdExheWVyKCktPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkgJiYg
IXN5bmNUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBzeW5jVGltZXIuc3RhcnRPbmVTaG90KDEu
MCAvIDYwLjApOwogICAgIHVwZGF0ZSh2aWV3LT5yZWN0KCkpOwogfQpAQCAtMjM5LDE3ICsyMzks
MTcgQEAgdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpjcmVhdGVPckRlbGV0ZU92ZXJs
YXkoKQogdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzeW5jTGF5ZXJzKCkKIHsKICNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgaWYgKHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50KQot
ICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c3luY1Jvb3RMYXllcigpOworICAgIGlm
IChUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQpCisgICAgICAgIFRleHR1cmVNYXBwZXJMYXllckNs
aWVudC0+c3luY1Jvb3RMYXllcigpOwogI2VuZGlmCiAKICAgICBRV2ViRnJhbWVQcml2YXRlOjpj
b3JlKHBhZ2UtPm1haW5GcmFtZSgpKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1
ZGluZ1N1YmZyYW1lcygpOwogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQotICAgIGlmICghdGV4
dHVyZU1hcHBlck5vZGVDbGllbnQpCisgICAgaWYgKCFUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICh0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+cm9v
dE5vZGUoKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSAmJiAhc3lu
Y1RpbWVyLmlzQWN0aXZlKCkpCisgICAgaWYgKFRleHR1cmVNYXBwZXJMYXllckNsaWVudC0+cm9v
dExheWVyKCktPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkgJiYgIXN5
bmNUaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBzeW5jVGltZXIuc3RhcnRPbmVTaG90KDEuMCAv
IDYwLjApOwogICAgIHVwZGF0ZSh2aWV3LT5ib3VuZGluZ1JlY3QoKS50b0FsaWduZWRSZWN0KCkp
OwogI2VuZGlmCkBAIC0yNTksMTggKzI1OSwxOCBAQCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NX
aWRnZXQ6OnN5bmNMYXllcnMoKQogdm9pZCBQYWdlQ2xpZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRS
b290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBpZiAobGF5ZXIp
IHsKLSAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQgPSBhZG9wdFB0cihuZXcgVGV4dHVy
ZU1hcHBlck5vZGVDbGllbnRRdChwYWdlLT5tYWluRnJhbWUoKSwgbGF5ZXIpKTsKKyAgICAgICAg
VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50ID0gYWRvcHRQdHIobmV3IFRleHR1cmVNYXBwZXJMYXll
ckNsaWVudFF0KHBhZ2UtPm1haW5GcmFtZSgpLCBsYXllcikpOwogI2lmIFVTRShURVhUVVJFX01B
UFBFUl9HTCkKICAgICAgICAgUUdyYXBoaWNzVmlldyogZ3JhcGhpY3NWaWV3ID0gdmlldy0+c2Nl
bmUoKS0+dmlld3MoKVswXTsKICAgICAgICAgaWYgKGdyYXBoaWNzVmlldyAmJiBncmFwaGljc1Zp
ZXctPnZpZXdwb3J0KCkgJiYgZ3JhcGhpY3NWaWV3LT52aWV3cG9ydCgpLT5pbmhlcml0cygiUUdM
V2lkZ2V0IikpIHsKLSAgICAgICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zZXRUZXh0
dXJlTWFwcGVyKFRleHR1cmVNYXBwZXI6OmNyZWF0ZShUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2Rl
KSk7CisgICAgICAgICAgICBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQtPnNldFRleHR1cmVNYXBw
ZXIoVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIHRleHR1cmVNYXBw
ZXJOb2RlQ2xpZW50LT5zZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXI6OmNyZWF0ZSgpKTsK
KyAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50LT5zZXRUZXh0dXJlTWFwcGVyKFRleHR1
cmVNYXBwZXI6OmNyZWF0ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICB0ZXh0dXJl
TWFwcGVyTm9kZUNsaWVudC5jbGVhcigpOworICAgIFRleHR1cmVNYXBwZXJMYXllckNsaWVudC5j
bGVhcigpOwogfQogI2Vsc2UKIHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c2V0Um9v
dEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5oIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaAppbmRleCAzNDgwNDQ5Li4wMzg4YzIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmgKQEAg
LTQ0LDEzICs0NCwxMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi1jbGFzcyBUZXh0dXJlTWFw
cGVyTm9kZUNsaWVudFF0IHsKK2NsYXNzIFRleHR1cmVNYXBwZXJMYXllckNsaWVudFF0IHsKIHB1
YmxpYzoKLSAgICBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0KFFXZWJGcmFtZSosIEdyYXBoaWNz
TGF5ZXIqKTsKLSAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0KCk7CisgICAg
VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50UXQoUVdlYkZyYW1lKiwgR3JhcGhpY3NMYXllciopOwor
ICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJMYXllckNsaWVudFF0KCk7CiAgICAgdm9pZCBzZXRU
ZXh0dXJlTWFwcGVyKGNvbnN0IFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4mKTsKICAgICB2b2lk
IHN5bmNSb290TGF5ZXIoKTsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogcm9vdE5vZGUoKTsKKyAg
ICBUZXh0dXJlTWFwcGVyTGF5ZXIqIHJvb3RMYXllcigpOwogCiBwcml2YXRlOgogICAgIFFXZWJG
cmFtZSogbV9mcmFtZTsKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKICAgICBUaW1lcjxQ
YWdlQ2xpZW50UVdpZGdldD4gc3luY1RpbWVyOwotICAgIE93blB0cjxUZXh0dXJlTWFwcGVyTm9k
ZUNsaWVudFF0PiB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudDsKKyAgICBPd25QdHI8VGV4dHVyZU1h
cHBlckxheWVyQ2xpZW50UXQ+IFRleHR1cmVNYXBwZXJMYXllckNsaWVudDsKICNlbmRpZgogfTsK
IApAQCAtMjIzLDcgKzIyMyw3IEBAIHB1YmxpYzoKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgT3duUHRyPFRleHR1cmVNYXBw
ZXJOb2RlQ2xpZW50UXQ+IHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50OworICAgIE93blB0cjxUZXh0
dXJlTWFwcGVyTGF5ZXJDbGllbnRRdD4gVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50OwogI2Vsc2UK
ICAgICBRV2Vha1BvaW50ZXI8UUdyYXBoaWNzT2JqZWN0PiByb290R3JhcGhpY3NMYXllcjsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IDZmMzUyNWUuLjA2NDVhNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMCBAQAorMjAxMi0wMi0xNCAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9r
aWEuY29tPgorCisgICAgICAgIFtUZXhtYXBdIERpdmlkZSBUZXh0dXJlTWFwcGVyTm9kZS5jcHAg
dG8gMyBmaWxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc2NjYwCisKKyAgICAgICAgUmVuYW1lIFRleHR1cmVNYXBwZXJOb2RlIHRvIFRleHR1cmVN
YXBwZXJMYXllci4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlTGF5ZXIpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvR3JhcGhpY3NDb250ZXh0KToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpnZXRCYWNraW5nU3RvcmUpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmVuc3VyZVJvb3RMYXllcik6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VHTFJlc291cmNlcyk6CisKIDIw
MTItMDItMTMgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAog
ICAgICAgICBbUXRdW1RleG1hcF0gUmVmYWN0b3IgYmFja2luZy1zdG9yZSBjb2RlIGluIFRleHR1
cmVNYXBwZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRy
ZWVIb3N0UHJveHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVl
SG9zdFByb3h5UXQuY3BwCmluZGV4IDRjNGY2MTguLjEwOWFmZmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcApAQCAtMzAs
NyArMzAsNyBAQAogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCi0jaW5j
bHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIu
aCIKICNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgiCiAjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgpAQCAtMTQ5LDggKzE0OSw4IEBA
IGNsYXNzIFNldFJvb3RMYXllck1lc3NhZ2UKIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gTGF5
ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVMYXllcihXZWJMYXllcklEIGxheWVySUQpCiB7CiAgICAg
R3JhcGhpY3NMYXllciogbmV3TGF5ZXIgPSBuZXcgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIo
dGhpcyk7Ci0gICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVNYXBwZXJOb2Rl
KG5ld0xheWVyKTsKLSAgICBub2RlLT5zZXRTaG91bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5
ZXIoZmFsc2UpOworICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBw
ZXJMYXllcihuZXdMYXllcik7CisgICAgbGF5ZXItPnNldFNob3VsZFVwZGF0ZUJhY2tpbmdTdG9y
ZUZyb21MYXllcihmYWxzZSk7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ld0xheWVyKTsKIH0KIApA
QCAtMTc4LDEyICsxNzgsMTIgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJy
ZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXQKICAgICBpZiAoIWN1
cnJlbnRSb290TGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRleHR1cmVNYXBwZXJOb2Rl
KiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShjdXJyZW50Um9vdExheWVyKTsKKyAgICBUZXh0
dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIoY3VycmVudFJvb3RM
YXllcik7CiAKLSAgICBpZiAoIW5vZGUpCisgICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbm9kZS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwor
ICAgIGxheWVyLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CiAgICAg
bV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5i
aW5kU3VyZmFjZSgwKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luQ2xpcChUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpLCBjbGlwUmVjdCk7CkBAIC0xOTQsMTIgKzE5NCwxMiBAQCB2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1hdAogICAgICAgICBjdXJyZW50Um9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdT
dGF0ZUZvclRoaXNMYXllck9ubHkoKTsKICAgICB9CiAKLSAgICBub2RlLT5wYWludCgpOworICAg
IGxheWVyLT5wYWludCgpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kQ2xpcCgpOwogICAgIG1f
dGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKIAotICAgIGlmIChub2RlLT5kZXNjZW5kYW50
c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKSB7Ci0gICAgICAgIG5vZGUtPnN5bmNBbmlt
YXRpb25zUmVjdXJzaXZlbHkoKTsKKyAgICBpZiAobGF5ZXItPmRlc2NlbmRhbnRzT3JTZWxmSGF2
ZVJ1bm5pbmdBbmltYXRpb25zKCkpIHsKKyAgICAgICAgbGF5ZXItPnN5bmNBbmltYXRpb25zUmVj
dXJzaXZlbHkoKTsKICAgICAgICAgbV92aWV3cG9ydFVwZGF0ZVRpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKICAgICB9CiB9CkBAIC0yMTAsMTYgKzIxMCwxNiBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6cGFpbnRUb0dyYXBoaWNzQ29udGV4dChRUGFpbnRlciogcGFpbnRlcikKICAgICAgICAgbV90
ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCk7CiAgICAgQVNTRVJUKG1fdGV4
dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6OlNvZnR3YXJl
TW9kZSk7CiAgICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSog
bm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUocm9vdExheWVyKCkpOworICAgIFRleHR1cmVNYXBw
ZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihyb290TGF5ZXIoKSk7CiAKLSAg
ICBpZiAoIW5vZGUpCisgICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3Jh
cGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChwYWludGVyKTsKICAgICBtX3RleHR1cmVNYXBw
ZXItPnNldEdyYXBoaWNzQ29udGV4dCgmZ3JhcGhpY3NDb250ZXh0KTsKICAgICBtX3RleHR1cmVN
YXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNl
KDApOwotICAgIG5vZGUtPnBhaW50KCk7CisgICAgbGF5ZXItPnBhaW50KCk7CiAgICAgbV90ZXh0
dXJlTWFwcGVyLT5lbmRQYWludGluZygpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhp
Y3NDb250ZXh0KDApOwogfQpAQCAtMzQzLDExICszNDMsMTEgQEAgdm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OnNldFJvb3RMYXllcklEKFdlYkxheWVySUQgbGF5ZXJJRCkKIFBhc3NSZWZQdHI8TGF5
ZXJCYWNraW5nU3RvcmU+IExheWVyVHJlZUhvc3RQcm94eTo6Z2V0QmFja2luZ1N0b3JlKFdlYkxh
eWVySUQgaWQpCiB7CiAgICAgZW5zdXJlTGF5ZXIoaWQpOwotICAgIFRleHR1cmVNYXBwZXJOb2Rl
KiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShsYXllckJ5SUQoaWQpKTsKLSAgICBSZWZQdHI8
TGF5ZXJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IHN0YXRpY19jYXN0PExheWVyQmFja2lu
Z1N0b3JlKj4obm9kZS0+YmFja2luZ1N0b3JlKCkuZ2V0KCkpOworICAgIFRleHR1cmVNYXBwZXJM
YXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihsYXllckJ5SUQoaWQpKTsKKyAgICBS
ZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IHN0YXRpY19jYXN0PExheWVy
QmFja2luZ1N0b3JlKj4obGF5ZXItPmJhY2tpbmdTdG9yZSgpLmdldCgpKTsKICAgICBpZiAoIWJh
Y2tpbmdTdG9yZSkgewogICAgICAgICBiYWNraW5nU3RvcmUgPSBMYXllckJhY2tpbmdTdG9yZTo6
Y3JlYXRlKCk7Ci0gICAgICAgIG5vZGUtPnNldEJhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUuZ2V0
KCkpOworICAgICAgICBsYXllci0+c2V0QmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZS5nZXQoKSk7
CiAgICAgfQogICAgIEFTU0VSVChiYWNraW5nU3RvcmUpOwogICAgIHJldHVybiBiYWNraW5nU3Rv
cmU7CkBAIC00MjAsNyArNDIwLDcgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmVuc3VyZVJv
b3RMYXllcigpCiAgICAgbV9yb290TGF5ZXItPnNldFNpemUoRmxvYXRTaXplKDEuMCwgMS4wKSk7
CiAgICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpCiAgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRl
eHR1cmVNYXBwZXI6OmNyZWF0ZShUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKLSAgICB0b1Rl
eHR1cmVNYXBwZXJOb2RlKG1fcm9vdExheWVyLmdldCgpKS0+c2V0VGV4dHVyZU1hcHBlcihtX3Rl
eHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdExheWVy
LmdldCgpKS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwogfQogCiB2
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3luY1JlbW90ZUNvbnRlbnQoKQpAQCAtNTc3LDEwICs1
NzcsMTAgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3RB
bmRTY2FsZShjb25zdCBJbnRSZWN0JiByZWN0LCBmbG8KIAogdm9pZCBMYXllclRyZWVIb3N0UHJv
eHk6OnB1cmdlR0xSZXNvdXJjZXMoKQogewotICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0g
dG9UZXh0dXJlTWFwcGVyTm9kZShyb290TGF5ZXIoKSk7CisgICAgVGV4dHVyZU1hcHBlckxheWVy
KiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKHJvb3RMYXllcigpKTsKIAotICAgIGlmIChu
b2RlKQotICAgICAgICBub2RlLT5jbGVhckJhY2tpbmdTdG9yZXNSZWN1cnNpdmUoKTsKKyAgICBp
ZiAobGF5ZXIpCisgICAgICAgIGxheWVyLT5jbGVhckJhY2tpbmdTdG9yZXNSZWN1cnNpdmUoKTsK
IAogICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmNsZWFyKCk7CiAgICAgbV90ZXh0dXJl
TWFwcGVyLmNsZWFyKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127122</attachid>
            <date>2012-02-14 23:25:29 -0800</date>
            <delta_ts>2012-02-15 00:26:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76660-20120215082527.patch</filename>
            <type>text/plain</type>
            <size>96671</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjE4MWU1N2JlMTI5MTMy
ZjkxMDc0YWI5NDVkNGJiNDNmNGIwYTA3NC4uODg1YzZiOTA2YzAyYmY0NWVhZWJlZGQwNTI3MTRi
ODc3Mjg0Yzc4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDEyLTAyLTE0ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1RleG1h
cF0gRGl2aWRlIFRleHR1cmVNYXBwZXJOb2RlLmNwcCB0byAzIGZpbGVzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NjAKKworICAgICAgICBSZW5h
bWUgVGV4dHVyZU1hcHBlck5vZGUgdG8gVGV4dHVyZU1hcHBlckxheWVyLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6bm90aWZ5
Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpz
ZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFBhcmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q2hpbGRyZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZENo
aWxkQWJvdmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OmFkZENoaWxkQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI6OnJlcGxhY2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TWFza0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0UG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldEFuY2hvclBvaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRUcmFu
c2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNl
dENoaWxkcmVuVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyOjpzZXRQcmVzZXJ2ZXMzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcjo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c09wYXF1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0QmFja2ZhY2VW
aXNpYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
OjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyOjpzZXRDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI6OnNldENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0Q29udGVudHNUb01lZGlhKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZUZv
clRoaXNMYXllck9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRBbmltYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6bGF5ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJO
b2RlLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6dG9UZXh0dXJl
TWFwcGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpyb290
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzZXRUcmFuc2Zv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpjbGVhckJhY2tpbmdT
dG9yZXNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpj
b21wdXRlVHJhbnNmb3Jtc1JlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyTGF5ZXI6OnVwZGF0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyTGF5ZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXll
cjo6cGFpbnRTZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6Y29t
cGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJMYXllcjo6c29ydEJ5Wk9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJM
YXllcjo6cGFpbnRTZWxmQW5kQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckxheWVyOjppbnRlcm1lZGlhdGVTdXJmYWNlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0dXJlTWFwcGVyTGF5ZXI6OnNob3VsZFBhaW50VG9JbnRlcm1lZGlhdGVTdXJmYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6aXNWaXNpYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6cGFpbnRTZWxmQW5kQ2hpbGRyZW5XaXRoUmVw
bGljYSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OnBhaW50UmVjdXJz
aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6flRleHR1cmVNYXBw
ZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OnN5bmNDb21w
b3NpdGluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6c3lu
Y0NvbXBvc2l0aW5nU3RhdGVTZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJM
YXllcjo6ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzeW5jQW5pbWF0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OnN5bmNBbmltYXRpb25zUmVjdXJzaXZlbHkpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyTm9kZS5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChUZXh0dXJlTWFw
cGVyUGFpbnRPcHRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJQYWludE9w
dGlvbnM6OlRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMpOgorICAgICAgICAoVGV4dHVyZU1hcHBl
ckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6VGV4dHVyZU1h
cHBlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldE9wYWNpdHkpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpzZXRUZXh0dXJlTWFwcGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6c2V0U2hvdWxkVXBkYXRlQmFja2lu
Z1N0b3JlRnJvbUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6
c2V0QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6
YmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6dGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6OmxheWVyUmVjdCk6
CisgICAgICAgIChTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXI6
OlN0YXRlOjpTdGF0ZSk6CisKIDIwMTItMDItMTQgIFRha2FzaGkgVG95b3NoaW1hICA8dG95b3No
aW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYlNvY2tldENoYW5uZWwgbWlub3IgcmVmYWN0
b3JpbmcgZm9yIGNvZGUgbWFuYWdlYWJpbGl0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IGFkYzViZmJl
NzJkZjgyNDQzMGY4NjM2Mjk1ZjU4ZDRjYTQyZjEzMzkuLjQzOGFiZDczNmRlZmNjOWJmYjgzMzcx
ZTIzYWM0YjEyYmIwMDBiNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAx
Mi0wMi0xNCAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisg
ICAgICAgIFtUZXhtYXBdIERpdmlkZSBUZXh0dXJlTWFwcGVyTm9kZS5jcHAgdG8gMyBmaWxlcy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjYwCisK
KyAgICAgICAgUmVuYW1lIFRleHR1cmVNYXBwZXJOb2RlIHRvIFRleHR1cmVNYXBwZXJMYXllci4g
ICAgICAgIAorCisgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2Vu
LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQuaDoKKyAgICAgICAgKEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KToKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OkFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQ6OmVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dDo6cmVuZGVyTGF5ZXJzVG9XaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIpOgor
ICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c3luY0xheWVy
c1RpbWVvdXQpOgorCiAyMDEyLTAyLTExICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFu
bkByaW0uY29tPgogCiAgICAgICAgIENvbnZlcnQgc3ZnL2FuaW1hdGlvbnMgdG8gdXNlIFNNSUwg
bWV0aG9kcyBmb3IgZHJpdmluZyB0aGUgdGltZWxpbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggMjNjNWU3
NmMwZTQ2NzljNGMzNmEwNDBlNmU5ZDg1Mzk1NWIxMzQxMS4uYjg3NmZkOTQ2ZTg1Mjk1ZjM5MTJl
YjVjMjc2ODIxNjAwMzYyNGE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAx
Mi0wMi0xNCAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisg
ICAgICAgIFtUZXhtYXBdIERpdmlkZSBUZXh0dXJlTWFwcGVyTm9kZS5jcHAgdG8gMyBmaWxlcy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjYwCisK
KyAgICAgICAgUmVuYW1lIFRleHR1cmVNYXBwZXJOb2RlIHRvIFRleHR1cmVNYXBwZXJMYXllci4K
KworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KKworICAg
ICAgICAqIEFwaS9xd2ViZnJhbWUuY3BwOgorICAgICAgICAoUVdlYkZyYW1lUHJpdmF0ZTo6cmVu
ZGVyQ29tcG9zaXRlZExheWVycyk6CisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogQXBpL3F3ZWJmcmFtZV9wLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFFXZWJGcmFtZVByaXZhdGU6OlFXZWJGcmFtZVByaXZhdGUpOgorICAg
ICAgICAoUVdlYkZyYW1lUHJpdmF0ZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvUGFnZUNs
aWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllckNsaWVudFF0
OjpUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnRRdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyTGF5ZXJDbGllbnRRdDo6c2V0VGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnRRdDo6flRleHR1cmVNYXBwZXJMYXllckNsaWVudFF0
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllckNsaWVudFF0OjpzeW5jUm9v
dExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllckNsaWVudFF0Ojpy
b290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFXaWRnZXQ6OnNldFJvb3RH
cmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRV2lkZ2V0OjpzeW5j
TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDbGllbnRRR3JhcGhpY3NXaWRnZXQ6OnN5
bmNMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6
c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1BhZ2VDbGll
bnRRdC5oOgorICAgICAgICAoVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50UXQpOgorICAgICAgICAo
UGFnZUNsaWVudFFXaWRnZXQpOgorICAgICAgICAoUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldCk6
CisKIDIwMTItMDItMTEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+
CiAKICAgICAgICAgQ29udmVydCBzdmcvYW5pbWF0aW9ucyB0byB1c2UgU01JTCBtZXRob2RzIGZv
ciBkcml2aW5nIHRoZSB0aW1lbGluZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDVjNmQ4Yzc4MTYyNzZmYWUyNmI1
ZWNlYWU1NzM3ZjM3OGRhNTc5NWUuLjQ1YWM0MjliYzcxNjU0MTBmOGU1NTBjZmNjZjk5OTk0NTNj
MmI0YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0wMi0xNCAgTm8nYW0gUm9z
ZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFtUZXhtYXBdIERp
dmlkZSBUZXh0dXJlTWFwcGVyTm9kZS5jcHAgdG8gMyBmaWxlcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjYwCisKKyAgICAgICAgUmVuYW1lIFRl
eHR1cmVNYXBwZXJOb2RlIHRvIFRleHR1cmVNYXBwZXJMYXllci4KKworICAgICAgICBSZXZpZXdl
ZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9x
dC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3RQcm94eTo6Y3JlYXRlTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJv
eHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
SG9zdFByb3h5OjpwYWludFRvR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdFByb3h5OjpnZXRCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UHJveHk6OmVuc3VyZVJvb3RMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RQcm94eTo6cHVyZ2VHTFJlc291cmNlcyk6CisKIDIwMTItMDItMTQgIEFuZGVycyBD
YXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBTd2lwZSBnZXN0dXJlcyBk
b24ndCB3b3JrIGlmIG1haW4gZnJhbWUgaGFzIGEgaG9yaXpvbnRhbCBzY3JvbGxiYXIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGRiODAyMTE0MGQ5MDQ5YjNiNWY0NGE5ODQzMGY2
ZmYwNTIxYmFhYTEuLjk3NDk3NmU4MGUzMTJlYTA2ODhmMmQzYzZjYjQyZTVjYjYyYWViMzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNTc1Myw4ICs1NzUzLDggQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIFwKICAgICAgICAgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgXAogICAg
ICAgICBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckltYWdlQnVmZmVyLmggXAotICAgICAgICBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwIFwKLSAgICAgICAgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmggXAorICAgICAgICBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVy
LmNwcCBcCisgICAgICAgIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyTGF5ZXIuaCBcCiAgICAgICAgIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCiB3ZWJjb3JlZ3RrX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RleHR1
cmVNYXBwZXJDYWlyby5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggNmY3NjliMWRhYzQwNjViOTExOTEx
ZjM4YTY5Mzg2NDk0MTdmNjA1NC4uYjFhMWYxNzM1N2MzOTA0MmVmYWMyN2NiOWJjYjZjNDE1MzNm
ZmMzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zOTU3LDcgKzM5NTcsNyBAQCBjb250YWlucyhDT05GSUcs
IHRleG1hcCkgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckFuaW1hdGlvbi5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJCYWNraW5nU3RvcmUuaCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaCBcCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJMYXllci5oIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgKIAogICAgIFNPVVJDRVMgKz0gXApAQCAt
Mzk2Niw3ICszOTY2LDcgQEAgY29udGFpbnMoQ09ORklHLCB0ZXhtYXApIHsKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJBbmltYXRpb24uY3BwIFwKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3Bw
IFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1
ZmZlci5jcHAgXAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ck5vZGUuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJMYXllci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIuY3BwCiAKICAgICAhd2luMzItKjpjb250YWlucyhRVF9DT05GSUcs
IG9wZW5nbCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGZiMTZhNWZmOWM5NTA5Y2Y5YmJlMGZmNDA4
OWU0MWZmNDAwNTFhMzEuLjA2MjA0NTY2NDhiMmIwYjI3NDViY2FjNDg2NzE2MjAxYjY1OTlkZWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1OTAsOCArMzU5MCw4IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZl
ci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVySW1hZ2VCdWZmZXIuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvSWRlbnRpdHlU
cmFuc2Zvcm1PcGVyYXRpb24uaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyLmNwcAppbmRleCBkMmQzNzlkNWQzYWU3YTAyYmViYWFkNTI0ZDdlOWU0NzM5MTk2YWRjLi5i
ZDBkYTgzZmRlZDIxMDEzYTViZTI2MTVlZGZmOWExYjk3ZDE3NWY1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTIwLDEzICsyMCwxMyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCiAK
LSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTm9kZS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJM
YXllci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGll
bnQpCiAgICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkKLSAgICAsIG1fbm9kZShhZG9wdFB0cihu
ZXcgVGV4dHVyZU1hcHBlck5vZGUoKSkpCisgICAgLCBtX2xheWVyKGFkb3B0UHRyKG5ldyBUZXh0
dXJlTWFwcGVyTGF5ZXIoKSkpCiAgICAgLCBtX2NoYW5nZU1hc2soMCkKICAgICAsIG1fbmVlZHNE
aXNwbGF5KGZhbHNlKQogICAgICwgbV9jb250ZW50c0xheWVyKDApCkBAIC0zNCw3ICszNCw3IEBA
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihH
cmFwaGljc0xheWVyQ2xpZW50KiBjbGllCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6Om5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hhbmdlTWFzayBjaGFu
Z2VNYXNrKQordm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6bm90aWZ5Q2hhbmdlKFRl
eHR1cmVNYXBwZXJMYXllcjo6Q2hhbmdlTWFzayBjaGFuZ2VNYXNrKQogewogICAgIG1fY2hhbmdl
TWFzayB8PSBjaGFuZ2VNYXNrOwogICAgIGlmICghY2xpZW50KCkpCkBAIC02NCw3ICs2NCw3IEBA
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjp+R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIo
KQogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0TmVlZHNEaXNwbGF5KCkKIHsK
ICAgICBtX25lZWRzRGlzcGxheSA9IHRydWU7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBw
ZXJOb2RlOjpEaXNwbGF5Q2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxh
eWVyOjpEaXNwbGF5Q2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBA
IC03Myw3ICs3Myw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRl
bnRzTmVlZHNEaXNwbGF5KCkKIHsKICAgICBpZiAobV9pbWFnZSkKICAgICAgICAgc2V0Q29udGVu
dHNUb0ltYWdlKG1faW1hZ2UuZ2V0KCkpOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
Tm9kZTo6RGlzcGxheUNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXll
cjo6RGlzcGxheUNoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAt
ODMsMTQgKzgzLDE0IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldE5lZWRz
RGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgaWYgKG1fbmVlZHNEaXNw
bGF5KQogICAgICAgICByZXR1cm47CiAgICAgbV9uZWVkc0Rpc3BsYXlSZWN0LnVuaXRlKHJlY3Qp
OwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6RGlzcGxheUNoYW5nZSk7Cisg
ICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6RGlzcGxheUNoYW5nZSk7CiB9CiAK
IC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQogKi8KIHZvaWQgR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXI6OnNldFBhcmVudChHcmFwaGljc0xheWVyKiBsYXllcikKIHsKLSAgICBub3RpZnlD
aGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OlBhcmVudENoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdl
KFRleHR1cmVNYXBwZXJMYXllcjo6UGFyZW50Q2hhbmdlKTsKICAgICBHcmFwaGljc0xheWVyOjpz
ZXRQYXJlbnQobGF5ZXIpOwogfQogCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldFBhcmVudChHcmFwaGljc0xheWVyKiBsYXllcikKICovCiBib29s
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3Jh
cGhpY3NMYXllcio+JiBjaGlsZHJlbikKIHsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ck5vZGU6OkNoaWxkcmVuQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxh
eWVyOjpDaGlsZHJlbkNoYW5nZSk7CiAgICAgcmV0dXJuIEdyYXBoaWNzTGF5ZXI6OnNldENoaWxk
cmVuKGNoaWxkcmVuKTsKIH0KIApAQCAtMTA2LDcgKzEwNiw3IEBAIGJvb2wgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4m
IGNoaWxkCiAqLwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGQoR3Jh
cGhpY3NMYXllciogbGF5ZXIpCiB7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2Rl
OjpDaGlsZHJlbkNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6
Q2hpbGRyZW5DaGFuZ2UpOwogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKGxheWVyKTsKIH0K
IApAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFk
ZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6YWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQgaW5kZXgpCiB7
CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KGxheWVyLCBpbmRleCk7Ci0gICAg
bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGlsZHJlbkNoYW5nZSk7CisgICAgbm90
aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6Q2hpbGRyZW5DaGFuZ2UpOwogfQogCiAvKiBc
cmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciogbGF5ZXIs
IGludCBpbmRleAogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6YWRkQ2hpbGRBYm92
ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKIHsKICAgICAg
R3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShsYXllciwgc2libGluZyk7Ci0gICAgIG5vdGlm
eUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOworICAgICBub3RpZnlD
aGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpDaGlsZHJlbkNoYW5nZSk7CiB9CiAKIC8qIFxyZWlt
cCAoR3JhcGhpY3NMYXllci5oKQpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXI6OmFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBo
aWNzTGF5CiB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjphZGRDaGlsZEJlbG93KEdy
YXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQogewogICAgIEdyYXBo
aWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cobGF5ZXIsIHNpYmxpbmcpOwotICAgIG5vdGlmeUNoYW5n
ZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShU
ZXh0dXJlTWFwcGVyTGF5ZXI6OkNoaWxkcmVuQ2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFw
aGljc0xheWVyLmgpCkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXkK
IGJvb2wgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnJlcGxhY2VDaGlsZChHcmFwaGljc0xh
eWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3Q2hpbGQpCiB7CiAgICAgaWYgKEdyYXBo
aWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChvbGRDaGlsZCwgbmV3Q2hpbGQpKSB7Ci0gICAgICAgIG5v
dGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q2hpbGRyZW5DaGFuZ2UpOworICAgICAgICBu
b3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpDaGlsZHJlbkNoYW5nZSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTEsNyArMTUxLDcg
QEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6cmVtb3ZlRnJvbVBhcmVudCgpCiB7
CiAgICAgaWYgKCFwYXJlbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG5vdGlmeUNoYW5nZShU
ZXh0dXJlTWFwcGVyTm9kZTo6UGFyZW50Q2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVy
ZU1hcHBlckxheWVyOjpQYXJlbnRDaGFuZ2UpOwogICAgIEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZy
b21QYXJlbnQoKTsKIH0KIApAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXI6OnNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKiB2YWx1ZSkKICAgICBpZiAo
dmFsdWUgPT0gbWFza0xheWVyKCkpCiAgICAgICAgIHJldHVybjsKICAgICBHcmFwaGljc0xheWVy
OjpzZXRNYXNrTGF5ZXIodmFsdWUpOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9k
ZTo6TWFza0xheWVyQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVy
OjpNYXNrTGF5ZXJDaGFuZ2UpOwogfQogCiAKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihHcmFwaGljc0xheWVy
KiB2YWx1ZSkKICAgICBpZiAodmFsdWUgPT0gcmVwbGljYUxheWVyKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcih2YWx1ZSk7Ci0gICAg
bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpSZXBsaWNhTGF5ZXJDaGFuZ2UpOworICAg
IG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OlJlcGxpY2FMYXllckNoYW5nZSk7CiB9
CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
IHZhbHVlKQogICAgIGlmICh2YWx1ZSA9PSBwb3NpdGlvbigpKQogICAgICAgICByZXR1cm47CiAg
ICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24odmFsdWUpOwotICAgIG5vdGlmeUNoYW5nZShU
ZXh0dXJlTWFwcGVyTm9kZTo6UG9zaXRpb25DaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0
dXJlTWFwcGVyTGF5ZXI6OlBvc2l0aW9uQ2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGlj
c0xheWVyLmgpCkBAIC0xOTMsNyArMTkzLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcjo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiB2YWx1ZSkKICAgICBpZiAo
dmFsdWUgPT0gYW5jaG9yUG9pbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5
ZXI6OnNldEFuY2hvclBvaW50KHZhbHVlKTsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ck5vZGU6OkFuY2hvclBvaW50Q2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBl
ckxheWVyOjpBbmNob3JQb2ludENoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXll
ci5oKQpAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6
OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
R3JhcGhpY3NMYXllcjo6c2V0U2l6ZSh2YWx1ZSk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVN
YXBwZXJOb2RlOjpTaXplQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxh
eWVyOjpTaXplQ2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChHcmFwaGljc0xheWVyLmgpCkBAIC0y
MTUsNyArMjE1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcjo6c2V0VHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKHZhbHVlKTsKLSAgICBub3RpZnlDaGFu
Z2UoVGV4dHVyZU1hcHBlck5vZGU6OlRyYW5zZm9ybUNoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdl
KFRleHR1cmVNYXBwZXJMYXllcjo6VHJhbnNmb3JtQ2hhbmdlKTsKIH0KIAogLyogXHJlaW1wIChH
cmFwaGljc0xheWVyLmgpCkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgKICAgICBpZiAodmFsdWUgPT0gY2hpbGRyZW5UcmFuc2Zvcm0oKSkKICAgICAgICAgcmV0dXJu
OwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKHZhbHVlKTsKLSAgICBu
b3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlKTsK
KyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpDaGlsZHJlblRyYW5zZm9ybUNo
YW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAtMjM1LDcgKzIzNSw3
IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldFByZXNlcnZlczNEKGJvb2wg
dmFsdWUpCiAgICAgaWYgKHZhbHVlID09IHByZXNlcnZlczNEKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRCh2YWx1ZSk7Ci0gICAgbm90aWZ5Q2hh
bmdlKFRleHR1cmVNYXBwZXJOb2RlOjpQcmVzZXJ2ZXMzRENoYW5nZSk7CisgICAgbm90aWZ5Q2hh
bmdlKFRleHR1cmVNYXBwZXJMYXllcjo6UHJlc2VydmVzM0RDaGFuZ2UpOwogfQogCiAvKiBccmVp
bXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTI0NSw3ICsyNDUsNyBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJUZXh0dXJlTWFwcGVyOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgdmFsdWUpCiAgICAgaWYgKHZh
bHVlID09IG1hc2tzVG9Cb3VuZHMoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5
ZXI6OnNldE1hc2tzVG9Cb3VuZHModmFsdWUpOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFw
cGVyTm9kZTo6TWFza3NUb0JvdW5kc0NoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVN
YXBwZXJMYXllcjo6TWFza3NUb0JvdW5kc0NoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQpAQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI6OnNldERyYXdzQ29udGVudChib29sIHZhbHVlKQogewogICAgIGlmICh2YWx1ZSA9PSBk
cmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJl
TWFwcGVyTm9kZTo6RHJhd3NDb250ZW50Q2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVy
ZU1hcHBlckxheWVyOjpEcmF3c0NvbnRlbnRDaGFuZ2UpOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dERyYXdzQ29udGVudCh2YWx1ZSk7CiB9CiAKQEAgLTI2NCw3ICsyNjQsNyBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c09wYXF1ZShib29sIHZhbHVlKQogewog
ICAgIGlmICh2YWx1ZSA9PSBjb250ZW50c09wYXF1ZSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
bm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDb250ZW50c09wYXF1ZUNoYW5nZSk7Cisg
ICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6Q29udGVudHNPcGFxdWVDaGFuZ2Up
OwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3BhcXVlKHZhbHVlKTsKIH0KIApAQCAt
Mjc1LDcgKzI3NSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldEJhY2tm
YWNlVmlzaWJpbGl0eShib29sIHZhbHVlKQogICAgIGlmICh2YWx1ZSA9PSBiYWNrZmFjZVZpc2li
aWxpdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNl
VmlzaWJpbGl0eSh2YWx1ZSk7Ci0gICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpC
YWNrZmFjZVZpc2liaWxpdHlDaGFuZ2UpOworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVy
TGF5ZXI6OkJhY2tmYWNlVmlzaWJpbGl0eUNoYW5nZSk7CiB9CiAKIC8qIFxyZWltcCAoR3JhcGhp
Y3NMYXllci5oKQpAQCAtMjg1LDcgKzI4NSw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI6OnNldE9wYWNpdHkoZmxvYXQgdmFsdWUpCiAgICAgaWYgKHZhbHVlID09IG9wYWNpdHko
KSkKICAgICAgICAgcmV0dXJuOwogICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkodmFsdWUp
OwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6T3BhY2l0eUNoYW5nZSk7Cisg
ICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6T3BhY2l0eUNoYW5nZSk7CiB9CiAK
IC8qIFxyZWltcCAoR3JhcGhpY3NMYXllci5oKQpAQCAtMjk1LDcgKzI5NSw3IEBAIHZvaWQgR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiB2
YWx1ZSkKICAgICBpZiAodmFsdWUgPT0gY29udGVudHNSZWN0KCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3QodmFsdWUpOwotICAgIG5vdGlmeUNo
YW5nZShUZXh0dXJlTWFwcGVyTm9kZTo6Q29udGVudHNSZWN0Q2hhbmdlKTsKKyAgICBub3RpZnlD
aGFuZ2UoVGV4dHVyZU1hcHBlckxheWVyOjpDb250ZW50c1JlY3RDaGFuZ2UpOwogfQogCiAvKiBc
cmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKQEAgLTMxNCw3ICszMTQsNyBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQogICAg
ICAgICBtX2NvbXBvc2l0ZWRJbWFnZSA9IDA7CiAKICAgICBzZXRDb250ZW50c1RvTWVkaWEobV9j
b21wb3NpdGVkSW1hZ2UuZ2V0KCkpOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTm9k
ZTo6Q29udGVudENoYW5nZSk7CisgICAgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6
Q29udGVudENoYW5nZSk7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKGlt
YWdlKTsKIH0KIApAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI6OnNldENvbnRlbnRzVG9NZWRpYShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcioKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb01lZGlhKG1l
ZGlhKTsKLSAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1hcHBlck5vZGU6OkNvbnRlbnRDaGFuZ2Up
OworICAgIG5vdGlmeUNoYW5nZShUZXh0dXJlTWFwcGVyTGF5ZXI6OkNvbnRlbnRDaGFuZ2UpOwog
ICAgIG1fY29udGVudHNMYXllciA9IG1lZGlhOwogfQogCkBAIC0zMzIsMTQgKzMzMiwxNCBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzZXRDb250ZW50c1RvTWVkaWEoVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIqCiAqLwogdm9pZCBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cjo6c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKIHsKLSAgICBtX25vZGUt
PnN5bmNDb21wb3NpdGluZ1N0YXRlKHRoaXMpOworICAgIG1fbGF5ZXItPnN5bmNDb21wb3NpdGlu
Z1N0YXRlKHRoaXMpOwogfQogCiAvKiBccmVpbXAgKEdyYXBoaWNzTGF5ZXIuaCkKICovCiB2b2lk
IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpzeW5jQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBG
bG9hdFJlY3QmKQogewotICAgIG1fbm9kZS0+c3luY0NvbXBvc2l0aW5nU3RhdGUodGhpcywgVGV4
dHVyZU1hcHBlck5vZGU6OlRyYXZlcnNlRGVzY2VuZGFudHMpOworICAgIG1fbGF5ZXItPnN5bmND
b21wb3NpdGluZ1N0YXRlKHRoaXMsIFRleHR1cmVNYXBwZXJMYXllcjo6VHJhdmVyc2VEZXNjZW5k
YW50cyk7CiB9CiAKIGJvb2wgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXI6OmFkZEFuaW1hdGlv
bihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBJbnRTaXplJiBib3hT
aXplLCBjb25zdCBBbmltYXRpb24qIGFuaW0sIGNvbnN0IFN0cmluZyYga2V5ZnJhbWVzTmFtZSwg
ZG91YmxlIHRpbWVPZmZzZXQpCkBAIC0zNTYsNyArMzU2LDcgQEAgYm9vbCBHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcjo6YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1
ZUxpc3QKICAgICAgICAgbGlzdHNNYXRjaCA9IHZhbGlkYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2
YWx1ZUxpc3QsIGhhc0JpZ1JvdGF0aW9uKSA+PSAwOwogCiAgICAgbV9hbmltYXRpb25zLmFkZChr
ZXlmcmFtZXNOYW1lLCBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uKHZhbHVlTGlzdCwgYm94U2l6ZSwg
YW5pbSwgdGltZU9mZnNldCwgbGlzdHNNYXRjaCkpOwotICAgIG5vdGlmeUNoYW5nZShUZXh0dXJl
TWFwcGVyTm9kZTo6QW5pbWF0aW9uQ2hhbmdlKTsKKyAgICBub3RpZnlDaGFuZ2UoVGV4dHVyZU1h
cHBlckxheWVyOjpBbmltYXRpb25DaGFuZ2UpOwogICAgIG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVy
LnN0YXJ0T25lU2hvdCgwKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmgKaW5kZXggZTBhMGY3MTUxYjlmMWU4OGEzNWMwYjU5Y2ZlMTFl
MDQzYmQwNDY5Yi4uMmE0ZGFiMTg1ODVhZTI2MzAzMzExZDYwOTliNjQ5MmYwY2EyMmZkMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKQEAgLTI0LDcgKzI0LDcgQEAK
ICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsaWVu
dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIK
KyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIuaCIKIAogI2lmIEVOQUJMRShXRUJHTCkKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgpAQCAtMzIsMTIgKzMyLDEyIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgVGV4dHVyZU1hcHBlck5vZGU7CitjbGFzcyBUZXh0dXJl
TWFwcGVyTGF5ZXI7CiBjbGFzcyBCaXRtYXBUZXh0dXJlOwogY2xhc3MgVGV4dHVyZU1hcHBlcjsK
IAogY2xhc3MgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIgOiBwdWJsaWMgR3JhcGhpY3NMYXll
ciB7Ci0gICAgZnJpZW5kIGNsYXNzIFRleHR1cmVNYXBwZXJOb2RlOworICAgIGZyaWVuZCBjbGFz
cyBUZXh0dXJlTWFwcGVyTGF5ZXI7CiAKIHB1YmxpYzoKICAgICBHcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcihHcmFwaGljc0xheWVyQ2xpZW50Kik7CkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIHZpcnR1
YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAot
ICAgIHZvaWQgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJOb2RlOjpDaGFuZ2VNYXNrIGNoYW5n
ZU1hc2spOworICAgIHZvaWQgbm90aWZ5Q2hhbmdlKFRleHR1cmVNYXBwZXJMYXllcjo6Q2hhbmdl
TWFzayk7CiAgICAgaW5saW5lIGludCBjaGFuZ2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9jaGFu
Z2VNYXNrOyB9CiAgICAgdm9pZCBkaWRTeW5jaHJvbml6ZSgpOwogCkBAIC04NSwxMyArODUsMTMg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcm
LCBkb3VibGUpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5n
Jik7CiAKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9k
ZS5nZXQoKTsgfQorICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX2xheWVyLmdldCgpOyB9CiAgICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIGNvbnRl
bnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzTGF5ZXI7IH0KICAgICBib29sIG5l
ZWRzRGlzcGxheSgpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNEaXNwbGF5OyB9CiAgICAgSW50UmVj
dCBuZWVkc0Rpc3BsYXlSZWN0KCkgY29uc3QgeyByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChtX25l
ZWRzRGlzcGxheVJlY3QpOyB9CiAKIHByaXZhdGU6Ci0gICAgT3duUHRyPFRleHR1cmVNYXBwZXJO
b2RlPiBtX25vZGU7CisgICAgT3duUHRyPFRleHR1cmVNYXBwZXJMYXllcj4gbV9sYXllcjsKICAg
ICBSZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gbV9jb21wb3NpdGVkSW1hZ2U7CiAg
ICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOwogICAgIGJvb2wgbV9zeW5jUXVldWVkOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckxheWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNjhkM2UxZmM5NTdlZGRmZjhlNjJmNWIz
ODQwYzBjOTZhNzU1ZDllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKQEAgLTAsMCArMSw0NzUg
QEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCisKKyNpbmNsdWRlICJzdGRp
by5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIk1hdGhFeHRyYXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUZXh0dXJlTWFw
cGVyTGF5ZXIqIHRvVGV4dHVyZU1hcHBlckxheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQorewor
ICAgIHJldHVybiBsYXllciA/IHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIpLT5s
YXllcigpIDogMDsKK30KKworVGV4dHVyZU1hcHBlckxheWVyKiBUZXh0dXJlTWFwcGVyTGF5ZXI6
OnJvb3RMYXllcigpCit7CisgICAgaWYgKG1fZWZmZWN0VGFyZ2V0KQorICAgICAgICByZXR1cm4g
bV9lZmZlY3RUYXJnZXQtPnJvb3RMYXllcigpOworICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAg
cmV0dXJuIG1fcGFyZW50LT5yb290TGF5ZXIoKTsKKyAgICByZXR1cm4gdGhpczsKK30KKwordm9p
ZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbWF0cml4KQoreworICAgIG1fdHJhbnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKG1hdHJp
eCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpjbGVhckJhY2tpbmdTdG9yZXNSZWN1
cnNpdmUoKQoreworICAgIG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7CisgICAgbV9jb250ZW50c0xh
eWVyID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyAr
K2kpCisgICAgICAgIG1fY2hpbGRyZW5baV0tPmNsZWFyQmFja2luZ1N0b3Jlc1JlY3Vyc2l2ZSgp
OworICAgIGlmIChtX3N0YXRlLm1hc2tMYXllcikKKyAgICAgICAgbV9zdGF0ZS5tYXNrTGF5ZXIt
PmNsZWFyQmFja2luZ1N0b3Jlc1JlY3Vyc2l2ZSgpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJM
YXllcjo6Y29tcHV0ZVRyYW5zZm9ybXNSZWN1cnNpdmUoKQoreworICAgIGlmIChtX3NpemUuaXNF
bXB0eSgpICYmIG1fc3RhdGUubWFza3NUb0JvdW5kcykKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gQ29tcHV0ZSB0cmFuc2Zvcm1zIHJlY3Vyc2l2ZWx5IG9uIHRoZSB3YXkgZG93biB0byBsZWFm
cy4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRUcmFuc2Zvcm07CisgICAgaWYgKG1f
cGFyZW50KQorICAgICAgICBwYXJlbnRUcmFuc2Zvcm0gPSBtX3BhcmVudC0+bV90cmFuc2Zvcm0u
Y29tYmluZWRGb3JDaGlsZHJlbigpOworICAgIGVsc2UgaWYgKG1fZWZmZWN0VGFyZ2V0KQorICAg
ICAgICBwYXJlbnRUcmFuc2Zvcm0gPSBtX2VmZmVjdFRhcmdldC0+bV90cmFuc2Zvcm0uY29tYmlu
ZWQoKTsKKyAgICBtX3RyYW5zZm9ybS5jb21iaW5lVHJhbnNmb3JtcyhwYXJlbnRUcmFuc2Zvcm0p
OworCisgICAgbV9zdGF0ZS52aXNpYmxlID0gbV9zdGF0ZS5iYWNrZmFjZVZpc2liaWxpdHkgfHwg
bV90cmFuc2Zvcm0uY29tYmluZWQoKS5pbnZlcnNlKCkubTMzKCkgPj0gMDsKKworICAgIGlmICht
X3BhcmVudCAmJiBtX3BhcmVudC0+bV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKKyAgICAgICAgbV9jZW50
ZXJaID0gbV90cmFuc2Zvcm0uY29tYmluZWQoKS5tYXBQb2ludChGbG9hdFBvaW50M0QobV9zaXpl
LndpZHRoKCkgLyAyLCBtX3NpemUuaGVpZ2h0KCkgLyAyLCAwKSkueigpOworCisgICAgaWYgKG1f
c3RhdGUubWFza0xheWVyKQorICAgICAgICBtX3N0YXRlLm1hc2tMYXllci0+Y29tcHV0ZVRyYW5z
Zm9ybXNSZWN1cnNpdmUoKTsKKyAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAg
IG1fc3RhdGUucmVwbGljYUxheWVyLT5jb21wdXRlVHJhbnNmb3Jtc1JlY3Vyc2l2ZSgpOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgbV9j
aGlsZHJlbltpXS0+Y29tcHV0ZVRyYW5zZm9ybXNSZWN1cnNpdmUoKTsKKworICAgIC8vIFJlb3Jk
ZXIgY2hpbGRyZW4gaWYgbmVlZGVkIG9uIHRoZSB3YXkgYmFjayB1cC4KKyAgICBpZiAobV9zdGF0
ZS5wcmVzZXJ2ZXMzRCkKKyAgICAgICAgc29ydEJ5Wk9yZGVyKG1fY2hpbGRyZW4sIDAsIG1fY2hp
bGRyZW4uc2l6ZSgpKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnVwZGF0ZUJhY2tp
bmdTdG9yZShUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBHcmFwaGljc0xheWVyKiBsYXll
cikKK3sKKyAgICBpZiAoIWxheWVyIHx8ICF0ZXh0dXJlTWFwcGVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIW1fc2hvdWxkVXBkYXRlQmFja2luZ1N0b3JlRnJvbUxheWVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIW1fc3RhdGUuZHJhd3NDb250ZW50IHx8IG1fc2l6ZS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgbV9iYWNraW5nU3RvcmUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEludFJlY3QgZGlydHlSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChtX3N0
YXRlLm5lZWRzRGlzcGxheSA/IGxheWVyUmVjdCgpIDogbV9zdGF0ZS5uZWVkc0Rpc3BsYXlSZWN0
KTsKKyAgICBpZiAoZGlydHlSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFtX2JhY2tpbmdTdG9yZSkKKyAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBUZXh0dXJlTWFw
cGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOworCisgICAgQVNTRVJUKGR5bmFtaWNfY2Fz
dDxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmUqPihtX2JhY2tpbmdTdG9yZS5nZXQoKSkp
OworCisgICAgLy8gUGFpbnQgdGhlIGVudGlyZSBkaXJ0eSByZWN0IGludG8gYW4gaW1hZ2UgYnVm
ZmVyLiBUaGlzIGVuc3VyZXMgd2Ugb25seSBwYWludCBvbmNlLgorICAgIE93blB0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGRpcnR5UmVjdC5zaXplKCkp
OworICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7
CisgICAgY29udGV4dC0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSh0ZXh0dXJlTWFwcGVy
LT5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIGNvbnRleHQtPnNldFRleHREcmF3
aW5nTW9kZSh0ZXh0dXJlTWFwcGVyLT50ZXh0RHJhd2luZ01vZGUoKSk7CisgICAgY29udGV4dC0+
dHJhbnNsYXRlKC1kaXJ0eVJlY3QueCgpLCAtZGlydHlSZWN0LnkoKSk7CisgICAgbGF5ZXItPnBh
aW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpjb250ZXh0LCBkaXJ0eVJlY3QpOworCisgICAgUmVm
UHRyPEltYWdlPiBpbWFnZTsKKworI2lmIFBMQVRGT1JNKFFUKQorICAgIGltYWdlID0gaW1hZ2VC
dWZmZXItPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisjZWxzZQorICAgIC8vIEZJ
WE1FOiBzdXBwb3J0IERvbnRDb3B5QmFja2luZ1N0b3JlIGluIG5vbi1RdCBwb3J0cyB0aGF0IHVz
ZSBUZXh0dXJlTWFwcGVyLgorICAgIGltYWdlID0gaW1hZ2VCdWZmZXItPmNvcHlJbWFnZShDb3B5
QmFja2luZ1N0b3JlKTsKKyNlbmRpZgorCisgICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlclRp
bGVkQmFja2luZ1N0b3JlKj4obV9iYWNraW5nU3RvcmUuZ2V0KCkpLT51cGRhdGVDb250ZW50cyh0
ZXh0dXJlTWFwcGVyLCBpbWFnZS5nZXQoKSwgbV9zaXplLCBkaXJ0eVJlY3QpOworfQorCit2b2lk
IFRleHR1cmVNYXBwZXJMYXllcjo6cGFpbnQoKQoreworICAgIGNvbXB1dGVUcmFuc2Zvcm1zUmVj
dXJzaXZlKCk7CisKKyAgICBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zIG9wdGlvbnM7CisgICAg
b3B0aW9ucy50ZXh0dXJlTWFwcGVyID0gbV90ZXh0dXJlTWFwcGVyOworICAgIG9wdGlvbnMudGV4
dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7CisgICAgcGFpbnRSZWN1cnNpdmUob3B0aW9ucyk7
Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpwYWludFNlbGYoY29uc3QgVGV4dHVyZU1h
cHBlclBhaW50T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICAvLyBXZSBhcHBseSB0aGUgZm9sbG93
aW5nIHRyYW5zZm9ybSB0byBjb21wZW5zYXRlIGZvciBwYWludGluZyBpbnRvIGEgc3VyZmFjZSwg
YW5kIHRoZW4gYXBwbHkgdGhlIG9mZnNldCBzbyB0aGF0IHRoZSBwYWludGluZyBmaXRzIGluIHRo
ZSB0YXJnZXQgcmVjdC4KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPQorICAg
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgob3B0aW9ucy50cmFuc2Zvcm0pCisgICAgICAg
ICAgICAubXVsdGlwbHkobV90cmFuc2Zvcm0uY29tYmluZWQoKSkKKyAgICAgICAgICAgIC50cmFu
c2xhdGUob3B0aW9ucy5vZmZzZXQud2lkdGgoKSwgb3B0aW9ucy5vZmZzZXQuaGVpZ2h0KCkpOwor
CisgICAgZmxvYXQgb3BhY2l0eSA9IG9wdGlvbnMub3BhY2l0eTsKKyAgICBSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gbWFzayA9IG9wdGlvbnMubWFzazsKKworICAgIGlmIChtX2JhY2tpbmdTdG9yZSkK
KyAgICAgICAgbV9iYWNraW5nU3RvcmUtPnBhaW50VG9UZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4
dHVyZU1hcHBlciwgbGF5ZXJSZWN0KCksIHRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzay5nZXQoKSk7
CisKKyAgICBpZiAobV9jb250ZW50c0xheWVyKQorICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnBh
aW50VG9UZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlciwgbV9zdGF0ZS5jb250ZW50
c1JlY3QsIHRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzay5nZXQoKSk7Cit9CisKK2ludCBUZXh0dXJl
TWFwcGVyTGF5ZXI6OmNvbXBhcmVHcmFwaGljc0xheWVyc1pWYWx1ZShjb25zdCB2b2lkKiBhLCBj
b25zdCB2b2lkKiBiKQoreworICAgIFRleHR1cmVNYXBwZXJMYXllciogY29uc3QqIGxheWVyQSA9
IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJMYXllciogY29uc3QqPihhKTsKKyAgICBUZXh0dXJl
TWFwcGVyTGF5ZXIqIGNvbnN0KiBsYXllckIgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyTGF5
ZXIqIGNvbnN0Kj4oYik7CisgICAgcmV0dXJuIGludCgoKCpsYXllckEpLT5tX2NlbnRlclogLSAo
KmxheWVyQiktPm1fY2VudGVyWikgKiAxMDAwKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTGF5
ZXI6OnNvcnRCeVpPcmRlcihWZWN0b3I8VGV4dHVyZU1hcHBlckxheWVyKiA+JiBhcnJheSwgaW50
IGZpcnN0LCBpbnQgbGFzdCkKK3sKKyAgICBxc29ydChhcnJheS5kYXRhKCksIGFycmF5LnNpemUo
KSwgc2l6ZW9mKFRleHR1cmVNYXBwZXJMYXllciopLCBjb21wYXJlR3JhcGhpY3NMYXllcnNaVmFs
dWUpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6cGFpbnRTZWxmQW5kQ2hpbGRyZW4o
Y29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBib29sIGhh
c0NsaXAgPSBtX3N0YXRlLm1hc2tzVG9Cb3VuZHMgJiYgIW1fY2hpbGRyZW4uaXNFbXB0eSgpOwor
ICAgIGlmIChoYXNDbGlwKQorICAgICAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJlZ2luQ2xp
cChUcmFuc2Zvcm1hdGlvbk1hdHJpeChvcHRpb25zLnRyYW5zZm9ybSkubXVsdGlwbHkobV90cmFu
c2Zvcm0uY29tYmluZWQoKSksIEZsb2F0UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpKSk7CisKKyAgICBwYWludFNlbGYob3B0aW9ucyk7CisKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIG1fY2hpbGRyZW5baV0t
PnBhaW50UmVjdXJzaXZlKG9wdGlvbnMpOworCisgICAgaWYgKGhhc0NsaXApCisgICAgICAgIG9w
dGlvbnMudGV4dHVyZU1hcHBlci0+ZW5kQ2xpcCgpOworfQorCitJbnRSZWN0IFRleHR1cmVNYXBw
ZXJMYXllcjo6aW50ZXJtZWRpYXRlU3VyZmFjZVJlY3QoKQoreworICAgIC8vIEZJWE1FOiBBZGQg
YW4gaW52ZXJzZSB0cmFuc2Zvcm0gdG8gTGF5ZXJUcmFuc2Zvcm0uCisgICAgcmV0dXJuIGludGVy
bWVkaWF0ZVN1cmZhY2VSZWN0KG1fdHJhbnNmb3JtLmNvbWJpbmVkKCkuaW52ZXJzZSgpKTsKK30K
KworSW50UmVjdCBUZXh0dXJlTWFwcGVyTGF5ZXI6OmludGVybWVkaWF0ZVN1cmZhY2VSZWN0KGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit7CisgICAgSW50UmVjdCByZWN0Owor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxvY2FsVHJhbnNmb3JtID0gVHJhbnNmb3JtYXRpb25N
YXRyaXgobWF0cml4KS5tdWx0aXBseShtX3RyYW5zZm9ybS5jb21iaW5lZCgpKTsKKyAgICByZWN0
ID0gZW5jbG9zaW5nSW50UmVjdChsb2NhbFRyYW5zZm9ybS5tYXBSZWN0KGxheWVyUmVjdCgpKSk7
CisgICAgaWYgKCFtX3N0YXRlLm1hc2tzVG9Cb3VuZHMgJiYgIW1fc3RhdGUubWFza0xheWVyKSB7
CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgIHJlY3QudW5pdGUobV9jaGlsZHJlbltpXS0+aW50ZXJtZWRpYXRlU3VyZmFjZVJl
Y3QobWF0cml4KSk7CisgICAgfQorCisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyKQorICAg
ICAgICByZWN0LnVuaXRlKG1fc3RhdGUucmVwbGljYUxheWVyLT5pbnRlcm1lZGlhdGVTdXJmYWNl
UmVjdChtYXRyaXgpKTsKKworICAgIHJldHVybiByZWN0OworfQorCitib29sIFRleHR1cmVNYXBw
ZXJMYXllcjo6c2hvdWxkUGFpbnRUb0ludGVybWVkaWF0ZVN1cmZhY2UoKSBjb25zdAoreworICAg
IGJvb2wgaGFzT3BhY2l0eSA9IG1fb3BhY2l0eSA8IDAuOTk7CisgICAgYm9vbCBoYXNDaGlsZHJl
biA9ICFtX2NoaWxkcmVuLmlzRW1wdHkoKTsKKyAgICBib29sIGhhc1JlcGxpY2EgPSAhIW1fc3Rh
dGUucmVwbGljYUxheWVyOworICAgIGJvb2wgaGFzTWFzayA9ICEhbV9zdGF0ZS5tYXNrTGF5ZXI7
CisKKyAgICAvLyBXZSBkb24ndCB1c2UgdHdvLXBhc3MgYmxlbmRpbmcgZm9yIHByZXNlcnZlcy0z
ZCwgdGhhdCdzIGluIHN5bmMgd2l0aCBTYWZhcmkuCisgICAgaWYgKG1fc3RhdGUucHJlc2VydmVz
M0QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIHNob3VsZCB1c2UgYW4gaW50
ZXJtZWRpYXRlIHN1cmZhY2Ugd2hlbiBibGVuZGluZyBzZXZlcmFsIGl0ZW1zIHdpdGggYW4gYW5j
ZXN0b3Igb3BhY2l0eS4KKyAgICAvLyBUZXN0ZWQgYnkgY29tcG9zaXRpbmcvcmVmbGVjdGlvbnMv
cmVmbGVjdGlvbi1vcGFjaXR5Lmh0bWwKKyAgICBpZiAoaGFzT3BhY2l0eSAmJiAoaGFzQ2hpbGRy
ZW4gfHwgaGFzUmVwbGljYSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gV2Ugc2hv
dWxkIHVzZSBhbiBpbnRlcm1lZGlhdGUgc3VyZmFjZSB3aXRoIGEgbWFza2VkIGFuY2VzdG9yLgor
ICAgIC8vIEluIHRoZSBjYXNlIG9mIHJlcGxpY2FzIHRoZSBtYXNrIGlzIGFwcGxpZWQgYmVmb3Jl
IHJlcGxpY2F0aW5nLgorICAgIC8vIFRlc3RlZCBieSBjb21wb3NpdGluZy9tYXNrcy9tYXNrZWQt
YW5jZXN0b3IuaHRtbAorICAgIGlmIChoYXNNYXNrICYmIGhhc0NoaWxkcmVuICYmICFoYXNSZXBs
aWNhKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBUZXh0dXJlTWFwcGVyTGF5ZXI6OmlzVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fc2l6
ZS5pc0VtcHR5KCkgJiYgKG1fc3RhdGUubWFza3NUb0JvdW5kcyB8fCBtX3N0YXRlLm1hc2tMYXll
ciB8fCBtX2NoaWxkcmVuLmlzRW1wdHkoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIW1fc3RhdGUudmlzaWJsZSB8fCBtX29wYWNpdHkgPCAwLjAxKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpw
YWludFNlbGZBbmRDaGlsZHJlbldpdGhSZXBsaWNhKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9w
dGlvbnMmIG9wdGlvbnMpCit7CisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyKSB7CisgICAg
ICAgIFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMgcmVwbGljYU9wdGlvbnMob3B0aW9ucyk7Cisg
ICAgICAgIC8vIFdlIGNob29zZSBlaXRoZXIgdGhlIGNvbnRlbnQncyBtYXNrIG9yIHRoZSByZXBs
aWNhJ3MgbWFzay4KKyAgICAgICAgLy8gRklYTUU6IGJsZW5kIHRoZSB0d28gaWYgYm90aCBleGlz
dC4KKyAgICAgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllcikK
KyAgICAgICAgICAgIHJlcGxpY2FPcHRpb25zLm1hc2sgPSBtX3N0YXRlLnJlcGxpY2FMYXllci0+
bV9zdGF0ZS5tYXNrTGF5ZXItPnRleHR1cmUoKTsKKworICAgICAgICByZXBsaWNhT3B0aW9ucy50
cmFuc2Zvcm0KKyAgICAgICAgICAgICAgICAgIC5tdWx0aXBseShtX3N0YXRlLnJlcGxpY2FMYXll
ci0+bV90cmFuc2Zvcm0uY29tYmluZWQoKSkKKyAgICAgICAgICAgICAgICAgIC5tdWx0aXBseSht
X3RyYW5zZm9ybS5jb21iaW5lZCgpLmludmVyc2UoKSk7CisgICAgICAgIHBhaW50U2VsZkFuZENo
aWxkcmVuKHJlcGxpY2FPcHRpb25zKTsKKyAgICB9CisKKyAgICBwYWludFNlbGZBbmRDaGlsZHJl
bihvcHRpb25zKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnBhaW50UmVjdXJzaXZl
KGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgaWYgKCFp
c1Zpc2libGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgb3BhY2l0eSA9IG9wdGlv
bnMub3BhY2l0eSAqIG1fb3BhY2l0eTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gbWFza1Rl
eHR1cmUgPSBtX3N0YXRlLm1hc2tMYXllciA/IG1fc3RhdGUubWFza0xheWVyLT50ZXh0dXJlKCkg
OiAwOworCisgICAgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyBwYWludE9wdGlvbnMob3B0aW9u
cyk7CisgICAgcGFpbnRPcHRpb25zLm1hc2sgPSBtYXNrVGV4dHVyZS5nZXQoKTsKKyAgICBJbnRS
ZWN0IHN1cmZhY2VSZWN0OworCisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHN1cmZhY2U7CisK
KyAgICBpZiAoIXNob3VsZFBhaW50VG9JbnRlcm1lZGlhdGVTdXJmYWNlKCkpIHsKKyAgICAgICAg
cGFpbnRPcHRpb25zLm9wYWNpdHkgPSBvcGFjaXR5OworICAgICAgICBwYWludFNlbGZBbmRDaGls
ZHJlbldpdGhSZXBsaWNhKHBhaW50T3B0aW9ucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBQcmVwYXJlIGEgc3VyZmFjZSB0byBwYWludCBpbnRvLgorICAgIC8vIFdlIHBhaW50
IGludG8gdGhlIHN1cmZhY2UgaWdub3JpbmcgdGhlIG9wYWNpdHkvdHJhbnNmb3JtIG9mIHRoZSBj
dXJyZW50IGxheWVyLgorICAgIHN1cmZhY2VSZWN0ID0gaW50ZXJtZWRpYXRlU3VyZmFjZVJlY3Qo
KTsKKyAgICBzdXJmYWNlID0gb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5hY3F1aXJlVGV4dHVyZUZy
b21Qb29sKHN1cmZhY2VSZWN0LnNpemUoKSk7CisgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5i
aW5kU3VyZmFjZShzdXJmYWNlLmdldCgpKTsKKyAgICBwYWludE9wdGlvbnMub3BhY2l0eSA9IDE7
CisKKyAgICAvLyBXZSBoYXZlIHRvIHVzZSBjb21iaW5lZEZvckNoaWxkcmVuKCkgYW5kIG5vdCBj
b21iaW5lZCgpLCBvdGhlcndpc2UgcHJlc2VydmUtM0QgZG9lc24ndCB3b3JrLgorICAgIHBhaW50
T3B0aW9ucy50cmFuc2Zvcm0gPSBtX3RyYW5zZm9ybS5jb21iaW5lZEZvckNoaWxkcmVuKCkuaW52
ZXJzZSgpOworICAgIHBhaW50T3B0aW9ucy5vZmZzZXQgPSAtSW50U2l6ZShzdXJmYWNlUmVjdC54
KCksIHN1cmZhY2VSZWN0LnkoKSk7CisKKyAgICBwYWludFNlbGZBbmRDaGlsZHJlbldpdGhSZXBs
aWNhKHBhaW50T3B0aW9ucyk7CisKKyAgICAvLyBJZiB3ZSBwYWludGVkIHRoZSByZXBsaWNhLCB0
aGUgbWFzayBpcyBhbHJlYWR5IGFwcGxpZWQgc28gd2UgZG9uJ3QgbmVlZCB0byBwYWludCBpdCBh
Z2Fpbi4KKyAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCisgICAgICAgIG1hc2tUZXh0dXJl
ID0gMDsKKworICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uob3B0aW9ucy5z
dXJmYWNlLmdldCgpKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0YXJnZXRUcmFuc2Zvcm0g
PQorICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgob3B0aW9ucy50cmFuc2Zvcm0pCisg
ICAgICAgICAgICAgICAgLm11bHRpcGx5KG1fdHJhbnNmb3JtLmNvbWJpbmVkKCkpCisgICAgICAg
ICAgICAgICAgLnRyYW5zbGF0ZShvcHRpb25zLm9mZnNldC53aWR0aCgpLCBvcHRpb25zLm9mZnNl
dC5oZWlnaHQoKSk7CisgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5kcmF3VGV4dHVyZSgqc3Vy
ZmFjZS5nZXQoKSwgc3VyZmFjZVJlY3QsIHRhcmdldFRyYW5zZm9ybSwgb3BhY2l0eSwgbWFza1Rl
eHR1cmUuZ2V0KCkpOworfQorCitUZXh0dXJlTWFwcGVyTGF5ZXI6On5UZXh0dXJlTWFwcGVyTGF5
ZXIoKQoreworICAgIGZvciAoaW50IGkgPSBtX2NoaWxkcmVuLnNpemUoKSAtIDE7IGkgPj0gMDsg
LS1pKQorICAgICAgICBtX2NoaWxkcmVuW2ldLT5tX3BhcmVudCA9IDA7CisKKyAgICBpZiAobV9w
YXJlbnQpCisgICAgICAgIG1fcGFyZW50LT5tX2NoaWxkcmVuLnJlbW92ZShtX3BhcmVudC0+bV9j
aGlsZHJlbi5maW5kKHRoaXMpKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnN5bmND
b21wb3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVy
LCBpbnQgb3B0aW9ucykKK3sKKyAgICBzeW5jQ29tcG9zaXRpbmdTdGF0ZShncmFwaGljc0xheWVy
LCByb290TGF5ZXIoKS0+bV90ZXh0dXJlTWFwcGVyLCBvcHRpb25zKTsKK30KKwordm9pZCBUZXh0
dXJlTWFwcGVyTGF5ZXI6OnN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihHcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlciogZ3JhcGhpY3NMYXllciwgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikK
K3sKKyAgICBpbnQgY2hhbmdlTWFzayA9IGdyYXBoaWNzTGF5ZXItPmNoYW5nZU1hc2soKTsKKwor
ICAgIGlmIChjaGFuZ2VNYXNrID09IE5vQ2hhbmdlcyAmJiBncmFwaGljc0xheWVyLT5tX2FuaW1h
dGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY2hhbmdlTWFzayAm
IFBhcmVudENoYW5nZSkgeworICAgICAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIG5ld1BhcmVudCA9
IHRvVGV4dHVyZU1hcHBlckxheWVyKGdyYXBoaWNzTGF5ZXItPnBhcmVudCgpKTsKKyAgICAgICAg
aWYgKG5ld1BhcmVudCAhPSBtX3BhcmVudCkgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGxheWVy
IGZyb20gY3VycmVudCBmcm9tIGNoaWxkIGxpc3QgZmlyc3QuCisgICAgICAgICAgICBpZiAobV9w
YXJlbnQpIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgaW5kZXggPSBtX3BhcmVudC0+bV9jaGls
ZHJlbi5maW5kKHRoaXMpOworICAgICAgICAgICAgICAgIG1fcGFyZW50LT5tX2NoaWxkcmVuLnJl
bW92ZShpbmRleCk7CisgICAgICAgICAgICAgICAgbV9wYXJlbnQgPSAwOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgLy8gU2V0IG5ldyBsYXllciBwYXJlbnQgYW5kIGFkZCBsYXllciB0byB0
aGUgcGFyZW50cyBjaGlsZCBsaXN0LgorICAgICAgICAgICAgaWYgKG5ld1BhcmVudCkgeworICAg
ICAgICAgICAgICAgIG1fcGFyZW50ID0gbmV3UGFyZW50OworICAgICAgICAgICAgICAgIG1fcGFy
ZW50LT5tX2NoaWxkcmVuLmFwcGVuZCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChjaGFuZ2VNYXNrICYgQ2hpbGRyZW5DaGFuZ2UpIHsKKyAgICAgICAg
Ly8gQ2xlYXIgY2hpbGRyZW4gcGFyZW50IHBvaW50ZXIgdG8gYXZvaWQgdW5zeW5jIGFuZCBjcmFz
aCBvbiBsYXllciBkZWxldGUuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGls
ZHJlbi5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIG1fY2hpbGRyZW5baV0tPm1fcGFyZW50ID0g
MDsKKworICAgICAgICBtX2NoaWxkcmVuLmNsZWFyKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgVGV4dHVyZU1hcHBlckxheWVyKiBjaGlsZCA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGdy
YXBoaWNzTGF5ZXItPmNoaWxkcmVuKClbaV0pOworICAgICAgICAgICAgaWYgKCFjaGlsZCkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNo
aWxkKTsKKyAgICAgICAgICAgIGNoaWxkLT5tX3BhcmVudCA9IHRoaXM7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBtX3NpemUgPSBncmFwaGljc0xheWVyLT5zaXplKCk7CisKKyAgICBpZiAoY2hh
bmdlTWFzayAmIE1hc2tMYXllckNoYW5nZSkgeworICAgICAgIGlmIChUZXh0dXJlTWFwcGVyTGF5
ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIoZ3JhcGhpY3NMYXllci0+bWFza0xheWVy
KCkpKQorICAgICAgICAgICBsYXllci0+bV9lZmZlY3RUYXJnZXQgPSB0aGlzOworICAgIH0KKwor
ICAgIGlmIChjaGFuZ2VNYXNrICYgUmVwbGljYUxheWVyQ2hhbmdlKSB7CisgICAgICAgaWYgKFRl
eHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihncmFwaGljc0xh
eWVyLT5yZXBsaWNhTGF5ZXIoKSkpCisgICAgICAgICAgIGxheWVyLT5tX2VmZmVjdFRhcmdldCA9
IHRoaXM7CisgICAgfQorCisgICAgaWYgKGNoYW5nZU1hc2sgJiBBbmltYXRpb25DaGFuZ2UpCisg
ICAgICAgIG1fYW5pbWF0aW9ucyA9IGdyYXBoaWNzTGF5ZXItPm1fYW5pbWF0aW9uczsKKworICAg
IG1fc3RhdGUubWFza0xheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIoZ3JhcGhpY3NMYXllci0+
bWFza0xheWVyKCkpOworICAgIG1fc3RhdGUucmVwbGljYUxheWVyID0gdG9UZXh0dXJlTWFwcGVy
TGF5ZXIoZ3JhcGhpY3NMYXllci0+cmVwbGljYUxheWVyKCkpOworICAgIG1fc3RhdGUucG9zID0g
Z3JhcGhpY3NMYXllci0+cG9zaXRpb24oKTsKKyAgICBtX3N0YXRlLmFuY2hvclBvaW50ID0gZ3Jh
cGhpY3NMYXllci0+YW5jaG9yUG9pbnQoKTsKKyAgICBtX3N0YXRlLnNpemUgPSBncmFwaGljc0xh
eWVyLT5zaXplKCk7CisgICAgbV9zdGF0ZS5jb250ZW50c1JlY3QgPSBncmFwaGljc0xheWVyLT5j
b250ZW50c1JlY3QoKTsKKyAgICBtX3N0YXRlLnRyYW5zZm9ybSA9IGdyYXBoaWNzTGF5ZXItPnRy
YW5zZm9ybSgpOworICAgIG1fc3RhdGUuY29udGVudHNSZWN0ID0gZ3JhcGhpY3NMYXllci0+Y29u
dGVudHNSZWN0KCk7CisgICAgbV9zdGF0ZS5wcmVzZXJ2ZXMzRCA9IGdyYXBoaWNzTGF5ZXItPnBy
ZXNlcnZlczNEKCk7CisgICAgbV9zdGF0ZS5tYXNrc1RvQm91bmRzID0gZ3JhcGhpY3NMYXllci0+
bWFza3NUb0JvdW5kcygpOworICAgIG1fc3RhdGUuZHJhd3NDb250ZW50ID0gZ3JhcGhpY3NMYXll
ci0+ZHJhd3NDb250ZW50KCk7CisgICAgbV9zdGF0ZS5jb250ZW50c09wYXF1ZSA9IGdyYXBoaWNz
TGF5ZXItPmNvbnRlbnRzT3BhcXVlKCk7CisgICAgbV9zdGF0ZS5iYWNrZmFjZVZpc2liaWxpdHkg
PSBncmFwaGljc0xheWVyLT5iYWNrZmFjZVZpc2liaWxpdHkoKTsKKyAgICBtX3N0YXRlLmNoaWxk
cmVuVHJhbnNmb3JtID0gZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW5UcmFuc2Zvcm0oKTsKKyAgICBt
X3N0YXRlLm9wYWNpdHkgPSBncmFwaGljc0xheWVyLT5vcGFjaXR5KCk7CisgICAgbV9zdGF0ZS5u
ZWVkc0Rpc3BsYXkgPSBtX3N0YXRlLm5lZWRzRGlzcGxheSB8fCBncmFwaGljc0xheWVyLT5uZWVk
c0Rpc3BsYXkoKTsKKyAgICBpZiAoIW1fc3RhdGUubmVlZHNEaXNwbGF5KQorICAgICAgICBtX3N0
YXRlLm5lZWRzRGlzcGxheVJlY3QudW5pdGUoZ3JhcGhpY3NMYXllci0+bmVlZHNEaXNwbGF5UmVj
dCgpKTsKKyAgICBtX2NvbnRlbnRzTGF5ZXIgPSBncmFwaGljc0xheWVyLT5jb250ZW50c0xheWVy
KCk7CisKKyAgICBtX3RyYW5zZm9ybS5zZXRQb3NpdGlvbihtX3N0YXRlLnBvcyk7CisgICAgbV90
cmFuc2Zvcm0uc2V0QW5jaG9yUG9pbnQobV9zdGF0ZS5hbmNob3JQb2ludCk7CisgICAgbV90cmFu
c2Zvcm0uc2V0U2l6ZShtX3N0YXRlLnNpemUpOworICAgIG1fdHJhbnNmb3JtLnNldEZsYXR0ZW5p
bmcoIW1fc3RhdGUucHJlc2VydmVzM0QpOworICAgIG1fdHJhbnNmb3JtLnNldENoaWxkcmVuVHJh
bnNmb3JtKG1fc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0pOworfQorCitib29sIFRleHR1cmVNYXBw
ZXJMYXllcjo6ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSBjb25zdAor
eworICAgIGlmIChtX2FuaW1hdGlvbnMuaGFzUnVubmluZ0FuaW1hdGlvbnMoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY2hpbGRyZW5baV0tPmRlc2NlbmRhbnRzT3JTZWxm
SGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlckxheWVyOjpzeW5j
QW5pbWF0aW9ucygpCit7CisgICAgbV9hbmltYXRpb25zLmFwcGx5KHRoaXMpOworICAgIGlmICgh
bV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eVdl
YmtpdFRyYW5zZm9ybSkpCisgICAgICAgIHNldFRyYW5zZm9ybShtX3N0YXRlLnRyYW5zZm9ybSk7
CisgICAgaWYgKCFtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRl
ZFByb3BlcnR5T3BhY2l0eSkpCisgICAgICAgIHNldE9wYWNpdHkobV9zdGF0ZS5vcGFjaXR5KTsK
K30KKwordm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnN5bmNBbmltYXRpb25zUmVjdXJzaXZlbHko
KQoreworICAgIHN5bmNBbmltYXRpb25zKCk7CisKKyAgICBmb3IgKGludCBpID0gbV9jaGlsZHJl
bi5zaXplKCkgLSAxOyBpID49IDA7IC0taSkKKyAgICAgICAgbV9jaGlsZHJlbltpXS0+c3luY0Fu
aW1hdGlvbnNSZWN1cnNpdmVseSgpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6c3lu
Y0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5
ZXIsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGludCBvcHRpb25zKQoreworICAgIGlm
ICghdGV4dHVyZU1hcHBlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGdyYXBoaWNzTGF5
ZXIgJiYgIShvcHRpb25zICYgQ29tcHV0YXRpb25zT25seSkpIHsKKyAgICAgICAgc3luY0NvbXBv
c2l0aW5nU3RhdGVTZWxmKGdyYXBoaWNzTGF5ZXIsIHRleHR1cmVNYXBwZXIpOworICAgICAgICBn
cmFwaGljc0xheWVyLT5kaWRTeW5jaHJvbml6ZSgpOworICAgIH0KKworICAgIGlmIChncmFwaGlj
c0xheWVyICYmIG1fc3RhdGUubWFza0xheWVyKSB7CisgICAgICAgIG1fc3RhdGUubWFza0xheWVy
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSh0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGdyYXBo
aWNzTGF5ZXItPm1hc2tMYXllcigpKSwgdGV4dHVyZU1hcHBlcik7CisKKyAgICAgICAgLy8gQSBt
YXNrIGxheWVyIGhhcyBpdHMgcGFyZW50J3Mgc2l6ZSBieSBkZWZhdWx0LCBpbiBjYXNlIGl0J3Mg
bm90IHNldCBzcGVjaWZpY2FsbHkuCisgICAgICAgIGlmIChtX3N0YXRlLm1hc2tMYXllci0+bV9z
aXplLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5tX3NpemUgPSBt
X3NpemU7CisgICAgfQorCisgICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyKQorICAgICAgICBt
X3N0YXRlLnJlcGxpY2FMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUodG9HcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcihncmFwaGljc0xheWVyLT5yZXBsaWNhTGF5ZXIoKSksIHRleHR1cmVNYXBw
ZXIpOworCisgICAgc3luY0FuaW1hdGlvbnMoKTsKKyAgICB1cGRhdGVCYWNraW5nU3RvcmUodGV4
dHVyZU1hcHBlciwgZ3JhcGhpY3NMYXllcik7CisKKyAgICBpZiAoIShvcHRpb25zICYgVHJhdmVy
c2VEZXNjZW5kYW50cykpCisgICAgICAgIG9wdGlvbnMgPSBDb21wdXRhdGlvbnNPbmx5OworCisg
ICAgaWYgKGdyYXBoaWNzTGF5ZXIpIHsKKyAgICAgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBj
aGlsZHJlbiA9IGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVuKCk7CisgICAgICAgIGZvciAoaW50IGkg
PSBjaGlsZHJlbi5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICAgICAgVGV4dHVy
ZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGNoaWxkcmVuW2ldKTsK
KyAgICAgICAgICAgIGlmICghbGF5ZXIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBsYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUodG9HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcihjaGlsZHJlbltpXSksIHRleHR1cmVNYXBwZXIsIG9wdGlvbnMpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IG1fY2hpbGRyZW4uc2l6ZSgpIC0g
MTsgaSA+PSAwOyAtLWkpCisgICAgICAgICAgICBtX2NoaWxkcmVuW2ldLT5zeW5jQ29tcG9zaXRp
bmdTdGF0ZSgwLCB0ZXh0dXJlTWFwcGVyLCBvcHRpb25zKTsKKyAgICB9Cit9CisKK30KKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwZDk0NTdhZWJjNjUyNDE2YTVl
ZGQ0ZGQ4NDhlZWQ3OTA4NTU1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgKQEAgLTAsMCArMSwy
MjAgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFRl
eHR1cmVNYXBwZXJMYXllcl9oCisjZGVmaW5lIFRleHR1cmVNYXBwZXJMYXllcl9oCisKKyNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRQb2lu
dEhhc2guaCIKKyNpbmNsdWRlICJMYXllclRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAi
VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVk
ZSAiVHJhbnNmb3JtT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllcjsK
K2NsYXNzIFRleHR1cmVNYXBwZXJMYXllcjsKK2NsYXNzIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyOworCitjbGFzcyBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zIHsKK3B1YmxpYzoKKyAgICBS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gc3VyZmFjZTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
bWFzazsKKyAgICBmbG9hdCBvcGFjaXR5OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5z
Zm9ybTsKKyAgICBJbnRTaXplIG9mZnNldDsKKyAgICBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFw
cGVyOworICAgIFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMoKQorICAgICAgICA6IG9wYWNpdHko
MSkKKyAgICAgICAgLCB0ZXh0dXJlTWFwcGVyKDApCisgICAgeyB9Cit9OworCitjbGFzcyBUZXh0
dXJlTWFwcGVyTGF5ZXIgOiBwdWJsaWMgVGV4dHVyZU1hcHBlckFuaW1hdGlvbkNsaWVudCB7CisK
K3B1YmxpYzoKKyAgICAvLyBUaGlzIHNldCBvZiBmbGFncyBoZWxwIHVzIGRlZmVyIHdoaWNoIHBy
b3BlcnRpZXMgb2YgdGhlIGxheWVyIGhhdmUgYmVlbgorICAgIC8vIG1vZGlmaWVkIGJ5IHRoZSBj
b21wb3NpdG9yLCBzbyB3ZSBjYW4ga25vdyB3aGF0IHRvIGxvb2sgZm9yIGluIHRoZSBuZXh0IGZs
dXNoLgorICAgIGVudW0gQ2hhbmdlTWFzayB7CisgICAgICAgIE5vQ2hhbmdlcyA9ICAgICAgICAg
ICAgICAgICAwLAorCisgICAgICAgIFBhcmVudENoYW5nZSA9ICAgICAgICAgICAgICAoMUwgPDwg
MCksCisgICAgICAgIENoaWxkcmVuQ2hhbmdlID0gICAgICAgICAgICAoMUwgPDwgMSksCisgICAg
ICAgIE1hc2tMYXllckNoYW5nZSA9ICAgICAgICAgICAoMUwgPDwgMiksCisgICAgICAgIFBvc2l0
aW9uQ2hhbmdlID0gICAgICAgICAgICAoMUwgPDwgMyksCisKKyAgICAgICAgQW5jaG9yUG9pbnRD
aGFuZ2UgPSAgICAgICAgICgxTCA8PCA0KSwKKyAgICAgICAgU2l6ZUNoYW5nZSAgPSAgICAgICAg
ICAgICAgICgxTCA8PCA1KSwKKyAgICAgICAgVHJhbnNmb3JtQ2hhbmdlID0gICAgICAgICAgICgx
TCA8PCA2KSwKKyAgICAgICAgQ29udGVudENoYW5nZSA9ICAgICAgICAgICAgICgxTCA8PCA3KSwK
KworICAgICAgICBDb250ZW50c09yaWVudGF0aW9uQ2hhbmdlID0gKDFMIDw8IDkpLAorICAgICAg
ICBPcGFjaXR5Q2hhbmdlID0gICAgICAgICAgICAgKDFMIDw8IDEwKSwKKyAgICAgICAgQ29udGVu
dHNSZWN0Q2hhbmdlID0gICAgICAgICgxTCA8PCAxMSksCisKKyAgICAgICAgUHJlc2VydmVzM0RD
aGFuZ2UgPSAgICAgICAgICgxTCA8PCAxMiksCisgICAgICAgIE1hc2tzVG9Cb3VuZHNDaGFuZ2Ug
PSAgICAgICAoMUwgPDwgMTMpLAorICAgICAgICBEcmF3c0NvbnRlbnRDaGFuZ2UgPSAgICAgICAg
KDFMIDw8IDE0KSwKKyAgICAgICAgQ29udGVudHNPcGFxdWVDaGFuZ2UgPSAgICAgICgxTCA8PCAx
NSksCisKKyAgICAgICAgQmFja2ZhY2VWaXNpYmlsaXR5Q2hhbmdlID0gICgxTCA8PCAxNiksCisg
ICAgICAgIENoaWxkcmVuVHJhbnNmb3JtQ2hhbmdlID0gICAoMUwgPDwgMTcpLAorICAgICAgICBE
aXNwbGF5Q2hhbmdlID0gICAgICAgICAgICAgKDFMIDw8IDE4KSwKKyAgICAgICAgQmFja2dyb3Vu
ZENvbG9yQ2hhbmdlID0gICAgICgxTCA8PCAxOSksCisKKyAgICAgICAgUmVwbGljYUxheWVyQ2hh
bmdlID0gICAgICAgICgxTCA8PCAyMCksCisgICAgICAgIEFuaW1hdGlvbkNoYW5nZSA9ICAgICAg
ICAgICAoMUwgPDwgMjEpCisgICAgfTsKKworICAgIGVudW0gU3luY09wdGlvbnMgeworICAgICAg
ICBUcmF2ZXJzZURlc2NlbmRhbnRzID0gMSwKKyAgICAgICAgQ29tcHV0YXRpb25zT25seSA9IDIK
KyAgICB9OworCisgICAgVGV4dHVyZU1hcHBlckxheWVyKCkKKyAgICAgICAgOiBtX3BhcmVudCgw
KQorICAgICAgICAsIG1fZWZmZWN0VGFyZ2V0KDApCisgICAgICAgICwgbV9jb250ZW50c0xheWVy
KDApCisgICAgICAgICwgbV9vcGFjaXR5KDEpCisgICAgICAgICwgbV9jZW50ZXJaKDApCisgICAg
ICAgICwgbV9zaG91bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5ZXIodHJ1ZSkKKyAgICAgICAg
LCBtX3RleHR1cmVNYXBwZXIoMCkKKyAgICB7IH0KKworICAgIHZpcnR1YWwgflRleHR1cmVNYXBw
ZXJMYXllcigpOworCisgICAgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlciosIGludCBzeW5jT3B0aW9ucyA9IDApOworICAgIHZvaWQgc3luY0NvbXBv
c2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqLCBUZXh0dXJlTWFwcGVyKiwg
aW50IHN5bmNPcHRpb25zID0gMCk7CisgICAgdm9pZCBzeW5jQW5pbWF0aW9uc1JlY3Vyc2l2ZWx5
KCk7CisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpKTsgfQorICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IHZhbHVlKSB7
IG1fb3BhY2l0eSA9IHZhbHVlOyB9CisgICAgdm9pZCBzZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVN
YXBwZXIqIHRleG1hcCkgeyBtX3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7IH0KKyAgICBib29sIGRl
c2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkgY29uc3Q7CisKKyAgICB2b2lk
IHBhaW50KCk7CisKKyAgICB2b2lkIHNldFNob3VsZFVwZGF0ZUJhY2tpbmdTdG9yZUZyb21MYXll
cihib29sIGIpIHsgbV9zaG91bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5ZXIgPSBiOyB9Cisg
ICAgdm9pZCBzZXRCYWNraW5nU3RvcmUoVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZSogYmFja2lu
Z1N0b3JlKSB7IG1fYmFja2luZ1N0b3JlID0gYmFja2luZ1N0b3JlOyB9CisgICAgUGFzc1JlZlB0
cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSB7IHJldHVybiBtX2Jh
Y2tpbmdTdG9yZTsgfQorICAgIHZvaWQgY2xlYXJCYWNraW5nU3RvcmVzUmVjdXJzaXZlKCk7CisK
K3ByaXZhdGU6CisgICAgVGV4dHVyZU1hcHBlckxheWVyKiByb290TGF5ZXIoKTsKKyAgICB2b2lk
IGNvbXB1dGVUcmFuc2Zvcm1zUmVjdXJzaXZlKCk7CisgICAgdm9pZCBjb21wdXRlT3ZlcmxhcHNJ
Zk5lZWRlZCgpOworICAgIHZvaWQgY29tcHV0ZVRpbGVzKCk7CisgICAgSW50UmVjdCBpbnRlcm1l
ZGlhdGVTdXJmYWNlUmVjdChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIEludFJl
Y3QgaW50ZXJtZWRpYXRlU3VyZmFjZVJlY3QoKTsKKyAgICB2b2lkIHN3YXBDb250ZW50c0J1ZmZl
cnMoKTsKKyAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdEZvclRpbGVSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgdG90YWxUYXJnZXRSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0KSBjb25zdDsKKyAg
ICB2b2lkIGludmFsaWRhdGVWaWV3cG9ydChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIG5v
dGlmeUNoYW5nZShDaGFuZ2VNYXNrKTsKKyAgICB2b2lkIHN5bmNDb21wb3NpdGluZ1N0YXRlU2Vs
ZihHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciosIFRleHR1cmVNYXBwZXIqKTsKKworICAgIHN0
YXRpYyBpbnQgY29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKGNvbnN0IHZvaWQqIGEsIGNvbnN0
IHZvaWQqIGIpOworICAgIHN0YXRpYyB2b2lkIHNvcnRCeVpPcmRlcihWZWN0b3I8VGV4dHVyZU1h
cHBlckxheWVyKiA+JiBhcnJheSwgaW50IGZpcnN0LCBpbnQgbGFzdCk7CisKKyAgICBQYXNzUmVm
UHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUoKSB7IHJldHVybiBtX2JhY2tpbmdTdG9yZSA/IG1f
YmFja2luZ1N0b3JlLT50ZXh0dXJlKCkgOiAwOyB9CisKKyAgICB2b2lkIHBhaW50UmVjdXJzaXZl
KGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmKTsKKyAgICB2b2lkIHBhaW50U2VsZihj
b25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJik7CisgICAgdm9pZCBwYWludFNlbGZBbmRD
aGlsZHJlbihjb25zdCBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zJik7CisgICAgdm9pZCBwYWlu
dFNlbGZBbmRDaGlsZHJlbldpdGhSZXBsaWNhKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlv
bnMmKTsKKyAgICB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyKiwgR3JhcGhp
Y3NMYXllciopOworCisgICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOworICAgIGJvb2wgaXNWaXNp
YmxlKCkgY29uc3Q7CisgICAgYm9vbCBzaG91bGRQYWludFRvSW50ZXJtZWRpYXRlU3VyZmFjZSgp
IGNvbnN0OworCisgICAgTGF5ZXJUcmFuc2Zvcm0gbV90cmFuc2Zvcm07CisKKyAgICBpbmxpbmUg
RmxvYXRSZWN0IGxheWVyUmVjdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbV9zaXplKTsKKyAgICB9CisKKyAgICBWZWN0b3I8VGV4
dHVyZU1hcHBlckxheWVyKj4gbV9jaGlsZHJlbjsKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIG1f
cGFyZW50OworICAgIFRleHR1cmVNYXBwZXJMYXllciogbV9lZmZlY3RUYXJnZXQ7CisgICAgUmVm
UHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOworICAgIFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyKiBtX2NvbnRlbnRzTGF5ZXI7CisgICAgRmxvYXRTaXplIG1f
c2l6ZTsKKyAgICBmbG9hdCBtX29wYWNpdHk7CisgICAgZmxvYXQgbV9jZW50ZXJaOworICAgIFN0
cmluZyBtX25hbWU7CisgICAgYm9vbCBtX3Nob3VsZFVwZGF0ZUJhY2tpbmdTdG9yZUZyb21MYXll
cjsKKworICAgIHN0cnVjdCBTdGF0ZSB7CisgICAgICAgIEZsb2F0UG9pbnQgcG9zOworICAgICAg
ICBGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7CisgICAgICAgIEZsb2F0U2l6ZSBzaXplOworICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGNoaWxkcmVuVHJhbnNmb3JtOworICAgICAgICBmbG9hdCBvcGFjaXR5OworICAg
ICAgICBGbG9hdFJlY3QgY29udGVudHNSZWN0OworICAgICAgICBGbG9hdFJlY3QgbmVlZHNEaXNw
bGF5UmVjdDsKKyAgICAgICAgaW50IGRlc2NlbmRhbnRzV2l0aENvbnRlbnQ7CisgICAgICAgIFRl
eHR1cmVNYXBwZXJMYXllciogbWFza0xheWVyOworICAgICAgICBUZXh0dXJlTWFwcGVyTGF5ZXIq
IHJlcGxpY2FMYXllcjsKKyAgICAgICAgYm9vbCBwcmVzZXJ2ZXMzRCA6IDE7CisgICAgICAgIGJv
b2wgbWFza3NUb0JvdW5kcyA6IDE7CisgICAgICAgIGJvb2wgZHJhd3NDb250ZW50IDogMTsKKyAg
ICAgICAgYm9vbCBjb250ZW50c09wYXF1ZSA6IDE7CisgICAgICAgIGJvb2wgYmFja2ZhY2VWaXNp
YmlsaXR5IDogMTsKKyAgICAgICAgYm9vbCB2aXNpYmxlIDogMTsKKyAgICAgICAgYm9vbCBuZWVk
c0Rpc3BsYXk6IDE7CisgICAgICAgIGJvb2wgbWlnaHRIYXZlT3ZlcmxhcHMgOiAxOworICAgICAg
ICBib29sIG5lZWRzUmVwYWludDsKKyAgICAgICAgU3RhdGUoKQorICAgICAgICAgICAgOiBvcGFj
aXR5KDEuZikKKyAgICAgICAgICAgICwgbWFza0xheWVyKDApCisgICAgICAgICAgICAsIHJlcGxp
Y2FMYXllcigwKQorICAgICAgICAgICAgLCBwcmVzZXJ2ZXMzRChmYWxzZSkKKyAgICAgICAgICAg
ICwgbWFza3NUb0JvdW5kcyhmYWxzZSkKKyAgICAgICAgICAgICwgZHJhd3NDb250ZW50KGZhbHNl
KQorICAgICAgICAgICAgLCBjb250ZW50c09wYXF1ZShmYWxzZSkKKyAgICAgICAgICAgICwgYmFj
a2ZhY2VWaXNpYmlsaXR5KGZhbHNlKQorICAgICAgICAgICAgLCB2aXNpYmxlKHRydWUpCisgICAg
ICAgICAgICAsIG5lZWRzRGlzcGxheSh0cnVlKQorICAgICAgICAgICAgLCBtaWdodEhhdmVPdmVy
bGFwcyhmYWxzZSkKKyAgICAgICAgICAgICwgbmVlZHNSZXBhaW50KGZhbHNlKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBUZXh0dXJlTWFw
cGVyKiBtX3RleHR1cmVNYXBwZXI7CisgICAgVGV4dHVyZU1hcHBlckFuaW1hdGlvbnMgbV9hbmlt
YXRpb25zOworfTsKKworCitUZXh0dXJlTWFwcGVyTGF5ZXIqIHRvVGV4dHVyZU1hcHBlckxheWVy
KEdyYXBoaWNzTGF5ZXIqKTsKKworfQorI2VuZGlmIC8vIFRleHR1cmVNYXBwZXJMYXllcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJOb2RlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Uy
YWYwMGJiZjUzNTczZmYwMjgxNmJhZjllNDIwNzVmNDQwODViMi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlck5vZGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDc1
ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKLQotI2luY2x1ZGUg
InN0ZGlvLmgiCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRl
ICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiTWF0aEV4dHJhcy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVRleHR1
cmVNYXBwZXJOb2RlKiB0b1RleHR1cmVNYXBwZXJOb2RlKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQot
ewotICAgIHJldHVybiBsYXllciA/IHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIp
LT5ub2RlKCkgOiAwOwotfQotCi1UZXh0dXJlTWFwcGVyTm9kZSogVGV4dHVyZU1hcHBlck5vZGU6
OnJvb3RMYXllcigpCi17Ci0gICAgaWYgKG1fZWZmZWN0VGFyZ2V0KQotICAgICAgICByZXR1cm4g
bV9lZmZlY3RUYXJnZXQtPnJvb3RMYXllcigpOwotICAgIGlmIChtX3BhcmVudCkKLSAgICAgICAg
cmV0dXJuIG1fcGFyZW50LT5yb290TGF5ZXIoKTsKLSAgICByZXR1cm4gdGhpczsKLX0KLQotdm9p
ZCBUZXh0dXJlTWFwcGVyTm9kZTo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtYXRyaXgpCi17Ci0gICAgbV90cmFuc2Zvcm0uc2V0TG9jYWxUcmFuc2Zvcm0obWF0cml4
KTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6Y2xlYXJCYWNraW5nU3RvcmVzUmVjdXJz
aXZlKCkKLXsKLSAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOwotICAgIG1fY29udGVudHNMYXll
ciA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytp
KQotICAgICAgICBtX2NoaWxkcmVuW2ldLT5jbGVhckJhY2tpbmdTdG9yZXNSZWN1cnNpdmUoKTsK
LSAgICBpZiAobV9zdGF0ZS5tYXNrTGF5ZXIpCi0gICAgICAgIG1fc3RhdGUubWFza0xheWVyLT5j
bGVhckJhY2tpbmdTdG9yZXNSZWN1cnNpdmUoKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9k
ZTo6Y29tcHV0ZVRyYW5zZm9ybXNSZWN1cnNpdmUoKQotewotICAgIGlmIChtX3NpemUuaXNFbXB0
eSgpICYmIG1fc3RhdGUubWFza3NUb0JvdW5kcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
Q29tcHV0ZSB0cmFuc2Zvcm1zIHJlY3Vyc2l2ZWx5IG9uIHRoZSB3YXkgZG93biB0byBsZWFmcy4K
LSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRUcmFuc2Zvcm07Ci0gICAgaWYgKG1fcGFy
ZW50KQotICAgICAgICBwYXJlbnRUcmFuc2Zvcm0gPSBtX3BhcmVudC0+bV90cmFuc2Zvcm0uY29t
YmluZWRGb3JDaGlsZHJlbigpOwotICAgIGVsc2UgaWYgKG1fZWZmZWN0VGFyZ2V0KQotICAgICAg
ICBwYXJlbnRUcmFuc2Zvcm0gPSBtX2VmZmVjdFRhcmdldC0+bV90cmFuc2Zvcm0uY29tYmluZWQo
KTsKLSAgICBtX3RyYW5zZm9ybS5jb21iaW5lVHJhbnNmb3JtcyhwYXJlbnRUcmFuc2Zvcm0pOwot
Ci0gICAgbV9zdGF0ZS52aXNpYmxlID0gbV9zdGF0ZS5iYWNrZmFjZVZpc2liaWxpdHkgfHwgbV90
cmFuc2Zvcm0uY29tYmluZWQoKS5pbnZlcnNlKCkubTMzKCkgPj0gMDsKLQotICAgIGlmIChtX3Bh
cmVudCAmJiBtX3BhcmVudC0+bV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKLSAgICAgICAgbV9jZW50ZXJa
ID0gbV90cmFuc2Zvcm0uY29tYmluZWQoKS5tYXBQb2ludChGbG9hdFBvaW50M0QobV9zaXplLndp
ZHRoKCkgLyAyLCBtX3NpemUuaGVpZ2h0KCkgLyAyLCAwKSkueigpOwotCi0gICAgaWYgKG1fc3Rh
dGUubWFza0xheWVyKQotICAgICAgICBtX3N0YXRlLm1hc2tMYXllci0+Y29tcHV0ZVRyYW5zZm9y
bXNSZWN1cnNpdmUoKTsKLSAgICBpZiAobV9zdGF0ZS5yZXBsaWNhTGF5ZXIpCi0gICAgICAgIG1f
c3RhdGUucmVwbGljYUxheWVyLT5jb21wdXRlVHJhbnNmb3Jtc1JlY3Vyc2l2ZSgpOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAgICAgbV9jaGls
ZHJlbltpXS0+Y29tcHV0ZVRyYW5zZm9ybXNSZWN1cnNpdmUoKTsKLQotICAgIC8vIFJlb3JkZXIg
Y2hpbGRyZW4gaWYgbmVlZGVkIG9uIHRoZSB3YXkgYmFjayB1cC4KLSAgICBpZiAobV9zdGF0ZS5w
cmVzZXJ2ZXMzRCkKLSAgICAgICAgc29ydEJ5Wk9yZGVyKG1fY2hpbGRyZW4sIDAsIG1fY2hpbGRy
ZW4uc2l6ZSgpKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6dXBkYXRlQmFja2luZ1N0
b3JlKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQot
ewotICAgIGlmICghbGF5ZXIgfHwgIXRleHR1cmVNYXBwZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghbV9zaG91bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5ZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghbV9zdGF0ZS5kcmF3c0NvbnRlbnQgfHwgbV9zaXplLmlzRW1wdHko
KSkgewotICAgICAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fc3RhdGUu
bmVlZHNEaXNwbGF5ID8gbGF5ZXJSZWN0KCkgOiBtX3N0YXRlLm5lZWRzRGlzcGxheVJlY3QpOwot
ICAgIGlmIChkaXJ0eVJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IW1fYmFja2luZ1N0b3JlKQotICAgICAgICBtX2JhY2tpbmdTdG9yZSA9IFRleHR1cmVNYXBwZXJU
aWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7Ci0KLSAgICBBU1NFUlQoZHluYW1pY19jYXN0PFRl
eHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZSo+KG1fYmFja2luZ1N0b3JlLmdldCgpKSk7Ci0K
LSAgICAvLyBQYWludCB0aGUgZW50aXJlIGRpcnR5IHJlY3QgaW50byBhbiBpbWFnZSBidWZmZXIu
IFRoaXMgZW5zdXJlcyB3ZSBvbmx5IHBhaW50IG9uY2UuCi0gICAgT3duUHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZGlydHlSZWN0LnNpemUoKSk7Ci0g
ICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKLSAg
ICBjb250ZXh0LT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KHRleHR1cmVNYXBwZXItPmlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgY29udGV4dC0+c2V0VGV4dERyYXdpbmdN
b2RlKHRleHR1cmVNYXBwZXItPnRleHREcmF3aW5nTW9kZSgpKTsKLSAgICBjb250ZXh0LT50cmFu
c2xhdGUoLWRpcnR5UmVjdC54KCksIC1kaXJ0eVJlY3QueSgpKTsKLSAgICBsYXllci0+cGFpbnRH
cmFwaGljc0xheWVyQ29udGVudHMoKmNvbnRleHQsIGRpcnR5UmVjdCk7Ci0KLSAgICBSZWZQdHI8
SW1hZ2U+IGltYWdlOwotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgaW1hZ2UgPSBpbWFnZUJ1ZmZl
ci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSNlbHNlCi0gICAgLy8gRklYTUU6
IHN1cHBvcnQgRG9udENvcHlCYWNraW5nU3RvcmUgaW4gbm9uLVF0IHBvcnRzIHRoYXQgdXNlIFRl
eHR1cmVNYXBwZXIuCi0gICAgaW1hZ2UgPSBpbWFnZUJ1ZmZlci0+Y29weUltYWdlKENvcHlCYWNr
aW5nU3RvcmUpOwotI2VuZGlmCi0KLSAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyVGlsZWRC
YWNraW5nU3RvcmUqPihtX2JhY2tpbmdTdG9yZS5nZXQoKSktPnVwZGF0ZUNvbnRlbnRzKHRleHR1
cmVNYXBwZXIsIGltYWdlLmdldCgpLCBtX3NpemUsIGRpcnR5UmVjdCk7Ci19Ci0KLXZvaWQgVGV4
dHVyZU1hcHBlck5vZGU6OnBhaW50KCkKLXsKLSAgICBjb21wdXRlVHJhbnNmb3Jtc1JlY3Vyc2l2
ZSgpOwotCi0gICAgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyBvcHRpb25zOwotICAgIG9wdGlv
bnMudGV4dHVyZU1hcHBlciA9IG1fdGV4dHVyZU1hcHBlcjsKLSAgICBvcHRpb25zLnRleHR1cmVN
YXBwZXItPmJpbmRTdXJmYWNlKDApOwotICAgIHBhaW50UmVjdXJzaXZlKG9wdGlvbnMpOwotfQot
Ci12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFNlbGYoY29uc3QgVGV4dHVyZU1hcHBlclBh
aW50T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICAvLyBXZSBhcHBseSB0aGUgZm9sbG93aW5nIHRy
YW5zZm9ybSB0byBjb21wZW5zYXRlIGZvciBwYWludGluZyBpbnRvIGEgc3VyZmFjZSwgYW5kIHRo
ZW4gYXBwbHkgdGhlIG9mZnNldCBzbyB0aGF0IHRoZSBwYWludGluZyBmaXRzIGluIHRoZSB0YXJn
ZXQgcmVjdC4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPQotICAgICAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXgob3B0aW9ucy50cmFuc2Zvcm0pCi0gICAgICAgICAgICAu
bXVsdGlwbHkobV90cmFuc2Zvcm0uY29tYmluZWQoKSkKLSAgICAgICAgICAgIC50cmFuc2xhdGUo
b3B0aW9ucy5vZmZzZXQud2lkdGgoKSwgb3B0aW9ucy5vZmZzZXQuaGVpZ2h0KCkpOwotCi0gICAg
ZmxvYXQgb3BhY2l0eSA9IG9wdGlvbnMub3BhY2l0eTsKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gbWFzayA9IG9wdGlvbnMubWFzazsKLQotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKLSAgICAg
ICAgbV9iYWNraW5nU3RvcmUtPnBhaW50VG9UZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1h
cHBlciwgbGF5ZXJSZWN0KCksIHRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzay5nZXQoKSk7Ci0KLSAg
ICBpZiAobV9jb250ZW50c0xheWVyKQotICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnBhaW50VG9U
ZXh0dXJlTWFwcGVyKG9wdGlvbnMudGV4dHVyZU1hcHBlciwgbV9zdGF0ZS5jb250ZW50c1JlY3Qs
IHRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzay5nZXQoKSk7Ci19Ci0KLWludCBUZXh0dXJlTWFwcGVy
Tm9kZTo6Y29tcGFyZUdyYXBoaWNzTGF5ZXJzWlZhbHVlKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZv
aWQqIGIpCi17Ci0gICAgVGV4dHVyZU1hcHBlck5vZGUqIGNvbnN0KiBub2RlQSA9IHN0YXRpY19j
YXN0PFRleHR1cmVNYXBwZXJOb2RlKiBjb25zdCo+KGEpOwotICAgIFRleHR1cmVNYXBwZXJOb2Rl
KiBjb25zdCogbm9kZUIgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyTm9kZSogY29uc3QqPihi
KTsKLSAgICByZXR1cm4gaW50KCgoKm5vZGVBKS0+bV9jZW50ZXJaIC0gKCpub2RlQiktPm1fY2Vu
dGVyWikgKiAxMDAwKTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c29ydEJ5Wk9yZGVy
KFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSogPiYgYXJyYXksIGludCBmaXJzdCwgaW50IGxhc3Qp
Ci17Ci0gICAgcXNvcnQoYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIHNpemVvZihUZXh0dXJl
TWFwcGVyTm9kZSopLCBjb21wYXJlR3JhcGhpY3NMYXllcnNaVmFsdWUpOwotfQotCi12b2lkIFRl
eHR1cmVNYXBwZXJOb2RlOjpwYWludFNlbGZBbmRDaGlsZHJlbihjb25zdCBUZXh0dXJlTWFwcGVy
UGFpbnRPcHRpb25zJiBvcHRpb25zKQotewotICAgIGJvb2wgaGFzQ2xpcCA9IG1fc3RhdGUubWFz
a3NUb0JvdW5kcyAmJiAhbV9jaGlsZHJlbi5pc0VtcHR5KCk7Ci0gICAgaWYgKGhhc0NsaXApCi0g
ICAgICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKFRyYW5zZm9ybWF0aW9uTWF0
cml4KG9wdGlvbnMudHJhbnNmb3JtKS5tdWx0aXBseShtX3RyYW5zZm9ybS5jb21iaW5lZCgpKSwg
RmxvYXRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLQotICAg
IHBhaW50U2VsZihvcHRpb25zKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9jaGlsZHJl
bi5zaXplKCk7ICsraSkKLSAgICAgICAgbV9jaGlsZHJlbltpXS0+cGFpbnRSZWN1cnNpdmUob3B0
aW9ucyk7Ci0KLSAgICBpZiAoaGFzQ2xpcCkKLSAgICAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVy
LT5lbmRDbGlwKCk7Ci19Ci0KLUludFJlY3QgVGV4dHVyZU1hcHBlck5vZGU6OmludGVybWVkaWF0
ZVN1cmZhY2VSZWN0KCkKLXsKLSAgICAvLyBGSVhNRTogQWRkIGFuIGludmVyc2UgdHJhbnNmb3Jt
IHRvIExheWVyVHJhbnNmb3JtLgotICAgIHJldHVybiBpbnRlcm1lZGlhdGVTdXJmYWNlUmVjdCht
X3RyYW5zZm9ybS5jb21iaW5lZCgpLmludmVyc2UoKSk7Ci19Ci0KLUludFJlY3QgVGV4dHVyZU1h
cHBlck5vZGU6OmludGVybWVkaWF0ZVN1cmZhY2VSZWN0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtYXRyaXgpCi17Ci0gICAgSW50UmVjdCByZWN0OwotICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGxvY2FsVHJhbnNmb3JtID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobWF0cml4KS5tdWx0aXBs
eShtX3RyYW5zZm9ybS5jb21iaW5lZCgpKTsKLSAgICByZWN0ID0gZW5jbG9zaW5nSW50UmVjdChs
b2NhbFRyYW5zZm9ybS5tYXBSZWN0KGxheWVyUmVjdCgpKSk7Ci0gICAgaWYgKCFtX3N0YXRlLm1h
c2tzVG9Cb3VuZHMgJiYgIW1fc3RhdGUubWFza0xheWVyKSB7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHJlY3QudW5pdGUo
bV9jaGlsZHJlbltpXS0+aW50ZXJtZWRpYXRlU3VyZmFjZVJlY3QobWF0cml4KSk7Ci0gICAgfQot
Ci0gICAgaWYgKG1fc3RhdGUucmVwbGljYUxheWVyKQotICAgICAgICByZWN0LnVuaXRlKG1fc3Rh
dGUucmVwbGljYUxheWVyLT5pbnRlcm1lZGlhdGVTdXJmYWNlUmVjdChtYXRyaXgpKTsKLQotICAg
IHJldHVybiByZWN0OwotfQotCi1ib29sIFRleHR1cmVNYXBwZXJOb2RlOjpzaG91bGRQYWludFRv
SW50ZXJtZWRpYXRlU3VyZmFjZSgpIGNvbnN0Ci17Ci0gICAgYm9vbCBoYXNPcGFjaXR5ID0gbV9v
cGFjaXR5IDwgMC45OTsKLSAgICBib29sIGhhc0NoaWxkcmVuID0gIW1fY2hpbGRyZW4uaXNFbXB0
eSgpOwotICAgIGJvb2wgaGFzUmVwbGljYSA9ICEhbV9zdGF0ZS5yZXBsaWNhTGF5ZXI7Ci0gICAg
Ym9vbCBoYXNNYXNrID0gISFtX3N0YXRlLm1hc2tMYXllcjsKLQotICAgIC8vIFdlIGRvbid0IHVz
ZSB0d28tcGFzcyBibGVuZGluZyBmb3IgcHJlc2VydmVzLTNkLCB0aGF0J3MgaW4gc3luYyB3aXRo
IFNhZmFyaS4KLSAgICBpZiAobV9zdGF0ZS5wcmVzZXJ2ZXMzRCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgLy8gV2Ugc2hvdWxkIHVzZSBhbiBpbnRlcm1lZGlhdGUgc3VyZmFjZSB3aGVu
IGJsZW5kaW5nIHNldmVyYWwgaXRlbXMgd2l0aCBhbiBhbmNlc3RvciBvcGFjaXR5LgotICAgIC8v
IFRlc3RlZCBieSBjb21wb3NpdGluZy9yZWZsZWN0aW9ucy9yZWZsZWN0aW9uLW9wYWNpdHkuaHRt
bAotICAgIGlmIChoYXNPcGFjaXR5ICYmIChoYXNDaGlsZHJlbiB8fCBoYXNSZXBsaWNhKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBXZSBzaG91bGQgdXNlIGFuIGludGVybWVkaWF0
ZSBzdXJmYWNlIHdpdGggYSBtYXNrZWQgYW5jZXN0b3IuCi0gICAgLy8gSW4gdGhlIGNhc2Ugb2Yg
cmVwbGljYXMgdGhlIG1hc2sgaXMgYXBwbGllZCBiZWZvcmUgcmVwbGljYXRpbmcuCi0gICAgLy8g
VGVzdGVkIGJ5IGNvbXBvc2l0aW5nL21hc2tzL21hc2tlZC1hbmNlc3Rvci5odG1sCi0gICAgaWYg
KGhhc01hc2sgJiYgaGFzQ2hpbGRyZW4gJiYgIWhhc1JlcGxpY2EpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFRleHR1cmVNYXBwZXJOb2RlOjpp
c1Zpc2libGUoKSBjb25zdAotewotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpICYmIChtX3N0YXRl
Lm1hc2tzVG9Cb3VuZHMgfHwgbV9zdGF0ZS5tYXNrTGF5ZXIgfHwgbV9jaGlsZHJlbi5pc0VtcHR5
KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFtX3N0YXRlLnZpc2libGUgfHwg
bV9vcGFjaXR5IDwgMC4wMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpwYWludFNlbGZBbmRDaGlsZHJlbldpdGhS
ZXBsaWNhKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
aWYgKG1fc3RhdGUucmVwbGljYUxheWVyKSB7Ci0gICAgICAgIFRleHR1cmVNYXBwZXJQYWludE9w
dGlvbnMgcmVwbGljYU9wdGlvbnMob3B0aW9ucyk7Ci0gICAgICAgIC8vIFdlIGNob29zZSBlaXRo
ZXIgdGhlIGNvbnRlbnQncyBtYXNrIG9yIHRoZSByZXBsaWNhJ3MgbWFzay4KLSAgICAgICAgLy8g
RklYTUU6IGJsZW5kIHRoZSB0d28gaWYgYm90aCBleGlzdC4KLSAgICAgICAgaWYgKG1fc3RhdGUu
cmVwbGljYUxheWVyLT5tX3N0YXRlLm1hc2tMYXllcikKLSAgICAgICAgICAgIHJlcGxpY2FPcHRp
b25zLm1hc2sgPSBtX3N0YXRlLnJlcGxpY2FMYXllci0+bV9zdGF0ZS5tYXNrTGF5ZXItPnRleHR1
cmUoKTsKLQotICAgICAgICByZXBsaWNhT3B0aW9ucy50cmFuc2Zvcm0KLSAgICAgICAgICAgICAg
ICAgIC5tdWx0aXBseShtX3N0YXRlLnJlcGxpY2FMYXllci0+bV90cmFuc2Zvcm0uY29tYmluZWQo
KSkKLSAgICAgICAgICAgICAgICAgIC5tdWx0aXBseShtX3RyYW5zZm9ybS5jb21iaW5lZCgpLmlu
dmVyc2UoKSk7Ci0gICAgICAgIHBhaW50U2VsZkFuZENoaWxkcmVuKHJlcGxpY2FPcHRpb25zKTsK
LSAgICB9Ci0KLSAgICBwYWludFNlbGZBbmRDaGlsZHJlbihvcHRpb25zKTsKLX0KLQotdm9pZCBU
ZXh0dXJlTWFwcGVyTm9kZTo6cGFpbnRSZWN1cnNpdmUoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoIWlzVmlzaWJsZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBmbG9hdCBvcGFjaXR5ID0gb3B0aW9ucy5vcGFjaXR5ICogbV9vcGFjaXR5Owot
ICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtYXNrVGV4dHVyZSA9IG1fc3RhdGUubWFza0xheWVy
ID8gbV9zdGF0ZS5tYXNrTGF5ZXItPnRleHR1cmUoKSA6IDA7Ci0KLSAgICBUZXh0dXJlTWFwcGVy
UGFpbnRPcHRpb25zIHBhaW50T3B0aW9ucyhvcHRpb25zKTsKLSAgICBwYWludE9wdGlvbnMubWFz
ayA9IG1hc2tUZXh0dXJlLmdldCgpOwotICAgIEludFJlY3Qgc3VyZmFjZVJlY3Q7Ci0KLSAgICBS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gc3VyZmFjZTsKLQotICAgIGlmICghc2hvdWxkUGFpbnRUb0lu
dGVybWVkaWF0ZVN1cmZhY2UoKSkgewotICAgICAgICBwYWludE9wdGlvbnMub3BhY2l0eSA9IG9w
YWNpdHk7Ci0gICAgICAgIHBhaW50U2VsZkFuZENoaWxkcmVuV2l0aFJlcGxpY2EocGFpbnRPcHRp
b25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFByZXBhcmUgYSBzdXJmYWNl
IHRvIHBhaW50IGludG8uCi0gICAgLy8gV2UgcGFpbnQgaW50byB0aGUgc3VyZmFjZSBpZ25vcmlu
ZyB0aGUgb3BhY2l0eS90cmFuc2Zvcm0gb2YgdGhlIGN1cnJlbnQgbGF5ZXIuCi0gICAgc3VyZmFj
ZVJlY3QgPSBpbnRlcm1lZGlhdGVTdXJmYWNlUmVjdCgpOwotICAgIHN1cmZhY2UgPSBvcHRpb25z
LnRleHR1cmVNYXBwZXItPmFjcXVpcmVUZXh0dXJlRnJvbVBvb2woc3VyZmFjZVJlY3Quc2l6ZSgp
KTsKLSAgICBvcHRpb25zLnRleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKHN1cmZhY2UuZ2V0KCkp
OwotICAgIHBhaW50T3B0aW9ucy5vcGFjaXR5ID0gMTsKLQotICAgIC8vIFdlIGhhdmUgdG8gdXNl
IGNvbWJpbmVkRm9yQ2hpbGRyZW4oKSBhbmQgbm90IGNvbWJpbmVkKCksIG90aGVyd2lzZSBwcmVz
ZXJ2ZS0zRCBkb2Vzbid0IHdvcmsuCi0gICAgcGFpbnRPcHRpb25zLnRyYW5zZm9ybSA9IG1fdHJh
bnNmb3JtLmNvbWJpbmVkRm9yQ2hpbGRyZW4oKS5pbnZlcnNlKCk7Ci0gICAgcGFpbnRPcHRpb25z
Lm9mZnNldCA9IC1JbnRTaXplKHN1cmZhY2VSZWN0LngoKSwgc3VyZmFjZVJlY3QueSgpKTsKLQot
ICAgIHBhaW50U2VsZkFuZENoaWxkcmVuV2l0aFJlcGxpY2EocGFpbnRPcHRpb25zKTsKLQotICAg
IC8vIElmIHdlIHBhaW50ZWQgdGhlIHJlcGxpY2EsIHRoZSBtYXNrIGlzIGFscmVhZHkgYXBwbGll
ZCBzbyB3ZSBkb24ndCBuZWVkIHRvIHBhaW50IGl0IGFnYWluLgotICAgIGlmIChtX3N0YXRlLnJl
cGxpY2FMYXllcikKLSAgICAgICAgbWFza1RleHR1cmUgPSAwOwotCi0gICAgb3B0aW9ucy50ZXh0
dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShvcHRpb25zLnN1cmZhY2UuZ2V0KCkpOwotICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHRhcmdldFRyYW5zZm9ybSA9Ci0gICAgICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeChvcHRpb25zLnRyYW5zZm9ybSkKLSAgICAgICAgICAgICAgICAubXVsdGlwbHko
bV90cmFuc2Zvcm0uY29tYmluZWQoKSkKLSAgICAgICAgICAgICAgICAudHJhbnNsYXRlKG9wdGlv
bnMub2Zmc2V0LndpZHRoKCksIG9wdGlvbnMub2Zmc2V0LmhlaWdodCgpKTsKLSAgICBvcHRpb25z
LnRleHR1cmVNYXBwZXItPmRyYXdUZXh0dXJlKCpzdXJmYWNlLmdldCgpLCBzdXJmYWNlUmVjdCwg
dGFyZ2V0VHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrVGV4dHVyZS5nZXQoKSk7Ci19Ci0KLVRleHR1
cmVNYXBwZXJOb2RlOjp+VGV4dHVyZU1hcHBlck5vZGUoKQotewotICAgIGZvciAoaW50IGkgPSBt
X2NoaWxkcmVuLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKQotICAgICAgICBtX2NoaWxkcmVuW2ld
LT5tX3BhcmVudCA9IDA7Ci0KLSAgICBpZiAobV9wYXJlbnQpCi0gICAgICAgIG1fcGFyZW50LT5t
X2NoaWxkcmVuLnJlbW92ZShtX3BhcmVudC0+bV9jaGlsZHJlbi5maW5kKHRoaXMpKTsKLX0KLQot
dm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0NvbXBvc2l0aW5nU3RhdGUoR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIGludCBvcHRpb25zKQotewotICAgIHN5bmND
b21wb3NpdGluZ1N0YXRlKGdyYXBoaWNzTGF5ZXIsIHJvb3RMYXllcigpLT5tX3RleHR1cmVNYXBw
ZXIsIG9wdGlvbnMpOwotfQotCi12b2lkIFRleHR1cmVNYXBwZXJOb2RlOjpzeW5jQ29tcG9zaXRp
bmdTdGF0ZVNlbGYoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGdyYXBoaWNzTGF5ZXIsIFRl
eHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCi17Ci0gICAgaW50IGNoYW5nZU1hc2sgPSBncmFw
aGljc0xheWVyLT5jaGFuZ2VNYXNrKCk7Ci0KLSAgICBpZiAoY2hhbmdlTWFzayA9PSBOb0NoYW5n
ZXMgJiYgZ3JhcGhpY3NMYXllci0+bV9hbmltYXRpb25zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGNoYW5nZU1hc2sgJiBQYXJlbnRDaGFuZ2UpIHsKLSAgICAgICAgVGV4
dHVyZU1hcHBlck5vZGUqIG5ld1BhcmVudCA9IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhpY3NM
YXllci0+cGFyZW50KCkpOwotICAgICAgICBpZiAobmV3UGFyZW50ICE9IG1fcGFyZW50KSB7Ci0g
ICAgICAgICAgICAvLyBSZW1vdmUgbm9kZSBmcm9tIGN1cnJlbnQgZnJvbSBjaGlsZCBsaXN0IGZp
cnN0LgotICAgICAgICAgICAgaWYgKG1fcGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgc2l6ZV90
IGluZGV4ID0gbV9wYXJlbnQtPm1fY2hpbGRyZW4uZmluZCh0aGlzKTsKLSAgICAgICAgICAgICAg
ICBtX3BhcmVudC0+bV9jaGlsZHJlbi5yZW1vdmUoaW5kZXgpOwotICAgICAgICAgICAgICAgIG1f
cGFyZW50ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFNldCBuZXcgbm9kZSBw
YXJlbnQgYW5kIGFkZCBub2RlIHRvIHRoZSBwYXJlbnRzIGNoaWxkIGxpc3QuCi0gICAgICAgICAg
ICBpZiAobmV3UGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgbV9wYXJlbnQgPSBuZXdQYXJlbnQ7
Ci0gICAgICAgICAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4uYXBwZW5kKHRoaXMpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNoYW5nZU1hc2sgJiBDaGls
ZHJlbkNoYW5nZSkgewotICAgICAgICAvLyBDbGVhciBjaGlsZHJlbiBwYXJlbnQgcG9pbnRlciB0
byBhdm9pZCB1bnN5bmMgYW5kIGNyYXNoIG9uIG5vZGUgZGVsZXRlLgotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICBtX2No
aWxkcmVuW2ldLT5tX3BhcmVudCA9IDA7Ci0KLSAgICAgICAgbV9jaGlsZHJlbi5jbGVhcigpOwot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVuKCku
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFRleHR1cmVNYXBwZXJOb2RlKiBjaGlsZCA9IHRv
VGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4oKVtpXSk7Ci0gICAgICAg
ICAgICBpZiAoIWNoaWxkKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
bV9jaGlsZHJlbi5hcHBlbmQoY2hpbGQpOwotICAgICAgICAgICAgY2hpbGQtPm1fcGFyZW50ID0g
dGhpczsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fc2l6ZSA9IGdyYXBoaWNzTGF5ZXItPnNp
emUoKTsKLQotICAgIGlmIChjaGFuZ2VNYXNrICYgTWFza0xheWVyQ2hhbmdlKSB7Ci0gICAgICAg
aWYgKFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUoZ3JhcGhp
Y3NMYXllci0+bWFza0xheWVyKCkpKQotICAgICAgICAgICBsYXllci0+bV9lZmZlY3RUYXJnZXQg
PSB0aGlzOwotICAgIH0KLQotICAgIGlmIChjaGFuZ2VNYXNrICYgUmVwbGljYUxheWVyQ2hhbmdl
KSB7Ci0gICAgICAgaWYgKFRleHR1cmVNYXBwZXJOb2RlKiBsYXllciA9IHRvVGV4dHVyZU1hcHBl
ck5vZGUoZ3JhcGhpY3NMYXllci0+cmVwbGljYUxheWVyKCkpKQotICAgICAgICAgICBsYXllci0+
bV9lZmZlY3RUYXJnZXQgPSB0aGlzOwotICAgIH0KLQotICAgIGlmIChjaGFuZ2VNYXNrICYgQW5p
bWF0aW9uQ2hhbmdlKQotICAgICAgICBtX2FuaW1hdGlvbnMgPSBncmFwaGljc0xheWVyLT5tX2Fu
aW1hdGlvbnM7Ci0KLSAgICBtX3N0YXRlLm1hc2tMYXllciA9IHRvVGV4dHVyZU1hcHBlck5vZGUo
Z3JhcGhpY3NMYXllci0+bWFza0xheWVyKCkpOwotICAgIG1fc3RhdGUucmVwbGljYUxheWVyID0g
dG9UZXh0dXJlTWFwcGVyTm9kZShncmFwaGljc0xheWVyLT5yZXBsaWNhTGF5ZXIoKSk7Ci0gICAg
bV9zdGF0ZS5wb3MgPSBncmFwaGljc0xheWVyLT5wb3NpdGlvbigpOwotICAgIG1fc3RhdGUuYW5j
aG9yUG9pbnQgPSBncmFwaGljc0xheWVyLT5hbmNob3JQb2ludCgpOwotICAgIG1fc3RhdGUuc2l6
ZSA9IGdyYXBoaWNzTGF5ZXItPnNpemUoKTsKLSAgICBtX3N0YXRlLmNvbnRlbnRzUmVjdCA9IGdy
YXBoaWNzTGF5ZXItPmNvbnRlbnRzUmVjdCgpOwotICAgIG1fc3RhdGUudHJhbnNmb3JtID0gZ3Jh
cGhpY3NMYXllci0+dHJhbnNmb3JtKCk7Ci0gICAgbV9zdGF0ZS5jb250ZW50c1JlY3QgPSBncmFw
aGljc0xheWVyLT5jb250ZW50c1JlY3QoKTsKLSAgICBtX3N0YXRlLnByZXNlcnZlczNEID0gZ3Jh
cGhpY3NMYXllci0+cHJlc2VydmVzM0QoKTsKLSAgICBtX3N0YXRlLm1hc2tzVG9Cb3VuZHMgPSBn
cmFwaGljc0xheWVyLT5tYXNrc1RvQm91bmRzKCk7Ci0gICAgbV9zdGF0ZS5kcmF3c0NvbnRlbnQg
PSBncmFwaGljc0xheWVyLT5kcmF3c0NvbnRlbnQoKTsKLSAgICBtX3N0YXRlLmNvbnRlbnRzT3Bh
cXVlID0gZ3JhcGhpY3NMYXllci0+Y29udGVudHNPcGFxdWUoKTsKLSAgICBtX3N0YXRlLmJhY2tm
YWNlVmlzaWJpbGl0eSA9IGdyYXBoaWNzTGF5ZXItPmJhY2tmYWNlVmlzaWJpbGl0eSgpOwotICAg
IG1fc3RhdGUuY2hpbGRyZW5UcmFuc2Zvcm0gPSBncmFwaGljc0xheWVyLT5jaGlsZHJlblRyYW5z
Zm9ybSgpOwotICAgIG1fc3RhdGUub3BhY2l0eSA9IGdyYXBoaWNzTGF5ZXItPm9wYWNpdHkoKTsK
LSAgICBtX3N0YXRlLm5lZWRzRGlzcGxheSA9IG1fc3RhdGUubmVlZHNEaXNwbGF5IHx8IGdyYXBo
aWNzTGF5ZXItPm5lZWRzRGlzcGxheSgpOwotICAgIGlmICghbV9zdGF0ZS5uZWVkc0Rpc3BsYXkp
Ci0gICAgICAgIG1fc3RhdGUubmVlZHNEaXNwbGF5UmVjdC51bml0ZShncmFwaGljc0xheWVyLT5u
ZWVkc0Rpc3BsYXlSZWN0KCkpOwotICAgIG1fY29udGVudHNMYXllciA9IGdyYXBoaWNzTGF5ZXIt
PmNvbnRlbnRzTGF5ZXIoKTsKLQotICAgIG1fdHJhbnNmb3JtLnNldFBvc2l0aW9uKG1fc3RhdGUu
cG9zKTsKLSAgICBtX3RyYW5zZm9ybS5zZXRBbmNob3JQb2ludChtX3N0YXRlLmFuY2hvclBvaW50
KTsKLSAgICBtX3RyYW5zZm9ybS5zZXRTaXplKG1fc3RhdGUuc2l6ZSk7Ci0gICAgbV90cmFuc2Zv
cm0uc2V0RmxhdHRlbmluZyghbV9zdGF0ZS5wcmVzZXJ2ZXMzRCk7Ci0gICAgbV90cmFuc2Zvcm0u
c2V0Q2hpbGRyZW5UcmFuc2Zvcm0obV9zdGF0ZS5jaGlsZHJlblRyYW5zZm9ybSk7Ci19Ci0KLWJv
b2wgVGV4dHVyZU1hcHBlck5vZGU6OmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRp
b25zKCkgY29uc3QKLXsKLSAgICBpZiAobV9hbmltYXRpb25zLmhhc1J1bm5pbmdBbmltYXRpb25z
KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2NoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2NoaWxkcmVuW2ldLT5kZXNj
ZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFRleHR1cmVNYXBw
ZXJOb2RlOjpzeW5jQW5pbWF0aW9ucygpCi17Ci0gICAgbV9hbmltYXRpb25zLmFwcGx5KHRoaXMp
OwotICAgIGlmICghbV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0
ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkpCi0gICAgICAgIHNldFRyYW5zZm9ybShtX3N0YXRl
LnRyYW5zZm9ybSk7Ci0gICAgaWYgKCFtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09m
VHlwZShBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkpCi0gICAgICAgIHNldE9wYWNpdHkobV9zdGF0
ZS5vcGFjaXR5KTsKLX0KLQotdm9pZCBUZXh0dXJlTWFwcGVyTm9kZTo6c3luY0FuaW1hdGlvbnNS
ZWN1cnNpdmVseSgpCi17Ci0gICAgc3luY0FuaW1hdGlvbnMoKTsKLQotICAgIGZvciAoaW50IGkg
PSBtX2NoaWxkcmVuLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKQotICAgICAgICBtX2NoaWxkcmVu
W2ldLT5zeW5jQW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCk7Ci19Ci0KLXZvaWQgVGV4dHVyZU1hcHBl
ck5vZGU6OnN5bmNDb21wb3NpdGluZ1N0YXRlKEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBn
cmFwaGljc0xheWVyLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBpbnQgb3B0aW9ucykK
LXsKLSAgICBpZiAoIXRleHR1cmVNYXBwZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChn
cmFwaGljc0xheWVyICYmICEob3B0aW9ucyAmIENvbXB1dGF0aW9uc09ubHkpKSB7Ci0gICAgICAg
IHN5bmNDb21wb3NpdGluZ1N0YXRlU2VsZihncmFwaGljc0xheWVyLCB0ZXh0dXJlTWFwcGVyKTsK
LSAgICAgICAgZ3JhcGhpY3NMYXllci0+ZGlkU3luY2hyb25pemUoKTsKLSAgICB9Ci0KLSAgICBp
ZiAoZ3JhcGhpY3NMYXllciAmJiBtX3N0YXRlLm1hc2tMYXllcikgewotICAgICAgICBtX3N0YXRl
Lm1hc2tMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUodG9HcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcihncmFwaGljc0xheWVyLT5tYXNrTGF5ZXIoKSksIHRleHR1cmVNYXBwZXIpOwotCi0gICAg
ICAgIC8vIEEgbWFzayBsYXllciBoYXMgaXRzIHBhcmVudCdzIHNpemUgYnkgZGVmYXVsdCwgaW4g
Y2FzZSBpdCdzIG5vdCBzZXQgc3BlY2lmaWNhbGx5LgotICAgICAgICBpZiAobV9zdGF0ZS5tYXNr
TGF5ZXItPm1fc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX3N0YXRlLm1hc2tMYXllci0+
bV9zaXplID0gbV9zaXplOwotICAgIH0KLQotICAgIGlmIChtX3N0YXRlLnJlcGxpY2FMYXllcikK
LSAgICAgICAgbV9zdGF0ZS5yZXBsaWNhTGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKHRvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIoZ3JhcGhpY3NMYXllci0+cmVwbGljYUxheWVyKCkpLCB0
ZXh0dXJlTWFwcGVyKTsKLQotICAgIHN5bmNBbmltYXRpb25zKCk7Ci0gICAgdXBkYXRlQmFja2lu
Z1N0b3JlKHRleHR1cmVNYXBwZXIsIGdyYXBoaWNzTGF5ZXIpOwotCi0gICAgaWYgKCEob3B0aW9u
cyAmIFRyYXZlcnNlRGVzY2VuZGFudHMpKQotICAgICAgICBvcHRpb25zID0gQ29tcHV0YXRpb25z
T25seTsKLQotICAgIGlmIChncmFwaGljc0xheWVyKSB7Ci0gICAgICAgIFZlY3RvcjxHcmFwaGlj
c0xheWVyKj4gY2hpbGRyZW4gPSBncmFwaGljc0xheWVyLT5jaGlsZHJlbigpOwotICAgICAgICBm
b3IgKGludCBpID0gY2hpbGRyZW4uc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAg
ICAgIFRleHR1cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShjaGlsZHJl
bltpXSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBub2RlLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZSh0b0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyKGNoaWxkcmVuW2ldKSwgdGV4dHVyZU1hcHBlciwgb3B0aW9ucyk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGludCBpID0gbV9jaGlsZHJlbi5zaXpl
KCkgLSAxOyBpID49IDA7IC0taSkKLSAgICAgICAgICAgIG1fY2hpbGRyZW5baV0tPnN5bmNDb21w
b3NpdGluZ1N0YXRlKDAsIHRleHR1cmVNYXBwZXIsIG9wdGlvbnMpOwotICAgIH0KLX0KLQotfQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxMzdiZjA2YTY0YzNhODU5Y2E2ZjMzNzdjNThjZjk2N2RkNjU0NjYwLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTm9kZS5oCisrKyAvZGV2L251bGwKQEAgLTEs
MjIwICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
Ci0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZu
ZGVmIFRleHR1cmVNYXBwZXJOb2RlX2gKLSNkZWZpbmUgVGV4dHVyZU1hcHBlck5vZGVfaAotCi0j
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW50
UG9pbnRIYXNoLmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckFuaW1hdGlvbi5oIgotI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2lu
Y2x1ZGUgIlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXI7Ci1jbGFzcyBUZXh0dXJlTWFwcGVyTm9kZTsKLWNsYXNzIEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyOwotCi1jbGFzcyBUZXh0dXJlTWFwcGVyUGFpbnRPcHRpb25zIHsKLXB1YmxpYzoKLSAg
ICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gc3VyZmFjZTsKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gbWFzazsKLSAgICBmbG9hdCBvcGFjaXR5OwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRy
YW5zZm9ybTsKLSAgICBJbnRTaXplIG9mZnNldDsKLSAgICBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJl
TWFwcGVyOwotICAgIFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMoKQotICAgICAgICA6IG9wYWNp
dHkoMSkKLSAgICAgICAgLCB0ZXh0dXJlTWFwcGVyKDApCi0gICAgeyB9Ci19OwotCi1jbGFzcyBU
ZXh0dXJlTWFwcGVyTm9kZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyQW5pbWF0aW9uQ2xpZW50IHsK
LQotcHVibGljOgotICAgIC8vIFRoaXMgc2V0IG9mIGZsYWdzIGhlbHAgdXMgZGVmZXIgd2hpY2gg
cHJvcGVydGllcyBvZiB0aGUgbGF5ZXIgaGF2ZSBiZWVuCi0gICAgLy8gbW9kaWZpZWQgYnkgdGhl
IGNvbXBvc2l0b3IsIHNvIHdlIGNhbiBrbm93IHdoYXQgdG8gbG9vayBmb3IgaW4gdGhlIG5leHQg
Zmx1c2guCi0gICAgZW51bSBDaGFuZ2VNYXNrIHsKLSAgICAgICAgTm9DaGFuZ2VzID0gICAgICAg
ICAgICAgICAgIDAsCi0KLSAgICAgICAgUGFyZW50Q2hhbmdlID0gICAgICAgICAgICAgICgxTCA8
PCAwKSwKLSAgICAgICAgQ2hpbGRyZW5DaGFuZ2UgPSAgICAgICAgICAgICgxTCA8PCAxKSwKLSAg
ICAgICAgTWFza0xheWVyQ2hhbmdlID0gICAgICAgICAgICgxTCA8PCAyKSwKLSAgICAgICAgUG9z
aXRpb25DaGFuZ2UgPSAgICAgICAgICAgICgxTCA8PCAzKSwKLQotICAgICAgICBBbmNob3JQb2lu
dENoYW5nZSA9ICAgICAgICAgKDFMIDw8IDQpLAotICAgICAgICBTaXplQ2hhbmdlICA9ICAgICAg
ICAgICAgICAgKDFMIDw8IDUpLAotICAgICAgICBUcmFuc2Zvcm1DaGFuZ2UgPSAgICAgICAgICAg
KDFMIDw8IDYpLAotICAgICAgICBDb250ZW50Q2hhbmdlID0gICAgICAgICAgICAgKDFMIDw8IDcp
LAotCi0gICAgICAgIENvbnRlbnRzT3JpZW50YXRpb25DaGFuZ2UgPSAoMUwgPDwgOSksCi0gICAg
ICAgIE9wYWNpdHlDaGFuZ2UgPSAgICAgICAgICAgICAoMUwgPDwgMTApLAotICAgICAgICBDb250
ZW50c1JlY3RDaGFuZ2UgPSAgICAgICAgKDFMIDw8IDExKSwKLQotICAgICAgICBQcmVzZXJ2ZXMz
RENoYW5nZSA9ICAgICAgICAgKDFMIDw8IDEyKSwKLSAgICAgICAgTWFza3NUb0JvdW5kc0NoYW5n
ZSA9ICAgICAgICgxTCA8PCAxMyksCi0gICAgICAgIERyYXdzQ29udGVudENoYW5nZSA9ICAgICAg
ICAoMUwgPDwgMTQpLAotICAgICAgICBDb250ZW50c09wYXF1ZUNoYW5nZSA9ICAgICAgKDFMIDw8
IDE1KSwKLQotICAgICAgICBCYWNrZmFjZVZpc2liaWxpdHlDaGFuZ2UgPSAgKDFMIDw8IDE2KSwK
LSAgICAgICAgQ2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2UgPSAgICgxTCA8PCAxNyksCi0gICAgICAg
IERpc3BsYXlDaGFuZ2UgPSAgICAgICAgICAgICAoMUwgPDwgMTgpLAotICAgICAgICBCYWNrZ3Jv
dW5kQ29sb3JDaGFuZ2UgPSAgICAgKDFMIDw8IDE5KSwKLQotICAgICAgICBSZXBsaWNhTGF5ZXJD
aGFuZ2UgPSAgICAgICAgKDFMIDw8IDIwKSwKLSAgICAgICAgQW5pbWF0aW9uQ2hhbmdlID0gICAg
ICAgICAgICgxTCA8PCAyMSkKLSAgICB9OwotCi0gICAgZW51bSBTeW5jT3B0aW9ucyB7Ci0gICAg
ICAgIFRyYXZlcnNlRGVzY2VuZGFudHMgPSAxLAotICAgICAgICBDb21wdXRhdGlvbnNPbmx5ID0g
MgotICAgIH07Ci0KLSAgICBUZXh0dXJlTWFwcGVyTm9kZSgpCi0gICAgICAgIDogbV9wYXJlbnQo
MCkKLSAgICAgICAgLCBtX2VmZmVjdFRhcmdldCgwKQotICAgICAgICAsIG1fY29udGVudHNMYXll
cigwKQotICAgICAgICAsIG1fb3BhY2l0eSgxKQotICAgICAgICAsIG1fY2VudGVyWigwKQotICAg
ICAgICAsIG1fc2hvdWxkVXBkYXRlQmFja2luZ1N0b3JlRnJvbUxheWVyKHRydWUpCi0gICAgICAg
ICwgbV90ZXh0dXJlTWFwcGVyKDApCi0gICAgeyB9Ci0KLSAgICB2aXJ0dWFsIH5UZXh0dXJlTWFw
cGVyTm9kZSgpOwotCi0gICAgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZShHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlciosIGludCBzeW5jT3B0aW9ucyA9IDApOwotICAgIHZvaWQgc3luY0NvbXBv
c2l0aW5nU3RhdGUoR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqLCBUZXh0dXJlTWFwcGVyKiwg
aW50IHN5bmNPcHRpb25zID0gMCk7Ci0gICAgdm9pZCBzeW5jQW5pbWF0aW9uc1JlY3Vyc2l2ZWx5
KCk7Ci0gICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpKTsgfQotICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IHZhbHVlKSB7
IG1fb3BhY2l0eSA9IHZhbHVlOyB9Ci0gICAgdm9pZCBzZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVN
YXBwZXIqIHRleG1hcCkgeyBtX3RleHR1cmVNYXBwZXIgPSB0ZXhtYXA7IH0KLSAgICBib29sIGRl
c2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkgY29uc3Q7Ci0KLSAgICB2b2lk
IHBhaW50KCk7Ci0KLSAgICB2b2lkIHNldFNob3VsZFVwZGF0ZUJhY2tpbmdTdG9yZUZyb21MYXll
cihib29sIGIpIHsgbV9zaG91bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5ZXIgPSBiOyB9Ci0g
ICAgdm9pZCBzZXRCYWNraW5nU3RvcmUoVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZSogYmFja2lu
Z1N0b3JlKSB7IG1fYmFja2luZ1N0b3JlID0gYmFja2luZ1N0b3JlOyB9Ci0gICAgUGFzc1JlZlB0
cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoKSB7IHJldHVybiBtX2Jh
Y2tpbmdTdG9yZTsgfQotICAgIHZvaWQgY2xlYXJCYWNraW5nU3RvcmVzUmVjdXJzaXZlKCk7Ci0K
LXByaXZhdGU6Ci0gICAgVGV4dHVyZU1hcHBlck5vZGUqIHJvb3RMYXllcigpOwotICAgIHZvaWQg
Y29tcHV0ZVRyYW5zZm9ybXNSZWN1cnNpdmUoKTsKLSAgICB2b2lkIGNvbXB1dGVPdmVybGFwc0lm
TmVlZGVkKCk7Ci0gICAgdm9pZCBjb21wdXRlVGlsZXMoKTsKLSAgICBJbnRSZWN0IGludGVybWVk
aWF0ZVN1cmZhY2VSZWN0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Ci0gICAgSW50UmVj
dCBpbnRlcm1lZGlhdGVTdXJmYWNlUmVjdCgpOwotICAgIHZvaWQgc3dhcENvbnRlbnRzQnVmZmVy
cygpOwotICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0Rm9yVGlsZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiB0b3RhbFRhcmdldFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QpIGNvbnN0OwotICAg
IHZvaWQgaW52YWxpZGF0ZVZpZXdwb3J0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgbm90
aWZ5Q2hhbmdlKENoYW5nZU1hc2spOwotICAgIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGVTZWxm
KEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBncmFwaGljc0xheWVyLCBUZXh0dXJlTWFwcGVy
KiB0ZXh0dXJlTWFwcGVyKTsKLQotICAgIHN0YXRpYyBpbnQgY29tcGFyZUdyYXBoaWNzTGF5ZXJz
WlZhbHVlKGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpOwotICAgIHN0YXRpYyB2b2lkIHNv
cnRCeVpPcmRlcihWZWN0b3I8VGV4dHVyZU1hcHBlck5vZGUqID4mIGFycmF5LCBpbnQgZmlyc3Qs
IGludCBsYXN0KTsKLQotICAgIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIHsg
cmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9iYWNraW5nU3RvcmUtPnRleHR1cmUoKSA6IDA7IH0K
LQotICAgIHZvaWQgcGFpbnRSZWN1cnNpdmUoY29uc3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9u
cyYpOwotICAgIHZvaWQgcGFpbnRTZWxmKGNvbnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMm
KTsKLSAgICB2b2lkIHBhaW50U2VsZkFuZENoaWxkcmVuKGNvbnN0IFRleHR1cmVNYXBwZXJQYWlu
dE9wdGlvbnMmKTsKLSAgICB2b2lkIHBhaW50U2VsZkFuZENoaWxkcmVuV2l0aFJlcGxpY2EoY29u
c3QgVGV4dHVyZU1hcHBlclBhaW50T3B0aW9ucyYpOwotICAgIHZvaWQgdXBkYXRlQmFja2luZ1N0
b3JlKFRleHR1cmVNYXBwZXIqLCBHcmFwaGljc0xheWVyKik7Ci0KLSAgICB2b2lkIHN5bmNBbmlt
YXRpb25zKCk7Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdDsKLSAgICBib29sIHNob3VsZFBh
aW50VG9JbnRlcm1lZGlhdGVTdXJmYWNlKCkgY29uc3Q7Ci0KLSAgICBMYXllclRyYW5zZm9ybSBt
X3RyYW5zZm9ybTsKLQotICAgIGlubGluZSBGbG9hdFJlY3QgbGF5ZXJSZWN0KCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBtX3NpemUp
OwotICAgIH0KLQotICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyTm9kZSo+IG1fY2hpbGRyZW47Ci0g
ICAgVGV4dHVyZU1hcHBlck5vZGUqIG1fcGFyZW50OwotICAgIFRleHR1cmVNYXBwZXJOb2RlKiBt
X2VmZmVjdFRhcmdldDsKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gbV9i
YWNraW5nU3RvcmU7Ci0gICAgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIqIG1fY29udGVudHNM
YXllcjsKLSAgICBGbG9hdFNpemUgbV9zaXplOwotICAgIGZsb2F0IG1fb3BhY2l0eTsKLSAgICBm
bG9hdCBtX2NlbnRlclo7Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBib29sIG1fc2hvdWxkVXBk
YXRlQmFja2luZ1N0b3JlRnJvbUxheWVyOwotCi0gICAgc3RydWN0IFN0YXRlIHsKLSAgICAgICAg
RmxvYXRQb2ludCBwb3M7Ci0gICAgICAgIEZsb2F0UG9pbnQzRCBhbmNob3JQb2ludDsKLSAgICAg
ICAgRmxvYXRTaXplIHNpemU7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9y
bTsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRyZW5UcmFuc2Zvcm07Ci0gICAg
ICAgIGZsb2F0IG9wYWNpdHk7Ci0gICAgICAgIEZsb2F0UmVjdCBjb250ZW50c1JlY3Q7Ci0gICAg
ICAgIEZsb2F0UmVjdCBuZWVkc0Rpc3BsYXlSZWN0OwotICAgICAgICBpbnQgZGVzY2VuZGFudHNX
aXRoQ29udGVudDsKLSAgICAgICAgVGV4dHVyZU1hcHBlck5vZGUqIG1hc2tMYXllcjsKLSAgICAg
ICAgVGV4dHVyZU1hcHBlck5vZGUqIHJlcGxpY2FMYXllcjsKLSAgICAgICAgYm9vbCBwcmVzZXJ2
ZXMzRCA6IDE7Ci0gICAgICAgIGJvb2wgbWFza3NUb0JvdW5kcyA6IDE7Ci0gICAgICAgIGJvb2wg
ZHJhd3NDb250ZW50IDogMTsKLSAgICAgICAgYm9vbCBjb250ZW50c09wYXF1ZSA6IDE7Ci0gICAg
ICAgIGJvb2wgYmFja2ZhY2VWaXNpYmlsaXR5IDogMTsKLSAgICAgICAgYm9vbCB2aXNpYmxlIDog
MTsKLSAgICAgICAgYm9vbCBuZWVkc0Rpc3BsYXk6IDE7Ci0gICAgICAgIGJvb2wgbWlnaHRIYXZl
T3ZlcmxhcHMgOiAxOwotICAgICAgICBib29sIG5lZWRzUmVwYWludDsKLSAgICAgICAgU3RhdGUo
KQotICAgICAgICAgICAgOiBvcGFjaXR5KDEuZikKLSAgICAgICAgICAgICwgbWFza0xheWVyKDAp
Ci0gICAgICAgICAgICAsIHJlcGxpY2FMYXllcigwKQotICAgICAgICAgICAgLCBwcmVzZXJ2ZXMz
RChmYWxzZSkKLSAgICAgICAgICAgICwgbWFza3NUb0JvdW5kcyhmYWxzZSkKLSAgICAgICAgICAg
ICwgZHJhd3NDb250ZW50KGZhbHNlKQotICAgICAgICAgICAgLCBjb250ZW50c09wYXF1ZShmYWxz
ZSkKLSAgICAgICAgICAgICwgYmFja2ZhY2VWaXNpYmlsaXR5KGZhbHNlKQotICAgICAgICAgICAg
LCB2aXNpYmxlKHRydWUpCi0gICAgICAgICAgICAsIG5lZWRzRGlzcGxheSh0cnVlKQotICAgICAg
ICAgICAgLCBtaWdodEhhdmVPdmVybGFwcyhmYWxzZSkKLSAgICAgICAgICAgICwgbmVlZHNSZXBh
aW50KGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgU3RhdGUgbV9z
dGF0ZTsKLSAgICBUZXh0dXJlTWFwcGVyKiBtX3RleHR1cmVNYXBwZXI7Ci0gICAgVGV4dHVyZU1h
cHBlckFuaW1hdGlvbnMgbV9hbmltYXRpb25zOwotfTsKLQotCi1UZXh0dXJlTWFwcGVyTm9kZSog
dG9UZXh0dXJlTWFwcGVyTm9kZShHcmFwaGljc0xheWVyKik7Ci0KLX0KLSNlbmRpZiAvLyBUZXh0
dXJlTWFwcGVyTm9kZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaAppbmRleCA0MmE1
ZjI0YjYxYjcxOTIxNzczMWUxNzY1NTgyNzZkZmJlMjA0ZjVjLi43NzgzOTY0ZmY1YWNlOThiOWVk
N2FjYWU2NjcyNTE0Mzc2MTVkNTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgK
QEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiAjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKQotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJOb2RlLmgiCisjaW5j
bHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCiAjaW5jbHVkZSAiV2luZG93R0xDb250ZXh0Lmgi
CiAjZW5kaWYKIApAQCAtNzIsNyArNzIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6
ZUlmTmVjZXNzYXJ5KCk7CiAKICAgICBib29sIG1faW5pdGlhbGl6ZWQ7Ci0gICAgV2ViQ29yZTo6
VGV4dHVyZU1hcHBlck5vZGUqIG1fcm9vdFRleHR1cmVNYXBwZXJOb2RlOworICAgIFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJMYXllciogbV9yb290VGV4dHVyZU1hcHBlckxheWVyOwogICAgIE93blB0
cjxXZWJDb3JlOjpXaW5kb3dHTENvbnRleHQ+IG1fY29udGV4dDsKICAgICBPd25QdHI8V2ViQ29y
ZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dEdMLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0R0wuY3BwCmluZGV4IDliZmEzZDBmZWRhNWYzZDg4ODk0MjhjM2Zm
YzUxNzIyOWJjOTY3ZTYuLjg4Y2Q2ZDcwYTRmNjBjYmIyODIyMGFiMDE2OTBlMGVjMTU3ZDZhMjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdDb250ZXh0R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3BwCkBAIC0yOCw3ICsyOCw3
IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fp
cm8uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyTm9kZS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgogI2luY2x1ZGUgIndl
YmtpdHdlYnZpZXdwcml2YXRlLmgiCiAjaW5jbHVkZSA8R0wvZ2wuaD4KICNpbmNsdWRlIDxjYWly
by5oPgpAQCAtNDMsNyArNDMsNyBAQCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQoV2ViS2l0V2ViVmlldyogd2ViVgogICAgIDogbV93
ZWJWaWV3KHdlYlZpZXcpCiAgICAgLCBtX3N5bmNUaW1lcih0aGlzLCAmQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0NvbnRleHQ6OnN5bmNMYXllcnNUaW1lb3V0KQogICAgICwgbV9pbml0aWFsaXplZChm
YWxzZSkKLSAgICAsIG1fcm9vdFRleHR1cmVNYXBwZXJOb2RlKDApCisgICAgLCBtX3Jvb3RUZXh0
dXJlTWFwcGVyTGF5ZXIoMCkKIHsKIH0KIApAQCAtNjksNyArNjksNyBAQCB2b2lkIEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0Ojppbml0aWFsaXplSWZOZWNlc3NhcnkoKQogCiBib29sIEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjplbmFibGVkKCkKIHsKLSAgICByZXR1cm4gbV9y
b290VGV4dHVyZU1hcHBlck5vZGUgJiYgbV90ZXh0dXJlTWFwcGVyOworICAgIHJldHVybiBtX3Jv
b3RUZXh0dXJlTWFwcGVyTGF5ZXIgJiYgbV90ZXh0dXJlTWFwcGVyOwogfQogCiAKQEAgLTkwLDcg
KzkwLDcgQEAgYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVuZGVyTGF5ZXJz
VG9XaW5kb3coY29uc3QgSW50UmVjdCYgY2xpcFJlY3QKICAgICBnbFZpZXdwb3J0KDAsIDAsIGFs
bG9jYXRpb24ud2lkdGgsIGFsbG9jYXRpb24uaGVpZ2h0KTsKIAogICAgIG1fdGV4dHVyZU1hcHBl
ci0+YmVnaW5QYWludGluZygpOwotICAgIG1fcm9vdFRleHR1cmVNYXBwZXJOb2RlLT5wYWludCgp
OworICAgIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllci0+cGFpbnQoKTsKICAgICBtX3RleHR1cmVN
YXBwZXItPmVuZFBhaW50aW5nKCk7CiAKICAgICBtX2NvbnRleHQtPmZpbmlzaERyYXdpbmcoKTsK
QEAgLTEwMSwxMiArMTAxLDEyIEBAIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6
OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBoCiB7CiAgICAgaWYg
KCFncmFwaGljc0xheWVyKSB7CiAgICAgICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXIuY2xlYXIoKTsK
LSAgICAgICAgbV9yb290VGV4dHVyZU1hcHBlck5vZGUgPSAwOworICAgICAgICBtX3Jvb3RUZXh0
dXJlTWFwcGVyTGF5ZXIgPSAwOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgbV9yb290
R3JhcGhpY3NMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICBtX3Jvb3RU
ZXh0dXJlTWFwcGVyTm9kZSA9IHRvVGV4dHVyZU1hcHBlck5vZGUobV9yb290R3JhcGhpY3NMYXll
ci5nZXQoKSk7CisgICAgbV9yb290VGV4dHVyZU1hcHBlckxheWVyID0gdG9UZXh0dXJlTWFwcGVy
TGF5ZXIobV9yb290R3JhcGhpY3NMYXllci5nZXQoKSk7CiAgICAgbV9yb290R3JhcGhpY3NMYXll
ci0+YWRkQ2hpbGQoZ3JhcGhpY3NMYXllcik7CiAgICAgbV9yb290R3JhcGhpY3NMYXllci0+c2V0
RHJhd3NDb250ZW50KHRydWUpOwogICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldE1hc2tzVG9C
b3VuZHMoZmFsc2UpOwpAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGdyYXBo
CiAgICAgZ2xWaWV3cG9ydCgwLCAwLCBhbGxvY2F0aW9uLndpZHRoLCBhbGxvY2F0aW9uLmhlaWdo
dCk7CiAKICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOwot
ICAgIG1fcm9vdFRleHR1cmVNYXBwZXJOb2RlLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1h
cHBlci5nZXQoKSk7CisgICAgbV9yb290VGV4dHVyZU1hcHBlckxheWVyLT5zZXRUZXh0dXJlTWFw
cGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CiAgICAgbV9yb290R3JhcGhpY3NMYXllci0+c3lu
Y0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiB9CiAKQEAgLTE3Myw3ICsxNzMs
NyBAQCB2b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzeW5jTGF5ZXJzVGltZW91
dChUaW1lcjxBY2NlbGVyYXRlZENvbXBvc2l0aQogCiAgICAgcmVuZGVyTGF5ZXJzVG9XaW5kb3co
SW50UmVjdCgpKTsKIAotICAgIGlmICh0b1RleHR1cmVNYXBwZXJOb2RlKG1fcm9vdEdyYXBoaWNz
TGF5ZXIuZ2V0KCkpLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQor
ICAgIGlmICh0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RHcmFwaGljc0xheWVyLmdldCgpKS0+
ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKICAgICAgICAgbV9zeW5j
VGltZXIuc3RhcnRPbmVTaG90KDEuMCAvIDYwLjApOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZy
YW1lLmNwcAppbmRleCAzOWI5ZDIwZDQ2ZWEyM2YwYzUxYmZkMjU4YmZhOTcyMWFhNGZkODVkLi4y
MTFmMGVmMjA5ZmZiNzBhOTcwZjE1MzA1MjA0N2U2MjUyYzI1NWFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJmcmFtZS5jcHAKQEAgLTEwNCw3ICsxMDQsNyBAQAogI2VuZGlmCiAjaWYgVVNFKFRFWFRV
UkVfTUFQUEVSKQogI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAi
dGV4bWFwL1RleHR1cmVNYXBwZXJOb2RlLmgiCisjaW5jbHVkZSAidGV4bWFwL1RleHR1cmVNYXBw
ZXJMYXllci5oIgogI2VuZGlmCiAjaW5jbHVkZSAid3RmL0hhc2hNYXAuaCIKICNpbmNsdWRlIDxR
TXVsdGlNYXA+CkBAIC0zMzEsNyArMzMxLDcgQEAgdm9pZCBRV2ViRnJhbWVQcml2YXRlOjpyZW5k
ZXJGcm9tVGlsZWRCYWNraW5nU3RvcmUoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb24KICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKIHZv
aWQgUVdlYkZyYW1lUHJpdmF0ZTo6cmVuZGVyQ29tcG9zaXRlZExheWVycyhHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNsaXApCiB7Ci0gICAgaWYgKCFyb290VGV4dHVy
ZU1hcHBlck5vZGUgfHwgIXRleHR1cmVNYXBwZXIpCisgICAgaWYgKCFyb290VGV4dHVyZU1hcHBl
ckxheWVyIHx8ICF0ZXh0dXJlTWFwcGVyKQogICAgICAgICByZXR1cm47CiAKICAgICB0ZXh0dXJl
TWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoY29udGV4dCk7CkBAIC0zNDUsMTEgKzM0NSwxMSBA
QCB2b2lkIFFXZWJGcmFtZVByaXZhdGU6OnJlbmRlckNvbXBvc2l0ZWRMYXllcnMoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbgogICAgICAgICAgICAgICAgIDAsIDAsIDEsIDAsCiAg
ICAgICAgICAgICAgICAgdHJhbnNmb3JtLm0zMSgpLCB0cmFuc2Zvcm0ubTMyKCksIDAsIHRyYW5z
Zm9ybS5tMzMoKQogICAgICAgICAgICAgICAgICk7Ci0gICAgcm9vdFRleHR1cmVNYXBwZXJOb2Rl
LT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKLSAgICByb290VGV4dHVyZU1hcHBlck5vZGUtPnNldE9w
YWNpdHkocGFpbnRlci0+b3BhY2l0eSgpKTsKKyAgICByb290VGV4dHVyZU1hcHBlckxheWVyLT5z
ZXRUcmFuc2Zvcm0obWF0cml4KTsKKyAgICByb290VGV4dHVyZU1hcHBlckxheWVyLT5zZXRPcGFj
aXR5KHBhaW50ZXItPm9wYWNpdHkoKSk7CiAgICAgdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGlu
ZygpOwogICAgIHRleHR1cmVNYXBwZXItPmJlZ2luQ2xpcChtYXRyaXgsIGNsaXApOwotICAgIHJv
b3RUZXh0dXJlTWFwcGVyTm9kZS0+cGFpbnQoKTsKKyAgICByb290VGV4dHVyZU1hcHBlckxheWVy
LT5wYWludCgpOwogICAgIHRleHR1cmVNYXBwZXItPmVuZENsaXAoKTsKICAgICB0ZXh0dXJlTWFw
cGVyLT5lbmRQYWludGluZygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYmZyYW1lLmggYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuaAppbmRleCAzNWZj
ZTRiZWJmYzA5MmQ1MzkxNjVkZWJhZmIzOTViYzUxMTQ5ODZmLi5mZjE1Nzc3MWYwYmY0OTM2YTAx
NDMxZWY0NDM1YTIwMGRhYWQ3NWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2ViZnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuaApAQCAtNjAs
NyArNjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgV2lkZ2V0UHJpdmF0ZTsK
ICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVudFF0OwogICAgIGNsYXNzIENocm9tZUNsaWVudFF0
OwotICAgIGNsYXNzIFRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ7CisgICAgY2xhc3MgVGV4dHVy
ZU1hcHBlckxheWVyQ2xpZW50UXQ7CiB9CiBjbGFzcyBRV2ViRnJhbWVEYXRhOwogY2xhc3MgUVdl
YkhpdFRlc3RSZXN1bHRQcml2YXRlOwpAQCAtMjM0LDcgKzIzNCw3IEBAIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIFdlYkNvcmU6OldpZGdldFByaXZhdGU7CiAgICAgZnJpZW5kIGNsYXNzIFdl
YkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ7CiAgICAgZnJpZW5kIGNsYXNzIFdlYkNvcmU6OkNo
cm9tZUNsaWVudFF0OwotICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTm9k
ZUNsaWVudFF0OworICAgIGZyaWVuZCBjbGFzcyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXJD
bGllbnRRdDsKICAgICBRV2ViRnJhbWVQcml2YXRlICpkOwogICAgIFFfUFJJVkFURV9TTE9UKGQs
IHZvaWQgX3Ffb3JpZW50YXRpb25DaGFuZ2VkKCkpCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFt
ZV9wLmgKaW5kZXggMWRiYTZhNTllYWNmZWRhMzc4ODBkNGUyMzViOWI1NjdhMTY0YmE5YS4uNGFi
N2I5NzAwZWQ1MzczOWI3OTBmMjI0YmFjZDAzNWQ1NGNhNDkyZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2ViZnJhbWVfcC5oCkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBGcmFtZVZpZXc7CiAgICAgY2xhc3MgSFRNTEZyYW1lT3duZXJFbGVtZW50OwogICAgIGNs
YXNzIFNjcm9sbGJhcjsKLSAgICBjbGFzcyBUZXh0dXJlTWFwcGVyTm9kZTsKKyAgICBjbGFzcyBU
ZXh0dXJlTWFwcGVyTGF5ZXI7CiB9CiBjbGFzcyBRV2ViUGFnZTsKIApAQCAtODUsNyArODUsNyBA
QCBwdWJsaWM6CiAgICAgICAgICwgbWFyZ2luV2lkdGgoLTEpCiAgICAgICAgICwgbWFyZ2luSGVp
Z2h0KC0xKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKFRFWFRVUkVf
TUFQUEVSKQotICAgICAgICAsIHJvb3RUZXh0dXJlTWFwcGVyTm9kZSgwKQorICAgICAgICAsIHJv
b3RUZXh0dXJlTWFwcGVyTGF5ZXIoMCkKICNlbmRpZgogICAgICAgICB7fQogICAgIHZvaWQgaW5p
dChRV2ViRnJhbWUqIHFmcmFtZSwgUVdlYkZyYW1lRGF0YSogZnJhbWVEYXRhKTsKQEAgLTEyNSw3
ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgaW50IG1hcmdpbldpZHRoOwogICAgIGludCBtYXJnaW5I
ZWlnaHQ7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9N
QVBQRVIpCi0gICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlck5vZGUqIHJvb3RUZXh0dXJlTWFwcGVy
Tm9kZTsKKyAgICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqIHJvb3RUZXh0dXJlTWFwcGVy
TGF5ZXI7CiAgICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IHRleHR1cmVNYXBwZXI7
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Q
YWdlQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xp
ZW50UXQuY3BwCmluZGV4IDQ1ZGNmYmJlMTIzZGE2ZTJjMTYzNjBjMTcxZWY4ODI3MTkzMTBlMzQu
LmYzYTI3YjQzZDY4ZDg4MzBiM2QwMzM5YzUyN2ZhZTc1NzU0YWZiZjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAKQEAgLTI5LDU0ICsy
OSw1NCBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVS
RV9NQVBQRVIpCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgInRleG1hcC9U
ZXh0dXJlTWFwcGVyTm9kZS5oIgorI2luY2x1ZGUgInRleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIu
aCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKLVRleHR1cmVNYXBwZXJOb2RlQ2xp
ZW50UXQ6OlRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQoUVdlYkZyYW1lKiBmcmFtZSwgR3JhcGhp
Y3NMYXllciogbGF5ZXIpCitUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnRRdDo6VGV4dHVyZU1hcHBl
ckxheWVyQ2xpZW50UXQoUVdlYkZyYW1lKiBmcmFtZSwgR3JhcGhpY3NMYXllciogbGF5ZXIpCiAg
ICAgOiBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV9yb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xh
eWVyOjpjcmVhdGUoMCkpCiB7Ci0gICAgbV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJOb2Rl
ID0gcm9vdE5vZGUoKTsKKyAgICBtX2ZyYW1lLT5kLT5yb290VGV4dHVyZU1hcHBlckxheWVyID0g
cm9vdExheWVyKCk7CiAgICAgbV9yb290R3JhcGhpY3NMYXllci0+YWRkQ2hpbGQobGF5ZXIpOwog
ICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7CiAgICAgbV9y
b290R3JhcGhpY3NMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CiAgICAgbV9yb290R3Jh
cGhpY3NMYXllci0+c2V0U2l6ZShJbnRTaXplKDEsIDEpKTsKIH0KIAotdm9pZCBUZXh0dXJlTWFw
cGVyTm9kZUNsaWVudFF0OjpzZXRUZXh0dXJlTWFwcGVyKGNvbnN0IFBhc3NPd25QdHI8VGV4dHVy
ZU1hcHBlcj4mIHRleHR1cmVNYXBwZXIpCit2b2lkIFRleHR1cmVNYXBwZXJMYXllckNsaWVudFF0
OjpzZXRUZXh0dXJlTWFwcGVyKGNvbnN0IFBhc3NPd25QdHI8VGV4dHVyZU1hcHBlcj4mIHRleHR1
cmVNYXBwZXIpCiB7CiAgICAgbV9mcmFtZS0+ZC0+dGV4dHVyZU1hcHBlciA9IHRleHR1cmVNYXBw
ZXI7Ci0gICAgbV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJOb2RlLT5zZXRUZXh0dXJlTWFw
cGVyKG1fZnJhbWUtPmQtPnRleHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIG1fZnJhbWUtPmQtPnJv
b3RUZXh0dXJlTWFwcGVyTGF5ZXItPnNldFRleHR1cmVNYXBwZXIobV9mcmFtZS0+ZC0+dGV4dHVy
ZU1hcHBlci5nZXQoKSk7CiB9CiAKLVRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ6On5UZXh0dXJl
TWFwcGVyTm9kZUNsaWVudFF0KCkKK1RleHR1cmVNYXBwZXJMYXllckNsaWVudFF0Ojp+VGV4dHVy
ZU1hcHBlckxheWVyQ2xpZW50UXQoKQogewotICAgIG1fZnJhbWUtPmQtPnJvb3RUZXh0dXJlTWFw
cGVyTm9kZSA9IDA7CisgICAgbV9mcmFtZS0+ZC0+cm9vdFRleHR1cmVNYXBwZXJMYXllciA9IDA7
CiB9CiAKLXZvaWQgVGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdDo6c3luY1Jvb3RMYXllcigpCit2
b2lkIFRleHR1cmVNYXBwZXJMYXllckNsaWVudFF0OjpzeW5jUm9vdExheWVyKCkKIHsKICAgICBt
X3Jvb3RHcmFwaGljc0xheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHko
KTsKIH0KIAotVGV4dHVyZU1hcHBlck5vZGUqIFRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ6OnJv
b3ROb2RlKCkKK1RleHR1cmVNYXBwZXJMYXllciogVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50UXQ6
OnJvb3RMYXllcigpCiB7Ci0gICAgcmV0dXJuIHRvVGV4dHVyZU1hcHBlck5vZGUobV9yb290R3Jh
cGhpY3NMYXllci5nZXQoKSk7CisgICAgcmV0dXJuIHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9v
dEdyYXBoaWNzTGF5ZXIuZ2V0KCkpOwogfQogCiAKIHZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6OnNl
dFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIGlmIChsYXll
cikgewotICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCA9IGFkb3B0UHRyKG5ldyBUZXh0
dXJlTWFwcGVyTm9kZUNsaWVudFF0KHBhZ2UtPm1haW5GcmFtZSgpLCBsYXllcikpOwotICAgICAg
ICB0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVy
OjpjcmVhdGUoKSk7Ci0gICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zeW5jUm9vdExh
eWVyKCk7CisgICAgICAgIFRleHR1cmVNYXBwZXJMYXllckNsaWVudCA9IGFkb3B0UHRyKG5ldyBU
ZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnRRdChwYWdlLT5tYWluRnJhbWUoKSwgbGF5ZXIpKTsKKyAg
ICAgICAgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50LT5zZXRUZXh0dXJlTWFwcGVyKFRleHR1cmVN
YXBwZXI6OmNyZWF0ZSgpKTsKKyAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50LT5zeW5j
Um9vdExheWVyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdGV4dHVyZU1hcHBlck5v
ZGVDbGllbnQuY2xlYXIoKTsKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQuY2xlYXIoKTsK
IH0KIAogdm9pZCBQYWdlQ2xpZW50UVdpZGdldDo6bWFya0ZvclN5bmMoYm9vbCBzY2hlZHVsZVN5
bmMpCkBAIC04OCwxMiArODgsMTIgQEAgdm9pZCBQYWdlQ2xpZW50UVdpZGdldDo6bWFya0ZvclN5
bmMoYm9vbCBzY2hlZHVsZVN5bmMpCiAKIHZvaWQgUGFnZUNsaWVudFFXaWRnZXQ6OnN5bmNMYXll
cnMoVGltZXI8UGFnZUNsaWVudFFXaWRnZXQ+KikKIHsKLSAgICBpZiAodGV4dHVyZU1hcHBlck5v
ZGVDbGllbnQpCi0gICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5zeW5jUm9vdExheWVy
KCk7CisgICAgaWYgKFRleHR1cmVNYXBwZXJMYXllckNsaWVudCkKKyAgICAgICAgVGV4dHVyZU1h
cHBlckxheWVyQ2xpZW50LT5zeW5jUm9vdExheWVyKCk7CiAgICAgUVdlYkZyYW1lUHJpdmF0ZTo6
Y29yZShwYWdlLT5tYWluRnJhbWUoKSktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNs
dWRpbmdTdWJmcmFtZXMoKTsKLSAgICBpZiAoIXRleHR1cmVNYXBwZXJOb2RlQ2xpZW50KQorICAg
IGlmICghVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50KQogICAgICAgICByZXR1cm47Ci0gICAgaWYg
KHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5yb290Tm9kZSgpLT5kZXNjZW5kYW50c09yU2VsZkhh
dmVSdW5uaW5nQW5pbWF0aW9ucygpICYmICFzeW5jVGltZXIuaXNBY3RpdmUoKSkKKyAgICBpZiAo
VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50LT5yb290TGF5ZXIoKS0+ZGVzY2VuZGFudHNPclNlbGZI
YXZlUnVubmluZ0FuaW1hdGlvbnMoKSAmJiAhc3luY1RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAg
IHN5bmNUaW1lci5zdGFydE9uZVNob3QoMS4wIC8gNjAuMCk7CiAgICAgdXBkYXRlKHZpZXctPnJl
Y3QoKSk7CiB9CkBAIC0yMzksMTcgKzIzOSwxNyBAQCB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NX
aWRnZXQ6OmNyZWF0ZU9yRGVsZXRlT3ZlcmxheSgpCiB2b2lkIFBhZ2VDbGllbnRRR3JhcGhpY3NX
aWRnZXQ6OnN5bmNMYXllcnMoKQogewogI2lmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICBpZiAo
dGV4dHVyZU1hcHBlck5vZGVDbGllbnQpCi0gICAgICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50
LT5zeW5jUm9vdExheWVyKCk7CisgICAgaWYgKFRleHR1cmVNYXBwZXJMYXllckNsaWVudCkKKyAg
ICAgICAgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50LT5zeW5jUm9vdExheWVyKCk7CiAjZW5kaWYK
IAogICAgIFFXZWJGcmFtZVByaXZhdGU6OmNvcmUocGFnZS0+bWFpbkZyYW1lKCkpLT52aWV3KCkt
PnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CiAKICNpZiBVU0UoVEVY
VFVSRV9NQVBQRVIpCi0gICAgaWYgKCF0ZXh0dXJlTWFwcGVyTm9kZUNsaWVudCkKKyAgICBpZiAo
IVRleHR1cmVNYXBwZXJMYXllckNsaWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHRl
eHR1cmVNYXBwZXJOb2RlQ2xpZW50LT5yb290Tm9kZSgpLT5kZXNjZW5kYW50c09yU2VsZkhhdmVS
dW5uaW5nQW5pbWF0aW9ucygpICYmICFzeW5jVGltZXIuaXNBY3RpdmUoKSkKKyAgICBpZiAoVGV4
dHVyZU1hcHBlckxheWVyQ2xpZW50LT5yb290TGF5ZXIoKS0+ZGVzY2VuZGFudHNPclNlbGZIYXZl
UnVubmluZ0FuaW1hdGlvbnMoKSAmJiAhc3luY1RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIHN5
bmNUaW1lci5zdGFydE9uZVNob3QoMS4wIC8gNjAuMCk7CiAgICAgdXBkYXRlKHZpZXctPmJvdW5k
aW5nUmVjdCgpLnRvQWxpZ25lZFJlY3QoKSk7CiAjZW5kaWYKQEAgLTI1OSwxOCArMjU5LDE4IEBA
IHZvaWQgUGFnZUNsaWVudFFHcmFwaGljc1dpZGdldDo6c3luY0xheWVycygpCiB2b2lkIFBhZ2VD
bGllbnRRR3JhcGhpY3NXaWRnZXQ6OnNldFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIq
IGxheWVyKQogewogICAgIGlmIChsYXllcikgewotICAgICAgICB0ZXh0dXJlTWFwcGVyTm9kZUNs
aWVudCA9IGFkb3B0UHRyKG5ldyBUZXh0dXJlTWFwcGVyTm9kZUNsaWVudFF0KHBhZ2UtPm1haW5G
cmFtZSgpLCBsYXllcikpOworICAgICAgICBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQgPSBhZG9w
dFB0cihuZXcgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50UXQocGFnZS0+bWFpbkZyYW1lKCksIGxh
eWVyKSk7CiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQogICAgICAgICBRR3JhcGhpY3NWaWV3
KiBncmFwaGljc1ZpZXcgPSB2aWV3LT5zY2VuZSgpLT52aWV3cygpWzBdOwogICAgICAgICBpZiAo
Z3JhcGhpY3NWaWV3ICYmIGdyYXBoaWNzVmlldy0+dmlld3BvcnQoKSAmJiBncmFwaGljc1ZpZXct
PnZpZXdwb3J0KCktPmluaGVyaXRzKCJRR0xXaWRnZXQiKSkgewotICAgICAgICAgICAgdGV4dHVy
ZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlcjo6Y3JlYXRl
KFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpKTsKKyAgICAgICAgICAgIFRleHR1cmVNYXBwZXJM
YXllckNsaWVudC0+c2V0VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVy
ZU1hcHBlcjo6T3BlbkdMTW9kZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAj
ZW5kaWYKLSAgICAgICAgdGV4dHVyZU1hcHBlck5vZGVDbGllbnQtPnNldFRleHR1cmVNYXBwZXIo
VGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCkpOworICAgICAgICBUZXh0dXJlTWFwcGVyTGF5ZXJDbGll
bnQtPnNldFRleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIHRleHR1cmVNYXBwZXJOb2RlQ2xpZW50LmNsZWFyKCk7CisgICAg
VGV4dHVyZU1hcHBlckxheWVyQ2xpZW50LmNsZWFyKCk7CiB9CiAjZWxzZQogdm9pZCBQYWdlQ2xp
ZW50UUdyYXBoaWNzV2lkZ2V0OjpzZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBs
YXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNs
aWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5o
CmluZGV4IDM0ODA0NDlkMmI5ODMwZTY5MmY3Y2UzOGViNWY4MDYzMjlkMDZmNDkuLjAzODhjMjAy
M2NkNThiNjRjZjljZmFhZmQxNjA5YjVmYWEzZWVmZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvUGFnZUNsaWVudFF0LmgKKysrIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9QYWdlQ2xpZW50UXQuaApAQCAtNDQsMTMgKzQ0LDEzIEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVT
RShURVhUVVJFX01BUFBFUikKLWNsYXNzIFRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQgeworY2xh
c3MgVGV4dHVyZU1hcHBlckxheWVyQ2xpZW50UXQgewogcHVibGljOgotICAgIFRleHR1cmVNYXBw
ZXJOb2RlQ2xpZW50UXQoUVdlYkZyYW1lKiwgR3JhcGhpY3NMYXllciopOwotICAgIHZpcnR1YWwg
flRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQoKTsKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXJDbGll
bnRRdChRV2ViRnJhbWUqLCBHcmFwaGljc0xheWVyKik7CisgICAgdmlydHVhbCB+VGV4dHVyZU1h
cHBlckxheWVyQ2xpZW50UXQoKTsKICAgICB2b2lkIHNldFRleHR1cmVNYXBwZXIoY29uc3QgUGFz
c093blB0cjxUZXh0dXJlTWFwcGVyPiYpOwogICAgIHZvaWQgc3luY1Jvb3RMYXllcigpOwotICAg
IFRleHR1cmVNYXBwZXJOb2RlKiByb290Tm9kZSgpOworICAgIFRleHR1cmVNYXBwZXJMYXllciog
cm9vdExheWVyKCk7CiAKIHByaXZhdGU6CiAgICAgUVdlYkZyYW1lKiBtX2ZyYW1lOwpAQCAtMTE0
LDcgKzExNCw3IEBAIHB1YmxpYzoKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIFRpbWVyPFBhZ2VDbGllbnRRV2lkZ2V0PiBzeW5j
VGltZXI7Ci0gICAgT3duUHRyPFRleHR1cmVNYXBwZXJOb2RlQ2xpZW50UXQ+IHRleHR1cmVNYXBw
ZXJOb2RlQ2xpZW50OworICAgIE93blB0cjxUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnRRdD4gVGV4
dHVyZU1hcHBlckxheWVyQ2xpZW50OwogI2VuZGlmCiB9OwogCkBAIC0yMjMsNyArMjIzLDcgQEAg
cHVibGljOgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2lmIFVTRShURVhU
VVJFX01BUFBFUikKLSAgICBPd25QdHI8VGV4dHVyZU1hcHBlck5vZGVDbGllbnRRdD4gdGV4dHVy
ZU1hcHBlck5vZGVDbGllbnQ7CisgICAgT3duUHRyPFRleHR1cmVNYXBwZXJMYXllckNsaWVudFF0
PiBUZXh0dXJlTWFwcGVyTGF5ZXJDbGllbnQ7CiAjZWxzZQogICAgIFFXZWFrUG9pbnRlcjxRR3Jh
cGhpY3NPYmplY3Q+IHJvb3RHcmFwaGljc0xheWVyOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcAppbmRleCA0YzRm
NjE4NDg5NjI5ZTBhZTU5YTJiMTRiYTZlYTFmYTJlMjE1YTU2Li4xMDlhZmZjZGI4YWVhZjE5ZTU2
NWZhMmZlZjRmZTQwM2NlYmI4ZGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNs
dWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5j
bHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJOb2RlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCiAjaW5jbHVkZSAiVXBk
YXRlSW5mby5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUg
IldlYkxheWVyVHJlZUluZm8uaCIKQEAgLTE0OSw4ICsxNDksOCBAQCBjbGFzcyBTZXRSb290TGF5
ZXJNZXNzYWdlCiBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IExheWVyVHJlZUhvc3RQcm94eTo6
Y3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQogewogICAgIEdyYXBoaWNzTGF5ZXIqIG5l
d0xheWVyID0gbmV3IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKHRoaXMpOwotICAgIFRleHR1
cmVNYXBwZXJOb2RlKiBub2RlID0gdG9UZXh0dXJlTWFwcGVyTm9kZShuZXdMYXllcik7Ci0gICAg
bm9kZS0+c2V0U2hvdWxkVXBkYXRlQmFja2luZ1N0b3JlRnJvbUxheWVyKGZhbHNlKTsKKyAgICBU
ZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIobmV3TGF5ZXIp
OworICAgIGxheWVyLT5zZXRTaG91bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoZmFsc2Up
OwogICAgIHJldHVybiBhZG9wdFB0cihuZXdMYXllcik7CiB9CiAKQEAgLTE3OCwxMiArMTc4LDEy
IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0CiAgICAgaWYgKCFjdXJyZW50Um9vdExheWVyKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVy
ZU1hcHBlck5vZGUoY3VycmVudFJvb3RMYXllcik7CisgICAgVGV4dHVyZU1hcHBlckxheWVyKiBs
YXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGN1cnJlbnRSb290TGF5ZXIpOwogCi0gICAgaWYg
KCFub2RlKQorICAgIGlmICghbGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIG5vZGUtPnNl
dFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKKyAgICBsYXllci0+c2V0VGV4
dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+
YmVnaW5QYWludGluZygpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7CiAg
ICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2xp
cFJlY3QpOwpAQCAtMTk0LDEyICsxOTQsMTIgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBh
aW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXQKICAg
ICAgICAgY3VycmVudFJvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJP
bmx5KCk7CiAgICAgfQogCi0gICAgbm9kZS0+cGFpbnQoKTsKKyAgICBsYXllci0+cGFpbnQoKTsK
ICAgICBtX3RleHR1cmVNYXBwZXItPmVuZENsaXAoKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmVu
ZFBhaW50aW5nKCk7CiAKLSAgICBpZiAobm9kZS0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmlu
Z0FuaW1hdGlvbnMoKSkgewotICAgICAgICBub2RlLT5zeW5jQW5pbWF0aW9uc1JlY3Vyc2l2ZWx5
KCk7CisgICAgaWYgKGxheWVyLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9u
cygpKSB7CisgICAgICAgIGxheWVyLT5zeW5jQW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCk7CiAgICAg
ICAgIG1fdmlld3BvcnRVcGRhdGVUaW1lci5zdGFydE9uZVNob3QoMCk7CiAgICAgfQogfQpAQCAt
MjEwLDE2ICsyMTAsMTYgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9HcmFwaGlj
c0NvbnRleHQoUVBhaW50ZXIqIHBhaW50ZXIpCiAgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRl
eHR1cmVNYXBwZXI6OmNyZWF0ZSgpOwogICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2Vs
ZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpTb2Z0d2FyZU1vZGUpOwogICAgIHN5bmNS
ZW1vdGVDb250ZW50KCk7Ci0gICAgVGV4dHVyZU1hcHBlck5vZGUqIG5vZGUgPSB0b1RleHR1cmVN
YXBwZXJOb2RlKHJvb3RMYXllcigpKTsKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0g
dG9UZXh0dXJlTWFwcGVyTGF5ZXIocm9vdExheWVyKCkpOwogCi0gICAgaWYgKCFub2RlKQorICAg
IGlmICghbGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBoaWNzQ29udGV4dCBncmFw
aGljc0NvbnRleHQocGFpbnRlcik7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0Nv
bnRleHQoJmdyYXBoaWNzQ29udGV4dCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50
aW5nKCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZSgwKTsKLSAgICBub2RlLT5w
YWludCgpOworICAgIGxheWVyLT5wYWludCgpOwogICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFp
bnRpbmcoKTsKICAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgwKTsKIH0K
QEAgLTM0MywxMSArMzQzLDExIEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290TGF5
ZXJJRChXZWJMYXllcklEIGxheWVySUQpCiBQYXNzUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBM
YXllclRyZWVIb3N0UHJveHk6OmdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEIGlkKQogewogICAg
IGVuc3VyZUxheWVyKGlkKTsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVy
ZU1hcHBlck5vZGUobGF5ZXJCeUlEKGlkKSk7Ci0gICAgUmVmUHRyPExheWVyQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUgPSBzdGF0aWNfY2FzdDxMYXllckJhY2tpbmdTdG9yZSo+KG5vZGUtPmJh
Y2tpbmdTdG9yZSgpLmdldCgpKTsKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9U
ZXh0dXJlTWFwcGVyTGF5ZXIobGF5ZXJCeUlEKGlkKSk7CisgICAgUmVmUHRyPExheWVyQmFja2lu
Z1N0b3JlPiBiYWNraW5nU3RvcmUgPSBzdGF0aWNfY2FzdDxMYXllckJhY2tpbmdTdG9yZSo+KGxh
eWVyLT5iYWNraW5nU3RvcmUoKS5nZXQoKSk7CiAgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKICAg
ICAgICAgYmFja2luZ1N0b3JlID0gTGF5ZXJCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwotICAgICAg
ICBub2RlLT5zZXRCYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlLmdldCgpKTsKKyAgICAgICAgbGF5
ZXItPnNldEJhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUuZ2V0KCkpOwogICAgIH0KICAgICBBU1NF
UlQoYmFja2luZ1N0b3JlKTsKICAgICByZXR1cm4gYmFja2luZ1N0b3JlOwpAQCAtNDIwLDcgKzQy
MCw3IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVSb290TGF5ZXIoKQogICAgIG1f
cm9vdExheWVyLT5zZXRTaXplKEZsb2F0U2l6ZSgxLjAsIDEuMCkpOwogICAgIGlmICghbV90ZXh0
dXJlTWFwcGVyKQogICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVh
dGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7Ci0gICAgdG9UZXh0dXJlTWFwcGVyTm9kZSht
X3Jvb3RMYXllci5nZXQoKSktPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgp
KTsKKyAgICB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldFRleHR1
cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OnN5bmNSZW1vdGVDb250ZW50KCkKQEAgLTU3NywxMCArNTc3LDEwIEBAIHZvaWQgTGF5
ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUoY29uc3QgSW50
UmVjdCYgcmVjdCwgZmxvCiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJnZUdMUmVzb3Vy
Y2VzKCkKIHsKLSAgICBUZXh0dXJlTWFwcGVyTm9kZSogbm9kZSA9IHRvVGV4dHVyZU1hcHBlck5v
ZGUocm9vdExheWVyKCkpOworICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1
cmVNYXBwZXJMYXllcihyb290TGF5ZXIoKSk7CiAKLSAgICBpZiAobm9kZSkKLSAgICAgICAgbm9k
ZS0+Y2xlYXJCYWNraW5nU3RvcmVzUmVjdXJzaXZlKCk7CisgICAgaWYgKGxheWVyKQorICAgICAg
ICBsYXllci0+Y2xlYXJCYWNraW5nU3RvcmVzUmVjdXJzaXZlKCk7CiAKICAgICBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlcy5jbGVhcigpOwogICAgIG1fdGV4dHVyZU1hcHBlci5jbGVhcigpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>