<?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>53894</bug_id>
          
          <creation_ts>2011-02-06 17:09:51 -0800</creation_ts>
          <short_desc>[Meta] [Qt] Very jerky scrolling because of blocking in tiled backing store.</short_desc>
          <delta_ts>2012-02-20 07:33:33 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>48082</dependson>
    
    <dependson>54587</dependson>
    
    <dependson>62506</dependson>
    
    <dependson>62521</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Viatcheslav Ostapenko">ostap73</reporter>
          <assigned_to name="Viatcheslav Ostapenko">ostap73</assigned_to>
          <cc>ademar</cc>
    
    <cc>anand.1.patil</cc>
    
    <cc>benjamin</cc>
    
    <cc>christian.webkit</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>joone.hur</cc>
    
    <cc>joone</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>luiz</cc>
    
    <cc>mtutunik</cc>
    
    <cc>nancy.piedra</cc>
    
    <cc>noam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>346410</commentid>
    <comment_count>0</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-02-06 17:09:51 -0800</bug_when>
    <thetext>Scrolling is jerky when webkit tiled backing store is enabled because of long update of big backing store.
Noticeable even on PC with large window sizes, but quite bad on mobile.
Good test website is http://dpreview.com, but any heavy website with big amount of images will show the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346414</commentid>
    <comment_count>1</comment_count>
      <attachid>81434</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-02-06 17:24:02 -0800</bug_when>
    <thetext>Created attachment 81434
Modified anomaly demo browser with QWebView replaced with QGraphicsWebView, tiling enabled and scrolling direction reporting to tiling backing store.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346420</commentid>
    <comment_count>2</comment_count>
      <attachid>81437</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-02-06 18:04:26 -0800</bug_when>
    <thetext>Created attachment 81437
Webkit tiling rework proposal.

Not a real patch. Just preview version.

Patch summary:
1. Adds API to report scrolling direction to backing store.
2. Tile distance is biased towards scrolling direction.
3. Update rect is also biased towards scrolling direction.
4. Reuse of tiles outside of update rect.
5. Tile creation timer removed. Tiles are created or reused on demand.
6. Tile update timeout is introduced. It tile painting lasts longer than update timeout then tile update continues on next time fire or paint.
7. Missing tiles have priority in painting.
8. Viewport tiles fully updated if view is not scrolled, but during scrolling tile update timeout has priority.
9. Tiles update also called from paint (with recursive calling protection) in order to reduce flicker.
10. Fixed bug with update area calculation. Instead of width * ratio it was calculated like width + width * (ratio - 1) * 2 = width * (2 * ratio - 1) resulting in very big backing store area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346544</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-02-07 04:51:49 -0800</bug_when>
    <thetext>That looks good. I think you should use this bug as a meta bug, and create 10 subtask with little patches. Some changes seem obvious, other will need to be discussed (API...).

Adding Carol in CC for (9), he investigated delayed layout issues and might have comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346703</commentid>
    <comment_count>4</comment_count>
    <who name="Misha">mtutunik</who>
    <bug_when>2011-02-07 11:51:30 -0800</bug_when>
    <thetext>Slava, 
In double TiledBackingStore::scrollBiasedTileDistance(const IntPoint&amp; viewportCenter, const IntRect&amp; tileRect) (line 510)
It looks like it should be something like:
if (m_scrollDelta.y() != 0 &amp;&amp; yOffset != 0) {</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>347009</commentid>
    <comment_count>5</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-02-07 19:02:10 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; That looks good. I think you should use this bug as a meta bug, and create 10 subtask with little patches. 

I doubt it is good idea. Changes depend on each other and I don&apos;t see how to separate them creating some meaningful patches. 

&gt; Some changes seem obvious, other will need to be discussed (API...).

Yes. I just added some setProperty API on webpage to be able to test it.
I think it would be good to add also &quot;paint timeout&quot; API. Somebody might want to change it. From my experiments, one tile painting time should be at least twice less than paint timeout. At the same time paint timeout shouldn&apos;t more than 2/3 of desired frame length (1000ms/frame rate).

&gt; Adding Carol in CC for (9), he investigated delayed layout issues and might have comments.

Yes, I kept his issue in mind. All update area calculations are done after layout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416951</commentid>
    <comment_count>6</comment_count>
      <attachid>96333</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-06-07 17:26:46 -0700</bug_when>
    <thetext>Created attachment 96333
Patch 1: Add API to notify tiling about scrolling direction. Bias tile distance against scrolling direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416952</commentid>
    <comment_count>7</comment_count>
      <attachid>96334</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-06-07 17:27:59 -0700</bug_when>
    <thetext>Created attachment 96334
Patch 2: Remove tile creation timer and do tile creation together with tile updates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416953</commentid>
    <comment_count>8</comment_count>
      <attachid>96335</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-06-07 17:28:49 -0700</bug_when>
    <thetext>Created attachment 96335
Patch 3: Add tile reuse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416954</commentid>
    <comment_count>9</comment_count>
      <attachid>96336</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-06-07 17:29:53 -0700</bug_when>
    <thetext>Created attachment 96336
Patch 4: Prioritize tile paiting. Viewport area is updated 1st and missing tiles are updated before dirty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416955</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-07 17:30:12 -0700</bug_when>
    <thetext>Attachment 96333 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/TiledBackingStore.h:69:  The parameter name &quot;delta&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/TiledBackingStore.cpp:203:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/graphics/TiledBackingStore.cpp:212:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebKit/qt/Api/qwebpage.cpp:1230:  Missing space before ( in if(  [whitespace/parens] [5]
Total errors found: 4 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416958</commentid>
    <comment_count>11</comment_count>
      <attachid>96337</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-06-07 17:30:48 -0700</bug_when>
    <thetext>Created attachment 96337
Patch 5: Add tile update timeout to break tile painting cycle to avoid blocking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416959</commentid>
    <comment_count>12</comment_count>
      <attachid>96338</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-06-07 17:31:50 -0700</bug_when>
    <thetext>Created attachment 96338
Patch 6: Do some tiles updates directly from paint to reduce flicker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416960</commentid>
    <comment_count>13</comment_count>
      <attachid>96339</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-06-07 17:34:16 -0700</bug_when>
    <thetext>Created attachment 96339
Patch 7: Fixes repainting problems if scale != 1 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416969</commentid>
    <comment_count>14</comment_count>
      <attachid>96344</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-06-07 17:44:47 -0700</bug_when>
    <thetext>Created attachment 96344
Patch 1: Add API to notify tiling about scrolling direction. Bias tile distance against scrolling direction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417150</commentid>
    <comment_count>15</comment_count>
      <attachid>96339</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-08 01:59:24 -0700</bug_when>
    <thetext>Comment on attachment 96339
Patch 7: Fixes repainting problems if scale != 1 .

Any way to make tests for this? Why wasnt this a problem before? or was it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417153</commentid>
    <comment_count>16</comment_count>
      <attachid>96335</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-08 02:13:17 -0700</bug_when>
    <thetext>Comment on attachment 96335
Patch 3: Add tile reuse.

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Part3 of tiles painting redesign.
&gt; +        Add tile reuse.

You don&apos;t explain the reasoning, why this is a good idea, any cons?

&gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:-238
&gt; -    // Remove tiles that extend outside the current contents rect.

Why remove the explanation of what overhanging tiles are... I think it is quite confusing.

&gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:245
&gt; +    getOverhangingTiles(keepRect, visibleRect, overhangingTiles);

getTilesExtendingOutsideContentsRect ? or similar. You use visibleRect here and in the implementation you use viewport.... confusing

&gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:286
&gt; +        // all tiles in place, can drop remainting overhanging tiles

Please use proper sentences for comments. Start with capital and end with dot.

&gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:394
&gt; +        RefPtr&lt;Tile&gt; ret = tileAt(oldCoordinate);

Please use something more descriptive than ret

&gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:398
&gt; +        setTile(newCoordinate, ret);
&gt; +        return ret;

duplicated code

&gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:402
&gt; +        setTile(newCoordinate, ret);
&gt; +        return ret;

same code here

&gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:410
&gt; +    return (int)((va-&gt;distance() - vb-&gt;distance()) * 1000);

why not static_cast&lt;int&gt;() ?

&gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:413
&gt; +void TiledBackingStore::getOverhangingTiles(const IntRect&amp; rect, const IntRect&amp; viewport, CoordinateDistanceVector&amp; overhangingTiles)

Why not return CoordinateDistanceVector&amp; ? would make the api a lot more clear

&gt; Source/WebCore/platform/graphics/TiledBackingStore.h:100
&gt; +        CoordinateDistancePair(const Tile::Coordinate&amp; coordinate, double distance) :
&gt; +                m_coordinate(coordinate), m_distance(distance) {}

This is not valid style

&gt; Source/WebCore/platform/graphics/TiledBackingStore.h:106
&gt; +        Tile::Coordinate    m_coordinate;
&gt; +        double              m_distance;
&gt; +    };

Remove the spacing between Coordinate and m_coordinate etc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417155</commentid>
    <comment_count>17</comment_count>
      <attachid>96344</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-08 02:18:39 -0700</bug_when>
    <thetext>Comment on attachment 96344
Patch 1: Add API to notify tiling about scrolling direction. Bias tile distance against scrolling direction.

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

Jocelyn did something similar for webkit2, you need to sync up.

&gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:197
&gt; +    // viewport covering tile should be closer

Not a proper sentence

&gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:210
&gt; +    if (m_scrollDelta.x() &amp;&amp; xOffset) {
&gt; +        double xBiasAlpha = (m_keepAreaMultiplier.width() - m_coverAreaMultiplier.width()) /
&gt; +                            m_coverAreaMultiplier.width() / 2 + 1;
&gt; +        if ((xOffset &gt; 0 &amp;&amp; m_scrollDelta.x() &gt; 0) || (xOffset &lt; 0 &amp;&amp; m_scrollDelta.x() &lt; 0))
&gt; +            xBias = 1.f / xBiasAlpha;
&gt; +        else
&gt; +            xBias = xBiasAlpha;
&gt; +    }

I would almost make a method for calculating this...

&gt; Source/WebCore/platform/graphics/TiledBackingStore.h:68
&gt; -    void setKeepAndCoverAreaMultipliers(const FloatSize&amp; keepMultiplier, const FloatSize&amp; coverMultiplier);    
&gt; +    void setKeepAndCoverAreaMultipliers(const FloatSize&amp; keepMultiplier, const FloatSize&amp; coverMultiplier);

what was changed here?

&gt; Source/WebCore/platform/graphics/TiledBackingStore.h:69
&gt; +    void setScrollDelta(const IntPoint&amp;);

We normally use IntSize for scrolling etc. Check the rest of webkit

Why not scrollBy(const IntSize&amp;) ?

&gt; Source/WebKit/qt/Api/qwebpage.cpp:1215
&gt; +    } else if (event-&gt;propertyName() == &quot;_q_TiledBackingStoreScrollDelta&quot;) {

Why this private stuff?

&gt; Source/WebKit/qt/ChangeLog:10
&gt; +        [Qt] Very jerky scrolling because of blocking in tiled backing store.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=53894
&gt; +
&gt; +        Part1 of tiles painting redesing.
&gt; +        Add API to notify tiling about scrolling direction. Bias tile distance against
&gt; +        scrolling direction.

The description doesnt have so much to do with the bug... why not create another bug report</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417157</commentid>
    <comment_count>18</comment_count>
      <attachid>96336</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-08 02:20:03 -0700</bug_when>
    <thetext>Comment on attachment 96336
Patch 4: Prioritize tile paiting. Viewport area is updated 1st and missing tiles are updated before dirty.

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

&gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:430
&gt; +            if (tile) {
&gt; +                if(tile-&gt;isDirty()) {
&gt; +                    dirtyTiles.append(CoordinateDistancePair(currentCoordinate, currentTileDistance));
&gt; +                }
&gt; +            } else {
&gt; +                missingTiles.append(CoordinateDistancePair(currentCoordinate, currentTileDistance));
&gt; +            }

You are wasting reviewers time, why didnt you even run the check-webkit-style script?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417158</commentid>
    <comment_count>19</comment_count>
      <attachid>96338</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-08 02:22:52 -0700</bug_when>
    <thetext>Comment on attachment 96338
Patch 6: Do some tiles updates directly from paint to reduce flicker.

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Do some tiles updates directly from paint to reduce flicker.

Why does that help... needs better change log.

&gt; Source/WebCore/page/Frame.cpp:966
&gt; -void Frame::tiledBackingStorePaintBegin()
&gt; +bool Frame::tiledBackingStorePaintBegin()

Very bad api, I have no clue what the returned bool could mean

&gt; Source/WebCore/page/Frame.cpp:971
&gt; +    if(m_view-&gt;isInLayout())
&gt; +        return false;

yes again you submit a patch with wrong coding style...

&gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:45
&gt; +    , m_inUpdate(false)

Could be more descriptive</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417275</commentid>
    <comment_count>20</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-06-08 09:11:30 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 96335 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96335&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        Part3 of tiles painting redesign.
&gt; &gt; +        Add tile reuse.
&gt; 
&gt; You don&apos;t explain the reasoning, why this is a good idea, any cons?

Reallocating pixmap takes time. Even with sorting 50 element array (10 times bigger than usual size) reuse function is much faster.
Creating one tile with the associated pixmap cause at least 5 allocations. I want to avoid it here.

&gt; &gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:-238
&gt; &gt; -    // Remove tiles that extend outside the current contents rect.
&gt; 
&gt; Why remove the explanation of what overhanging tiles are... I think it is quite confusing.

In Antti&apos;s implementation tile rect is clipped by content rect, so if content size changes (javascript or loading) tiles on a border need to be dropped in recreated. In addition to extra cpu usage that causes some flicker (not very bad).
I want to avoid this. Stored in tile rects are not clipped by content and have full tile area. In any case tile painting is clipped by painter clipping (coming from QWebFrame::renderFromTiledBackingStore for example).

&gt; &gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:245
&gt; &gt; +    getOverhangingTiles(keepRect, visibleRect, overhangingTiles);
&gt; 
&gt; getTilesExtendingOutsideContentsRect ? or similar. 

I picked up &quot;overhanging&quot; from previous code.
ExtendingOutside might mean &quot;partially outside&quot; and in my case tile rects shouldn&apos;t be intersecting keepRect.
Also, they are outside keep rect.
What about getTilesOutsizeKeepRect ? This should describe exactly what it means.

&gt; You use visibleRect here and in the implementation you use viewport.... 
&gt; confusing

Fixed.

&gt; &gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:286
&gt; &gt; +        // all tiles in place, can drop remainting overhanging tiles
&gt; 
&gt; Please use proper sentences for comments. Start with capital and end with dot.

Fixed.

&gt; &gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:394
&gt; &gt; +        RefPtr&lt;Tile&gt; ret = tileAt(oldCoordinate);
&gt; 
&gt; Please use something more descriptive than ret

Fixed.

&gt; &gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:398
&gt; &gt; +        setTile(newCoordinate, ret);
&gt; &gt; +        return ret;
&gt; 
&gt; duplicated code

Fixed.

&gt; &gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:402
&gt; &gt; +        setTile(newCoordinate, ret);
&gt; &gt; +        return ret;
&gt; 
&gt; same code here

Fixed.

&gt; &gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:410
&gt; &gt; +    return (int)((va-&gt;distance() - vb-&gt;distance()) * 1000);
&gt; 
&gt; why not static_cast&lt;int&gt;() ?

Fixed.

&gt; &gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:413
&gt; &gt; +void TiledBackingStore::getOverhangingTiles(const IntRect&amp; rect, const IntRect&amp; viewport, CoordinateDistanceVector&amp; overhangingTiles)
&gt; 
&gt; Why not return CoordinateDistanceVector&amp; ? would make the api a lot more clear

Fixed, but return value will be never used.

&gt; &gt; Source/WebCore/platform/graphics/TiledBackingStore.h:100
&gt; &gt; +        CoordinateDistancePair(const Tile::Coordinate&amp; coordinate, double distance) :
&gt; &gt; +                m_coordinate(coordinate), m_distance(distance) {}
&gt; 
&gt; This is not valid style
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/TiledBackingStore.h:106
&gt; &gt; +        Tile::Coordinate    m_coordinate;
&gt; &gt; +        double              m_distance;
&gt; &gt; +    };
&gt; 
&gt; Remove the spacing between Coordinate and m_coordinate etc

Sorry, it appeared that I was running check-webkit-style --diff-files incorrectly :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417312</commentid>
    <comment_count>21</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2011-06-08 10:03:26 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 96344 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96344&amp;action=review
&gt; 
&gt; Jocelyn did something similar for webkit2, you need to sync up.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:197
&gt; &gt; +    // viewport covering tile should be closer
&gt; 
&gt; Not a proper sentence

Fixed.

&gt; &gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:210
&gt; &gt; +    if (m_scrollDelta.x() &amp;&amp; xOffset) {
&gt; &gt; +        double xBiasAlpha = (m_keepAreaMultiplier.width() - m_coverAreaMultiplier.width()) /
&gt; &gt; +                            m_coverAreaMultiplier.width() / 2 + 1;
&gt; &gt; +        if ((xOffset &gt; 0 &amp;&amp; m_scrollDelta.x() &gt; 0) || (xOffset &lt; 0 &amp;&amp; m_scrollDelta.x() &lt; 0))
&gt; &gt; +            xBias = 1.f / xBiasAlpha;
&gt; &gt; +        else
&gt; &gt; +            xBias = xBiasAlpha;
&gt; &gt; +    }
&gt; 
&gt; I would almost make a method for calculating this...

Ok. Fixed.

&gt; &gt; Source/WebCore/platform/graphics/TiledBackingStore.h:68
&gt; &gt; -    void setKeepAndCoverAreaMultipliers(const FloatSize&amp; keepMultiplier, const FloatSize&amp; coverMultiplier);    
&gt; &gt; +    void setKeepAndCoverAreaMultipliers(const FloatSize&amp; keepMultiplier, const FloatSize&amp; coverMultiplier);
&gt; 
&gt; what was changed here?

qtcreator ate spaces that were at the end of the line in original code.
Should I return them back? ;)

&gt; &gt; Source/WebCore/platform/graphics/TiledBackingStore.h:69
&gt; &gt; +    void setScrollDelta(const IntPoint&amp;);
&gt; 
&gt; We normally use IntSize for scrolling etc. Check the rest of webkit

Fixed.

&gt; Why not scrollBy(const IntSize&amp;) ?

scrollBy assumes that some scrolling would happen, but in this case backing store just gets notified that scrolling happens and update strategy should be adjusted.
I think better name would be setLastViewportMotion similar to naming Jocelyn use in wk2.

&gt; &gt; Source/WebKit/qt/Api/qwebpage.cpp:1215
&gt; &gt; +    } else if (event-&gt;propertyName() == &quot;_q_TiledBackingStoreScrollDelta&quot;) {
&gt; 
&gt; Why this private stuff?

What kind of API it should be? 1st I tried just to hook it into QWebFrame::setScrollPosition . The problem, that nobody calls setScrollPosition twice at the end to reset motion delta. Resetting it by timer also didn&apos;t work well.
On wk2 Jocelyn has special panning/scrolling mode. Would it work better?

&gt; &gt; Source/WebKit/qt/ChangeLog:10
&gt; &gt; +        [Qt] Very jerky scrolling because of blocking in tiled backing store.
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=53894
&gt; &gt; +
&gt; &gt; +        Part1 of tiles painting redesing.
&gt; &gt; +        Add API to notify tiling about scrolling direction. Bias tile distance against
&gt; &gt; +        scrolling direction.
&gt; 
&gt; The description doesnt have so much to do with the bug... why not create another bug report

Modification of update strategy during scrolling is a way to fix scrolling jerkiness, isn&apos;t it?
IMHO, all this patches (may be except the last one) should go together. They all build, but cause some visual regressions with tiled backing store on. Real improvement can be seen if all patches are applied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417889</commentid>
    <comment_count>22</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-09 01:11:45 -0700</bug_when>
    <thetext>
&gt; Reallocating pixmap takes time. Even with sorting 50 element array (10 times bigger than usual size) reuse function is much faster.
&gt; Creating one tile with the associated pixmap cause at least 5 allocations. I want to avoid it here.

Add this to the commit message

&gt; In Antti&apos;s implementation tile rect is clipped by content rect, so if content size changes (javascript or loading) tiles on a border need to be dropped in recreated. In addition to extra cpu usage that causes some flicker (not very bad).

A description like the above should also be part of the commit message.

&quot;In the original implementation, the tile rect is clipped by the contents rect, which means that contents size changes (due to loading, or javascript) can result in the tiles near the border being dropped and recreated. This results in some flicker which this patch tries to avoid&quot;

&gt; I want to avoid this. Stored in tile rects are not clipped by content and have full tile area. In any case tile painting is clipped by painter clipping (coming from QWebFrame::renderFromTiledBackingStore for example).

&quot;The way this is accomplished is by not clipping the tile rects to the contents .... &quot;

&gt; &gt; &gt; Source/WebCore/platform/graphics/TiledBackingStore.cpp:245
&gt; &gt; &gt; +    getOverhangingTiles(keepRect, visibleRect, overhangingTiles);
&gt; &gt; 
&gt; &gt; getTilesExtendingOutsideContentsRect ? or similar. 
&gt; 
&gt; I picked up &quot;overhanging&quot; from previous code.
&gt; ExtendingOutside might mean &quot;partially outside&quot; and in my case tile rects shouldn&apos;t be intersecting keepRect.
&gt; Also, they are outside keep rect.
&gt; What about getTilesOutsizeKeepRect ? This should describe exactly what it means.

Tiles(Fully|Partially)OutsideKeepRect sounds a lot more clear to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417890</commentid>
    <comment_count>23</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-06-09 01:13:10 -0700</bug_when>
    <thetext>escription doesnt have so much to do with the bug... why not create another bug report
&gt; 
&gt; Modification of update strategy during scrolling is a way to fix scrolling jerkiness, isn&apos;t it?
&gt; IMHO, all this patches (may be except the last one) should go together. They all build, but cause some visual regressions with tiled backing store on. Real improvement can be seen if all patches are applied.


We support the creating of meta bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423209</commentid>
    <comment_count>24</comment_count>
      <attachid>96339</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-18 13:13:25 -0700</bug_when>
    <thetext>Comment on attachment 96339
Patch 7: Fixes repainting problems if scale != 1 .

Cleared Kenneth Rohde Christiansen&apos;s review+ from obsolete attachment 96339 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437046</commentid>
    <comment_count>25</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2011-07-14 06:11:49 -0700</bug_when>
    <thetext>Removing the block for Bug 55055 (QtWebKit-2.2 release-critical), as this change is too complex/risky at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559766</commentid>
    <comment_count>26</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-18 04:51:47 -0800</bug_when>
    <thetext>Old bug, architecture completely changed since.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559777</commentid>
    <comment_count>27</comment_count>
    <who name="Christian Sejersen">christian.webkit</who>
    <bug_when>2012-02-18 07:54:00 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; Old bug, architecture completely changed since.

Have you verified that the issue originally reported is solved?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559899</commentid>
    <comment_count>28</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-02-19 07:49:29 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; Old bug, architecture completely changed since.
&gt; 
&gt; Have you verified that the issue originally reported is solved?

Frankly, no, and I should have.
If someone feels like this was closed in error, please reopen and explain.
My reason for closing it is that there seems to be a lot of work on tiled-backing-store, but it&apos;s not really being updated to this bug, which makes it low value in relevance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560186</commentid>
    <comment_count>29</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-02-20 04:54:11 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; Have you verified that the issue originally reported is solved?

This was for WebKit1, TiledBackingStore was originally supposed to only be a step stone to eventually get threaded rendering, and then we switched to WebKit2.

The non-threaded tiling case just can&apos;t work smoothly and, if I remember correctly, this bug was about the best efforts Slava made about it. It wasn&apos;t without compromise so I think we should focus on WebKit2 for smooth panning instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560227</commentid>
    <comment_count>30</comment_count>
    <who name="Misha">mtutunik</who>
    <bug_when>2012-02-20 07:33:33 -0800</bug_when>
    <thetext>Yes, this was about WebKit1. If people interested I can dig and find some fixes that Slava and myself did for improving perfomance of the WebKit1 tiled rendering. There were several fixes that might help people with webkit1...</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>81434</attachid>
            <date>2011-02-06 17:24:02 -0800</date>
            <delta_ts>2011-02-06 17:24:02 -0800</delta_ts>
            <desc>Modified anomaly demo browser with QWebView replaced with QGraphicsWebView, tiling enabled and scrolling direction reporting to tiling backing store.</desc>
            <filename>ganomaly.zip</filename>
            <type>application/zip</type>
            <size>67289</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">UEsDBAoAAAAAAHuiRj4AAAAAAAAAAAAAAAAJABwAZ2Fub21hbHkvVVQJAAO5SE9Nu0hPTXV4CwAB
BOgDAAAE6AMAAFBLAwQKAAAAAAAXaUY+AAAAAAAAAAAAAAAAHQAcAGdhbm9tYWx5L2V2ZW50ZW11
bGF0b3JzZXJ2ZXIvVVQJAAOu405NOeROTXV4CwABBOgDAAAE6AMAAFBLAwQUAAIACAAxZ0Y+26kb
JE4FAABdFAAAMwAcAGdhbm9tYWx5L2V2ZW50ZW11bGF0b3JzZXJ2ZXIvc3J2X2V2ZW50X2VtdWxh
dG9yLmNwcFVUCQADDeFOTTnkTk11eAsAAQToAwAABOgDAADFV9tuGzcQfTfgfxikQCE7smS7RR+U
OoAjy6lhWzasVeI8BdTurMRml9ySXMlq0Xx7h5dd6xanD468gCBwLuTwcOZw2N7f3dmHk2f97IzQ
ZzlC+DqgUU1R8ZyNsRUXhbO4ZcqATIPFqSCt4VIAPrC8yNDZXAiDKmWxnarjJGeoY8ULZ+klH1Bp
O4Jg44RdWcwVH08MNOI9OD48/BUO7N9v0JdfOCO9KqRyC7acQzThGigCipJlTeAizsqEizEkMi5z
FMYHx0RCvzkozMg2ca6xzIuSHKFQcqxYrsld24HBmGxgNCeTKpxYCqNkljm5R2pjQM9+JO3dnd2d
dhsu+t2r4VkPzi+ueoPdnZ/8ThF+x1+OtUlak7crwhHTuCI1DyZVBJYTLyheaTX9jFNC6zPmJSEk
VWvyKiz8VHxw3bt+17uD82G/G13c9Afw3Q25OR+zxmcYyNGfBDrEGdMa0lLEVqlbzjiaoMZHITCF
ELNwFGAmCDMuEjnT1WSpkrnzVPhXidrYBKFdBuM447RRyoYqhCTLWiGug+f83IzdnoW1F1DtdJbH
jT1v9Po1JJiyMnOJpo0qY9LSLgX0byKXfIwLl8GxTLBJG2EGcpeZGbIptn5M+Ls734/f1u8//o9C
6EvglgYeS88eAle25qzJv9tDugLyKqA8mOcjTogeExcUE6qONax/LJRTyZOnooToVMz3ob0P7FSN
Ney3mxC9kzJzoj+YPidKs2JYQ/1CcEP8x2lP2hA/WwIsJBeU+ka6rDeyoO2lBiaWCmOpBCrvzq+Y
NrfWuDVAc/+pAYdNOIS9N0Hdx9mS9qgJR05br04KKAuYyBmkTLnl9IQVCLmcogZk8QQMz6kyHceE
ec8wM+weTuByYLAY8L/xzaLm04qmXu2ROxTxggEhTVXonhFKXW+ttr1zpifQO2eZXpqOO+gMxUkJ
4AcZYae5W6IsEtJVcSk2E3aSSJW4CoDdtSIOY2Kc0WSaog5udgMWPPvfoMuseXy4gh9lAnrYYoUo
lpydxLrSwvyjI7rzigoP3nqBm3lvU0RhwinXfJRVc67NQtYfvEXDb245vo/oOLfUNq2YP8qmw90u
MSo50Raxk56LeKKk4NauCZoSr1SEqe0W0rD08qID8mjAtT2l90gJybJa3+n0rLYvBdapuD7HezR3
bOZKSjdc5JXt9njm60ZKp34nMMvWqPnrk9y8PUDuMKFCCTj4gUsUtvnSr5o2KhpVjkY2x2TpU0tm
STDaLik/7mABQIU2nbeeXo70u8TaY0wCpn2qvJEkgOhWBZ46qFJ3N9CtBrG33S5iS1Eu3FoDagJw
/craHnz+BsCAXBg9lY7bxa0KD6Iz+ouIWX0DUI1eErquzHNqFu6wyOZVD1Vxr20rRvZKoAxMqXsS
UozKNHUZGXs/3XKJ6kzodjD2oRbeiD8M44gent/ZBzgbdlP4Rnqt54JNVV/Zv3mhM1hF30K+hjf4
zi4M3AuBmlp7TaeMZ+0XaW599Bsx94Avo61n3FCz2KhsYa/SxLZfv7yWlE7djMdfOl5sv8i1p/tQ
UIc0iE6ji+7n7ukgagR5069UNQbOw4bzQObFwVt+v6qYB8WnRUXVZlBPSyGcyZn4tnZYLOhqe9sC
NmpL6m/elcZIcWR1TXhownxv1W1YfMtpWKy7LDZGt1LXnVGjDuH/Ww+LRduRQvYljMM7dQH/IfFn
p3NLfErN3GXdcjeh52S1YOBp9lsTh8Labn3d2Bqqtx6qjIrLvpIy24rY5sW9Wl6Eztw9+nTM/hH7
mII/A6uzcSOV1U+gRaR7RB0yhXNuHwn/AVBLAwQUAAIACAAxZ0Y+6qWsX4MBAACRAgAANQAcAGdh
bm9tYWx5L2V2ZW50ZW11bGF0b3JzZXJ2ZXIvZXZlbnRlbXVsYXRvcl9zZXJ2ZXIubW1wVVQJAAMN
4U5NOeROTXV4CwABBOgDAAAE6AMAAIWSTW+jMBCGz0XiP4zUw14qSrPaW1XJAbdFmwAyZtv0glwY
EktgkCFpfn5t8rmn2pfxvM+MrXd8K1XZbCuEx0qMoijFWqp10YtxM3gbvXlyndsz0TdirDvd/idz
wl4oh/PCHaqxwHZr4E4Xg955VdOcOL5K6YETSrqO69zfA98gDFh2qoJOIcgBRpPJoxC6egoH1DvU
d1DJukZt2pusUNAKqaDX3VqL9tdgC6Z2tvDYYxAtghjAcAFRsgXci7Zv0HUsdL38/YPv+78/ZzMT
EhP6s9ncvi+jQc5oFN4cqItE0yTIOAn+ZtEHvfH3f4wwFSQ5C2hK+Ouhs3dKXS4znhRnmwrjjlf2
/Q/Y5OaBszvPKIviYJGH9HTL8q1YkBVlRbbKOF0eVQsvojkjbHUZ0dY46jXycxJJ/HLtRBbYbEBS
Mo8WET9Wpd0X6uW6HYGhqELcyRJD82HgTcsRr86p7sbMzMt1/tE4TNjF58kd+p4mjOfxM0s+aHz8
ANROvoZnaSfzDVBLAwQUAAIACAAxZ0Y+x0ocfIICAADyBwAAMgAcAGdhbm9tYWx5L2V2ZW50ZW11
bGF0b3JzZXJ2ZXIvc3J2X2V2ZW50X2VtdV9kbGwuY3BwVVQJAAMN4U5NOeROTXV4CwABBOgDAAAE
6AMAAL1VW2/aMBR+R+I/HHUvhbbQTdMemPawhVRDoqEq6bQ3ZJwDeHXszHZgaNp/37Gd0na9bA9l
liDJueVcvu+k3223uvDhRY+PCBkrEZozAItmjaaQsserKugvmHGgF43+oxIlc0IrwB+srCQGm5Fy
aBaM+0CDIBmi5UZUwTJKvqCx/gkamyBMdLU1YrlycMg78Ob09C2c+Ms7yPS1YKQ3lTbhhb3gkK+E
BcoAjWDyGITisi6EWkKheV2icjE5pgr6bcGgJNsiuHJdVjU5QmX00rDSkrv1Dw452cB8SyY36XCt
nNFSBnns06MJvfhA+u1Wu9XvwyhLxlfDFM5G43Tabr2KlSIcWLOe4ZoqnWFZz/ykVgdP6ql6bYJB
CPrcu+E8Pf+UXsLZVZbko0k2hb8mG2KevOQJEZNpAOFQysHg9v6wE5VHR1DggtUyDMk6U3OqEThT
kE3yMDgmVJg+1wUeg1sxB2WYqkS2xt5+0m63ns47cifx5Lkj+RkvlEymQXgy3QLY4PdaGI9cb/Lr
//TaIJFlRD1liuO4afiVJQ44DTxoqa9EumjhtwLb7YO4OUDPvxGd9tdj38Pus2lDTusI+l1g+bZC
6PbhQb/zFTbaNaNFMpcY8DNHqJtqLTrYeOA4b3Wv0FjhLpZd6VoW3jd2iG5rcvN7qlmRoJXcwopZ
eB3DWRq388tHLJWmIfdiMIOuNgoOQeGG/tOxRyt0IEk9ndOGzdB5fx8Uz1B6kn8mRqdfLyaXeTr8
F2rvD2ihOTcUuAFXlN5DlPOz+RNVfs1Bwpp9DBuhCr2xjTZEWtBGx4021/tCXuziLNnRuPtYTXdw
9uQ4d9h9MMqUPlvUgjPhv6u/AVBLAwQUAAIACAAxZ0Y+hPqZUwEBAAAkAgAAJAAcAGdhbm9tYWx5
L2V2ZW50ZW11bGF0b3JzZXJ2ZXIvYmxkLmluZlVUCQADDeFOTTnkTk11eAsAAQToAwAABOgDAACt
UU1rAjEQvQv+hzm20q5SSg9CD9JWsLh2seJVYnZ2Dc0Xk6zUf99Jdr316IQQ5s17kzfJdDIeTeD1
ppE6wkYYhCHmcNR1oWyTK5WgCK4ZKgurjIjKWcBfYbzGzFnZiNQImVrMM/KOQZLymdkje6SQMhg4
GXxz/kKqPUW4k/fwNJs9w2M6XmDjfpTgOnlH+cIiC3YnFYAdICmhH0BZqbta2RZqJzuDNvbmhK15
X4BQM7fOUumM71gInlxLwgSWh5RElMyB44UpVzvS2UhO64z3L/SvoZt/xXQ8Sqvafh6q9WK3/NqW
31egLKvlav3BOZ55VDQdT+foEJDOSIUxPjH/AFBLAwQUAAIACAAxZ0Y+SKlzYj4CAABPBQAAMAAc
AGdhbm9tYWx5L2V2ZW50ZW11bGF0b3JzZXJ2ZXIvc3J2X2V2ZW50X2VtdV9kbGwuaFVUCQADDeFO
TTnkTk11eAsAAQToAwAABOgDAACtVF1v2jAUfUfiP1y1D6VoI1U37YF9aAhSDY1SRFJeI+MY4s2x
M8cpQ1P/e6/tZITR7qmRosT3nvtxjq8d9LudPnx+1cdmhDnJGdTPEEqmH5hOhRhkzrsg2oDa1N6R
5DkxXElgv0leCOYwU2mY3hBq0wydZcJKqnnhkN6yYrq0K6gxzjhWxV7zbWagRy/h+urqPby1nw8w
Vz85Qb8ulHYFBy4gzngJ2AHTnIg3wCUVVcrlFlJFq5xJ45sjMsV3D5oJxKYulKq8qDAQCq22muQl
hpd2YRhFDKz3CGnaoUoarYRwdq/Ssw29+nYE3U63c843MmUbSJJouUrCVTiPk/D2PpnMZsm3JEEA
erlkLwO6nSCA6Xw8u5+EkU3ohGLwaffumrjN/VKDxrNRFMEkxO9yFE/v5s7ed/szjtwwTBBvlyOJ
gpeGSNxonIiD1wpJ4AInwCi9vwC1/oGawi7jNAOqGe6BBUi2s2mOctiB8rSpIGXZTjqEoloLTj0I
Ld2OHZ4//uN9Q7AUFGbUlS1um29m2ZFoFv+QaZmbYByY1nh7MKRNVQcODv+HbL3Lj0dVA1j4tlPW
dAVSmVoHnMsSjJ1izzdVKI11q510I5sSQ5p8LY43WuUtIV5m6apMa4lng1Of5dneApOxU9643CIy
3hfsKMXXguDR8Q74/jcs+lURzTCqEBz5nNGDqLBWlaT2iJYOdPa8ntPbxd0yTsae4wmPHsR4ydR1
D4I/ur9zJlO+sSr9/zyEeCsg4Rtur60nUEsDBBQAAgAIADFnRj4qeniMbAYAAEQUAAAxABwAZ2Fu
b21hbHkvZXZlbnRlbXVsYXRvcnNlcnZlci9zcnZfZXZlbnRfZW11bGF0b3IuaFVUCQADDeFOTTnk
Tk11eAsAAQToAwAABOgDAAC9WFtv2zYUfg+Q/8C1wJYEnpN2XR+SdViaOGjQxA1sJ12fDFqiLS6S
qJJSXG9Yf/u+cyjZkmur2VDMQGKJPDzX71zow4PdnQPx6pt+iKPoy0SJ8nMsnLIPyupEzlQ34v0b
aXNhpuX+aYq9XJtUqE8yyWLFNJdpruxUBsTomFfOlQuszpjSr9wp6+hNlDS8eGayhdWzKBd7wb54
fnT0QvxIXy9F39xriX2bGcsCu3xgFGknoAF0lHFH6DSIi1CnMxGaoEhUmnvlZBribyGsikEb8tHA
JFmBgyKzZmZl4nDc0UuuAtCIyQIklTqBSXNr4pjXvZ82KvTNA3K4u7O781RP01BNxXg8HNyNe3e9
/mjcu769Oh29G4zfjMegwLZOVQvF7s7hobjsn13dnveGxJJdpcQv85+eyzCOu9GvJdHZu/5wdNof
Dcv3G/1JxU7kkYIPq3An5kE5oWQQiVwn8KJ6gLd3dxx5PCB/uVyMAATxdpirbKj/VOKVeHZS8hyo
j4UChURInGJAEf+JKdKAwuc+FtKqjeyuTeHUWayD+zrDEU57Rei/KXJibOKClUVcQz2dKgsVgREW
9f6yP2RcXJ8OrkUGXEyNTVyXud3C3VbMdeqEzun4s8NnRwBIweuJtMly/eULrMvYGQFBE5NHK16g
YW65vIevZE0H0lHkRoRWzlkbM/kDqOtyqH2kST+K2wYPjMjOG0DehOSCI3zghqcIknoM/c/LAyk0
Iv/t7oyvLkd74u0ynTviyfL5idj3Xj44qOW7zDLEwD9nwAWJDGEmIValRSJGS9ob2na7O5Tqf/mv
Hq8tKW61N6SzcXfIRWjznn9Qfu/vE28NNKVkPOsRJntJgYAYy/l5CjDAMTJFbQLmglg6t0YnVBrI
zNGL8qifApQkS8Y65+TfjFYCAC2j0inF5QCu2CjhWGTFBN4TZ+91Gpo5GbF0j3/wBMdCUEJSLG0R
4KhjyMLP1XtFTx82u3pZN39vv7FXsayhryOA2gAVDsCcqFKDbu3U4ep5nfdJix6f2xS50zYvZFwz
aYvEh5Lw81bRdZddWJM0vbvdTZUrrtZdRP0srxc93w1Ld/kUo4PYqh/cC2TZKKiCQAFXHtyvmyZ+
yyS6jpCndua4OUk745blULo+FtqCRVhYwtdWSRnABbIpWRvEmktLZE0xi0rRleRNgt9Id4EuCYzb
Qgk9XavwkXRNJoAHqLeFx+iw7kpK/8WBt64jRq+NiWsSW/ECxydA+UBl8WItJihiVFmFLGmgIAqu
yXx2ChmGunpcOrNycFhnZFVe2JTbD6Q8NmR9zAbflTOHyiOU00CmS16Ygaw1tiPQCzieHC8qITJn
wljJB1Xn5yJTxKFAPwPRiikZlpq8coTYa2rB8oNyD49EOim4tfizkG99f3UeGhTYEh5Oo+dza10x
zLxXcVon+K9R+OJFV4gLlCochXZWSeerm1uVQ1fqX2dFulC7g2djA+RSo9uI+so2Vq16NpUq7Xmy
KcpVymyBJzfCJrD8WqVIpw7YR+HzGyFzA8Beq0B6TCCkPsJiLhfknzWsVeFdYqfDM8eKITZ0ggkV
HS/3QPQxLF1ehdBjCFGbxDyXTKWOBdgzYlvBtw68BHpGOARuKq1g6DNrhcJGDjAgU4xW96mZp4QA
mlPkzPyvuGmtaj7e/xkwA0VzXhMvfm2t5FZ9eFWNeFItK5Ifg9rqbyWoTZlyYGpqUy42hoEU/oQe
i1Zt6kwkjfNTXBbCMogtmlZaiNE5vmhAxfnqsd2b3EHOIpnO1FoOvkFYYm8E30bEPFJ+JOPOJQI+
5DbiapiT/aPBba/qhKtR15vKDZEZtdjVUK5qe553q1HvKIsGcs6zTdMqqsIRWUaTAGGGbXNdKhbU
OkJ/o0EulldwX/+5TkxxMVHbSiIr1xRcXRuqBfG9XD7WBi2rH2DRMQ1aiJlssUv31fzG6GbK013N
j8w/ICiF5StRZpxem2/qyjKTFbs2X+or6fJ2oRjKHytxyaxVJN1vt0pzzc26EL4X8+l29nyl2CiE
d9pEDGhWrXFoFbQE/YCu5fWtoW8UzYI1UeX9fSJxHUcd5muRmuk0BVrbcLcmqVWpc6A+bSa6+0IR
OCFco/tSKHNql6XiXP5eX/qEpDA21CklMXpZ1i6Bz39dxIf60uLfi/hwUr/y+qs85eNXfgDqoV3i
9nqh6Ze6fwBQSwMECgAAAAAAGWlGPgAAAAAAAAAAAAAAAB0AHABnYW5vbWFseS9ldmVudGVtdWxh
dG9yY2xpZW50L1VUCQADsuNOTTnkTk11eAsAAQToAwAABOgDAABQSwMEFAACAAgAMWdGPvC31os0
AQAABwIAADQAHABnYW5vbWFseS9ldmVudGVtdWxhdG9yY2xpZW50L2V2ZW50ZW11bGF0b3JjbGll
bnQucHJvVVQJAAMN4U5NOeROTXV4CwABBOgDAAAE6AMAAI2QT2/CIBiHzyPpd+C+2Di9LfGABZWE
tgzp3JYlTa1Em1FrKOqWZd9dWLM/TXYYB3hfnvd9Dj9JYs6QJHACdbUOgERiTqTr1Entba7qoy5s
Y/JSB4AmEcsw4Ugu4PUEhgEIwIIgTMTS96XOv5fyjdbhDj4HAP6c3kDZ1HWx3ygT7rznyvEALNNM
RORvW3k4/M/nBr0xSpMZnXuV2/YfdxIOnLcx6qveHisP2rd6XRX7W/je6bsMQsLTCDGWrjBjGEk0
uenhCHE0pYzKR5cWb87KxNvaQqGKDVanqlS4sAVcmcqqXz03jV0qc4KJsufGvPjasbanzigeO+nw
FQ3dGY2iHr2n2EF355jMUMZkR+OY5yJjXXrkgadCZslMpE8k6QYYnX6ygVbHVhn3ntvxyKX+EYAL
UEsDBBQAAgAIADFnRj5H0+JIlQEAAFEEAAAxABwAZ2Fub21hbHkvZXZlbnRlbXVsYXRvcmNsaWVu
dC9jbF9ldmVudF9lbXVfZGxsLmNwcFVUCQADDeFOTTnkTk11eAsAAQToAwAABOgDAAC1U1FLwzAQ
fi/0PxwTREVXEfFh4IN2HRa0k25T30ZM4xZMk5C04hD/u5ekMhB1PsxASXL33fW7fHfJQRwdwPlW
l8sIBakZdGsAVHAmm0qIPtXa+2+JaUA9df4LyWvScCWBvZJaC+YxuWyYeSLUJRp4y5BZarj2yGC5
Y8a6G3QYb0yVXhm+WDawR/fh5Pj4FI7cdgaFeuYE/UYr43/Y9wHTJbeADJjhRBwCl1S0FZcLqBRt
a6QeyBFZ4bcCwwRiKx9KVa1bDARt1MKQ2mK4dZeGUcTA4wohn3Soko1RQnh7eKdvCW1dkCSO4ihJ
IC/S69kwg1F+nU3iaCdUyqBHxZy9YKFzVrdzJ9Sy14X8lhluspvLrITRrEin+biYwEYqPufRNpfP
WKa+xYZCDAbr896+d67bKzQiYIFOC9uYlga7wkcgaGWSEm1bry/2ASgUjkuCcEGs7f8P+zjKHm7H
5XSe/lQHlPd2wqxr9V0g3QmwujA/pavQ47763sL2vlFMGE+vUMlAJBv+RdIuZ4ZTgZM84m5sPwBQ
SwMEFAACAAgAMWdGPkltIyXxAQAAYwQAAC8AHABnYW5vbWFseS9ldmVudGVtdWxhdG9yY2xpZW50
L2NsX2V2ZW50X2VtdV9kbGwuaFVUCQADDeFOTTnkTk11eAsAAQToAwAABOgDAACtU99r2zAQfjf4
fzgYjDZ0denGHtJtLNgZM2RusbPt0SiyHGuTJSPJS8PY/76T7GBvpG81GFl3992P7z5HizBYwPtn
fVxGyEjLYHyWQAVn0lZCXDfe+0C0BVWP3pXkLbFcSWCPpO0E8zGptEzXhLo0S29JmKGadz5ysHxj
2rgbjDHeGKvuqPm+sXBBL+H25uYNvHLHW8jUT07QrzulfcFrD9g23AB2wDQn4gq4pKKvuNxDpWjf
YuNDc0RW+B5BM4GxlYdS1XY9AqHTaq9JaxBu3MUyijGwO2LIqR2qpNVKCG8fWDrb0LOvIwqDMHjB
a1mxGsoy3qTrbFsmm035uSzRg2Yu2RlPGEQRpFm8+ZqsC5fCU8Pg3eH1LfHr/DAGxZtVUUCyxjNf
bdP7zNsXfiN57NefYLy7riRSbCyRuFrUwOR11BE5k8PgAWznCnqDtFkFQhFPvdtGxQwSegTbsBmq
YPoX08PYVBBj5iWW0PU7wSnkDoCWMHDi+T0cg2/pej+J189wuvw3y2SOFU6ke2qfGgDU7gdKAmql
3Shw4LZxfc+TkIIZL+cDl5U6gPGD4OGt/9T72BFU24RwDJxFOcqw3gwbTd/pl4f7fFvGs6kuIP9u
xqwvp/yXdwPqz52XEpMVryGKnlDMGneDm/3E3a/8F1BLAwQUAAIACAAxZ0Y+kQMnl+0DAADOCgAA
NQAcAGdhbm9tYWx5L2V2ZW50ZW11bGF0b3JjbGllbnQvY2xfZXZlbnRfZW11X2NvbW1hbmRlci5o
VVQJAAMN4U5NOeROTXV4CwABBOgDAAAE6AMAAK1WbY8aNxD+jsR/mF6k092JQppGVXXpVSWwVVGA
OwFJPyLjnT3ceNcb2wtBUf57ZrwLLAR6fQnS4bM9r888nqFz02zcwN03/bBFGIsUofrcgtQKM69S
8YjSpKnIYrTtZRB8ENaDSSrBbkZCXpkM8KNIc41BZpB5tImQbPE2nPTRSavyIFmevEPreAeVTDjs
mXxj1ePSw5W8hhfPn7+E73n5CcbmvRJ0b3Njg8N2UJgtlQOKAK0SugUqk7qIVfYIsZFFSjmUwVEC
9LcBi5pk46BKieUFKUJuzaMVqSN1xxuPkmRgsSGRbTjSZN4arcN5CdjJgL55ZTrNRrPxTCVUgQTm
895wHr2LxrN5NHo7792PRt1xP5rM/5jPSYpEVIZPSDUbnQ4Mxr3h2340ZdMBMoRf1j++ELHW7eWv
lVBv2J1OoR/ROunOBvfjcH4TKjWJVgRulBaEp7G9LUf4qptRGZwXGZWfeHJGkrEWWY0/vUA52Aus
l0oGyjnMYgcVDx14A36JNc0p2lVwTVhJLZw76/MW8mKhlYQJazcbzL1P5VJe3ALnbSh8W0hSdZzy
9lmE1LebsxC06zI7UydzNYu/iGqQGPv1XX84BMGnfa3rFn/LBXF1d3UERU2ZYCoc1lQ7+/8Ho4f7
yWzeO5fDVQkQ2b/ce7p+9TdgDLhV7LI9woD7gj8RptzK09mpHPu4UkQiTnGtstisIQ4np2Rnmxzh
zc7F9EMhLIIi1wodXNQKAQtTZJJ7hAtCF6fMPfBC3YAXit0G2uXMrYp+LpAOnKKnw0dICCkPSwrS
m7rFXZJAZVaZ8tSolKPQvEOdtJ8o0MqoGI6KVNm7Kk3D5M+AzWvh8HKLWQtm1INLVFp7s//2UzqY
UfPu/Xy5A2VPhNqjGeMaEsKVwXdPEyUQ7YAmU+QeXd2ce+TVk3lVV9zp3N3VCDBBh35ffxu2bFJs
JS4O3I+p7X8Hr1EKejUsyOxxkBlYiw2HY9EXlicJoLVUysSa9JgJdYOFY4r5MJ/QL03cYn7QjmIy
ltojhyN8GEt1MklDX9wSyPbB+913QLc0hY4pNg8LSmihAwUToTRzTKNY4UFuYUhW2qHvamdgUSQJ
JRmH2ZhSjpW5nCa3sSldqJS+Fc1LvWmfeiO7WhEImNG0tTxbDxIAU458onoYqv+B7cHHVcXnrcvr
GgP+hx16Jg9GZZ65zesJuzWKR1WOJcPP8HvPwMqH+3ogcO2JZXFJqw8FOm5LJUVpYjJuRz2qVbeB
+zhAEh+paPgx58Z9Bl9WOBHYYV/4dLh9MzIUIjVq+R7u4IfDy88VTJ9DJ3hGL1cljNA/+OURUfUo
x98V/1T8AlBLAwQUAAIACAAxZ0Y+e5uPwxEDAABZCgAANwAcAGdhbm9tYWx5L2V2ZW50ZW11bGF0
b3JjbGllbnQvY2xfZXZlbnRfZW11X2NvbW1hbmRlci5jcHBVVAkAAw3hTk055E5NdXgLAAEE6AMA
AAToAwAAzVZta9swEP4eyH84OihJSZMyxhjpOlhcFwJrGlJ327egyJdEq2x5kpwujP33nSS76dq1
pSxbJ0hsSXePnnuVe3vNxh4cbXU4RBixDKEafeBSYG5FxhbIVZaxPEXd5UXhRcdMW1DzSvR9TmJW
qBzwG8sKiV5mmFvUc8YdZt+vHKPhWhReMqx8RG3cDCoZvxipYq3FYmmhxdvw8uDgFey7x2sYqUvB
aF8XSvsDu14hWQoDxAC1YLIDIueyTEW+gFTxMiMrAjkygX5r0ChJNvWqZFpRkiIUWi00ywypGzex
yEkGZmsSqelwlVutpPTrwWW/JbT12PSajWaj14PhKPpwcRzDyfBDfN5svAiWIuxwOcUVGTrFrJxu
wrXcqRQfwofT+HQQT+DkYhQlw7PROTxKyGPub3N4xEnsbIizkuKjdFSb0e/fs9Fqe7VII8UTGOR4
RQGuc1HNvlAMu3+Ha7MRfx6fTZJp9HTWMHEFcywl7LL6re3SH/5oeNQWbCAD4PfwICeMFAhXnZuK
0Pi1FNqVghP58e8DO3TtJVK5sbrkto5nPX+2kK6USO8nfWu9Ju/ag7Ew+STyVF0NmMFdYMe4Ehw7
T4xtQr0TWLIusFOhJtQ7ozcESJ2XutTd4J4jdTe7RCicAFJLM2CVX9n4z6BeUa8LbgzIjjptBRyf
Qv3+DZtqA2o21+cfPnfO+HmVMd54BlXjgxarttuPuCBk0gA5Kw06QY2u/ecKrtja6Wq0pXY3B6DW
SsNcq8wDVjBGUPctjbtrLF1CHo6cv1Qp3SPWYVHFKW0ZxdMumfX3z01druhvTsgEarC2wIBZqlKm
Hi9XFmZkwkyiozRnQgIpSGQr7NI1O/eEVIHhBgJObJ1Qx63nfjNQ8mg+tSr3TLCQ61ZItrPCUWlX
B7sDySUp3aXGIkv/r4oLoa+qpJrerYjIG6L85waTcg0pem87h1z72YX8Vu5X6Bvgm6m+PcIdSMZK
5NbVtHveMiAZ88vFoJy/DVLvQl1XVPx7qw1Hle7hwyZ0gsKvlviQxmQffcadCPfN9hNQSwMECgAA
AAAAEGlGPgAAAAAAAAAAAAAAAA0AHABnYW5vbWFseS9zcmMvVVQJAAOf405NqeNOTXV4CwABBOgD
AAAE6AMAAFBLAwQUAAIACAC4aEY+hFYNLGgGAAChEwAAHAAcAGdhbm9tYWx5L3NyYy93cnRwZXJm
dHJhY2VyLmhVVAkAA/viTk1L405NdXgLAAEE6AMAAAToAwAAtVdfb9s2EH+ePgXnAoNsuM3avdlt
gcSJ2w5tEttpjQEDDEU621wkUSEpe03RffbdkZQsGrLnAZtfLPKOd8f787tj8Iwv8wSWbLGYT+9u
r6bju+n56Gq6eL9YBM+QwHNopQVnZ+ySq+g+BTZCMlMFxHzJY6ZlFPN8xZYQ6VKCqsVc3ywM58sg
eMbzOC0TYK8neiQknD0mkQbNM3ixfutR35Xc27i5/wNi7W19lqm3HvMUvI07+FPPtIQoe0uql+xH
a1HCQmdTd8fe2UqtQGu8gnqx7viEIlqBvznnyQr0eG52IU/40qqoNUwWN7PF7LdPFx/Or1ENq82C
X14pnZj7eptxlu9tljmvOJ2Gs7M8ykAVUQwMzcf1NwoI/uI0UopVVg1bdkci1xHaJon4nWSViuLl
SRwGgT0zmcP9Ld562FiPJbIOWbVzDXor5MMUHktQumIcraXIYJRyyPUEd1GP0pHGBIlFrjSbYERI
rVqIUr+HKAH5kr1hnc/Tj0ws2Yyv8ihlcVRQEt1hTkHY7TNHNRawjyJK2Jijd9aQ9Nkdpg8LMwUx
MvZRwhMuHy5wcSc0ymp891Fh4Tbosz8SaYp5JSRrUPozHcUP1aIzPOEKr+gKpP2DhswYWGk0nvvC
YTuY2Dj02XmaihjzHnnONxFPqZj+i1209CRXt/qYPWeUIVgyfXaI4UuUlrAXjEizFK9bhYOCRT6o
r2+E5vqUYDTdbr77J9yo9ny/zoH630j6P/2K1R6VqTYeIvghW0aDMwS16KzQCzwY1DBIQLq4vLr4
/C4sulibk0u4L1dh8fxtKlZ0OOx22evXrPN73qF/JBAwouasCLsoyBXYXOpbkEujU7IBK8r7FE1z
CBl8C+zGICAAQBS6+PVqdBd4u56IsCr1HiOY6zPD4v94rhkaInVZmGp7w37ut7A5G1iviCTGnNi6
Q8P3l6/S7VoTnTcJuNAL15hUYbWH2UgujdWm445sBE8Q1oSCsLmD2afpDnuXQZYDuO+dnI9D3BwM
Kvjssa37IgEWe429DYTfA3giuyQhZxm8LTHz5VjCY+iLcXxlrrDOIDEHII0KBQl5N/QIxu207a7b
drjmqT3ruMwNlRaFRzSdssewhGzasW9MAlZ6zjKqqyVuDtn3JmudoUMvZI383MmYXGIBkb7BIC4l
5UG1EXZfaGGPhp31epBlA6UGT09PGFzU5xJZpUKrwS5AhC4zuiCBy9Dfv5VihaOGCskLBcgYte3z
1Mh0L0TKxMM+fT4+JH0+PkX+fHxMg4ehdRPtsSX9tdZa08FxhciH+C6+ajiXMvrKNoTNTc1Gwwin
H7parZn1zH6TUUKBc4F2fRyZHcpNsZR/YgmX+it9No/kXuuv/Hfy9Xb2+zNED215bOqhBLsptReZ
uGrZ1DNG6yhfoWqKT0TgTd0fuYNCCo1ckAz8Ug9PhQRp8cTigl0gLNgPv5ytpRRg4wjP2BXgwEXp
T+Sp2IaNiJUynZX3R53kc7uOeoTfJCBXmJDYat+wZZQqNNZAVyH5Bg0ZNB2Z5+iidtisuRLqUhgD
Y/xeWgYnGH3kij7jIa5EIC6gYSbB1SEuSoCYENcrAcSsf2P6qZafZPhJdh8z2843YQsFswk/dm3U
i+0ulOaXLQozxlfaGj8kOXzz+sKOXDWDdio2hQZ199jqVWeVWQ5rqxw22NOuN9g3RdAKBjVT/cQ4
Url7Ddxp2dYPokbBTkw37O1uQjAjhzta00VEc6Rd1L0r4DvUb4u7s9VciCWIDzIDAiaGOEtjt5Qc
NkBALTI2QmiZuednuzCXuaaaUZgb1mkQ9+f09kg3prchHZ/ZtUFY5GYZZmiksPoVTiFMCzvqypKA
9oBE7PspTDHvrECzJKyz4lhI0wDKEssl264hx1kwqDGqKYirS4cxRhCGGPVi89hKjsIeDZGGlaLU
hwSMbV1YN+8JsCfpSqtdQA4JuikgH7YTle1yH7A5HOe4revtEAe9Dw9wSIiBY1ZMbVM+wGUS9moD
BxnamuQxfq7mY0uysOXpih/MLPtP9FmOI+xaOL5U7JLXAsJyqcCEmFzIsUFNzz+xUqG3KIkT2PDY
PCe5JfMnHGFFTjRuUjFD84HaVlaIHL+DH9qz/NI+yujm59VIMDzE/FmBPI3TvEiPsq35aj3HApAt
QoPv9BbEggUckb3HUI8GS/eNPA6n/gZQSwMEFAACAAgAA2lGPjNboxsgBAAAUAoAABYAHABnYW5v
bWFseS9zcmMvd2Vidmlldy5oVVQJAAOG405NOeROTXV4CwABBOgDAAAE6AMAAL1WTW/jNhC961cM
sDnYgSMn25vTLpp4lawLw7FrZ1P0YtDSWCYiiQpJ2fEW/e+dISVbSVMgh90KBiiRnPfm4w3p/ul3
fAL3g6Eq91qmGwudYRc+nl+cw0Q9SkELulRaWKkKEEXSVxqkNWCqlZGJFHrfOZNouiGDXGUZOBAD
Gg3qLSahBy+siO3gDcjOkz2TxVr9WvBSGKu8W3u02EgDa5kh0FgKbUGtwW4QEsyVaT5mFhZKZY/S
hrXdyWyxvI5uR5PleDSMJvNoML6djk+8H3mOOpYig3sjUuS5sYyxMIgGNipLZJHCVmQyYeDW9szv
MpCLPVQGifvgXcEwIo6VTkQRI+yk3TS+tSBqIrhKNWKOhYVSq61MMDlYMNBcre1OaASleyAyi7qg
TG0x2/eI6k0e2pMbiDnJsiC42iPYaWktks2BcYV2hzSzVxUX09ejSdzt5B7GaKhucIsFavJ5Wq0o
8oPrh6RdvfTrmAxOzwo5QwlURUJQRwfrih1pHOnbTFvUhuXxMbwAQeXnVbMh0NXegdxQRIdUMc6N
IrqDSkGUJQrN1aScsYHzrhZEyIKghTirEpeuJveliB9FylbO1zqoEGCaoSCvNG4l7jyeyjK18wRr
pXNPbRXDUASVxlfBvidSjU+V1K5UhoF2khqK0pkj9c7G2nLQ7+92uzAtqlDptN+osk/KPTt8ZGmZ
nRFcuLF51hR3RHlJEsle9jijAkyJTpf4HGPp5317plRV4yQSo2ZJHSxFxlC+wykriw1yUnzDs2QT
NLGWq0NOa0DqA5fxqGFilCbui/Ci97oWdbXIZhn9MYymi9HdJLTP1i+744ALhW3l/mDJvkOrP4Xn
P0Cr/6tU3xFhW6ONQBnpvzQa08WS4dr2SZUvFbl2GtuILcJThYa94nsjFdodw+wTn7Tt+HpQ+vBi
f6MwjteYsPCvmyRsroNo8rm5DE48+/d7+kHwQa5JN2t4iK6/jqKH5ZfgA33SUdyaoU2+iPDz7FaL
ciNj84Crr1SkT+21hczxUxDEmTAGZlP5nIvyMgjsvkSmeG0L9TglaRX2sjFsVgdejfHLbcFfAdAz
W95d/xYNF4HfM3CT9cbOgWhkMYfT0hnCL3DeJRLeuFV0SZZ0OtjObMoD6tMe18VYmM0t1fzO9Xob
5xSUmzM9mD3IJEXLZxyPNTJlkqO8n0fLxWgcfV4Or4ZfoiMfHS8k5oUiSkWUN1B2L6HfhxJKZdwR
BQUJiJvctaIynS5Jyla6MC0UtH8qlXeeNJLWv9ErU2ORyDWDvWana9pibDEZHCHo7438htGWk9I5
VmVO/YK/t9aow9xIBGxLWHIrLILJlDUtvIJrk+JYCdZ+p95e59jPY9JZ0T8dUI9cghrIQzjVQOaN
+d2bu+2yqEEvg7/J7hjmUZv/AFBLAwQUAAIACAC4aEY+Kfc/8hkEAADKCgAAGgAcAGdhbm9tYWx5
L3NyYy9ab29tU3RyaXAuY3BwVVQJAAP74k5NS+NOTXV4CwABBOgDAAAE6AMAAL1W32/iRhB+568Y
pXkwKZgkraqWu0ZNKUeRKAeFU6u+RIs92Kusd53dtR2u6v/eWf+KSbgqD3e1ENjjmW9mv/lml9HF
Z7x65QcmKj1oHsUWvEkfri+vLmGp7jmjFzpVmlmuJDAZjpQGbg2YbGd4yJk+eEOOpu87kFshoAQx
oNGgzjH0K3BpWWDHJyC9Bzvkcq9+ku6VH6ikX1e0jbmBPRcI9JsybUHtwcYIISbKNA9rC1ulxD23
fh13vt7e/TydzZd3i/lkutxMx4vZanFe1ZEkqAPOBHwwLEJnW/AApUE0ECsRchlBzgQPHXDHXVRe
BhJ2gMwg5W6rkw6GBYHSIZMBQsFt3NTWgagTwW2kEROUFlKtch5i2EY4oI3a24JpBKUHwIRFLYmp
HMVhQKlO5iGfxEDgSOaS4OqKoNDcWqSYNuMObYFkOajMNbPqR0PcbPkBFmiobzBDiZpqXmU7Wnlb
ekva7XFdT2Q4enboGAohkyFBPRVYd+wpTZn0dKYctXHyuPavgFH73VsTE+juUIK8oxW1VDmcd4rS
tSoFlqbItOsmceYCyupqQfhOEPQiEFlY0tVwn7LgnkUuqqy1XpQPsBLIqCqNOceiwlNCqKJKsFc6
qVJb5WBoBZnGZ4t9zUo1PmRcl60yDqjgNFBEZ4I0O7G16Xg0KorCj2TmKx2NGlWOSLnD9kFEqRgS
nB/bRDTNnRMvYchdlQPHKAOTYqlLfAwwrezVeEbUVVNKJEDtJNVGMuGgqgknVrYxOlKqgXeSDdEE
mu9aTmtAmoOS8WmTyaE0677yrwbPe1F3i2Lupn9Opqvt/P3St4+2el1uB65R2FXuF5bsK7T6jX/5
BbT6v0r1FSvsarQRqEP6lEYDOlgE7u2IVHmsyH2psZjlCA8ZGleVOzcipstt2NXkdtru+gaQVssL
qhPF4VQaYxZenCR+cxxMl780h8F5lf3zXaNe76u6P3D2l1LJxmqe+vFZx/52benMw5sjyyzjN71e
GzEet7fe+g8eRmjhgo494rnfA7rGUJu9xvp3af9IYXO54o8JS32hWOidjUc8IdnTVsCNHdL0+qmM
zvpvWv/3mf2PAOquyrGJ+afXW2/4R4ROqYaef+XSen3XCWPrUjTaTEtIuORJlmxap9MgL9xOYZVR
3rffD+CH7yqcXNHp3IVRpJIV/d8w05xo8da/OUN5DxeYd5jie/BKw/AmVcbr+wfK+RZidDsY3Y7g
uqLaXZhwW3M7oVm4x9CrCURh8KUbUdrxO1FnSjuprUtctffPSyRLAT/SYIU2bhI6oyGjV8DwuN21
W1n6m17pXGHTLpZ6bmxqiNSn8RG/Y2AbBrS77w9gPVFCae/qmig++uq3oaFmRZXQMwOgT7eGT3nB
11AMjsXWuqKsSfoXUEsDBBQAAgAIABx7Rj7RVg3AmwcAAPwUAAAYABwAZ2Fub21hbHkvc3JjL3dl
YnZpZXcuY3BwVVQJAAOXA09NnQNPTXV4CwABBOgDAAAE6AMAAL1YbXPaSBL+zq+YvNSWlAWBc5fd
K5JQZxPsUMXaEEi8e1+oQWrQVIRGnhnAJJv/ft0jjZCwfXGqdo9y6WWm5+me7qe7R26/+At/DfvH
+jLbK7GKDfP6PnvZOemwS/lZcJxQmVTcCJkynkZtqZgwmunNQotIcLX3WgK0HxDIaZIwC6KZAg1q
C1GQg6eGh6Z7D6R3Y1oiXcp/pzQVhHLtFxbNYqHZUiTA8J5xZZhcMhMDi2AttXuZGDaTMvksTFCs
ez6Zzc8GF8PL+WjYH1xOB93RxXj0PLdjvQYVCp6wj5qvgMZGIoRUA2gWyyQS6YpteSIiAq6IJ7mU
Zmu+ZxsNqLu0LiUYHoZSRTwNge2EiZ1tFYhCETtdKYA1pIZlSm5FBFG5goCmcml2XAGTqsl4YkCl
6KktJPsmqrpXD8qsNQvJySJFuMIitlPCGMA1pcYFmB3gyF5uKJh5PJzjLi4/shFojBu7gBQU2jze
LHDnpeml007rdh2cQe5ZAHkoYps0QqiDgUXEDmqs0vs1bUFposfL4IRxDD/N6hhBF3sLco47Kl1F
OOcS1ZUsZTzLgCuKJvqMFljrCkIERAicCJNNZN3lfJ/x8DNf0Spra7GpgLFxAhytUrAVsMvxZJLI
Xa5gKdU6V20kweAONgqONvuYnSq42QhlQ6UJaCcwodCda8DciY3Juu32brcLVukmkGrVdqxsI3Nb
5UuyypIWwgWxWScuuEP0SxQJsrJJHuVMZ2B5CbchZPl4np4rjKq2FAlBEaXKlTwhqDzD0SuzGMgp
ecITZSPQoRKL0qcFIOaB9fjAaSIUt++T4KR5HIsiWrhmPvi9PxjPhleXgbk1+bQtBxQoqDL3b6bs
I7j6j6DzN3D1/0rVR+ywylFHUEJ6iKMhNpYElqaNrKwzcmk5FvMtsJsNaLKK+saKK1uGySaqtNX9
NVmWby/MOwrh5Bzjht3pJIFrB4PLd64ZPM+1/3W/dqPxrIgPe8Mp000Q9w5jT3ewoFAE8dOK4KQv
E6l61ZELxbNYhHqKPocPoMUXGGzRyzWhMaYjUrM+Jm7XPKsNTQ36/MrmmoMdGljXZK5hca74GnqN
qrHKZKCWRnHMfTK5gWKf0Pxut3jwJlVE9gI7MxrpNxj+uqwQGttBrzpHST6SnELrLXmiwW98tRMY
yhRC41GQm2w6vLg8HXkJSk4NNn2IPN/P0xUnR1czLyX4FTgs3/df/2+cc5HafPQWeFA4AssKpHIW
wdptgqMZz2/1NJixgiUoBRGdY4j3U4yNN7HXk87LfzbZr7/8y5nRqC4ON4o8YP1cgE1Dhfl4xtVY
YortvYnpdj8haUTIkyajt1LiNNnxvb5aLgvoH0R9L5X4QnnyPdx2m2I+szFv9dBbhhzs5er81+Wu
kH0J4IkCDUnYW7rSm1dalwRoiSW250S73bONMTKdwa1pkhGLBAtXfcWZ2ui4ugITPLd4FwsDhTDF
oVCI6448cmfymVhGsGQfp4N5/7T/fvBufj04+zQcXDusPg9j+E1GUOdzt0vXvpRUg7gBK+a/ThrP
II3Esoo7G44Q1qI70FNjsP1t0Aqy/vp0fpVxLG02aW0uI/fUprKjPM31TDpmeZX5yuYMMl0XzxUl
mG3TYrLbnWF9jM7Qu/g6NVLBIOULHKrp/EFMS7HzhNMxEke+gzhWEolk9t7T+c38jjk0QCnzFGNr
U+flq1+aDC/+gYaPxepLbEmnCvhvm8SILBGgHOy5dxK8auKx4hXh5mFD6Dsh+9ZobCWe88v6pg4l
l3nswXLMsGnaO9UvpEP6EB++W0AsTKuH9cy++oGR+UORcj9ge0YM81x3oNOBfWhSUdSGPdQPXjBp
x7AaTq5FtAJDZ066u+I8+YAllYWJyOghj5NYesUy9tNP7Enx3OrBbSbxEEWCgdCDdYbR8/Pib+tz
AYKV494lRtLNVRPADlEu/Vo+HQGtQOK5A79B/aPlx7LBGhkzk16n2UGJUuRbsSHmPSm7E/vzT/bE
Ng58mYk1BJDwTFMjYm/Yr686vl8xqNbwXCBK95fuLbyaG/fNlZHp+6vroi71R8Pxh0F/VlDHrkfu
4OHoUF/dYFkyUeGltM/3yIwhtRJIu+PZSPGd9ZZzz7EA5gKlmVfLoPusvcPE4+5c8Ojg3be2eOT6
qk7W1O29euk+TinbBKQuovhD+VFv8/dYZc8kuVmbDE/ndvPfGg+ZU8fXtrUivyZjiS48ZxmpsGA3
WKUSFk6xvQOq0XR3IbUFC+fo+pZ52mY/Fphc+lAQCmmXui5Vt2OpKAvQdXh8mIdcmzfHQr3iEEbp
7vk1vdusUGxxkDP1KlQmeysLbtGsXm5ogFQ2Mb63CgA3cMj0jLr6716rLv/zsXypwOF37kB0albs
K1bEQJ+dVTPcyBHIH86OcsXPd1ZULNnfa8kfXlk2Ht2j8uPWO0gMx97kYaGz1mbkYcsSW+iRvXlt
YChgP7Lp310pfgXRl2qTaYlf1QhBo/hNhx9iEDUqqZDlLD2iI5j/SLn2cu59kfRPta9u1R1Dz5X8
grWi0tNLFuNeUQmd9az17Tp97bmT3q2GYsxlglv7wq05LHrIgvyzgPbzcGr/F1BLAwQUAAIACACL
aUY+FhoLrhMFAAAuDQAAGgAcAGdhbm9tYWx5L3NyYy9Ccm93c2VyVmlldy5oVVQJAAOF5E5NmORO
TXV4CwABBOgDAAAE6AMAAL1W227bRhB911cMkqCQDZuy0zc7DWrLjKtClWVLjtu+ECtyRC285DK7
SylK0X/vzPIiSkmAPCQVDEucy5nb2VkOjr/jp+f/YKiLrZHpykF/eASvz87PYKKfpSCFKbQRTuoc
RJ4MtAHpLNhyYWUihdn2TyXao4BBrpQCD2LBoEWzxiSowHMnYnfxBcj+B3cq86X+NWdVEOvsqM5o
vpIWllIh0HchjAO9BLdCSDDTtnm4dzDXWj1LF9R+r+7n0XV4O5pE49EwnMzCi/HtdPyqyiPL0MRS
KHi0IkWWjWWMuUW0sNIqkXkKa6FkwsAdc1VZWcjEFkqLFLvNLmcYEcfaJCKPETbSrZrcOhB1ILhK
DWKGuYPC6LVMMGk9GGiml24jDII2JyCUQ5NTp9aoticU6otxyCazEHOTZU5wdUawMdI5JJ824gLd
Bkmy1SUPs5pH07jbySOM0dLc4BZzNJTztFxQ5W3qbdOu9vPaNYPbs0DuUAJlnhDULsF6YrswPuiX
I63RWKbH6+AcBI2ftXZFoIutB3lHFbWtYpx3msK1LAVRFCgMT5N6xg4+u5oQAROCFLEqE9+upveF
iJ9Fyl4+17qoAGCqUFBWBtcSNxWeVkpvqgBLbbIqtNMMQxWUBg+K/ZZKDX4opfGjsgy0kXSgqJ0Z
0tlZOVdcDAabzSZI8zLQJh00rBwQc0/bB5UW6pTggpXLVDPcEfUlSSRnecIdFWAL9LzEjzEWlbw6
nilN1XqKxGiYUq2nUAxVnXDqynyF3JTqwDNlE7SxkYu2pzUgnQPf8bCJxChN3efB+cnhLOppkU8U
/jkMp/PR3SRwH12l9uuAB4Vd5v5gyn4DV38Ozn4AV/9Xqn5DhV2ONgRlpK9xNKaLReHSDYiV+4xc
eo6txBrhQ4mWs+J7IxXGr2HOiTdtt74TKKry4upGYZyKY8LBZzdJ0FwH4eSmuQxeVdG/32fQ672U
S+LNEq4f7p5m4cP7UfgU/dZ7SSJaxwdSMq6GCW/ub40oVjK272lSb7uK9xg7bfZEc5nhWx+KI03D
h3fRPJzNdyYvYhXhmqYSYVZGiaJmv/ialnqTCaa6t8E8kUsYDDqovVgJa+H+0ajL5vcTLjjR5nku
ncJrYZpnvuONVjNnZNHIDlz+1jrb03cbcNkEvTZ6Q/uSZXBRnaaYosskRdf7pwf0uY/urn8Ph5Rn
pb7w0o5jv7aHY3px4IvvFzg7uvRWay35HEk3JMfnMCuVoF43DsRjWnhPMk/0pnaoY4BV2tmLHUYu
1jIVDvvERet8r+Cn0qhunE9U8SjvH4ruSseyephUzSya/fXH9ehqsrOz6G5wKUrlRqLw1n5OVLKR
awr7WT5cE+1z+Qn34llHr077EnRTo+mdwNq+5NcQekGhHnVNiLi0wvoLerPqisuC1hY2kz8Io4sp
Q2LC8p6VKV0X3fxoY5TXpXM6952v7egdyBHbMelYEgxVETJd+/cPuwc49hQmt7oHHR/0g0QPfZfP
KBtf20e+Wxxs21l2HZtC4DiLXEtn1tTEZcWm4TDLu4RlZbpTteRm+acd01nXPRusjvfOCltwkllU
1GPpyuLSMIMZvhLX2+ENqd9CFWpMfVG1F8+MxDyPUT5tAQ8Xh+8G/3uglhH+DS1y2f6soB5815sj
MmyWRmPXCuq8eEVBHZp/X+5WS3df+TweZ2E0H43Dm2h4NfwtrACa7rZHsWn+VBvXQfvM+18i0k57
sHD/A1BLAwQUAAIACAC4aEY+G2xGYnsDAADnCAAAHAAcAGdhbm9tYWx5L3NyYy9Cb29rbWFya3NW
aWV3LmhVVAkAA/viTk1L405NdXgLAAEE6AMAAAToAwAAvVVNb+M2EL3rVwyQoHACR0q2N29bNHG9
qXddJ26c3d4MmhpJhClRISlpjaL/vUNRUpyPAjnsVjAsaMh5M/PmkROdfsMnaH8wVeVeizSzMJqe
wLvzi3NYqp1gtKBLpZkVqgBWxJHSIKwBU22NiAXT+9GZQHMSOpBLKaEFMaDRoK4xDj14YRm3k1cg
Rw/2TBSJ+rVwSyFX+UmX0ToTBhIhEehdMm1BJWAzhBhzZfqPlYW1UnInbNj5Ha/Wm6vZ9Xy5Wcyn
s+XdbLK4vl0c+zzyHDUXTMK9YSk620JwLAyigUzJWBQp1EyK2AEfbJd+l4Gc7aEySLGH7AoHwzhX
OmYFR2iEzfrcDiC6QHCZasQcCwulVrWIMR48HNCdSmzDNILSY2DSoi6IqRrlfkyhXo1De3ID3JEs
CoLrMoJGC2uRfIaIW7QNkmWvKtdM34+euOvlPSzQUN/gGgvUlPNttaXKh9QH0i6f5vVIhqNni46h
GKoiJqjHBLuOPYZpg74eqUZtnDzehRfAqP1u1WQEut23IB+oooEqh/NBUbhBpcDKEpl23STOnEOb
XSeI0AmCFris4paunvuS8R1LnVeba1dUCHArkVFWGmuBjcdTUqrGB0iUzn1oqxwMVVBpfFbsWyrV
+FAJ3bbKOKBG0IEiOnOks5NZW06iqGmaMC2qUOk06lUZkXLPhg+ZlvKM4MLM5rJv7px4iWPhshw7
RhmYEltd4leOpbf745lSV00rEY7aSWrwZNJB+RNOrKwzdKT4A+8kG6PhWmwHTjtAOgct47M+kkPp
674IL8bPe9F1i3w2s7+ms9v1/GYZ2q/WL7fXgWsUHir3O0v2DVr9MTz/Dlr9X6X6hgoPNdoL1CH9
l0Y5DRaJiY1IlU8VmbQay1iN8FChcVm5uZEy3V7DLid30x7WN4bSl8f9RHE4XmPMwotJEvbjYLb8
rR8Gxz76t3uiIDgSCekmgaubm09/XP756e7zfPZl83twREa6kF/YycE3FH5afRFxivaXIOCSGQOr
hTDW2+YW8/e9+V7L9/2eK6V2OdM789l1eOIFx6GDCv4OgJ7V5ubq42y6DgK/PGmtT1xHnQec0nR1
0+FnOD+hKEakdNKN96gVzcJKyzuUyC3GI2Le2DYh+IHszqHUomYWwUhlD92oQe3C6FlVcCronzz/
IecjLGKRQBS9oOlfUEsDBBQAAgAIALhoRj5XZUF4pQMAAHoJAAAZABwAZ2Fub21hbHkvc3JjL2Zs
aWNrY2hhcm0uaFVUCQAD++JOTUvjTk11eAsAAQToAwAABOgDAAC9VU1v4zYQvetXDJAcnMCRk+3N
aYtmXdub1nXsrrfbm0GLI4kNJSokJa1RtL+9Q+rDdjYL5LBbIYAjzsybmTePmtHlV3wC/wcTVey1
SFILg8kFvLm+uYalehSMDLpQmlmhcmA5HykNwhow5c4ILpjeD64EmovQgdxJCR7EgEaDukIeNuC5
ZZEdvwA5eLJXIo/VT7kzhZHKLtqKNqkwEAuJQL8F0xZUDDZF4Jgp072sLWyUko/Chm3c+XqzfTud
3y+3i/vJdPl+Ol7MV4vzpo4sQx0JJuGDYQm6s4WIMDeIBlIlucgTqJgU3AEfucvGy0DG9lAapNx9
dbmDYVGkNGd5hFALm3a1HUG0ieAu0YgZ5hYKrSrBkfcRDui9im3NNILSQ2DSos6JqQrlfkipXsxD
PpmByJEscoJrK4JaC2uRYvqMO7Q10slelW6YzTw64ubLD7BAQ3ODOeaoqeZVuaPO+9J70u5O6zqQ
4ejZoWOIQ5lzgjoU2E7skMYnfTlThdo4ebwJb4DR+J3VpAS623uQGXXUU+VwZorS9SoFVhTItJsm
ceYCfHWtIEInCDJEsuSero77gkWPLHFRvta2qRBgJZFRVRorgXWDp6RUdZMgVjprUlvlYKiDUuOz
Zl/TqcanUmg/KuOAakEXiujMkO5Oam0xHo3qug6TvAyVTkadKkek3Kv+RSaFvCK4MLWZ7IZ7T7xw
LlyVQ8coA1Og1yV+irBozpvrmdBUjZdIhNpJqo9k0kE1N5xY2aToSGkuvJMsRxNpses5bQHpHnjG
p10mh9L1fRPeDJ/Pop0WxWynf06mq839wzK0n2xj9p8DNyg8Vu43luwrtPpdeP0NtPq/SvUVHR5r
tBOoQ/qSRiNaLBJjOyJVnioy9hpLWYXwVKJxVbm9kTDtP8OuJvelPe5vCEXTXtRsFIfTaIxZ+GyT
hN06mC5/7pbBeZP96z2jIDgTMekmhhnl+HXy7u7337bvgjM6oa/x6SG5NqOE79cPu78wsj8GQSSZ
MTAjwh8nKdPZSouKWbxtDeuPgido+9e5ZkUqIvMRd3/QiG8/Bxg3GoygzRH8HQA96+3D21+mk03Q
WMf+8BA1aL3hkpatWxY/wPXFrXf698irPaoU7UiagC/1IT8E177aYy+Ond9Mq+wLnjta4oAV5Z0J
d1MPbsr/DmE9dVa49E4UFdD6tGRBPj7ksoLWrXccrDf9/ydBvpLnzbecwyW/Df4htzPMuYhhNDqd
339QSwMEFAACAAgAuGhGPk7AHi7PEgAATVMAAB4AHABnYW5vbWFseS9zcmMvd3J0cGVyZnRyYWNl
ci5jcHBVVAkAA/viTk1L405NdXgLAAEE6AMAAAToAwAA7Rxpdxu38Tt/BcS+2EuJog4nTkLa6pNl
KdGrZUokHbVNVb0VFxS3Wu7Su0vRdOL+9s7gWgB78LCb+kPVvpjEHBgMBjODAcDan/xwGMw8Surz
OJ3SeJTG7pDGrXG9VlOwF1ev6d3s/shocVM68Cf0SMd7P6d3U/eetsZHVusodicFzY8+nedbE5qm
fnifWJCQpvMofojp+xlNUgQCdES2PDryQ+oR52339uS6N2jUjFHNfe+epsMoTF1AY0Orgr9yE8pw
aOj5I96F6uHqttu/7f/t4tX58Vvohijh6LPDJPVAJmK13jF2R3prskhmqR9YrYA7du1G0ZKkbuoP
CciYpGRwHqbk9enZ8bs3g9ufT48vb/vnfz8lL8n+h8N99tche3vk2SG5eNUkbgLSDwM3BvH9kAyO
ez+dDlqnl90TJEXKAu7v+qc9g/XBc7JNDvYPvxX/sB6gsaCHYRQEdJhGcWs4nYIWg4TWAHnQfd0l
u7vkbZQSfzIN6ISGKVAsaEocIUEK9hQ3AFvTwMRNx6gCoxERc42g1j0JkJO3tzdLwJJICNaXTMGy
CdhHp1a7jtNLMPYBM/Z22/jqXF3Tu0uw4m2CttyEHlICEsbpbIoW3yRX3bt/wRDJ9hQGHaaNGoG/
tmx29NYmmdwiFwf/0yizV4nJTfHs2tlvyCFIUDRLR35AEaI1JWlM3YneOJzF2PsZrreC9h5fPAWQ
d3Ggt2oDdrTPGYKfdKc0dEYuTLBFRr3z0E9LQKjZEtCbyPVsUEyH1H+kXo9OYXnmmDKTOX2keYiy
w5+pOz0Zu+E99QoR/eT6zG6LRiNwQjl9vKYjdxakyPE4CKJh3/9Ic0jvEhpXY/RTd/hQCB779+Nr
8KxxJZMgupe28FuVSYF60KLPABfWMDQzS+8L79puD8F4Uqo1OY3do0c3mNHjpJ/G0OLUtaUB35HV
W7CseqMjevATbOvO0jV7sDkPIuRTb7TS6FUUBY7WAQs+X6IHyaigl8RFn9QDVp/ZS18xYr2AN8VO
uBvErgomBpe80KtTqNc0ntFCdTCrLRzCfkd3ID4ux2ys2XJmmOjLexTsHfxdkoAVCQTmj2ufarXa
FbcGYrlNXXCJQj+kaJXYk2xyp1NEgb7eH0+nu0fwPfCH4PGjEMkvwcNL4a6w4TwcRWTkO4JOggQ3
DKiC3chvyW+OhTUKOUpy6/E1O1AK/yZj8Q2fjuI/leLA9HMXKRscnFm5QDzv4mKxuB2PJ5MkqTeA
Z71Vh/+CIrhIMU1nccgl6jB1Wmr8txl+pPpgXTvSzTbIb0pSFQt2j4ZBlKihA2f8x6MBBRPQwkMn
147UVitzpEy8x8j37JnmBlTtbbi8MoTpEkNmEYIrZp4/wwDxuVpZO6wnyMX4RzkggquG6Iac9cPi
qdZHvh+G0VEIQj2cOlsrwAPtH6d1F+0CrB9haEOen7h3AbTcLYiwIkhVYJkIVyxWMioOLC2kc3KF
bGInHfuJ1rMQyxG4TdI//+nt8RsHv8FkwHibBEkA8KY7YM1d1qzxELS7R2xtmiNgC/jMjylPoMgo
itUgdEX+ViD1vrQd3TdhEsX7Ad56+/DhJJqFaUanNfZDd5qMIwGszJsZKUs0RzGlF3SSMfz5+E27
/ROEXvgAy81tt08BHsWL3vHFGSA3JQnoRs3nlgzYukGATk7cYDgL0CGi/fpuQCaMF+HYCpWJMnE/
vIJY+9Axm91H1w8wEoOMGJTb7WNsQcNwJEnDohF2jVQYuhUlNoDvYOHcpnEx0It+bPrdTAoxakb2
DvIhyPITzCYuI/iizyj+WRBHUDSe6IAMvTcYg7vwwBbxH00+3s6yFuabE/kpw+E0LYXjZEikcKgM
Ex20RGv5uPOCsRYLp7s/Nnvo/4X17Gja29HYG7bNQjBaxZZujDVhKhXbE7WZ0KInz3BVaC7xmsI9
135TA/CiGRgOLEdYK8D9pVxtoiGL0fpak9i7Rcutah0KQmEzV68WKT2OY3dBZnEA4HqdE4tvhvDk
BGX32gLlnsLOGKMfAnvR3KnXm0jXZAqQa1EMJqbSeWzgOJSqRjz9gR7hQ4zMKmITc/nmvs0OoyKd
0l2E6ALsxuM9KGtG1n19ECJ6mDaAnSkb+HrnFzVgh0uOga0qDPMtI8RhgLEM5zQcRl4mtGS1T16+
RPpWwvyYHYRF33IyyDl3vf5HlvBBnAr9ZJxZVrZCPxVbmr5B/S/ZXOHK5rm1mnQ9t9AyCxF+uHr5
v0KvwPZTaYGqzI5hJ8o3HyJH2iYqn9K8CN+zWhsDiQjN8qMWIivSMgVTiUkQMW+PymDJCUtLsPH6
LGsuSHAKGV3G0T3MTuKAQ7eYmaBVGUoLcu5gB2dxtGANLVwy9cbrJ6FVbkfykxtG7n0EC33GlI/i
la7boZukL5S/OnIkiZ7VyLaiGeMgpZahO4U9Bl8zzA2ytbzdlNuhpuYclMbWI9LUIeNhYcjTlknO
H2fqKPBIcmxTfWClllhphzkWpTa41AJzrMqtL297lcxYRfyE1RU8Tf2KZSl8GeOYV8pEpQ+IeWH3
qgeYTxT7JVjLOhG1eEEuZ8OworcGyra1y9mEwbIlaRiGCP/gk8UcZ4EgH96NEuSytM42HDKl8ZBV
fAu6FLBKZoblkOhBT122uLPXV4rl6qKHVfSiuW7B3cp6sRCvZb7VvIzh722LQW7vfQnepjb2tqOH
jO9Xl19tVA/h5CWhYKXYtHLStnYNhcvGYWulhmunb1o6o3ej52vmoUUBBJi2hgF147KFLCqkXyxV
LLHcEmcN1ssgqy4MppKSLiodNvH8OF3gx8wJWScnRrooqmDZNkaUwfoP/pTAoP1AlUzEcStslviy
VBOeXw+yJ4rHLG3yax124xlWux3OJnew0VKytj7g9mGH1OF/O1WV2CoeC8nj189gAksOi9CfLcyY
+vfjVDC6uakX1C/Uh9xSYYsDN9b8MEqvXhTNpjDtstpDcXZHmD02q+recpyiko4H4/RDuhJJZhHs
bCSzxaLoWmiH5MkTsmUsbz85nUxTNstrm+iK4WKjkLFC2DCmu3R7nulBd4NlflnHWcEfr+qT8yZX
7JqZ+SgnzE0DK5b8U947A4yZQqmdLssDVzfYzAytxBHtYwNT/L+9fXX2ZqcDMBGFJgfthbKW2KA6
cVFGkl0r+APC5oCfA4mwqc3SehHCkHlJcCi4GyFSeVdeOMhyloq7FH+Adk5k34TV94e8989VVtWI
qnWnbx7FgWjJMRfL97a5gNuke4f3y+yTKOYcE4GzJ1PEs/O/XpyCMxiMKSTvHIfgraKnKZmhn3DD
xXxMY0pizDdIGM1ruYMsPZstvb2y/FRr3ROt6s7yR1sV+J1czT13LcY6NKg+E1vjPKzoLGzZOdgK
Z2CFF4BWPAWTxtFqtSDcPtI4JWlEHl4RyD8ffY/iMfXhPw/2G2AdHokhSHgrTIhTBd4hzgF58YKQ
HyH7OjoiB6ZBFc2GUwpbwiynE6cYUMTmy5ztGf6LnQL8/jspdGjgytCX8YsyMFkhBXZpJNzZ15QO
/C8ygRUPijY8LDJzDVHfyE2d3VmRqnZempehOuucY4lM1TjGKpDlsrTEYp23rsB+rQRLK7LkL3f8
N0ogOaFMs+vP7lZN4k3CQZS6waqkrGSIZ72hG1g1Qx5Ff/3xRiQrGNVwcKZzfeNPYN0HNLxPxyQa
kXe9N9yd0mmA14chb5hNYOHDLhwGC0kJ4LSGySOBBG46S5UfkYIL2yfgpw5/sGqADIG8VB9bAR2l
zvNvWfEAvDyWTxSMBXoE6nOKqQIkMtEcN+oB5CAwdvIQzDywV3BHYYRjDEeQMpB6s44eC8cz92Fs
KLMaRU2XqCXGqk2gA9QN/TzIqXfqxmEVn+Gq0QKYjxXxikeKkD9knKyj1UdplG7YbXAY5gluefUF
Y+RtIB/8Px2jfDjLSIG2gu7kF5/O+Y4ZyB2/RVvQKT/xhe5xMJBHBMGCkUtC/Iz1cYgKEbtmXlvu
vff2TEEd24kLIRKev8kqGCSrSxBlmYvskR9EEN43bpIpbYlVt3+jbpoqr6LDDzJ4gd/RMQ8RUxtW
R5zOc9/1rLPGxbOeq108y24mGc2r3UcDEmEmGV9HfixIWDZJ4zTZHEddgsozb4D9ia47tapdwbrX
29bdCKx3rY0NURMm/8BlN8dgJ8dA683R74QVZ556f072pQjdGpHMbi1tBm58D6EVoSc0CIp0XUIJ
a1qLv5l0Grr9Bgf1p8uiqUCjcsyGSlUYZEZDGRn3P3Zt+skTu9sXLysfNzRMr8VvTOv+xGJ3VM0t
Sxb+XIkI4zT5Krp2To9VfKR5fOWbz80uX2ama1DJkezqTFj2pNmhpHC0b5UWmBFk38oI7KB74T5A
uJzFMuSyPvFAjoCvxmiMkTXAU/l07IYaeMwtnI1D7RkxgkNUCQDsTqc0JHd06GKCIWLxHLLTOSUT
6rIud0kErTFJFklKJxDAk2gWD2lCJqxAM3YfwbFTYBPTgLq8hOOR5AEyAeQG+LD5VktK+foXphuz
13KmVmMFaaFiNercPkEE22c3kkVPPiMQkG9vxP1bG/Ddjd6rAXrOQKbH3tsTwO9v7NVoIfygqE2E
HL02ohypBuMpA+wBn3e+zAVhkqlPbEMuY5/hGA91jO0hO4UAd2mnz/vMh26JnQzWIUQGvZVtF+SB
GOuF1M/R7pBfnWXIyhj0DEzLrewKQPauqAHZE/8ktpbyAFDu4rCmyrk2uRYbeWbqtq24Y7sBKzN1
zHrQ1JrVnj+VV3C2TG1Di9wgGvpjOi3W3YGlu3wlplqHOEpxYVrsZjdR3+pczKR6Zc1tKQTUjH1c
vdSOvpCyiqzkNI4jFmrGzCOjI4fNEsEKePsLGuOG3ZQYasEslN7Q0hVgH7zX1quXrFZoMWlWIOBV
lG2lhKUE/DiJ6cq4/nLihiwQR9EUk5Zodj8mLgrSVCH2PbMMMkVjTPBhFdvyuymh7hB29ODlGTOO
Bv4SkgN5FI15Aq4T/CBcptWkBIevslnNYAXwoAp4eLPsIKiY7lkV02+rgN9VAZ9XAb+vAv5w8/nF
dI07NATll6ay1biuzW9g8uta/LoGrwqKy95vbmtPM9cz3cy34BM/dmDr87qJT16Iaibxd3bsgrPd
I7LMl+uFBfg3RYV6m4VCLi3Ml46X20SlO7Qe5mz4IFY+lUB8MwfLYh47o9CeY6uziqVPtNXzYGK9
Dgb0qqfDHf1cWNo9VuUhN51oZRJJoT01XiwuLjxPvjTO6thgPX1VkDaH44ce/dAdOfVWXXuxYhAc
gQWZ6tTJIddODfwmceq3WLBVMje0V6JFT001PerfdojFhxWDh8ljXZ+k7FAcBMdJhoVJEzwIpx/8
BKI3f5rPdlGeD6sieqTxPPZFE6OI6b0be7j1y27mbrGn5u0245I4mmCNRia9/h6dfzAwtTM26cCY
NOxJu6RouXdJFMxEq15PvnoNAoPQTkalQQHQmjxMkSgHN450hPXLN8goWYGU2iqJ8Ic7rs67r+mj
P6T4cgXU1Q2DBfmdaM0DfMuf/e6AWEZZ5pixFYtbPoJGc+E/TKI6lWcFOVdknoL1Tk+6vdfnb3+q
m56i3Icsi7u8hvFqNjp4/uLwu+dH5G424pT9RfIu9QNW3u1f/0LjxI9CB8B6uWQa4SV+aGy9YdUC
5+k/wqf8xXVMJ2BrbMMwotTjlzjmY5wJB8lgq/YXyCghUJ5hEZeLk5kW8PwV0DA7fEqeZtNe0qM2
7dLWkrlwDM7VydiNtxtIdJmCw2wycnaIpQwup/n+NXnkg27zCCP5rax6Vqu6jKMhFlWmY94KXeOz
h3Er5zAF92n4WWKL/oTMktnq5vK5u3w58BKlshsBzPVzAcu9uee1Li5aC/gj43F7MmknSevjx4/1
xipjKQQl+JUHzYNqJhrm4ap5mnqJuyQcf15gNPachWPX841SzDq/OvBFZ2KFZEZzRpYvwjid//kU
tkOm8VlM3yu9ih/D8vkp1fts9+iPnK0Ru8sqpSk4nTpzE53rjIbDBTukei9dsPw9EnZ5EmSehYl/
H7If78qJKO6SsAky8FhFhf8gFJfagIKqxYTz0yFNKMcSA4Kj4zjv8cSz4Ui6XY0/O+3Y38ezRlth
jaXyKzaZ2Yp+jeE0CsUsWQ5JGk11luA23nYv+a9uLCZ3vhuyN5KFbmYjXe9tq2GUPiSxnZU20v1N
tLSEvcCBdTAbApRdPYUtAeZysmwLH1t+estOCQDUSh9vEzrUj8sLMGYc5cBCYbuNcg4KbJMnNOWy
OeeD84vT3u1lr3vWJE+grQlJbyevplUmfGXtFPe+z7vO3tHWWMq2nX8Nx35uy7FeA4of/xIlulwC
Kn/4SN+x1IGmbryFzifAjE5PfUvSX45n7vo2Sn6XJ8DLkmArEebZqFCPkQzbMiusTVLhT7rRKE44
n/8BUEsDBBQAAgAIANB0Rj5KPRJv4A4AACtDAAAbABwAZ2Fub21hbHkvc3JjL2ZsaWNrY2hhcm0u
Y3BwVVQJAAO3+E5NxfhOTXV4CwABBOgDAAAE6AMAAN0b23LbNvZdX4EknQylyJKdti9S4l3HcS4z
juOs3dSdTicDkZDENUXSJGRJm3i/fc/BjSAJynScdLur8YwlEDj3Gw7AYe8bfjrijxwm6SYLZ3NO
vMMuebq7t0tOksuQwoMsTTLKwyQmNA6GSUZCnpN8OcnDIKTZxtsJWd4dIJCDKCICSE4ylrPsmgUD
CTzm1OcjB0jviu+E8TT5e4yPBn6y6CqKzudhTqZhxAj8T2nGSTIlfM5IwBZJrn984OQ8SaLLkA/U
uh8+nH96cfT67cmn47eHRydnR6Pj16fHP0g6FguW+SGNyC85nTEcOw59FueM5WSeREEYz8g1jcIA
AVvTIzkrJwu6IcucAW5DXYxgqO8nWUBjn5FVyOeaNguEQkQOZhljCxZzkmbJdRiwwKxAQGfJlK9o
xkiS9QmNOMtikNQ1izZ9QOXEA3MWOfFRyGEM4BRFZJWFnDNYYzBOGF8xGNkkS1Sm1IcW3OuTX8gx
y0Fv5DWLWQY0ny4nwLkh3QjtoExXIQwUz4ShhAKyjAMAVRCoNFagEUjdmK5ZlqN5PB3sEQrqx6f5
HIBONgLIK+DIiArhvEoAnbFSQtOU0Qy1CTLDBYI6ZRADNAh44EfLQIhLyz6l/iWd4SpBq2JqQMhp
xChQlbHrkK0kvCSKkpVEME2yhUTNEwQDHCwzVmG2DacZu1qGmVBVjoBWITgUiHPBwHfmnKej4XC1
Wg1m8XKQZLOhtsohWO6O+RHN0mgHwA3mfBFp5b4FuQRBiFT2UaKU5CkTdsnWPkvluHTPGWg1Fybi
swxNyqykEYKSHg5SOZ8zFIp0eDTZgOV+Fk6MTBVA8AMh8SONCaFovvcGe/2qLpS2YM2no4vDo9Pz
t+9PBnzN5WMRDlBRzLbc72yyLWz1x8Hud7DVP9VUW3Bo26g2UITUZKM+JJaITfkQrLJskVNhY3N6
zcjVkuVIFeaNGc1EGEaaMNLa/PVJKtnzZUZBONLGKCe1TDLQ6eDo5KVOBj9I7N/uM+x0Hin9kIdT
kNqlP6fZYjB/aD149uFgkvMMKD7zM1DHQcbofulxmsJSoZnS+Auah/55CDmkNHx0DeIvjbyh+bw0
cBzm5RnvEpBmfeHrjKbz0M/PQNWsYY4k+gUtE4FklQZ+ZZNXGa0PfgRLtMYertgEjbMqopdsspzt
dzqg2xxdnYPK4xnLDnx/CaLbnM+hqMAkTZ6TH8edDgh06XPyCmX+knJKPncIfPgmZQGbgmkvF2oI
P2ec0QAcfziEWAjeDbpAk8Ykmiw5yQWLgM8seEfjJY0k62LZmZ4CIQMfRZsiBUtKSSIdGIBBljWQ
DpY8ccKh8ADd0UdgjunAOYuYqpSaV5IJMEA1DeAqdTJugH/K2bgjRQFfSV4MfHg/+ScDUfZWYTBj
XA2eJqEoUiB9nSZ5aTCiOa+OQT5hgRpB05ADwnbVKJqkst3ePglncZKVV1CLX2vhBAo8jfIjFmej
PevBikJuime2rPC5mGBsw+sa8Y5KoLwpjXJWPO274NmTPt9I0NcJFIlY5fIz5FMhKOxNcA+WKqXj
dcfmiY0eJgjY8ulNAXmZQoZgErR0CCXmxzFbwWqRj6s4wynxbOhd6xl+Cs/iIN2jiKa5oLHQ1IDJ
QZteDdlaUwVcAFdUIpHhmkUvw+kUEHgW0WRHS6CCowYkRQj5KcvOGIwjoSWwPeLt7e7ukqHNjQMm
OI50DVmkhDHFeMJZDrpmygxJvgBPIhC6YWIOyZFQoYacJ2mqsxE6nYwTkPN8CqHShQvyFVXg5kkW
/gszVQSjUzAVsppD9W1iDSbWqvfXdQVMCzv4DQV5BYnEqwhmsPG6XbLfFC675G/EsQIcYXfcAu1F
I9r1ndGum9CifYmARJ4/bwiALpsrU7yga6D1J7CJMSoiXWMFlgvM+S1LgV4jY+ENKKFxy0UXZtG6
aRHy5xVInj0nu+TxY0u1ONIlX74QYk3br03Dka4TA35gqlcQVUVy4UJyUUMiR7pN4jaxbQD2/Jt3
9QKLWW8HZN+3SX8ifF79GJKfut0+6qfbIJ8S1IsGqBc21IsWUG8IWB+7jRFnkC6B6dwJcNUgn/7c
2iBhEoQkqIgz2LXIHC4otOJRhhGKsOkUEnZeFCAYUmH/FXHaaH8PpIDD/GQZRV47BVdVYcxcSL+s
jx75UYy2V/RvTugbB/Tf2kG/q8IN8f3Cx9obQcf9y0lEJelD6coKPDflqkFmYgiHmatuUGlQZVNd
OHSU+ej8tCEBSDTY6PGM8WUWC7xoDGgystiDeidXq1hQVFVy5FcxxSssGoFavzbVCkRV+z0yW8lv
QO1VIqrLTz7Q/0xP2Pckeos/tFG9DI3zUTjFOv6Xs6NP52+Pj15+Ojw4fHNUkqouFIRU9Nqdffjt
dQc8cXo1Tn5iLEBKqTKlgCTFcJ54aa1cURKtYCUPniOGcecRGkGZWL0/Ir2p+FciGRze6+7sL2gY
i0lVssuVka6loHzEyZpQbRXVxXoSU/tPMy8tirKyQNzMNiBTTCuDfMTiAHQJRtekusLezRfHBpn0
8uJ7xYwc05tMqgDSXA5jmC7m7ewXhZvZ+qJyrmm0bFAMQtlUoOjq7nYYLXCD7j6KpWvQVbDeAsCJ
1izf4PKNW71eexmgytfOQAnlRVshIBCbFBXGtLOI+NFrCCQfbokkViC5xQn/H31wi6dpMPa2sxr3
IeC13nSWJooKpJyhiv1eQZa9u7VBj6tUltKQAI7FR1/iEfsee+dcbJ8X2Mg6xdbFP5joGHpW/4v0
GP6rMoKmcYp1Vw8NAZiw9immTWbMsinBVWe67PPexj1rsG5FeDWtjNvkUqFHhV4o8/G+J+SkMlu3
BHhB01dZshBdQ0/Of1WeXkrALXKCrJq2uK5irsbbFlsPpx7OckHa2RfUSpptKK7qTfWqyLNnRMwv
O6bdvR2NgHsuzEyprk9qKJTJ3ow7HR98I5d9qkPsG59m4TW4RudzR5wj+CPZHsP27jPVpuv1i75W
D7bf+rvqpBUtYwKB99J030SHDTslh1Bycz2sdhVQap6LyZ7pBUp7dLWYHki4sJM48PE8BZRdkod6
LAvYvZ/7RIEqJGCRUa5zpVAKcYxGxfeCtJRmKNGRblx6aqAj6VSdorpUx52bMvB/W9DNaggYnJFA
TBbisVdg2xhBvY+9StdUr/92oaLJ07++kKzmIEjHpwlwt/E+8NHoo0rVfYK/zIyDaEU3+fvptDWg
N6Z02AKqU6+2Q4hANIqE97wK8cDOw6Mfe3Kws28MfpCxRQLmZ2Q0dk77XT//w7aLwmOa5+/sqz1S
IeDbl6g2VoEF+BdnDxYXMrvVUte3L4KbC2C7RgM1vqlXe5ZCt9pCBdLHasF3GxzLrqW0e3g6lCYZ
r9bTatizF+nBbdbjovQrbU2ja7I1/bytrZn5lq3ZpzDbFtzd0jr3qj4acvNXl9R/yWh032B0Syy6
YyhyRKLtgeibxKGrX2kWh/EMdhVQ8Tws8h9JYjz1TLJLccjoilceXmkIGCRcqJdEdcPy7sOxC26S
FbbYtMyVgwOmszCWoI15+E8MpveMXNJ0WgauxsmFQagKxhk2xm3D258ZQozTfR1z2ujHLT3z1jz8
3Uu42T05nrVjeXYrzzd4jwIvEhQ7eHMKzypNANGcLvV/cReOtbz2ucqjM9VtN/MUGablVj40Mz20
8gEczvTWeDC4i2eKazLCn/vy19U7uvZ2+0R0xQxOPGW8ehfG8skT+4mEiWi8jYG5QZibKsxNI8yN
C6ZqWagezrovWlsgX9FXseMXs5Rd2W5BhlItCqp6FJ87sGnWGy85CXJTLgPO+SYVuy85pd7dkdZs
Nz2Ab2ptYe2uSCQ3xD1pD8q+i+c91Q7QLZemm0M9kmtMJUhN0zXYMbGoHY2QNXGXB+CovgIX3Cqu
8lXI/TnxcFB7lo9XwzQAgeLFkvMkFo2gUcOUd+Aoo63LVQtpZFxoAoH4clxfU2fxZQK7eHaIyh+V
uhNNuF5OIjUbD3Muw5QEAgTkRBittseKY6Rb6LAkgB+toMdRpZ0R6SeW4r0mifZzpZgc8ZyWD12s
h3gLSTw1YxMBpDZgT1kkQTgNWZZ7dh+0veQLtd6TYQT0l+a0Zp731q6C+N/lOmBTuoz4aGvj2viT
O1JUQ1xvUXyvhCdXRDIpXEJ/Xg8ceHGigGnxie143GwcsymXQu12tsRoRGLDsaSjIZ0k79RgI6Rh
r6kYrRRnYgLwWWrMFRcpewEVXfxSSSHPbCr7X5GVDJ4vX8gDsRS+NBHZG7ZA9rsk7A+NxDNg8T/k
P9mPVWXOQRTp1LTtmKNTO62QpwTi8NgWvuhfWzcMcc1ywSqX9XQCkhSJ3RbmocJjaxuvUamL6rQp
K7q6TisVFeXbA8JZBBH6rqbmp3TmYjXYt6BWrn8n5PWjlT21vW2VRRovazR/yuz2K572NRArEKoe
dxvDT9sxrAPr/wbLDgurn6tJfXfH7Sc/7bY3SoyxX+EI5hRTu0GVG+ehpQkHOxVp1+/CmqPI5vuP
IlrpY8ot1yQ7bk072jf2jXTXsZdKns4IZK9tEYe+ody/f/xpFFhxkdS1oPketrWlto/GKk2ZdoIv
aPju4X+rBOyrtK7FjmvvW1DVburXr6sVk+3Tfodh/NfzV6P0dL+0ydDVvYTdPtntihuenEWRvlfH
59R6rYSIN5hi8WKYA579IsHXW1jpHYjv5uSt1dnSSEQ8lVItX1C9d2T8q0Uct4+5Ak+LAHXTatNk
PZMLSqBrjlbqK7h679jFy1R9c26+mxs1n00jz8fj/eISjbjB8Bbfu+JJ1nCTIeRs4dnbAGUoqzm+
EOnh48Gc5idszcvXl8WTWAwX8qnvMMS02v07y/z0Cwi3Olencuu+Ub3uiXXHMK/dQKHw027VFu9o
9+3DSlvei51Xexm1ffkIFG5fB2l4AclZsNlho0t6JcBDgi8HlYGI3RxY0Jm67ozY6+G84ZpZq5gl
tsAWBtcl+zulm2+UcsqvG8jA6Hj3B1Tw5Ikz1JlOvnU6YD3qN7yDpc6LboouxwOBpWsfW5j7Qkmq
1V6ir2IhJonY7y6WIpNu39x0/gNQSwMEFAACAAgAuGhGPmyi1F+uAwAAbwkAABcAHABnYW5vbWFs
eS9zcmMvVGl0bGVCYXIuaFVUCQAD++JOTUvjTk11eAsAAQToAwAABOgDAAC9VU1v4zYQvetXDJCg
sANHSrY3py2auN4kC8Nr1160N4OWRhIRSlRISlq36H/vkJQUrzcFctitYNjWcPjefDxyootv+ATu
AzNZHRTPcgOj2RjeXV1fwVI+cUYLqpKKGS5LYGUSSQXcaND1XvOEM3UYXXLU49CC3AoBDkSDQo2q
wST04KVhsZm+Ajl6Npe8TOWvpV0KY1mMu4i2OdeQcoFAvxVTBmQKJkdIsJC6f1kb2EopnrgJu33n
6+3ubn7/uNwtHmfz5WY+XdyvFuc+jqJAFXMm4JNmGVrbgsdYakQNuRQJLzNomOCJBT5yF95LQ8EO
UGsk7iG60sKwOJYqYWWM0HKT97EdQXREcJspxAJLA5WSDU8wGXZYoI1MTcsUglQTYMKgKqlSDYrD
hKhe5SGfQkNsi8xLgusiglZxY5D2DIx7NC2S5SBr20zfj75w98tPsEBNfYN7LFFRzKt6T5kPoQ9F
u/0yrpdi2PLs0VYogbpMCOolwK5jLzSO9HWmBpW28ngXXgOj9ttVnRPo/uBA3lNGQ6kszntJdINK
gVUVMmW7STWzG1x0nSBCKwhaiEWduHL1ta9Y/MQyu8vF2iUVAqwEMopKYcOx9XhSCNl6glSqwlMb
aWEog1rhSbJvyVThc82Va5W2QC2nA0XlLJDOTm5MNY2itm3DrKxDqbKoV2VEyr0cXkRWiUuCC3NT
iL65j1SXJOE2yomtKANdodMlfo6x8nZ/PDPqqnYSiVFZSQ07mbBQ/oRTVbY52qL4A28lm6COFd8P
Ne0A6Ry4is97JovS530dXk9Oe9F1i/bs5n/O5qvt48dlaD4bv+yuA9soPFbud5bsG7T6Y3j1HbT6
v0r1DRkea7QXqEX6L43GNFgEpiYiVX6pyNRpLGcNwnON2kZl50bGlLuGbUz2pj3ObwKVTy/2E8Xi
eI0xA19NkrAfB/Plb/0wOPfs3+6JguCMp6SbFLaP28X87vb33UNwRu90Fx+byM23EX5a/8GTDM0v
QRALpjVsuRF4xxRMvXpi6DyCvwOgZ737ePdhPtsGgV+eOmu/a9Q5wwVNSXvL/wxX45vA+TSSRplG
8yC1GVHRtIH1xjix/ZCTjfyO3RzkqZ+xxhPHlZI0VLQecTvHaMIRb8+53vC/EDR9PdDqaAwO7+Zo
reAlL+pi85VLQCPRYGwwmb7QVXQFmXlDDKP1avgPF9h0pJXiDTM47Rh82MXO5ndzYnO5eKONvNhV
XSI3wT+EdIZlwlOIouPG/QtQSwMEFAACAAgAuGhGPkK5eSr7AwAA1AoAABkAHABnYW5vbWFseS9z
cmMvSG9tZVZpZXcuY3BwVVQJAAP74k5NS+NOTXV4CwABBOgDAAAE6AMAAL1WTW/jNhC9+1cMtkEh
B7acbHty26BO6rgGXG8MO9veAloaS4QpUSEpK0bR/94hRcnKxxY57NYIYIvDefPmzaOY0flX/PTc
H9zI4qh4khoIbvrw8eLyApZyzxkFVCEVM1zmwPJ4JBVwo0GXW81jztQxGHLU/dCCTIQAB6JBoUZ1
wDiswXPDIjN+AzJ4NEOe7+SvuQ2Fkcz6ntEm5Rp2XCDQd8GUAbkDkyLEmEndPKwMbKQUe25Cn3e2
2jxcT2fz5cNifjNdrqfjxexucVbzyDJUEWcC7jVL0K4teIS5RtSQShHzPIEDEzy2wJ3tot6lIWNH
KDVS7ZZdbmFYFEkVszxCqLhJG24dCF8IJolCzDA3UCh54DHGbYYFWsudqZhCkGoATBhUOSl1QHEc
UKk369CeTENkReY5wXlGUCluDFJOW3GLpkJaOcrSDrOeRyPcbHkPC9Q0N5hhjoo435Vb6ryl3oo2
ec7rJIaVZ4tWoRjKPCaoE0E/sVMZV/TtSgdU2trjY3gJjMZvozol0O3RgdxSR61UFudWUrnWpcCK
Apmy0yTNbIJj5w0RWkNQIBJl7ORqtC9YtGeJzXJcfVMhwJ1ARqwUHjhWNZ4UQlZ1gZ1UWV3aSAtD
HZQKXzT7nk4VPpZcuVFpC1RxOlAkZ4Z0dlJjivFoVFVVmORlKFUyalw5IucO2weRFGJIcGFqMtEM
d066xDG3LAdWUQa6QOdLfIqwqNfr45nQVLWzSITKWqrNZMJC1SecVNmkaEWpD7y1bIw6UnzbauoB
6Rw4xadNJYvS9H0ZXg5ezsJPi3Iepn/dTO8280/L0DyZOuxeB3ZQ2HXuN7bsO7z6Q3jxDbz6v1r1
HR12PdoY1CJ9yaMRXSwCd2ZErnzuyJ3zWMoOCI8lasvK3hsJU+41bDnZN223vwEUdXtRfaNYnNpj
zMCrmyRsroPp8rfmMjirq3+9z6jX+87PBz78LjP8TLqH6YfO8s8rQ1ceXj1bmZX8qps6iWO6M/U1
Uzb5tH4t5T5jaq9b3KbIeNz8ClZ/8jhBA+d0T9Jg+j2gzxj8ctBdHUD2wNpawUW/97db767CL5CT
eU6UGoSf3FYSP8fIBN2UAazns+VkEfilaU4nCONgtTbW2v0+bVh82gSJNNLjnmKE6zlsm249hWfd
f4lFm9SSKJVYo6CoZXCvhCvfhiYRvQXYKdaUX32+lk8LRq4kJUX9XdPoRAJrRk+h3jO80mj+YIpO
Y/Dj68iajip1+SpEQvnxdHX8j01tm7Tnn17vIOm/lJMXusKSNNqAlxe+9+jNpDHjBl6MqdnyFvJO
RqWe59MDaR+sbu2T+w3neHC2em0g17jbGfiGvBVfoNUAtui/UEsDBBQAAgAIALhoRj4yQPxlnwQA
AEkNAAAdABwAZ2Fub21hbHkvc3JjL0NvbnRyb2xTdHJpcC5jcHBVVAkAA/viTk1L405NdXgLAAEE
6AMAAAToAwAAvVZtb9s2EP7uX3HIgkLObDlx9mHzumCZ52YB0tSeU2zfAlo8S0QkUSEpv2zof9+R
lGTFcYZgSKc6qMW7e+7t4Z0HJ2/4dNwHxrLYKhEnBoJxF4anZ6dwKx8EI4EqpGJGyBxYzgdSgTAa
dLnQggumtkFfoO6GFuQyTcGBaFCoUa2Qhx48NywyowOQwaPpi3wpf86tKIxk1q0iukuEhqVIEej/
gikDcgkmQeCYSV2/zAzcSZk+CBNWdsezu/tfJlfXt/c31+PJ7Xwyurma3hz7OLIMVSRYCp81i9Ge
3YgIc42oIZEpF3kMK5YKboFb6qnX0pCxLZQayXcTXW5hWBRJxVkeIayFSerYWhCVI7iMFWKGuYFC
yZXgyBsLCzSXS7NmCkGqHrDUoMqpUitMtz1yddAP6WQaIltkkRNcFRGslTAGyabxuECzRjrZytI2
0/ejLtzV7We4QU19gyvMUVHM03JBmTehN0W7fBrXrhi2PAu0FeJQ5pygdgFWHdu5cU4Pe1qh0pYe
w/AMGLXfSnVCoIutA/lAGTWlsjgfJLlrWAqsKJAp202qmTVw0VWECC0hSBClJXflqmtfsOiBxdbK
xVolFQJMU2QUlcKVwLXHk2kq197BUqrMuzbSwlAGpcK9ZF+TqcLHUijXKm2B1oIuFJUzQ7o7iTHF
aDBYr9dhnJehVPGgZuWAmNtvXtK4SPsEFyYmS+vmXlNdOBc2yp6tKANdoOMlbiIs/Lm/njF1VTuK
RKgspRpLlloof8OpKncJ2qL4C28py1FHSiyamlaAdA9cxSe1J4tS530WnvX2e1F1i2zuJ3+OJ9O7
60+3odkYL3bjwDYK28z9ypR9BVfPw9OvwNX/laqvyLDN0ZqgFukljka0WFJcmgGx8ikjl45jCVsh
PJaobVR2b8RMuTFsY7KTtp1fDwqfXuQ3isXxHGMGnm2SsF4Hk9tf62Vw7L2/3TPodL6p+gNHdtEp
mc6NEkWYHLVE72eG1h5ePDm5KsVFp9NpW41G7bdg9ofgMRo4oQVIFe92gJ4RVMdBffq3O6eelFOx
yVgRppLx4Gg0EBnRXw+Q7m9/KXIeFnl81P3RqS+IQofVY9kvLIFkqdsGRB6iMH/RJseNaetrI4vD
ynOS1JpfOp3ZXPyF8LQMmo5+E7kJurbZ2lQ5KjSlyiETucjKbN4ovYjzTPMQnDMMzoenPfjue4+1
kvQjYA+K6oFT+mWjJysqezD7aA/cdzjBVasT5AgS+AkStMMxqOphTzd06lT7F4XUQTfcWKkXLyHY
wHtIuuBR7IOZMK6xY7qQD8hrLCfzOPSTgMZqW+Cz8u9f9sBPhs/gbZ/eBP6CBgI3CdW4fyCLij5v
4MllsnM1hBPr7t27/RjOneBZIJb4/z2Kw9woaE+aihbT5vuraaHpNEgo5NYdrrW6MIBhxRGPTTuq
COxQrBCKkIZj+jtGJqiSUPZ7twezsUylImb3oP47+2HYbew00ljKiIluv3+UHIPahZ1ETyT3c1mq
CD/RNmjsuWJrH26ge0CfXfyHdBL4lpToXzMZDmntNdDZ2M9uYP271c7iycRqjDDnfmD8A1BLAwQU
AAIACAC4aEY+njGA8KoDAABlCQAAGAAcAGdhbm9tYWx5L3NyYy9ab29tU3RyaXAuaFVUCQAD++JO
TUvjTk11eAsAAQToAwAABOgDAAC9Vk1v4zYQvetXDJAc7MCRku3NaYtmXW/WhdcftRct9mLQ0kgi
QokKSUnxLvrfOxQlxU5SIIfdCoYdccg3b948kgkuvuPjNR+YyOKgeJIaGEyG8O7q+goW8p4zCqhC
Kma4zIHlUSAVcKNBl3vNI87UYXDJUQ99C3IrBDQgGhRqVBVGvgPPDQvN+BXIwYO55Hksf8ttyA9l
NmwZbVOuIeYCgX4LpgzIGEyKEGEmdfeyNrCVUtxz47frztfb3fvp3Wyxm88m08VmOp7frebnjkeW
oQo5E/BZswTt2JyHmGtEDakUEc8TqJjgkQU+mi7cLA0ZO0CpkXL37HILw8JQqojlIULNTdpxO4Jo
E8FtohAzzA0USlY8wqhfYYE2MjY1UwhSjYAJgyonpSoUhxGlejUPzck0hFZknhNcywhqxY1BWtNn
3KOpkUYOsrTNdP3ohLtbfIY5auob3GGOijivyj1V3lPvRbs95fUkhpVnj1ahCMo8Iqgngm3HntI0
SV/PVKHS1h7v/Gtg1H4b1SmB7g8NyAeqqJfK4nyQlK53KbCiQKZsN0kzu6Bh1xrCt4agQCjKqJGr
075g4T1L7KqGa1uUD7ASyIiVwopj7fCkELJ2CWKpMpfaSAtDFZQKnxX7lkoVPpRcNa3SFqjmtKFI
zgxp76TGFOMgqOvaT/LSlyoJOlcG5NzL/kUkhbgkOD81meiaOyNdoohbliOrKANdYONLfAyxcONu
eybUVd1YJERlLdWvZMJCuR1OqmxTtKK4DW8tG6EOFd/3mraAtA8axaddJovS1X3tX4+e96LtFq3Z
Tf+eTFfb2XLhm0fjws1xYBuFx879wZZ9g1d/8q9+gFf/V6u+ocJjj3YGtUj/5dGQLhaBsQnIlaeO
jBuPpaxCeChRW1b23kiYao5hy8metMf1jaBw5YXuRrE4zmPMwIubxO+ug+ni9+4yOHfZv98TeN4Z
j8k3MXxZLj9ttn/OVruP3hkN0GF8MkYTXSPh5/VfPErQ/Op5oWBawxcps41RvICxM1AI7RTvmwf0
rHfL939MJ1vPc+FxM9ovG7Sz4YJuSnvS/wJXwxvPLd3wrwiavj7y3AyGVjxtbo5iGc95VmabF1M8
zRPa9dplqyTdi18p5SyfEIV7jAbDm9PIsjRHIY9uOIOhwegIoKATxUwrIjlYr/q/4QLtzzFeJqn9
K/pHQrezP9mBZ7MpBa+YQZdgveKPGStaku7l5kWESHahfwjhDPOIxxAEJ836F1BLAwQUAAIACACX
e0Y+wKg9xmIGAAAVEAAAFQAcAGdhbm9tYWx5L3NyYy9NYWluLmNwcFVUCQADfQRPTYIET011eAsA
AQToAwAABOgDAAC9V21v2zYQ/u5fwblFJxeO7KRFUThrNtd1UqOpa9d5WTEMBi2dLS6SqJCUHa/o
f98d9WIp8YBgaOcEscQjn7t77iGP6Tz/jp+G/WUDmWyVWAWGOYMWO+oedtlY3giOBpVIxY2QMeOx
35GKCaOZThda+IKrrXMgQLdcAumHIbMgminQoNbguxl4bLhnensgnVtzIOKl/C0mk+vJqJVHdBEI
zZYiBIbfCVeGySUzATAfIqmLl6lhF1KGN8K4+bqn04v52+HZaDw/Hw2G49mwd342OX+axRFFoDzB
Q3ap+Qpo7Fx4EGsAzQIZ+iJesTUPhU/AlelhNkuziG9ZqgF9l9HFBMM9Tyqfxx6wjTBBEVsFInfE
+isFEEFsWKLkWvjglysIaCaXZsMVMKnajIcGVIxMrSHcttHVXj84J9LMI5JFjHB5RGyjhDGAa0qP
CzAbwJGtTKmYWT0K4s7Gl+wcNNaNnUEMCmOepAvMvAy9JK1fj2tHBtGzAGLIZ2nsI9QuwLxiOzfW
6X5Pa1Ca5HHkHjKO5SerDhB0sbUgp5hRSRXhnEp0V6qU8SQBrqiayBktsNHlgnBJEGjwwtS3dBXc
J9y74StaZWPNk3IZm4TAMSoFawGbDE+GodxkDpZSRZlrIwkGM0gV3Ev2MZkquE2FsqXSBLQRuKGQ
zghw7wTGJL1OZ7PZuKs4daVadQpVdlC5B+VLuErCA4RzAxOFRXFHyIvvC4qyTYxyphOwuoQ7D5Js
PNueK6yqthLxQJGkypU8JKhshyMrFwEQKdmGJ8n6oD0lFiWnOSDuA8v4sPBEKEXeh+5h+34t8mrh
mvnw98FwcjH6NHbNncnM9jigQkFVuT9Yso/Q6gu3+wO0+r9K9REZVjVaCJSQ/k2jHjaWEJamg6qs
K3JpNRbwNbDbFDRFRX1jxZU9hikmOmmr+bVZkqXnZR2FcDKNccMedBK3aAfD8buiGTzNvH+/T6fR
eJLXh/0yNdjb4KQ2cpaK+sA1LD4Ic1JZ13yr5AbPiGsR+3LjBs3q/DGe2VLdTJS8255izlJtK3jN
jTIJqKVRHHcrLW1ogxX22PRShSxV4amS0SWCj+IkNQ4Spw2bzgwJ7hnT9rvV+Npg+MmHUSc0Nbcd
Z6ZTpH+E9GIdHGvPDWLJnKVw4U5oo50We/YMZ7hCf4bQbjan1bLz7Fxax97QBL7QMkwNEOyEm8BB
OMxqybBcV8PPM9zx7ORN5W0+eD8cfHBettmrNutmmApMqmKbaa+3rOVZhPgEQg33J1essS+WjW9E
mko9w/JCVMlmvWxLI6N7SlEwd47p12t1QqpWW/tc0F61T8nKntlJyMlDW8Hc15K/vV4SPG1MTp4P
S7oBOPP59Wg8G1zP5zvy7Tw3SXUwX+Dh4dRg6m+93nvcyPaxnWvCaS70BhYJjXUPXY63GuFx7Zab
rdlqs9fd193WjtYybFKiXUkPbx6K8nYFeE9ZO006P+Z2ZpNwdsJBkRUAqK0ruqFlWvupHA6kNk4L
rcMoMURehbhMfCYLYiIViXAHiJdRXMlOUFbsV3Z/uGfTOq5h/Ucu2b1g27uAWq2dh2+Ne0WjDhH7
jt5qA1GmPqkyjVj5VBfnMs9VYeGOG/jbuFZmggfFhT0osIGUz8gFptcgfiLs9g49cLXy2swLuGLP
8Xn9x590RpDEfio0Np1fz+azV/lWnPYTdOnZ3tLraTBniieB8PTMBu00Fcdv1dyp48EyaoRO5phc
FvXvdJgv458NiwE7oJEo8hDlklHHltk2bGMX8ji1CwTJ2lI+TRj6fwXCTI77trANtxJH1ebE2ET3
HApOKU/059bXj3FzOM1+LCMebpt5aR5Ou8qaqtPsuvjTLPBqdSHvtbo53RzP/qm1Dcyavo6pSlgj
Np1/wvp8+fh21B/b2Znd1YHcnKZhOPPwXhI7OV5uFLEwA4zwZhileH5LVdin2LVmYAweBbrXW4Vy
wcPi3WkdnGBunxZ/gWcG3AtgwPF+gldG0M7h0evnh90jPLfp7/3Hx6N/5HciSqMJXuf0KLZenBe1
Az5PAf/zFH+j7VUXW8XLbj0/St6pl2Rm8H7iNLMJuirQgsiL+Yfhl0n/3Xzcvxqd9ek2ul/zY74W
K/v6UfrgTE2vVx8apEpL1U+NrJ+StOVAUcUpKLgDrwiyEHupgONqM8M1x1YN3xr/AFBLAwQUAAIA
CAC4aEY+t3xCnzAEAADfCgAAHAAcAGdhbm9tYWx5L3NyYy9Ccm93c2VyV2luZG93LmhVVAkAA/vi
Tk1L405NdXgLAAEE6AMAAAToAwAAvVbbbuM2EH33VwywwcIOEjnZvnmLoo6jZN0Gjm9Zt08GLY0l
IpSokJS0btF/71CUZOVSIA+7FQzY5AzPzJw5I3p4+h2fXvWBicwOikexgf5kAJ8uLi9gJh85I4PK
pGKGyxRYGg6lAm406HyneciZOvTPOeqBZ0HGQkAFokGhRlVg6Dnw1LDAjN6A7D+Zc57u5a+pNXmB
TAZ1RuuYa9hzgUDfGVMG5B5MjBBiInWzWBhYSykeufHqcyeL9fbKv53OtnfTiT9b+aO72/ndicsj
SVAFnAl40CxCu3fHA0w1ooZYipCnERRM8NACd9yF89KQsAPkGil2m11qYVgQSBWyNEAouYmb3DoQ
dSAYRwoxwdRApmTBQwzbExZoJfemZApBqjNgwqBKiakCxeGMQr0Zh3wSDYElmacEV2cEpeLGIJ1p
I+7QlEg7B5nbZrp+NMTdzh7gDjX1DW4xRUU5z/MdVd6m3pI2fp7XkQxLzw4tQyHkaUhQxwTrjh3D
VEHfjlSg0lYen7xLYNR+a9Uxge4OFcgNVdRSZXFuJIVrVQosy5Ap203izB6osqsF4VlBkCEQeVjR
1XCfseCRRfZUlWtdlAcwF8goK4UFx9LhSSFk6QLspUpcaCMtDFWQK3xR7HsqVfiUc1W1SlugktNA
EZ0J0uzExmSj4bAsSy9Kc0+qaNiockjKPW8XIsrEOcF5sUlE09wp8RKG3GZ5ZhlloDOsdInfAszc
vhvPiLqqK4kEqKyk2pNMWCg34cTKOkZLiht4K9kQdaD4ruW0BqQ5qBj3m0gWpan70rs8e9mLult0
Zuv/MfHn6+n9zDPfjDNXrwPbKOwq9wdL9h1a/cm7+AFa/V+l+o4KuxptBGqR/kujAV0sAvdmSKp8
rsh9pbGYFQhPOWqblb03Iqaq17DNyb5pu/WdQebKC9yNYnGcxpiBVzeJ11wH/uy6uQxOXPTv9wx7
vQ98T7rZw9XyfrPyl5vp7Pp+s/3S+0Cb9EJ+tU8HXEPh58WGhxGaX3qBYFrDYq5kRkN3GKfc9elz
Y3lQ4nOvXlwpWdIr5St1uLF/kQm69XOfDU9DWcLIyTKAOmDv7x7Qs9jeX/3mT9b1Yr68n/vL9Z/9
J4WkAk33IH5lIkdY+uPr7nqznK590GhW7d6g13MxRhXas/j9AeVldwvJrYq5mZDjo5/kghmprDlT
vGAGKYg0enR0TlnBIzL0qeXaVDzAx1wJOtL6RNLIcRjSfw7duK1MNVEfmdvuerOG2xtKxA5qlV3N
z8vwOpZlh+5+F8jaGt4dhpIGA4NhB+ARD0usROsXNDP9xe94qH7BKdqvLiBlyv9q/JbHxdG1oamb
YbcJrnM15ssu9gdQsVP3opYCnCZb60N0rXK1ZwG6001l1h636uq0tjHuumqsgF+p2Lqxo6T/oQw+
YBryPQyHr8bjX1BLAwQUAAIACAC4aEY+Q5V7xtwQAAAEQgAAGwAcAGdhbm9tYWx5L3NyYy9zeW1f
aWFwX3V0aWwuaFVUCQAD++JOTUvjTk11eAsAAQToAwAABOgDAADdW3t32zay/3v9KRCn8VKJQsXu
pidHTtz6Iac6cWwnlrf76B4digQlxhTBkJAV9W6++53Bi+BLVpy0veeqD1vA4IfBzGAwM4B7j7/h
Z0v8S45Zusqi6YwT57hD9p7tPiPn7CbyoCNLWebxiCXES4Iey0jEc5IvJnkURF62cp5GNO+4CHIY
x0SA5CSjOc1uaeBK8IR7Pu83QDof+dMoCdlPCXa5Ppt3FEejWZSTMIopgZ+pl3HCQsJnlNBP3jyN
aa6/v+NkxFh8E3FXDf3u3Wh8NHg9PB+fDY8H51eD/tnry7PvJCvzOc38yIvJde5NKbadRT5NcgqI
MxYHUTIlt14cBQhskceSKidzb0UWOYW5DYMJwni+z7LAS3xKlhGfad4sCDUROZxmlM5pwkmasdso
oIEZgUBXLORLL6OEZV3ixZxmCQjrlsarLkzVOA/QzHPio5yjBOAUR2SZRZxTGGNmnFC+pNCyYgvU
p1SJFtzr82tyRnNQHXlNE5oBz5eLCazcsG6EdljmqxAGimdCUUIBWSQBQBUMKo0V04hJm2e6pVmO
FrLn7hIPLAB78xmATlYC5BRWZESFOKcMpjOGSrw0pV6G2gSZ4QDBnTIIFw0COvx4EQhxadmnnn/j
TXGU4FUtyiXkMqYecJXR24guJR6LY7aUE4Qsm8upOUMYWMEio5XFbrLSjH5cRJlQVY5Aywj2FIhz
TmH7zDhP+73ecrl0p8nCZdm0p62yB5b71HyJp2n8FODcGZ/HWrlDkEsQRMhlFyXqkTylwi7pJ5+m
sl3u0CloNRcm4tMMTcqM9GKEkpscpDKaURSK3PNosgHN/SyaGJkqQNgHQuIDPROi6HXvurvdqi6U
tmDMePCP48HlaHhx7vJPXHYLj4CKorbl/s4mu4Gtfu8++x1s9Q811Q1WaNuoNlBEarNRH86WmIa8
B1ZZtshQ2NjMu6Xk44LmyBUeHVMvE24YeUJPa6+vS1K5PF8eKogjbczjpHaYuPo4GJyf6MPgOzn7
t/v0th5GIZhNSN5d/fPteHh4Ob4eDc/GP289hEbwx7X2rV6PXK3mk8hLYKxULXm54KE7O7AaaD7O
mX9TboyShkagpMliXqOMQs+n5VaQyjyYgPSSNKPVCb/f8+cJtiGHFylNjq3efJX3cGrKy6MSyntR
qEa941bPuyvKOWgyPyg1cjT1syjnBzDA6hjRT/yYBdQHJNDWyHkz9NJzb04VTJdsgxB//RWbtjv7
xP4AvxyGk6ewm3FrsWxVYJyAl2PTS1ivhihaLCDAGF0nEf9+D2BYqvydQbmCiAa2g4aA/6mWMi8l
lAZm1KDRKm2AwlYJt3ZBR+AuaGYNlw0NQhldR0nbguSgCiNFo0YrOKlDnEM4wbIba7xqaZBJjZEt
sMKck3dn4I+SXWkWsIcvsqmXRL8JJzXyps72KAP/xak/A9CWMWrWtyxYxFQMescLThoHRV76OmOL
VFAD42vo0ODywyzzVoJYfL2DfMjp3BAj7VbOgcwnhZWTx7Djd384GxQtr8gzoLxlEH364OYyZf+5
3keO2VFkJ1e/dcj/bKGM9Xd3QuFUEEtz6oIBTrRSmgZYQrEobWJw/OyWOlWpNOHSJJCoqrOx47Na
L4aqdJP1dokSe+FHdoyStDCapWdEtv8HSKxC/QuuT0hrnezwAyc0cWCzwGEd0E/CJtSvL8063Tz6
jYL4yJMnokuvu3F++EVMNURKR9LvryX/uxcvjI6VKXeLyT2uUCown5vXD+qWC/9qI8moF2xmI2ut
43dWPOou9sBEX1UGvgf2v9oEEPlb6r3QKkShSWA2iXvbYAQdlzMpWeePVL72ncbfj0fI1IipFkd8
JXBMeloiUejU3SsIsmO4aPC+hXPu9338ccoyRHa2r0enT5FauHIc/e5opfYz4fO0+PLK6un3w4zN
33vLE2DMcfyZlz3uOMile8mzf4EIu4Jn94wmUz5zOuQx2VOiyChfZEmNyacHnEF0gcw59rxtchom
kMdgFDiEwPjM6WxJ6WgKtuDpgqsljY4W4YuXz3f3DshkEYY02zfNL3f3XhwQrhoOF5wdxyynL99f
iYAQo5cDkuey/xqS3X7/jEJcPwwHWcYyJ8/d6GLywT2GuJP63BgPtF8u8tmZo8VaxwZc+NmOjMGw
wMZ4VU/UJeMzZ3sRpNsdMxUSlidbCwde5SLlzpsrNoQIdwDhtZEl+BdojrF9GB7zLO4Y9i8zxpnP
4hNIhGHLbsA2KgY2p2YzBb3w0NkeXF4cQ7g0vMTyWRhNF6piNjq+hLa/q3zsUeCKf39NtjGHdiPV
4UZvvQ9YPyq3RUmt7WgRxUHBvn8zRXWP5KpL1nMgsscuScAWNT0QYK3vVbGc1yWxnQOtAalKrSsA
1bphvwLQg1dvQD7nLKHFPrWkhySKXkztQx7NZdSEbcsZZIhI86qAsRzkVzCKa9ZCUtwi707HjYTn
efBKGNx2h+zskKaemLH0h/XdfwNbrbhzbQyGM6JULRb+5InNkk0voH/dfpT/ui3I6w7TZgKduoxh
oQX9Uc23G9zhKeHedDNodVzUkRuhr8B1UbJdjaGWEfdnxGAKqk6JpH4A+lgfGAzDSzhFgKF+jcCe
N5VEsJaGsxE/Ewg6bvZbJ7lO1+Mv0ntDHy3y1XrwCVB8MXxAQ28R8/XIAVsmX4T8uVmtb/mCGPck
dQhNLeZ1lVIakLcU7MivjhJ9sqvNhE6pB2cmzfvbtYBMYmgCskPeDMNhfga7buL5N4bwR4NFYtUH
e7ZvWjcFxvLCIrUILeBA9N0L9pIB/YiJH1XYFBs5Ez/uAX7sJUcZ8wIf49Yaz76XTHTv/cDfgsVF
reBz3Xs/cDiq346uG6UN4BBUzvniHsg/e/nPXhZg0fYwCLIK8kx1edB1b7ZL+DW2N55Ct8sdW+qS
kTEiUB2fVRk7lJ3uhQgGHUXbMgUS9wm4/2bnrwff7fitI1QzADsySm7OmO/FTqcptTHyIU9joIRN
CqR1N/WZ0BhcaOMMV5CGbzZDDpR3zLB2/DRmk8axW41agPTzrZffbKYFIJ4D8TfRg5r/KAtQSpvN
X/gKRfctOTmh4Ws45jfjBCmX/W85vaw4Z7ubzX9yfkV2f4/59zaff+8bbcgizvp5KWzh1JtHMaTu
GKa+OTy9TvDKcN220f7MmEVTBCFKweRDvSOExOgDVk2i3ygLnStMAJGPDtknH8jLhvYn5AeCxZAP
TUwpL4MjHTFnp7I8nXa3DbZX9ujZ3j+scEQi/PvDf1oipFYHUcX98ce2IOvzugU1ieJ5587ZnrZN
htzeObo9IKzz+rmlOCTzPCzFNKVoeh+AEcg08242GiXdQrpl+V9ZD2BF7SnX3+z6iy6QNBZX3kOv
LqyQ5sLK/6t6iaoKmGWTTP+2X5QPXlapDgqyy5upY74YVFm7ozlHQ9632hJ5JNpNU3T33spuikI5
bkvdNB1hqTUneCFKVdGEhZKHHG/kVZFR3inLy6j7VIPE+qxK0HteqgThldeM1kWmHunkpat4rPd6
sNylZJNQD5JeHsHiZJVCWWNu9syWdpeiDBLJCvG62oZgoMpst6SZjr0pwatGT55Ih6K3Fixp8Iln
ns/F1TxqLEqKVwyJjEkUsUGG81xqVp9nWtNmY1qklSBIGUAT5WtpCJpS2UUT5TC0Z5fWAnS9x1vG
I2mWikLsy1dkz3anqLYoWVBzZsIoxZ17GiWBg/tn7/lz1/oP6zkPtEi5ePNRcZP//S+pgTxzxT/3
GxzCp1/+XwNQ88Ie97bKzlPYDBFW+/Dfj6L/yHzciNhEIFJ27SGIUfiaOpMV2L5dG9hqk9gAS5lI
O5Y2mg2wpBG1Qymz2gCpOJLuexDZ1yAnND/e05ddjrwZFY07xDsRj7FSzjIs+z+MQvFGZTQ+vxhf
nw+PL04G9gQKRN5ZiAzpxVEE0WeBgpcWTqdrAxch1P7WQxNDNCFe40XGF6ElQRRa5+6EsRiXDJ74
RFaw1E2gU7oPJjvqxqor7uF2KDpyc/HHswV4ryjM6Ef4/3v6cV87a3FjrAggSxfNczqHw8LZEZRd
8qyrwy4bR2sYMICYDA8vSYLHkrg+0z1z74YS8dAq4vigNUrI9ej0hWbKT1eOmMQFyHEiuZfLAIsC
0b2oRe3gf2A6VcuDL5LJjrzjsqIhfMjzxnwT0igK5payYEVUmWU1oNKD4GfCagNDD6iNQX9uV9dV
4qXDQGkLdZOLhj9JT1fnoKjhiaWmQgHw38JF7sZRgOmI4PP/uty14MVFOQoe4xi1Q8wV+Q6544rc
NJsm8RbAulU198U6knHKhDsFmBtGWQ7BKwqnCU3JKWFwkNGAcEYWKVg5bRZHMbcAwUNNe9/tgZev
yC9nh+f1OxScAAKrnMYQSItYJcZDQTyATLcab8LlG5fDOC4vbb+ZOs2ouDhfQ9v8uKVQhXmgcEda
A2u5TiY0jm6pN4kpcV0X03b0OQELkr9yQj+BOsmEQmxIa2Jg4Ic4pxlZzjwu3/fOGKQOBB20QCmk
FANOFQBHiAefU9hAlszx0WvF71WH5mxOZ2xJ8PlhHkzQByZMPOfNV4lfy9Aa060LvJM2z/lMyiWv
rfee/3Cg5ai2qpVskdz8KkV8DG4kWaQic5JJTkGhXex7lX2hOHzza9v4gkKPLxCLPE6OLmhVFmbP
XSG44l7GTTRgdbxGz6qtyRnBcXpcfTHZMaZVpCUlaCvO0OfNv2jGRjSbY2hPNcNaC+BQtU9Rzxn0
MHGaGyzw6BWXB7v3QePpXUB25ZhO2T3ouCn0ohichO18yU/kUST/CuJRLnIQ4Sph0kcBEYHaeHw2
PB+Mx12L8+qJqqe13qcYWmL5mErYpiwA1OPf9PsQsR0mAeiDZ2zl7JSM4U7quukpH18w0lKBOJ5R
/+aUZYc+Pmsv7LXYHKLWJq6Lm3bFuv2wZies2wPG+lvsXlm8hT4q0DHZgO0sCGVdoXWL19utN7T6
kU7NbM0pTgSz7kBVCSzZ5Y4QV6etRgWWLN8dHJRPfPNwS8ock/JdyKIxlZTyFxl1Q0nQMAM7uiwK
J+oaUXTW1cz0x1YUp/P02Cir+qkrT9O3lPh0d0l/zRVKYrDcQw4WP3P0Iro2h/3+QHajxs6xGBJv
tEibmS91gvfFs2xL4tkNrbC9ngHWvraFstX7/uUvdUpr7voAfLrfNomIoOzRqnDwwtmGc9w8Z68X
DEAT7bD48YQDOvOSQr1iJGyCwUiEuOvHqxcF7USfQRIlUTQ66ZZDqVUg9XOqRW73ObuaLeJPOM+a
PuvPuGYNtHatPd3u8CtrXqp82c1Cqbov45xyhHPnib3RWX3fU1qH/XBaW+f02nfKTceXLvx+xQPx
kurrj7oLPbRsj6/YDn+a+d9t7o0JV4OGq+Z2pyGYhNyWV/EUV9Yj5AP2n0jP7+Eyephdh9G0Z/72
Bf+cTRmFps5rL+D7fbzEuPIZ/klP7S9pigJIytJFjO/tQPsyazPpnmWQxjb0i+SGx/eNOWzJeO20
uJxqyDT+1fo4tii7PLCHuVE+mKd8Vb68rZQ96sx1SUuWLjVYCvBbuGzex9XV/wn86guNx5joy/OY
wKlupYw5WVFuEWHOjhm4mlb3MMyzZVFBZNqiMIN/rS37ey3Sqabnkrn7LVEvz9pG6Iyqu8hRhW3x
15fj8S/D86vxWGYG7w8vTxzwBLvdpr3X0aGGodvrNj2Xr9N9363e/JYf7OOUDbVwcNEAZMkUqx/q
L2kDkTbQOW5JllmVb/kbDqz+Ben/AlBLAwQKAAAAAAARaUY+AAAAAAAAAAAAAAAAFAAcAGdhbm9t
YWx5L3NyYy9pbWFnZXMvVVQJAAOi405NqONOTXV4CwABBOgDAAAE6AMAAFBLAwQKAAIAAAAxZ0Y+
9UMJAz0BAAA9AQAAIwAcAGdhbm9tYWx5L3NyYy9pbWFnZXMvbGlzdC1yZW1vdmUucG5nVVQJAAMN
4U5NOeROTXV4CwABBOgDAAAE6AMAAIlQTkcNChoKAAAADUlIRFIAAAAgAAAAIAgGAAAAc3p69AAA
AARzQklUCAgICHwIZIgAAAD0SURBVFiF7ZIhTkNBEIa/fY+QEoJr0DgEFtULcAIUmgtwAxQaRYKo
quIShDMgSKpJEAiSosjrzI+YUtKkbysagpnP7ObP7s43k4UkSZIk+WfKXz5+cv6w2wy7fYDnu4uP
dWd2+i6fXk60rUApnTVOZ64BPc32CgDcXp2tzQVIwgUSuIRLyGMvgcXaSmqv7x97a1QFzMX07ZOm
hLx7FDUPAVNk5sIMTDA3Lc/NTRwdDmol6gLvsy9eXmfLtqPzghb7lYyYxm8W68Fe/ZtVBQBGx0O0
mIb7atcuYSbcY+Q/mZtwYgKbPlJV4Gb8tMkvSZIkSbbmGzJvl50FZOujAAAAAElFTkSuQmCCUEsD
BAoAAgAAADFnRj5J1beM1wUAANcFAAAhABwAZ2Fub21hbHkvc3JjL2ltYWdlcy9lZGl0LWZpbmQu
cG5nVVQJAAMN4U5NOeROTXV4CwABBOgDAAAE6AMAAIlQTkcNChoKAAAADUlIRFIAAAAgAAAAIAgG
AAAAc3p69AAABZ5JREFUeF7ll21MU2cfxq9zTt+AFspLC4gyiFJK1aHSgAqiDo0TddlgbEOXucQt
i2ZflplJYjLZsmzJMvfEJ4+bM5qRbS5zMlA+GNwLbOpQQJ1SHI4XYQx9LJVHoFjs2+n+OeFOTlrq
ar8+V3Ll7n1ef+f63/d9TvF/Lw5BOnjwYIVSqazjOE7H8zzIEEVRss/ng9/vn639x210PafH43m5
rq6uATIpECRBEI7u2LFDRwAgSScrFNJhCAQCYJL1I92n27Vr11EADwcgWj3RYnBwENRKTxAXFwei
B4MKbknB/RAYo9EIr9erB1M4AEZOEMysHzVAKFh4AKnWpFlv3t/fLyVC/YhuQuWEyWQCKSqAkCRy
cnKCwcIBhCtFRAAhZWDu6+uTEmBgkSSQm5v7aADyG8hNkuIMMw4iSSB6AFLUCZjN5ugBrly5giVL
lrC+FCcDimIcRA7AVFhYyOa/5N7eXgaIqSkn7I47cDonpcWK5wVo47RITExCSrKB+ry0gOXl5T06
AJFKCchnBEvA5bqPtou/Qq1W48kNG2EwGKFSquDz+zA+cQ/d123ottlQWrIa8+ZlBg/wyADCqcvW
he7ua9i85SlkzstC07keNBy5ioHbk0hLisUGawa2ri/C44vy8c3xrzE3IxOlq1Y/NAE+kkHIPHJr
GOXlmxCfYEDlvtP4444Xrz9XiM/3lmPPS8VwB1Soqm3GkN2FrdXbMDg0gPuUGJ3LEoh+Fty+fQsx
MRqKNQtV75zG1nUWlCzOoPgFil+ESgDKlmXAoFeh5kg7juxeg5KSVbh8uRNrVj8hlTVSgFmj6hvo
RcEyK06e7UF+zhwULZwLQSFAEHiC5CEGOIgQkJKYgLLlJvyr3ob3XynC2XO/oKS4NOJBKI1oJnkS
o3Y7YuNi0XShD8+U5UlP7fVxABhsADwXwAOvD3MNOnxPx92fdiNRr4fjrgNarTa6EjC5PW54yCN3
nfBT65xywaPkoeAlCCneP+/cw9jYFLwihxglh+H/jkGtiYHX44luFnR0dMBqtYIEpVJFT+yFUR+L
SQ8gUF9BACoyDw5Oelp9YiI02gS43CLcvmEERC8mJyagUqnAFFEJWK1WrFgBzwx9Wmoapl0PsHax
Hu1dwxB809BqBCjgBxfwQqD4fSLg9nMYGfMiWatEcoIaDocDqXQuU6TTMGQhMpstsHXbUL1+EcbG
H2DCLUCXkARjWjqysrKRazJhwYIcJBnT0dbzP7xRYcLQ0BAmKIHRUfujAoRqTvocuKjudx12HH6z
FC0dA2hs7cbV32/iRv9NtF+9gW9/+A37v7qI3c9aYM5OlZbmQmsRDh0+hLYLbZEBsBLMpvKNm9H6
cwsm7o2i8b0t2Lw8E5f6nTjQNIhTnWPITk9G/bubYHlMj4GBPjrOiWkaGwVLrWhqaoRSpUBtbS0f
VQIkKdKc+blobW3BqaYGWOfraMFZi/ZPX8CJfRvx9MoMdHacw0f7P0TXNZv8YxTWgiLk5+fjeo/t
ZFVVlTYqAIvFgoICK6qf34al+cvQZbPhiy/rcODfH+Ozw5/gzJlm6Glc1Ly1F3aqe2//DWmxMhgM
UrKmnFwUF5dsAS+2VbxYkR7Ryyj8Z3Yq0mgAsrWCvUGZXnt1JwiOan8eywtXIiUlBePj4zCbzDCm
GhY3NjT+B0AlFwQQX1lZ+dexY8fiaQaw/wXSe52NC/k/JPottWydJ4fA/NTyI70PLmFd2XrEJ8TD
SONErYpBzZ6ayRPHv0uQJ6AjG0ZGRj7Yvn3723SBmHAfrOSwv+UAzIKCR31DPaj2yNJkorOzE2Ig
cB6AIE9ATTaSk8n6mb4QxCDIzM9YkLWczAGyOOPp7PnZWYsWLqxWa1RmUfSfdfncO5tPNg/JAeQg
mpmWw+ziGEAIkEwyAA/ZTXaRpyWoGf0Np0by8xxf+BUAAAAASUVORK5CYIJQSwMECgACAAAAMWdG
PjVljX9vBAAAbwQAACMAHABnYW5vbWFseS9zcmMvaW1hZ2VzL2dvLXByZXZpb3VzLnBuZ1VUCQAD
DeFOTTnkTk11eAsAAQToAwAABOgDAACJUE5HDQoaCgAAAA1JSERSAAAAIAAAACAIBgAAAHN6evQA
AAQ2SURBVHhe7ZZbTFxFGMf/M3MGliIlkkqUYoPVisb4YG9QFqjiJdBiq23EaFIhNq3VBxvK5VFJ
tOqDpYkPGjUmNDExSi8QTTWxjdVqUUyqwQQBExFDiUIRCoW9zcU5s/NwQrQLaPvEl/2dbzN7cr7f
ft/OOYulWOK/UtzIakoaPI1FBsXig4SbvIO33XTXEe6l45oKPNSIzNJm7+PiOx848Mz2F0Ie41hs
eFhgFDUjfxb81I7yPavX37GZM8oA4Np0oKTR25TpLe957tGX1qwrLOP9o91QWgDA1e9AuIHV3pCd
9+azj7QsY5xhwBSPyxg0AALIqyfQAhqe9Q4VrrxnX11VU2gqPoah8V8glYDWCuYADbD57IRzhwRZ
kEC4GVmY8TpK764qeThcF7ow2Y+JyB9QWkIpCakFKKFoefodKK2gIf3skNAuSyXxatvz0QV1oLQ+
tFoTeXrn5t0r1xfexwdGv8NsfAoaGu7Clq7fTvjdsAg/WxIQBpdRcftTCxtBaaN3bxrnnbuqmrLy
VqwiPSNfICFjsGEVFED8o7RoKkz2R2KzFXPYc7XW8xcIN/B9Odm5rbsq6zMoB3pGziRnTYj/AqEA
iAEKikj/mJQgAppKIDCeZPuFPVcDLKVAuJl/WJBbuK12S2PowlQfhsf7QOAXJqA0mQmsCzSUJSKn
zWguISpmIWQMSmoQzUA1B0Oa+20oQIOnFFBKlRAPmIlPYCp6EULGASSLM1vcR5vPJzEdH8N04iLi
KpLcCdokBSiloYS2ItJkDyHERGR+I8gfkgWD6Hv97Y6De7eWP7aMUY6f/+xCehoH9QCJGASJAVSC
MgJCCTyDBrESSgFEGmDDSiUSkaAAM8h/FWhvhwRE/aYDEz8c/fzIW5Xh7RkbC6pI93AnZCIKxgkY
o6AWWAHiqmlFQJQOFjdoux4I7rK80i6gXa3yo7V18cFPvjzaEV5Xsfz+NbVe98hxzKhx+82p54sQ
EF/CGfith3QyPioppSmsZKCeTingc75N9KwqQ9k36nT7XxOjt5YXPZn+0/inGIv9CmYEKEuypaDB
VtQ+yo7BZYNAMksNFzSASnkn/P0sxi4NiGpR09M6OTVRWf3gztBw9EcMzXyflDD4Y3jtjRbMM0iK
BQtzs0oL5rW7vb0r8rIbdlTXhGRoEr3Tp0CYROXNDXjl8Iv+fT4MQDgSAeL/8D56pcexnIPwOf+e
eHe4d3LPB8fbLs+MaV2UW4MMfh0IhQvMugvH5hQVAaRbS/ksEIHuaIfqPSbP3FKe2Nopj70f3lh2
44YNT3DooAB0UHwOCScn5/OHRLt2xQI56jP4legfOJGo+Prbs+dOfnYyKuIqIGCJWFw3HFG3JrHI
YIaQIdOQZcg25BTt9w5vezk/4v4L5BiuN2S7czLcvif4n4M4Ic/Ai/ezx50Ad2t0IUWXWIq/AbvV
OXh4Jn/LAAAAAElFTkSuQmCCUEsDBAoAAgAAADFnRj49qKp/fgQAAH4EAAAfABwAZ2Fub21hbHkv
c3JjL2ltYWdlcy9nby1uZXh0LnBuZ1VUCQADDeFOTTnkTk11eAsAAQToAwAABOgDAACJUE5HDQoa
CgAAAA1JSERSAAAAIAAAACAIBgAAAHN6evQAAARFSURBVHhe7ZZ9aJVVHMe/55zn2e51L20Ttxpr
mb1AofZittxGUhqpSaxMSIpeESSjpW7JEMQ/MogVgSTzHwVh6GS0GIK93E2ZtcFGV8HyjU03mzNl
m7bd7d77PPc553Tu4cCTg71prH/2PXzu7+E5PPf3PV9+fxzMapY7pXibJZdVsNdwl6K4Cy3Ie+xQ
aYW1CwD5Xwx8ur46ULJ4zfaSSqtxyS7MmXEDlBKUlX4QWLd846pg1D5V9BkKZtSAyx2cv9GGRQ8X
2R+u3fFIGss4U1xhLZsxA0J4iHsjOH+9FVn3ZNKP3/g8e25mXnPxVvYepihrvAkHQQwTSQJcevC4
q5Po6g9jXkYhNpXtDNaF9taQyrNP5/fwLfX14NMzYNj5fk2QMRtULUIIkgumaulCkOAuPOFCCI6+
vy9iODaIN1/+KNDc0bCxHccXLdnulYW/xNC0DYBInOw6DEoYDNqIb8aPQggBIaWCY2C0F5H4IJ5f
sjowNzuv9Ie2ut+LKumK9mqnc1ozwCXXp0sIfUJVHXNaBVxwhTCVkyQOOPQ+Is4gOq4cRWHBg9Zb
qzYXpNmp4ZJt1kvTSkBKoZtRySAIBaEUjFFIEOhFqD69yUDPw2hiCDF3FG4iDimA/pFeLMxfTt5d
W55R37S/saSyf0drdeKbKRkQgmsDBBSUUliE6cBAFUQVQqCburcwHB9ANBGB4Fwh4QPcuNiDR3Of
xdurNwcbW2p3o6JzZetX3iuTGdCRR91hMGrBtm14QkJ6HJJ78KQDR4zA5VFIojMAtWBmBNA/EJBS
QgroJF3hQEiPAHhoSglE3QiuD18GoQCzKZhFNDQJU1CA2gREtyeQQkKY5iASkESzMP9F5AYX4MiP
+2JDkZt71OmrJjNA4Qu6GTM1acJUSgkIhZkXhYBJQGpLFgnimfmvIjEi5Hehg7HoaGxT+x5+WG9O
YID8+x2h0I00zHBbCjp/E7U5uVKanYOl976Oy92XvJaO0PDQVbnujzoeBsAUXCHHM0A1RuufqjKN
/BSINgRdCQFCfd8i4Tl66JKaFyzE4pw1aP3tpHvmXPjSlV+9DX0duGaSZabyiWaAKFBz5AtMporN
VWA2gTDD90DGE5gfLMLRnxriPb09x88d4lsjAxjx0/XreAakQrR97WUCSFHYBvPsoy4iLSBIZYxA
SIbHs15A0LkPtQ0Hnf4/b+4NH+D7ACQUcgx8IgPCwBWegvgYg/6+nvhA6hw8mbMSt67FZO2x/dG/
LsS3XPien9Df+3D/eeIhhN/4Nskxxph2T1KwNHsDTp8+5Z34pWng6inxTncz7xrTPOFXzaT3Aalw
feAo4oaYIQoCyRNA6Odmp6kldLrzmLuiu9k7a/bjBsf8R0zXO5SlCCjSFJmKLEVO8s5Qtvt+97ly
diA9HbnJd2YvU5FuvmH4D0UU1BhK0dfyT+xy0yjVDCqb7i1rlln9A5jD+pBV6CceAAAAAElFTkSu
QmCCUEsDBAoAAgAAADFnRj4KysTqzw4AAM8OAAAcABwAZ2Fub21hbHkvc3JjL2ltYWdlcy9TdG9w
LnBuZ1VUCQADDeFOTTnkTk11eAsAAQToAwAABOgDAACJUE5HDQoaCgAAAA1JSERSAAAAIAAAACAI
BgAAAQR9SmIAAAAJcEhZcwAACxcAAAsXAf9nGwoAAApPaUNDUFBob3Rvc2hvcCBJQ0MgcHJvZmls
ZQAAeNqdU2dUU+kWPffe9EJLiICUS29SFQggUkKLgBSRJiohCRBKiCGh2RVRwRFFRQQbyKCIA46O
gIwVUSwMigrYB+Qhoo6Do4iKyvvhe6Nr1rz35s3+tdc+56zznbPPB8AIDJZIM1E1gAypQh4R4IPH
xMbh5C5AgQokcAAQCLNkIXP9IwEA+H48PCsiwAe+AAF40wsIAMBNm8AwHIf/D+pCmVwBgIQBwHSR
OEsIgBQAQHqOQqYAQEYBgJ2YJlMAoAQAYMtjYuMAUC0AYCd/5tMAgJ34mXsBAFuUIRUBoJEAIBNl
iEQAaDsArM9WikUAWDAAFGZLxDkA2C0AMElXZkgAsLcAwM4QC7IACAwAMFGIhSkABHsAYMgjI3gA
hJkAFEbyVzzxK64Q5yoAAHiZsjy5JDlFgVsILXEHV1cuHijOSRcrFDZhAmGaQC7CeZkZMoE0D+Dz
zAAAoJEVEeCD8/14zg6uzs42jrYOXy3qvwb/ImJi4/7lz6twQAAA4XR+0f4sL7MagDsGgG3+oiXu
BGheC6B194tmsg9AtQCg6dpX83D4fjw8RaGQudnZ5eTk2ErEQlthyld9/mfCX8BX/Wz5fjz89/Xg
vuIkgTJdgUcE+ODCzPRMpRzPkgmEYtzmj0f8twv//B3TIsRJYrlYKhTjURJxjkSajPMypSKJQpIp
xSXS/2Ti3yz7Az7fNQCwaj4Be5EtqF1jA/ZLJxBYdMDi9wAA8rtvwdQoCAOAaIPhz3f/7z/9R6Al
AIBmSZJxAABeRCQuVMqzP8cIAABEoIEqsEEb9MEYLMAGHMEF3MEL/GA2hEIkxMJCEEIKZIAccmAp
rIJCKIbNsB0qYC/UQB00wFFohpNwDi7CVbgOPXAP+mEInsEovIEJBEHICBNhIdqIAWKKWCOOCBeZ
hfghwUgEEoskIMmIFFEiS5E1SDFSilQgVUgd8j1yAjmHXEa6kTvIADKC/Ia8RzGUgbJRPdQMtUO5
qDcahEaiC9BkdDGajxagm9BytBo9jDah59CraA/ajz5DxzDA6BgHM8RsMC7Gw0KxOCwJk2PLsSKs
DKvGGrBWrAO7ifVjz7F3BBKBRcAJNgR3QiBhHkFIWExYTthIqCAcJDQR2gk3CQOEUcInIpOoS7Qm
uhH5xBhiMjGHWEgsI9YSjxMvEHuIQ8Q3JBKJQzInuZACSbGkVNIS0kbSblIj6SypmzRIGiOTydpk
a7IHOZQsICvIheSd5MPkM+Qb5CHyWwqdYkBxpPhT4ihSympKGeUQ5TTlBmWYMkFVo5pS3aihVBE1
j1pCraG2Uq9Rh6gTNHWaOc2DFklLpa2ildMaaBdo92mv6HS6Ed2VHk6X0FfSy+lH6JfoA/R3DA2G
FYPHiGcoGZsYBxhnGXcYr5hMphnTixnHVDA3MeuY55kPmW9VWCq2KnwVkcoKlUqVJpUbKi9Uqaqm
qt6qC1XzVctUj6leU32uRlUzU+OpCdSWq1WqnVDrUxtTZ6k7qIeqZ6hvVD+kfln9iQZZw0zDT0Ok
UaCxX+O8xiALYxmzeCwhaw2rhnWBNcQmsc3ZfHYqu5j9HbuLPaqpoTlDM0ozV7NS85RmPwfjmHH4
nHROCecop5fzforeFO8p4ikbpjRMuTFlXGuqlpeWWKtIq1GrR+u9Nq7tp52mvUW7WfuBDkHHSidc
J0dnj84FnedT2VPdpwqnFk09OvWuLqprpRuhu0R3v26n7pievl6Ankxvp955vef6HH0v/VT9bfqn
9UcMWAazDCQG2wzOGDzFNXFvPB0vx9vxUUNdw0BDpWGVYZfhhJG50Tyj1UaNRg+MacZc4yTjbcZt
xqMmBiYhJktN6k3umlJNuaYppjtMO0zHzczNos3WmTWbPTHXMueb55vXm9+3YFp4Wiy2qLa4ZUmy
5FqmWe62vG6FWjlZpVhVWl2zRq2drSXWu627pxGnuU6TTque1mfDsPG2ybaptxmw5dgG2662bbZ9
YWdiF2e3xa7D7pO9k326fY39PQcNh9kOqx1aHX5ztHIUOlY63prOnO4/fcX0lukvZ1jPEM/YM+O2
E8spxGmdU5vTR2cXZ7lzg/OIi4lLgssulz4umxvG3ci95Ep09XFd4XrS9Z2bs5vC7ajbr+427mnu
h9yfzDSfKZ5ZM3PQw8hD4FHl0T8Ln5Uwa9+sfk9DT4FntecjL2MvkVet17C3pXeq92HvFz72PnKf
4z7jPDfeMt5ZX8w3wLfIt8tPw2+eX4XfQ38j/2T/ev/RAKeAJQFnA4mBQYFbAvv4enwhv44/Ottl
9rLZ7UGMoLlBFUGPgq2C5cGtIWjI7JCtIffnmM6RzmkOhVB+6NbQB2HmYYvDfgwnhYeFV4Y/jnCI
WBrRMZc1d9HcQ3PfRPpElkTem2cxTzmvLUo1Kj6qLmo82je6NLo/xi5mWczVWJ1YSWxLHDkuKq42
bmy+3/zt84fineIL43sXmC/IXXB5oc7C9IWnFqkuEiw6lkBMiE44lPBBECqoFowl8hN3JY4KecId
wmciL9E20YjYQ1wqHk7ySCpNepLskbw1eSTFM6Us5bmEJ6mQvEwNTN2bOp4WmnYgbTI9Or0xg5KR
kHFCqiFNk7Zn6mfmZnbLrGWFsv7Fbou3Lx6VB8lrs5CsBVktCrZCpuhUWijXKgeyZ2VXZr/Nico5
lqueK83tzLPK25A3nO+f/+0SwhLhkralhktXLR1Y5r2sajmyPHF52wrjFQUrhlYGrDy4irYqbdVP
q+1Xl65+vSZ6TWuBXsHKgsG1AWvrC1UK5YV969zX7V1PWC9Z37Vh+oadGz4ViYquFNsXlxV/2Cjc
eOUbh2/Kv5nclLSpq8S5ZM9m0mbp5t4tnlsOlqqX5pcObg3Z2rQN31a07fX2Rdsvl80o27uDtkO5
o788uLxlp8nOzTs/VKRU9FT6VDbu0t21Ydf4btHuG3u89jTs1dtbvPf9Psm+21UBVU3VZtVl+0n7
s/c/romq6fiW+21drU5tce3HA9ID/QcjDrbXudTVHdI9VFKP1ivrRw7HH77+ne93LQ02DVWNnMbi
I3BEeeTp9wnf9x4NOtp2jHus4QfTH3YdZx0vakKa8ppGm1Oa+1tiW7pPzD7R1ureevxH2x8PnDQ8
WXlK81TJadrpgtOTZ/LPjJ2VnX1+LvncYNuitnvnY87fag9v77oQdOHSRf+L5zu8O85c8rh08rLb
5RNXuFearzpfbep06jz+k9NPx7ucu5quuVxrue56vbV7ZvfpG543zt30vXnxFv/W1Z45Pd2983pv
98X39d8W3X5yJ/3Oy7vZdyfurbxPvF/0QO1B2UPdh9U/W/7c2O/cf2rAd6Dz0dxH9waFg8/+kfWP
D0MFj5mPy4YNhuueOD45OeI/cv3p/KdDz2TPJp4X/qL+y64XFi9++NXr187RmNGhl/KXk79tfKX9
6sDrGa/bxsLGHr7JeDMxXvRW++3Bd9x3He+j3w9P5Hwgfyj/aPmx9VPQp/uTGZOT/wQDmPP8YzMt
2wAAAARnQU1BAACxjnz7UZMAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdv
kl/FRgAAA+pJREFUeNpkyrENACAQAzGnZR6mZdnQfIHElSenLfuYVmYUQfOIIp+4AAAA//9i/G88
kwEZMP43nvmNgYGBE8q3h6n4D1PA+N945n8GBgZ7BgaG7QwMDFwAAAAA//9czrEJwCAUANFXBCxs
M4hFyqzvNC4QQTBNDB+vPo5b0YbzCy8mrrjxIAXhRt0/oQfx/84oqKEwcLwAAAD//2zPyw2DQAxF
0TMl8BFtIMSOVtIAJYVass4OQSUJJcBmIjkjvLIs6753fy0rHG4majT45vueian07PBCH72j1h89
RsCKMe8tPvFhw1AQahzpHJc3pogNcY9YMhWEGc8LAAD//3TSsQlCQRCE4c9EEAzNBDNDE2NB+7CB
F9uN5ViAIIiJoS0IopnB4+QY7012x+7sv8OO4ibemJf5A7phj0vP2BvcsYzCWRiV7GodkuCJaRRd
sYq/HU41QWJ+MG7gb+IemgYt1L/4WwZnrAcm5i3/MioGE7xaO4bqjDocc4XtQGOtBR7l8QUAAP//
hNQ9L0RBFMbxn0Ipeo0EkSAhvohEvG5kUd2CxJexWm9RsFvofIrbSEQj6HQKiU6zxc6Ve2dndk83
M+f5z5kz55y4ryfxNwYwjZ9B9RaNYt7BPrZGiFfwhNkYsI1ecOphNyFeq6oPb1isAN1we9262Kut
V/Ec+dwri1YVwTGuhhxohbBforN3LMQ5OMJ15PiIzaQ4kcQcpG6fmPtfJQDQxm1C/IH5xk4GsITX
BOAuwEcClsPAyFmV2CQg9VVfmIn2HkLBNQApcfXmgxD+cCQBcIGT7FcN7BA3kc+5sjirIujgNCNO
QX4xFeegg43Qrjlr4zJ07VASJ8K4+h7Tzuth7FEW+sSWO0sDQRSFP6zER21pL66s8Y/Y2IkhRRaU
gIX+ilQiogYJIuILa3vBV7PY2Mm6NmLjsxAbG5szMuhMdrIpPO3OMId7z2N9oWoG+2BVYlmMKg5v
/3zxEJgBWiptEw8LwHOXD0fArlXVmRLi2kUgkojXFNYuHCuHiyYSa0+Tnu+5pHlHmjwZAhUxbjna
A4cRGo6JRMqAuOB+DtSAjDR5dK2gBqw6Gtpl6wYwAuxbo/YhA+rAaZEG7GjcsP47yyJX4J+FitDl
vfaP98Jxr7sX3hOBBAwWgZWAc58q1ZPCk4EExmSnSpcT2BPpl7IExvVw3KMGjpQjr6EEJuTjqYAd
V5Xd7QD7HorIm4vAsCJzJ2DUPlXPAltAf8H9A63mnTT5MgTq8vE80BfsYzeqSlRfjnwAy8ANaXL5
ewUDQNPq1s4+7ow5YB0YtNyxBGyGiHBI0zgHrnoU4bSKbdsvwn/E9wCFyX5jcmSznQAAAABJRU5E
rkJgglBLAwQKAAIAAAAxZ0Y+h5W/hFkCAABZAgAAIAAcAGdhbm9tYWx5L3NyYy9pbWFnZXMvbGlz
dC1hZGQucG5nVVQJAAMN4U5NOeROTXV4CwABBOgDAAAE6AMAAIlQTkcNChoKAAAADUlIRFIAAAAg
AAAAIAgGAAAAc3p69AAAAARzQklUCAgICHwIZIgAAAIQSURBVFiF7ZaxaxRBFMZ/u5u7vUgkBEQr
QbAQFKtYpRTEP8FCW0O0Ef0PxMJGECtBQZvYXGFhaSN2IoKCgsFCLExEImjubHK5eZ/FzO2FTXbP
3YtaeB8MO7yd9973vpk3uzDBBBP8Y0RVHeYX27ORej92e/fq/oXK8aaqOgCkjWTz1pUz6Xbb1dtP
64QiruUVsLLaYWW1M06I8QjsBfaEgKm+b60zkEEgwGR/h8CJy+2Zhrk5mabk83sSIf/JS4/minzf
3j3/vRKBUxeXdwgb97d6DiLiKJGF8omyLdhnrO0Wy5laFLR8qQJ3rp3Nm5rg99yQTw6YiRtLpzHR
kjwbJyGBJK7fe1aYo5SAM/HhS5c48uTNhAmc+cBO3vbm0wbOgRP0nbJ1fSeOHGyVpSgnsN7Z5P3n
0OdBcSnyleVtgLTd5p/7p8svx5GHcOHYARTUMBtW7Uy8/riBFHH88AwmbzMJc8LwCozq0FICNx88
L3y3dG4hq9wkHj5+MaqWagSKPizzi+3ZJNr6aqZ0ILMLbVDnY1T7JnSmbK+dq38VViUQ9X5+izMC
AwWUEfgjCsT4rWoCaXftXZoRICgwvIlbQAo0gOR3CI3qgiQQSAbzXne9SUh89NA0ToaGCqSAC8Ny
81oEtGMeJzJTuvzkZZlfVDAvXVi2Js6NgS1PVgwrtzBKT2jlQzPCb4w/gwn+V/wC80wP5qjwdpsA
AAAASUVORK5CYIJQSwMEFAACAAgAuGhGPoOubYu/AwAA0AkAABsAHABnYW5vbWFseS9zcmMvQ29u
dHJvbFN0cmlwLmhVVAkAA/viTk1L405NdXgLAAEE6AMAAAToAwAAvVZNb+M2EL3rVwyQHOzAkZLt
zdkWzbrebArXsddetDeDlkYSEUpUSEqKW/S/71CUFMXrAjnsVjD8MeS8mXnzyHFw8R0fr3nBTBYH
xZPUwGg2hndX11ewlI+c0YIqpGKGyxxYHgVSATcadLnXPOJMHUaXHPXYtyC3QkADokGhRlVh5Dvw
3LDQTE9Ajp7MJc9j+Wtul/xQZuM2o23KNcRcINBnwZQBGYNJESLMpO5+rA1spRSP3Pit3/l6u/sw
v7tf7hb3s/lyM58u7laLc5dHlqEKORPwRbMErW3BQ8w1ooZUiojnCVRM8MgCD7YLt0tDxg5QaqTY
fXa5hWFhKFXE8hCh5ibtchtAtIHgNlGIGeYGCiUrHmHUe1igjYxNzRSCVBNgwqDKiakKxWFCoU7G
oT2ZhtCSzHOCazOCWnFjkHz6iHs0NZLlIEvbTNePjri75RdYoKa+wR3mqCjnVbmnyvvUe9JuX+f1
QoalZ4+WoQjKPCKolwTbjr2EaYKejlSh0lYe7/xrYNR+u6pTAt0fGpCPVFFPlcX5KClcr1JgRYFM
2W4SZ9ahya4VhG8FQQuhKKOGro77goWPLLFeTa5tUT7ASiCjrBRWHGuHJ4WQtQsQS5W50EZaGKqg
VHhU7FsqVfhUctW0SlugmtOBIjozpLOTGlNMg6Cuaz/JS1+qJOhUGZByL/sfIinEJcH5qclE19x7
4iWKuM1yYhlloAtsdInPIRbO7o5nQl3VjURCVFZSvScTFsqdcGJlm6IlxR14K9kIdaj4vue0BaRz
0DA+7yJZlK7ua/96ctyLtlvks5v/NZuvtvcPS988G7fcXAe2UThU7g+W7Bu0+pN/9QO0+r9K9Q0V
DjXaCdQi/ZdGQxosAmMTkCpfKzJuNJayCuGpRG2zsnMjYaq5hm1O9qYd1jeBwpUXuolicZzGmIFv
JonfjYP58rduGJy76N/vCTzvjMekmxhmD8vt54fFZvv5frX75J2Rje7jYzNtd+2E9+s/eZSg+cXz
QsG0buakkmJjFC9g6pQUQrvL+8cDeta7hw+/z2dbz3PL08Y69By1DnBBU9Pe+j/D1fjGc94b/jeC
prdPPDejsSVSm5vBWsZznpXZ5pstnuYJ3QDaBawkzUgSQTmjHB4xGo1vXux7EucpO6mPzkB0akkb
WQzsHs1Gg6HBaBCuoLvIzCsqabRe9d/hAu3HECyTJJwV/QXR7e4/rOFoN4XgFTPoAqxX/DljRVOS
+3rzym5LOmVvSzq1ZEvq7P9SvDPMIx5DEBwr4itQSwMEFAACAAgAuGhGPu3ZB/e1AwAAkAkAABcA
HABnYW5vbWFseS9zcmMvSG9tZVZpZXcuaFVUCQAD++JOTUvjTk11eAsAAQToAwAABOgDAAC9VVFv
4zYMfvevINDikBap3d7e0mFYmrlthlzaoOnd3gLFph0hsuVKsn3BsP8+yrId99YNfbibUaCRRH4k
P36UgvPv+HnNH8xkcVA83RkYzc7g4+XVJSzlnjM6UIVUzHCZA8vjQCrgRoMut5rHnKnD6IKjPvMt
yFQIaEA0KNSoKox9B54bFpnJG5CjF3PB80T+mtsjP5LZWZvResc1JFwg0P+CKQMyAbNDiDGTulus
DKylFHtu/NbvdLXe3IR38+VmMZ+Fy6dwsrh7XJy6PLIMVcSZgGfNUrR7Cx5hrhE17KSIeZ5CxQSP
LfDAXDgrDRk7QKmRYvfZ5RaGRZFUMcsjhJqbXZfbAKINBNNUIWaYGyiUrHiMce9hgZ5kYmqmEKQa
AxMGVU5MVSgOYwr1ZhyyyTRElmSeE1ybEdSKG4Pk00fcoqmRdg6ytM10/eiIu1s+wwI19Q3uMEdF
OT+WW6q8T70nbfo6ryMZlp4tWoZiKPOYoI4Jth07hmmCvh2pQqWtPD76V8Co/fZU7wh0e2hAbqmi
niqLcyspXK9SYEWBTNluEmfWocmuFYRvBUEHkSjjhq6O+4JFe5ZarybXtigf4FEgo6wUVhxrhyeF
kLULkEiVudBGWhiqoFT4TbHvqVThS8lV0yptgWpOA0V0ZkizszOmmARBXdd+mpe+VGnQqTIg5V70
C5EW4oLg/J3JRNfcOfESx9xmObaMMtAFNrrErxEWbt+NZ0pd1Y1EIlRWUr0nExbKTTixst6hJcUN
vJVsjDpSfNtz2gLSHDSMh10ki9LVfeVfjb/tRdst8tmEf8zCx/X8Yembr8YdN9eBbRQOlfuDJfsO
rf7kX/4Arf6vUn1HhUONdgK1SP+m0YgeFoGJCUiVrxWZNBrbsQrhpURts7LvRspUcw3bnOxNO6xv
DIUrL3IvisVxGmMG/vGS+N1zEC5/6x6DUxf9+32B553whHSTwP3Dp/DzPPyyufdOaE138XCLzFwb
4efVFx6naH7xvEgwrWH1rMR1t5jGMT2e+oap63bnRsp9xtRef6aW9nb3MkO7ARMnuQhaWO9PD+hb
bR5ufg9na89zx5Nmt/MatcZwTk8r9fKMcDVPacS1M6wkPYKlEtOIRoYZjEfEuTZNrvCBDsijt2Mu
5zCnsTlaPplG1R/aUxuiUA0YaCHNMFAqjWwL/09vaTCiXAaeiYxKPc/DiooYrW7tqvkN51i1dbVB
ndORXjjPNmxAtj19RbU12HYb195fBHWCecwTCIJhZ/8GUEsDBBQAAgAIALhoRj4mEHctnwYAAMMV
AAAeABwAZ2Fub21hbHkvc3JjL0Jyb3dzZXJXaW5kb3cuY3BwVVQJAAP74k5NS+NOTXV4CwABBOgD
AAAE6AMAAL1YW1MaSRR+51d0uanUkIIBzRuJ7hIXXWstI6LJvlnNzAG6HKaxuwdCUvnve0733Bmi
biVLpYJOn/7O7TuXsffmJ35a9h87lautEvOFYd5pmx31D/vsSj4IjgdqJRU3QsaMx2FPKiaMZjqZ
ahEKrrZeV4Bu+wQyjCJmQTRToEGtIfQdeGx4YAYNkN6j6Yp4Jv+I6cgP5LKdWnS7EJrNRAQMv1dc
GSZnzCyAhbCUOvtlbNitlNGDMH5679X49v7D6Pzi6v7y4nR0NRkNLs+vL185O5ZLUIHgEbvTfA70
7FIEEGsAzRYyCkU8Z2seiZCAS+KRk9Jsybcs0YC6c+tiguFBIFXI4wDYRphFZlsJIlXEhnMFsITY
sJWSaxFCmN8goImcmQ1XwKTqMB4ZUDFGag3RtoOqGvWgzFKzgIIsYoRLLWIbJYwBvJNrnILZAD7Z
yoSS6fKRBe786o5dgsa8sXOIQaHN18kUPc9Nz4M2rNpVBIPCMwWKUMiSOESowsA0Y4Uaq7RZ0xqU
Jnoc+YeMY/rpVC8QdLq1IGfoUR4qwjmTqC5nKeOrFXBF2cSY0QVrXUoInwiBB0GUhDZcWexXPHjg
c7plbU2d8hm7joCjVQrWAjYOT0aR3DgFM6mWTrWRBIMeJApqzj7HUwWPiVA2VZqANgILCsO5BKyd
hTGrQa+32Wz8eZz4Us17GSt7yNxu/ks0X0VdhPMXZhllyb3AuIShICs7FFHO9AosL+FLACv33JXn
HLOqLUUCUESp/CaPCMpVOEbldgEUFFfwRNkQdKDENI9pCoh1YCM+yjQRSub3oX/YqecizRbeuR/9
czq6vr34eOWbL8Yd23ZAiYIyc38xZZ/B1bd+/xdw9X+l6jM8LHM0Iygh7eNogIMlgpnpISurjJxZ
ji34GthjApqsorkx58q2YbKJOm3Zvw5bOfcCN1EIx3GMG7YzSfxsHIyu/syGwSun/ed9eq3Wb2l+
2MEHJTdY659FHMqNvzgonb0fG5x7cFJ5cp6IyoNrJVdYc9thLFyaKqc3oMVXGK0x9CcNWj9hwkln
cfCXXEL2tNWqGDcYVH712i2GnwFb3mucfhj/SaJmPAAvRhaNP4twDsajPLSdZAclFym8lcl0eXWE
0oVpYai9UzL8R9d4Fg1nzE6QrF0ddkAA8IlHCRzg7W/2fh22e6LBDBMjz5C6H7CI5oqq0TMqgfa7
Vnon86x7omzMPftfuxAoebJHBhkaQ2C8AqzDJhfnV8NLD9spXtGjGJsMhN54Yqj6220UuPx4682l
kUMnUpwh7BOoiYqGAbY3bgjzTkU5YMzXYo6P06e7Fpa8yeGwwJMPiTEyPsVW8ICYOZ5eyE2e7nYp
KnmibJT/TNyO5x31+zvm56K5wpmIbdss9OQyZ8VRpgzxJ3m6vb7fn+HJ91ZrLXF3qzG9HFC0QBuW
hpW9TlNRsKWS2ErgBoOZkss7PLyIV4nJsphlhoJS5vN+cxrcytXXIoiNNrAhHA+n2ijseDnpB4Mz
qXCihPsV5eanTqMT7DXS5ClvSeSlTlXz8agAp4itxxuyNtPY67GN6+qcWXLgGMIJEIcRTSwqIKQI
+RxtM75omvq4K+PKf8y6jze2WgtkRltSaBZeloeGgg8UTkCPELqV2v7iIdP6GaPEDF9GzpKvX7e4
tOP7BpS0dJg2+B3cB1yb99a7E++QSNduM+daQ0Apel5qVr2vLBA6O/vOIMKQvNiAfoMBhYZd7RXj
Ggz4T46Uz74TO1zu6/QouNF2WU0ZMb4fTiajm1tvN2+YHva+ll0FJlFxUzAesUK8WnYxNr0MYD9z
K91sTyVODL6AOvvLruScq0qP4rDSl3ZlCM7LT0rRBHMmg0Q/YW+lJn+uyYdPmdzUOp5h9gNsb8Au
b3aB8cZ/w9b+xN4AfWVupLvG7gUnVSpW+6B7gnJIlONjfM0YDBD0/uxtuSRIsu6IgfRGQ1e9SeKY
Jm4JouhETRfyJs3C/KfjWvDyk/16025eUfriz++/Dtqth03wtEUR/ruKgv2zLA9GqaP8uAWm1P1R
F67orpZ0oYV07AjW5lsu69jFA3pnrTS4JnarYjX3ynt6jdzZ9kGDDt/Z7fdxpip94BW7Esq6bkpH
rju6oXf8og6YAvt5J9yxBffqqi26ZMhuZ04X3vRWhouj+KiTQfkLoL8LlHfmnaU6FW1og0u5xuZZ
Gs7NG3cdoCJjMWomlhCrC0stwPvbGK5sxi7Eo2UScSMV+t36xpoM2BW170/vGGL/C1BLAwQUAAIA
CAC4aEY+cGSNIg0FAACmDgAAGQAcAGdhbm9tYWx5L3NyYy9UaXRsZUJhci5jcHBVVAkAA/viTk1L
405NdXgLAAEE6AMAAAToAwAAvVbvb9s2EP3uv+KWFYPUObLdrcPgbMHSzE0DpK69uNu+BbR0tohS
okpSdryi//vuqB+2E3cIurRGYItH8d27d49kek8f8dPxf3Cui42Ry9RBcB7Cs/6gD2P9TgqaMIU2
wkmdg8iTnjYgnQVbzq1MpDCb4FiiDSMGOVMKPIgFgxbNCpOoAs+diN3wAGTw3h3LfKF/y3kqinUW
1oxmqbSwkAqBfgthHOgFuBQhwUzbZjB1MNNavZMuqtc9mc5uXowuLsc3V5fno/H1aHh1Mbl6UvHI
MjSxFAreWrFEjl3JGHOLaCHVKpH5ElZCyYSBd15X1VsWMrGB0iLlbtnlDCPiWJtE5DHCWrq04bYD
USeCs6VBzDB3UBi9kgkm7QoGutYLtxYGQZsuCOXQ5KTUCtWmS6kO5qF3MgsxiyxzgqsZwdpI55DW
tBnn6NZIkY0uuZlVPxrhLsZv4Qot9Q0uMEdDnCflnCpvqbeine3z2orB8syRFUqgzBOC2hKsO7ZN
45MezrRCY9kez6IBCGo/z9qUQOcbD/KSKmqlYpyXmtK1LgVRFCgMd5M04wWeXW2IiA1BE7EqEy9X
o30h4ndiyas817qoCGCiUBArgyuJ6wpPK6XXVYKFNlmV2mmGoQpKg3eKfUilBt+X0vhWWQZaS9pQ
JGeGtHdS54phr7der6NlXkbaLHuNK3vk3ON2oJaFOia4KHWZapp7SbokiWSWXVZUgC3Q+xJvYyyq
eLU9l9RV6y0So2FLtSuFYqhqh5MqsxRZlGrDs2UTtLGR81bTGpD2gVd81GRilKbuQTTo3u1F3S1a
czP6+3w0mV2+GUfu1lXT/jjgRuGuc7+wZR/g1R+i/hfw6le16gMq3PVoY1BG+pRHY7pYFC5cj1y5
78iF91gqVgjvS7TMiu+NpTD+GGZOfNLu1teFoiovrm4Uxqk8Jhzcu0mi5joYjX9vLoMnVfbH+/Q6
nW/r/sDRTDqFL4SJ0qOd8C9TR1cenu5FLkp52uk0C4bD5imY/iWTJTp4SnceiRx2gD5DqMPBbrQL
2Q1dInS8Wxv0w84HH7XoruU/ONHUwk0w3T4Ph6PbghxH6nZhL/5a5jIrs/Ck87HTWWm6/rbECO6V
ti4gya2jZc5b9buUYk3G7IZH8Cvwz4kPlQU5HINPIfrBXUjHwS2mHxKo/30Q6qTRQvLtSveuV6rB
a5QiyHruAKiXZReVhq8ILgjBs63RDLrS5JBVul23Lx3EuPfWHtT0JXn5NZIGMZk8I3aLbYARd/J5
5GDQ73fpzShFPnqD8KAcBR3cbrSiKoPppH2Gp7jaEaWRvpG6amSVUi4g+KbuQiTtKCvchnL5Of5U
E3x45UlwNISjsBnUi4hWlWQiFNI/InRmKda+GjWVVeTo1C0C3uZ1tIhou6s/MHaBJ3x8avg57PJy
2ttKm6DBHQ5fkQ6KtQibnEx+p+On0A/hQ6flPmVkmOtb4lMBn7RzFI3IS1d0ZgWDn+5P0D50abD2
3yEc+zAfcH4wGPQbClUZ7ErMg/9kjckMbz33vXVv6IyXpHk/+nlvKjFizQsCykz72A2HZwSTM2H4
fjv+8xxZ1y7sNcOLQz7gyrc1kKPo+/nJ3isbemWwH0p5j9euowU/3i21oTyI+nereWFKmwbMbqz9
890XPksm1sK7hJSgW93vjIPIVWJ6Oszr/ybeem2b/yOgoqvqa9ju+aOJ+TnG8sV26n3LB4A/kP4F
UEsDBBQAAgAIALhoRj5GdMEvQQQAAG8LAAAeABwAZ2Fub21hbHkvc3JjL0Jvb2ttYXJrc1ZpZXcu
Y3BwVVQJAAP74k5NS+NOTXV4CwABBOgDAAAE6AMAAL1W32/iRhB+Ln/FlObBRGAn1/aF9qImKYeQ
EBcUcte3aLEHe8Xa6+yucbjT/e+d8Q8gOS5KpbtaCeDdmW9mvvnG6+D0O16d6g+udb41Mk4ceNc9
eHN2fgYzvZaCNkyujXBSZyCyKNAGpLNgi6WVkRRm6w0k2p7PIJdKQQViwaBFs8HIr8EzJ0I3PALp
PbiBzFb6r4y3/FCnvSajRSItrKRCoO9cGAd6BS5BiDDVtr2ZO1hordbS+Y3fyXxxfzUaT2b308n1
aHY7Gk7HN9OTOo80RRNKoeDOihh5bSpDzCyihUSrSGYxbISSEQMfmKvaykIqtlBYpNi77DKGEWGo
TSSyEKGULmlzO4BoAsFlbBBTzBzkRm9khNHOg4Fu9cqVwiBo0wehHJqMmNqg2vYp1NE4ZJNaCJlk
mRFckxGURjqH5LOLuERXIq1sdcHNrPvREjee3cEULfUNxpihoZxviiVVvkt9R9rl07z2ZDA9S2SG
IiiyiKD2CTYd24epgh6PtEFjWR5v/HMQ1H7etQmBLrcVyDuqaEcV47zTFG6nUhB5jsJwN4kzdqiy
awThsyBoI1RFVNHVcp+LcC1i9qpybYryAW4UCsrK4EZiWeNppXRZB1hpk9ahnWYYqqAw+KzY11Rq
8KGQpmqVZaBS0kARnSnS7CTO5cMgKMvSj7PC1yYOWlUGpNzB7kbFuRoQnJ+4VLXNnRAvUSQ5yz4z
KsDmWOkSH0PM6/V6PGPqqq0kEqJhSe08hWKoesKJlUWCTEo98CzZCG1o5HLHaQNIc1AxPmojMUpb
97l/3n/ei6Zb5HM/+ud6dLOYvJ/57tHV29XjgBuFh8r9wZJ9hVZ/9c9+gFb/V6m+osJDjbYCZaRv
aTSkg0XhygWkyqeKXFUaS8QG4aFAy1nxuRELUz2GOSd+0h7W14e8Li+sTxTGqTUmHHx1kvjtcTCa
/d0eBid19O93BZ3OL01/oHul9ToVZm0/EPl+0j3Y+3PuxoW86HSe2AyHT269+UcZxejglA48YrjX
AbqG0Cx77ernan0+lda1Dum9JFIYBN5CRp8Hux4T2PujciKjDEPn7e37cDsZzy6nnnSYXoY0IcJh
5B34T2jjtNcjw+n7hScakyMWFKPO7MOVfpwK6i9lpurvJqv9zmFWFl2zWFs3y/XN4IIeQE0l+7Tb
WPuVyo4z8bqVArWOaSRICN0G7qjpg/N3igkiHQa/+b+/6EBlWH+5DMnBL9aBw0d3rzO19a17OVKq
lzyjpVzLHOndiefj1am9aIjZf0DlQaIhDehjWU1kt6WSunArP+GNpuHfevP97+Fw9JjTs4rmsg/H
1wnjS6ez0fTq9Ezh39ILnLLgWMw/1aK5MwoK+n8LvDG4YGa9phK5Au/nw2Vim94J7Ud6CapL6vZ6
8BkqY76+BvJzgzlmkddtHlMtS1+qT0ylY69bVDQfNAD0uyrqX1BLAwQUAAIACAC4aEY+ShHQLgwF
AAABDgAAGwAcAGdhbm9tYWx5L3NyYy9BZGRyZXNzQmFyLmNwcFVUCQAD++JOTUvjTk11eAsAAQTo
AwAABOgDAAC9V8Fy2zYQvfMrtm4OZEam7PSmtJk6jqJ6RqNItdL25oHIlYgaJBgAFK2k/vcuAJKi
ZTn1ISnHY5OLxdu3u28JevjyG16B+4FLWe4U32QGwssIXp2dn8FM3nJGC6qUihkuC2BFOpQKuNGg
q5XmKWdqF55y1FFsQS6EAAeiQaFGtcU09uCFYYkZHYEMP5lTXqzlr4VdihOZRw2jZcY1rLlAoL8l
UwbkGkyGkGIudfuwMLCUUtxyEzf7XiyWN2/Hk6vZzfTqcjy7Ho+mk/n0heeR56gSzgR81GyD1jbl
CRYaUUMmRcqLDWyZ4KkF7rkL76UhZzuoNFLsjl1hYViSSJWyIkGouclabj2IJhBcbBRijoWBUskt
TzHtdliga7k2NVMIUg2ACYOqoEptUewGFOpoHPLJNSS2yLwguIYR1Iobg7Sni7hCUyNZdrKyzfT9
aAs3mX2EKWrqG0ywQEWc59WKMu+od0W7eMhrXwxbnhXaCqVQFSlB7Qk2HduHcUGPR9qi0lYer+Jz
YNR+u6ozAl3tHMh7yqgrlcV5Lylcp1JgZYlM2W5SzewGx64RRGwFQQuJqFJXrrb2JUtu2cbuclyb
pGKAuUBGrBRuOdYeTwohax9gLVXuQxtpYSiDSuFBss/JVOGniivXKm2Bak4DReXMkWYnM6YcDYd1
Xcebooql2gxbVQ5Juafdg9iU4pTg4szkom3uFdUlTbllObAVZaBLdLrEuwRLb/fjuaGuaieRBJWV
VLeTCQvlJ5yqsszQFsUPvJVsijpRfNXVtAGkOXAVH7eRLEqb93l8PjjsRdMt2nMz/utyPF9efZjF
5s74Zfc6sI3CvnK/s2SfodWf4rPvoNX/VarPyLCv0VagFukpjSZ0sAhcmyGp8qEi105jGdsifKpQ
W1b23Ngw5V7DlpN90/bzG0Dp00v8iWJxvMaYgUcnSdweB+PZu/YweOGjf7trGAQ/Nv2Bk4s0pYNP
v2Uqzk56Cz8vDB16+OaBZVLxN0GQCKY1VbrAMQ3ZyMsngUVrCb4E3jQKgK7WHC7+5OkGDbyko9G+
2n+Bs2i03xZ6cwRf7gO3cSvpUCtpms14SwvhYt7dw0vcel/naa8OZzTq7fFurzsvvobQ4J0Jo5jr
cV6aXRj1URySi0NTVYa2jb3dDoGirwXbaOK/oGAXgm+KKckF/tk//3GJFuHhzjLWaOZYUKIC6Zgj
DokUUtnEnGE0esc1WwlMB7C3LYluFB1CpYrVdiVUmNhsWPp3pQ2m4fnZAJqfaOCZDuBk7BJivtl0
UIOmAU4y/9I4eYSORRr2jPeB/33/Ogj2gqFcu/vD5kZuB3XXm9veBr7S+Y1omkVFLGjoDzXgQ9PI
FDa7vfsArq8ms4spZW0qVcxtdMo5okyvpx+WIX2fJGRqeJG9QcpvDH1yva2MoXeCD7lYdpaHUfu+
p2+oZa7MJxN58ojW3rEjlpDub/+LEgl8cc0/05dVr5iaDL+RusLIRtCmqZXPtFcy4tR5Oig3J32k
w5ANktX+D32cR4PQNRxzak2jFicdyujxzifC0w0RbGb29/1DO7QtHbLcDYBOtnoA2evgSPG9qG2l
WjXeUfdqnpqMqnR64N3YvePOvl78bU23X/HMaDlD+0ngMM+fUMEEJR0Y9M/DnvNxwWSyttAd3bOj
hJ6VxFPUelL4OrGeY0PrWMPWMqn0VdF07L19Otawg7jOr2XazPkBVvv2vQ/+BVBLAwQUAAIACACH
aUY+2/VQMeELAAAcJgAAHAAcAGdhbm9tYWx5L3NyYy9Ccm93c2VyVmlldy5jcHBVVAkAA37kTk3z
5E5NdXgLAAEE6AMAAAToAwAA3Vrrc9s2Ev/uvwLnPobySZTk3LU9OeepH7KjqeNHpNRtLzcaiIRE
jClCAUEp8k3+99sFQBKUKFfttPfhPBlLBnZ/2PcuyLSP/sCfA/2PXIjFWvJZpIh30SDHnW6H3Ion
TmFDLoSkiouE0CRsC0m4SkmaTVIecirXXouztOEjyFkcEw2SEslSJpcs9A14omigejWQ3kfV4slU
fJ/glh+IecNKNIp4SqY8ZgQ+F1QqIqZERYyEbC7S/I8HRUZCxE9c+Zbvy4fR+Lx/Pbgd3wwu+rfD
fu/m+v7mSyPHfM5kwGlM3qd0xnDthgcsSRlLSSTikCczsqQxDxHYIY8NVUrmdE2ylMHZhXQJwtAg
EDKkScDIiqsol82BsAeRs5lkbM4SRRZSLHnIwoIDgYZiqlZUMiJkk9BYMZmApZYsXjfhqNpzgGae
kgCNzBOAsxKRleRKMeApTpwwtWKwshYZOtP4Izfc9e17csNS8Bu5ZgmTIPN9NgHNC9ELo51V5SqN
geaZMLRQSLIkBKhSQOux8hh9aP1JSyZTDI9jv0souB930whAJ2sNcgUaFaZCnCsBxxVRSuhiwahE
b4LNkEFLZwPCx4CAjSDOQm2u3PYLGjzRGXJpWa1SPiH3MaMglWRLzlYGT8SxWJkDpkLOzdFKIAxo
kEm2oew+mkr2MeNSuypFoBWHhAJzzhnkTqTUotdur1Yrf5ZkvpCzdh6VbYjcVvFHPFvELYDzIzWP
c+cOwC5hyFHKJlqUknTBdFyyTwFbmHWTnjPwaqpDJGASQ6rgpDFCmQwHq4wihkYxCY8hG7I0kHxS
2NQCQh5oi/fzkxAl17vrd5ubvrDeAp5x/6eL/v1ocHfrq0/KbOtygI5ibuT+ySG7R6y+8jt/Qqz+
T0N1Dw3dGM0DFJF2xWgAjSVmU9WGqKxG5FTHWESXjHzMWIpSYd+YUanLMMqEldbVr0kWRr3AdBTE
MTFGFdnqJH7eDvq3l3kz+NKc/sf9tA8OvrD+IYfnUqwg138E0/vRobPz+kFdZ/y0snALxVjIp+ri
I5v8wNWpC4rdU4p4qCRfIGq5M+IqZudUVlen4LqnIKJyXl1fscnSClYu/iLEvECG9Skk8VR3Ee9h
fDccD39+ez44u204LOl6PuZ0Mc4UjzUYS0I+1czAS+77767Go/5w5OgVCDaHQuJHrrKrV8epCvWa
RiDtdsnryi3VgsmpkhTqkRYzVTILFLmWdBHxIEVzk55JvIA8uMsH/zkg8OMueQ+PPJwxhTkksSn+
k3QawF7h88xeo0nm45Ve6DQ0ksHDn4J+CEnCjkiKHwCWgDDVPa9xUnClTJk1TV7d+BHKLQ9oPAzA
3TH49V6AQmvvQfV6xdpZvKLr9G46rfK+EZI/Y1Lsz5077P2wP744u3jTvxw/9s9/HPQfD9ptVyxQ
H+Y19X4BRYu9FSHzKrbq9d7yhM9pXCXc0O1XQa6yeBvBxhaCfNa/lwJmMxgu+TPrL8FD3sO78g9y
xPBjp6fMQS63oT9xTTEa3IAltEEKBBsE9yBa69Twe/pXQ8sYp2yTtI7MBnntKUa7l+TQmkMnhgqh
A9J+QidtFgqayCZHSyvspiWscBCly5M65XDDfj3Z1gjceK/TYqDY3HPYXFebgG+dgqQvkFUMCrhX
MZ2VAYGMvR7+voj5Ir2IeBzCuSMxjOgCmgCkP/u9YJsg1vqlE3fbeS9r7jKAlffzC3GgCYrjLN+L
sbnh+CPXFC9F3GfQ2+lVvZ7zR14fyZGtgfokqI9m2XNXsTwq24TyCqlLprWdszTbXIDbD9xL0tRd
CzKJ4NiUvG7H2UiVWAySe4dls9vo9DHkHBwNKJdx7JGLC8H6yRJKoIK5J0DHPKZDwIBpw2uQxgYP
3tcoDoGegwJUpKZHEdtcShPY6p+3ZQ/nFut3awBLUWk1FSprOUuXx+DLFargsilc6UDWa1UxdHTm
4AV7swJUqWwv8lXr9Hz8nM8UVpZixqiqGjhzjaV0R52c2AG9gXIdp+T1a/Kqg7//rn9/8y3+/k5/
/0fnpJYegmnHRlfzdY/Nx6tX+sMAd7/VH8cd8/G3jjnZIj2MOFzte70UhtWYDSOhvI65VzTJ8OZu
5EFTVHDBMvUfFPl8cKBrSyXxXCIbT2CXhAXKcwwJiIPr27MbD1cGyQVOeCwEWHuUWTbH7ANxl6la
DFg3IBsorqsKILgCZBWUcvk8U0o4Ym6JVQs4gTuNC1gGppEQ9/cGg5sO3LfCl/Asyd6QWIRcPMfX
uHWPpSlX14TIPY2ZUgwmzRgivDi/dbowG3lawp8+NK5zmaWRl3NBVYarTpPgALeKeDFROTC6Ixsk
gMiPvUIZL/ACQI6m5XeTYuWmm40lGaR4AJdkGL/ukkqKHxQVtioAZvcV8AgJVsAaOw5oql5/lIzG
p16lpjfakId+Z8vapVuMoWNBQ6jXUrnxmeJCna/quItOwaFVFQhgrcr6XlBXkKJ4nfcmQsQF1lSv
2rVfxclkDMZNZoDy8F6WKJmec4t+UUZOu1018hu4OHuHdCIy1ZvENHk6/A0tQSMMocTkN4Lye6/X
/7SAhgc1DAKtdn0z6soxSwRZ6lwyboVeAXpzfahqcEPhtu/0oVo0b6PpuAB/mAKbx+0akqx53Wvw
foUf4C/ZlGaxGtCFcartj7UtwAZ2MU3kgxFeTHPRq/MP7EwpWMnsbgbRSRFB+VyiNR6xT05otk4h
Jr2GrwTWuGTm2Q71hbn+k+Ho7n78EwJ9e1xd/BkXvW+gG7agJzYOalWqZhqB+3ugh8YaHe3eLl3q
5jxThsBr3l+2TPP11zkiOYXW3ajM61tmxEtAObuzeRbD8brG3yVDIPaMHZpW9ZohvnxksdvqD9bG
hzdQT/DZ1lfdrw4bPpUzL7fMrvlg0yDWglhFCHiw2lW0S082hlJTP0SqsAr5EX5p1BPpU9wQ0bu7
qAsHl97cpUSlOxYxUKYjGnoXr1NoiXhCbhsRNaM/RsSmk90AwFDEXQUJrC2Hf2A2+yymCy1dGQwa
/rJ//v4anTQd6cdPDRwBD5GFKKGxeuQQ13LYrQCpxkdddtfn78s5D4E3uru86xHoKmHMCJNSyDIr
wFCO2vVBWQTjlPKYhf5hEdy1fshHTOs+NCXXNiznaZ/DzenT3XSj6dtxeXw2HPbfwVhMTvGJ20kh
LSevqzCByBIIUqgv3YaTvA7mxsH/4uSvpPvv/TpiMbT8hnFlV0/6XbPPC9fyXYbXc/mfYflT0tnb
xC1t4v9LG//qA0Vbdc1luv4RYuGcqKtt52Qc0L7hGNJ+xPBtWZ7jmvpYU7sXjh0cdUX4mok5U3KN
Ewj8W/FQRR5Ml1G39pq9xZOjg3OjY5f/ePOBgcsIJgr00BN1XR4Hq9twLfK8KqJpW0HLX1rkOXqB
umrACtVcLJln0UCGZxi/PUem56hB2uRY95m60a52inHnOBsEH9V4WN042R7Z8eKgR33v0L4Tg7tX
6k8mAVQ3P3tqKyjBY5HEaz9V80PT/vMXKduSJHTJZ9AkPHBmqkz3/xraeU0z1Sfjlu6nNVg1Qw5a
/VNTG3/tdNhq6xrdCz3KeUC5rjQp3UHtFGvduPE0zdep0tcnC2mXPfKubhlH6x/eiiw1IjbJgjRO
zMPx7Z6685mK5s2Ry1c++BbqEYqlWNXq6bz/8sh4/Di4HY7HpHEwvhmMPPLDEP9Li7yM4yvomAmd
w+X88Jfehw/pOv3wYcKTDx90MRgze+44lctDUtQ2qEah5EvWSlim8DXrgqqIeG/fXrQ4uJXGMTUv
QVM6ZS8euteR1li5GiYdR4hyCygk3cStOwuRUG6cFfQbWYpvevQLZMPfxEZCEzOAEBFANU6RMEGu
mEF9gwRkEr5CF8mnFQSCOWgSs7kW6n2KTr9hdMkG0z4iuY9ffTzc25aXNEheZEbn2fS7191TfKVH
56lHRoNEfeeRjqFBEnwQbB8vHpFA6dHZ7SfuPrSVIk5ap2w6ZfhIhMHCICzG4XdmH5/R4P/UyL8D
LKK3Ti8lXVFQ0ZDtmxmJebfpkaMSskmgzBrNKp6t3okwQz4f/BdQSwMEFAACAAgAuGhGPpMgN5a/
AwAAlgkAABkAHABnYW5vbWFseS9zcmMvQWRkcmVzc0Jhci5oVVQJAAP74k5NS+NOTXV4CwABBOgD
AAAE6AMAAL1VwW7jNhC96ysGSFDYgSMn25vTFrUdJevC8MaxF+3NoMWRTIQSFZKS1y3233coSrKT
pkAOuxWCGCKHb968edQML77jE9R/MFXFQYt0Z6E37cOHq+srWKgnwWhDF0ozK1QOLOdDpUFYA6bc
GsEF04fepUDTDx3IWEqoQQxoNKgr5KEHzy2L7egNyN6zvRR5on7P3VYYq6zfMFrvhIFESAT6LZi2
oBKwOwSOmTLty9LCWin5JGzYnDtfrjeT6H622Mxn02ixikbz+4f5ueeRZahjwSR8NixFtzYXMeYG
0cBOSS7yFComBXfAJ+HSRxnI2AFKg5S7Y5c7GBbHSnOWxwh7YXcttxOIJhGMU42YYW6h0KoSHHl3
wgGtVGL3TCMoPQAmLeqclKpQHgaU6s08FJMZiJ3IIie4hhHstbAW6UyXcYt2j7RyUKVrpu9HK9z9
4jPM0VDf4B5z1MT5odxS5R31TrTxS15HMZw8W3QKcShzTlBHgk3HjmnqpG9nqlAbZ48P4TUwar/b
NTsC3R5qkDuqqJPK4dwpSte5FFhRINOum6SZO1CzawwROkPQRixLXsvVal+w+Iml7lTNtSkqBHiQ
yIiVxkrg3uMpKdXeJ0iUznxqqxwMVVBqfFXseyrV+FwKXbfKOKC9oAtFcmZId2dnbTEaDvf7fZjm
Zah0OmxdOSTnXnYvMi3kJcGFO5vJtrkz0oVz4VgOnKIMTIG1L/FLjIVf99czpa6a2iIxamep7iST
DsrfcFJlvUMnir/wzrIcTazFttO0AaR7UCsetZkcSlv3dXg9eN2Lplt0ZhP9NY0e1rNPi9B+sX67
/hy4RuGpc3+wZd/h1Z/Dqx/g1f/Vqu+o8NSjrUEd0n95NKbBIjGxQ3LlS0cmtcd2rEJ4LtE4Vm5u
pEzXn2HHyX1pT+sbQOHLi/1EcTjeY8zCvyZJ2I6DaHHbDoNzn/37PcMgOBMJ+SaB8e3tY7RaTcaP
m4/BGa3Q1/jlIoX6VsIvyz8FT9H+FgSxZMbAck7REd2zm3bBzbVJaa3Kb9qgMec0WM2EaRh5o8XQ
AAX/BEDPcvNp8kc0XQeB3x7Vq8dzvSYcLmikupHwK1z1b/zRlfgbwdC/jyK3vb4T2RCdgOaUxdgi
92CVovFIcBQYVQTRWz4eX+AC3U8DWYcmKi7NLG9i79zbq9DAiJQ+LuYEn3nGUU4XEXmvpkIMbX1P
fmp2+zU5UTFLvKWypwBEOqaQpvLeSagP6vSGi2wjO+3rraPybtOe9OErwZxhzkUCw+HL3n4DUEsD
BBQAAgAIALhoRj7lpVFIeAAAADIBAAAYABwAZ2Fub21hbHkvc3JjL2Fub21hbHkucXJjVVQJAAP7
4k5NS+NOTXV4CwABBOgDAAAE6AMAALMJcna241IAApvCotTi/NKi5FSFgqLUtMwKWyV9JQWIHFg+
LTMn1S4zNzE9tVg/PV83L7WiRK8gL91GHyyBUx3QsLLM/NJigmpTUzJLdNMy81IIqszJLC7RTUwh
UmFRam5+WSpBtcEl+QXoimz04YFix2WjDw4rAFBLAwQUAAIACADFaEY+WGMBji4AAAA7AAAAEwAc
AGdhbm9tYWx5L1JFQURNRS5UWFRVVAkAAxHjTk055E5NdXgLAAEE6AMAAAToAwAACwxPTQrLTC1X
KEotyElMTi1WSKpUCHQvSizIyEwuhklm5ikkIkSDk1PzUrm4AFBLAwQUAAIACADDaUY+ce0QkKMC
AAB5BgAAFAAcAGdhbm9tYWx5L2Fub21hbHkucHJvVVQJAAPu5E5N8eROTXV4CwABBOgDAAAE6AMA
AJVUTXObMBC98yuYCYekH8ZNDj3lgI1SM+MPAriZpO0wslBsDUKikmwn08l/rxDggJ0cwgHEvrer
p8cut4n9+dpmWO25yO3flq2vPV7lRJml5bq2D26COYgrXgiimzQBcWJ1gssYpEkwBX469sYTUOdN
gOeDyOBSIHck+F5icUdYxveDTbNRB/lJcD+eEEXxCIpecMILfML0skxgKY+5I87zAopcniQ8UoJy
tIGi6IUfOC9iJUjZi445U4LTU0C7tDuuvBeqxOJRCYiwVlNbES+W0RgcrJhBwgaoLE89aNx5EzOH
6CMHh/rhg0f9cMelow16PvWxjlN94NWrfrznVh9q/TqK9hzTWO1ZBI5cg4wXkD4P/gpkWfK5WBHI
7H+GnHjRD5AMloF/ZV/bwydvOByOb75/s84qlDBEtxk+d5zbJK2LpkkEgJvhgku3KVXma7GlWA5K
QS5M1aMG1ryUwDLdKkKbDzsNRgb+qvM4yvWTsGaBOGMFZ3q1gVTf5bOsEisqyREXWK/28uqyDSBF
TVahkzBbE4brItjqnnDshd4omAbJvT5nyPdYzNaFsiMMMx/vCMI+VNC+E0ThznsouIqx2Nnzesir
tcZktzIIF3pyvTAOHoDx8FJ7OGyfw6FlaTFKN648bwb/y+u/4KL5Dh0/dpipFBdbChUXKaIGD+bj
6dIHoZdMKprjhHe+a6gtE1Gi3wzZNveTQgPJt0KL1yJPsYzSd7JKqDY6RX9F6a4IMyytZLq4n4G5
+QO+LfmtclLs3ldRge/IqKAP69BJhvRi1LxY1pmCYo1VW8lxfum2DuZx4k2nqQ9mi/iPi4sVzjKc
tUNjnTV6B4+EGtWO046X47SN7jivQ/dJzwE3fU8KuNa9cqjwsX0bgmmLWrjdFLL+A1BLAwQUAAIA
CACZe0Y+gf7JJe4CAABIFAAAGQAcAGdhbm9tYWx5L2Fub21hbHkucHJvLnVzZXJVVAkAA4IET03h
SE9NdXgLAAEE6AMAAAToAwAA1VjdcqIwFL7vU7g8AGinl5YZRXemM3W3LradvYxyxKwhoSHY8vYb
JCLyI6C0s3sFhJPznZ/vnJzJ8Nvkp7X4/TTtzYXFAQnGnzj7Ayth3gzfxCpZMm96QwcJJJ+94Q5x
jJYETCU4/fAJ48B19a2PVgLvYIG4C2JopOLJXhJCT0Q+3GuYCs3sxwJyLUYwFEQLqKmDpXk2CIGp
G5SBechXePOX+CcVM+Rr8f+DNVuI7rVEkcXoGrshRwIzqlvMgZV22D2OBIw4R5Fm2lEgwDta3lOv
EutCP5Jg6f0rPKhQferSBAc+QdEP5EHqmC24DJ5mTiDYCuZn3Gqv/8EpqJ2LOyU6QxS5cqdyVuEd
edIEVe1NKDYOMXFODNAquNVC6a+QtlIZp+ec1qKRel+rSmidzhJl+yVbgH9ObbdMefPQFrKR6Iop
OaLMZxIn9a8MkOBAJKA1m5PPEXdDD6gI8pF6lHo0Q6UgW8xXpmTwVSmZfVJG8rUb41Ql45CIqj26
RQCl9bRkjGjmGpEA6jJbqbBxTptaGL9YzPMQLQbjxMpykrRnSGCxUDaWbI+5PQVqzb59lL+2Ifyv
7BM8/EzyKZ2nY0/q3iq2J4dupPD/Jm9TbpXwdlDC21aKeTJXTekOc0bjsNb1iny2GgA9B8AzCNYG
URfOnwfdDlnL0G0cqMsrRa4Una/Ebbhfrxm4brsBmGAuBRmPCn4aG+aBERDjnfGt4SLKPESiq1Hn
4gV4IN+Ooe3In4UkrqQYPjNFXqRXstjeIIe97//VlEmu5htMwkXEmnJvNgrnR+v6QbijqqsjSqd1
l/eyXbILMRqjADINK/6sJem586sMQx0dj5g2HJFbeyFFvmNSmRnd5+zKOMmSmETEefCkhB2u1/ij
2enREmMB3MMUkbZHU2OAK06n5hg2iGyhdBqhWPmr7M8yv4VO3i1QFUrp6NO+C+Yxz/fAju6A9iB1
t2aD627Nnn0pK7/jilQnXx3iXRFxaGTuB/8CUEsBAh4DCgAAAAAAe6JGPgAAAAAAAAAAAAAAAAkA
GAAAAAAAAAAQAO1BAAAAAGdhbm9tYWx5L1VUBQADuUhPTXV4CwABBOgDAAAE6AMAAFBLAQIeAwoA
AAAAABdpRj4AAAAAAAAAAAAAAAAdABgAAAAAAAAAEADtQUMAAABnYW5vbWFseS9ldmVudGVtdWxh
dG9yc2VydmVyL1VUBQADruNOTXV4CwABBOgDAAAE6AMAAFBLAQIeAxQAAgAIADFnRj7bqRskTgUA
AF0UAAAzABgAAAAAAAEAAACkgZoAAABnYW5vbWFseS9ldmVudGVtdWxhdG9yc2VydmVyL3Nydl9l
dmVudF9lbXVsYXRvci5jcHBVVAUAAw3hTk11eAsAAQToAwAABOgDAABQSwECHgMUAAIACAAxZ0Y+
6qWsX4MBAACRAgAANQAYAAAAAAABAAAApIFVBgAAZ2Fub21hbHkvZXZlbnRlbXVsYXRvcnNlcnZl
ci9ldmVudGVtdWxhdG9yX3NlcnZlci5tbXBVVAUAAw3hTk11eAsAAQToAwAABOgDAABQSwECHgMU
AAIACAAxZ0Y+x0ocfIICAADyBwAAMgAYAAAAAAABAAAApIFHCAAAZ2Fub21hbHkvZXZlbnRlbXVs
YXRvcnNlcnZlci9zcnZfZXZlbnRfZW11X2RsbC5jcHBVVAUAAw3hTk11eAsAAQToAwAABOgDAABQ
SwECHgMUAAIACAAxZ0Y+hPqZUwEBAAAkAgAAJAAYAAAAAAABAAAApIE1CwAAZ2Fub21hbHkvZXZl
bnRlbXVsYXRvcnNlcnZlci9ibGQuaW5mVVQFAAMN4U5NdXgLAAEE6AMAAAToAwAAUEsBAh4DFAAC
AAgAMWdGPkipc2I+AgAATwUAADAAGAAAAAAAAQAAAKSBlAwAAGdhbm9tYWx5L2V2ZW50ZW11bGF0
b3JzZXJ2ZXIvc3J2X2V2ZW50X2VtdV9kbGwuaFVUBQADDeFOTXV4CwABBOgDAAAE6AMAAFBLAQIe
AxQAAgAIADFnRj4qeniMbAYAAEQUAAAxABgAAAAAAAEAAACkgTwPAABnYW5vbWFseS9ldmVudGVt
dWxhdG9yc2VydmVyL3Nydl9ldmVudF9lbXVsYXRvci5oVVQFAAMN4U5NdXgLAAEE6AMAAAToAwAA
UEsBAh4DCgAAAAAAGWlGPgAAAAAAAAAAAAAAAB0AGAAAAAAAAAAQAO1BExYAAGdhbm9tYWx5L2V2
ZW50ZW11bGF0b3JjbGllbnQvVVQFAAOy405NdXgLAAEE6AMAAAToAwAAUEsBAh4DFAACAAgAMWdG
PvC31os0AQAABwIAADQAGAAAAAAAAQAAAKSBahYAAGdhbm9tYWx5L2V2ZW50ZW11bGF0b3JjbGll
bnQvZXZlbnRlbXVsYXRvcmNsaWVudC5wcm9VVAUAAw3hTk11eAsAAQToAwAABOgDAABQSwECHgMU
AAIACAAxZ0Y+R9PiSJUBAABRBAAAMQAYAAAAAAABAAAApIEMGAAAZ2Fub21hbHkvZXZlbnRlbXVs
YXRvcmNsaWVudC9jbF9ldmVudF9lbXVfZGxsLmNwcFVUBQADDeFOTXV4CwABBOgDAAAE6AMAAFBL
AQIeAxQAAgAIADFnRj5JbSMl8QEAAGMEAAAvABgAAAAAAAEAAACkgQwaAABnYW5vbWFseS9ldmVu
dGVtdWxhdG9yY2xpZW50L2NsX2V2ZW50X2VtdV9kbGwuaFVUBQADDeFOTXV4CwABBOgDAAAE6AMA
AFBLAQIeAxQAAgAIADFnRj6RAyeX7QMAAM4KAAA1ABgAAAAAAAEAAACkgWYcAABnYW5vbWFseS9l
dmVudGVtdWxhdG9yY2xpZW50L2NsX2V2ZW50X2VtdV9jb21tYW5kZXIuaFVUBQADDeFOTXV4CwAB
BOgDAAAE6AMAAFBLAQIeAxQAAgAIADFnRj57m4/DEQMAAFkKAAA3ABgAAAAAAAEAAACkgcIgAABn
YW5vbWFseS9ldmVudGVtdWxhdG9yY2xpZW50L2NsX2V2ZW50X2VtdV9jb21tYW5kZXIuY3BwVVQF
AAMN4U5NdXgLAAEE6AMAAAToAwAAUEsBAh4DCgAAAAAAEGlGPgAAAAAAAAAAAAAAAA0AGAAAAAAA
AAAQAO1BRCQAAGdhbm9tYWx5L3NyYy9VVAUAA5/jTk11eAsAAQToAwAABOgDAABQSwECHgMUAAIA
CAC4aEY+hFYNLGgGAAChEwAAHAAYAAAAAAABAAAApIGLJAAAZ2Fub21hbHkvc3JjL3dydHBlcmZ0
cmFjZXIuaFVUBQAD++JOTXV4CwABBOgDAAAE6AMAAFBLAQIeAxQAAgAIAANpRj4zW6MbIAQAAFAK
AAAWABgAAAAAAAEAAACkgUkrAABnYW5vbWFseS9zcmMvd2Vidmlldy5oVVQFAAOG405NdXgLAAEE
6AMAAAToAwAAUEsBAh4DFAACAAgAuGhGPin3P/IZBAAAygoAABoAGAAAAAAAAQAAAKSBuS8AAGdh
bm9tYWx5L3NyYy9ab29tU3RyaXAuY3BwVVQFAAP74k5NdXgLAAEE6AMAAAToAwAAUEsBAh4DFAAC
AAgAHHtGPtFWDcCbBwAA/BQAABgAGAAAAAAAAQAAAKSBJjQAAGdhbm9tYWx5L3NyYy93ZWJ2aWV3
LmNwcFVUBQADlwNPTXV4CwABBOgDAAAE6AMAAFBLAQIeAxQAAgAIAItpRj4WGguuEwUAAC4NAAAa
ABgAAAAAAAEAAACkgRM8AABnYW5vbWFseS9zcmMvQnJvd3NlclZpZXcuaFVUBQADheROTXV4CwAB
BOgDAAAE6AMAAFBLAQIeAxQAAgAIALhoRj4bbEZiewMAAOcIAAAcABgAAAAAAAEAAACkgXpBAABn
YW5vbWFseS9zcmMvQm9va21hcmtzVmlldy5oVVQFAAP74k5NdXgLAAEE6AMAAAToAwAAUEsBAh4D
FAACAAgAuGhGPldlQXilAwAAegkAABkAGAAAAAAAAQAAAKSBS0UAAGdhbm9tYWx5L3NyYy9mbGlj
a2NoYXJtLmhVVAUAA/viTk11eAsAAQToAwAABOgDAABQSwECHgMUAAIACAC4aEY+TsAeLs8SAABN
UwAAHgAYAAAAAAABAAAApIFDSQAAZ2Fub21hbHkvc3JjL3dydHBlcmZ0cmFjZXIuY3BwVVQFAAP7
4k5NdXgLAAEE6AMAAAToAwAAUEsBAh4DFAACAAgA0HRGPko9Em/gDgAAK0MAABsAGAAAAAAAAQAA
AKSBalwAAGdhbm9tYWx5L3NyYy9mbGlja2NoYXJtLmNwcFVUBQADt/hOTXV4CwABBOgDAAAE6AMA
AFBLAQIeAxQAAgAIALhoRj5sotRfrgMAAG8JAAAXABgAAAAAAAEAAACkgZ9rAABnYW5vbWFseS9z
cmMvVGl0bGVCYXIuaFVUBQAD++JOTXV4CwABBOgDAAAE6AMAAFBLAQIeAxQAAgAIALhoRj5CuXkq
+wMAANQKAAAZABgAAAAAAAEAAACkgZ5vAABnYW5vbWFseS9zcmMvSG9tZVZpZXcuY3BwVVQFAAP7
4k5NdXgLAAEE6AMAAAToAwAAUEsBAh4DFAACAAgAuGhGPjJA/GWfBAAASQ0AAB0AGAAAAAAAAQAA
AKSB7HMAAGdhbm9tYWx5L3NyYy9Db250cm9sU3RyaXAuY3BwVVQFAAP74k5NdXgLAAEE6AMAAATo
AwAAUEsBAh4DFAACAAgAuGhGPp4xgPCqAwAAZQkAABgAGAAAAAAAAQAAAKSB4ngAAGdhbm9tYWx5
L3NyYy9ab29tU3RyaXAuaFVUBQAD++JOTXV4CwABBOgDAAAE6AMAAFBLAQIeAxQAAgAIAJd7Rj7A
qD3GYgYAABUQAAAVABgAAAAAAAEAAACkgd58AABnYW5vbWFseS9zcmMvTWFpbi5jcHBVVAUAA30E
T011eAsAAQToAwAABOgDAABQSwECHgMUAAIACAC4aEY+t3xCnzAEAADfCgAAHAAYAAAAAAABAAAA
pIGPgwAAZ2Fub21hbHkvc3JjL0Jyb3dzZXJXaW5kb3cuaFVUBQAD++JOTXV4CwABBOgDAAAE6AMA
AFBLAQIeAxQAAgAIALhoRj5DlXvG3BAAAARCAAAbABgAAAAAAAEAAACkgRWIAABnYW5vbWFseS9z
cmMvc3ltX2lhcF91dGlsLmhVVAUAA/viTk11eAsAAQToAwAABOgDAABQSwECHgMKAAAAAAARaUY+
AAAAAAAAAAAAAAAAFAAYAAAAAAAAABAA7UFGmQAAZ2Fub21hbHkvc3JjL2ltYWdlcy9VVAUAA6Lj
Tk11eAsAAQToAwAABOgDAABQSwECHgMKAAIAAAAxZ0Y+9UMJAz0BAAA9AQAAIwAYAAAAAAAAAAAA
pIGUmQAAZ2Fub21hbHkvc3JjL2ltYWdlcy9saXN0LXJlbW92ZS5wbmdVVAUAAw3hTk11eAsAAQTo
AwAABOgDAABQSwECHgMKAAIAAAAxZ0Y+SdW3jNcFAADXBQAAIQAYAAAAAAAAAAAApIEumwAAZ2Fu
b21hbHkvc3JjL2ltYWdlcy9lZGl0LWZpbmQucG5nVVQFAAMN4U5NdXgLAAEE6AMAAAToAwAAUEsB
Ah4DCgACAAAAMWdGPjVljX9vBAAAbwQAACMAGAAAAAAAAAAAAKSBYKEAAGdhbm9tYWx5L3NyYy9p
bWFnZXMvZ28tcHJldmlvdXMucG5nVVQFAAMN4U5NdXgLAAEE6AMAAAToAwAAUEsBAh4DCgACAAAA
MWdGPj2oqn9+BAAAfgQAAB8AGAAAAAAAAAAAAKSBLKYAAGdhbm9tYWx5L3NyYy9pbWFnZXMvZ28t
bmV4dC5wbmdVVAUAAw3hTk11eAsAAQToAwAABOgDAABQSwECHgMKAAIAAAAxZ0Y+CsrE6s8OAADP
DgAAHAAYAAAAAAAAAAAApIEDqwAAZ2Fub21hbHkvc3JjL2ltYWdlcy9TdG9wLnBuZ1VUBQADDeFO
TXV4CwABBOgDAAAE6AMAAFBLAQIeAwoAAgAAADFnRj6Hlb+EWQIAAFkCAAAgABgAAAAAAAAAAACk
gSi6AABnYW5vbWFseS9zcmMvaW1hZ2VzL2xpc3QtYWRkLnBuZ1VUBQADDeFOTXV4CwABBOgDAAAE
6AMAAFBLAQIeAxQAAgAIALhoRj6Drm2LvwMAANAJAAAbABgAAAAAAAEAAACkgdu8AABnYW5vbWFs
eS9zcmMvQ29udHJvbFN0cmlwLmhVVAUAA/viTk11eAsAAQToAwAABOgDAABQSwECHgMUAAIACAC4
aEY+7dkH97UDAACQCQAAFwAYAAAAAAABAAAApIHvwAAAZ2Fub21hbHkvc3JjL0hvbWVWaWV3LmhV
VAUAA/viTk11eAsAAQToAwAABOgDAABQSwECHgMUAAIACAC4aEY+JhB3LZ8GAADDFQAAHgAYAAAA
AAABAAAApIH1xAAAZ2Fub21hbHkvc3JjL0Jyb3dzZXJXaW5kb3cuY3BwVVQFAAP74k5NdXgLAAEE
6AMAAAToAwAAUEsBAh4DFAACAAgAuGhGPnBkjSINBQAApg4AABkAGAAAAAAAAQAAAKSB7MsAAGdh
bm9tYWx5L3NyYy9UaXRsZUJhci5jcHBVVAUAA/viTk11eAsAAQToAwAABOgDAABQSwECHgMUAAIA
CAC4aEY+RnTBL0EEAABvCwAAHgAYAAAAAAABAAAApIFM0QAAZ2Fub21hbHkvc3JjL0Jvb2ttYXJr
c1ZpZXcuY3BwVVQFAAP74k5NdXgLAAEE6AMAAAToAwAAUEsBAh4DFAACAAgAuGhGPkoR0C4MBQAA
AQ4AABsAGAAAAAAAAQAAAKSB5dUAAGdhbm9tYWx5L3NyYy9BZGRyZXNzQmFyLmNwcFVUBQAD++JO
TXV4CwABBOgDAAAE6AMAAFBLAQIeAxQAAgAIAIdpRj7b9VAx4QsAABwmAAAcABgAAAAAAAEAAACk
gUbbAABnYW5vbWFseS9zcmMvQnJvd3NlclZpZXcuY3BwVVQFAAN+5E5NdXgLAAEE6AMAAAToAwAA
UEsBAh4DFAACAAgAuGhGPpMgN5a/AwAAlgkAABkAGAAAAAAAAQAAAKSBfecAAGdhbm9tYWx5L3Ny
Yy9BZGRyZXNzQmFyLmhVVAUAA/viTk11eAsAAQToAwAABOgDAABQSwECHgMUAAIACAC4aEY+5aVR
SHgAAAAyAQAAGAAYAAAAAAABAAAApIGP6wAAZ2Fub21hbHkvc3JjL2Fub21hbHkucXJjVVQFAAP7
4k5NdXgLAAEE6AMAAAToAwAAUEsBAh4DFAACAAgAxWhGPlhjAY4uAAAAOwAAABMAGAAAAAAAAQAA
AKSBWewAAGdhbm9tYWx5L1JFQURNRS5UWFRVVAUAAxHjTk11eAsAAQToAwAABOgDAABQSwECHgMU
AAIACADDaUY+ce0QkKMCAAB5BgAAFAAYAAAAAAABAAAApIHU7AAAZ2Fub21hbHkvYW5vbWFseS5w
cm9VVAUAA+7kTk11eAsAAQToAwAABOgDAABQSwECHgMUAAIACACZe0Y+gf7JJe4CAABIFAAAGQAY
AAAAAAABAAAApIHF7wAAZ2Fub21hbHkvYW5vbWFseS5wcm8udXNlclVUBQADggRPTXV4CwABBOgD
AAAE6AMAAFBLBQYAAAAAMgAyAL0TAAAG8wAAAAA=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81437</attachid>
            <date>2011-02-06 18:04:26 -0800</date>
            <delta_ts>2011-02-06 18:04:26 -0800</delta_ts>
            <desc>Webkit tiling rework proposal.</desc>
            <filename>webkit_tiles_rework_01.diff</filename>
            <type>text/plain</type>
            <size>25179</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGUuaAppbmRleCBjNjIzZWM5Li4wMDI4
MmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZS5oCkBAIC01Niw2ICs1
Niw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFRpbGU6OkNvb3JkaW5hdGUmIGNvb3JkaW5hdGUo
KSBjb25zdCB7IHJldHVybiBtX2Nvb3JkaW5hdGU7IH0KICAgICBjb25zdCBJbnRSZWN0JiByZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisKKyAgICB2b2lkIHJldXNlKGNvbnN0IENvb3Jk
aW5hdGUmIHRpbGVDb29yZGluYXRlKTsKICAgICAKICAgICBzdGF0aWMgdm9pZCBwYWludENoZWNr
ZXJQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5j
cHAKaW5kZXggOTU4ZDgxMC4uNjlhNTVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcApAQCAtMjIsNiArMjIsNyBA
QAogCiAjaWYgRU5BQkxFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAKKyNpbmNsdWRlICJDdXJyZW50
VGltZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlRpbGVkQmFj
a2luZ1N0b3JlQ2xpZW50LmgiCiAKQEAgLTMzLDQwICszNCw0MSBAQCBzdGF0aWMgY29uc3QgaW50
IGRlZmF1bHRUaWxlSGVpZ2h0ID0gNTEyOwogVGlsZWRCYWNraW5nU3RvcmU6OlRpbGVkQmFja2lu
Z1N0b3JlKFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX2NsaWVudChj
bGllbnQpCiAgICAgLCBtX3RpbGVCdWZmZXJVcGRhdGVUaW1lcihuZXcgVGlsZVRpbWVyKHRoaXMs
ICZUaWxlZEJhY2tpbmdTdG9yZTo6dGlsZUJ1ZmZlclVwZGF0ZVRpbWVyRmlyZWQpKQotICAgICwg
bV90aWxlQ3JlYXRpb25UaW1lcihuZXcgVGlsZVRpbWVyKHRoaXMsICZUaWxlZEJhY2tpbmdTdG9y
ZTo6dGlsZUNyZWF0aW9uVGltZXJGaXJlZCkpCiAgICAgLCBtX3RpbGVTaXplKGRlZmF1bHRUaWxl
V2lkdGgsIGRlZmF1bHRUaWxlSGVpZ2h0KQotICAgICwgbV90aWxlQ3JlYXRpb25EZWxheSgwLjAx
KQorICAgICwgbV90aWxlVXBkYXRlRGVsYXkoMC4wMykKICAgICAsIG1fa2VlcEFyZWFNdWx0aXBs
aWVyKDIuZiwgMy41ZikKICAgICAsIG1fY292ZXJBcmVhTXVsdGlwbGllcigxLjVmLCAyLjVmKQog
ICAgICwgbV9jb250ZW50c1NjYWxlKDEuZikKICAgICAsIG1fcGVuZGluZ1NjYWxlKDApCiAgICAg
LCBtX2NvbnRlbnRzRnJvemVuKGZhbHNlKQorICAgICwgbV9zY3JvbGxEZWx0YSgwLCAwKQorICAg
ICwgbV91cGRhdGVUaW1lT3V0KDE1KQorICAgICwgbV9pblVwZGF0ZShmYWxzZSkKIHsKIH0KIAog
VGlsZWRCYWNraW5nU3RvcmU6On5UaWxlZEJhY2tpbmdTdG9yZSgpCiB7CiAgICAgZGVsZXRlIG1f
dGlsZUJ1ZmZlclVwZGF0ZVRpbWVyOwotICAgIGRlbGV0ZSBtX3RpbGVDcmVhdGlvblRpbWVyOwog
fQogICAgIAogdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6c2V0VGlsZVNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKIHsKICAgICBtX3RpbGVTaXplID0gc2l6ZTsKICAgICBtX3RpbGVzLmNsZWFyKCk7
Ci0gICAgc3RhcnRUaWxlQ3JlYXRpb25UaW1lcigpOworICAgIHN0YXJ0VGlsZUJ1ZmZlclVwZGF0
ZVRpbWVyKCk7CiB9CiAKLXZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnNldFRpbGVDcmVhdGlvbkRl
bGF5KGRvdWJsZSBkZWxheSkKK3ZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnNldFRpbGVVcGRhdGVE
ZWxheShkb3VibGUgZGVsYXkpCiB7Ci0gICAgbV90aWxlQ3JlYXRpb25EZWxheSA9IGRlbGF5Owor
ICAgIG1fdGlsZVVwZGF0ZURlbGF5ID0gZGVsYXk7CiB9CiAKIHZvaWQgVGlsZWRCYWNraW5nU3Rv
cmU6OnNldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyhjb25zdCBGbG9hdFNpemUmIGtlZXBN
dWx0aXBsaWVyLCBjb25zdCBGbG9hdFNpemUmIGNvdmVyTXVsdGlwbGllcikKIHsKICAgICBtX2tl
ZXBBcmVhTXVsdGlwbGllciA9IGtlZXBNdWx0aXBsaWVyOwogICAgIG1fY292ZXJBcmVhTXVsdGlw
bGllciA9IGNvdmVyTXVsdGlwbGllcjsKLSAgICBzdGFydFRpbGVDcmVhdGlvblRpbWVyKCk7Cisg
ICAgc3RhcnRUaWxlQnVmZmVyVXBkYXRlVGltZXIoKTsKIH0KIAogdm9pZCBUaWxlZEJhY2tpbmdT
dG9yZTo6aW52YWxpZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50c0RpcnR5UmVjdCkKQEAgLTky
LDExICs5NCwxNyBAQCB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlQnVmZmVycygp
CiB7CiAgICAgaWYgKG1fY29udGVudHNGcm96ZW4pCiAgICAgICAgIHJldHVybjsKKworICAgIC8v
IGF2b2lkIHJlY3Vyc2l2ZSBjYWxsaW5nCisgICAgaWYobV9pblVwZGF0ZSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1faW5VcGRhdGUgPSB0cnVlOwogICAgIAogICAgIG1fY2xpZW50LT50aWxlZEJh
Y2tpbmdTdG9yZVBhaW50QmVnaW4oKTsKIAogICAgIFZlY3RvcjxJbnRSZWN0PiBwYWludGVkQXJl
YTsKLSAgICBWZWN0b3I8UmVmUHRyPFRpbGU+ID4gZGlydHlUaWxlczsKKyAgICBkb3VibGUgc3Rh
cnRUaW1lID0gY3VycmVudFRpbWVNUygpOworLyogICAgVmVjdG9yPFJlZlB0cjxUaWxlPiA+IGRp
cnR5VGlsZXM7CiAgICAgVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKICAg
ICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5pc0RpcnR5KCkpCkBAIC0xMTksMTIg
KzEyNyw5MiBAQCB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlQnVmZmVycygpCiAK
ICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgc2l6ZTsgKytuKQogICAgICAgICBkaXJ0eVRp
bGVzW25dLT5zd2FwQmFja0J1ZmZlclRvRnJvbnQoKTsKKyovCisgICAgYm9vbCBpblNjcm9sbGlu
ZyA9IG1fc2Nyb2xsRGVsdGEueCgpID4gMCB8fCBtX3Njcm9sbERlbHRhLnkoKSA+IDA7CisKKyAg
ICBJbnRSZWN0IHZpc2libGVSZWN0ID0gbWFwRnJvbUNvbnRlbnRzKG1fY2xpZW50LT50aWxlZEJh
Y2tpbmdTdG9yZVZpc2libGVSZWN0KCkpOworICAgIEludFJlY3QgdXBkYXRlUmVjdCA9IGdldFVw
ZGF0ZVJlY3QodmlzaWJsZVJlY3QpOworICAgIGludCB2aWV3cG9ydFRpbGVzTWF4ID0gKHZpc2li
bGVSZWN0LndpZHRoKCkgLyBtX3RpbGVTaXplLndpZHRoKCkgKyAxKSAqCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAodmlzaWJsZVJlY3QuaGVpZ2h0KCkgLyBtX3RpbGVTaXplLmhlaWdodCgp
ICsgMSk7CisgICAgaW50IHVwZGF0ZVRpbGVzTWF4ID0gKHVwZGF0ZVJlY3Qud2lkdGgoKSAvIG1f
dGlsZVNpemUud2lkdGgoKSArIDEpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAodXBkYXRl
UmVjdC5oZWlnaHQoKSAvIG1fdGlsZVNpemUuaGVpZ2h0KCkgKyAxKTsKKworCisgICAgQ29vcmRp
bmF0ZURpc3RhbmNlVmVjdG9yIGRpcnR5Vmlld3BvcnRUaWxlczsKKyAgICBkaXJ0eVZpZXdwb3J0
VGlsZXMucmVzZXJ2ZUNhcGFjaXR5KHZpZXdwb3J0VGlsZXNNYXgpOworICAgIENvb3JkaW5hdGVE
aXN0YW5jZVZlY3RvciBtaXNzaW5nVmlld3BvcnRUaWxlczsKKyAgICBtaXNzaW5nVmlld3BvcnRU
aWxlcy5yZXNlcnZlQ2FwYWNpdHkodmlld3BvcnRUaWxlc01heCk7CisgICAgQ29vcmRpbmF0ZURp
c3RhbmNlVmVjdG9yIGRpcnR5VXBkYXRlVGlsZXM7CisgICAgZGlydHlVcGRhdGVUaWxlcy5yZXNl
cnZlQ2FwYWNpdHkodXBkYXRlVGlsZXNNYXgpOworICAgIENvb3JkaW5hdGVEaXN0YW5jZVZlY3Rv
ciBtaXNzaW5nVXBkYXRlVGlsZXM7CisgICAgbWlzc2luZ1VwZGF0ZVRpbGVzLnJlc2VydmVDYXBh
Y2l0eSh1cGRhdGVUaWxlc01heCk7CisgICAgQ29vcmRpbmF0ZURpc3RhbmNlVmVjdG9yIGV4aXN0
aW5nT3ZlcmhhbmdpbmdUaWxlczsKKyAgICBleGlzdGluZ092ZXJoYW5naW5nVGlsZXMucmVzZXJ2
ZUNhcGFjaXR5KHVwZGF0ZVRpbGVzTWF4KTsKKyAgICB0aWxlSW52ZW50b3J5KHZpc2libGVSZWN0
LCB1cGRhdGVSZWN0LCBkaXJ0eVZpZXdwb3J0VGlsZXMsIG1pc3NpbmdWaWV3cG9ydFRpbGVzLAor
ICAgICAgICAgICAgICAgICAgZGlydHlVcGRhdGVUaWxlcywgbWlzc2luZ1VwZGF0ZVRpbGVzLCBl
eGlzdGluZ092ZXJoYW5naW5nVGlsZXMpOworCisgICAgaWYgKCFpblNjcm9sbGluZykgeworICAg
ICAgICAvLyBkbyBmdWxsIHZpZXBvcnQgdXBkYXRlcyBpZiBub3QgaW4gc2Nyb2xsaW5nCisgICAg
ICAgIENvb3JkaW5hdGVEaXN0YW5jZVZlY3RvciYgdmlld1BvcnRVcGRhdGVUaWxlcyA9IG1pc3Np
bmdWaWV3cG9ydFRpbGVzLnNpemUoKSA/IG1pc3NpbmdWaWV3cG9ydFRpbGVzIDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGlydHlWaWV3cG9ydFRpbGVzOworICAgICAgICBpZiAodmll
d1BvcnRVcGRhdGVUaWxlcy5zaXplKCkpCisgICAgICAgICAgICB3aGlsZSh2aWV3UG9ydFVwZGF0
ZVRpbGVzLnNpemUoKSkgeworICAgICAgICAgICAgICAgIFRpbGU6OkNvb3JkaW5hdGUgY29vcmRp
bmF0ZSA9IHZpZXdQb3J0VXBkYXRlVGlsZXMubGFzdCgpLmNvb3JkaW5hdGUoKTsKKyAgICAgICAg
ICAgICAgICBSZWZQdHI8VGlsZT4gdGlsZSA9IHRpbGVBdChjb29yZGluYXRlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXRpbGUpCisgICAgICAgICAgICAgICAgICAgIHRpbGUgPSBnZXRUaWxlKGNv
b3JkaW5hdGUsIGV4aXN0aW5nT3ZlcmhhbmdpbmdUaWxlcyk7CisgICAgICAgICAgICAgICAgdGls
ZS0+dXBkYXRlQmFja0J1ZmZlcigpOworICAgICAgICAgICAgICAgIHRpbGUtPnN3YXBCYWNrQnVm
ZmVyVG9Gcm9udCgpOworICAgICAgICAgICAgICAgIHBhaW50ZWRBcmVhLmFwcGVuZCh0aWxlLT5y
ZWN0KCkpOworICAgICAgICAgICAgICAgIHZpZXdQb3J0VXBkYXRlVGlsZXMucmVtb3ZlTGFzdCgp
OworICAgICAgICB9CisgICAgfQorCisgICAgc3RydWN0IHsgQ29vcmRpbmF0ZURpc3RhbmNlVmVj
dG9yJiB0aWxlczsgYm9vbCBtaXNzaW5nOyB9ICB0aWxlVXBkYXRlQXJyYXlbXSA9IHsKKyAgICAg
ICAgeyBtaXNzaW5nVmlld3BvcnRUaWxlcywgdHJ1ZX0sIHsgbWlzc2luZ1VwZGF0ZVRpbGVzLCB0
cnVlfSwKKyAgICAgICAgeyBkaXJ0eVZpZXdwb3J0VGlsZXMsIGZhbHNlfSwgeyBkaXJ0eVVwZGF0
ZVRpbGVzLCBmYWxzZX0KKyAgICB9OworCisgICAgYm9vbCB0aW1lb3V0ID0gZmFsc2U7CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHNpemVvZih0aWxlVXBkYXRlQXJyYXkpIC8gc2l6ZW9mKHRp
bGVVcGRhdGVBcnJheVswXSk7IGkrKykgeworICAgICAgICBDb29yZGluYXRlRGlzdGFuY2VWZWN0
b3ImIHVwZGF0ZVRpbGVzID0gdGlsZVVwZGF0ZUFycmF5W2ldLnRpbGVzOworICAgICAgICBib29s
IG1pc3NpbmcgPSB0aWxlVXBkYXRlQXJyYXlbaV0ubWlzc2luZzsKKyAgICAgICAgd2hpbGUodXBk
YXRlVGlsZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBUaWxlOjpDb29yZGluYXRlIGNvb3JkaW5h
dGUgPSB1cGRhdGVUaWxlcy5sYXN0KCkuY29vcmRpbmF0ZSgpOworICAgICAgICAgICAgUmVmUHRy
PFRpbGU+IHRpbGUgPSBtaXNzaW5nID8gZ2V0VGlsZShjb29yZGluYXRlLCBleGlzdGluZ092ZXJo
YW5naW5nVGlsZXMpIDogdGlsZUF0KGNvb3JkaW5hdGUpOworICAgICAgICAgICAgdGlsZS0+dXBk
YXRlQmFja0J1ZmZlcigpOworICAgICAgICAgICAgdGlsZS0+c3dhcEJhY2tCdWZmZXJUb0Zyb250
KCk7CisgICAgICAgICAgICBwYWludGVkQXJlYS5hcHBlbmQodGlsZS0+cmVjdCgpKTsKKyAgICAg
ICAgICAgIHVwZGF0ZVRpbGVzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIGlmKGN1cnJlbnRU
aW1lTVMoKSAtIHN0YXJ0VGltZSA+IG1fdXBkYXRlVGltZU91dCkgeworICAgICAgICAgICAgICAg
IHRpbWVvdXQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGlmICh0aW1lb3V0KQorICAgICAgICAgICAgYnJlYWs7CisgICAg
fQogCiAgICAgbV9jbGllbnQtPnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQocGFpbnRlZEFyZWEp
OworICAgIGlmIChtaXNzaW5nVmlld3BvcnRUaWxlcy5zaXplKCkgfHwgbWlzc2luZ1VwZGF0ZVRp
bGVzLnNpemUoKSB8fAorICAgICAgICBkaXJ0eVZpZXdwb3J0VGlsZXMuc2l6ZSgpIHx8IGRpcnR5
VXBkYXRlVGlsZXMuc2l6ZSgpKSAvLyBzdGlsbCBzb21lIHRpbGVzIG5vdCB1cGRhdGVkCisgICAg
ICAgIHN0YXJ0VGlsZUJ1ZmZlclVwZGF0ZVRpbWVyKCk7CisgICAgZWxzZSB7CisgICAgICAgIC8v
IGFsbCB0aWxlcyBpbiBwbGFjZSwgY2FuIGRyb3Agb3ZlcmhhbmdpbmcgdGlsZXMKKyAgICAgICAg
d2hpbGUoZXhpc3RpbmdPdmVyaGFuZ2luZ1RpbGVzLnNpemUoKSkgeworICAgICAgICAgICAgcmVt
b3ZlVGlsZShleGlzdGluZ092ZXJoYW5naW5nVGlsZXMubGFzdCgpLmNvb3JkaW5hdGUoKSk7Cisg
ICAgICAgICAgICBleGlzdGluZ092ZXJoYW5naW5nVGlsZXMucmVtb3ZlTGFzdCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgbV9pblVwZGF0ZSA9IGZhbHNlOwogfQogCiB2b2lkIFRpbGVkQmFj
a2luZ1N0b3JlOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7CisgICAgdXBkYXRlVGlsZUJ1ZmZlcnMoKTsKKwogICAgIGNvbnRleHQtPnNhdmUo
KTsKICAgICAKICAgICAvLyBBc3N1bWVzIHRoZSBiYWNraW5nIHN0b3JlIGlzIHBhaW50ZWQgd2l0
aCB0aGUgc2NhbGUgdHJhbnNmb3JtIGFwcGxpZWQuCkBAIC0xNjEsNyArMjQ5LDcgQEAgdm9pZCBU
aWxlZEJhY2tpbmdTdG9yZTo6YWRqdXN0VmlzaWJsZVJlY3QoKQogICAgICAgICByZXR1cm47CiAg
ICAgbV9wcmV2aW91c1Zpc2libGVSZWN0ID0gdmlzaWJsZVJlY3Q7CiAKLSAgICBzdGFydFRpbGVD
cmVhdGlvblRpbWVyKCk7CisgICAgc3RhcnRUaWxlQnVmZmVyVXBkYXRlVGltZXIoKTsKIH0KIAog
dm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6c2V0Q29udGVudHNTY2FsZShmbG9hdCBzY2FsZSkKQEAg
LTI1OSwxMCArMzQ3LDYgQEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlVGlsZXMoKQog
ICAgIC8vIFBhaW50IHRoZSBjb250ZW50IG9mIHRoZSBuZXdseSBjcmVhdGVkIHRpbGVzCiAgICAg
aWYgKHRpbGVzVG9DcmVhdGVDb3VudCkKICAgICAgICAgdXBkYXRlVGlsZUJ1ZmZlcnMoKTsKLQot
ICAgIC8vIEtlZXAgY3JlYXRpbmcgdGlsZXMgdW50aWwgdGhlIHdob2xlIGNvdmVyUmVjdCBpcyBj
b3ZlcmVkLgotICAgIGlmIChyZXF1aXJlZFRpbGVDb3VudCkKLSAgICAgICAgbV90aWxlQ3JlYXRp
b25UaW1lci0+c3RhcnRPbmVTaG90KG1fdGlsZUNyZWF0aW9uRGVsYXkpOwogfQogCiB2b2lkIFRp
bGVkQmFja2luZ1N0b3JlOjpkcm9wT3ZlcmhhbmdpbmdUaWxlcygpCkBAIC0zNDMsNyArNDI3LDcg
QEAgSW50UmVjdCBUaWxlZEJhY2tpbmdTdG9yZTo6dGlsZVJlY3RGb3JDb29yZGluYXRlKGNvbnN0
IFRpbGU6OkNvb3JkaW5hdGUmIGNvb3JkaW4KICAgICAgICAgbV90aWxlU2l6ZS53aWR0aCgpLAog
ICAgICAgICBtX3RpbGVTaXplLmhlaWdodCgpKTsKIAotICAgIHJlY3QuaW50ZXJzZWN0KGNvbnRl
bnRzUmVjdCgpKTsKKy8vICAgIHJlY3QuaW50ZXJzZWN0KGNvbnRlbnRzUmVjdCgpKTsKICAgICBy
ZXR1cm4gcmVjdDsKIH0KICAgICAKQEAgLTM1OSw3ICs0NDMsNyBAQCB2b2lkIFRpbGVkQmFja2lu
Z1N0b3JlOjpzdGFydFRpbGVCdWZmZXJVcGRhdGVUaW1lcigpCiB7CiAgICAgaWYgKG1fdGlsZUJ1
ZmZlclVwZGF0ZVRpbWVyLT5pc0FjdGl2ZSgpIHx8IG1fY29udGVudHNGcm96ZW4pCiAgICAgICAg
IHJldHVybjsKLSAgICBtX3RpbGVCdWZmZXJVcGRhdGVUaW1lci0+c3RhcnRPbmVTaG90KDApOwor
ICAgIG1fdGlsZUJ1ZmZlclVwZGF0ZVRpbWVyLT5zdGFydE9uZVNob3QobV90aWxlVXBkYXRlRGVs
YXkpOwogfQogCiB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjp0aWxlQnVmZmVyVXBkYXRlVGltZXJG
aXJlZChUaWxlVGltZXIqKQpAQCAtMzY3LDE4ICs0NTEsNiBAQCB2b2lkIFRpbGVkQmFja2luZ1N0
b3JlOjp0aWxlQnVmZmVyVXBkYXRlVGltZXJGaXJlZChUaWxlVGltZXIqKQogICAgIHVwZGF0ZVRp
bGVCdWZmZXJzKCk7CiB9CiAKLXZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnN0YXJ0VGlsZUNyZWF0
aW9uVGltZXIoKQotewotICAgIGlmIChtX3RpbGVDcmVhdGlvblRpbWVyLT5pc0FjdGl2ZSgpIHx8
IG1fY29udGVudHNGcm96ZW4pCi0gICAgICAgIHJldHVybjsKLSAgICBtX3RpbGVDcmVhdGlvblRp
bWVyLT5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnRpbGVD
cmVhdGlvblRpbWVyRmlyZWQoVGlsZVRpbWVyKikKLXsKLSAgICBjcmVhdGVUaWxlcygpOwotfQot
CiB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjpzZXRDb250ZW50c0Zyb3plbihib29sIGZyZWV6ZSkK
IHsKICAgICBpZiAobV9jb250ZW50c0Zyb3plbiA9PSBmcmVlemUpCkBAIC0zOTQsMTEgKzQ2Niwx
NjQgQEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6c2V0Q29udGVudHNGcm96ZW4oYm9vbCBmcmVl
emUpCiAgICAgaWYgKG1fcGVuZGluZ1NjYWxlKQogICAgICAgICBjb21taXRTY2FsZUNoYW5nZSgp
OwogICAgIGVsc2UgewotICAgICAgICBzdGFydFRpbGVDcmVhdGlvblRpbWVyKCk7CiAgICAgICAg
IHN0YXJ0VGlsZUJ1ZmZlclVwZGF0ZVRpbWVyKCk7CiAgICAgfQogfQogCit2b2lkIFRpbGVkQmFj
a2luZ1N0b3JlOjpzZXRTY3JvbGxEZWx0YShjb25zdCBJbnRQb2ludCYgZGVsdGEpCit7CisgICAg
bV9zY3JvbGxEZWx0YSA9IGRlbHRhOworCisgICAgc3RhcnRUaWxlQnVmZmVyVXBkYXRlVGltZXIo
KTsKK30KKworaW50IFRpbGVkQmFja2luZ1N0b3JlOjpjb21wYXJlQ29vcmRpbmF0ZURpc3RhbmNl
UGFpckZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCit7CisgICAgY29uc3Qg
Q29vcmRpbmF0ZURpc3RhbmNlUGFpciogdmEgPSBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRl
RGlzdGFuY2VQYWlyKj4oYSk7CisgICAgY29uc3QgQ29vcmRpbmF0ZURpc3RhbmNlUGFpciogdmIg
PSBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlRGlzdGFuY2VQYWlyKj4oYik7CisgICAgcmV0
dXJuIChpbnQpKCh2YS0+ZGlzdGFuY2UoKSAtIHZiLT5kaXN0YW5jZSgpKSAqIDEwMDApOworfQor
Ly8gVGhlIHNpZ24gb2YgY29tcGFyZSBmdW5jdGlvbiBjaGFuZ2VkIHRvIHB1dCBuZWFyZXN0IGVs
ZW1lbnQgdG8gdGhlIGVuZC4KK2ludCBUaWxlZEJhY2tpbmdTdG9yZTo6Y29tcGFyZUludmVydGVk
Q29vcmRpbmF0ZURpc3RhbmNlUGFpckZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQq
IGIpCit7CisgICAgY29uc3QgQ29vcmRpbmF0ZURpc3RhbmNlUGFpciogdmEgPSBzdGF0aWNfY2Fz
dDxjb25zdCBDb29yZGluYXRlRGlzdGFuY2VQYWlyKj4oYSk7CisgICAgY29uc3QgQ29vcmRpbmF0
ZURpc3RhbmNlUGFpciogdmIgPSBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlRGlzdGFuY2VQ
YWlyKj4oYik7CisgICAgcmV0dXJuIChpbnQpKCh2Yi0+ZGlzdGFuY2UoKSAtIHZhLT5kaXN0YW5j
ZSgpKSAqIDEwMDApOworfQorCitkb3VibGUgVGlsZWRCYWNraW5nU3RvcmU6OnNjcm9sbEJpYXNl
ZFRpbGVEaXN0YW5jZShjb25zdCBJbnRQb2ludCYgdmlld3BvcnRDZW50ZXIsIGNvbnN0IEludFJl
Y3QmIHRpbGVSZWN0KQoreworICAgIGludCB4T2Zmc2V0ID0gdGlsZVJlY3QuY2VudGVyKCkueCgp
IC0gdmlld3BvcnRDZW50ZXIueCgpOworICAgIGludCB5T2Zmc2V0ID0gdGlsZVJlY3QuY2VudGVy
KCkueSgpIC0gdmlld3BvcnRDZW50ZXIueSgpOworICAgIGRvdWJsZSB4QmlhcyA9IDEuZjsKKyAg
ICBkb3VibGUgeUJpYXMgPSAxLmY7CisKKyAgICBpZiAobV9zY3JvbGxEZWx0YS54KCkgIT0gMCAm
JiB4T2Zmc2V0ICE9IDApIHsKKyAgICAgICAgZG91YmxlIHhCaWFzQWxwaGEgPSAobV9rZWVwQXJl
YU11bHRpcGxpZXIud2lkdGgoKSAtIG1fY292ZXJBcmVhTXVsdGlwbGllci53aWR0aCgpKSAvCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb3ZlckFyZWFNdWx0aXBsaWVyLndpZHRoKCkg
LyAyICsgMTsKKyAgICAgICAgaWYgKCh4T2Zmc2V0ID4gMCAmJiBtX3Njcm9sbERlbHRhLngoKSA+
IDApIHx8ICh4T2Zmc2V0IDwgMCAmJiBtX3Njcm9sbERlbHRhLngoKSA8IDApKQorICAgICAgICAg
ICAgeEJpYXMgPSAxLmYgLyB4Qmlhc0FscGhhOworICAgICAgICBlbHNlCisgICAgICAgICAgICB4
QmlhcyA9IHhCaWFzQWxwaGE7CisgICAgfQorCisgICAgaWYgKG1fc2Nyb2xsRGVsdGEueCgpICE9
IDApIHsKKyAgICAgICAgZG91YmxlIHlCaWFzQWxwaGEgPSAobV9rZWVwQXJlYU11bHRpcGxpZXIu
aGVpZ2h0KCkgLSBtX2NvdmVyQXJlYU11bHRpcGxpZXIuaGVpZ2h0KCkpIC8KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2NvdmVyQXJlYU11bHRpcGxpZXIuaGVpZ2h0KCkgLyAyICsgMTsK
KyAgICAgICAgaWYgKCh5T2Zmc2V0ID4gMCAmJiBtX3Njcm9sbERlbHRhLnkoKSA+IDApIHx8ICh5
T2Zmc2V0IDwgMCAmJiBtX3Njcm9sbERlbHRhLnkoKSA8IDApKQorICAgICAgICAgICAgeUJpYXMg
PSAxLmYgLyB5Qmlhc0FscGhhOworICAgICAgICBlbHNlCisgICAgICAgICAgICB5QmlhcyA9IHlC
aWFzQWxwaGE7CisgICAgfQorCisgICAgcmV0dXJuIHlCaWFzICogYWJzKHlPZmZzZXQpICsgeEJp
YXMgKiBhYnMoeE9mZnNldCk7Cit9CisKK3ZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnRpbGVJbnZl
bnRvcnkoY29uc3QgSW50UmVjdCYgdmlld3BvcnQsIGNvbnN0IEludFJlY3QmIHVwZGF0ZVJlY3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvb3JkaW5hdGVEaXN0YW5j
ZVZlY3RvciYgZGlydHlWaWV3cG9ydFRpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb29yZGluYXRlRGlzdGFuY2VWZWN0b3ImIG1pc3NpbmdWaWV3cG9ydFRpbGVz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb29yZGluYXRlRGlzdGFu
Y2VWZWN0b3ImIGRpcnR5VXBkYXRlVGlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvb3JkaW5hdGVEaXN0YW5jZVZlY3RvciYgbWlzc2luZ1VwZGF0ZVRpbGVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb29yZGluYXRlRGlzdGFuY2VW
ZWN0b3ImIGV4aXN0aW5nT3ZlcmhhbmdpbmdUaWxlcykKK3sKKyAgICBUaWxlOjpDb29yZGluYXRl
IHRvcExlZnQgPSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KHVwZGF0ZVJlY3QudG9wTGVmdCgpKTsK
KyAgICBUaWxlOjpDb29yZGluYXRlIGJvdHRvbVJpZ2h0ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2lu
dCh1cGRhdGVSZWN0LmJvdHRvbVJpZ2h0KCkpOworICAgIEludFBvaW50IHZpZXdQb3J0Q2VudGVy
ID0gdmlld3BvcnQuY2VudGVyKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHlDb29yZGluYXRlID0g
dG9wTGVmdC55KCk7IHlDb29yZGluYXRlIDw9IGJvdHRvbVJpZ2h0LnkoKTsgKyt5Q29vcmRpbmF0
ZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIHhDb29yZGluYXRlID0gdG9wTGVmdC54KCk7IHhD
b29yZGluYXRlIDw9IGJvdHRvbVJpZ2h0LngoKTsgKyt4Q29vcmRpbmF0ZSkgeworICAgICAgICAg
ICAgVGlsZTo6Q29vcmRpbmF0ZSBjdXJyZW50Q29vcmRpbmF0ZSh4Q29vcmRpbmF0ZSwgeUNvb3Jk
aW5hdGUpOworICAgICAgICAgICAgSW50UmVjdCBjdXJyZW50VGlsZVJlY3QgPSB0aWxlUmVjdEZv
ckNvb3JkaW5hdGUoY3VycmVudENvb3JkaW5hdGUpOworICAgICAgICAgICAgZG91YmxlIGN1cnJl
bnRUaWxlRGlzdGFuY2UgPSBzY3JvbGxCaWFzZWRUaWxlRGlzdGFuY2Uodmlld1BvcnRDZW50ZXIs
IGN1cnJlbnRUaWxlUmVjdCk7CisgICAgICAgICAgICBib29sIGlzVmlld3BvcnRUaWxlID0gdmll
d3BvcnQuaW50ZXJzZWN0cyhjdXJyZW50VGlsZVJlY3QpOworICAgICAgICAgICAgUmVmUHRyPFRp
bGU+IHRpbGUgPSB0aWxlQXQoY3VycmVudENvb3JkaW5hdGUpOworICAgICAgICAgICAgaWYgKHRp
bGUpIHsKKyAgICAgICAgICAgICAgICBpZih0aWxlLT5pc0RpcnR5KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzVmlld3BvcnRUaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGly
dHlWaWV3cG9ydFRpbGVzLmFwcGVuZChDb29yZGluYXRlRGlzdGFuY2VQYWlyKGN1cnJlbnRDb29y
ZGluYXRlLCBjdXJyZW50VGlsZURpc3RhbmNlKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRpcnR5VXBkYXRlVGlsZXMuYXBwZW5kKENvb3JkaW5h
dGVEaXN0YW5jZVBhaXIoY3VycmVudENvb3JkaW5hdGUsIGN1cnJlbnRUaWxlRGlzdGFuY2UpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGlmIChpc1ZpZXdwb3J0VGlsZSkKKyAgICAgICAgICAgICAgICAgICAgbWlzc2luZ1ZpZXdwb3J0
VGlsZXMuYXBwZW5kKENvb3JkaW5hdGVEaXN0YW5jZVBhaXIoY3VycmVudENvb3JkaW5hdGUsIGN1
cnJlbnRUaWxlRGlzdGFuY2UpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIG1pc3NpbmdVcGRhdGVUaWxlcy5hcHBlbmQoQ29vcmRpbmF0ZURpc3RhbmNlUGFpcihj
dXJyZW50Q29vcmRpbmF0ZSwgY3VycmVudFRpbGVEaXN0YW5jZSkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgcXNvcnQoZGlydHlWaWV3cG9ydFRpbGVzLmJlZ2luKCks
IGRpcnR5Vmlld3BvcnRUaWxlcy5zaXplKCksIHNpemVvZihDb29yZGluYXRlRGlzdGFuY2VQYWly
KSwKKyAgICAgICAgICAmY29tcGFyZUludmVydGVkQ29vcmRpbmF0ZURpc3RhbmNlUGFpckZvclFT
b3J0KTsKKyAgICBxc29ydChtaXNzaW5nVmlld3BvcnRUaWxlcy5iZWdpbigpLCBtaXNzaW5nVmll
d3BvcnRUaWxlcy5zaXplKCksIHNpemVvZihDb29yZGluYXRlRGlzdGFuY2VQYWlyKSwKKyAgICAg
ICAgICAmY29tcGFyZUludmVydGVkQ29vcmRpbmF0ZURpc3RhbmNlUGFpckZvclFTb3J0KTsKKyAg
ICBxc29ydChkaXJ0eVVwZGF0ZVRpbGVzLmJlZ2luKCksIGRpcnR5VXBkYXRlVGlsZXMuc2l6ZSgp
LCBzaXplb2YoQ29vcmRpbmF0ZURpc3RhbmNlUGFpciksCisgICAgICAgICAgJmNvbXBhcmVJbnZl
cnRlZENvb3JkaW5hdGVEaXN0YW5jZVBhaXJGb3JRU29ydCk7CisgICAgcXNvcnQobWlzc2luZ1Vw
ZGF0ZVRpbGVzLmJlZ2luKCksIG1pc3NpbmdVcGRhdGVUaWxlcy5zaXplKCksIHNpemVvZihDb29y
ZGluYXRlRGlzdGFuY2VQYWlyKSwKKyAgICAgICAgICAmY29tcGFyZUludmVydGVkQ29vcmRpbmF0
ZURpc3RhbmNlUGFpckZvclFTb3J0KTsKKworICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1f
dGlsZXMuZW5kKCk7CisgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFRpbGU6OkNvb3JkaW5hdGUgdGlsZUNv
b3JkaW5hdGUgPSBpdC0+c2Vjb25kLT5jb29yZGluYXRlKCk7CisgICAgICAgIEludFJlY3QgdGls
ZVJlY3QgPSB0aWxlUmVjdEZvckNvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpOworICAgICAgICBp
ZighdXBkYXRlUmVjdC5pbnRlcnNlY3RzKHRpbGVSZWN0KSkgeworICAgICAgICAgICAgZG91Ymxl
IHRpbGVEaXN0YW5jZSA9IHNjcm9sbEJpYXNlZFRpbGVEaXN0YW5jZSh2aWV3UG9ydENlbnRlciwg
dGlsZVJlY3QpOworICAgICAgICAgICAgZXhpc3RpbmdPdmVyaGFuZ2luZ1RpbGVzLmFwcGVuZChD
b29yZGluYXRlRGlzdGFuY2VQYWlyKHRpbGVDb29yZGluYXRlLCB0aWxlRGlzdGFuY2UpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHFzb3J0KGV4aXN0aW5nT3ZlcmhhbmdpbmdUaWxlcy5iZWdp
bigpLCBleGlzdGluZ092ZXJoYW5naW5nVGlsZXMuc2l6ZSgpLCBzaXplb2YoQ29vcmRpbmF0ZURp
c3RhbmNlUGFpciksCisgICAgICAgICAgJmNvbXBhcmVDb29yZGluYXRlRGlzdGFuY2VQYWlyRm9y
UVNvcnQpOworfQorCitQYXNzUmVmUHRyPFRpbGU+IFRpbGVkQmFja2luZ1N0b3JlOjpnZXRUaWxl
KGNvbnN0IFRpbGU6OkNvb3JkaW5hdGUmIG5ld0Nvb3JkaW5hdGUsIENvb3JkaW5hdGVEaXN0YW5j
ZVZlY3RvciYgb3ZlcmhhbmdpbmdUaWxlcykKK3sKKyAgICBpZihvdmVyaGFuZ2luZ1RpbGVzLnNp
emUoKSkgeworICAgICAgICBjb25zdCBUaWxlOjpDb29yZGluYXRlIG9sZENvb3JkaW5hdGUgPSBv
dmVyaGFuZ2luZ1RpbGVzLmxhc3QoKS5jb29yZGluYXRlKCk7CisgICAgICAgIG92ZXJoYW5naW5n
VGlsZXMucmVtb3ZlTGFzdCgpOworICAgICAgICBSZWZQdHI8VGlsZT4gcmV0ID0gdGlsZUF0KG9s
ZENvb3JkaW5hdGUpOworICAgICAgICByZW1vdmVUaWxlKG9sZENvb3JkaW5hdGUpOworICAgICAg
ICByZXQtPnJldXNlKG5ld0Nvb3JkaW5hdGUpOworICAgICAgICBzZXRUaWxlKG5ld0Nvb3JkaW5h
dGUsIHJldCk7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUmVm
UHRyPFRpbGU+IHJldCA9IFRpbGU6OmNyZWF0ZSh0aGlzLCBuZXdDb29yZGluYXRlKTsKKyAgICAg
ICAgc2V0VGlsZShuZXdDb29yZGluYXRlLCByZXQpOworICAgICAgICByZXR1cm4gcmV0OworICAg
IH0KK30KKworSW50UmVjdCBUaWxlZEJhY2tpbmdTdG9yZTo6Z2V0VXBkYXRlUmVjdChjb25zdCBJ
bnRSZWN0JiB2aXNpYmxlUmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IGNvdmVyUmVjdCA9IHZp
c2libGVSZWN0OworICAgIGNvdmVyUmVjdC5pbmZsYXRlWCh2aXNpYmxlUmVjdC53aWR0aCgpICog
KG1fY292ZXJBcmVhTXVsdGlwbGllci53aWR0aCgpIC0gMS5mKSAvIDIpOworICAgIGNvdmVyUmVj
dC5pbmZsYXRlWSh2aXNpYmxlUmVjdC5oZWlnaHQoKSAqIChtX2NvdmVyQXJlYU11bHRpcGxpZXIu
aGVpZ2h0KCkgLSAxLmYpIC8gMik7CisgICAgY292ZXJSZWN0LmludGVyc2VjdChjb250ZW50c1Jl
Y3QoKSk7CisKKyAgICBib29sIGluU2Nyb2xsaW5nID0gbV9zY3JvbGxEZWx0YS54KCkgPiAwIHx8
IG1fc2Nyb2xsRGVsdGEueSgpID4gMDsKKyAgICBpZiAoIWluU2Nyb2xsaW5nKQorICAgICAgICBy
ZXR1cm4gY292ZXJSZWN0OworICAgIGVsc2UgeworICAgICAgICBJbnRSZWN0IGtlZXBSZWN0ID0g
dmlzaWJsZVJlY3Q7CisgICAgICAgIGtlZXBSZWN0LmluZmxhdGVYKHZpc2libGVSZWN0LndpZHRo
KCkgKiAobV9rZWVwQXJlYU11bHRpcGxpZXIud2lkdGgoKSAtIDEuZikgLyAyKTsKKyAgICAgICAg
a2VlcFJlY3QuaW5mbGF0ZVkodmlzaWJsZVJlY3QuaGVpZ2h0KCkgKiAobV9rZWVwQXJlYU11bHRp
cGxpZXIuaGVpZ2h0KCkgLSAxLmYpIC8gMik7CisKKyAgICAgICAgSW50UmVjdCByZXQgPSBrZWVw
UmVjdDsKKyAgICAgICAgaWYgKG1fc2Nyb2xsRGVsdGEueCgpID4gMCkKKyAgICAgICAgICAgIHJl
dC5zZXRYKGNvdmVyUmVjdC54KCkpOworICAgICAgICBlbHNlIGlmIChtX3Njcm9sbERlbHRhLngo
KSA8IDApCisgICAgICAgICAgICByZXQuc2V0WChjb3ZlclJlY3QueCgpICsgY292ZXJSZWN0Lndp
ZHRoKCkgLSByZXQud2lkdGgoKSk7CisKKyAgICAgICAgaWYgKG1fc2Nyb2xsRGVsdGEueSgpID4g
MCkKKyAgICAgICAgICAgIHJldC5zZXRZKGNvdmVyUmVjdC55KCkpOworICAgICAgICBlbHNlIGlm
IChtX3Njcm9sbERlbHRhLnkoKSA8IDApCisgICAgICAgICAgICByZXQuc2V0WShjb3ZlclJlY3Qu
eSgpICsgY292ZXJSZWN0LmhlaWdodCgpIC0gcmV0LmhlaWdodCgpKTsKKyAgICAgICAgcmV0Lmlu
dGVyc2VjdChjb250ZW50c1JlY3QoKSk7CisKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9Cit9
CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvVGlsZWRCYWNraW5nU3RvcmUuaAppbmRleCAwNmM3ZmUxLi5jMjU4MmM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmgK
QEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Niw4ICs1Nyw4IEBAIHB1Ymxp
YzoKICAgICBJbnRTaXplIHRpbGVTaXplKCkgeyByZXR1cm4gbV90aWxlU2l6ZTsgfQogICAgIHZv
aWQgc2V0VGlsZVNpemUoY29uc3QgSW50U2l6ZSYpOwogICAgIAotICAgIGRvdWJsZSB0aWxlQ3Jl
YXRpb25EZWxheSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZUNyZWF0aW9uRGVsYXk7IH0KLSAgICB2
b2lkIHNldFRpbGVDcmVhdGlvbkRlbGF5KGRvdWJsZSBkZWxheSk7CisgICAgZG91YmxlIHRpbGVV
cGRhdGVEZWxheSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZVVwZGF0ZURlbGF5OyB9CisgICAgdm9p
ZCBzZXRUaWxlVXBkYXRlRGVsYXkoZG91YmxlIGRlbGF5KTsKICAgICAKICAgICAvLyBUaWxlZCBh
cmUgZHJvcHBlZCBvdXRzaWRlIHRoZSBrZWVwIGFyZWEsIGFuZCBjcmVhdGVkIGZvciBjb3ZlciBh
cmVhLiBUaGUgdmFsdWVzIGEgcmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0IHNpemUuCiAgICAgdm9p
ZCBnZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMoRmxvYXRTaXplJiBrZWVwTXVsdGlwbGll
ciwgRmxvYXRTaXplJiBjb3Zlck11bHRpcGxpZXIpCkBAIC02NSwxNiArNjYsMjkgQEAgcHVibGlj
OgogICAgICAgICBrZWVwTXVsdGlwbGllciA9IG1fa2VlcEFyZWFNdWx0aXBsaWVyOwogICAgICAg
ICBjb3Zlck11bHRpcGxpZXIgPSBtX2NvdmVyQXJlYU11bHRpcGxpZXI7CiAgICAgfQotICAgIHZv
aWQgc2V0S2VlcEFuZENvdmVyQXJlYU11bHRpcGxpZXJzKGNvbnN0IEZsb2F0U2l6ZSYga2VlcE11
bHRpcGxpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgY292ZXJNdWx0aXBsaWVyKTsgICAgCisgICAgdm9p
ZCBzZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMoY29uc3QgRmxvYXRTaXplJiBrZWVwTXVs
dGlwbGllciwgY29uc3QgRmxvYXRTaXplJiBjb3Zlck11bHRpcGxpZXIpOworICAgIHZvaWQgc2V0
U2Nyb2xsRGVsdGEoY29uc3QgSW50UG9pbnQmIGRlbHRhKTsKKyAgICB2b2lkIGRyb3BLZWVwUmVj
dFRpbGVzKCk7CiAKIHByaXZhdGU6CisgICAgc3RydWN0IENvb3JkaW5hdGVEaXN0YW5jZVBhaXIg
eworICAgICAgICBDb29yZGluYXRlRGlzdGFuY2VQYWlyKGNvbnN0IFRpbGU6OkNvb3JkaW5hdGUm
IGNvb3JkaW5hdGUsIGRvdWJsZSBkaXN0YW5jZSkgOgorICAgICAgICAgICAgICAgIG1fY29vcmRp
bmF0ZShjb29yZGluYXRlKSwgbV9kaXN0YW5jZShkaXN0YW5jZSkge30KKyAgICAgICAgY29uc3Qg
VGlsZTo6Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0
ZTsgfQorICAgICAgICBkb3VibGUgZGlzdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2Rpc3RhbmNl
OyB9CisKKyAgICAgICAgVGlsZTo6Q29vcmRpbmF0ZSAgICBtX2Nvb3JkaW5hdGU7CisgICAgICAg
IGRvdWJsZSAgICAgICAgICAgICAgbV9kaXN0YW5jZTsKKyAgICB9OworICAgIHR5cGVkZWYgVmVj
dG9yPENvb3JkaW5hdGVEaXN0YW5jZVBhaXI+IENvb3JkaW5hdGVEaXN0YW5jZVZlY3RvcjsKKyAg
ICBzdGF0aWMgaW50IGNvbXBhcmVDb29yZGluYXRlRGlzdGFuY2VQYWlyRm9yUVNvcnQoY29uc3Qg
dm9pZCosIGNvbnN0IHZvaWQqKTsKKyAgICBzdGF0aWMgaW50IGNvbXBhcmVJbnZlcnRlZENvb3Jk
aW5hdGVEaXN0YW5jZVBhaXJGb3JRU29ydChjb25zdCB2b2lkKiAsIGNvbnN0IHZvaWQqKTsKKwog
ICAgIHZvaWQgc3RhcnRUaWxlQnVmZmVyVXBkYXRlVGltZXIoKTsKLSAgICB2b2lkIHN0YXJ0VGls
ZUNyZWF0aW9uVGltZXIoKTsKICAgICAKICAgICB0eXBlZGVmIFRpbWVyPFRpbGVkQmFja2luZ1N0
b3JlPiBUaWxlVGltZXI7CiAKICAgICB2b2lkIHRpbGVCdWZmZXJVcGRhdGVUaW1lckZpcmVkKFRp
bGVUaW1lciopOwotICAgIHZvaWQgdGlsZUNyZWF0aW9uVGltZXJGaXJlZChUaWxlVGltZXIqKTsK
ICAgICAKICAgICB2b2lkIHVwZGF0ZVRpbGVCdWZmZXJzKCk7CiAgICAgdm9pZCBjcmVhdGVUaWxl
cygpOwpAQCAtODcsNiArMTAxLDcgQEAgcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPFRpbGU+IHRp
bGVBdChjb25zdCBUaWxlOjpDb29yZGluYXRlJikgY29uc3Q7CiAgICAgdm9pZCBzZXRUaWxlKGNv
bnN0IFRpbGU6OkNvb3JkaW5hdGUmIGNvb3JkaW5hdGUsIFBhc3NSZWZQdHI8VGlsZT4gdGlsZSk7
CiAgICAgdm9pZCByZW1vdmVUaWxlKGNvbnN0IFRpbGU6OkNvb3JkaW5hdGUmIGNvb3JkaW5hdGUp
OworICAgIFBhc3NSZWZQdHI8VGlsZT4gZ2V0VGlsZShjb25zdCBUaWxlOjpDb29yZGluYXRlJiBu
ZXdDb29yZGluYXRlLCBDb29yZGluYXRlRGlzdGFuY2VWZWN0b3ImIG92ZXJoYW5naW5nVGlsZXMp
OwogCiAgICAgSW50UmVjdCBtYXBUb0NvbnRlbnRzKGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAg
ICBJbnRSZWN0IG1hcEZyb21Db250ZW50cyhjb25zdCBJbnRSZWN0JikgY29uc3Q7CkBAIC05Niw4
ICsxMTEsMTYgQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IHRpbGVSZWN0Rm9yQ29vcmRpbmF0ZShj
b25zdCBUaWxlOjpDb29yZGluYXRlJikgY29uc3Q7CiAgICAgVGlsZTo6Q29vcmRpbmF0ZSB0aWxl
Q29vcmRpbmF0ZUZvclBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAgICAgZG91YmxlIHRp
bGVEaXN0YW5jZShjb25zdCBJbnRSZWN0JiB2aWV3cG9ydCwgY29uc3QgVGlsZTo6Q29vcmRpbmF0
ZSYpOworICAgIGRvdWJsZSBzY3JvbGxCaWFzZWRUaWxlRGlzdGFuY2UoY29uc3QgSW50UG9pbnQm
IHZpZXdwb3J0Q2VudGVyLCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCk7CiAgICAgCiAgICAgdm9p
ZCBwYWludENoZWNrZXJQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmLCBj
b25zdCBUaWxlOjpDb29yZGluYXRlJik7CisgICAgdm9pZCB0aWxlSW52ZW50b3J5KGNvbnN0IElu
dFJlY3QmIHZpZXdwb3J0LCBjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LAorICAgICAgICAgICAg
ICAgICAgICAgICBDb29yZGluYXRlRGlzdGFuY2VWZWN0b3ImIGRpcnR5Vmlld3BvcnRUaWxlcywK
KyAgICAgICAgICAgICAgICAgICAgICAgQ29vcmRpbmF0ZURpc3RhbmNlVmVjdG9yJiBtaXNzaW5n
Vmlld3BvcnRUaWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgQ29vcmRpbmF0ZURpc3RhbmNl
VmVjdG9yJiBkaXJ0eVVwZGF0ZVRpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICBDb29yZGlu
YXRlRGlzdGFuY2VWZWN0b3ImIG1pc3NpbmdVcGRhdGVUaWxlcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgQ29vcmRpbmF0ZURpc3RhbmNlVmVjdG9yJiBleGlzdGluZ092ZXJoYW5naW5nVGlsZXMp
OworICAgIEludFJlY3QgZ2V0VXBkYXRlUmVjdChjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAKIHBy
aXZhdGU6CiAgICAgVGlsZWRCYWNraW5nU3RvcmVDbGllbnQqIG1fY2xpZW50OwpAQCAtMTA2LDEw
ICsxMjksOSBAQCBwcml2YXRlOgogICAgIFRpbGVNYXAgbV90aWxlczsKIAogICAgIFRpbGVUaW1l
ciogbV90aWxlQnVmZmVyVXBkYXRlVGltZXI7Ci0gICAgVGlsZVRpbWVyKiBtX3RpbGVDcmVhdGlv
blRpbWVyOwogCiAgICAgSW50U2l6ZSBtX3RpbGVTaXplOwotICAgIGRvdWJsZSBtX3RpbGVDcmVh
dGlvbkRlbGF5OworICAgIGRvdWJsZSBtX3RpbGVVcGRhdGVEZWxheTsKICAgICBGbG9hdFNpemUg
bV9rZWVwQXJlYU11bHRpcGxpZXI7CiAgICAgRmxvYXRTaXplIG1fY292ZXJBcmVhTXVsdGlwbGll
cjsKICAgICAKQEAgLTExOSw2ICsxNDEsMTAgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9jb250
ZW50c0Zyb3plbjsKIAorICAgIEludFBvaW50IG1fc2Nyb2xsRGVsdGE7CisgICAgaW50IG1fdXBk
YXRlVGltZU91dDsKKyAgICBib29sIG1faW5VcGRhdGU7CisKICAgICBmcmllbmQgY2xhc3MgVGls
ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzTGF5ZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0xheWVyUXQuY3BwCmluZGV4IDBkN2FhNDUuLmIzNjJhNGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0
LmNwcApAQCAtMzkwLDcgKzM5MCw3IEBAIFFQaXhtYXAgR3JhcGhpY3NMYXllclF0SW1wbDo6cmVj
YWNoZShjb25zdCBRUmVnaW9uJiByZWdpb25Ub1VwZGF0ZSkKICAgICBjb25zdCBib29sIHJlcXVp
cmVzVGlsaW5nID0gKG1fc3RhdGUuZHJhd3NDb250ZW50ICYmIG1fY3VycmVudENvbnRlbnQuY29u
dGVudFR5cGUgPT0gSFRNTENvbnRlbnRUeXBlKSAmJiAobV9zaXplLndpZHRoKCkgPiBHUkFQSElD
U19MQVlFUl9USUxJTkdfVEhSRVNIT0xEIHx8IG1fc2l6ZS5oZWlnaHQoKSA+IEdSQVBISUNTX0xB
WUVSX1RJTElOR19USFJFU0hPTEQpOwogICAgIGlmIChyZXF1aXJlc1RpbGluZyAmJiAhbV90aWxl
ZEJhY2tpbmdTdG9yZSkgewogICAgICAgICBtX3RpbGVkQmFja2luZ1N0b3JlID0gbmV3IFRpbGVk
QmFja2luZ1N0b3JlKHRoaXMpOwotICAgICAgICBtX3RpbGVkQmFja2luZ1N0b3JlLT5zZXRUaWxl
Q3JlYXRpb25EZWxheSgwKTsKKyAgICAgICAgbV90aWxlZEJhY2tpbmdTdG9yZS0+c2V0VGlsZVVw
ZGF0ZURlbGF5KDApOwogICAgICAgICBzZXRGbGFnKEl0ZW1Vc2VzRXh0ZW5kZWRTdHlsZU9wdGlv
biwgdHJ1ZSk7CiAgICAgfSBlbHNlIGlmICghcmVxdWlyZXNUaWxpbmcgJiYgbV90aWxlZEJhY2tp
bmdTdG9yZSkgewogICAgICAgICBkZWxldGUgbV90aWxlZEJhY2tpbmdTdG9yZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RpbGVRdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UaWxlUXQuY3BwCmluZGV4IDA5NmNlMTQu
LmZiYTM1NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1RpbGVRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVGls
ZVF0LmNwcApAQCAtNjUsNiArNjUsMTMgQEAgVGlsZTo6VGlsZShUaWxlZEJhY2tpbmdTdG9yZSog
YmFja2luZ1N0b3JlLCBjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKIHsKIH0KIAor
dm9pZCBUaWxlOjpyZXVzZShjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKK3sKKyAg
ICBtX2Nvb3JkaW5hdGUgPSB0aWxlQ29vcmRpbmF0ZTsKKyAgICBtX3JlY3QgPSBtX2JhY2tpbmdT
dG9yZS0+dGlsZVJlY3RGb3JDb29yZGluYXRlKG1fY29vcmRpbmF0ZSk7CisgICAgKm1fZGlydHlS
ZWdpb24gPSBRUmVnaW9uKG1fcmVjdCk7Cit9CisKIFRpbGU6On5UaWxlKCkKIHsKICAgICBkZWxl
dGUgbV9idWZmZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKaW5kZXggZTgwYWFjNS4uMjY2
NDMzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcApAQCAtMTE3MSwxMiArMTE3MSwxMiBA
QCB2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6ZHluYW1pY1Byb3BlcnR5Q2hhbmdlRXZlbnQoUUR5bmFt
aWNQcm9wZXJ0eUNoYW5nZUV2ZW50KiBldgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBR
U2l6ZSB0aWxlU2l6ZSA9IHEtPnByb3BlcnR5KCJfcV9UaWxlZEJhY2tpbmdTdG9yZVRpbGVTaXpl
IikudG9TaXplKCk7CiAgICAgICAgIGZyYW1lLT50aWxlZEJhY2tpbmdTdG9yZSgpLT5zZXRUaWxl
U2l6ZSh0aWxlU2l6ZSk7Ci0gICAgfSBlbHNlIGlmIChldmVudC0+cHJvcGVydHlOYW1lKCkgPT0g
Il9xX1RpbGVkQmFja2luZ1N0b3JlVGlsZUNyZWF0aW9uRGVsYXkiKSB7CisgICAgfSBlbHNlIGlm
IChldmVudC0+cHJvcGVydHlOYW1lKCkgPT0gIl9xX1RpbGVkQmFja2luZ1N0b3JlVGlsZVVwZGF0
ZURlbGF5IikgewogICAgICAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBRV2ViRnJhbWVQcml2
YXRlOjpjb3JlKHEtPm1haW5GcmFtZSgpKTsKICAgICAgICAgaWYgKCFmcmFtZS0+dGlsZWRCYWNr
aW5nU3RvcmUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaW50IHRpbGVDcmVhdGlv
bkRlbGF5ID0gcS0+cHJvcGVydHkoIl9xX1RpbGVkQmFja2luZ1N0b3JlVGlsZUNyZWF0aW9uRGVs
YXkiKS50b0ludCgpOwotICAgICAgICBmcmFtZS0+dGlsZWRCYWNraW5nU3RvcmUoKS0+c2V0VGls
ZUNyZWF0aW9uRGVsYXkoc3RhdGljX2Nhc3Q8ZG91YmxlPih0aWxlQ3JlYXRpb25EZWxheSkgLyAx
MDAwLik7CisgICAgICAgIGludCB0aWxlVXBkYXRlRGVsYXkgPSBxLT5wcm9wZXJ0eSgiX3FfVGls
ZWRCYWNraW5nU3RvcmVUaWxlVXBkYXRlRGVsYXkiKS50b0ludCgpOworICAgICAgICBmcmFtZS0+
dGlsZWRCYWNraW5nU3RvcmUoKS0+c2V0VGlsZVVwZGF0ZURlbGF5KHN0YXRpY19jYXN0PGRvdWJs
ZT4odGlsZVVwZGF0ZURlbGF5KSAvIDEwMDAuKTsKICAgICB9IGVsc2UgaWYgKGV2ZW50LT5wcm9w
ZXJ0eU5hbWUoKSA9PSAiX3FfVGlsZWRCYWNraW5nU3RvcmVLZWVwQXJlYU11bHRpcGxpZXIiKSB7
CiAgICAgICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUo
cS0+bWFpbkZyYW1lKCkpOwogICAgICAgICBpZiAoIWZyYW1lLT50aWxlZEJhY2tpbmdTdG9yZSgp
KQpAQCAtMTE5Nyw2ICsxMTk3LDEzIEBAIHZvaWQgUVdlYlBhZ2VQcml2YXRlOjpkeW5hbWljUHJv
cGVydHlDaGFuZ2VFdmVudChRRHluYW1pY1Byb3BlcnR5Q2hhbmdlRXZlbnQqIGV2CiAgICAgICAg
IFFTaXplRiBxU2l6ZSA9IHEtPnByb3BlcnR5KCJfcV9UaWxlZEJhY2tpbmdTdG9yZUNvdmVyQXJl
YU11bHRpcGxpZXIiKS50b1NpemVGKCk7CiAgICAgICAgIGNvdmVyTXVsdGlwbGllciA9IEZsb2F0
U2l6ZShxU2l6ZS53aWR0aCgpLCBxU2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIGZyYW1lLT50aWxl
ZEJhY2tpbmdTdG9yZSgpLT5zZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMoa2VlcE11bHRp
cGxpZXIsIGNvdmVyTXVsdGlwbGllcik7CisgICAgfSBlbHNlIGlmIChldmVudC0+cHJvcGVydHlO
YW1lKCkgPT0gIl9xX1RpbGVkQmFja2luZ1N0b3JlU2Nyb2xsRGVsdGEiKSB7CisgICAgICAgIFdl
YkNvcmU6OkZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUocS0+bWFpbkZyYW1l
KCkpOworICAgICAgICBUaWxlZEJhY2tpbmdTdG9yZSogc3RvcmUgPSBmcmFtZS0+dGlsZWRCYWNr
aW5nU3RvcmUoKTsKKyAgICAgICAgaWYoIXN0b3JlKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBRUG9pbnQgZGVsdGEgPSBxLT5wcm9wZXJ0eSgiX3FfVGlsZWRCYWNraW5nU3RvcmVTY3Jv
bGxEZWx0YSIpLnRvUG9pbnQoKTsKKyAgICAgICAgc3RvcmUtPnNldFNjcm9sbERlbHRhKEludFBv
aW50KGRlbHRhKSk7CiAgICAgfQogI2VuZGlmCiAgICAgZWxzZSBpZiAoZXZlbnQtPnByb3BlcnR5
TmFtZSgpID09ICJfcV93ZWJJbnNwZWN0b3JTZXJ2ZXJQb3J0IikgewpkaWZmIC0tZ2l0IGEvVG9v
bHMvUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5jcHAgYi9Ub29scy9RdFRlc3RCcm93c2Vy
L2xhdW5jaGVyd2luZG93LmNwcAppbmRleCAwOTJiYmE3Li5jMmZhYmFiIDEwMDY0NAotLS0gYS9U
b29scy9RdFRlc3RCcm93c2VyL2xhdW5jaGVyd2luZG93LmNwcAorKysgYi9Ub29scy9RdFRlc3RC
cm93c2VyL2xhdW5jaGVyd2luZG93LmNwcApAQCAtMTQ5LDYgKzE0OSwxMCBAQCB2b2lkIExhdW5j
aGVyV2luZG93OjphcHBseVByZWZzKCkKICAgICBRV2ViU2V0dGluZ3MqIHNldHRpbmdzID0gcGFn
ZSgpLT5zZXR0aW5ncygpOwogICAgIHNldHRpbmdzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdz
OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwgbV93aW5kb3dPcHRpb25zLnVzZUNvbXBv
c2l0aW5nKTsKICAgICBzZXR0aW5ncy0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6VGlsZWRC
YWNraW5nU3RvcmVFbmFibGVkLCBtX3dpbmRvd09wdGlvbnMudXNlVGlsZWRCYWNraW5nU3RvcmUp
OworICAgIGlmIChtX3dpbmRvd09wdGlvbnMudXNlVGlsZWRCYWNraW5nU3RvcmUpIHsKKyAgICAg
ICAgcGFnZSgpLT5zZXRQcm9wZXJ0eSgiX3FfVGlsZWRCYWNraW5nU3RvcmVUaWxlU2l6ZSIsIFFT
aXplKDI1NiwgMjU2KSk7CisgICAgfQorCiAgICAgc2V0dGluZ3MtPnNldEF0dHJpYnV0ZShRV2Vi
U2V0dGluZ3M6OkZyYW1lRmxhdHRlbmluZ0VuYWJsZWQsIG1fd2luZG93T3B0aW9ucy51c2VGcmFt
ZUZsYXR0ZW5pbmcpOwogICAgIHNldHRpbmdzLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpX
ZWJHTEVuYWJsZWQsIG1fd2luZG93T3B0aW9ucy51c2VXZWJHTCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96333</attachid>
            <date>2011-06-07 17:26:46 -0700</date>
            <delta_ts>2011-06-07 17:44:47 -0700</delta_ts>
            <desc>Patch 1: Add API to notify tiling about scrolling direction. Bias tile distance against scrolling direction.</desc>
            <filename>tiles_p1.diff</filename>
            <type>text/plain</type>
            <size>6869</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">Y29tbWl0IDM2YWMxMjY3ZjRjN2I5MGY4Y2M4ZDJjMGU2NDIyZmZkNDg1MTJmZmYKQXV0aG9yOiBW
aWF0Y2hlc2xhdiBPc3RhcGVua28gPG9zdGFwZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+CkRh
dGU6ICAgTW9uIE1heSAyMyAwMTozNTozMSAyMDExIC0wNDAwCgogICAgUGFydDEgb2YgdGlsZXMg
cGFpbnRpbmcgcmVkZXNpbmcuCiAgICBBZGQgQVBJIHRvIG5vdGlmeSB0aWxpbmcgYWJvdXQgc2Ny
b2xsaW5nIGRpcmVjdGlvbi4gQmlhcyB0aWxlIGRpc3RhbmNlCiAgICBhZ2FpbnN0IHNjcm9sbGlu
ZyBkaXJlY3Rpb24uCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGEyOWYyMDQuLmVmY2RjYWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOSBAQAorMjAxMS0wNS0yMiAgVmlhdGNoZXNsYXYgT3N0YXBlbmtvICA8b3N0
YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFZlcnkgamVya3kgc2Nyb2xsaW5nIGJlY2F1c2Ug
b2YgYmxvY2tpbmcgaW4gdGlsZWQgYmFja2luZyBzdG9yZS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzODk0CisKKyAgICAgICAgUGFydDEgb2YgdGls
ZXMgcGFpbnRpbmcgcmVkZXNpbmcuCisgICAgICAgIEFkZCBBUEkgdG8gbm90aWZ5IHRpbGluZyBh
Ym91dCBzY3JvbGxpbmcgZGlyZWN0aW9uLiBCaWFzIHRpbGUgZGlzdGFuY2UgYWdhaW5zdAorICAg
ICAgICBzY3JvbGxpbmcgZGlyZWN0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
VGlsZWRCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3Rv
cmU6OnRpbGVEaXN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZTo6
c2V0U2Nyb2xsRGVsdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2lu
Z1N0b3JlLmg6CisKIDIwMTEtMDUtMjIgIEFuZHJldyBXYXNvbiAgPHJlY3RhbG9naWNAcmVjdGFs
b2dpYy5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmVuamFtaW4gUG91bGFpbi4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3Jl
LmNwcAppbmRleCBhYzdlOWM2Li45ZjQxM2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCkBAIC0xODUsMTUgKzE4
NSw0MCBAQCB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjpjb21taXRTY2FsZUNoYW5nZSgpCiAKIGRv
dWJsZSBUaWxlZEJhY2tpbmdTdG9yZTo6dGlsZURpc3RhbmNlKGNvbnN0IEludFJlY3QmIHZpZXdw
b3J0LCBjb25zdCBUaWxlOjpDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKIHsKLSAgICBpZiAo
dmlld3BvcnQuaW50ZXJzZWN0cyh0aWxlUmVjdEZvckNvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUp
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgSW50UG9pbnQgdmlld0NlbnRlciA9IHZp
ZXdwb3J0LmxvY2F0aW9uKCkgKyBJbnRTaXplKHZpZXdwb3J0LndpZHRoKCkgLyAyLCB2aWV3cG9y
dC5oZWlnaHQoKSAvIDIpOwotICAgIFRpbGU6OkNvb3JkaW5hdGUgY2VudGVyQ29vcmRpbmF0ZSA9
IHRpbGVDb29yZGluYXRlRm9yUG9pbnQodmlld0NlbnRlcik7Ci0gICAgCisgICAgSW50UG9pbnQg
dmlld3BvcnRDZW50ZXIgPSB2aWV3cG9ydC5sb2NhdGlvbigpICsgSW50U2l6ZSh2aWV3cG9ydC53
aWR0aCgpIC8gMiwgdmlld3BvcnQuaGVpZ2h0KCkgLyAyKTsKKyAgICBJbnRSZWN0IHRpbGVSZWN0
ID0gdGlsZVJlY3RGb3JDb29yZGluYXRlKHRpbGVDb29yZGluYXRlKTsKKyAgICBpbnQgeE9mZnNl
dCA9IHRpbGVSZWN0LmNlbnRlcigpLngoKSAtIHZpZXdwb3J0Q2VudGVyLngoKTsKKyAgICBpbnQg
eU9mZnNldCA9IHRpbGVSZWN0LmNlbnRlcigpLnkoKSAtIHZpZXdwb3J0Q2VudGVyLnkoKTsKICAg
ICAvLyBNYW5oYXR0YW4gZGlzdGFuY2UsIGJpYXNlZCBzbyB0aGF0IHZlcnRpY2FsIGRpc3RhbmNl
cyBhcmUgc2hvcnRlci4KICAgICBjb25zdCBkb3VibGUgaG9yaXpvbnRhbEJpYXMgPSAxLjM7Ci0g
ICAgcmV0dXJuIGFicyhjZW50ZXJDb29yZGluYXRlLnkoKSAtIHRpbGVDb29yZGluYXRlLnkoKSkg
KyBob3Jpem9udGFsQmlhcyAqIGFicyhjZW50ZXJDb29yZGluYXRlLngoKSAtIHRpbGVDb29yZGlu
YXRlLngoKSk7CisgICAgZG91YmxlIHhCaWFzID0gaG9yaXpvbnRhbEJpYXM7CisgICAgZG91Ymxl
IHlCaWFzID0gMS5mOworCisgICAgLy8gdmlld3BvcnQgY292ZXJpbmcgdGlsZSBzaG91bGQgYmUg
Y2xvc2VyCisgICAgaWYgKHZpZXdwb3J0LmludGVyc2VjdHModGlsZVJlY3RGb3JDb29yZGluYXRl
KHRpbGVDb29yZGluYXRlKSkpIHsKKyAgICAgICAgeEJpYXMgLz0gMjsKKyAgICAgICAgeUJpYXMg
Lz0gMjsKKyAgICB9CisgICAgCisgICAgaWYgKG1fc2Nyb2xsRGVsdGEueCgpICE9IDAgJiYgeE9m
ZnNldCAhPSAwKSB7CisgICAgICAgIGRvdWJsZSB4Qmlhc0FscGhhID0gKG1fa2VlcEFyZWFNdWx0
aXBsaWVyLndpZHRoKCkgLSBtX2NvdmVyQXJlYU11bHRpcGxpZXIud2lkdGgoKSkgLworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fY292ZXJBcmVhTXVsdGlwbGllci53aWR0aCgpIC8gMiAr
IDE7CisgICAgICAgIGlmICgoeE9mZnNldCA+IDAgJiYgbV9zY3JvbGxEZWx0YS54KCkgPiAwKSB8
fCAoeE9mZnNldCA8IDAgJiYgbV9zY3JvbGxEZWx0YS54KCkgPCAwKSkKKyAgICAgICAgICAgIHhC
aWFzID0gMS5mIC8geEJpYXNBbHBoYTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgeEJpYXMg
PSB4Qmlhc0FscGhhOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbERlbHRhLngoKSAhPSAwKSB7
CisgICAgICAgIGRvdWJsZSB5Qmlhc0FscGhhID0gKG1fa2VlcEFyZWFNdWx0aXBsaWVyLmhlaWdo
dCgpIC0gbV9jb3ZlckFyZWFNdWx0aXBsaWVyLmhlaWdodCgpKSAvCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jb3ZlckFyZWFNdWx0aXBsaWVyLmhlaWdodCgpIC8gMiArIDE7CisgICAg
ICAgIGlmICgoeU9mZnNldCA+IDAgJiYgbV9zY3JvbGxEZWx0YS55KCkgPiAwKSB8fCAoeU9mZnNl
dCA8IDAgJiYgbV9zY3JvbGxEZWx0YS55KCkgPCAwKSkKKyAgICAgICAgICAgIHlCaWFzID0gMS5m
IC8geUJpYXNBbHBoYTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgeUJpYXMgPSB5Qmlhc0Fs
cGhhOworICAgIH0KKworICAgIHJldHVybiB5QmlhcyAqIGFicyh5T2Zmc2V0KSArIHhCaWFzICog
YWJzKHhPZmZzZXQpOwogfQogCiB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGVUaWxlcygp
CkBAIC00MDAsNiArNDI1LDEzIEBAIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnNldENvbnRlbnRz
RnJvemVuKGJvb2wgZnJlZXplKQogICAgIH0KIH0KIAordm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6
c2V0U2Nyb2xsRGVsdGEoY29uc3QgSW50UG9pbnQmIGRlbHRhKQoreworICAgIG1fc2Nyb2xsRGVs
dGEgPSBkZWx0YTsKKworICAgIHN0YXJ0VGlsZUNyZWF0aW9uVGltZXIoKTsKK30KKwogfQogCiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVk
QmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJh
Y2tpbmdTdG9yZS5oCmluZGV4IDA2YzdmZTEuLjQ3ZmZmZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuaApAQCAtNjUsNyAr
NjUsOCBAQCBwdWJsaWM6CiAgICAgICAgIGtlZXBNdWx0aXBsaWVyID0gbV9rZWVwQXJlYU11bHRp
cGxpZXI7CiAgICAgICAgIGNvdmVyTXVsdGlwbGllciA9IG1fY292ZXJBcmVhTXVsdGlwbGllcjsK
ICAgICB9Ci0gICAgdm9pZCBzZXRLZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMoY29uc3QgRmxv
YXRTaXplJiBrZWVwTXVsdGlwbGllciwgY29uc3QgRmxvYXRTaXplJiBjb3Zlck11bHRpcGxpZXIp
OyAgICAKKyAgICB2b2lkIHNldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyhjb25zdCBGbG9h
dFNpemUmIGtlZXBNdWx0aXBsaWVyLCBjb25zdCBGbG9hdFNpemUmIGNvdmVyTXVsdGlwbGllcik7
CisgICAgdm9pZCBzZXRTY3JvbGxEZWx0YShjb25zdCBJbnRQb2ludCYgZGVsdGEpOwogCiBwcml2
YXRlOgogICAgIHZvaWQgc3RhcnRUaWxlQnVmZmVyVXBkYXRlVGltZXIoKTsKQEAgLTk2LDcgKzk3
LDcgQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IHRpbGVSZWN0Rm9yQ29vcmRpbmF0ZShjb25zdCBU
aWxlOjpDb29yZGluYXRlJikgY29uc3Q7CiAgICAgVGlsZTo6Q29vcmRpbmF0ZSB0aWxlQ29vcmRp
bmF0ZUZvclBvaW50KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAgICAgZG91YmxlIHRpbGVEaXN0
YW5jZShjb25zdCBJbnRSZWN0JiB2aWV3cG9ydCwgY29uc3QgVGlsZTo6Q29vcmRpbmF0ZSYpOwot
ICAgIAorCiAgICAgdm9pZCBwYWludENoZWNrZXJQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEludFJlY3QmLCBjb25zdCBUaWxlOjpDb29yZGluYXRlJik7CiAKIHByaXZhdGU6CkBAIC0x
MTgsNiArMTE5LDcgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX3BlbmRpbmdTY2FsZTsKIAogICAg
IGJvb2wgbV9jb250ZW50c0Zyb3plbjsKKyAgICBJbnRQb2ludCBtX3Njcm9sbERlbHRhOwogCiAg
ICAgZnJpZW5kIGNsYXNzIFRpbGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4
IDM2NjUyY2QuLjQ5NTIxNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJw
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKQEAgLTEyMTIs
NiArMTIxMiwxMyBAQCB2b2lkIFFXZWJQYWdlUHJpdmF0ZTo6ZHluYW1pY1Byb3BlcnR5Q2hhbmdl
RXZlbnQoUUR5bmFtaWNQcm9wZXJ0eUNoYW5nZUV2ZW50KiBldgogICAgICAgICBRU2l6ZUYgcVNp
emUgPSBxLT5wcm9wZXJ0eSgiX3FfVGlsZWRCYWNraW5nU3RvcmVDb3ZlckFyZWFNdWx0aXBsaWVy
IikudG9TaXplRigpOwogICAgICAgICBjb3Zlck11bHRpcGxpZXIgPSBGbG9hdFNpemUocVNpemUu
d2lkdGgoKSwgcVNpemUuaGVpZ2h0KCkpOwogICAgICAgICBmcmFtZS0+dGlsZWRCYWNraW5nU3Rv
cmUoKS0+c2V0S2VlcEFuZENvdmVyQXJlYU11bHRpcGxpZXJzKGtlZXBNdWx0aXBsaWVyLCBjb3Zl
ck11bHRpcGxpZXIpOworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnByb3BlcnR5TmFtZSgpID09ICJf
cV9UaWxlZEJhY2tpbmdTdG9yZVNjcm9sbERlbHRhIikgeworICAgICAgICBXZWJDb3JlOjpGcmFt
ZSogZnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKHEtPm1haW5GcmFtZSgpKTsKKyAgICAg
ICAgVGlsZWRCYWNraW5nU3RvcmUqIHN0b3JlID0gZnJhbWUtPnRpbGVkQmFja2luZ1N0b3JlKCk7
CisgICAgICAgIGlmKCFzdG9yZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUVBvaW50
IGRlbHRhID0gcS0+cHJvcGVydHkoIl9xX1RpbGVkQmFja2luZ1N0b3JlU2Nyb2xsRGVsdGEiKS50
b1BvaW50KCk7CisgICAgICAgIHN0b3JlLT5zZXRTY3JvbGxEZWx0YShJbnRQb2ludChkZWx0YSkp
OwogICAgIH0KICNlbmRpZgogICAgIGVsc2UgaWYgKGV2ZW50LT5wcm9wZXJ0eU5hbWUoKSA9PSAi
X3Ffd2ViSW5zcGVjdG9yU2VydmVyUG9ydCIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggYTVlMzhkMC4u
ODYzYWUyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0wNS0yMiAgVmlh
dGNoZXNsYXYgT3N0YXBlbmtvICA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFZlcnkg
amVya3kgc2Nyb2xsaW5nIGJlY2F1c2Ugb2YgYmxvY2tpbmcgaW4gdGlsZWQgYmFja2luZyBzdG9y
ZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzODk0
CisKKyAgICAgICAgUGFydDEgb2YgdGlsZXMgcGFpbnRpbmcgcmVkZXNpbmcuCisgICAgICAgIEFk
ZCBBUEkgdG8gbm90aWZ5IHRpbGluZyBhYm91dCBzY3JvbGxpbmcgZGlyZWN0aW9uLiBCaWFzIHRp
bGUgZGlzdGFuY2UgYWdhaW5zdAorICAgICAgICBzY3JvbGxpbmcgZGlyZWN0aW9uLgorCisgICAg
ICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6ZHluYW1p
Y1Byb3BlcnR5Q2hhbmdlRXZlbnQpOgorCiAyMDExLTA1LTIyICBIdWkgSHVhbmcgIDxodWkuMi5o
dWFuZ0Bub2tpYS5jb20+LCBZaSBTaGVuICA8eWkuNC5zaGVuQG5va2lhLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBMYXN6bG8gR29tYm9zLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96334</attachid>
            <date>2011-06-07 17:27:59 -0700</date>
            <delta_ts>2011-06-09 16:25:44 -0700</delta_ts>
            <desc>Patch 2: Remove tile creation timer and do tile creation together with tile updates.</desc>
            <filename>tiles_p2.diff</filename>
            <type>text/plain</type>
            <size>11721</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">Y29tbWl0IDljNzBiNWI3NDE4MmQ3ODJmNjYzMmY1ZmU5MzY0NzFkYzIwMWVmYzcKQXV0aG9yOiBW
aWF0Y2hlc2xhdiBPc3RhcGVua28gPG9zdGFwZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+CkRh
dGU6ICAgTW9uIE1heSAyMyAxMjozNDo0NCAyMDExIC0wNDAwCgogICAgUGFydDIgb2YgdGlsZXMg
cGFpbnRpbmcgcmVkZXNpZ24uCiAgICBSZW1vdmUgdGlsZSBjcmVhdGlvbiB0aW1lciBhbmQgZG8g
dGlsZSBjcmVhdGlvbiB0b2dldGhlciB3aXRoIHRpbGUKICAgIHVwZGF0ZXMuCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGVmY2RjYWYuLmMyMTg4MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMS0w
NS0yMyAgVmlhdGNoZXNsYXYgT3N0YXBlbmtvICA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lh
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
UXRdIFZlcnkgamVya3kgc2Nyb2xsaW5nIGJlY2F1c2Ugb2YgYmxvY2tpbmcgaW4gdGlsZWQgYmFj
a2luZyBzdG9yZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTUzODk0CisKKwlQYXJ0MiBvZiB0aWxlcyBwYWludGluZyByZWRlc2lnbi4KKwlSZW1vdmUg
dGlsZSBjcmVhdGlvbiB0aW1lciBhbmQgZG8gdGlsZSBjcmVhdGlvbiB0b2dldGhlciB3aXRoIHRp
bGUgdXBkYXRlcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0
b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlOjpUaWxlZEJhY2tp
bmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZTo6flRpbGVkQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlOjpzZXRUaWxl
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZTo6c2V0VGlsZVVwZGF0
ZURlbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlOjpzZXRLZWVwQW5k
Q292ZXJBcmVhTXVsdGlwbGllcnMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3Rv
cmU6OnVwZGF0ZVRpbGVCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0
b3JlOjphZGp1c3RWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEJhY2tpbmdT
dG9yZTo6Y29tbWl0U2NhbGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5n
U3RvcmU6OmNyZWF0ZVRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3Jl
OjpzdGFydFRpbGVCdWZmZXJVcGRhdGVUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEJh
Y2tpbmdTdG9yZTo6c2V0Q29udGVudHNGcm96ZW4pOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRC
YWNraW5nU3RvcmU6OnNldFNjcm9sbERlbHRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9UaWxlZEJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3Rv
cmU6OnRpbGVVcGRhdGVEZWxheSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NMYXllclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJRdEltcGw6
OnJlY2FjaGUpOgorCiAyMDExLTA1LTIyICBWaWF0Y2hlc2xhdiBPc3RhcGVua28gIDxvc3RhcGVu
a28udmlhdGNoZXNsYXZAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGls
ZWRCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGls
ZWRCYWNraW5nU3RvcmUuY3BwCmluZGV4IDlmNDEzYzMuLjExMDE4NDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAK
QEAgLTMzLDkgKzMzLDggQEAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0VGlsZUhlaWdodCA9IDUx
MjsKIFRpbGVkQmFja2luZ1N0b3JlOjpUaWxlZEJhY2tpbmdTdG9yZShUaWxlZEJhY2tpbmdTdG9y
ZUNsaWVudCogY2xpZW50KQogICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICwgbV90aWxlQnVm
ZmVyVXBkYXRlVGltZXIobmV3IFRpbGVUaW1lcih0aGlzLCAmVGlsZWRCYWNraW5nU3RvcmU6OnRp
bGVCdWZmZXJVcGRhdGVUaW1lckZpcmVkKSkKLSAgICAsIG1fdGlsZUNyZWF0aW9uVGltZXIobmV3
IFRpbGVUaW1lcih0aGlzLCAmVGlsZWRCYWNraW5nU3RvcmU6OnRpbGVDcmVhdGlvblRpbWVyRmly
ZWQpKQogICAgICwgbV90aWxlU2l6ZShkZWZhdWx0VGlsZVdpZHRoLCBkZWZhdWx0VGlsZUhlaWdo
dCkKLSAgICAsIG1fdGlsZUNyZWF0aW9uRGVsYXkoMC4wMSkKKyAgICAsIG1fdGlsZVVwZGF0ZURl
bGF5KDAuMDIpCiAgICAgLCBtX2tlZXBBcmVhTXVsdGlwbGllcigyLmYsIDMuNWYpCiAgICAgLCBt
X2NvdmVyQXJlYU11bHRpcGxpZXIoMS41ZiwgMi41ZikKICAgICAsIG1fY29udGVudHNTY2FsZSgx
LmYpCkBAIC00NywyNiArNDYsMjUgQEAgVGlsZWRCYWNraW5nU3RvcmU6OlRpbGVkQmFja2luZ1N0
b3JlKFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50KiBjbGllbnQpCiBUaWxlZEJhY2tpbmdTdG9yZTo6
flRpbGVkQmFja2luZ1N0b3JlKCkKIHsKICAgICBkZWxldGUgbV90aWxlQnVmZmVyVXBkYXRlVGlt
ZXI7Ci0gICAgZGVsZXRlIG1fdGlsZUNyZWF0aW9uVGltZXI7CiB9CiAgICAgCiB2b2lkIFRpbGVk
QmFja2luZ1N0b3JlOjpzZXRUaWxlU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIG1f
dGlsZVNpemUgPSBzaXplOwogICAgIG1fdGlsZXMuY2xlYXIoKTsKLSAgICBzdGFydFRpbGVDcmVh
dGlvblRpbWVyKCk7CisgICAgc3RhcnRUaWxlQnVmZmVyVXBkYXRlVGltZXIoKTsKIH0KIAotdm9p
ZCBUaWxlZEJhY2tpbmdTdG9yZTo6c2V0VGlsZUNyZWF0aW9uRGVsYXkoZG91YmxlIGRlbGF5KQor
dm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6c2V0VGlsZVVwZGF0ZURlbGF5KGRvdWJsZSBkZWxheSkK
IHsKLSAgICBtX3RpbGVDcmVhdGlvbkRlbGF5ID0gZGVsYXk7CisgICAgbV90aWxlVXBkYXRlRGVs
YXkgPSBkZWxheTsKIH0KIAogdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6c2V0S2VlcEFuZENvdmVy
QXJlYU11bHRpcGxpZXJzKGNvbnN0IEZsb2F0U2l6ZSYga2VlcE11bHRpcGxpZXIsIGNvbnN0IEZs
b2F0U2l6ZSYgY292ZXJNdWx0aXBsaWVyKQogewogICAgIG1fa2VlcEFyZWFNdWx0aXBsaWVyID0g
a2VlcE11bHRpcGxpZXI7CiAgICAgbV9jb3ZlckFyZWFNdWx0aXBsaWVyID0gY292ZXJNdWx0aXBs
aWVyOwotICAgIHN0YXJ0VGlsZUNyZWF0aW9uVGltZXIoKTsKKyAgICBzdGFydFRpbGVCdWZmZXJV
cGRhdGVUaW1lcigpOwogfQogCiB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjppbnZhbGlkYXRlKGNv
bnN0IEludFJlY3QmIGNvbnRlbnRzRGlydHlSZWN0KQpAQCAtOTMsNiArOTEsOCBAQCB2b2lkIFRp
bGVkQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlQnVmZmVycygpCiAgICAgaWYgKG1fY29udGVudHNG
cm96ZW4pCiAgICAgICAgIHJldHVybjsKICAgICAKKyAgICBpbnQgcmVxdWlyZWRUaWxlcyA9IGNy
ZWF0ZVRpbGVzKCk7CisKICAgICBtX2NsaWVudC0+dGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2lu
KCk7CiAKICAgICBWZWN0b3I8SW50UmVjdD4gcGFpbnRlZEFyZWE7CkBAIC0xMjAsNiArMTIwLDkg
QEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZUJ1ZmZlcnMoKQogICAgIH0KIAog
ICAgIG1fY2xpZW50LT50aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKHBhaW50ZWRBcmVhKTsKKwor
ICAgIGlmIChyZXF1aXJlZFRpbGVzKQorICAgICAgICBzdGFydFRpbGVCdWZmZXJVcGRhdGVUaW1l
cigpOwogfQogCiB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjpwYWludChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC0xNjAsNyArMTYzLDcgQEAgdm9pZCBU
aWxlZEJhY2tpbmdTdG9yZTo6YWRqdXN0VmlzaWJsZVJlY3QoKQogICAgICAgICByZXR1cm47CiAg
ICAgbV9wcmV2aW91c1Zpc2libGVSZWN0ID0gdmlzaWJsZVJlY3Q7CiAKLSAgICBzdGFydFRpbGVD
cmVhdGlvblRpbWVyKCk7CisgICAgc3RhcnRUaWxlQnVmZmVyVXBkYXRlVGltZXIoKTsKIH0KIAog
dm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6c2V0Q29udGVudHNTY2FsZShmbG9hdCBzY2FsZSkKQEAg
LTE4MCw3ICsxODMsNyBAQCB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjpjb21taXRTY2FsZUNoYW5n
ZSgpCiAgICAgbV9jb250ZW50c1NjYWxlID0gbV9wZW5kaW5nU2NhbGU7CiAgICAgbV9wZW5kaW5n
U2NhbGUgPSAwOwogICAgIG1fdGlsZXMuY2xlYXIoKTsKLSAgICBjcmVhdGVUaWxlcygpOworICAg
IHVwZGF0ZVRpbGVCdWZmZXJzKCk7CiB9CiAKIGRvdWJsZSBUaWxlZEJhY2tpbmdTdG9yZTo6dGls
ZURpc3RhbmNlKGNvbnN0IEludFJlY3QmIHZpZXdwb3J0LCBjb25zdCBUaWxlOjpDb29yZGluYXRl
JiB0aWxlQ29vcmRpbmF0ZSkKQEAgLTIyMSwxNiArMjI0LDE2IEBAIGRvdWJsZSBUaWxlZEJhY2tp
bmdTdG9yZTo6dGlsZURpc3RhbmNlKGNvbnN0IEludFJlY3QmIHZpZXdwb3J0LCBjb25zdCBUaWxl
OjpDb29yCiAgICAgcmV0dXJuIHlCaWFzICogYWJzKHlPZmZzZXQpICsgeEJpYXMgKiBhYnMoeE9m
ZnNldCk7CiB9CiAKLXZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZVRpbGVzKCkKK2ludCBU
aWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlVGlsZXMoKQogewogICAgIGlmIChtX2NvbnRlbnRzRnJv
emVuKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIEludFJl
Y3QgdmlzaWJsZVJlY3QgPSBtYXBGcm9tQ29udGVudHMobV9jbGllbnQtPnRpbGVkQmFja2luZ1N0
b3JlVmlzaWJsZVJlY3QoKSk7CiAgICAgbV9wcmV2aW91c1Zpc2libGVSZWN0ID0gdmlzaWJsZVJl
Y3Q7CiAKICAgICBpZiAodmlzaWJsZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gUmVtb3ZlIHRpbGVzIHRoYXQgZXh0ZW5kIG91dHNp
ZGUgdGhlIGN1cnJlbnQgY29udGVudHMgcmVjdC4KICAgICBkcm9wT3ZlcmhhbmdpbmdUaWxlcygp
OwpAQCAtMjgxLDE0ICsyODQsNyBAQCB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGVUaWxl
cygpCiAgICAgICAgIHNldFRpbGUoY29vcmRpbmF0ZSwgVGlsZTo6Y3JlYXRlKHRoaXMsIGNvb3Jk
aW5hdGUpKTsKICAgICB9CiAgICAgcmVxdWlyZWRUaWxlQ291bnQgLT0gdGlsZXNUb0NyZWF0ZUNv
dW50OwotICAgIAotICAgIC8vIFBhaW50IHRoZSBjb250ZW50IG9mIHRoZSBuZXdseSBjcmVhdGVk
IHRpbGVzCi0gICAgaWYgKHRpbGVzVG9DcmVhdGVDb3VudCkKLSAgICAgICAgdXBkYXRlVGlsZUJ1
ZmZlcnMoKTsKLQotICAgIC8vIEtlZXAgY3JlYXRpbmcgdGlsZXMgdW50aWwgdGhlIHdob2xlIGNv
dmVyUmVjdCBpcyBjb3ZlcmVkLgotICAgIGlmIChyZXF1aXJlZFRpbGVDb3VudCkKLSAgICAgICAg
bV90aWxlQ3JlYXRpb25UaW1lci0+c3RhcnRPbmVTaG90KG1fdGlsZUNyZWF0aW9uRGVsYXkpOwor
ICAgIHJldHVybiByZXF1aXJlZFRpbGVDb3VudDsKIH0KIAogdm9pZCBUaWxlZEJhY2tpbmdTdG9y
ZTo6ZHJvcE92ZXJoYW5naW5nVGlsZXMoKQpAQCAtMzg1LDcgKzM4MSw3IEBAIHZvaWQgVGlsZWRC
YWNraW5nU3RvcmU6OnN0YXJ0VGlsZUJ1ZmZlclVwZGF0ZVRpbWVyKCkKIHsKICAgICBpZiAobV90
aWxlQnVmZmVyVXBkYXRlVGltZXItPmlzQWN0aXZlKCkgfHwgbV9jb250ZW50c0Zyb3plbikKICAg
ICAgICAgcmV0dXJuOwotICAgIG1fdGlsZUJ1ZmZlclVwZGF0ZVRpbWVyLT5zdGFydE9uZVNob3Qo
MCk7CisgICAgbV90aWxlQnVmZmVyVXBkYXRlVGltZXItPnN0YXJ0T25lU2hvdChtX3RpbGVVcGRh
dGVEZWxheSk7CiB9CiAKIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnRpbGVCdWZmZXJVcGRhdGVU
aW1lckZpcmVkKFRpbGVUaW1lciopCkBAIC0zOTMsMTggKzM4OSw2IEBAIHZvaWQgVGlsZWRCYWNr
aW5nU3RvcmU6OnRpbGVCdWZmZXJVcGRhdGVUaW1lckZpcmVkKFRpbGVUaW1lciopCiAgICAgdXBk
YXRlVGlsZUJ1ZmZlcnMoKTsKIH0KIAotdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6c3RhcnRUaWxl
Q3JlYXRpb25UaW1lcigpCi17Ci0gICAgaWYgKG1fdGlsZUNyZWF0aW9uVGltZXItPmlzQWN0aXZl
KCkgfHwgbV9jb250ZW50c0Zyb3plbikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fdGlsZUNyZWF0
aW9uVGltZXItPnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6
dGlsZUNyZWF0aW9uVGltZXJGaXJlZChUaWxlVGltZXIqKQotewotICAgIGNyZWF0ZVRpbGVzKCk7
Ci19Ci0KIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnNldENvbnRlbnRzRnJvemVuKGJvb2wgZnJl
ZXplKQogewogICAgIGlmIChtX2NvbnRlbnRzRnJvemVuID09IGZyZWV6ZSkKQEAgLTQyMCw3ICs0
MDQsNiBAQCB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjpzZXRDb250ZW50c0Zyb3plbihib29sIGZy
ZWV6ZSkKICAgICBpZiAobV9wZW5kaW5nU2NhbGUpCiAgICAgICAgIGNvbW1pdFNjYWxlQ2hhbmdl
KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHN0YXJ0VGlsZUNyZWF0aW9uVGltZXIoKTsKICAgICAg
ICAgc3RhcnRUaWxlQnVmZmVyVXBkYXRlVGltZXIoKTsKICAgICB9CiB9CkBAIC00MjksNyArNDEy
LDcgQEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6c2V0U2Nyb2xsRGVsdGEoY29uc3QgSW50UG9p
bnQmIGRlbHRhKQogewogICAgIG1fc2Nyb2xsRGVsdGEgPSBkZWx0YTsKIAotICAgIHN0YXJ0VGls
ZUNyZWF0aW9uVGltZXIoKTsKKyAgICBzdGFydFRpbGVCdWZmZXJVcGRhdGVUaW1lcigpOwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJh
Y2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNr
aW5nU3RvcmUuaAppbmRleCA0N2ZmZmQ1Li40MDA1ZmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmgKQEAgLTU2LDkgKzU2
LDkgQEAgcHVibGljOgogICAgIEludFNpemUgdGlsZVNpemUoKSB7IHJldHVybiBtX3RpbGVTaXpl
OyB9CiAgICAgdm9pZCBzZXRUaWxlU2l6ZShjb25zdCBJbnRTaXplJik7CiAgICAgCi0gICAgZG91
YmxlIHRpbGVDcmVhdGlvbkRlbGF5KCkgY29uc3QgeyByZXR1cm4gbV90aWxlQ3JlYXRpb25EZWxh
eTsgfQotICAgIHZvaWQgc2V0VGlsZUNyZWF0aW9uRGVsYXkoZG91YmxlIGRlbGF5KTsKLSAgICAK
KyAgICBkb3VibGUgdGlsZVVwZGF0ZURlbGF5KCkgY29uc3QgeyByZXR1cm4gbV90aWxlVXBkYXRl
RGVsYXk7IH0KKyAgICB2b2lkIHNldFRpbGVVcGRhdGVEZWxheShkb3VibGUgZGVsYXkpOworCiAg
ICAgLy8gVGlsZWQgYXJlIGRyb3BwZWQgb3V0c2lkZSB0aGUga2VlcCBhcmVhLCBhbmQgY3JlYXRl
ZCBmb3IgY292ZXIgYXJlYS4gVGhlIHZhbHVlcyBhIHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydCBz
aXplLgogICAgIHZvaWQgZ2V0S2VlcEFuZENvdmVyQXJlYU11bHRpcGxpZXJzKEZsb2F0U2l6ZSYg
a2VlcE11bHRpcGxpZXIsIEZsb2F0U2l6ZSYgY292ZXJNdWx0aXBsaWVyKQogICAgIHsKQEAgLTcw
LDE1ICs3MCwxMyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBzdGFydFRpbGVCdWZm
ZXJVcGRhdGVUaW1lcigpOwotICAgIHZvaWQgc3RhcnRUaWxlQ3JlYXRpb25UaW1lcigpOwogICAg
IAogICAgIHR5cGVkZWYgVGltZXI8VGlsZWRCYWNraW5nU3RvcmU+IFRpbGVUaW1lcjsKIAogICAg
IHZvaWQgdGlsZUJ1ZmZlclVwZGF0ZVRpbWVyRmlyZWQoVGlsZVRpbWVyKik7Ci0gICAgdm9pZCB0
aWxlQ3JlYXRpb25UaW1lckZpcmVkKFRpbGVUaW1lciopOwogICAgIAogICAgIHZvaWQgdXBkYXRl
VGlsZUJ1ZmZlcnMoKTsKLSAgICB2b2lkIGNyZWF0ZVRpbGVzKCk7CisgICAgaW50IGNyZWF0ZVRp
bGVzKCk7CiAgICAgCiAgICAgdm9pZCBjb21taXRTY2FsZUNoYW5nZSgpOwogCkBAIC0xMDcsMTAg
KzEwNSw5IEBAIHByaXZhdGU6CiAgICAgVGlsZU1hcCBtX3RpbGVzOwogCiAgICAgVGlsZVRpbWVy
KiBtX3RpbGVCdWZmZXJVcGRhdGVUaW1lcjsKLSAgICBUaWxlVGltZXIqIG1fdGlsZUNyZWF0aW9u
VGltZXI7CiAKICAgICBJbnRTaXplIG1fdGlsZVNpemU7Ci0gICAgZG91YmxlIG1fdGlsZUNyZWF0
aW9uRGVsYXk7CisgICAgZG91YmxlIG1fdGlsZVVwZGF0ZURlbGF5OwogICAgIEZsb2F0U2l6ZSBt
X2tlZXBBcmVhTXVsdGlwbGllcjsKICAgICBGbG9hdFNpemUgbV9jb3ZlckFyZWFNdWx0aXBsaWVy
OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NMYXllclF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzTGF5ZXJRdC5jcHAKaW5kZXggYzM0ZDhiNS4uYWE1M2FlMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQu
Y3BwCkBAIC0zOTgsNyArMzk4LDcgQEAgUVBpeG1hcCBHcmFwaGljc0xheWVyUXRJbXBsOjpyZWNh
Y2hlKGNvbnN0IFFSZWdpb24mIHJlZ2lvblRvVXBkYXRlKQogICAgIGNvbnN0IGJvb2wgcmVxdWly
ZXNUaWxpbmcgPSAobV9zdGF0ZS5kcmF3c0NvbnRlbnQgJiYgbV9jdXJyZW50Q29udGVudC5jb250
ZW50VHlwZSA9PSBIVE1MQ29udGVudFR5cGUpICYmIChtX3NpemUud2lkdGgoKSA+IEdSQVBISUNT
X0xBWUVSX1RJTElOR19USFJFU0hPTEQgfHwgbV9zaXplLmhlaWdodCgpID4gR1JBUEhJQ1NfTEFZ
RVJfVElMSU5HX1RIUkVTSE9MRCk7CiAgICAgaWYgKHJlcXVpcmVzVGlsaW5nICYmICFtX3RpbGVk
QmFja2luZ1N0b3JlKSB7CiAgICAgICAgIG1fdGlsZWRCYWNraW5nU3RvcmUgPSBuZXcgVGlsZWRC
YWNraW5nU3RvcmUodGhpcyk7Ci0gICAgICAgIG1fdGlsZWRCYWNraW5nU3RvcmUtPnNldFRpbGVD
cmVhdGlvbkRlbGF5KDApOworICAgICAgICBtX3RpbGVkQmFja2luZ1N0b3JlLT5zZXRUaWxlVXBk
YXRlRGVsYXkoMCk7CiAgICAgICAgIHNldEZsYWcoSXRlbVVzZXNFeHRlbmRlZFN0eWxlT3B0aW9u
LCB0cnVlKTsKICAgICB9IGVsc2UgaWYgKCFyZXF1aXJlc1RpbGluZyAmJiBtX3RpbGVkQmFja2lu
Z1N0b3JlKSB7CiAgICAgICAgIGRlbGV0ZSBtX3RpbGVkQmFja2luZ1N0b3JlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYnBhZ2UuY3BwCmluZGV4IDQ5NTIxNTAuLjM5YzE0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2VicGFnZS5jcHAKQEAgLTExODYsMTIgKzExODYsMTIgQEAgdm9pZCBRV2ViUGFnZVByaXZhdGU6
OmR5bmFtaWNQcm9wZXJ0eUNoYW5nZUV2ZW50KFFEeW5hbWljUHJvcGVydHlDaGFuZ2VFdmVudCog
ZXYKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgUVNpemUgdGlsZVNpemUgPSBxLT5wcm9w
ZXJ0eSgiX3FfVGlsZWRCYWNraW5nU3RvcmVUaWxlU2l6ZSIpLnRvU2l6ZSgpOwogICAgICAgICBm
cmFtZS0+dGlsZWRCYWNraW5nU3RvcmUoKS0+c2V0VGlsZVNpemUodGlsZVNpemUpOwotICAgIH0g
ZWxzZSBpZiAoZXZlbnQtPnByb3BlcnR5TmFtZSgpID09ICJfcV9UaWxlZEJhY2tpbmdTdG9yZVRp
bGVDcmVhdGlvbkRlbGF5IikgeworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnByb3BlcnR5TmFtZSgp
ID09ICJfcV9UaWxlZEJhY2tpbmdTdG9yZVRpbGVVcGRhdGVEZWxheSIpIHsKICAgICAgICAgV2Vi
Q29yZTo6RnJhbWUqIGZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZShxLT5tYWluRnJhbWUo
KSk7CiAgICAgICAgIGlmICghZnJhbWUtPnRpbGVkQmFja2luZ1N0b3JlKCkpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGludCB0aWxlQ3JlYXRpb25EZWxheSA9IHEtPnByb3BlcnR5KCJf
cV9UaWxlZEJhY2tpbmdTdG9yZVRpbGVDcmVhdGlvbkRlbGF5IikudG9JbnQoKTsKLSAgICAgICAg
ZnJhbWUtPnRpbGVkQmFja2luZ1N0b3JlKCktPnNldFRpbGVDcmVhdGlvbkRlbGF5KHN0YXRpY19j
YXN0PGRvdWJsZT4odGlsZUNyZWF0aW9uRGVsYXkpIC8gMTAwMC4pOworICAgICAgICBpbnQgdGls
ZVVwZGF0ZURlbGF5ID0gcS0+cHJvcGVydHkoIl9xX1RpbGVkQmFja2luZ1N0b3JlVGlsZVVwZGF0
ZURlbGF5IikudG9JbnQoKTsKKyAgICAgICAgZnJhbWUtPnRpbGVkQmFja2luZ1N0b3JlKCktPnNl
dFRpbGVVcGRhdGVEZWxheShzdGF0aWNfY2FzdDxkb3VibGU+KHRpbGVVcGRhdGVEZWxheSkgLyAx
MDAwLik7CiAgICAgfSBlbHNlIGlmIChldmVudC0+cHJvcGVydHlOYW1lKCkgPT0gIl9xX1RpbGVk
QmFja2luZ1N0b3JlS2VlcEFyZWFNdWx0aXBsaWVyIikgewogICAgICAgICBXZWJDb3JlOjpGcmFt
ZSogZnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKHEtPm1haW5GcmFtZSgpKTsKICAgICAg
ICAgaWYgKCFmcmFtZS0+dGlsZWRCYWNraW5nU3RvcmUoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggODYz
YWUyZC4uNzU3Y2I4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0wNS0y
MyAgVmlhdGNoZXNsYXYgT3N0YXBlbmtvICA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRd
IFZlcnkgamVya3kgc2Nyb2xsaW5nIGJlY2F1c2Ugb2YgYmxvY2tpbmcgaW4gdGlsZWQgYmFja2lu
ZyBzdG9yZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTUzODk0CisKKwlQYXJ0MiBvZiB0aWxlcyBwYWludGluZyByZWRlc2lnbi4KKwlSZW1vdmUgdGls
ZSBjcmVhdGlvbiB0aW1lciBhbmQgZG8gdGlsZSBjcmVhdGlvbiB0b2dldGhlciB3aXRoIHRpbGUg
dXBkYXRlcy4KKworICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFn
ZVByaXZhdGU6OmR5bmFtaWNQcm9wZXJ0eUNoYW5nZUV2ZW50KToKKwogMjAxMS0wNS0yMiAgVmlh
dGNoZXNsYXYgT3N0YXBlbmtvICA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96335</attachid>
            <date>2011-06-07 17:28:49 -0700</date>
            <delta_ts>2011-06-09 16:25:30 -0700</delta_ts>
            <desc>Patch 3: Add tile reuse.</desc>
            <filename>tiles_p3.diff</filename>
            <type>text/plain</type>
            <size>9386</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">Y29tbWl0IDM0YjQ5NWFmOTRiMjcwYzcxY2Y0ZDQ5MzVkNmMwZDQzMjAxYjhjMjEKQXV0aG9yOiBW
aWF0Y2hlc2xhdiBPc3RhcGVua28gPG9zdGFwZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+CkRh
dGU6ICAgVHVlIE1heSAzMSAyMzo0MjowMCAyMDExIC0wNDAwCgogICAgUGFydDMgb2YgdGlsZXMg
cGFpbnRpbmcgcmVkZXNpZ24uCiAgICBBZGQgdGlsZSByZXVzZS4KCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzIx
ODgxOS4uMTdlNzgwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDExLTA1LTMxICBW
aWF0Y2hlc2xhdiBPc3RhcGVua28gIDxvc3RhcGVua28udmlhdGNoZXNsYXZAbm9raWEuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gVmVy
eSBqZXJreSBzY3JvbGxpbmcgYmVjYXVzZSBvZiBibG9ja2luZyBpbiB0aWxlZCBiYWNraW5nIHN0
b3JlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM4
OTQKKworICAgICAgICBQYXJ0MyBvZiB0aWxlcyBwYWludGluZyByZWRlc2lnbi4KKyAgICAgICAg
QWRkIHRpbGUgcmV1c2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZVRpbGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlOjpnZXRUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVkQmFja2luZ1N0b3JlOjpjb21wYXJlQ29vcmRpbmF0ZURpc3RhbmNlUGFpckZvclFTb3J0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlOjpnZXRPdmVyaGFuZ2luZ1RpbGVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OkNvb3JkaW5hdGVEaXN0YW5jZVBhaXI6
OkNvb3JkaW5hdGVEaXN0YW5jZVBhaXIpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5n
U3RvcmU6OkNvb3JkaW5hdGVEaXN0YW5jZVBhaXI6OmNvb3JkaW5hdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OkNvb3JkaW5hdGVEaXN0YW5jZVBhaXI6OmRpc3RhbmNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UaWxlUXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGlsZTo6cmV1c2UpOgorCiAyMDExLTA1LTIzICBWaWF0Y2hlc2xhdiBPc3RhcGVu
a28gIDxvc3RhcGVua28udmlhdGNoZXNsYXZAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvVGlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZS5o
CmluZGV4IDAyMDc2ZDIuLjhmNTRkODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1RpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9UaWxlLmgKQEAgLTU3LDYgKzU3LDggQEAgcHVibGljOgogICAgIGNvbnN0IFRpbGU6OkNvb3Jk
aW5hdGUmIGNvb3JkaW5hdGUoKSBjb25zdCB7IHJldHVybiBtX2Nvb3JkaW5hdGU7IH0KICAgICBj
b25zdCBJbnRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAgICAgCisgICAg
dm9pZCByZXVzZShjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSk7CisKICAgICBzdGF0
aWMgdm9pZCBwYWludENoZWNrZXJQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCmluZGV4IDExMDE4NDkuLjIxMTliNzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0
b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tp
bmdTdG9yZS5jcHAKQEAgLTIzNSwxNiArMjM1LDE0IEBAIGludCBUaWxlZEJhY2tpbmdTdG9yZTo6
Y3JlYXRlVGlsZXMoKQogICAgIGlmICh2aXNpYmxlUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgLy8gUmVtb3ZlIHRpbGVzIHRoYXQgZXh0ZW5kIG91dHNpZGUgdGhlIGN1
cnJlbnQgY29udGVudHMgcmVjdC4KLSAgICBkcm9wT3ZlcmhhbmdpbmdUaWxlcygpOwotCiAgICAg
SW50UmVjdCBrZWVwUmVjdCA9IHZpc2libGVSZWN0OwogICAgIC8vIEluZmxhdGVzIHRvIGJvdGgg
c2lkZXMsIHNvIGRpdmlkZSBpbmZsYXRlIGRlbHRhIGJ5IDIKICAgICBrZWVwUmVjdC5pbmZsYXRl
WCh2aXNpYmxlUmVjdC53aWR0aCgpICogKG1fa2VlcEFyZWFNdWx0aXBsaWVyLndpZHRoKCkgLSAx
LmYpIC8gMik7CiAgICAga2VlcFJlY3QuaW5mbGF0ZVkodmlzaWJsZVJlY3QuaGVpZ2h0KCkgKiAo
bV9rZWVwQXJlYU11bHRpcGxpZXIuaGVpZ2h0KCkgLSAxLmYpIC8gMik7CiAgICAga2VlcFJlY3Qu
aW50ZXJzZWN0KGNvbnRlbnRzUmVjdCgpKTsKLSAgICAKLSAgICBkcm9wVGlsZXNPdXRzaWRlUmVj
dChrZWVwUmVjdCk7CisKKyAgICBDb29yZGluYXRlRGlzdGFuY2VWZWN0b3Igb3ZlcmhhbmdpbmdU
aWxlczsKKyAgICBnZXRPdmVyaGFuZ2luZ1RpbGVzKGtlZXBSZWN0LCB2aXNpYmxlUmVjdCwgb3Zl
cmhhbmdpbmdUaWxlcyk7CiAgICAgCiAgICAgSW50UmVjdCBjb3ZlclJlY3QgPSB2aXNpYmxlUmVj
dDsKICAgICAvLyBJbmZsYXRlcyB0byBib3RoIHNpZGVzLCBzbyBkaXZpZGUgaW5mbGF0ZSBkZWx0
YSBieSAyCkBAIC0yODEsNDUgKzI3OSwxOCBAQCBpbnQgVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0
ZVRpbGVzKCkKICAgICB1bnNpZ25lZCB0aWxlc1RvQ3JlYXRlQ291bnQgPSB0aWxlc1RvQ3JlYXRl
LnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgdGlsZXNUb0NyZWF0ZUNvdW50
OyArK24pIHsKICAgICAgICAgVGlsZTo6Q29vcmRpbmF0ZSBjb29yZGluYXRlID0gdGlsZXNUb0Ny
ZWF0ZVtuXTsKLSAgICAgICAgc2V0VGlsZShjb29yZGluYXRlLCBUaWxlOjpjcmVhdGUodGhpcywg
Y29vcmRpbmF0ZSkpOworICAgICAgICBnZXRUaWxlKGNvb3JkaW5hdGUsIG92ZXJoYW5naW5nVGls
ZXMpOwogICAgIH0KICAgICByZXF1aXJlZFRpbGVDb3VudCAtPSB0aWxlc1RvQ3JlYXRlQ291bnQ7
Ci0gICAgcmV0dXJuIHJlcXVpcmVkVGlsZUNvdW50OwotfQotCi12b2lkIFRpbGVkQmFja2luZ1N0
b3JlOjpkcm9wT3ZlcmhhbmdpbmdUaWxlcygpCi17ICAgIAotICAgIEludFJlY3QgY29udGVudHNS
ZWN0ID0gdGhpcy0+Y29udGVudHNSZWN0KCk7Ci0KLSAgICBWZWN0b3I8VGlsZTo6Q29vcmRpbmF0
ZT4gdGlsZXNUb1JlbW92ZTsKLSAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVu
ZCgpOwotICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBUaWxlOjpDb29yZGluYXRlIHRpbGVDb29yZGluYXRl
ID0gaXQtPnNlY29uZC0+Y29vcmRpbmF0ZSgpOwotICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0g
aXQtPnNlY29uZC0+cmVjdCgpOwotICAgICAgICBJbnRSZWN0IGV4cGVjdGVkVGlsZVJlY3QgPSB0
aWxlUmVjdEZvckNvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpOwotICAgICAgICBpZiAoZXhwZWN0
ZWRUaWxlUmVjdCAhPSB0aWxlUmVjdCB8fCAhY29udGVudHNSZWN0LmNvbnRhaW5zKHRpbGVSZWN0
KSkKLSAgICAgICAgICAgIHRpbGVzVG9SZW1vdmUuYXBwZW5kKHRpbGVDb29yZGluYXRlKTsKKyAg
ICBpZiAoIXJlcXVpcmVkVGlsZUNvdW50KSB7CisgICAgICAgIC8vIGFsbCB0aWxlcyBpbiBwbGFj
ZSwgY2FuIGRyb3AgcmVtYWludGluZyBvdmVyaGFuZ2luZyB0aWxlcworICAgICAgICB3aGlsZShv
dmVyaGFuZ2luZ1RpbGVzLnNpemUoKSkgeworICAgICAgICAgICAgcmVtb3ZlVGlsZShvdmVyaGFu
Z2luZ1RpbGVzLmxhc3QoKS5jb29yZGluYXRlKCkpOworICAgICAgICAgICAgb3ZlcmhhbmdpbmdU
aWxlcy5yZW1vdmVMYXN0KCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgdW5zaWduZWQgcmVtb3Zl
Q291bnQgPSB0aWxlc1RvUmVtb3ZlLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBu
IDwgcmVtb3ZlQ291bnQ7ICsrbikKLSAgICAgICAgcmVtb3ZlVGlsZSh0aWxlc1RvUmVtb3ZlW25d
KTsKLX0KLQotdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6ZHJvcFRpbGVzT3V0c2lkZVJlY3QoY29u
c3QgSW50UmVjdCYga2VlcFJlY3QpCi17Ci0gICAgRmxvYXRSZWN0IGtlZXBSZWN0RiA9IGtlZXBS
ZWN0OwogCi0gICAgVmVjdG9yPFRpbGU6OkNvb3JkaW5hdGU+IHRvUmVtb3ZlOwotICAgIFRpbGVN
YXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7Ci0gICAgZm9yIChUaWxlTWFwOjppdGVy
YXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFRp
bGU6OkNvb3JkaW5hdGUgY29vcmRpbmF0ZSA9IGl0LT5zZWNvbmQtPmNvb3JkaW5hdGUoKTsKLSAg
ICAgICAgRmxvYXRSZWN0IHRpbGVSZWN0ID0gaXQtPnNlY29uZC0+cmVjdCgpOwotICAgICAgICBp
ZiAoIXRpbGVSZWN0LmludGVyc2VjdHMoa2VlcFJlY3RGKSkKLSAgICAgICAgICAgIHRvUmVtb3Zl
LmFwcGVuZChjb29yZGluYXRlKTsKLSAgICB9Ci0gICAgdW5zaWduZWQgcmVtb3ZlQ291bnQgPSB0
b1JlbW92ZS5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHJlbW92ZUNvdW50
OyArK24pCi0gICAgICAgIHJlbW92ZVRpbGUodG9SZW1vdmVbbl0pOworICAgIHJldHVybiByZXF1
aXJlZFRpbGVDb3VudDsKIH0KIAogUGFzc1JlZlB0cjxUaWxlPiBUaWxlZEJhY2tpbmdTdG9yZTo6
dGlsZUF0KGNvbnN0IFRpbGU6OkNvb3JkaW5hdGUmIGNvb3JkaW5hdGUpIGNvbnN0CkBAIC00MTUs
NiArMzg2LDQ5IEBAIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnNldFNjcm9sbERlbHRhKGNvbnN0
IEludFBvaW50JiBkZWx0YSkKICAgICBzdGFydFRpbGVCdWZmZXJVcGRhdGVUaW1lcigpOwogfQog
CitQYXNzUmVmUHRyPFRpbGU+IFRpbGVkQmFja2luZ1N0b3JlOjpnZXRUaWxlKGNvbnN0IFRpbGU6
OkNvb3JkaW5hdGUmIG5ld0Nvb3JkaW5hdGUsIENvb3JkaW5hdGVEaXN0YW5jZVZlY3RvciYgb3Zl
cmhhbmdpbmdUaWxlcykKK3sKKyAgICBpZiAob3ZlcmhhbmdpbmdUaWxlcy5zaXplKCkpIHsKKyAg
ICAgICAgY29uc3QgVGlsZTo6Q29vcmRpbmF0ZSBvbGRDb29yZGluYXRlID0gb3ZlcmhhbmdpbmdU
aWxlcy5sYXN0KCkuY29vcmRpbmF0ZSgpOworICAgICAgICBvdmVyaGFuZ2luZ1RpbGVzLnJlbW92
ZUxhc3QoKTsKKyAgICAgICAgUmVmUHRyPFRpbGU+IHJldCA9IHRpbGVBdChvbGRDb29yZGluYXRl
KTsKKyAgICAgICAgcmVtb3ZlVGlsZShvbGRDb29yZGluYXRlKTsKKyAgICAgICAgcmV0LT5yZXVz
ZShuZXdDb29yZGluYXRlKTsKKyAgICAgICAgc2V0VGlsZShuZXdDb29yZGluYXRlLCByZXQpOwor
ICAgICAgICByZXR1cm4gcmV0OworICAgIH0gZWxzZSB7CisgICAgICAgIFJlZlB0cjxUaWxlPiBy
ZXQgPSBUaWxlOjpjcmVhdGUodGhpcywgbmV3Q29vcmRpbmF0ZSk7CisgICAgICAgIHNldFRpbGUo
bmV3Q29vcmRpbmF0ZSwgcmV0KTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9Cit9CisKK2lu
dCBUaWxlZEJhY2tpbmdTdG9yZTo6Y29tcGFyZUNvb3JkaW5hdGVEaXN0YW5jZVBhaXJGb3JRU29y
dChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQoreworICAgIGNvbnN0IENvb3JkaW5hdGVE
aXN0YW5jZVBhaXIqIHZhID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZURpc3RhbmNlUGFp
cio+KGEpOworICAgIGNvbnN0IENvb3JkaW5hdGVEaXN0YW5jZVBhaXIqIHZiID0gc3RhdGljX2Nh
c3Q8Y29uc3QgQ29vcmRpbmF0ZURpc3RhbmNlUGFpcio+KGIpOworICAgIHJldHVybiAoaW50KSgo
dmEtPmRpc3RhbmNlKCkgLSB2Yi0+ZGlzdGFuY2UoKSkgKiAxMDAwKTsKK30KKwordm9pZCBUaWxl
ZEJhY2tpbmdTdG9yZTo6Z2V0T3ZlcmhhbmdpbmdUaWxlcyhjb25zdCBJbnRSZWN0JiByZWN0LCBj
b25zdCBJbnRSZWN0JiB2aWV3cG9ydCwgQ29vcmRpbmF0ZURpc3RhbmNlVmVjdG9yJiBvdmVyaGFu
Z2luZ1RpbGVzKQoreworICAgIFRpbGU6OkNvb3JkaW5hdGUgdG9wTGVmdCA9IHRpbGVDb29yZGlu
YXRlRm9yUG9pbnQocmVjdC5taW5YTWluWUNvcm5lcigpKTsKKyAgICBUaWxlOjpDb29yZGluYXRl
IGJvdHRvbVJpZ2h0ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2ludChyZWN0Lm1heFhNYXhZQ29ybmVy
KCkpOworCisgICAgVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKKyAgICBm
b3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgVGlsZTo6Q29vcmRpbmF0ZSB0aWxlQ29vcmRpbmF0ZSA9IGl0LT5zZWNv
bmQtPmNvb3JkaW5hdGUoKTsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHRpbGVSZWN0Rm9y
Q29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSk7CisgICAgICAgIGlmICghcmVjdC5pbnRlcnNlY3Rz
KHRpbGVSZWN0KSkgeworICAgICAgICAgICAgZG91YmxlIGRpc3RhbmNlID0gdGlsZURpc3RhbmNl
KHZpZXdwb3J0LCB0aWxlQ29vcmRpbmF0ZSk7CisgICAgICAgICAgICBvdmVyaGFuZ2luZ1RpbGVz
LmFwcGVuZChDb29yZGluYXRlRGlzdGFuY2VQYWlyKHRpbGVDb29yZGluYXRlLCBkaXN0YW5jZSkp
OworICAgICAgICB9CisgICAgfQorCisgICAgcXNvcnQob3ZlcmhhbmdpbmdUaWxlcy5iZWdpbigp
LCBvdmVyaGFuZ2luZ1RpbGVzLnNpemUoKSwgc2l6ZW9mKENvb3JkaW5hdGVEaXN0YW5jZVBhaXIp
LAorICAgICAgICAgICZjb21wYXJlQ29vcmRpbmF0ZURpc3RhbmNlUGFpckZvclFTb3J0KTsKK30K
KwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1RpbGVkQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9UaWxlZEJhY2tpbmdTdG9yZS5oCmluZGV4IDQwMDVmYzQuLmQzYThlZTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuaApA
QCAtODAsOSArODAsNiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tbWl0U2NhbGVDaGFu
Z2UoKTsKIAotICAgIHZvaWQgZHJvcE92ZXJoYW5naW5nVGlsZXMoKTsKLSAgICB2b2lkIGRyb3BU
aWxlc091dHNpZGVSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICAKICAgICBQYXNzUmVmUHRyPFRp
bGU+IHRpbGVBdChjb25zdCBUaWxlOjpDb29yZGluYXRlJikgY29uc3Q7CiAgICAgdm9pZCBzZXRU
aWxlKGNvbnN0IFRpbGU6OkNvb3JkaW5hdGUmIGNvb3JkaW5hdGUsIFBhc3NSZWZQdHI8VGlsZT4g
dGlsZSk7CiAgICAgdm9pZCByZW1vdmVUaWxlKGNvbnN0IFRpbGU6OkNvb3JkaW5hdGUmIGNvb3Jk
aW5hdGUpOwpAQCAtOTgsNiArOTUsMjEgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcGFpbnRDaGVj
a2VyUGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgVGlsZTo6
Q29vcmRpbmF0ZSYpOwogCisgICAgc3RydWN0IENvb3JkaW5hdGVEaXN0YW5jZVBhaXIgeworICAg
ICAgICBDb29yZGluYXRlRGlzdGFuY2VQYWlyKGNvbnN0IFRpbGU6OkNvb3JkaW5hdGUmIGNvb3Jk
aW5hdGUsIGRvdWJsZSBkaXN0YW5jZSkgOgorICAgICAgICAgICAgICAgIG1fY29vcmRpbmF0ZShj
b29yZGluYXRlKSwgbV9kaXN0YW5jZShkaXN0YW5jZSkge30KKyAgICAgICAgY29uc3QgVGlsZTo6
Q29vcmRpbmF0ZSYgY29vcmRpbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZTsgfQor
ICAgICAgICBkb3VibGUgZGlzdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2Rpc3RhbmNlOyB9CisK
KyAgICAgICAgVGlsZTo6Q29vcmRpbmF0ZSAgICBtX2Nvb3JkaW5hdGU7CisgICAgICAgIGRvdWJs
ZSAgICAgICAgICAgICAgbV9kaXN0YW5jZTsKKyAgICB9OworICAgIHR5cGVkZWYgVmVjdG9yPENv
b3JkaW5hdGVEaXN0YW5jZVBhaXI+IENvb3JkaW5hdGVEaXN0YW5jZVZlY3RvcjsKKyAgICBzdGF0
aWMgaW50IGNvbXBhcmVDb29yZGluYXRlRGlzdGFuY2VQYWlyRm9yUVNvcnQoY29uc3Qgdm9pZCos
IGNvbnN0IHZvaWQqKTsKKworICAgIHZvaWQgZ2V0T3ZlcmhhbmdpbmdUaWxlcyhjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVEaXN0YW5jZVZlY3RvciYpOworICAgIFBh
c3NSZWZQdHI8VGlsZT4gZ2V0VGlsZShjb25zdCBUaWxlOjpDb29yZGluYXRlJiwgQ29vcmRpbmF0
ZURpc3RhbmNlVmVjdG9yJik7CisKIHByaXZhdGU6CiAgICAgVGlsZWRCYWNraW5nU3RvcmVDbGll
bnQqIG1fY2xpZW50OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9UaWxlUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
VGlsZVF0LmNwcAppbmRleCA4NzIzY2Q0Li5jYzA3ODEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UaWxlUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RpbGVRdC5jcHAKQEAgLTY1LDYgKzY1LDEzIEBAIFRpbGU6
OlRpbGUoVGlsZWRCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgY29uc3QgQ29vcmRpbmF0ZSYg
dGlsZUNvb3JkaW5hdGUpCiB7CiB9CiAKK3ZvaWQgVGlsZTo6cmV1c2UoY29uc3QgQ29vcmRpbmF0
ZSYgdGlsZUNvb3JkaW5hdGUpCit7CisgICAgbV9jb29yZGluYXRlID0gdGlsZUNvb3JkaW5hdGU7
CisgICAgbV9yZWN0ID0gbV9iYWNraW5nU3RvcmUtPnRpbGVSZWN0Rm9yQ29vcmRpbmF0ZShtX2Nv
b3JkaW5hdGUpOworICAgICptX2RpcnR5UmVnaW9uID0gUVJlZ2lvbihtX3JlY3QpOworfQorCiBU
aWxlOjp+VGlsZSgpCiB7CiAgICAgZGVsZXRlIG1fYnVmZmVyOwo=
</data>
<flag name="review"
          id="89997"
          type_id="1"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96336</attachid>
            <date>2011-06-07 17:29:53 -0700</date>
            <delta_ts>2011-06-09 16:25:17 -0700</delta_ts>
            <desc>Patch 4: Prioritize tile paiting. Viewport area is updated 1st and missing tiles are updated before dirty.</desc>
            <filename>tiles_p4.diff</filename>
            <type>text/plain</type>
            <size>12674</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">Y29tbWl0IGYxZjcxZjNmYjNiYzRlNDdjMDEyOTJhM2Y4MzA4MjQyZmYzMTBhNDgKQXV0aG9yOiBW
aWF0Y2hlc2xhdiBPc3RhcGVua28gPG9zdGFwZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+CkRh
dGU6ICAgTW9uIEp1biA2IDIwOjQ5OjA1IDIwMTEgLTA0MDAKCiAgICBQYXJ0NCBvZiB0aWxlcyBw
YWludGluZyByZWRlc2lnbi4KICAgIAogICAgUHJpb3JpdGl6ZSB0aWxlIHBhaXRpbmcuIFZpZXdw
b3J0IGFyZWEgaXMgdXBkYXRlZCAxc3QgYW5kIG1pc3NpbmcgdGlsZXMgYXJlIHVwZGF0ZWQgYmVm
b3JlIGRpcnR5LgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxN2U3ODA5Li41MmEyYzBlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTEtMDYtMDYgIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9zdGFw
ZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW1F0XSBWZXJ5IGplcmt5IHNjcm9sbGluZyBiZWNhdXNlIG9m
IGJsb2NraW5nIGluIHRpbGVkIGJhY2tpbmcgc3RvcmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mzg5NAorCisgICAgICAgIFBhcnQ0IG9mIHRpbGVz
IHBhaW50aW5nIHJlZGVzaWduLgorICAgICAgICBQcmlvcml0aXplIHRpbGUgcGFpdGluZy4gVmll
d3BvcnQgYXJlYSBpcyB1cGRhdGVkIDFzdCBhbmQgbWlzc2luZyB0aWxlcyBhcmUgCisgICAgICAg
IHVwZGF0ZWQgYmVmb3JlIGRpcnR5LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGls
ZWRCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6
OnBhaW50VGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0
ZVRpbGVCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlOjp0aWxl
UmVjdEZvckNvb3JkaW5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6
OmludmVydGVkQ29tcGFyZUNvb3JkaW5hdGVEaXN0YW5jZVBhaXJGb3JRU29ydCk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZTo6ZmluZFRpbGVzRm9yVXBkYXRlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oOgorCiAyMDExLTA1LTMx
ICBWaWF0Y2hlc2xhdiBPc3RhcGVua28gIDxvc3RhcGVua28udmlhdGNoZXNsYXZAbm9raWEuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCmluZGV4
IDIxMTliNzYuLjJlZDMyMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKQEAgLTg2LDQzICs4Niw4MiBAQCB2b2lk
IFRpbGVkQmFja2luZ1N0b3JlOjppbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRzRGly
dHlSZWN0KQogICAgIHN0YXJ0VGlsZUJ1ZmZlclVwZGF0ZVRpbWVyKCk7CiB9CiAKK3ZvaWQgVGls
ZWRCYWNraW5nU3RvcmU6OnBhaW50VGlsZXMoQ29vcmRpbmF0ZURpc3RhbmNlVmVjdG9yJiB1cGRh
dGVUaWxlcywgQ29vcmRpbmF0ZURpc3RhbmNlVmVjdG9yJiBvdmVyaGFuZ2luZ1RpbGVzLCBWZWN0
b3I8SW50UmVjdD4mIHBhaW50ZWRBcmVhKQoreworICAgIHdoaWxlICh1cGRhdGVUaWxlcy5zaXpl
KCkpIHsKKyAgICAgICAgVGlsZTo6Q29vcmRpbmF0ZSBjb29yZGluYXRlID0gdXBkYXRlVGlsZXMu
bGFzdCgpLmNvb3JkaW5hdGUoKTsKKyAgICAgICAgUmVmUHRyPFRpbGU+IHRpbGUgPSB0aWxlQXQo
Y29vcmRpbmF0ZSk7CisgICAgICAgIGlmICghdGlsZSkKKyAgICAgICAgICAgIHRpbGUgPSBnZXRU
aWxlKGNvb3JkaW5hdGUsIG92ZXJoYW5naW5nVGlsZXMpOworICAgICAgICB0aWxlLT51cGRhdGVC
YWNrQnVmZmVyKCk7CisgICAgICAgIHRpbGUtPnN3YXBCYWNrQnVmZmVyVG9Gcm9udCgpOworICAg
ICAgICBwYWludGVkQXJlYS5hcHBlbmQodGlsZS0+cmVjdCgpKTsKKyAgICAgICAgdXBkYXRlVGls
ZXMucmVtb3ZlTGFzdCgpOworICAgIH0KK30KKwogdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6dXBk
YXRlVGlsZUJ1ZmZlcnMoKQogewogICAgIGlmIChtX2NvbnRlbnRzRnJvemVuKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgaW50IHJlcXVpcmVkVGlsZXMgPSBjcmVhdGVUaWxlcygpOworICAg
IEludFJlY3QgdmlzaWJsZVJlY3QgPSBtYXBGcm9tQ29udGVudHMobV9jbGllbnQtPnRpbGVkQmFj
a2luZ1N0b3JlVmlzaWJsZVJlY3QoKSk7CisgICAgbV9wcmV2aW91c1Zpc2libGVSZWN0ID0gdmlz
aWJsZVJlY3Q7CisKKyAgICBpZiAodmlzaWJsZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBJbnRSZWN0IGtlZXBSZWN0ID0gdmlzaWJsZVJlY3Q7CisgICAgLy8gSW5mbGF0
ZXMgdG8gYm90aCBzaWRlcywgc28gZGl2aWRlIGluZmxhdGUgZGVsdGEgYnkgMgorICAgIGtlZXBS
ZWN0LmluZmxhdGVYKHZpc2libGVSZWN0LndpZHRoKCkgKiAobV9rZWVwQXJlYU11bHRpcGxpZXIu
d2lkdGgoKSAtIDEuZikgLyAyKTsKKyAgICBrZWVwUmVjdC5pbmZsYXRlWSh2aXNpYmxlUmVjdC5o
ZWlnaHQoKSAqIChtX2tlZXBBcmVhTXVsdGlwbGllci5oZWlnaHQoKSAtIDEuZikgLyAyKTsKKyAg
ICBrZWVwUmVjdC5pbnRlcnNlY3QoY29udGVudHNSZWN0KCkpOworCisgICAgQ29vcmRpbmF0ZURp
c3RhbmNlVmVjdG9yIG92ZXJoYW5naW5nVGlsZXM7CisgICAgZ2V0T3ZlcmhhbmdpbmdUaWxlcyhr
ZWVwUmVjdCwgdmlzaWJsZVJlY3QsIG92ZXJoYW5naW5nVGlsZXMpOworCisgICAgSW50UmVjdCBj
b3ZlclJlY3QgPSB2aXNpYmxlUmVjdDsKKyAgICAvLyBJbmZsYXRlcyB0byBib3RoIHNpZGVzLCBz
byBkaXZpZGUgaW5mbGF0ZSBkZWx0YSBieSAyCisgICAgY292ZXJSZWN0LmluZmxhdGVYKHZpc2li
bGVSZWN0LndpZHRoKCkgKiAobV9jb3ZlckFyZWFNdWx0aXBsaWVyLndpZHRoKCkgLSAxLmYpIC8g
Mik7CisgICAgY292ZXJSZWN0LmluZmxhdGVZKHZpc2libGVSZWN0LmhlaWdodCgpICogKG1fY292
ZXJBcmVhTXVsdGlwbGllci5oZWlnaHQoKSAtIDEuZikgLyAyKTsKKyAgICBjb3ZlclJlY3QuaW50
ZXJzZWN0KGNvbnRlbnRzUmVjdCgpKTsKIAogICAgIG1fY2xpZW50LT50aWxlZEJhY2tpbmdTdG9y
ZVBhaW50QmVnaW4oKTsKIAogICAgIFZlY3RvcjxJbnRSZWN0PiBwYWludGVkQXJlYTsKLSAgICBW
ZWN0b3I8UmVmUHRyPFRpbGU+ID4gZGlydHlUaWxlczsKLSAgICBUaWxlTWFwOjppdGVyYXRvciBl
bmQgPSBtX3RpbGVzLmVuZCgpOwotICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Rp
bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoIWl0LT5zZWNvbmQt
PmlzRGlydHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkaXJ0eVRpbGVzLmFw
cGVuZChpdC0+c2Vjb25kKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGRpcnR5VGlsZXMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIG1fY2xpZW50LT50aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKHBhaW50
ZWRBcmVhKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIC8vIEZJWE1FOiBJbiBzaW5n
bGUgdGhyZWFkZWQgY2FzZSwgdGlsZSBiYWNrIGJ1ZmZlcnMgY291bGQgYmUgdXBkYXRlZCBhc3lu
Y2hyb25vdXNseSAKLSAgICAvLyBvbmUgYnkgb25lIGFuZCB0aGVuIHN3YXBwZWQgdG8gZnJvbnQg
aW4gb25lIGdvLiBUaGlzIHdvdWxkIG1pbmltaXplIHRoZSB0aW1lIHNwZW50Ci0gICAgLy8gYmxv
Y2tpbmcgb24gdGlsZSB1cGRhdGVzLgotICAgIHVuc2lnbmVkIHNpemUgPSBkaXJ0eVRpbGVzLnNp
emUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgc2l6ZTsgKytuKSB7Ci0gICAgICAg
IFZlY3RvcjxJbnRSZWN0PiBwYWludGVkUmVjdHMgPSBkaXJ0eVRpbGVzW25dLT51cGRhdGVCYWNr
QnVmZmVyKCk7Ci0gICAgICAgIHBhaW50ZWRBcmVhLmFwcGVuZChwYWludGVkUmVjdHMpOwotICAg
ICAgICBkaXJ0eVRpbGVzW25dLT5zd2FwQmFja0J1ZmZlclRvRnJvbnQoKTsKKyAgICBDb29yZGlu
YXRlRGlzdGFuY2VWZWN0b3IgZGlydHlUaWxlczsKKyAgICBDb29yZGluYXRlRGlzdGFuY2VWZWN0
b3IgbWlzc2luZ1RpbGVzOworCisgICAgZmluZFRpbGVzRm9yVXBkYXRlKHZpc2libGVSZWN0LCB2
aXNpYmxlUmVjdCwgSW50UmVjdCgpLCBtaXNzaW5nVGlsZXMsIGRpcnR5VGlsZXMpOworCisgICAg
Ym9vbCBuZWVkVXBkYXRlID0gZGlydHlUaWxlcy5zaXplKCkgfHwgbWlzc2luZ1RpbGVzLnNpemUo
KTsKKworICAgIHBhaW50VGlsZXMobWlzc2luZ1RpbGVzLnNpemUoKSA/IG1pc3NpbmdUaWxlcyA6
IGRpcnR5VGlsZXMsIG92ZXJoYW5naW5nVGlsZXMsIHBhaW50ZWRBcmVhKTsKKworICAgIGlmIChk
aXJ0eVRpbGVzLmlzRW1wdHkoKSAmJiBtaXNzaW5nVGlsZXMuaXNFbXB0eSgpKSB7CisgICAgICAg
IC8vIEV2ZXJ5dGhpbmcgd2FzIHBhaW50ZWQgaW4gdmlld3BvcnQsIHNvIGxldCdzIHBhaW50IHJl
c2VydmUgYXJlYSBvdXRzaWRlIHZpZXdwb3J0CisgICAgICAgIGRpcnR5VGlsZXMuY2xlYXIoKTsK
KyAgICAgICAgbWlzc2luZ1RpbGVzLmNsZWFyKCk7CisKKyAgICAgICAgZmluZFRpbGVzRm9yVXBk
YXRlKHZpc2libGVSZWN0LCBjb3ZlclJlY3QsIHZpc2libGVSZWN0LCBtaXNzaW5nVGlsZXMsIGRp
cnR5VGlsZXMpOworCisgICAgICAgIG5lZWRVcGRhdGUgfD0gZGlydHlUaWxlcy5zaXplKCkgfHwg
bWlzc2luZ1RpbGVzLnNpemUoKTsKKworICAgICAgICBwYWludFRpbGVzKG1pc3NpbmdUaWxlcy5z
aXplKCkgPyBtaXNzaW5nVGlsZXMgOiBkaXJ0eVRpbGVzLCBvdmVyaGFuZ2luZ1RpbGVzLCBwYWlu
dGVkQXJlYSk7CiAgICAgfQogCiAgICAgbV9jbGllbnQtPnRpbGVkQmFja2luZ1N0b3JlUGFpbnRF
bmQocGFpbnRlZEFyZWEpOwogCi0gICAgaWYgKHJlcXVpcmVkVGlsZXMpCisgICAgaWYgKG5lZWRV
cGRhdGUpCiAgICAgICAgIHN0YXJ0VGlsZUJ1ZmZlclVwZGF0ZVRpbWVyKCk7CisgICAgZWxzZSB7
CisgICAgICAgIC8vIGFsbCB0aWxlcyBpbiBwbGFjZSwgY2FuIGRyb3AgcmVtYWludGluZyBvdmVy
aGFuZ2luZyB0aWxlcworICAgICAgICB3aGlsZSAob3ZlcmhhbmdpbmdUaWxlcy5zaXplKCkpIHsK
KyAgICAgICAgICAgIHJlbW92ZVRpbGUob3ZlcmhhbmdpbmdUaWxlcy5sYXN0KCkuY29vcmRpbmF0
ZSgpKTsKKyAgICAgICAgICAgIG92ZXJoYW5naW5nVGlsZXMucmVtb3ZlTGFzdCgpOworICAgICAg
ICB9CisgICAgfQogfQogCiB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjpwYWludChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC0yMjQsNzUgKzI2Myw2IEBA
IGRvdWJsZSBUaWxlZEJhY2tpbmdTdG9yZTo6dGlsZURpc3RhbmNlKGNvbnN0IEludFJlY3QmIHZp
ZXdwb3J0LCBjb25zdCBUaWxlOjpDb29yCiAgICAgcmV0dXJuIHlCaWFzICogYWJzKHlPZmZzZXQp
ICsgeEJpYXMgKiBhYnMoeE9mZnNldCk7CiB9CiAKLWludCBUaWxlZEJhY2tpbmdTdG9yZTo6Y3Jl
YXRlVGlsZXMoKQotewotICAgIGlmIChtX2NvbnRlbnRzRnJvemVuKQotICAgICAgICByZXR1cm4g
MDsKLSAgICAKLSAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gbWFwRnJvbUNvbnRlbnRzKG1fY2xp
ZW50LT50aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCkpOwotICAgIG1fcHJldmlvdXNWaXNp
YmxlUmVjdCA9IHZpc2libGVSZWN0OwotCi0gICAgaWYgKHZpc2libGVSZWN0LmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBJbnRSZWN0IGtlZXBSZWN0ID0gdmlzaWJsZVJlY3Q7
Ci0gICAgLy8gSW5mbGF0ZXMgdG8gYm90aCBzaWRlcywgc28gZGl2aWRlIGluZmxhdGUgZGVsdGEg
YnkgMgotICAgIGtlZXBSZWN0LmluZmxhdGVYKHZpc2libGVSZWN0LndpZHRoKCkgKiAobV9rZWVw
QXJlYU11bHRpcGxpZXIud2lkdGgoKSAtIDEuZikgLyAyKTsKLSAgICBrZWVwUmVjdC5pbmZsYXRl
WSh2aXNpYmxlUmVjdC5oZWlnaHQoKSAqIChtX2tlZXBBcmVhTXVsdGlwbGllci5oZWlnaHQoKSAt
IDEuZikgLyAyKTsKLSAgICBrZWVwUmVjdC5pbnRlcnNlY3QoY29udGVudHNSZWN0KCkpOwotCi0g
ICAgQ29vcmRpbmF0ZURpc3RhbmNlVmVjdG9yIG92ZXJoYW5naW5nVGlsZXM7Ci0gICAgZ2V0T3Zl
cmhhbmdpbmdUaWxlcyhrZWVwUmVjdCwgdmlzaWJsZVJlY3QsIG92ZXJoYW5naW5nVGlsZXMpOwot
ICAgIAotICAgIEludFJlY3QgY292ZXJSZWN0ID0gdmlzaWJsZVJlY3Q7Ci0gICAgLy8gSW5mbGF0
ZXMgdG8gYm90aCBzaWRlcywgc28gZGl2aWRlIGluZmxhdGUgZGVsdGEgYnkgMgotICAgIGNvdmVy
UmVjdC5pbmZsYXRlWCh2aXNpYmxlUmVjdC53aWR0aCgpICogKG1fY292ZXJBcmVhTXVsdGlwbGll
ci53aWR0aCgpIC0gMS5mKSAvIDIpOwotICAgIGNvdmVyUmVjdC5pbmZsYXRlWSh2aXNpYmxlUmVj
dC5oZWlnaHQoKSAqIChtX2NvdmVyQXJlYU11bHRpcGxpZXIuaGVpZ2h0KCkgLSAxLmYpIC8gMik7
Ci0gICAgY292ZXJSZWN0LmludGVyc2VjdChjb250ZW50c1JlY3QoKSk7Ci0gICAgCi0gICAgLy8g
U2VhcmNoIGZvciB0aGUgdGlsZSBwb3NpdGlvbiBjbG9zZXN0IHRvIHRoZSB2aWV3cG9ydCBjZW50
ZXIgdGhhdCBkb2VzIG5vdCB5ZXQgY29udGFpbiBhIHRpbGUuIAotICAgIC8vIFdoaWNoIHBvc2l0
aW9uIGlzIGNvbnNpZGVyZWQgdGhlIGNsb3Nlc3QgZGVwZW5kcyBvbiB0aGUgdGlsZURpc3RhbmNl
IGZ1bmN0aW9uLgotICAgIGRvdWJsZSBzaG9ydGVzdERpc3RhbmNlID0gc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjppbmZpbml0eSgpOwotICAgIFZlY3RvcjxUaWxlOjpDb29yZGluYXRlPiB0
aWxlc1RvQ3JlYXRlOwotICAgIHVuc2lnbmVkIHJlcXVpcmVkVGlsZUNvdW50ID0gMDsKLSAgICBU
aWxlOjpDb29yZGluYXRlIHRvcExlZnQgPSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KGNvdmVyUmVj
dC5sb2NhdGlvbigpKTsKLSAgICBUaWxlOjpDb29yZGluYXRlIGJvdHRvbVJpZ2h0ID0gdGlsZUNv
b3JkaW5hdGVGb3JQb2ludChJbnRQb2ludChjb3ZlclJlY3QubWF4WCgpLCBjb3ZlclJlY3QubWF4
WSgpKSk7Ci0gICAgZm9yICh1bnNpZ25lZCB5Q29vcmRpbmF0ZSA9IHRvcExlZnQueSgpOyB5Q29v
cmRpbmF0ZSA8PSBib3R0b21SaWdodC55KCk7ICsreUNvb3JkaW5hdGUpIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCB4Q29vcmRpbmF0ZSA9IHRvcExlZnQueCgpOyB4Q29vcmRpbmF0ZSA8PSBib3R0
b21SaWdodC54KCk7ICsreENvb3JkaW5hdGUpIHsKLSAgICAgICAgICAgIFRpbGU6OkNvb3JkaW5h
dGUgY3VycmVudENvb3JkaW5hdGUoeENvb3JkaW5hdGUsIHlDb29yZGluYXRlKTsKLSAgICAgICAg
ICAgIGlmICh0aWxlQXQoY3VycmVudENvb3JkaW5hdGUpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgKytyZXF1aXJlZFRpbGVDb3VudDsKLSAgICAgICAgICAgIC8vIERp
c3RhbmNlIGlzIDAgZm9yIGFsbCBjdXJyZW50bHkgdmlzaWJsZSB0aWxlcy4KLSAgICAgICAgICAg
IGRvdWJsZSBkaXN0YW5jZSA9IHRpbGVEaXN0YW5jZSh2aXNpYmxlUmVjdCwgY3VycmVudENvb3Jk
aW5hdGUpOwotICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gc2hvcnRlc3REaXN0YW5jZSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChkaXN0YW5jZSA8IHNob3J0
ZXN0RGlzdGFuY2UpIHsKLSAgICAgICAgICAgICAgICB0aWxlc1RvQ3JlYXRlLmNsZWFyKCk7Ci0g
ICAgICAgICAgICAgICAgc2hvcnRlc3REaXN0YW5jZSA9IGRpc3RhbmNlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgdGlsZXNUb0NyZWF0ZS5hcHBlbmQoY3VycmVudENvb3JkaW5hdGUpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIE5vdyBjb25zdHJ1Y3QgdGhlIHRpbGUocykK
LSAgICB1bnNpZ25lZCB0aWxlc1RvQ3JlYXRlQ291bnQgPSB0aWxlc1RvQ3JlYXRlLnNpemUoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgdGlsZXNUb0NyZWF0ZUNvdW50OyArK24pIHsK
LSAgICAgICAgVGlsZTo6Q29vcmRpbmF0ZSBjb29yZGluYXRlID0gdGlsZXNUb0NyZWF0ZVtuXTsK
LSAgICAgICAgZ2V0VGlsZShjb29yZGluYXRlLCBvdmVyaGFuZ2luZ1RpbGVzKTsKLSAgICB9Ci0g
ICAgcmVxdWlyZWRUaWxlQ291bnQgLT0gdGlsZXNUb0NyZWF0ZUNvdW50OwotICAgIGlmICghcmVx
dWlyZWRUaWxlQ291bnQpIHsKLSAgICAgICAgLy8gYWxsIHRpbGVzIGluIHBsYWNlLCBjYW4gZHJv
cCByZW1haW50aW5nIG92ZXJoYW5naW5nIHRpbGVzCi0gICAgICAgIHdoaWxlKG92ZXJoYW5naW5n
VGlsZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICByZW1vdmVUaWxlKG92ZXJoYW5naW5nVGlsZXMu
bGFzdCgpLmNvb3JkaW5hdGUoKSk7Ci0gICAgICAgICAgICBvdmVyaGFuZ2luZ1RpbGVzLnJlbW92
ZUxhc3QoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXF1aXJlZFRpbGVDb3Vu
dDsKLX0KLQogUGFzc1JlZlB0cjxUaWxlPiBUaWxlZEJhY2tpbmdTdG9yZTo6dGlsZUF0KGNvbnN0
IFRpbGU6OkNvb3JkaW5hdGUmIGNvb3JkaW5hdGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdGls
ZXMuZ2V0KGNvb3JkaW5hdGUpOwpAQCAtMzM2LDcgKzMwNiw2IEBAIEludFJlY3QgVGlsZWRCYWNr
aW5nU3RvcmU6OnRpbGVSZWN0Rm9yQ29vcmRpbmF0ZShjb25zdCBUaWxlOjpDb29yZGluYXRlJiBj
b29yZGluCiAgICAgICAgIG1fdGlsZVNpemUud2lkdGgoKSwKICAgICAgICAgbV90aWxlU2l6ZS5o
ZWlnaHQoKSk7CiAKLSAgICByZWN0LmludGVyc2VjdChjb250ZW50c1JlY3QoKSk7CiAgICAgcmV0
dXJuIHJlY3Q7CiB9CiAgICAgCkBAIC00MjksNiArMzk4LDQ1IEBAIHZvaWQgVGlsZWRCYWNraW5n
U3RvcmU6OmdldE92ZXJoYW5naW5nVGlsZXMoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50
UmVjdCYKICAgICAgICAgICAmY29tcGFyZUNvb3JkaW5hdGVEaXN0YW5jZVBhaXJGb3JRU29ydCk7
CiB9CiAKKy8vIFRoZSBzaWduIG9mIGNvbXBhcmUgZnVuY3Rpb24gY2hhbmdlZCB0byBwdXQgbmVh
cmVzdCBlbGVtZW50IHRvIHRoZSBlbmQuCitpbnQgVGlsZWRCYWNraW5nU3RvcmU6OmludmVydGVk
Q29tcGFyZUNvb3JkaW5hdGVEaXN0YW5jZVBhaXJGb3JRU29ydChjb25zdCB2b2lkKiBhLCBjb25z
dCB2b2lkKiBiKQoreworICAgIGNvbnN0IENvb3JkaW5hdGVEaXN0YW5jZVBhaXIqIHZhID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZURpc3RhbmNlUGFpcio+KGEpOworICAgIGNvbnN0IENv
b3JkaW5hdGVEaXN0YW5jZVBhaXIqIHZiID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZURp
c3RhbmNlUGFpcio+KGIpOworICAgIHJldHVybiAoaW50KSgodmItPmRpc3RhbmNlKCkgLSB2YS0+
ZGlzdGFuY2UoKSkgKiAxMDAwKTsKK30KKwordm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6ZmluZFRp
bGVzRm9yVXBkYXRlKGNvbnN0IEludFJlY3QmIHZpZXdwb3J0LCBjb25zdCBJbnRSZWN0JiB1cGRh
dGVSZWN0LCBjb25zdCBJbnRSZWN0JiBza2lwUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb29yZGluYXRlRGlzdGFuY2VWZWN0b3ImIG1pc3NpbmdUaWxl
cywgQ29vcmRpbmF0ZURpc3RhbmNlVmVjdG9yJiBkaXJ0eVRpbGVzKQoreworICAgIFRpbGU6OkNv
b3JkaW5hdGUgdG9wTGVmdCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQodXBkYXRlUmVjdC5taW5Y
TWluWUNvcm5lcigpKTsKKyAgICBUaWxlOjpDb29yZGluYXRlIGJvdHRvbVJpZ2h0ID0gdGlsZUNv
b3JkaW5hdGVGb3JQb2ludCh1cGRhdGVSZWN0Lm1heFhNYXhZQ29ybmVyKCkpOworICAgIEludFBv
aW50IHZpZXdQb3J0Q2VudGVyID0gdmlld3BvcnQuY2VudGVyKCk7CisgICAgZm9yICh1bnNpZ25l
ZCB5Q29vcmRpbmF0ZSA9IHRvcExlZnQueSgpOyB5Q29vcmRpbmF0ZSA8PSBib3R0b21SaWdodC55
KCk7ICsreUNvb3JkaW5hdGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB4Q29vcmRpbmF0ZSA9
IHRvcExlZnQueCgpOyB4Q29vcmRpbmF0ZSA8PSBib3R0b21SaWdodC54KCk7ICsreENvb3JkaW5h
dGUpIHsKKyAgICAgICAgICAgIFRpbGU6OkNvb3JkaW5hdGUgY3VycmVudENvb3JkaW5hdGUoeENv
b3JkaW5hdGUsIHlDb29yZGluYXRlKTsKKyAgICAgICAgICAgIEludFJlY3QgY3VycmVudFRpbGVS
ZWN0ID0gdGlsZVJlY3RGb3JDb29yZGluYXRlKGN1cnJlbnRDb29yZGluYXRlKTsKKyAgICAgICAg
ICAgIGRvdWJsZSBjdXJyZW50VGlsZURpc3RhbmNlID0gdGlsZURpc3RhbmNlKHZpZXdwb3J0LCBj
dXJyZW50Q29vcmRpbmF0ZSk7CisgICAgICAgICAgICBpZiAoIXNraXBSZWN0LmlzRW1wdHkoKSAm
JiBza2lwUmVjdC5pbnRlcnNlY3RzKGN1cnJlbnRUaWxlUmVjdCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgIFJlZlB0cjxUaWxlPiB0aWxlID0gdGlsZUF0KGN1cnJl
bnRDb29yZGluYXRlKTsKKyAgICAgICAgICAgIGlmICh0aWxlKSB7CisgICAgICAgICAgICAgICAg
aWYodGlsZS0+aXNEaXJ0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRpcnR5VGlsZXMuYXBw
ZW5kKENvb3JkaW5hdGVEaXN0YW5jZVBhaXIoY3VycmVudENvb3JkaW5hdGUsIGN1cnJlbnRUaWxl
RGlzdGFuY2UpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIG1pc3NpbmdUaWxlcy5hcHBlbmQoQ29vcmRpbmF0ZURpc3RhbmNlUGFpcihj
dXJyZW50Q29vcmRpbmF0ZSwgY3VycmVudFRpbGVEaXN0YW5jZSkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgcXNvcnQobWlzc2luZ1RpbGVzLmJlZ2luKCksIG1pc3Np
bmdUaWxlcy5zaXplKCksIHNpemVvZihDb29yZGluYXRlRGlzdGFuY2VQYWlyKSwKKyAgICAgICAg
ICAmaW52ZXJ0ZWRDb21wYXJlQ29vcmRpbmF0ZURpc3RhbmNlUGFpckZvclFTb3J0KTsKKyAgICBx
c29ydChkaXJ0eVRpbGVzLmJlZ2luKCksIGRpcnR5VGlsZXMuc2l6ZSgpLCBzaXplb2YoQ29vcmRp
bmF0ZURpc3RhbmNlUGFpciksCisgICAgICAgICAgJmludmVydGVkQ29tcGFyZUNvb3JkaW5hdGVE
aXN0YW5jZVBhaXJGb3JRU29ydCk7Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuaAppbmRleCBkM2E4
ZWUzLi4zNmU1MmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9UaWxlZEJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1RpbGVkQmFja2luZ1N0b3JlLmgKQEAgLTc2LDcgKzc2LDYgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHRpbGVCdWZmZXJVcGRhdGVUaW1lckZpcmVkKFRpbGVUaW1lciopOwogICAgIAogICAgIHZv
aWQgdXBkYXRlVGlsZUJ1ZmZlcnMoKTsKLSAgICBpbnQgY3JlYXRlVGlsZXMoKTsKICAgICAKICAg
ICB2b2lkIGNvbW1pdFNjYWxlQ2hhbmdlKCk7CiAKQEAgLTEwNiw5ICsxMDUsMTIgQEAgcHJpdmF0
ZToKICAgICB9OwogICAgIHR5cGVkZWYgVmVjdG9yPENvb3JkaW5hdGVEaXN0YW5jZVBhaXI+IENv
b3JkaW5hdGVEaXN0YW5jZVZlY3RvcjsKICAgICBzdGF0aWMgaW50IGNvbXBhcmVDb29yZGluYXRl
RGlzdGFuY2VQYWlyRm9yUVNvcnQoY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqKTsKKyAgICBzdGF0
aWMgaW50IGludmVydGVkQ29tcGFyZUNvb3JkaW5hdGVEaXN0YW5jZVBhaXJGb3JRU29ydChjb25z
dCB2b2lkKiwgY29uc3Qgdm9pZCopOwogCiAgICAgdm9pZCBnZXRPdmVyaGFuZ2luZ1RpbGVzKGNv
bnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZURpc3RhbmNlVmVjdG9yJik7
CiAgICAgUGFzc1JlZlB0cjxUaWxlPiBnZXRUaWxlKGNvbnN0IFRpbGU6OkNvb3JkaW5hdGUmLCBD
b29yZGluYXRlRGlzdGFuY2VWZWN0b3ImKTsKKyAgICB2b2lkIGZpbmRUaWxlc0ZvclVwZGF0ZShj
b25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRl
RGlzdGFuY2VWZWN0b3ImLCBDb29yZGluYXRlRGlzdGFuY2VWZWN0b3ImKTsKKyAgICB2b2lkIHBh
aW50VGlsZXMoQ29vcmRpbmF0ZURpc3RhbmNlVmVjdG9yJiwgQ29vcmRpbmF0ZURpc3RhbmNlVmVj
dG9yJiwgVmVjdG9yPEludFJlY3Q+Jik7CiAKIHByaXZhdGU6CiAgICAgVGlsZWRCYWNraW5nU3Rv
cmVDbGllbnQqIG1fY2xpZW50Owo=
</data>
<flag name="review"
          id="89998"
          type_id="1"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96337</attachid>
            <date>2011-06-07 17:30:48 -0700</date>
            <delta_ts>2011-06-09 16:25:03 -0700</delta_ts>
            <desc>Patch 5: Add tile update timeout to break tile painting cycle to avoid blocking.</desc>
            <filename>tiles_p5.diff</filename>
            <type>text/plain</type>
            <size>8132</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">Y29tbWl0IDk1ZTgyNTY3YmNlN2U1ZjRiNjRmODcyNDdjOTkwYWRkNGQ4YjdmM2MKQXV0aG9yOiBW
aWF0Y2hlc2xhdiBPc3RhcGVua28gPG9zdGFwZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+CkRh
dGU6ICAgTW9uIEp1biA2IDIxOjQxOjI2IDIwMTEgLTA0MDAKCiAgICBQYXJ0NSBvZiB0aWxlcyBw
YWludGluZyByZWRlc2lnbi4KICAgIEFkZCB0aWxlIHVwZGF0ZSB0aW1lb3V0IHRvIGJyZWFrIHRp
bGUgcGFpbnRpbmcgY3ljbGUgdG8gYXZvaWQgYmxvY2tpbmcuCiAgICBUaW1lb3V0cyBwYWludGlu
ZyBvdXRzaWRlIG9mIHZpZXdwb3J0IHdpdGhvdXQgc2Nyb2xsaW5nIGFuZCBldmVyeXdoZXJlCiAg
ICBkdXJpbmcgc2Nyb2xsaW5nLgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1MmEyYzBlLi5jNzA5NmVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC01LDYgKzUsMjYgQEAKICAgICAgICAgW1F0XSBWZXJ5IGplcmt5IHNjcm9sbGlu
ZyBiZWNhdXNlIG9mIGJsb2NraW5nIGluIHRpbGVkIGJhY2tpbmcgc3RvcmUuCiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mzg5NAogCisgICAgICAgIFBh
cnQ1IG9mIHRpbGVzIHBhaW50aW5nIHJlZGVzaWduLgorICAgICAgICBBZGQgdGlsZSB1cGRhdGUg
dGltZW91dCB0byBicmVhayB0aWxlIHBhaW50aW5nIGN5Y2xlIHRvIGF2b2lkIGJsb2NraW5nLgor
ICAgICAgICBUaW1lb3V0cyBwYWludGluZyBvdXRzaWRlIG9mIHZpZXdwb3J0IHdpdGhvdXQgc2Ny
b2xsaW5nIGFuZCBldmVyeXdoZXJlCisgICAgICAgIGR1cmluZyBzY3JvbGxpbmcuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZTo6VGlsZWRCYWNraW5nU3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OnBhaW50VGlsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6VGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGVCdWZmZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVkQmFja2luZ1N0b3JlOjpzZXRUaWxlVXBkYXRlVGltZW91dCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkQmFja2luZ1N0b3JlOjp0aWxlVXBkYXRlVGltZW91dCk6CisKKzIwMTEtMDYtMDYgIFZp
YXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9zdGFwZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBWZXJ5
IGplcmt5IHNjcm9sbGluZyBiZWNhdXNlIG9mIGJsb2NraW5nIGluIHRpbGVkIGJhY2tpbmcgc3Rv
cmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mzg5
NAorCiAgICAgICAgIFBhcnQ0IG9mIHRpbGVzIHBhaW50aW5nIHJlZGVzaWduLgogICAgICAgICBQ
cmlvcml0aXplIHRpbGUgcGFpdGluZy4gVmlld3BvcnQgYXJlYSBpcyB1cGRhdGVkIDFzdCBhbmQg
bWlzc2luZyB0aWxlcyBhcmUgCiAgICAgICAgIHVwZGF0ZWQgYmVmb3JlIGRpcnR5LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUu
Y3BwCmluZGV4IDJlZDMyMGUuLjFiYmVhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKQEAgLTIyLDYgKzIyLDcg
QEAKIAogI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogCisjaW5jbHVkZSAiQ3VycmVu
dFRpbWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJUaWxlZEJh
Y2tpbmdTdG9yZUNsaWVudC5oIgogCkBAIC00MCw2ICs0MSw3IEBAIFRpbGVkQmFja2luZ1N0b3Jl
OjpUaWxlZEJhY2tpbmdTdG9yZShUaWxlZEJhY2tpbmdTdG9yZUNsaWVudCogY2xpZW50KQogICAg
ICwgbV9jb250ZW50c1NjYWxlKDEuZikKICAgICAsIG1fcGVuZGluZ1NjYWxlKDApCiAgICAgLCBt
X2NvbnRlbnRzRnJvemVuKGZhbHNlKQorICAgICwgbV91cGRhdGVUaW1lT3V0KDE1KQogewogfQog
CkBAIC04Niw4ICs4OCwxMSBAQCB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjppbnZhbGlkYXRlKGNv
bnN0IEludFJlY3QmIGNvbnRlbnRzRGlydHlSZWN0KQogICAgIHN0YXJ0VGlsZUJ1ZmZlclVwZGF0
ZVRpbWVyKCk7CiB9CiAKLXZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnBhaW50VGlsZXMoQ29vcmRp
bmF0ZURpc3RhbmNlVmVjdG9yJiB1cGRhdGVUaWxlcywgQ29vcmRpbmF0ZURpc3RhbmNlVmVjdG9y
JiBvdmVyaGFuZ2luZ1RpbGVzLCBWZWN0b3I8SW50UmVjdD4mIHBhaW50ZWRBcmVhKQorYm9vbCBU
aWxlZEJhY2tpbmdTdG9yZTo6cGFpbnRUaWxlcyhDb29yZGluYXRlRGlzdGFuY2VWZWN0b3ImIHVw
ZGF0ZVRpbGVzLCBDb29yZGluYXRlRGlzdGFuY2VWZWN0b3ImIG92ZXJoYW5naW5nVGlsZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxJbnRSZWN0PiYgcGFpbnRl
ZEFyZWEsIGJvb2wgc3RvcE9uVGltZW91dCkKIHsKKyAgICBkb3VibGUgc3RhcnRUaW1lID0gV1RG
OjpjdXJyZW50VGltZU1TKCk7CisKICAgICB3aGlsZSAodXBkYXRlVGlsZXMuc2l6ZSgpKSB7CiAg
ICAgICAgIFRpbGU6OkNvb3JkaW5hdGUgY29vcmRpbmF0ZSA9IHVwZGF0ZVRpbGVzLmxhc3QoKS5j
b29yZGluYXRlKCk7CiAgICAgICAgIFJlZlB0cjxUaWxlPiB0aWxlID0gdGlsZUF0KGNvb3JkaW5h
dGUpOwpAQCAtOTcsNyArMTAyLDExIEBAIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnBhaW50VGls
ZXMoQ29vcmRpbmF0ZURpc3RhbmNlVmVjdG9yJiB1cGRhdGVUaWxlcywgQ29vcmRpCiAgICAgICAg
IHRpbGUtPnN3YXBCYWNrQnVmZmVyVG9Gcm9udCgpOwogICAgICAgICBwYWludGVkQXJlYS5hcHBl
bmQodGlsZS0+cmVjdCgpKTsKICAgICAgICAgdXBkYXRlVGlsZXMucmVtb3ZlTGFzdCgpOworICAg
ICAgICBpZiAoc3RvcE9uVGltZW91dCAmJiBXVEY6OmN1cnJlbnRUaW1lTVMoKSAtIHN0YXJ0VGlt
ZSA+IG1fdXBkYXRlVGltZU91dCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGls
ZUJ1ZmZlcnMoKQpAQCAtMTM2LDEwICsxNDUsMTAgQEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6
dXBkYXRlVGlsZUJ1ZmZlcnMoKQogICAgIGZpbmRUaWxlc0ZvclVwZGF0ZSh2aXNpYmxlUmVjdCwg
dmlzaWJsZVJlY3QsIEludFJlY3QoKSwgbWlzc2luZ1RpbGVzLCBkaXJ0eVRpbGVzKTsKIAogICAg
IGJvb2wgbmVlZFVwZGF0ZSA9IGRpcnR5VGlsZXMuc2l6ZSgpIHx8IG1pc3NpbmdUaWxlcy5zaXpl
KCk7CisgICAgYm9vbCBpblNjcm9sbGluZyA9IG1fc2Nyb2xsRGVsdGEueCgpID4gMCB8fCBtX3Nj
cm9sbERlbHRhLnkoKSA+IDA7CisgICAgYm9vbCB0aW1lb3V0ID0gcGFpbnRUaWxlcyhtaXNzaW5n
VGlsZXMuc2l6ZSgpID8gbWlzc2luZ1RpbGVzIDogZGlydHlUaWxlcywgb3ZlcmhhbmdpbmdUaWxl
cywgcGFpbnRlZEFyZWEsIGluU2Nyb2xsaW5nKTsKIAotICAgIHBhaW50VGlsZXMobWlzc2luZ1Rp
bGVzLnNpemUoKSA/IG1pc3NpbmdUaWxlcyA6IGRpcnR5VGlsZXMsIG92ZXJoYW5naW5nVGlsZXMs
IHBhaW50ZWRBcmVhKTsKLQotICAgIGlmIChkaXJ0eVRpbGVzLmlzRW1wdHkoKSAmJiBtaXNzaW5n
VGlsZXMuaXNFbXB0eSgpKSB7CisgICAgaWYgKGRpcnR5VGlsZXMuaXNFbXB0eSgpICYmIG1pc3Np
bmdUaWxlcy5pc0VtcHR5KCkgJiYgIXRpbWVvdXQpIHsKICAgICAgICAgLy8gRXZlcnl0aGluZyB3
YXMgcGFpbnRlZCBpbiB2aWV3cG9ydCwgc28gbGV0J3MgcGFpbnQgcmVzZXJ2ZSBhcmVhIG91dHNp
ZGUgdmlld3BvcnQKICAgICAgICAgZGlydHlUaWxlcy5jbGVhcigpOwogICAgICAgICBtaXNzaW5n
VGlsZXMuY2xlYXIoKTsKQEAgLTE0Nyw4ICsxNTYsNyBAQCB2b2lkIFRpbGVkQmFja2luZ1N0b3Jl
Ojp1cGRhdGVUaWxlQnVmZmVycygpCiAgICAgICAgIGZpbmRUaWxlc0ZvclVwZGF0ZSh2aXNpYmxl
UmVjdCwgY292ZXJSZWN0LCB2aXNpYmxlUmVjdCwgbWlzc2luZ1RpbGVzLCBkaXJ0eVRpbGVzKTsK
IAogICAgICAgICBuZWVkVXBkYXRlIHw9IGRpcnR5VGlsZXMuc2l6ZSgpIHx8IG1pc3NpbmdUaWxl
cy5zaXplKCk7Ci0KLSAgICAgICAgcGFpbnRUaWxlcyhtaXNzaW5nVGlsZXMuc2l6ZSgpID8gbWlz
c2luZ1RpbGVzIDogZGlydHlUaWxlcywgb3ZlcmhhbmdpbmdUaWxlcywgcGFpbnRlZEFyZWEpOwor
ICAgICAgICBwYWludFRpbGVzKG1pc3NpbmdUaWxlcy5zaXplKCkgPyBtaXNzaW5nVGlsZXMgOiBk
aXJ0eVRpbGVzLCBvdmVyaGFuZ2luZ1RpbGVzLCBwYWludGVkQXJlYSwgdHJ1ZSk7CiAgICAgfQog
CiAgICAgbV9jbGllbnQtPnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQocGFpbnRlZEFyZWEpOwpA
QCAtNDM3LDYgKzQ0NSwxMSBAQCB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjpmaW5kVGlsZXNGb3JV
cGRhdGUoY29uc3QgSW50UmVjdCYgdmlld3BvcnQsIGNvbnN0IEludFJlYwogICAgICAgICAgICZp
bnZlcnRlZENvbXBhcmVDb29yZGluYXRlRGlzdGFuY2VQYWlyRm9yUVNvcnQpOwogfQogCit2b2lk
IFRpbGVkQmFja2luZ1N0b3JlOjpzZXRUaWxlVXBkYXRlVGltZW91dChpbnQgdGltZW91dCkKK3sK
KyAgICBtX3VwZGF0ZVRpbWVPdXQgPSB0aW1lb3V0OworfQorCiB9CiAKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmgK
aW5kZXggMzZlNTJjOC4uNDg4MTM0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oCkBAIC02OCw2ICs2OCw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyhjb25zdCBGbG9hdFNp
emUmIGtlZXBNdWx0aXBsaWVyLCBjb25zdCBGbG9hdFNpemUmIGNvdmVyTXVsdGlwbGllcik7CiAg
ICAgdm9pZCBzZXRTY3JvbGxEZWx0YShjb25zdCBJbnRQb2ludCYgZGVsdGEpOwogCisgICAgaW50
IHRpbGVVcGRhdGVUaW1lb3V0KCkgY29uc3QgeyByZXR1cm4gbV91cGRhdGVUaW1lT3V0OyB9Cisg
ICAgdm9pZCBzZXRUaWxlVXBkYXRlVGltZW91dChpbnQgdGltZW91dCk7CisKIHByaXZhdGU6CiAg
ICAgdm9pZCBzdGFydFRpbGVCdWZmZXJVcGRhdGVUaW1lcigpOwogICAgIApAQCAtMTEwLDcgKzEx
Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXRPdmVyaGFuZ2luZ1RpbGVzKGNvbnN0IEludFJl
Y3QmLCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZURpc3RhbmNlVmVjdG9yJik7CiAgICAgUGFz
c1JlZlB0cjxUaWxlPiBnZXRUaWxlKGNvbnN0IFRpbGU6OkNvb3JkaW5hdGUmLCBDb29yZGluYXRl
RGlzdGFuY2VWZWN0b3ImKTsKICAgICB2b2lkIGZpbmRUaWxlc0ZvclVwZGF0ZShjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlRGlzdGFuY2VW
ZWN0b3ImLCBDb29yZGluYXRlRGlzdGFuY2VWZWN0b3ImKTsKLSAgICB2b2lkIHBhaW50VGlsZXMo
Q29vcmRpbmF0ZURpc3RhbmNlVmVjdG9yJiwgQ29vcmRpbmF0ZURpc3RhbmNlVmVjdG9yJiwgVmVj
dG9yPEludFJlY3Q+Jik7CisgICAgYm9vbCBwYWludFRpbGVzKENvb3JkaW5hdGVEaXN0YW5jZVZl
Y3RvciYsIENvb3JkaW5hdGVEaXN0YW5jZVZlY3RvciYsIFZlY3RvcjxJbnRSZWN0PiYsIGJvb2wp
OwogCiBwcml2YXRlOgogICAgIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50KiBtX2NsaWVudDsKQEAg
LTEzMSw2ICsxMzQsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2NvbnRlbnRzRnJvemVuOwog
ICAgIEludFBvaW50IG1fc2Nyb2xsRGVsdGE7CisgICAgaW50IG1fdXBkYXRlVGltZU91dDsKIAog
ICAgIGZyaWVuZCBjbGFzcyBUaWxlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAppbmRl
eCAzOWMxNDlhLi5mMDg5Yjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
cGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCkBAIC0xMjE5
LDYgKzEyMTksMTIgQEAgdm9pZCBRV2ViUGFnZVByaXZhdGU6OmR5bmFtaWNQcm9wZXJ0eUNoYW5n
ZUV2ZW50KFFEeW5hbWljUHJvcGVydHlDaGFuZ2VFdmVudCogZXYKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgUVBvaW50IGRlbHRhID0gcS0+cHJvcGVydHkoIl9xX1RpbGVkQmFja2luZ1N0
b3JlU2Nyb2xsRGVsdGEiKS50b1BvaW50KCk7CiAgICAgICAgIHN0b3JlLT5zZXRTY3JvbGxEZWx0
YShJbnRQb2ludChkZWx0YSkpOworICAgIH0gZWxzZSBpZiAoZXZlbnQtPnByb3BlcnR5TmFtZSgp
ID09ICJfcV9UaWxlZEJhY2tpbmdTdG9yZVRpbGVVcGRhdGVUaW1lb3V0IikgeworICAgICAgICBX
ZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKHEtPm1haW5GcmFt
ZSgpKTsKKyAgICAgICAgaWYgKCFmcmFtZS0+dGlsZWRCYWNraW5nU3RvcmUoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgaW50IHRpbGVVcGRhdGVUaW1lb3V0ID0gcS0+cHJvcGVydHko
Il9xX1RpbGVkQmFja2luZ1N0b3JlVGlsZVVwZGF0ZVRpbWVvdXQiKS50b0ludCgpOworICAgICAg
ICBmcmFtZS0+dGlsZWRCYWNraW5nU3RvcmUoKS0+c2V0VGlsZVVwZGF0ZVRpbWVvdXQodGlsZVVw
ZGF0ZVRpbWVvdXQpOwogICAgIH0KICNlbmRpZgogICAgIGVsc2UgaWYgKGV2ZW50LT5wcm9wZXJ0
eU5hbWUoKSA9PSAiX3Ffd2ViSW5zcGVjdG9yU2VydmVyUG9ydCIpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5k
ZXggNzU3Y2I4YS4uMmE4NTc4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAx
MS0wNi0wNiAgVmlhdGNoZXNsYXYgT3N0YXBlbmtvICA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5v
a2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbUXRdIFZlcnkgamVya3kgc2Nyb2xsaW5nIGJlY2F1c2Ugb2YgYmxvY2tpbmcgaW4gdGlsZWQg
YmFja2luZyBzdG9yZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUzODk0CisKKwlQYXJ0NSBvZiB0aWxlcyBwYWludGluZyByZWRlc2lnbi4KKyAgICAg
ICAgQWRkIHRpbGUgdXBkYXRlIHRpbWVvdXQgdG8gYnJlYWsgdGlsZSBwYWludGluZyBjeWNsZSB0
byBhdm9pZCBibG9ja2luZy4KKyAgICAgICAgVGltZW91dHMgcGFpbnRpbmcgb3V0c2lkZSBvZiB2
aWV3cG9ydCB3aXRob3V0IHNjcm9sbGluZyBhbmQgZXZlcnl3aGVyZQorICAgICAgICBkdXJpbmcg
c2Nyb2xsaW5nLgorCisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQ
YWdlUHJpdmF0ZTo6ZHluYW1pY1Byb3BlcnR5Q2hhbmdlRXZlbnQpOgorCiAyMDExLTA1LTIzICBW
aWF0Y2hlc2xhdiBPc3RhcGVua28gIDxvc3RhcGVua28udmlhdGNoZXNsYXZAbm9raWEuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96338</attachid>
            <date>2011-06-07 17:31:50 -0700</date>
            <delta_ts>2011-06-09 16:24:49 -0700</delta_ts>
            <desc>Patch 6: Do some tiles updates directly from paint to reduce flicker.</desc>
            <filename>tiles_p6.diff</filename>
            <type>text/plain</type>
            <size>7195</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">Y29tbWl0IGRjYTIzN2JjMDJkMGEzNDMzMTg0ZDMzZWNlZTFhZTM4ZGM2YTQ5N2UKQXV0aG9yOiBW
aWF0Y2hlc2xhdiBPc3RhcGVua28gPG9zdGFwZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+CkRh
dGU6ICAgVHVlIEp1biA3IDE1OjM1OjMyIDIwMTEgLTA0MDAKCiAgICBQYXJ0NiBvZiB0aWxlcyBw
YWludGluZyByZWRlc2lnbi4KICAgIERvIHNvbWUgdGlsZXMgdXBkYXRlcyBkaXJlY3RseSBmcm9t
IHBhaW50IHRvIHJlZHVjZSBmbGlja2VyLiBGbGFncyBhZGRlZAogICAgdG8gYXZvaWQgdGlsZSB1
cGRhdGUgYW5kIGxheW91dCByZWN1cnNpdmUgY2FsbHMuCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGM3MDk2ZWMu
Ljc4MjI5MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMS0wNi0wNyAgVmlhdGNo
ZXNsYXYgT3N0YXBlbmtvICA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFZlcnkgamVy
a3kgc2Nyb2xsaW5nIGJlY2F1c2Ugb2YgYmxvY2tpbmcgaW4gdGlsZWQgYmFja2luZyBzdG9yZS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzODk0CisK
KyAgICAgICAgUGFydDYgb2YgdGlsZXMgcGFpbnRpbmcgcmVkZXNpZ24uCisgICAgICAgIERvIHNv
bWUgdGlsZXMgdXBkYXRlcyBkaXJlY3RseSBmcm9tIHBhaW50IHRvIHJlZHVjZSBmbGlja2VyLgor
ICAgICAgICBGbGFncyBhZGRlZCB0byBhdm9pZCB0aWxlIHVwZGF0ZSBhbmQgbGF5b3V0IHJlY3Vy
c2l2ZSBjYWxscy4KKworICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWU6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbik6CisgICAgICAgICogcGFnZS9G
cmFtZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlOjpUaWxlZEJhY2tpbmdTdG9y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZUJ1ZmZl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OnBhaW50KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJRdEltcGw6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbik6CisKIDIw
MTEtMDYtMDYgIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9zdGFwZW5rby52aWF0Y2hlc2xhdkBu
b2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWUuY3BwCmluZGV4IGU1NTQzOGYuLjRjZmJlNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBA
IC05NjMsMTIgKzk2MywxNSBAQCB2b2lkIEZyYW1lOjpzZXRUaWxlZEJhY2tpbmdTdG9yZUVuYWJs
ZWQoYm9vbCBlbmFibGVkKQogICAgICAgICBtX3ZpZXctPnNldFBhaW50c0VudGlyZUNvbnRlbnRz
KHRydWUpOwogfQogCi12b2lkIEZyYW1lOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKQor
Ym9vbCBGcmFtZTo6dGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkKIHsKICAgICBpZiAoIW1f
dmlldykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYobV92
aWV3LT5pc0luTGF5b3V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBtX3ZpZXctPnVw
ZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKICAgICBtX3ZpZXctPmZsdXNo
RGVmZXJyZWRSZXBhaW50cygpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEZyYW1lOjp0
aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgcmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCA0NGZlNDZlLi5lZTY5N2EzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5oCkBAIC0yNjcsNyArMjY3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgLy8gVGlsZWRCYWNraW5nU3RvcmVDbGllbnQgaW50ZXJmYWNlCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKTsKKyAgICAg
ICAgdmlydHVhbCBib29sIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBJbnRSZWN0Jik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50
RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcGFpbnRlZEFyZWEpOwogICAgICAgICB2aXJ0dWFs
IEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmNwcAppbmRl
eCAxYmJlYTRhLi42NTkyYjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCkBAIC00Miw2ICs0Miw3IEBAIFRpbGVk
QmFja2luZ1N0b3JlOjpUaWxlZEJhY2tpbmdTdG9yZShUaWxlZEJhY2tpbmdTdG9yZUNsaWVudCog
Y2xpZW50KQogICAgICwgbV9wZW5kaW5nU2NhbGUoMCkKICAgICAsIG1fY29udGVudHNGcm96ZW4o
ZmFsc2UpCiAgICAgLCBtX3VwZGF0ZVRpbWVPdXQoMTUpCisgICAgLCBtX2luVXBkYXRlKGZhbHNl
KQogewogfQogCkBAIC0xMTEsNyArMTEyLDcgQEAgYm9vbCBUaWxlZEJhY2tpbmdTdG9yZTo6cGFp
bnRUaWxlcyhDb29yZGluYXRlRGlzdGFuY2VWZWN0b3ImIHVwZGF0ZVRpbGVzLCBDb29yZGkKIAog
dm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZUJ1ZmZlcnMoKQogewotICAgIGlmICht
X2NvbnRlbnRzRnJvemVuKQorICAgIGlmIChtX2NvbnRlbnRzRnJvemVuIHx8IG1faW5VcGRhdGUp
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gbWFwRnJv
bUNvbnRlbnRzKG1fY2xpZW50LT50aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCkpOwpAQCAt
MTIwLDYgKzEyMSw4IEBAIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGVCdWZmZXJz
KCkKICAgICBpZiAodmlzaWJsZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBtX2luVXBkYXRlID0gdHJ1ZTsKKwogICAgIEludFJlY3Qga2VlcFJlY3QgPSB2aXNpYmxlUmVj
dDsKICAgICAvLyBJbmZsYXRlcyB0byBib3RoIHNpZGVzLCBzbyBkaXZpZGUgaW5mbGF0ZSBkZWx0
YSBieSAyCiAgICAga2VlcFJlY3QuaW5mbGF0ZVgodmlzaWJsZVJlY3Qud2lkdGgoKSAqIChtX2tl
ZXBBcmVhTXVsdGlwbGllci53aWR0aCgpIC0gMS5mKSAvIDIpOwpAQCAtMTM1LDcgKzEzOCwxMSBA
QCB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlQnVmZmVycygpCiAgICAgY292ZXJS
ZWN0LmluZmxhdGVZKHZpc2libGVSZWN0LmhlaWdodCgpICogKG1fY292ZXJBcmVhTXVsdGlwbGll
ci5oZWlnaHQoKSAtIDEuZikgLyAyKTsKICAgICBjb3ZlclJlY3QuaW50ZXJzZWN0KGNvbnRlbnRz
UmVjdCgpKTsKIAotICAgIG1fY2xpZW50LT50aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKTsK
KyAgICBpZiAoIW1fY2xpZW50LT50aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKSkgeworICAg
ICAgICBtX2luVXBkYXRlID0gZmFsc2U7CisgICAgICAgIHN0YXJ0VGlsZUJ1ZmZlclVwZGF0ZVRp
bWVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBWZWN0b3I8SW50UmVjdD4gcGFp
bnRlZEFyZWE7CiAKQEAgLTE2MSw2ICsxNjgsOCBAQCB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjp1
cGRhdGVUaWxlQnVmZmVycygpCiAKICAgICBtX2NsaWVudC0+dGlsZWRCYWNraW5nU3RvcmVQYWlu
dEVuZChwYWludGVkQXJlYSk7CiAKKyAgICBtX2luVXBkYXRlID0gZmFsc2U7CisKICAgICBpZiAo
bmVlZFVwZGF0ZSkKICAgICAgICAgc3RhcnRUaWxlQnVmZmVyVXBkYXRlVGltZXIoKTsKICAgICBl
bHNlIHsKQEAgLTE3NCw2ICsxODMsOSBAQCB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjp1cGRhdGVU
aWxlQnVmZmVycygpCiAKIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKKyAgICBpZiAobV9zY3JvbGxE
ZWx0YS54KCkgPT0gMCAmJiBtX3Njcm9sbERlbHRhLnkoKSA9PSAwKQorICAgICAgICB1cGRhdGVU
aWxlQnVmZmVycygpOworCiAgICAgY29udGV4dC0+c2F2ZSgpOwogICAgIAogICAgIC8vIEFzc3Vt
ZXMgdGhlIGJhY2tpbmcgc3RvcmUgaXMgcGFpbnRlZCB3aXRoIHRoZSBzY2FsZSB0cmFuc2Zvcm0g
YXBwbGllZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Rp
bGVkQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxl
ZEJhY2tpbmdTdG9yZS5oCmluZGV4IDQ4ODEzNDQuLjkxMzdiODAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuaApAQCAtMTM1
LDYgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NvbnRlbnRzRnJvemVuOwogICAgIElu
dFBvaW50IG1fc2Nyb2xsRGVsdGE7CiAgICAgaW50IG1fdXBkYXRlVGltZU91dDsKKyAgICBib29s
IG1faW5VcGRhdGU7CiAKICAgICBmcmllbmQgY2xhc3MgVGlsZTsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmVDbGll
bnQuaAppbmRleCA2MDg3ZWMzLi41MWRlZjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgKQEAgLTI1
LDcgKzI1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShUSUxFRF9CQUNLSU5H
X1NUT1JFKQogY2xhc3MgVGlsZWRCYWNraW5nU3RvcmVDbGllbnQgewogcHVibGljOgotICAgIHZp
cnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKSA9IDA7CisgICAgdmlydHVh
bCBib29sIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0
JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0
IFZlY3RvcjxJbnRSZWN0PiYgcGFpbnRlZEFyZWEpID0gMDsKICAgICB2aXJ0dWFsIEludFJlY3Qg
dGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmNwcAppbmRleCBh
YTUzYWUxLi5kY2I5OTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0xheWVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJRdC5jcHAKQEAgLTIwMCw3ICsyMDAsNyBAQCBwdWJs
aWM6CiAKICNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICAvLyByZWltcGxlbWVu
dGF0aW9ucyBmcm9tIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIHRp
bGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpOworICAgIHZpcnR1YWwgYm9vbCB0aWxlZEJhY2tp
bmdTdG9yZVBhaW50QmVnaW4oKTsKICAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQ
YWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lk
IHRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVk
QXJlYSk7CiAgICAgdmlydHVhbCBJbnRSZWN0IHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0
KCk7CkBAIC04ODksOCArODg5LDkgQEAgYWZ0ZXJMYXllckNoYW5nZXM6CiAjaWYgRU5BQkxFKFRJ
TEVEX0JBQ0tJTkdfU1RPUkUpCiAvKiBccmVpbXAgKFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50Lmgp
CiAqLwotdm9pZCBHcmFwaGljc0xheWVyUXRJbXBsOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVn
aW4oKQorYm9vbCBHcmFwaGljc0xheWVyUXRJbXBsOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVn
aW4oKQogeworICAgIHJldHVybiB0cnVlOwogfQogCiAvKiBccmVpbXAgKFRpbGVkQmFja2luZ1N0
b3JlQ2xpZW50LmgpCg==
</data>
<flag name="review"
          id="90000"
          type_id="1"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96339</attachid>
            <date>2011-06-07 17:34:16 -0700</date>
            <delta_ts>2011-06-18 13:13:25 -0700</delta_ts>
            <desc>Patch 7: Fixes repainting problems if scale != 1 .</desc>
            <filename>tiles_p7.diff</filename>
            <type>text/plain</type>
            <size>2090</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">Y29tbWl0IDViYWExMTkxZjkwYzlhMzI1NGJhNjI4NzllYTUyOTcyZmNiMjdmZGIKQXV0aG9yOiBW
aWF0Y2hlc2xhdiBPc3RhcGVua28gPG9zdGFwZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+CkRh
dGU6ICAgVHVlIEp1biA3IDE4OjQ2OjU3IDIwMTEgLTA0MDAKCiAgICBQYXJ0NyBvZiB0aWxlcyBw
YWludGluZyByZWRlc2lnbi4KICAgIFBhaW50ZWQgYXJlYSBzaG91bGQgYmUgY2FsY3VsYXRlZCBi
YWNrIHRvIGNvbnRlbnQvdmlld3BvcnQgY29vcmRpbmF0ZXMuCiAgICBGaXhlcyByZXBhaW50aW5n
IHByb2JsZW1zIGlmIHNjYWxlICE9IDEgLgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3ODIyOTE5Li5lZmY1MDY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC01LDYgKzUsMjAgQEAKICAgICAgICAgW1F0XSBWZXJ5IGplcmt5IHNj
cm9sbGluZyBiZWNhdXNlIG9mIGJsb2NraW5nIGluIHRpbGVkIGJhY2tpbmcgc3RvcmUuCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mzg5NAogCisgICAg
ICAgIFBhcnQ3IG9mIHRpbGVzIHBhaW50aW5nIHJlZGVzaWduLgorICAgICAgICBQYWludGVkIGFy
ZWEgc2hvdWxkIGJlIGNhbGN1bGF0ZWQgYmFjayB0byBjb250ZW50L3ZpZXdwb3J0IGNvb3JkaW5h
dGVzLgorICAgICAgICBGaXhlcyByZXBhaW50aW5nIHByb2JsZW1zIGlmIHNjYWxlICE9IDEgLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmU6OnBhaW50VGlsZXMpOgorCisyMDExLTA2
LTA3ICBWaWF0Y2hlc2xhdiBPc3RhcGVua28gIDxvc3RhcGVua28udmlhdGNoZXNsYXZAbm9raWEu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtR
dF0gVmVyeSBqZXJreSBzY3JvbGxpbmcgYmVjYXVzZSBvZiBibG9ja2luZyBpbiB0aWxlZCBiYWNr
aW5nIHN0b3JlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTM4OTQKKwogICAgICAgICBQYXJ0NiBvZiB0aWxlcyBwYWludGluZyByZWRlc2lnbi4KICAg
ICAgICAgRG8gc29tZSB0aWxlcyB1cGRhdGVzIGRpcmVjdGx5IGZyb20gcGFpbnQgdG8gcmVkdWNl
IGZsaWNrZXIuCiAgICAgICAgIEZsYWdzIGFkZGVkIHRvIGF2b2lkIHRpbGUgdXBkYXRlIGFuZCBs
YXlvdXQgcmVjdXJzaXZlIGNhbGxzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCmluZGV4IDY1OTJiNTMuLmE0YmQ5MTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2lu
Z1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJh
Y2tpbmdTdG9yZS5jcHAKQEAgLTEwMSw3ICsxMDEsNyBAQCBib29sIFRpbGVkQmFja2luZ1N0b3Jl
OjpwYWludFRpbGVzKENvb3JkaW5hdGVEaXN0YW5jZVZlY3RvciYgdXBkYXRlVGlsZXMsIENvb3Jk
aQogICAgICAgICAgICAgdGlsZSA9IGdldFRpbGUoY29vcmRpbmF0ZSwgb3ZlcmhhbmdpbmdUaWxl
cyk7CiAgICAgICAgIHRpbGUtPnVwZGF0ZUJhY2tCdWZmZXIoKTsKICAgICAgICAgdGlsZS0+c3dh
cEJhY2tCdWZmZXJUb0Zyb250KCk7Ci0gICAgICAgIHBhaW50ZWRBcmVhLmFwcGVuZCh0aWxlLT5y
ZWN0KCkpOworICAgICAgICBwYWludGVkQXJlYS5hcHBlbmQobWFwVG9Db250ZW50cyh0aWxlLT5y
ZWN0KCkpKTsKICAgICAgICAgdXBkYXRlVGlsZXMucmVtb3ZlTGFzdCgpOwogICAgICAgICBpZiAo
c3RvcE9uVGltZW91dCAmJiBXVEY6OmN1cnJlbnRUaW1lTVMoKSAtIHN0YXJ0VGltZSA+IG1fdXBk
YXRlVGltZU91dCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96344</attachid>
            <date>2011-06-07 17:44:47 -0700</date>
            <delta_ts>2011-06-09 16:24:05 -0700</delta_ts>
            <desc>Patch 1: Add API to notify tiling about scrolling direction. Bias tile distance against scrolling direction.</desc>
            <filename>tiles_p1.diff</filename>
            <type>text/plain</type>
            <size>6860</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">Y29tbWl0IGUzMTE2NTBmYWJiMGUyMjdkYTY2YmNkOGQwMDlhNzdhN2JmMDM0MzQKQXV0aG9yOiBW
aWF0Y2hlc2xhdiBPc3RhcGVua28gPG9zdGFwZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+CkRh
dGU6ICAgTW9uIE1heSAyMyAwMTozNTozMSAyMDExIC0wNDAwCgogICAgUGFydDEgb2YgdGlsZXMg
cGFpbnRpbmcgcmVkZXNpbmcuCiAgICBBZGQgQVBJIHRvIG5vdGlmeSB0aWxpbmcgYWJvdXQgc2Ny
b2xsaW5nIGRpcmVjdGlvbi4gQmlhcyB0aWxlIGRpc3RhbmNlCiAgICBhZ2FpbnN0IHNjcm9sbGlu
ZyBkaXJlY3Rpb24uCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGEyOWYyMDQuLmVmY2RjYWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOSBAQAorMjAxMS0wNS0yMiAgVmlhdGNoZXNsYXYgT3N0YXBlbmtvICA8b3N0
YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFZlcnkgamVya3kgc2Nyb2xsaW5nIGJlY2F1c2Ug
b2YgYmxvY2tpbmcgaW4gdGlsZWQgYmFja2luZyBzdG9yZS4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzODk0CisKKyAgICAgICAgUGFydDEgb2YgdGls
ZXMgcGFpbnRpbmcgcmVkZXNpbmcuCisgICAgICAgIEFkZCBBUEkgdG8gbm90aWZ5IHRpbGluZyBh
Ym91dCBzY3JvbGxpbmcgZGlyZWN0aW9uLiBCaWFzIHRpbGUgZGlzdGFuY2UgYWdhaW5zdAorICAg
ICAgICBzY3JvbGxpbmcgZGlyZWN0aW9uLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
VGlsZWRCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3Rv
cmU6OnRpbGVEaXN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZTo6
c2V0U2Nyb2xsRGVsdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2lu
Z1N0b3JlLmg6CisKIDIwMTEtMDUtMjIgIEFuZHJldyBXYXNvbiAgPHJlY3RhbG9naWNAcmVjdGFs
b2dpYy5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmVuamFtaW4gUG91bGFpbi4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3Jl
LmNwcAppbmRleCBhYzdlOWM2Li4yZjIwODg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuY3BwCkBAIC0xODUsMTUgKzE4
NSw0MCBAQCB2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjpjb21taXRTY2FsZUNoYW5nZSgpCiAKIGRv
dWJsZSBUaWxlZEJhY2tpbmdTdG9yZTo6dGlsZURpc3RhbmNlKGNvbnN0IEludFJlY3QmIHZpZXdw
b3J0LCBjb25zdCBUaWxlOjpDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKIHsKLSAgICBpZiAo
dmlld3BvcnQuaW50ZXJzZWN0cyh0aWxlUmVjdEZvckNvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUp
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgSW50UG9pbnQgdmlld0NlbnRlciA9IHZp
ZXdwb3J0LmxvY2F0aW9uKCkgKyBJbnRTaXplKHZpZXdwb3J0LndpZHRoKCkgLyAyLCB2aWV3cG9y
dC5oZWlnaHQoKSAvIDIpOwotICAgIFRpbGU6OkNvb3JkaW5hdGUgY2VudGVyQ29vcmRpbmF0ZSA9
IHRpbGVDb29yZGluYXRlRm9yUG9pbnQodmlld0NlbnRlcik7Ci0gICAgCisgICAgSW50UG9pbnQg
dmlld3BvcnRDZW50ZXIgPSB2aWV3cG9ydC5sb2NhdGlvbigpICsgSW50U2l6ZSh2aWV3cG9ydC53
aWR0aCgpIC8gMiwgdmlld3BvcnQuaGVpZ2h0KCkgLyAyKTsKKyAgICBJbnRSZWN0IHRpbGVSZWN0
ID0gdGlsZVJlY3RGb3JDb29yZGluYXRlKHRpbGVDb29yZGluYXRlKTsKKyAgICBpbnQgeE9mZnNl
dCA9IHRpbGVSZWN0LmNlbnRlcigpLngoKSAtIHZpZXdwb3J0Q2VudGVyLngoKTsKKyAgICBpbnQg
eU9mZnNldCA9IHRpbGVSZWN0LmNlbnRlcigpLnkoKSAtIHZpZXdwb3J0Q2VudGVyLnkoKTsKICAg
ICAvLyBNYW5oYXR0YW4gZGlzdGFuY2UsIGJpYXNlZCBzbyB0aGF0IHZlcnRpY2FsIGRpc3RhbmNl
cyBhcmUgc2hvcnRlci4KICAgICBjb25zdCBkb3VibGUgaG9yaXpvbnRhbEJpYXMgPSAxLjM7Ci0g
ICAgcmV0dXJuIGFicyhjZW50ZXJDb29yZGluYXRlLnkoKSAtIHRpbGVDb29yZGluYXRlLnkoKSkg
KyBob3Jpem9udGFsQmlhcyAqIGFicyhjZW50ZXJDb29yZGluYXRlLngoKSAtIHRpbGVDb29yZGlu
YXRlLngoKSk7CisgICAgZG91YmxlIHhCaWFzID0gaG9yaXpvbnRhbEJpYXM7CisgICAgZG91Ymxl
IHlCaWFzID0gMS5mOworCisgICAgLy8gdmlld3BvcnQgY292ZXJpbmcgdGlsZSBzaG91bGQgYmUg
Y2xvc2VyCisgICAgaWYgKHZpZXdwb3J0LmludGVyc2VjdHModGlsZVJlY3RGb3JDb29yZGluYXRl
KHRpbGVDb29yZGluYXRlKSkpIHsKKyAgICAgICAgeEJpYXMgLz0gMjsKKyAgICAgICAgeUJpYXMg
Lz0gMjsKKyAgICB9CisgICAgCisgICAgaWYgKG1fc2Nyb2xsRGVsdGEueCgpICYmIHhPZmZzZXQp
IHsKKyAgICAgICAgZG91YmxlIHhCaWFzQWxwaGEgPSAobV9rZWVwQXJlYU11bHRpcGxpZXIud2lk
dGgoKSAtIG1fY292ZXJBcmVhTXVsdGlwbGllci53aWR0aCgpKSAvCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jb3ZlckFyZWFNdWx0aXBsaWVyLndpZHRoKCkgLyAyICsgMTsKKyAgICAg
ICAgaWYgKCh4T2Zmc2V0ID4gMCAmJiBtX3Njcm9sbERlbHRhLngoKSA+IDApIHx8ICh4T2Zmc2V0
IDwgMCAmJiBtX3Njcm9sbERlbHRhLngoKSA8IDApKQorICAgICAgICAgICAgeEJpYXMgPSAxLmYg
LyB4Qmlhc0FscGhhOworICAgICAgICBlbHNlCisgICAgICAgICAgICB4QmlhcyA9IHhCaWFzQWxw
aGE7CisgICAgfQorCisgICAgaWYgKG1fc2Nyb2xsRGVsdGEueSgpICYmIHlPZmZzZXQpIHsKKyAg
ICAgICAgZG91YmxlIHlCaWFzQWxwaGEgPSAobV9rZWVwQXJlYU11bHRpcGxpZXIuaGVpZ2h0KCkg
LSBtX2NvdmVyQXJlYU11bHRpcGxpZXIuaGVpZ2h0KCkpIC8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2NvdmVyQXJlYU11bHRpcGxpZXIuaGVpZ2h0KCkgLyAyICsgMTsKKyAgICAgICAg
aWYgKCh5T2Zmc2V0ID4gMCAmJiBtX3Njcm9sbERlbHRhLnkoKSA+IDApIHx8ICh5T2Zmc2V0IDwg
MCAmJiBtX3Njcm9sbERlbHRhLnkoKSA8IDApKQorICAgICAgICAgICAgeUJpYXMgPSAxLmYgLyB5
Qmlhc0FscGhhOworICAgICAgICBlbHNlCisgICAgICAgICAgICB5QmlhcyA9IHlCaWFzQWxwaGE7
CisgICAgfQorCisgICAgcmV0dXJuIHlCaWFzICogYWJzKHlPZmZzZXQpICsgeEJpYXMgKiBhYnMo
eE9mZnNldCk7CiB9CiAKIHZvaWQgVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZVRpbGVzKCkKQEAg
LTQwMCw2ICs0MjUsMTMgQEAgdm9pZCBUaWxlZEJhY2tpbmdTdG9yZTo6c2V0Q29udGVudHNGcm96
ZW4oYm9vbCBmcmVlemUpCiAgICAgfQogfQogCit2b2lkIFRpbGVkQmFja2luZ1N0b3JlOjpzZXRT
Y3JvbGxEZWx0YShjb25zdCBJbnRQb2ludCYgZGVsdGEpCit7CisgICAgbV9zY3JvbGxEZWx0YSA9
IGRlbHRhOworCisgICAgc3RhcnRUaWxlQ3JlYXRpb25UaW1lcigpOworfQorCiB9CiAKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNr
aW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2lu
Z1N0b3JlLmgKaW5kZXggMDZjN2ZlMS4uNTEyZDgzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmdTdG9yZS5oCkBAIC02NSw3ICs2NSw4
IEBAIHB1YmxpYzoKICAgICAgICAga2VlcE11bHRpcGxpZXIgPSBtX2tlZXBBcmVhTXVsdGlwbGll
cjsKICAgICAgICAgY292ZXJNdWx0aXBsaWVyID0gbV9jb3ZlckFyZWFNdWx0aXBsaWVyOwogICAg
IH0KLSAgICB2b2lkIHNldEtlZXBBbmRDb3ZlckFyZWFNdWx0aXBsaWVycyhjb25zdCBGbG9hdFNp
emUmIGtlZXBNdWx0aXBsaWVyLCBjb25zdCBGbG9hdFNpemUmIGNvdmVyTXVsdGlwbGllcik7ICAg
IAorICAgIHZvaWQgc2V0S2VlcEFuZENvdmVyQXJlYU11bHRpcGxpZXJzKGNvbnN0IEZsb2F0U2l6
ZSYga2VlcE11bHRpcGxpZXIsIGNvbnN0IEZsb2F0U2l6ZSYgY292ZXJNdWx0aXBsaWVyKTsKKyAg
ICB2b2lkIHNldFNjcm9sbERlbHRhKGNvbnN0IEludFBvaW50Jik7CiAKIHByaXZhdGU6CiAgICAg
dm9pZCBzdGFydFRpbGVCdWZmZXJVcGRhdGVUaW1lcigpOwpAQCAtOTYsNyArOTcsNyBAQCBwcml2
YXRlOgogICAgIEludFJlY3QgdGlsZVJlY3RGb3JDb29yZGluYXRlKGNvbnN0IFRpbGU6OkNvb3Jk
aW5hdGUmKSBjb25zdDsKICAgICBUaWxlOjpDb29yZGluYXRlIHRpbGVDb29yZGluYXRlRm9yUG9p
bnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICAgICBkb3VibGUgdGlsZURpc3RhbmNlKGNvbnN0
IEludFJlY3QmIHZpZXdwb3J0LCBjb25zdCBUaWxlOjpDb29yZGluYXRlJik7Ci0gICAgCisKICAg
ICB2b2lkIHBhaW50Q2hlY2tlclBhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVj
dCYsIGNvbnN0IFRpbGU6OkNvb3JkaW5hdGUmKTsKIAogcHJpdmF0ZToKQEAgLTExOCw2ICsxMTks
NyBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fcGVuZGluZ1NjYWxlOwogCiAgICAgYm9vbCBtX2Nv
bnRlbnRzRnJvemVuOworICAgIEludFBvaW50IG1fc2Nyb2xsRGVsdGE7CiAKICAgICBmcmllbmQg
Y2xhc3MgVGlsZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFn
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKaW5kZXggMzY2NTJjZC4u
NThhMGQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcApAQCAtMTIxMiw2ICsxMjEyLDEz
IEBAIHZvaWQgUVdlYlBhZ2VQcml2YXRlOjpkeW5hbWljUHJvcGVydHlDaGFuZ2VFdmVudChRRHlu
YW1pY1Byb3BlcnR5Q2hhbmdlRXZlbnQqIGV2CiAgICAgICAgIFFTaXplRiBxU2l6ZSA9IHEtPnBy
b3BlcnR5KCJfcV9UaWxlZEJhY2tpbmdTdG9yZUNvdmVyQXJlYU11bHRpcGxpZXIiKS50b1NpemVG
KCk7CiAgICAgICAgIGNvdmVyTXVsdGlwbGllciA9IEZsb2F0U2l6ZShxU2l6ZS53aWR0aCgpLCBx
U2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIGZyYW1lLT50aWxlZEJhY2tpbmdTdG9yZSgpLT5zZXRL
ZWVwQW5kQ292ZXJBcmVhTXVsdGlwbGllcnMoa2VlcE11bHRpcGxpZXIsIGNvdmVyTXVsdGlwbGll
cik7CisgICAgfSBlbHNlIGlmIChldmVudC0+cHJvcGVydHlOYW1lKCkgPT0gIl9xX1RpbGVkQmFj
a2luZ1N0b3JlU2Nyb2xsRGVsdGEiKSB7CisgICAgICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9
IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUocS0+bWFpbkZyYW1lKCkpOworICAgICAgICBUaWxlZEJh
Y2tpbmdTdG9yZSogc3RvcmUgPSBmcmFtZS0+dGlsZWRCYWNraW5nU3RvcmUoKTsKKyAgICAgICAg
aWYgKCFzdG9yZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgUVBvaW50IGRlbHRhID0g
cS0+cHJvcGVydHkoIl9xX1RpbGVkQmFja2luZ1N0b3JlU2Nyb2xsRGVsdGEiKS50b1BvaW50KCk7
CisgICAgICAgIHN0b3JlLT5zZXRTY3JvbGxEZWx0YShJbnRQb2ludChkZWx0YSkpOwogICAgIH0K
ICNlbmRpZgogICAgIGVsc2UgaWYgKGV2ZW50LT5wcm9wZXJ0eU5hbWUoKSA9PSAiX3Ffd2ViSW5z
cGVjdG9yU2VydmVyUG9ydCIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggYTVlMzhkMC4uODYzYWUyZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMS0wNS0yMiAgVmlhdGNoZXNsYXYg
T3N0YXBlbmtvICA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFZlcnkgamVya3kgc2Ny
b2xsaW5nIGJlY2F1c2Ugb2YgYmxvY2tpbmcgaW4gdGlsZWQgYmFja2luZyBzdG9yZS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzODk0CisKKyAgICAg
ICAgUGFydDEgb2YgdGlsZXMgcGFpbnRpbmcgcmVkZXNpbmcuCisgICAgICAgIEFkZCBBUEkgdG8g
bm90aWZ5IHRpbGluZyBhYm91dCBzY3JvbGxpbmcgZGlyZWN0aW9uLiBCaWFzIHRpbGUgZGlzdGFu
Y2UgYWdhaW5zdAorICAgICAgICBzY3JvbGxpbmcgZGlyZWN0aW9uLgorCisgICAgICAgICogQXBp
L3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6ZHluYW1pY1Byb3BlcnR5
Q2hhbmdlRXZlbnQpOgorCiAyMDExLTA1LTIyICBIdWkgSHVhbmcgIDxodWkuMi5odWFuZ0Bub2tp
YS5jb20+LCBZaSBTaGVuICA8eWkuNC5zaGVuQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBMYXN6bG8gR29tYm9zLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>