<?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>143481</bug_id>
          
          <creation_ts>2015-04-07 07:57:56 -0700</creation_ts>
          <short_desc>[CSS Grid Layout] Fix raw function pointer usages</short_desc>
          <delta_ts>2015-04-10 03:52:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergio Villar Senin">svillar</reporter>
          <assigned_to name="Sergio Villar Senin">svillar</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>jfernandez</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rego</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1083308</commentid>
    <comment_count>0</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-04-07 07:57:56 -0700</bug_when>
    <thetext>This comes from anttik&apos;s review here: https://bugs.webkit.org/show_bug.cgi?id=141422#c5 and https://bugs.webkit.org/show_bug.cgi?id=141422#c6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083917</commentid>
    <comment_count>1</comment_count>
      <attachid>250426</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-04-09 01:37:48 -0700</bug_when>
    <thetext>Created attachment 250426
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083921</commentid>
    <comment_count>2</comment_count>
      <attachid>250428</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-04-09 02:00:01 -0700</bug_when>
    <thetext>Created attachment 250428
Patch

Build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083936</commentid>
    <comment_count>3</comment_count>
      <attachid>250428</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-09 03:17:50 -0700</bug_when>
    <thetext>Comment on attachment 250428
Patch

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

&gt; Source/WebCore/rendering/RenderGrid.cpp:648
&gt;          GridItemsSpanGroupRange spanGroupRange = { it, std::upper_bound(it, end, *it) };
&gt; -        resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, spanGroupRange, &amp;GridTrackSize::hasMinOrMaxContentMinTrackBreadth, &amp;RenderGrid::minContentForChild, &amp;GridTrack::baseSize, &amp;GridTrack::baseSize, &amp;GridTrack::setBaseSize, &amp;GridTrackSize::hasMinContentMinTrackBreadthAndMinOrMaxContentMaxTrackBreadth);
&gt; -        resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, spanGroupRange, &amp;GridTrackSize::hasMaxContentMinTrackBreadth, &amp;RenderGrid::maxContentForChild, &amp;GridTrack::baseSize, &amp;GridTrack::baseSize, &amp;GridTrack::setBaseSize, &amp;GridTrackSize::hasMaxContentMinTrackBreadthAndMaxContentMaxTrackBreadth);
&gt; -        resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, spanGroupRange, &amp;GridTrackSize::hasMinOrMaxContentMaxTrackBreadth, &amp;RenderGrid::minContentForChild, &amp;GridTrack::growthLimit, &amp;GridTrack::growthLimitIfNotInfinite, &amp;GridTrack::setGrowthLimit);
&gt; -        resolveContentBasedTrackSizingFunctionsForItems(direction, sizingData, spanGroupRange, &amp;GridTrackSize::hasMaxContentMaxTrackBreadth, &amp;RenderGrid::maxContentForChild, &amp;GridTrack::growthLimit, &amp;GridTrack::growthLimitIfNotInfinite, &amp;GridTrack::setGrowthLimit);
&gt; +        resolveContentBasedTrackSizingFunctionsForItems(ResolveIntrinsicMinimums, direction, sizingData, spanGroupRange);
&gt; +        resolveContentBasedTrackSizingFunctionsForItems(ResolveMaxContentMinimums, direction, sizingData, spanGroupRange);
&gt; +        resolveContentBasedTrackSizingFunctionsForItems(ResolveIntrinsicMaximums, direction, sizingData, spanGroupRange);
&gt; +        resolveContentBasedTrackSizingFunctionsForItems(ResolveMaxContentMaximums, direction, sizingData, spanGroupRange);

So much more readable!

&gt; Source/WebCore/rendering/RenderGrid.cpp:675
&gt; +enum TrackSizeRestriction {

enum class would be slightly nicer.

&gt; Source/WebCore/rendering/RenderGrid.cpp:757
&gt; +    switch (phase) {
&gt; +    case RenderGrid::ResolveIntrinsicMinimums:
&gt; +    case RenderGrid::ResolveMaxContentMinimums:
&gt; +        track.setBaseSize(track.plannedSize());
&gt; +        break;
&gt; +    case RenderGrid::ResolveIntrinsicMaximums:
&gt; +    case RenderGrid::ResolveMaxContentMaximums:
&gt; +        track.setGrowthLimit(track.plannedSize());
&gt; +        break;
&gt; +    }
&gt; +}

You could return instead of break and ASSERT_NOT_REACHED() at the end.

&gt; Source/WebCore/rendering/RenderGrid.cpp:802
&gt; +        LayoutUnit itemSize;
&gt; +        switch (phase) {
&gt; +        case ResolveIntrinsicMinimums:
&gt; +        case ResolveIntrinsicMaximums:
&gt; +            itemSize = minContentForChild(gridItemWithSpan.gridItem(), direction, sizingData.columnTracks);
&gt; +            break;
&gt; +        case ResolveMaxContentMinimums:
&gt; +        case ResolveMaxContentMaximums:
&gt; +            itemSize = maxContentForChild(gridItemWithSpan.gridItem(), direction, sizingData.columnTracks);
&gt; +            break;
&gt; +        }

Maybe this could have helper function as well?

&gt; Source/WebCore/rendering/RenderGrid.h:64
&gt; +    enum TrackSizeComputationPhase {
&gt; +        ResolveIntrinsicMinimums,
&gt; +        ResolveMaxContentMinimums,
&gt; +        ResolveIntrinsicMaximums,
&gt; +        ResolveMaxContentMaximums,
&gt; +    };
&gt; +    typedef enum TrackSizeComputationPhase TrackSizeComputationPhase;

enum class would be nice:

enum class TrackSizeResolvePhase { IntrinsicMinimums, ... } 

for example.

The typedef shoudn&apos;t be necessary.

&gt; Source/WebCore/rendering/RenderGrid.h:70
&gt; +    enum DistributeSpacePhase {
&gt; +        DistributeSpaceToBaseSizes,
&gt; +        DistributeSpaceToGrowthLimits,
&gt; +    };
&gt; +    typedef enum DistributeSpacePhase DistributeSpacePhase;

Here too:

enum class SpaceDistributionPhase {  ToBaseSizes, ... }

for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083955</commentid>
    <comment_count>4</comment_count>
      <attachid>250428</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-09 07:48:18 -0700</bug_when>
    <thetext>Comment on attachment 250428
Patch

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

&gt; Source/WebCore/rendering/RenderGrid.cpp:759
&gt; +void RenderGrid::resolveContentBasedTrackSizingFunctionsForItems(TrackSizeComputationPhase phase, GridTrackSizingDirection direction, GridSizingData&amp; sizingData, const GridItemsSpanGroupRange&amp; gridItemsWithSpan)

This could be renamed to something that doesn&apos;t include &quot;TrackSizingFunctions&quot; since you no longer pass any functions. 

Since this is only ever called with fixed TrackSizeComputationPhase values you could make it a template argument instead. Maybe not very important.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084234</commentid>
    <comment_count>5</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-04-10 01:03:48 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 250428 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250428&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderGrid.cpp:759
&gt; &gt; +void RenderGrid::resolveContentBasedTrackSizingFunctionsForItems(TrackSizeComputationPhase phase, GridTrackSizingDirection direction, GridSizingData&amp; sizingData, const GridItemsSpanGroupRange&amp; gridItemsWithSpan)
&gt; 
&gt; This could be renamed to something that doesn&apos;t include
&gt; &quot;TrackSizingFunctions&quot; since you no longer pass any functions. 

The functions that this method is resolving are not the ones passed as arguments but the minimum size and maximum size functions specified by authors when defining the grid, so I think the name is still accurate.

&gt; Since this is only ever called with fixed TrackSizeComputationPhase values
&gt; you could make it a template argument instead. Maybe not very important.

Sure, I actually also had the same idea after uploading the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084246</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-10 01:45:26 -0700</bug_when>
    <thetext>Use of enum classes is not actually that important as these enums are not used outside the class. 

TrackSizeComputationPhase and DistributeSpacePhase probably don&apos;t need to be public (unless you plan to use them somewhere else too).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084247</commentid>
    <comment_count>7</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-04-10 01:58:55 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Use of enum classes is not actually that important as these enums are not
&gt; used outside the class. 
&gt; 
&gt; TrackSizeComputationPhase and DistributeSpacePhase probably don&apos;t need to be
&gt; public (unless you plan to use them somewhere else too).

Agreed, I&apos;m right now changing the functions to have a template parameter, something like:

template &lt;RenderGrid::TrackSizeComputationPhase phase&gt;
void RenderGrid::resolveContentBasedTrackSizingFunctionsForItems(GridTrackSizingDirection, GridSizingData&amp;, const GridItemsSpanGroupRange&amp;)

which gives us a nice set of calls:

resolveContentBasedTrackSizingFunctionsForItems&lt;ResolveIntrinsicMinimums&gt;(direction, sizingData, spanGroupRange);
resolveContentBasedTrackSizingFunctionsForItems&lt;ResolveMaxContentMinimums&gt;(direction, sizingData, spanGroupRange);
resolveContentBasedTrackSizingFunctionsForItems&lt;ResolveIntrinsicMaximums&gt;(direction, sizingData, spanGroupRange);
resolveContentBasedTrackSizingFunctionsForItems&lt;ResolveMaxContentMaximums&gt;(direction, sizingData, spanGroupRange);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084252</commentid>
    <comment_count>8</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-04-10 02:09:18 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; Use of enum classes is not actually that important as these enums are not
&gt; &gt; used outside the class. 
&gt; &gt; 
&gt; &gt; TrackSizeComputationPhase and DistributeSpacePhase probably don&apos;t need to be
&gt; &gt; public (unless you plan to use them somewhere else too).
&gt; 
&gt; Agreed, I&apos;m right now changing the functions to have a template parameter,
&gt; something like:

Actually I think I&apos;ll do the same for the helper functions as the same rationale applies for them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084257</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-10 02:39:02 -0700</bug_when>
    <thetext>&gt; Actually I think I&apos;ll do the same for the helper functions as the same
&gt; rationale applies for them.

I don&apos;t think you need to do that, the compiler will figure it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084266</commentid>
    <comment_count>10</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-04-10 03:52:06 -0700</bug_when>
    <thetext>Committed r182628: &lt;http://trac.webkit.org/changeset/182628&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250426</attachid>
            <date>2015-04-09 01:37:48 -0700</date>
            <delta_ts>2015-04-09 01:59:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143481-20150409103655.patch</filename>
            <type>text/plain</type>
            <size>15953</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNTkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWYwMmQ4ZWRjNmE0Mzk0
ZTkzMTVkYjRjYzI5OThlNWQxNjQzZjQ2Ny4uOGY5MmMzM2FiYThhZDQ5MGVmMzg1MzA4OTAzNWIx
Yzk3ZjM5MjZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM2IEBACiAyMDE1LTA0LTA5ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCisgICAgICAgIFtDU1MgR3Jp
ZCBMYXlvdXRdIEZpeCByYXcgZnVuY3Rpb24gcG9pbnRlciB1c2FnZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzQ4MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBhcmd1bWVudCBsaXN0IG9mCisg
ICAgICAgIHJlc29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9uc0Zvckl0ZW1zKCkg
YmVjYW1lIHRvbyBsb25nCisgICAgICAgIGFuZCByYXRoZXIgaW5jb21wcmVoZW5zaWJsZSBhcyBp
dCBpbmNsdWRlZCB1cCB0byA2IGZ1bmN0aW9uCisgICAgICAgIHBvaW50ZXJzLiBUaGlzIHJlcGxh
Y2VzIGFsbCBvZiB0aGVtIGJ5IGFuIGVudW0gd2hpY2ggZGVzY3JpYmVzIHRoZQorICAgICAgICBw
aGFzZSBvZiB0aGUgYWxnb3JpdGhtIHRoYXQgaXMgY3VycmVudGx5IHJ1bm5pbmcuIFdpdGggdGhh
dCBwaGFzZQorICAgICAgICB3ZSBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBzZWxlY3QgdGhl
IHJpZ2h0IGZ1bmN0aW9uIHRvIGNhbGwuCisKKyAgICAgICAgSW4gb3JkZXIgbm90IHRvIHRhbmds
ZSB1cCB0b28gbXVjaCB0aGUgbWV0aG9kLCB0aGUgbmV3IGV4cGxpY2l0CisgICAgICAgIHN3aXRj
aCBzdGF0ZW1lbnRzIHdoZXJlIG1vdmVkIHRvIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGlzIGlzIGp1c3QgYSBjb2RlIHJlZmFjdG9yaW5nLgor
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyR3JpZDo6Y29tcHV0ZVVzZWRCcmVhZHRoT2ZHcmlkVHJhY2tzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckdyaWQ6OnJlc29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjp0cmFja1NpemVGb3JUcmFja1NpemVDb21wdXRhdGlvblBo
YXNlKTogTmV3IGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFByb2Nl
c3NUcmFja0ZvclRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2UpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OnRyYWNrU2hvdWxkR3Jvd0JleW9uZEdyb3d0aExpbWl0c0ZvclRyYWNrU2l6ZUNvbXB1
dGF0aW9uUGhhc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmRpc3RyaWJ1dGVTcGFjZVBo
YXNlRm9yVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6dXBkYXRlVHJhY2tTaXplRm9yVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6
aW5nRnVuY3Rpb25zRm9ySXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6ZGlz
dHJpYnV0ZVNwYWNlVG9UcmFja3MpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHcmlkLmg6
CisKKzIwMTUtMDQtMDkgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+
CisKICAgICAgICAgVW5yZXZpZXdlZCwgYWRkZWQgQ1NTIEdyaWQgTGF5b3V0IHRvIGZlYXR1cmVz
Lmpzb24gZmlsZS4KIAogICAgICAgICAqIGZlYXR1cmVzLmpzb246CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyR3JpZC5jcHAKaW5kZXggN2M1YjdkNTE0YTJmMjJkODFhM2I5OTdiNmYwNDRh
NjhmYjg1NjA0Mi4uYjdlNjY3YjU2OWY4MjEzMTdjOThmNzYwNTJkOGZjN2RkM2UxYWM2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcApAQCAtMzcyLDcgKzM3Miw3IEBA
IHZvaWQgUmVuZGVyR3JpZDo6Y29tcHV0ZVVzZWRCcmVhZHRoT2ZHcmlkVHJhY2tzKEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiBkaXJlY3RpCiAgICAgICAgICAgICB0cmFja3NGb3JEaXN0cmlidXRp
b25baV0tPnNldFBsYW5uZWRTaXplKHRyYWNrc0ZvckRpc3RyaWJ1dGlvbltpXS0+YmFzZVNpemUo
KSk7CiAgICAgICAgIH0KIAotICAgICAgICBkaXN0cmlidXRlU3BhY2VUb1RyYWNrcyh0cmFja3NG
b3JEaXN0cmlidXRpb24sIG51bGxwdHIsICZHcmlkVHJhY2s6OmJhc2VTaXplLCBhdmFpbGFibGVM
b2dpY2FsU3BhY2UpOworICAgICAgICBkaXN0cmlidXRlU3BhY2VUb1RyYWNrcyhEaXN0cmlidXRl
U3BhY2VUb0Jhc2VTaXplcywgdHJhY2tzRm9yRGlzdHJpYnV0aW9uLCBudWxscHRyLCBhdmFpbGFi
bGVMb2dpY2FsU3BhY2UpOwogCiAgICAgICAgIGZvciAoYXV0byogdHJhY2sgOiB0cmFja3NGb3JE
aXN0cmlidXRpb24pCiAgICAgICAgICAgICB0cmFjay0+c2V0QmFzZVNpemUodHJhY2stPnBsYW5u
ZWRTaXplKCkpOwpAQCAtNjQyLDEwICs2NDIsMTAgQEAgdm9pZCBSZW5kZXJHcmlkOjpyZXNvbHZl
Q29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnMoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW8K
ICAgICBhdXRvIGVuZCA9IHNpemluZ0RhdGEuaXRlbXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLmVu
ZCgpOwogICAgIHdoaWxlIChpdCAhPSBlbmQpIHsKICAgICAgICAgR3JpZEl0ZW1zU3Bhbkdyb3Vw
UmFuZ2Ugc3Bhbkdyb3VwUmFuZ2UgPSB7IGl0LCBzdGQ6OnVwcGVyX2JvdW5kKGl0LCBlbmQsICpp
dCkgfTsKLSAgICAgICAgcmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6aW5nRnVuY3Rpb25zRm9y
SXRlbXMoZGlyZWN0aW9uLCBzaXppbmdEYXRhLCBzcGFuR3JvdXBSYW5nZSwgJkdyaWRUcmFja1Np
emU6Omhhc01pbk9yTWF4Q29udGVudE1pblRyYWNrQnJlYWR0aCwgJlJlbmRlckdyaWQ6Om1pbkNv
bnRlbnRGb3JDaGlsZCwgJkdyaWRUcmFjazo6YmFzZVNpemUsICZHcmlkVHJhY2s6OmJhc2VTaXpl
LCAmR3JpZFRyYWNrOjpzZXRCYXNlU2l6ZSwgJkdyaWRUcmFja1NpemU6Omhhc01pbkNvbnRlbnRN
aW5UcmFja0JyZWFkdGhBbmRNaW5Pck1heENvbnRlbnRNYXhUcmFja0JyZWFkdGgpOwotICAgICAg
ICByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JJdGVtcyhkaXJlY3Rp
b24sIHNpemluZ0RhdGEsIHNwYW5Hcm91cFJhbmdlLCAmR3JpZFRyYWNrU2l6ZTo6aGFzTWF4Q29u
dGVudE1pblRyYWNrQnJlYWR0aCwgJlJlbmRlckdyaWQ6Om1heENvbnRlbnRGb3JDaGlsZCwgJkdy
aWRUcmFjazo6YmFzZVNpemUsICZHcmlkVHJhY2s6OmJhc2VTaXplLCAmR3JpZFRyYWNrOjpzZXRC
YXNlU2l6ZSwgJkdyaWRUcmFja1NpemU6Omhhc01heENvbnRlbnRNaW5UcmFja0JyZWFkdGhBbmRN
YXhDb250ZW50TWF4VHJhY2tCcmVhZHRoKTsKLSAgICAgICAgcmVzb2x2ZUNvbnRlbnRCYXNlZFRy
YWNrU2l6aW5nRnVuY3Rpb25zRm9ySXRlbXMoZGlyZWN0aW9uLCBzaXppbmdEYXRhLCBzcGFuR3Jv
dXBSYW5nZSwgJkdyaWRUcmFja1NpemU6Omhhc01pbk9yTWF4Q29udGVudE1heFRyYWNrQnJlYWR0
aCwgJlJlbmRlckdyaWQ6Om1pbkNvbnRlbnRGb3JDaGlsZCwgJkdyaWRUcmFjazo6Z3Jvd3RoTGlt
aXQsICZHcmlkVHJhY2s6Omdyb3d0aExpbWl0SWZOb3RJbmZpbml0ZSwgJkdyaWRUcmFjazo6c2V0
R3Jvd3RoTGltaXQpOwotICAgICAgICByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5j
dGlvbnNGb3JJdGVtcyhkaXJlY3Rpb24sIHNpemluZ0RhdGEsIHNwYW5Hcm91cFJhbmdlLCAmR3Jp
ZFRyYWNrU2l6ZTo6aGFzTWF4Q29udGVudE1heFRyYWNrQnJlYWR0aCwgJlJlbmRlckdyaWQ6Om1h
eENvbnRlbnRGb3JDaGlsZCwgJkdyaWRUcmFjazo6Z3Jvd3RoTGltaXQsICZHcmlkVHJhY2s6Omdy
b3d0aExpbWl0SWZOb3RJbmZpbml0ZSwgJkdyaWRUcmFjazo6c2V0R3Jvd3RoTGltaXQpOworICAg
ICAgICByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JJdGVtcyhSZXNv
bHZlSW50cmluc2ljTWluaW11bXMsIGRpcmVjdGlvbiwgc2l6aW5nRGF0YSwgc3Bhbkdyb3VwUmFu
Z2UpOworICAgICAgICByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JJ
dGVtcyhSZXNvbHZlTWF4Q29udGVudE1pbmltdW1zLCBkaXJlY3Rpb24sIHNpemluZ0RhdGEsIHNw
YW5Hcm91cFJhbmdlKTsKKyAgICAgICAgcmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6aW5nRnVu
Y3Rpb25zRm9ySXRlbXMoUmVzb2x2ZUludHJpbnNpY01heGltdW1zLCBkaXJlY3Rpb24sIHNpemlu
Z0RhdGEsIHNwYW5Hcm91cFJhbmdlKTsKKyAgICAgICAgcmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNr
U2l6aW5nRnVuY3Rpb25zRm9ySXRlbXMoUmVzb2x2ZU1heENvbnRlbnRNYXhpbXVtcywgZGlyZWN0
aW9uLCBzaXppbmdEYXRhLCBzcGFuR3JvdXBSYW5nZSk7CiAgICAgICAgIGl0ID0gc3Bhbkdyb3Vw
UmFuZ2UucmFuZ2VFbmQ7CiAgICAgfQogCkBAIC02NzIsMTIgKzY3Miw4NCBAQCB2b2lkIFJlbmRl
ckdyaWQ6OnJlc29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9uc0Zvck5vblNwYW5u
aW5nSXRlbXMoR3JpZAogICAgICAgICB0cmFjay5zZXRHcm93dGhMaW1pdChzdGQ6Om1heCh0cmFj
ay5ncm93dGhMaW1pdCgpLCBtYXhDb250ZW50Rm9yQ2hpbGQoZ3JpZEl0ZW0sIGRpcmVjdGlvbiwg
Y29sdW1uVHJhY2tzKSkpOwogfQogCi12b2lkIFJlbmRlckdyaWQ6OnJlc29sdmVDb250ZW50QmFz
ZWRUcmFja1NpemluZ0Z1bmN0aW9uc0Zvckl0ZW1zKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBk
aXJlY3Rpb24sIEdyaWRTaXppbmdEYXRhJiBzaXppbmdEYXRhLCBjb25zdCBHcmlkSXRlbXNTcGFu
R3JvdXBSYW5nZSYgZ3JpZEl0ZW1zV2l0aFNwYW4sIEZpbHRlckZ1bmN0aW9uIGZpbHRlckZ1bmN0
aW9uLCBTaXppbmdGdW5jdGlvbiBzaXppbmdGdW5jdGlvbiwgQWNjdW11bGF0b3JHZXR0ZXIgdHJh
Y2tTaXplLCBBY2N1bXVsYXRvckdldHRlciBjb3JyZWN0ZWRUcmFja1NpemUsIEFjY3VtdWxhdG9y
R3Jvd0Z1bmN0aW9uIHRyYWNrR3Jvd3RoRnVuY3Rpb24sIEZpbHRlckZ1bmN0aW9uIGdyb3dBYm92
ZU1heEJyZWFkdGhGaWx0ZXJGdW5jdGlvbikKK2VudW0gVHJhY2tTaXplUmVzdHJpY3Rpb24gewor
ICAgIEFsbG93SW5maW5pdHksCisgICAgRm9yYmlkSW5maW5pdHksCit9OworCitzdGF0aWMgY29u
c3QgTGF5b3V0VW5pdCYgdHJhY2tTaXplRm9yVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZShSZW5k
ZXJHcmlkOjpUcmFja1NpemVDb21wdXRhdGlvblBoYXNlIHBoYXNlLCBHcmlkVHJhY2smIHRyYWNr
LCBUcmFja1NpemVSZXN0cmljdGlvbiByZXN0cmljdGlvbikKK3sKKyAgICBzd2l0Y2ggKHBoYXNl
KSB7CisgICAgY2FzZSBSZW5kZXJHcmlkOjpSZXNvbHZlSW50cmluc2ljTWluaW11bXM6CisgICAg
Y2FzZSBSZW5kZXJHcmlkOjpSZXNvbHZlTWF4Q29udGVudE1pbmltdW1zOgorICAgICAgICByZXR1
cm4gdHJhY2suYmFzZVNpemUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZW5kZXJHcmlk
OjpSZXNvbHZlSW50cmluc2ljTWF4aW11bXM6CisgICAgY2FzZSBSZW5kZXJHcmlkOjpSZXNvbHZl
TWF4Q29udGVudE1heGltdW1zOgorICAgICAgICByZXR1cm4gcmVzdHJpY3Rpb24gPT0gQWxsb3dJ
bmZpbml0eSA/IHRyYWNrLmdyb3d0aExpbWl0KCkgOiB0cmFjay5ncm93dGhMaW1pdElmTm90SW5m
aW5pdGUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBzaG91bGRQ
cm9jZXNzVHJhY2tGb3JUcmFja1NpemVDb21wdXRhdGlvblBoYXNlKFJlbmRlckdyaWQ6OlRyYWNr
U2l6ZUNvbXB1dGF0aW9uUGhhc2UgcGhhc2UsIGNvbnN0IEdyaWRUcmFja1NpemUmIHRyYWNrU2l6
ZSkKK3sKKyAgICBzd2l0Y2ggKHBoYXNlKSB7CisgICAgY2FzZSBSZW5kZXJHcmlkOjpSZXNvbHZl
SW50cmluc2ljTWluaW11bXM6CisgICAgICAgIHJldHVybiB0cmFja1NpemUuaGFzTWluT3JNYXhD
b250ZW50TWluVHJhY2tCcmVhZHRoKCk7CisgICAgY2FzZSBSZW5kZXJHcmlkOjpSZXNvbHZlTWF4
Q29udGVudE1pbmltdW1zOgorICAgICAgICByZXR1cm4gdHJhY2tTaXplLmhhc01heENvbnRlbnRN
aW5UcmFja0JyZWFkdGgoKTsKKyAgICBjYXNlIFJlbmRlckdyaWQ6OlJlc29sdmVJbnRyaW5zaWNN
YXhpbXVtczoKKyAgICAgICAgcmV0dXJuIHRyYWNrU2l6ZS5oYXNNaW5Pck1heENvbnRlbnRNYXhU
cmFja0JyZWFkdGgoKTsKKyAgICBjYXNlIFJlbmRlckdyaWQ6OlJlc29sdmVNYXhDb250ZW50TWF4
aW11bXM6CisgICAgICAgIHJldHVybiB0cmFja1NpemUuaGFzTWF4Q29udGVudE1heFRyYWNrQnJl
YWR0aCgpOworICAgIH0KK30KKworc3RhdGljIGJvb2wgdHJhY2tTaG91bGRHcm93QmV5b25kR3Jv
d3RoTGltaXRzRm9yVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZShSZW5kZXJHcmlkOjpUcmFja1Np
emVDb21wdXRhdGlvblBoYXNlIHBoYXNlLCBjb25zdCBHcmlkVHJhY2tTaXplJiB0cmFja1NpemUp
Cit7CisgICAgc3dpdGNoIChwaGFzZSkgeworICAgIGNhc2UgUmVuZGVyR3JpZDo6UmVzb2x2ZUlu
dHJpbnNpY01pbmltdW1zOgorICAgICAgICByZXR1cm4gdHJhY2tTaXplLmhhc01pbkNvbnRlbnRN
aW5UcmFja0JyZWFkdGhBbmRNaW5Pck1heENvbnRlbnRNYXhUcmFja0JyZWFkdGgoKTsKKyAgICBj
YXNlIFJlbmRlckdyaWQ6OlJlc29sdmVNYXhDb250ZW50TWluaW11bXM6CisgICAgICAgIHJldHVy
biB0cmFja1NpemUuaGFzTWF4Q29udGVudE1pblRyYWNrQnJlYWR0aEFuZE1heENvbnRlbnRNYXhU
cmFja0JyZWFkdGgoKTsKKyAgICBjYXNlIFJlbmRlckdyaWQ6OlJlc29sdmVJbnRyaW5zaWNNYXhp
bXVtczoKKyAgICBjYXNlIFJlbmRlckdyaWQ6OlJlc29sdmVNYXhDb250ZW50TWF4aW11bXM6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworc3RhdGljIFJlbmRlckdyaWQ6OkRpc3Ry
aWJ1dGVTcGFjZVBoYXNlIGRpc3RyaWJ1dGVTcGFjZVBoYXNlRm9yVHJhY2tTaXplQ29tcHV0YXRp
b25QaGFzZShSZW5kZXJHcmlkOjpUcmFja1NpemVDb21wdXRhdGlvblBoYXNlIHBoYXNlKQorewor
ICAgIHN3aXRjaCAocGhhc2UpIHsKKyAgICBjYXNlIFJlbmRlckdyaWQ6OlJlc29sdmVJbnRyaW5z
aWNNaW5pbXVtczoKKyAgICBjYXNlIFJlbmRlckdyaWQ6OlJlc29sdmVNYXhDb250ZW50TWluaW11
bXM6CisgICAgICAgIHJldHVybiBSZW5kZXJHcmlkOjpEaXN0cmlidXRlU3BhY2VUb0Jhc2VTaXpl
czsKKyAgICBjYXNlIFJlbmRlckdyaWQ6OlJlc29sdmVJbnRyaW5zaWNNYXhpbXVtczoKKyAgICBj
YXNlIFJlbmRlckdyaWQ6OlJlc29sdmVNYXhDb250ZW50TWF4aW11bXM6CisgICAgICAgIHJldHVy
biBSZW5kZXJHcmlkOjpEaXN0cmlidXRlU3BhY2VUb0dyb3d0aExpbWl0czsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIHVwZGF0ZVRyYWNrU2l6ZUZvclRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2Uo
UmVuZGVyR3JpZDo6VHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZSBwaGFzZSwgR3JpZFRyYWNrJiB0
cmFjaykKK3sKKyAgICBzd2l0Y2ggKHBoYXNlKSB7CisgICAgY2FzZSBSZW5kZXJHcmlkOjpSZXNv
bHZlSW50cmluc2ljTWluaW11bXM6CisgICAgY2FzZSBSZW5kZXJHcmlkOjpSZXNvbHZlTWF4Q29u
dGVudE1pbmltdW1zOgorICAgICAgICB0cmFjay5zZXRCYXNlU2l6ZSh0cmFjay5wbGFubmVkU2l6
ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZW5kZXJHcmlkOjpSZXNvbHZlSW50cmlu
c2ljTWF4aW11bXM6CisgICAgY2FzZSBSZW5kZXJHcmlkOjpSZXNvbHZlTWF4Q29udGVudE1heGlt
dW1zOgorICAgICAgICB0cmFjay5zZXRHcm93dGhMaW1pdCh0cmFjay5wbGFubmVkU2l6ZSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFJlbmRlckdyaWQ6OnJlc29sdmVDb250
ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9uc0Zvckl0ZW1zKFRyYWNrU2l6ZUNvbXB1dGF0aW9u
UGhhc2UgcGhhc2UsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIEdyaWRTaXpp
bmdEYXRhJiBzaXppbmdEYXRhLCBjb25zdCBHcmlkSXRlbXNTcGFuR3JvdXBSYW5nZSYgZ3JpZEl0
ZW1zV2l0aFNwYW4pCiB7CiAgICAgVmVjdG9yPEdyaWRUcmFjaz4mIHRyYWNrcyA9IChkaXJlY3Rp
b24gPT0gRm9yQ29sdW1ucykgPyBzaXppbmdEYXRhLmNvbHVtblRyYWNrcyA6IHNpemluZ0RhdGEu
cm93VHJhY2tzOwogICAgIGZvciAoY29uc3QgYXV0byYgdHJhY2tJbmRleCA6IHNpemluZ0RhdGEu
Y29udGVudFNpemVkVHJhY2tzSW5kZXgpIHsKICAgICAgICAgR3JpZFRyYWNrJiB0cmFjayA9IHRy
YWNrc1t0cmFja0luZGV4XTsKLSAgICAgICAgdHJhY2suc2V0UGxhbm5lZFNpemUoKHRyYWNrLip0
cmFja1NpemUpKCkpOworICAgICAgICB0cmFjay5zZXRQbGFubmVkU2l6ZSh0cmFja1NpemVGb3JU
cmFja1NpemVDb21wdXRhdGlvblBoYXNlKHBoYXNlLCB0cmFjaywgQWxsb3dJbmZpbml0eSkpOwog
ICAgIH0KIAogICAgIGZvciAoYXV0byBpdCA9IGdyaWRJdGVtc1dpdGhTcGFuLnJhbmdlU3RhcnQ7
IGl0ICE9IGdyaWRJdGVtc1dpdGhTcGFuLnJhbmdlRW5kOyArK2l0KSB7CkBAIC02OTIsMzEgKzc2
NCw0MiBAQCB2b2lkIFJlbmRlckdyaWQ6OnJlc29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1
bmN0aW9uc0Zvckl0ZW1zKEdyaWRUcmFja1NpemluZwogICAgICAgICBmb3IgKGF1dG8mIHRyYWNr
UG9zaXRpb24gOiBpdGVtU3BhbikgewogICAgICAgICAgICAgY29uc3QgR3JpZFRyYWNrU2l6ZSYg
dHJhY2tTaXplID0gZ3JpZFRyYWNrU2l6ZShkaXJlY3Rpb24sIHRyYWNrUG9zaXRpb24udG9JbnQo
KSk7CiAgICAgICAgICAgICBHcmlkVHJhY2smIHRyYWNrID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1
bW5zKSA/IHNpemluZ0RhdGEuY29sdW1uVHJhY2tzW3RyYWNrUG9zaXRpb24udG9JbnQoKV0gOiBz
aXppbmdEYXRhLnJvd1RyYWNrc1t0cmFja1Bvc2l0aW9uLnRvSW50KCldOwotICAgICAgICAgICAg
c3Bhbm5pbmdUcmFja3NTaXplICs9ICh0cmFjay4qY29ycmVjdGVkVHJhY2tTaXplKSgpOwotICAg
ICAgICAgICAgaWYgKCEodHJhY2tTaXplLipmaWx0ZXJGdW5jdGlvbikoKSkKKyAgICAgICAgICAg
IHNwYW5uaW5nVHJhY2tzU2l6ZSArPSB0cmFja1NpemVGb3JUcmFja1NpemVDb21wdXRhdGlvblBo
YXNlKHBoYXNlLCB0cmFjaywgRm9yYmlkSW5maW5pdHkpOworICAgICAgICAgICAgaWYgKCFzaG91
bGRQcm9jZXNzVHJhY2tGb3JUcmFja1NpemVDb21wdXRhdGlvblBoYXNlKHBoYXNlLCB0cmFja1Np
emUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBzaXppbmdEYXRh
LmZpbHRlcmVkVHJhY2tzLmFwcGVuZCgmdHJhY2spOwogCi0gICAgICAgICAgICBpZiAoIWdyb3dB
Ym92ZU1heEJyZWFkdGhGaWx0ZXJGdW5jdGlvbiB8fCAodHJhY2tTaXplLipncm93QWJvdmVNYXhC
cmVhZHRoRmlsdGVyRnVuY3Rpb24pKCkpCisgICAgICAgICAgICBpZiAodHJhY2tTaG91bGRHcm93
QmV5b25kR3Jvd3RoTGltaXRzRm9yVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZShwaGFzZSwgdHJh
Y2tTaXplKSkKICAgICAgICAgICAgICAgICBzaXppbmdEYXRhLmdyb3dCZXlvbmRHcm93dGhMaW1p
dHNUcmFja3MuYXBwZW5kKCZ0cmFjayk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoc2l6aW5n
RGF0YS5maWx0ZXJlZFRyYWNrcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAor
ICAgICAgICBMYXlvdXRVbml0IGl0ZW1TaXplOworICAgICAgICBzd2l0Y2ggKHBoYXNlKSB7Cisg
ICAgICAgIGNhc2UgUmVzb2x2ZUludHJpbnNpY01pbmltdW1zOgorICAgICAgICBjYXNlIFJlc29s
dmVJbnRyaW5zaWNNYXhpbXVtczoKKyAgICAgICAgICAgIGl0ZW1TaXplID0gbWluQ29udGVudEZv
ckNoaWxkKGdyaWRJdGVtV2l0aFNwYW4uZ3JpZEl0ZW0oKSwgZGlyZWN0aW9uLCBzaXppbmdEYXRh
LmNvbHVtblRyYWNrcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZXNvbHZl
TWF4Q29udGVudE1pbmltdW1zOgorICAgICAgICBjYXNlIFJlc29sdmVNYXhDb250ZW50TWF4aW11
bXM6CisgICAgICAgICAgICBpdGVtU2l6ZSA9IG1heENvbnRlbnRGb3JDaGlsZChncmlkSXRlbVdp
dGhTcGFuLmdyaWRJdGVtKCksIGRpcmVjdGlvbiwgc2l6aW5nRGF0YS5jb2x1bW5UcmFja3MpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgTGF5b3V0VW5pdCBleHRyYVNw
YWNlID0gaXRlbVNpemUgLSBzcGFubmluZ1RyYWNrc1NpemU7CiAgICAgICAgIC8vIFNwZWNzIG1h
bmRhdGUgdG8gZmxvb3IgZXh0cmFTcGFjZSB0byAwLiBJbnN0ZWFkIHdlIGRpcmVjdGx5IGF2b2lk
IHRoZSBmdW5jdGlvbiBjYWxsIGluIHRob3NlIGNhc2VzIGFzIGl0IHdpbGwgYmUKICAgICAgICAg
Ly8gYSBub29wIGluIHRlcm1zIG9mIHRyYWNrIHNpemluZy4KLSAgICAgICAgTGF5b3V0VW5pdCBl
eHRyYVNwYWNlID0gKHRoaXMtPipzaXppbmdGdW5jdGlvbikoZ3JpZEl0ZW1XaXRoU3Bhbi5ncmlk
SXRlbSgpLCBkaXJlY3Rpb24sIHNpemluZ0RhdGEuY29sdW1uVHJhY2tzKSAtIHNwYW5uaW5nVHJh
Y2tzU2l6ZTsKICAgICAgICAgaWYgKGV4dHJhU3BhY2UgPiAwKSB7CiAgICAgICAgICAgICBhdXRv
KiB0cmFja3NUb0dyb3dCZXlvbmRHcm93dGhMaW1pdHMgPSBzaXppbmdEYXRhLmdyb3dCZXlvbmRH
cm93dGhMaW1pdHNUcmFja3MuaXNFbXB0eSgpID8gJnNpemluZ0RhdGEuZmlsdGVyZWRUcmFja3Mg
OiAmc2l6aW5nRGF0YS5ncm93QmV5b25kR3Jvd3RoTGltaXRzVHJhY2tzOwotICAgICAgICAgICAg
ZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3Moc2l6aW5nRGF0YS5maWx0ZXJlZFRyYWNrcywgdHJhY2tz
VG9Hcm93QmV5b25kR3Jvd3RoTGltaXRzLCBjb3JyZWN0ZWRUcmFja1NpemUsIGV4dHJhU3BhY2Up
OworICAgICAgICAgICAgZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3MoZGlzdHJpYnV0ZVNwYWNlUGhh
c2VGb3JUcmFja1NpemVDb21wdXRhdGlvblBoYXNlKHBoYXNlKSwgc2l6aW5nRGF0YS5maWx0ZXJl
ZFRyYWNrcywgdHJhY2tzVG9Hcm93QmV5b25kR3Jvd3RoTGltaXRzLCBleHRyYVNwYWNlKTsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIGZvciAoY29uc3QgYXV0byYgdHJhY2tJbmRleCA6IHNpemlu
Z0RhdGEuY29udGVudFNpemVkVHJhY2tzSW5kZXgpIHsKICAgICAgICAgR3JpZFRyYWNrJiB0cmFj
ayA9IHRyYWNrc1t0cmFja0luZGV4XTsKLSAgICAgICAgKHRyYWNrLip0cmFja0dyb3d0aEZ1bmN0
aW9uKSh0cmFjay5wbGFubmVkU2l6ZSgpKTsKKyAgICAgICAgdXBkYXRlVHJhY2tTaXplRm9yVHJh
Y2tTaXplQ29tcHV0YXRpb25QaGFzZShwaGFzZSwgdHJhY2spOwogICAgIH0KIH0KIApAQCAtNzMz
LDcgKzgxNiw3IEBAIHN0YXRpYyBib29sIHNvcnRCeUdyaWRUcmFja0dyb3d0aFBvdGVudGlhbChj
b25zdCBHcmlkVHJhY2sqIHRyYWNrMSwgY29uc3QgR3JpZFRyCiAgICAgcmV0dXJuICh0cmFjazEt
Pmdyb3d0aExpbWl0KCkgLSB0cmFjazEtPmJhc2VTaXplKCkpIDwgKHRyYWNrMi0+Z3Jvd3RoTGlt
aXQoKSAtIHRyYWNrMi0+YmFzZVNpemUoKSk7CiB9CiAKLXZvaWQgUmVuZGVyR3JpZDo6ZGlzdHJp
YnV0ZVNwYWNlVG9UcmFja3MoVmVjdG9yPEdyaWRUcmFjayo+JiB0cmFja3MsIGNvbnN0IFZlY3Rv
cjxHcmlkVHJhY2sqPiogZ3Jvd0JleW9uZEdyb3d0aExpbWl0c1RyYWNrcywgQWNjdW11bGF0b3JH
ZXR0ZXIgdHJhY2tHZXR0ZXIsIExheW91dFVuaXQmIGF2YWlsYWJsZUxvZ2ljYWxTcGFjZSkKK3Zv
aWQgUmVuZGVyR3JpZDo6ZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3MoRGlzdHJpYnV0ZVNwYWNlUGhh
c2UgcGhhc2UsIFZlY3RvcjxHcmlkVHJhY2sqPiYgdHJhY2tzLCBjb25zdCBWZWN0b3I8R3JpZFRy
YWNrKj4qIGdyb3dCZXlvbmRHcm93dGhMaW1pdHNUcmFja3MsIExheW91dFVuaXQmIGF2YWlsYWJs
ZUxvZ2ljYWxTcGFjZSkKIHsKICAgICBBU1NFUlQoYXZhaWxhYmxlTG9naWNhbFNwYWNlID4gMCk7
CiAgICAgc3RkOjpzb3J0KHRyYWNrcy5iZWdpbigpLCB0cmFja3MuZW5kKCksIHNvcnRCeUdyaWRU
cmFja0dyb3d0aFBvdGVudGlhbCk7CkBAIC03NDIsNyArODI1LDE1IEBAIHZvaWQgUmVuZGVyR3Jp
ZDo6ZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3MoVmVjdG9yPEdyaWRUcmFjayo+JiB0cmFja3MsIGNv
bnN0IFZlY3RvCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdHJhY2tzU2l6ZTsgKytp
KSB7CiAgICAgICAgIEdyaWRUcmFjayYgdHJhY2sgPSAqdHJhY2tzW2ldOwotICAgICAgICBjb25z
dCBMYXlvdXRVbml0JiB0cmFja0JyZWFkdGggPSAodHJhY2suKnRyYWNrR2V0dGVyKSgpOworICAg
ICAgICBMYXlvdXRVbml0IHRyYWNrQnJlYWR0aDsKKyAgICAgICAgc3dpdGNoIChwaGFzZSkgewor
ICAgICAgICBjYXNlIERpc3RyaWJ1dGVTcGFjZVRvQmFzZVNpemVzOgorICAgICAgICAgICAgdHJh
Y2tCcmVhZHRoID0gdHJhY2suYmFzZVNpemUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIERpc3RyaWJ1dGVTcGFjZVRvR3Jvd3RoTGltaXRzOgorICAgICAgICAgICAgdHJhY2tC
cmVhZHRoID0gdHJhY2suZ3Jvd3RoTGltaXRJZk5vdEluZmluaXRlKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQogICAgICAgICBib29sIGluZmluaXRlR3Jvd3RoUG90ZW50aWFsID0g
dHJhY2suZ3Jvd3RoTGltaXRJc0luZmluaXRlKCk7CiAgICAgICAgIExheW91dFVuaXQgdHJhY2tH
cm93dGhQb3RlbnRpYWwgPSBpbmZpbml0ZUdyb3d0aFBvdGVudGlhbCA/IHRyYWNrLmdyb3d0aExp
bWl0KCkgOiB0cmFjay5ncm93dGhMaW1pdCgpIC0gdHJhY2tCcmVhZHRoOwogICAgICAgICB0cmFj
ay50ZW1wU2l6ZSgpID0gdHJhY2tCcmVhZHRoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckdyaWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJH
cmlkLmgKaW5kZXggZTdhNzU5M2FjYTgwY2NhM2U4MjBmY2ZlZTI1ZWZhYjJhZTc2ZWMyNC4uMmU3
MzkxYmYwNzg1MDM1Nzg2MDEzNjM5NjYwYzhhMDk0MmZlNWJlOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyR3JpZC5oCkBAIC01NSw2ICs1NSwyMCBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
VmVjdG9yPExheW91dFVuaXQ+JiBjb2x1bW5Qb3NpdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2Nv
bHVtblBvc2l0aW9uczsgfQogICAgIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYgcm93UG9zaXRp
b25zKCkgY29uc3QgeyByZXR1cm4gbV9yb3dQb3NpdGlvbnM7IH0KIAorICAgIGVudW0gVHJhY2tT
aXplQ29tcHV0YXRpb25QaGFzZSB7CisgICAgICAgIFJlc29sdmVJbnRyaW5zaWNNaW5pbXVtcywK
KyAgICAgICAgUmVzb2x2ZU1heENvbnRlbnRNaW5pbXVtcywKKyAgICAgICAgUmVzb2x2ZUludHJp
bnNpY01heGltdW1zLAorICAgICAgICBSZXNvbHZlTWF4Q29udGVudE1heGltdW1zLAorICAgIH07
CisgICAgdHlwZWRlZiBlbnVtIFRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2UgVHJhY2tTaXplQ29t
cHV0YXRpb25QaGFzZTsKKworICAgIGVudW0gRGlzdHJpYnV0ZVNwYWNlUGhhc2UgeworICAgICAg
ICBEaXN0cmlidXRlU3BhY2VUb0Jhc2VTaXplcywKKyAgICAgICAgRGlzdHJpYnV0ZVNwYWNlVG9H
cm93dGhMaW1pdHMsCisgICAgfTsKKyAgICB0eXBlZGVmIGVudW0gRGlzdHJpYnV0ZVNwYWNlUGhh
c2UgRGlzdHJpYnV0ZVNwYWNlUGhhc2U7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBjb25zdCBj
aGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGlzUmVu
ZGVyR3JpZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KQEAgLTg3LDE0ICsxMDEs
MTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBvcHVsYXRlR3JpZFBvc2l0aW9ucyhjb25zdCBHcmlk
U2l6aW5nRGF0YSYpOwogICAgIHZvaWQgY2xlYXJHcmlkKCk7CiAKLSAgICB0eXBlZGVmIExheW91
dFVuaXQgKFJlbmRlckdyaWQ6OiogU2l6aW5nRnVuY3Rpb24pKFJlbmRlckJveCYsIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiwgVmVjdG9yPEdyaWRUcmFjaz4mKTsKLSAgICB0eXBlZGVmIGNvbnN0
IExheW91dFVuaXQmIChHcmlkVHJhY2s6OiogQWNjdW11bGF0b3JHZXR0ZXIpKCkgY29uc3Q7Ci0g
ICAgdHlwZWRlZiB2b2lkIChHcmlkVHJhY2s6OiogQWNjdW11bGF0b3JHcm93RnVuY3Rpb24pKExh
eW91dFVuaXQpOwotICAgIHR5cGVkZWYgYm9vbCAoR3JpZFRyYWNrU2l6ZTo6KiBGaWx0ZXJGdW5j
dGlvbikoKSBjb25zdDsKICAgICB0eXBlZGVmIHN0cnVjdCBHcmlkSXRlbXNTcGFuR3JvdXBSYW5n
ZSBHcmlkSXRlbXNTcGFuR3JvdXBSYW5nZTsKICAgICB2b2lkIHJlc29sdmVDb250ZW50QmFzZWRU
cmFja1NpemluZ0Z1bmN0aW9uc0Zvck5vblNwYW5uaW5nSXRlbXMoR3JpZFRyYWNrU2l6aW5nRGly
ZWN0aW9uLCBjb25zdCBHcmlkQ29vcmRpbmF0ZSYsIFJlbmRlckJveCYgZ3JpZEl0ZW0sIEdyaWRU
cmFjayYsIFZlY3RvcjxHcmlkVHJhY2s+JiBjb2x1bW5UcmFja3MpOwotICAgIHZvaWQgcmVzb2x2
ZUNvbnRlbnRCYXNlZFRyYWNrU2l6aW5nRnVuY3Rpb25zRm9ySXRlbXMoR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uLCBHcmlkU2l6aW5nRGF0YSYsIGNvbnN0IEdyaWRJdGVtc1NwYW5Hcm91cFJhbmdl
JiwgRmlsdGVyRnVuY3Rpb24sIFNpemluZ0Z1bmN0aW9uLCBBY2N1bXVsYXRvckdldHRlciB0cmFj
a1NpemUsIEFjY3VtdWxhdG9yR2V0dGVyIGNvcnJlY3RlZFRyYWNrU2l6ZSwgQWNjdW11bGF0b3JH
cm93RnVuY3Rpb24sIEZpbHRlckZ1bmN0aW9uIGdyb3dBYm92ZU1heEJyZWFkdGhGaWx0ZXJGdW5j
dGlvbiA9IG51bGxwdHIpOwotICAgIHZvaWQgZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3MoVmVjdG9y
PEdyaWRUcmFjayo+JiwgY29uc3QgVmVjdG9yPEdyaWRUcmFjayo+KiBncm93QmV5b25kR3Jvd3Ro
TGltaXRzVHJhY2tzLCBBY2N1bXVsYXRvckdldHRlciwgTGF5b3V0VW5pdCYgYXZhaWxhYmxlTG9n
aWNhbFNwYWNlKTsKKyAgICB2b2lkIHJlc29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0
aW9uc0Zvckl0ZW1zKFRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2UsIEdyaWRUcmFja1NpemluZ0Rp
cmVjdGlvbiwgR3JpZFNpemluZ0RhdGEmLCBjb25zdCBHcmlkSXRlbXNTcGFuR3JvdXBSYW5nZSYp
OworICAgIHZvaWQgZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3MoRGlzdHJpYnV0ZVNwYWNlUGhhc2Us
IFZlY3RvcjxHcmlkVHJhY2sqPiYsIGNvbnN0IFZlY3RvcjxHcmlkVHJhY2sqPiogZ3Jvd0JleW9u
ZEdyb3d0aExpbWl0c1RyYWNrcywgTGF5b3V0VW5pdCYgYXZhaWxhYmxlTG9naWNhbFNwYWNlKTsK
IAogICAgIGRvdWJsZSBjb21wdXRlTm9ybWFsaXplZEZyYWN0aW9uQnJlYWR0aChWZWN0b3I8R3Jp
ZFRyYWNrPiYsIGNvbnN0IEdyaWRTcGFuJiB0cmFja3NTcGFuLCBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24sIExheW91dFVuaXQgYXZhaWxhYmxlTG9naWNhbFNwYWNlKSBjb25zdDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250428</attachid>
            <date>2015-04-09 02:00:01 -0700</date>
            <delta_ts>2015-04-09 03:17:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143481-20150409105909.patch</filename>
            <type>text/plain</type>
            <size>16189</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNTkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWYwMmQ4ZWRjNmE0Mzk0
ZTkzMTVkYjRjYzI5OThlNWQxNjQzZjQ2Ny4uOGY5MmMzM2FiYThhZDQ5MGVmMzg1MzA4OTAzNWIx
Yzk3ZjM5MjZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM2IEBACiAyMDE1LTA0LTA5ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCisgICAgICAgIFtDU1MgR3Jp
ZCBMYXlvdXRdIEZpeCByYXcgZnVuY3Rpb24gcG9pbnRlciB1c2FnZXMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzQ4MQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBhcmd1bWVudCBsaXN0IG9mCisg
ICAgICAgIHJlc29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9uc0Zvckl0ZW1zKCkg
YmVjYW1lIHRvbyBsb25nCisgICAgICAgIGFuZCByYXRoZXIgaW5jb21wcmVoZW5zaWJsZSBhcyBp
dCBpbmNsdWRlZCB1cCB0byA2IGZ1bmN0aW9uCisgICAgICAgIHBvaW50ZXJzLiBUaGlzIHJlcGxh
Y2VzIGFsbCBvZiB0aGVtIGJ5IGFuIGVudW0gd2hpY2ggZGVzY3JpYmVzIHRoZQorICAgICAgICBw
aGFzZSBvZiB0aGUgYWxnb3JpdGhtIHRoYXQgaXMgY3VycmVudGx5IHJ1bm5pbmcuIFdpdGggdGhh
dCBwaGFzZQorICAgICAgICB3ZSBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBzZWxlY3QgdGhl
IHJpZ2h0IGZ1bmN0aW9uIHRvIGNhbGwuCisKKyAgICAgICAgSW4gb3JkZXIgbm90IHRvIHRhbmds
ZSB1cCB0b28gbXVjaCB0aGUgbWV0aG9kLCB0aGUgbmV3IGV4cGxpY2l0CisgICAgICAgIHN3aXRj
aCBzdGF0ZW1lbnRzIHdoZXJlIG1vdmVkIHRvIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGlzIGlzIGp1c3QgYSBjb2RlIHJlZmFjdG9yaW5nLgor
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyR3JpZDo6Y29tcHV0ZVVzZWRCcmVhZHRoT2ZHcmlkVHJhY2tzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckdyaWQ6OnJlc29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjp0cmFja1NpemVGb3JUcmFja1NpemVDb21wdXRhdGlvblBo
YXNlKTogTmV3IGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFByb2Nl
c3NUcmFja0ZvclRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2UpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OnRyYWNrU2hvdWxkR3Jvd0JleW9uZEdyb3d0aExpbWl0c0ZvclRyYWNrU2l6ZUNvbXB1
dGF0aW9uUGhhc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmRpc3RyaWJ1dGVTcGFjZVBo
YXNlRm9yVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6dXBkYXRlVHJhY2tTaXplRm9yVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6
aW5nRnVuY3Rpb25zRm9ySXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6ZGlz
dHJpYnV0ZVNwYWNlVG9UcmFja3MpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHcmlkLmg6
CisKKzIwMTUtMDQtMDkgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+
CisKICAgICAgICAgVW5yZXZpZXdlZCwgYWRkZWQgQ1NTIEdyaWQgTGF5b3V0IHRvIGZlYXR1cmVz
Lmpzb24gZmlsZS4KIAogICAgICAgICAqIGZlYXR1cmVzLmpzb246CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyR3JpZC5jcHAKaW5kZXggN2M1YjdkNTE0YTJmMjJkODFhM2I5OTdiNmYwNDRh
NjhmYjg1NjA0Mi4uMTVjY2ZhZGNjNjEzYWEzZjQ3Yzc3MjVmNmRmYzFmZWUwYmMyY2I0MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcApAQCAtMzcyLDcgKzM3Miw3IEBA
IHZvaWQgUmVuZGVyR3JpZDo6Y29tcHV0ZVVzZWRCcmVhZHRoT2ZHcmlkVHJhY2tzKEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiBkaXJlY3RpCiAgICAgICAgICAgICB0cmFja3NGb3JEaXN0cmlidXRp
b25baV0tPnNldFBsYW5uZWRTaXplKHRyYWNrc0ZvckRpc3RyaWJ1dGlvbltpXS0+YmFzZVNpemUo
KSk7CiAgICAgICAgIH0KIAotICAgICAgICBkaXN0cmlidXRlU3BhY2VUb1RyYWNrcyh0cmFja3NG
b3JEaXN0cmlidXRpb24sIG51bGxwdHIsICZHcmlkVHJhY2s6OmJhc2VTaXplLCBhdmFpbGFibGVM
b2dpY2FsU3BhY2UpOworICAgICAgICBkaXN0cmlidXRlU3BhY2VUb1RyYWNrcyhEaXN0cmlidXRl
U3BhY2VUb0Jhc2VTaXplcywgdHJhY2tzRm9yRGlzdHJpYnV0aW9uLCBudWxscHRyLCBhdmFpbGFi
bGVMb2dpY2FsU3BhY2UpOwogCiAgICAgICAgIGZvciAoYXV0byogdHJhY2sgOiB0cmFja3NGb3JE
aXN0cmlidXRpb24pCiAgICAgICAgICAgICB0cmFjay0+c2V0QmFzZVNpemUodHJhY2stPnBsYW5u
ZWRTaXplKCkpOwpAQCAtNjQyLDEwICs2NDIsMTAgQEAgdm9pZCBSZW5kZXJHcmlkOjpyZXNvbHZl
Q29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnMoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW8K
ICAgICBhdXRvIGVuZCA9IHNpemluZ0RhdGEuaXRlbXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLmVu
ZCgpOwogICAgIHdoaWxlIChpdCAhPSBlbmQpIHsKICAgICAgICAgR3JpZEl0ZW1zU3Bhbkdyb3Vw
UmFuZ2Ugc3Bhbkdyb3VwUmFuZ2UgPSB7IGl0LCBzdGQ6OnVwcGVyX2JvdW5kKGl0LCBlbmQsICpp
dCkgfTsKLSAgICAgICAgcmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6aW5nRnVuY3Rpb25zRm9y
SXRlbXMoZGlyZWN0aW9uLCBzaXppbmdEYXRhLCBzcGFuR3JvdXBSYW5nZSwgJkdyaWRUcmFja1Np
emU6Omhhc01pbk9yTWF4Q29udGVudE1pblRyYWNrQnJlYWR0aCwgJlJlbmRlckdyaWQ6Om1pbkNv
bnRlbnRGb3JDaGlsZCwgJkdyaWRUcmFjazo6YmFzZVNpemUsICZHcmlkVHJhY2s6OmJhc2VTaXpl
LCAmR3JpZFRyYWNrOjpzZXRCYXNlU2l6ZSwgJkdyaWRUcmFja1NpemU6Omhhc01pbkNvbnRlbnRN
aW5UcmFja0JyZWFkdGhBbmRNaW5Pck1heENvbnRlbnRNYXhUcmFja0JyZWFkdGgpOwotICAgICAg
ICByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JJdGVtcyhkaXJlY3Rp
b24sIHNpemluZ0RhdGEsIHNwYW5Hcm91cFJhbmdlLCAmR3JpZFRyYWNrU2l6ZTo6aGFzTWF4Q29u
dGVudE1pblRyYWNrQnJlYWR0aCwgJlJlbmRlckdyaWQ6Om1heENvbnRlbnRGb3JDaGlsZCwgJkdy
aWRUcmFjazo6YmFzZVNpemUsICZHcmlkVHJhY2s6OmJhc2VTaXplLCAmR3JpZFRyYWNrOjpzZXRC
YXNlU2l6ZSwgJkdyaWRUcmFja1NpemU6Omhhc01heENvbnRlbnRNaW5UcmFja0JyZWFkdGhBbmRN
YXhDb250ZW50TWF4VHJhY2tCcmVhZHRoKTsKLSAgICAgICAgcmVzb2x2ZUNvbnRlbnRCYXNlZFRy
YWNrU2l6aW5nRnVuY3Rpb25zRm9ySXRlbXMoZGlyZWN0aW9uLCBzaXppbmdEYXRhLCBzcGFuR3Jv
dXBSYW5nZSwgJkdyaWRUcmFja1NpemU6Omhhc01pbk9yTWF4Q29udGVudE1heFRyYWNrQnJlYWR0
aCwgJlJlbmRlckdyaWQ6Om1pbkNvbnRlbnRGb3JDaGlsZCwgJkdyaWRUcmFjazo6Z3Jvd3RoTGlt
aXQsICZHcmlkVHJhY2s6Omdyb3d0aExpbWl0SWZOb3RJbmZpbml0ZSwgJkdyaWRUcmFjazo6c2V0
R3Jvd3RoTGltaXQpOwotICAgICAgICByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5j
dGlvbnNGb3JJdGVtcyhkaXJlY3Rpb24sIHNpemluZ0RhdGEsIHNwYW5Hcm91cFJhbmdlLCAmR3Jp
ZFRyYWNrU2l6ZTo6aGFzTWF4Q29udGVudE1heFRyYWNrQnJlYWR0aCwgJlJlbmRlckdyaWQ6Om1h
eENvbnRlbnRGb3JDaGlsZCwgJkdyaWRUcmFjazo6Z3Jvd3RoTGltaXQsICZHcmlkVHJhY2s6Omdy
b3d0aExpbWl0SWZOb3RJbmZpbml0ZSwgJkdyaWRUcmFjazo6c2V0R3Jvd3RoTGltaXQpOworICAg
ICAgICByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JJdGVtcyhSZXNv
bHZlSW50cmluc2ljTWluaW11bXMsIGRpcmVjdGlvbiwgc2l6aW5nRGF0YSwgc3Bhbkdyb3VwUmFu
Z2UpOworICAgICAgICByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JJ
dGVtcyhSZXNvbHZlTWF4Q29udGVudE1pbmltdW1zLCBkaXJlY3Rpb24sIHNpemluZ0RhdGEsIHNw
YW5Hcm91cFJhbmdlKTsKKyAgICAgICAgcmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6aW5nRnVu
Y3Rpb25zRm9ySXRlbXMoUmVzb2x2ZUludHJpbnNpY01heGltdW1zLCBkaXJlY3Rpb24sIHNpemlu
Z0RhdGEsIHNwYW5Hcm91cFJhbmdlKTsKKyAgICAgICAgcmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNr
U2l6aW5nRnVuY3Rpb25zRm9ySXRlbXMoUmVzb2x2ZU1heENvbnRlbnRNYXhpbXVtcywgZGlyZWN0
aW9uLCBzaXppbmdEYXRhLCBzcGFuR3JvdXBSYW5nZSk7CiAgICAgICAgIGl0ID0gc3Bhbkdyb3Vw
UmFuZ2UucmFuZ2VFbmQ7CiAgICAgfQogCkBAIC02NzIsMTIgKzY3Miw5NiBAQCB2b2lkIFJlbmRl
ckdyaWQ6OnJlc29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9uc0Zvck5vblNwYW5u
aW5nSXRlbXMoR3JpZAogICAgICAgICB0cmFjay5zZXRHcm93dGhMaW1pdChzdGQ6Om1heCh0cmFj
ay5ncm93dGhMaW1pdCgpLCBtYXhDb250ZW50Rm9yQ2hpbGQoZ3JpZEl0ZW0sIGRpcmVjdGlvbiwg
Y29sdW1uVHJhY2tzKSkpOwogfQogCi12b2lkIFJlbmRlckdyaWQ6OnJlc29sdmVDb250ZW50QmFz
ZWRUcmFja1NpemluZ0Z1bmN0aW9uc0Zvckl0ZW1zKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBk
aXJlY3Rpb24sIEdyaWRTaXppbmdEYXRhJiBzaXppbmdEYXRhLCBjb25zdCBHcmlkSXRlbXNTcGFu
R3JvdXBSYW5nZSYgZ3JpZEl0ZW1zV2l0aFNwYW4sIEZpbHRlckZ1bmN0aW9uIGZpbHRlckZ1bmN0
aW9uLCBTaXppbmdGdW5jdGlvbiBzaXppbmdGdW5jdGlvbiwgQWNjdW11bGF0b3JHZXR0ZXIgdHJh
Y2tTaXplLCBBY2N1bXVsYXRvckdldHRlciBjb3JyZWN0ZWRUcmFja1NpemUsIEFjY3VtdWxhdG9y
R3Jvd0Z1bmN0aW9uIHRyYWNrR3Jvd3RoRnVuY3Rpb24sIEZpbHRlckZ1bmN0aW9uIGdyb3dBYm92
ZU1heEJyZWFkdGhGaWx0ZXJGdW5jdGlvbikKK2VudW0gVHJhY2tTaXplUmVzdHJpY3Rpb24gewor
ICAgIEFsbG93SW5maW5pdHksCisgICAgRm9yYmlkSW5maW5pdHksCit9OworCitzdGF0aWMgY29u
c3QgTGF5b3V0VW5pdCYgdHJhY2tTaXplRm9yVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZShSZW5k
ZXJHcmlkOjpUcmFja1NpemVDb21wdXRhdGlvblBoYXNlIHBoYXNlLCBHcmlkVHJhY2smIHRyYWNr
LCBUcmFja1NpemVSZXN0cmljdGlvbiByZXN0cmljdGlvbikKK3sKKyAgICBzd2l0Y2ggKHBoYXNl
KSB7CisgICAgY2FzZSBSZW5kZXJHcmlkOjpSZXNvbHZlSW50cmluc2ljTWluaW11bXM6CisgICAg
Y2FzZSBSZW5kZXJHcmlkOjpSZXNvbHZlTWF4Q29udGVudE1pbmltdW1zOgorICAgICAgICByZXR1
cm4gdHJhY2suYmFzZVNpemUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZW5kZXJHcmlk
OjpSZXNvbHZlSW50cmluc2ljTWF4aW11bXM6CisgICAgY2FzZSBSZW5kZXJHcmlkOjpSZXNvbHZl
TWF4Q29udGVudE1heGltdW1zOgorICAgICAgICByZXR1cm4gcmVzdHJpY3Rpb24gPT0gQWxsb3dJ
bmZpbml0eSA/IHRyYWNrLmdyb3d0aExpbWl0KCkgOiB0cmFjay5ncm93dGhMaW1pdElmTm90SW5m
aW5pdGUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIHRyYWNrLmJhc2VTaXplKCk7Cit9CisKK3N0YXRpYyBib29sIHNob3Vs
ZFByb2Nlc3NUcmFja0ZvclRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2UoUmVuZGVyR3JpZDo6VHJh
Y2tTaXplQ29tcHV0YXRpb25QaGFzZSBwaGFzZSwgY29uc3QgR3JpZFRyYWNrU2l6ZSYgdHJhY2tT
aXplKQoreworICAgIHN3aXRjaCAocGhhc2UpIHsKKyAgICBjYXNlIFJlbmRlckdyaWQ6OlJlc29s
dmVJbnRyaW5zaWNNaW5pbXVtczoKKyAgICAgICAgcmV0dXJuIHRyYWNrU2l6ZS5oYXNNaW5Pck1h
eENvbnRlbnRNaW5UcmFja0JyZWFkdGgoKTsKKyAgICBjYXNlIFJlbmRlckdyaWQ6OlJlc29sdmVN
YXhDb250ZW50TWluaW11bXM6CisgICAgICAgIHJldHVybiB0cmFja1NpemUuaGFzTWF4Q29udGVu
dE1pblRyYWNrQnJlYWR0aCgpOworICAgIGNhc2UgUmVuZGVyR3JpZDo6UmVzb2x2ZUludHJpbnNp
Y01heGltdW1zOgorICAgICAgICByZXR1cm4gdHJhY2tTaXplLmhhc01pbk9yTWF4Q29udGVudE1h
eFRyYWNrQnJlYWR0aCgpOworICAgIGNhc2UgUmVuZGVyR3JpZDo6UmVzb2x2ZU1heENvbnRlbnRN
YXhpbXVtczoKKyAgICAgICAgcmV0dXJuIHRyYWNrU2l6ZS5oYXNNYXhDb250ZW50TWF4VHJhY2tC
cmVhZHRoKCk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitzdGF0aWMgYm9vbCB0cmFja1Nob3VsZEdyb3dCZXlvbmRHcm93dGhMaW1p
dHNGb3JUcmFja1NpemVDb21wdXRhdGlvblBoYXNlKFJlbmRlckdyaWQ6OlRyYWNrU2l6ZUNvbXB1
dGF0aW9uUGhhc2UgcGhhc2UsIGNvbnN0IEdyaWRUcmFja1NpemUmIHRyYWNrU2l6ZSkKK3sKKyAg
ICBzd2l0Y2ggKHBoYXNlKSB7CisgICAgY2FzZSBSZW5kZXJHcmlkOjpSZXNvbHZlSW50cmluc2lj
TWluaW11bXM6CisgICAgICAgIHJldHVybiB0cmFja1NpemUuaGFzTWluQ29udGVudE1pblRyYWNr
QnJlYWR0aEFuZE1pbk9yTWF4Q29udGVudE1heFRyYWNrQnJlYWR0aCgpOworICAgIGNhc2UgUmVu
ZGVyR3JpZDo6UmVzb2x2ZU1heENvbnRlbnRNaW5pbXVtczoKKyAgICAgICAgcmV0dXJuIHRyYWNr
U2l6ZS5oYXNNYXhDb250ZW50TWluVHJhY2tCcmVhZHRoQW5kTWF4Q29udGVudE1heFRyYWNrQnJl
YWR0aCgpOworICAgIGNhc2UgUmVuZGVyR3JpZDo6UmVzb2x2ZUludHJpbnNpY01heGltdW1zOgor
ICAgIGNhc2UgUmVuZGVyR3JpZDo6UmVzb2x2ZU1heENvbnRlbnRNYXhpbXVtczoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitzdGF0aWMgUmVuZGVyR3JpZDo6RGlzdHJpYnV0ZVNwYWNlUGhhc2Ug
ZGlzdHJpYnV0ZVNwYWNlUGhhc2VGb3JUcmFja1NpemVDb21wdXRhdGlvblBoYXNlKFJlbmRlckdy
aWQ6OlRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2UgcGhhc2UpCit7CisgICAgc3dpdGNoIChwaGFz
ZSkgeworICAgIGNhc2UgUmVuZGVyR3JpZDo6UmVzb2x2ZUludHJpbnNpY01pbmltdW1zOgorICAg
IGNhc2UgUmVuZGVyR3JpZDo6UmVzb2x2ZU1heENvbnRlbnRNaW5pbXVtczoKKyAgICAgICAgcmV0
dXJuIFJlbmRlckdyaWQ6OkRpc3RyaWJ1dGVTcGFjZVRvQmFzZVNpemVzOworICAgIGNhc2UgUmVu
ZGVyR3JpZDo6UmVzb2x2ZUludHJpbnNpY01heGltdW1zOgorICAgIGNhc2UgUmVuZGVyR3JpZDo6
UmVzb2x2ZU1heENvbnRlbnRNYXhpbXVtczoKKyAgICAgICAgcmV0dXJuIFJlbmRlckdyaWQ6OkRp
c3RyaWJ1dGVTcGFjZVRvR3Jvd3RoTGltaXRzOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBSZW5kZXJHcmlkOjpEaXN0cmlidXRlU3BhY2VUb0Jhc2VTaXpl
czsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlVHJhY2tTaXplRm9yVHJhY2tTaXplQ29tcHV0YXRp
b25QaGFzZShSZW5kZXJHcmlkOjpUcmFja1NpemVDb21wdXRhdGlvblBoYXNlIHBoYXNlLCBHcmlk
VHJhY2smIHRyYWNrKQoreworICAgIHN3aXRjaCAocGhhc2UpIHsKKyAgICBjYXNlIFJlbmRlckdy
aWQ6OlJlc29sdmVJbnRyaW5zaWNNaW5pbXVtczoKKyAgICBjYXNlIFJlbmRlckdyaWQ6OlJlc29s
dmVNYXhDb250ZW50TWluaW11bXM6CisgICAgICAgIHRyYWNrLnNldEJhc2VTaXplKHRyYWNrLnBs
YW5uZWRTaXplKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJlbmRlckdyaWQ6OlJlc29s
dmVJbnRyaW5zaWNNYXhpbXVtczoKKyAgICBjYXNlIFJlbmRlckdyaWQ6OlJlc29sdmVNYXhDb250
ZW50TWF4aW11bXM6CisgICAgICAgIHRyYWNrLnNldEdyb3d0aExpbWl0KHRyYWNrLnBsYW5uZWRT
aXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyR3JpZDo6cmVz
b2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6aW5nRnVuY3Rpb25zRm9ySXRlbXMoVHJhY2tTaXplQ29t
cHV0YXRpb25QaGFzZSBwaGFzZSwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwg
R3JpZFNpemluZ0RhdGEmIHNpemluZ0RhdGEsIGNvbnN0IEdyaWRJdGVtc1NwYW5Hcm91cFJhbmdl
JiBncmlkSXRlbXNXaXRoU3BhbikKIHsKICAgICBWZWN0b3I8R3JpZFRyYWNrPiYgdHJhY2tzID0g
KGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IHNpemluZ0RhdGEuY29sdW1uVHJhY2tzIDogc2l6
aW5nRGF0YS5yb3dUcmFja3M7CiAgICAgZm9yIChjb25zdCBhdXRvJiB0cmFja0luZGV4IDogc2l6
aW5nRGF0YS5jb250ZW50U2l6ZWRUcmFja3NJbmRleCkgewogICAgICAgICBHcmlkVHJhY2smIHRy
YWNrID0gdHJhY2tzW3RyYWNrSW5kZXhdOwotICAgICAgICB0cmFjay5zZXRQbGFubmVkU2l6ZSgo
dHJhY2suKnRyYWNrU2l6ZSkoKSk7CisgICAgICAgIHRyYWNrLnNldFBsYW5uZWRTaXplKHRyYWNr
U2l6ZUZvclRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2UocGhhc2UsIHRyYWNrLCBBbGxvd0luZmlu
aXR5KSk7CiAgICAgfQogCiAgICAgZm9yIChhdXRvIGl0ID0gZ3JpZEl0ZW1zV2l0aFNwYW4ucmFu
Z2VTdGFydDsgaXQgIT0gZ3JpZEl0ZW1zV2l0aFNwYW4ucmFuZ2VFbmQ7ICsraXQpIHsKQEAgLTY5
MiwzMSArNzc2LDQyIEBAIHZvaWQgUmVuZGVyR3JpZDo6cmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNr
U2l6aW5nRnVuY3Rpb25zRm9ySXRlbXMoR3JpZFRyYWNrU2l6aW5nCiAgICAgICAgIGZvciAoYXV0
byYgdHJhY2tQb3NpdGlvbiA6IGl0ZW1TcGFuKSB7CiAgICAgICAgICAgICBjb25zdCBHcmlkVHJh
Y2tTaXplJiB0cmFja1NpemUgPSBncmlkVHJhY2tTaXplKGRpcmVjdGlvbiwgdHJhY2tQb3NpdGlv
bi50b0ludCgpKTsKICAgICAgICAgICAgIEdyaWRUcmFjayYgdHJhY2sgPSAoZGlyZWN0aW9uID09
IEZvckNvbHVtbnMpID8gc2l6aW5nRGF0YS5jb2x1bW5UcmFja3NbdHJhY2tQb3NpdGlvbi50b0lu
dCgpXSA6IHNpemluZ0RhdGEucm93VHJhY2tzW3RyYWNrUG9zaXRpb24udG9JbnQoKV07Ci0gICAg
ICAgICAgICBzcGFubmluZ1RyYWNrc1NpemUgKz0gKHRyYWNrLipjb3JyZWN0ZWRUcmFja1NpemUp
KCk7Ci0gICAgICAgICAgICBpZiAoISh0cmFja1NpemUuKmZpbHRlckZ1bmN0aW9uKSgpKQorICAg
ICAgICAgICAgc3Bhbm5pbmdUcmFja3NTaXplICs9IHRyYWNrU2l6ZUZvclRyYWNrU2l6ZUNvbXB1
dGF0aW9uUGhhc2UocGhhc2UsIHRyYWNrLCBGb3JiaWRJbmZpbml0eSk7CisgICAgICAgICAgICBp
ZiAoIXNob3VsZFByb2Nlc3NUcmFja0ZvclRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2UocGhhc2Us
IHRyYWNrU2l6ZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIHNp
emluZ0RhdGEuZmlsdGVyZWRUcmFja3MuYXBwZW5kKCZ0cmFjayk7CiAKLSAgICAgICAgICAgIGlm
ICghZ3Jvd0Fib3ZlTWF4QnJlYWR0aEZpbHRlckZ1bmN0aW9uIHx8ICh0cmFja1NpemUuKmdyb3dB
Ym92ZU1heEJyZWFkdGhGaWx0ZXJGdW5jdGlvbikoKSkKKyAgICAgICAgICAgIGlmICh0cmFja1No
b3VsZEdyb3dCZXlvbmRHcm93dGhMaW1pdHNGb3JUcmFja1NpemVDb21wdXRhdGlvblBoYXNlKHBo
YXNlLCB0cmFja1NpemUpKQogICAgICAgICAgICAgICAgIHNpemluZ0RhdGEuZ3Jvd0JleW9uZEdy
b3d0aExpbWl0c1RyYWNrcy5hcHBlbmQoJnRyYWNrKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChzaXppbmdEYXRhLmZpbHRlcmVkVHJhY2tzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCisgICAgICAgIExheW91dFVuaXQgaXRlbVNpemU7CisgICAgICAgIHN3aXRjaCAocGhh
c2UpIHsKKyAgICAgICAgY2FzZSBSZXNvbHZlSW50cmluc2ljTWluaW11bXM6CisgICAgICAgIGNh
c2UgUmVzb2x2ZUludHJpbnNpY01heGltdW1zOgorICAgICAgICAgICAgaXRlbVNpemUgPSBtaW5D
b250ZW50Rm9yQ2hpbGQoZ3JpZEl0ZW1XaXRoU3Bhbi5ncmlkSXRlbSgpLCBkaXJlY3Rpb24sIHNp
emluZ0RhdGEuY29sdW1uVHJhY2tzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFJlc29sdmVNYXhDb250ZW50TWluaW11bXM6CisgICAgICAgIGNhc2UgUmVzb2x2ZU1heENvbnRl
bnRNYXhpbXVtczoKKyAgICAgICAgICAgIGl0ZW1TaXplID0gbWF4Q29udGVudEZvckNoaWxkKGdy
aWRJdGVtV2l0aFNwYW4uZ3JpZEl0ZW0oKSwgZGlyZWN0aW9uLCBzaXppbmdEYXRhLmNvbHVtblRy
YWNrcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBMYXlvdXRVbml0
IGV4dHJhU3BhY2UgPSBpdGVtU2l6ZSAtIHNwYW5uaW5nVHJhY2tzU2l6ZTsKICAgICAgICAgLy8g
U3BlY3MgbWFuZGF0ZSB0byBmbG9vciBleHRyYVNwYWNlIHRvIDAuIEluc3RlYWQgd2UgZGlyZWN0
bHkgYXZvaWQgdGhlIGZ1bmN0aW9uIGNhbGwgaW4gdGhvc2UgY2FzZXMgYXMgaXQgd2lsbCBiZQog
ICAgICAgICAvLyBhIG5vb3AgaW4gdGVybXMgb2YgdHJhY2sgc2l6aW5nLgotICAgICAgICBMYXlv
dXRVbml0IGV4dHJhU3BhY2UgPSAodGhpcy0+KnNpemluZ0Z1bmN0aW9uKShncmlkSXRlbVdpdGhT
cGFuLmdyaWRJdGVtKCksIGRpcmVjdGlvbiwgc2l6aW5nRGF0YS5jb2x1bW5UcmFja3MpIC0gc3Bh
bm5pbmdUcmFja3NTaXplOwogICAgICAgICBpZiAoZXh0cmFTcGFjZSA+IDApIHsKICAgICAgICAg
ICAgIGF1dG8qIHRyYWNrc1RvR3Jvd0JleW9uZEdyb3d0aExpbWl0cyA9IHNpemluZ0RhdGEuZ3Jv
d0JleW9uZEdyb3d0aExpbWl0c1RyYWNrcy5pc0VtcHR5KCkgPyAmc2l6aW5nRGF0YS5maWx0ZXJl
ZFRyYWNrcyA6ICZzaXppbmdEYXRhLmdyb3dCZXlvbmRHcm93dGhMaW1pdHNUcmFja3M7Ci0gICAg
ICAgICAgICBkaXN0cmlidXRlU3BhY2VUb1RyYWNrcyhzaXppbmdEYXRhLmZpbHRlcmVkVHJhY2tz
LCB0cmFja3NUb0dyb3dCZXlvbmRHcm93dGhMaW1pdHMsIGNvcnJlY3RlZFRyYWNrU2l6ZSwgZXh0
cmFTcGFjZSk7CisgICAgICAgICAgICBkaXN0cmlidXRlU3BhY2VUb1RyYWNrcyhkaXN0cmlidXRl
U3BhY2VQaGFzZUZvclRyYWNrU2l6ZUNvbXB1dGF0aW9uUGhhc2UocGhhc2UpLCBzaXppbmdEYXRh
LmZpbHRlcmVkVHJhY2tzLCB0cmFja3NUb0dyb3dCZXlvbmRHcm93dGhMaW1pdHMsIGV4dHJhU3Bh
Y2UpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgZm9yIChjb25zdCBhdXRvJiB0cmFja0luZGV4
IDogc2l6aW5nRGF0YS5jb250ZW50U2l6ZWRUcmFja3NJbmRleCkgewogICAgICAgICBHcmlkVHJh
Y2smIHRyYWNrID0gdHJhY2tzW3RyYWNrSW5kZXhdOwotICAgICAgICAodHJhY2suKnRyYWNrR3Jv
d3RoRnVuY3Rpb24pKHRyYWNrLnBsYW5uZWRTaXplKCkpOworICAgICAgICB1cGRhdGVUcmFja1Np
emVGb3JUcmFja1NpemVDb21wdXRhdGlvblBoYXNlKHBoYXNlLCB0cmFjayk7CiAgICAgfQogfQog
CkBAIC03MzMsNyArODI4LDcgQEAgc3RhdGljIGJvb2wgc29ydEJ5R3JpZFRyYWNrR3Jvd3RoUG90
ZW50aWFsKGNvbnN0IEdyaWRUcmFjayogdHJhY2sxLCBjb25zdCBHcmlkVHIKICAgICByZXR1cm4g
KHRyYWNrMS0+Z3Jvd3RoTGltaXQoKSAtIHRyYWNrMS0+YmFzZVNpemUoKSkgPCAodHJhY2syLT5n
cm93dGhMaW1pdCgpIC0gdHJhY2syLT5iYXNlU2l6ZSgpKTsKIH0KIAotdm9pZCBSZW5kZXJHcmlk
OjpkaXN0cmlidXRlU3BhY2VUb1RyYWNrcyhWZWN0b3I8R3JpZFRyYWNrKj4mIHRyYWNrcywgY29u
c3QgVmVjdG9yPEdyaWRUcmFjayo+KiBncm93QmV5b25kR3Jvd3RoTGltaXRzVHJhY2tzLCBBY2N1
bXVsYXRvckdldHRlciB0cmFja0dldHRlciwgTGF5b3V0VW5pdCYgYXZhaWxhYmxlTG9naWNhbFNw
YWNlKQordm9pZCBSZW5kZXJHcmlkOjpkaXN0cmlidXRlU3BhY2VUb1RyYWNrcyhEaXN0cmlidXRl
U3BhY2VQaGFzZSBwaGFzZSwgVmVjdG9yPEdyaWRUcmFjayo+JiB0cmFja3MsIGNvbnN0IFZlY3Rv
cjxHcmlkVHJhY2sqPiogZ3Jvd0JleW9uZEdyb3d0aExpbWl0c1RyYWNrcywgTGF5b3V0VW5pdCYg
YXZhaWxhYmxlTG9naWNhbFNwYWNlKQogewogICAgIEFTU0VSVChhdmFpbGFibGVMb2dpY2FsU3Bh
Y2UgPiAwKTsKICAgICBzdGQ6OnNvcnQodHJhY2tzLmJlZ2luKCksIHRyYWNrcy5lbmQoKSwgc29y
dEJ5R3JpZFRyYWNrR3Jvd3RoUG90ZW50aWFsKTsKQEAgLTc0Miw3ICs4MzcsMTUgQEAgdm9pZCBS
ZW5kZXJHcmlkOjpkaXN0cmlidXRlU3BhY2VUb1RyYWNrcyhWZWN0b3I8R3JpZFRyYWNrKj4mIHRy
YWNrcywgY29uc3QgVmVjdG8KIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0cmFja3NT
aXplOyArK2kpIHsKICAgICAgICAgR3JpZFRyYWNrJiB0cmFjayA9ICp0cmFja3NbaV07Ci0gICAg
ICAgIGNvbnN0IExheW91dFVuaXQmIHRyYWNrQnJlYWR0aCA9ICh0cmFjay4qdHJhY2tHZXR0ZXIp
KCk7CisgICAgICAgIExheW91dFVuaXQgdHJhY2tCcmVhZHRoOworICAgICAgICBzd2l0Y2ggKHBo
YXNlKSB7CisgICAgICAgIGNhc2UgRGlzdHJpYnV0ZVNwYWNlVG9CYXNlU2l6ZXM6CisgICAgICAg
ICAgICB0cmFja0JyZWFkdGggPSB0cmFjay5iYXNlU2l6ZSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRGlzdHJpYnV0ZVNwYWNlVG9Hcm93dGhMaW1pdHM6CisgICAgICAgICAg
ICB0cmFja0JyZWFkdGggPSB0cmFjay5ncm93dGhMaW1pdElmTm90SW5maW5pdGUoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJvb2wgaW5maW5pdGVHcm93dGhQb3Rl
bnRpYWwgPSB0cmFjay5ncm93dGhMaW1pdElzSW5maW5pdGUoKTsKICAgICAgICAgTGF5b3V0VW5p
dCB0cmFja0dyb3d0aFBvdGVudGlhbCA9IGluZmluaXRlR3Jvd3RoUG90ZW50aWFsID8gdHJhY2su
Z3Jvd3RoTGltaXQoKSA6IHRyYWNrLmdyb3d0aExpbWl0KCkgLSB0cmFja0JyZWFkdGg7CiAgICAg
ICAgIHRyYWNrLnRlbXBTaXplKCkgPSB0cmFja0JyZWFkdGg7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckdyaWQuaAppbmRleCBlN2E3NTkzYWNhODBjY2EzZTgyMGZjZmVlMjVlZmFiMmFlNzZl
YzI0Li4yZTczOTFiZjA3ODUwMzU3ODYwMTM2Mzk2NjBjOGEwOTQyZmU1YmU4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKQEAgLTU1LDYgKzU1LDIwIEBAIHB1YmxpYzoKICAg
ICBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mIGNvbHVtblBvc2l0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fY29sdW1uUG9zaXRpb25zOyB9CiAgICAgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+JiBy
b3dQb3NpdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3Jvd1Bvc2l0aW9uczsgfQogCisgICAgZW51
bSBUcmFja1NpemVDb21wdXRhdGlvblBoYXNlIHsKKyAgICAgICAgUmVzb2x2ZUludHJpbnNpY01p
bmltdW1zLAorICAgICAgICBSZXNvbHZlTWF4Q29udGVudE1pbmltdW1zLAorICAgICAgICBSZXNv
bHZlSW50cmluc2ljTWF4aW11bXMsCisgICAgICAgIFJlc29sdmVNYXhDb250ZW50TWF4aW11bXMs
CisgICAgfTsKKyAgICB0eXBlZGVmIGVudW0gVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZSBUcmFj
a1NpemVDb21wdXRhdGlvblBoYXNlOworCisgICAgZW51bSBEaXN0cmlidXRlU3BhY2VQaGFzZSB7
CisgICAgICAgIERpc3RyaWJ1dGVTcGFjZVRvQmFzZVNpemVzLAorICAgICAgICBEaXN0cmlidXRl
U3BhY2VUb0dyb3d0aExpbWl0cywKKyAgICB9OworICAgIHR5cGVkZWYgZW51bSBEaXN0cmlidXRl
U3BhY2VQaGFzZSBEaXN0cmlidXRlU3BhY2VQaGFzZTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJv
b2wgaXNSZW5kZXJHcmlkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtODcs
MTQgKzEwMSwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgcG9wdWxhdGVHcmlkUG9zaXRpb25zKGNv
bnN0IEdyaWRTaXppbmdEYXRhJik7CiAgICAgdm9pZCBjbGVhckdyaWQoKTsKIAotICAgIHR5cGVk
ZWYgTGF5b3V0VW5pdCAoUmVuZGVyR3JpZDo6KiBTaXppbmdGdW5jdGlvbikoUmVuZGVyQm94Jiwg
R3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCBWZWN0b3I8R3JpZFRyYWNrPiYpOwotICAgIHR5cGVk
ZWYgY29uc3QgTGF5b3V0VW5pdCYgKEdyaWRUcmFjazo6KiBBY2N1bXVsYXRvckdldHRlcikoKSBj
b25zdDsKLSAgICB0eXBlZGVmIHZvaWQgKEdyaWRUcmFjazo6KiBBY2N1bXVsYXRvckdyb3dGdW5j
dGlvbikoTGF5b3V0VW5pdCk7Ci0gICAgdHlwZWRlZiBib29sIChHcmlkVHJhY2tTaXplOjoqIEZp
bHRlckZ1bmN0aW9uKSgpIGNvbnN0OwogICAgIHR5cGVkZWYgc3RydWN0IEdyaWRJdGVtc1NwYW5H
cm91cFJhbmdlIEdyaWRJdGVtc1NwYW5Hcm91cFJhbmdlOwogICAgIHZvaWQgcmVzb2x2ZUNvbnRl
bnRCYXNlZFRyYWNrU2l6aW5nRnVuY3Rpb25zRm9yTm9uU3Bhbm5pbmdJdGVtcyhHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24sIGNvbnN0IEdyaWRDb29yZGluYXRlJiwgUmVuZGVyQm94JiBncmlkSXRl
bSwgR3JpZFRyYWNrJiwgVmVjdG9yPEdyaWRUcmFjaz4mIGNvbHVtblRyYWNrcyk7Ci0gICAgdm9p
ZCByZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JJdGVtcyhHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24sIEdyaWRTaXppbmdEYXRhJiwgY29uc3QgR3JpZEl0ZW1zU3Bhbkdy
b3VwUmFuZ2UmLCBGaWx0ZXJGdW5jdGlvbiwgU2l6aW5nRnVuY3Rpb24sIEFjY3VtdWxhdG9yR2V0
dGVyIHRyYWNrU2l6ZSwgQWNjdW11bGF0b3JHZXR0ZXIgY29ycmVjdGVkVHJhY2tTaXplLCBBY2N1
bXVsYXRvckdyb3dGdW5jdGlvbiwgRmlsdGVyRnVuY3Rpb24gZ3Jvd0Fib3ZlTWF4QnJlYWR0aEZp
bHRlckZ1bmN0aW9uID0gbnVsbHB0cik7Ci0gICAgdm9pZCBkaXN0cmlidXRlU3BhY2VUb1RyYWNr
cyhWZWN0b3I8R3JpZFRyYWNrKj4mLCBjb25zdCBWZWN0b3I8R3JpZFRyYWNrKj4qIGdyb3dCZXlv
bmRHcm93dGhMaW1pdHNUcmFja3MsIEFjY3VtdWxhdG9yR2V0dGVyLCBMYXlvdXRVbml0JiBhdmFp
bGFibGVMb2dpY2FsU3BhY2UpOworICAgIHZvaWQgcmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6
aW5nRnVuY3Rpb25zRm9ySXRlbXMoVHJhY2tTaXplQ29tcHV0YXRpb25QaGFzZSwgR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uLCBHcmlkU2l6aW5nRGF0YSYsIGNvbnN0IEdyaWRJdGVtc1NwYW5Hcm91
cFJhbmdlJik7CisgICAgdm9pZCBkaXN0cmlidXRlU3BhY2VUb1RyYWNrcyhEaXN0cmlidXRlU3Bh
Y2VQaGFzZSwgVmVjdG9yPEdyaWRUcmFjayo+JiwgY29uc3QgVmVjdG9yPEdyaWRUcmFjayo+KiBn
cm93QmV5b25kR3Jvd3RoTGltaXRzVHJhY2tzLCBMYXlvdXRVbml0JiBhdmFpbGFibGVMb2dpY2Fs
U3BhY2UpOwogCiAgICAgZG91YmxlIGNvbXB1dGVOb3JtYWxpemVkRnJhY3Rpb25CcmVhZHRoKFZl
Y3RvcjxHcmlkVHJhY2s+JiwgY29uc3QgR3JpZFNwYW4mIHRyYWNrc1NwYW4sIEdyaWRUcmFja1Np
emluZ0RpcmVjdGlvbiwgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsU3BhY2UpIGNvbnN0Owog
Cg==
</data>
<flag name="review"
          id="275218"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>