<?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>104612</bug_id>
          
          <creation_ts>2012-12-10 16:38:41 -0800</creation_ts>
          <short_desc>Enhance the TileCache to cache more tiles</short_desc>
          <delta_ts>2012-12-11 16:48:59 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>ggaren</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>787845</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-12-10 16:38:41 -0800</bug_when>
    <thetext>Enhance the TileCache to cache more tiles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787857</commentid>
    <comment_count>1</comment_count>
      <attachid>178670</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-12-10 17:03:15 -0800</bug_when>
    <thetext>Created attachment 178670
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787859</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-12-10 17:05:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/10790464&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787917</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-10 18:09:03 -0800</bug_when>
    <thetext>Attachment 178670 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/ChangeLog:12:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Source/WebCore/ChangeLog:14:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Source/WebCore/ChangeLog:16:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Source/WebCore/ChangeLog:19:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Source/WebCore/ChangeLog:22:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Source/WebCore/ChangeLog:24:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Source/WebCore/ChangeLog:25:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Total errors found: 7 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>788917</commentid>
    <comment_count>4</comment_count>
      <attachid>178670</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-12-11 16:08:09 -0800</bug_when>
    <thetext>Comment on attachment 178670
Patch

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

Yikes!

&gt; Source/WebCore/ChangeLog:72
&gt; +        (WebCore::TileCache::TileCache):
&gt; +        (WebCore::TileCache::~TileCache):
&gt; +        (WebCore::TileCache::setNeedsDisplay):
&gt; +        (WebCore::TileCache::setNeedsDisplayInRect):
&gt; +        (WebCore::TileCache::setTileNeedsDisplayInRect):
&gt; +        (WebCore::TileCache::setScale):
&gt; +        (WebCore::TileCache::setAcceleratesDrawing):
&gt; +        (WebCore::TileCache::setTilesOpaque):
&gt; +        (WebCore::TileCache::prepopulateRect):
&gt; +        (WebCore::TileCache::setTileDebugBorderWidth):
&gt; +        (WebCore::TileCache::setTileDebugBorderColor):
&gt; +        (WebCore::TileCache::computeTileCoverageRect):
&gt; +        (WebCore::TileCache::tileSizeForCoverageRect):
&gt; +        (WebCore::TileCache::tileRevalidationTimerFired):
&gt; +        (WebCore::TileCache::blankPixelCount):
&gt; +        (WebCore::queueTileForRemoval):
&gt; +        (WebCore::TileCache::removeAllTiles):
&gt; +        (WebCore::TileCache::removeAllSecondaryTiles):
&gt; +        (WebCore::TileCache::removeTilesInCohort):
&gt; +        (WebCore::TileCache::revalidateTiles):
&gt; +        (WebCore::TileCache::nextTileCohort):
&gt; +        (WebCore::TileCache::startedNewCohort):
&gt; +        (WebCore::TileCache::newestTileCohort):
&gt; +        (WebCore::TileCache::oldestTileCohort):
&gt; +        (WebCore::TileCache::scheduleCohortRemoval):
&gt; +        (WebCore::TileCache::cohortRemovalTimerFired):
&gt; +        (WebCore::TileCache::ensureTilesForRect):
&gt; +        (WebCore::TileCache::tileGridExtent):
&gt; +        (WebCore::TileCache::tileCoverageRect):
&gt; +        (WebCore::TileCache::tileLayerAtIndex):
&gt; +        (WebCore::TileCache::drawTileMapContents):

This saddens the reviewer.

&gt; Source/WebCore/page/FrameView.cpp:1896
&gt; +    fprintf(stderr, &quot;FrameView::requestScrollPositionUpdate to %d,%d\n&quot;, position.x(), position.y());

Is this logging supposed to be here? Seems unlikely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788920</commentid>
    <comment_count>5</comment_count>
      <attachid>178670</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-12-11 16:09:21 -0800</bug_when>
    <thetext>Comment on attachment 178670
Patch

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

&gt; Source/WebCore/platform/graphics/ca/mac/TileCache.mm:410
&gt; +    if (m_tileCoverage &amp; CoverageForHorizontalScrolling &amp;&amp; !largeVisibleRectChange)
&gt; +        coverageHorizontalSize *= 2;
&gt; +
&gt; +    if (m_tileCoverage &amp; CoverageForVerticalScrolling &amp;&amp; !largeVisibleRectChange)
&gt; +        coverageVerticalSize *= 3;

Could factor out the if (!largeVisibleRectChange).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788922</commentid>
    <comment_count>6</comment_count>
      <attachid>178670</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-12-11 16:10:49 -0800</bug_when>
    <thetext>Comment on attachment 178670
Patch

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

&gt; Source/WebCore/platform/graphics/ca/mac/TileCache.h:138
&gt; +        KeepSecondaryTiles,
&gt; +        PruneSecondaryTiles

Is &quot;Secondary&quot; the word we want to go with here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788981</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-12-11 16:48:59 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/137387</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178670</attachid>
            <date>2012-12-10 17:03:15 -0800</date>
            <delta_ts>2012-12-11 16:10:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104612-20121210170034.patch</filename>
            <type>text/plain</type>
            <size>36844</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MjE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTM2MTMzYjcxOWMzNmJh
MmMzZjQxY2VlODY5NmZkMDMyZDQyZTI4MC4uOWFjZGYyNWE4OGQwOTAyNzQzOTVmOGFkYjc4ZDA1
NDI4YWRlYWYzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDc4IEBACiAyMDEyLTEyLTEwICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCisgICAgICAgIEVuaGFuY2UgdGhl
IFRpbGVDYWNoZSB0byBjYWNoZSBtb3JlIHRpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ2MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc21hcnRzIHRvIHRoZSBUaWxlQ2FjaGUgc28gdGhh
dCBpdCBrZWVwcyBzb21lIHRpbGVzIGFyb3VuZAorICAgICAgICBmb3IgbG9uZ2VyIGFuZCBjYW4g
cHJlcG9wdWxhdGUgdGlsZXMgaW4gdG8tYmUtc2Nyb2xsZWQtdG8gcmVnaW9ucy4KKworICAgICAg
ICBUaGUgbmV3IHRpbGUgbWFuYWdlbWVudCBpcyBhcyBmb2xsb3dzOgorICAgICAgICAqIEFzIGJl
Zm9yZSwgd2UgZXhwYW5kIHRoZSB2aXNpYmxlIHJlY3QgdG8gY3JlYXRlIGEgInRpbGUgY292ZXJh
Z2UgcmVjdCIKKyAgICAgICAgd2hpY2ggaXMgdHdpY2UgdGhlIHdpZHRoLCBhbmQgdGhyZWUgdGlt
ZXMgdGhlIGhlaWdodCBvZiB0aGUgdmlzaWJsZSByZWN0LgorICAgICAgICAqIEF0IHRoZSBlZGdl
cywgdGhpcyBjb3ZlcmFnZSByZWN0IGlzIGNvbnN0cmFpbmVkIGJ5IHRoZW0sIHJhdGhlciB0aGFu
IGJlaW5nCisgICAgICAgIHRydW5jYXRlZCBhcyBiZWZvcmUgKGxlYWRpbmcgdG8gbGFyZ2VyIGlu
aXRpYWwgdGlsZSBjb3ZlcmFnZSkuCisgICAgICAgICogV2hlbiB0aWxlcyBsZWF2ZSB0aGUgY292
ZXJhZ2UgcmVjdCwgd2Uga2VlcCB0aGVtIGFyb3VuZCBidXQgdHJhY2sKKyAgICAgICAgdGhlbSBp
biBjb2hvcnRzICh3aGVyZSBhIGNvaG9ydCBpcyBhIHNldCBvZiB0aWxlcyB0aGF0IGxlZnQgdGhl
IGNvdmVyYWdlIHJlY3QKKyAgICAgICAgYXQgdGhlIHNhbWUgdGltZSkuCisgICAgICAgICogSWYg
YSByZXBhaW50IGNvbWVzIGluIGZvciBhICJzZWNvbmRhcnkiIHRpbGUsIHdlIGRvbid0IHBhaW50
IGl0LCBidXQgbWFyaworICAgICAgICB0aGUgdGlsZSBhcyBiZWluZyBzdGFsZS4gSXQgd2lsbCBn
ZXQgcmVwYWludGVkIChpbiBmdWxsKSBpZiBpdCBtb3ZlcyBiYWNrIGluc2lkZQorICAgICAgICB0
aGUgY292ZXJhZ2UgcmVjdC4KKyAgICAgICAgKiBDb2hvcnRzIGFyZSBrZXB0IGFyb3VuZCBmb3Ig
MiBzZWNvbmRzIGFmdGVyIHRoZXkgd2VyZSBjcmVhdGVkLiBBIHJlcGVhdGluZworICAgICAgICAx
LXNlY29uZCB0aW1lciBjbGVhcnMgdGlsZXMgaW4gb2xkIGNvaG9ydHMuCisgICAgICAgICogU2Vj
b25kYXJ5IHRpbGVzIGFyZSBwcnVuZWQgaWYgdGhlIHZpc2libGUgcmVjdCBjaGFuZ2VzLCBvciBp
ZiB6b29taW5nIGhhcHBlbnMuCisgICAgICAgICogVGlsZWRCYWNraW5nIGV4cG9zZXMgYSB3YXkg
dG8gcHJlcG9wdWxhdGUgYSByZWN0IHdpdGggdGlsZXM7IHRoaXMgaXMgY2FsbGVkCisgICAgICAg
IHdoZW4gc2Nyb2xsaW5nIChlLmcuIHZpYSBIb21lL0VuZCBrZXlzKS4gVGlsZXMgY3JlYXRlZCB0
aGlzIHdheSAoaWYgb3V0c2lkZQorICAgICAgICB0aGUgY292ZXJhZ2UgcmVjdCkgZ28gaW50byBh
IGNvaG9ydC4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lVmlldzo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKTogVGVsbCB0aGUgVGls
ZWRCYWNraW5nCisgICAgICAgIHRvIHByZXBvcHVsYXRlIHNvbWUgdGlsZXMuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nLmg6CisgICAgICAgIChUaWxlZEJhY2tpbmcp
OiBBZGQgcHJlcG9wdWxhdGVSZWN0KCkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL1RpbGVDYWNoZS5oOgorICAgICAgICAoVGlsZUluZm8pOiBUaGUgVGlsZU1hcCBjb250YWlu
cyBUaWxlSW5mb3MsIHdoaWNoIGNvbnRhaW4gYSBwb2ludGVyCisgICAgICAgIHRvIHRoZSBsYXll
ciwgdGhlaXIgY29ob3J0LCBhbmQgYSAnc3RhbGUgY29udGVudCcgZmxhZy4KKyAgICAgICAgKFdl
YkNvcmU6OlRpbGVDYWNoZTo6VGlsZUluZm86OlRpbGVJbmZvKToKKyAgICAgICAgKFRpbGVDYWNo
ZSk6CisgICAgICAgIChUaWxlQ29ob3J0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2Fj
aGU6OlRpbGVDb2hvcnRJbmZvOjpUaWxlQ29ob3J0SW5mbyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNo
ZTo6VGlsZUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6flRpbGVDYWNoZSk6
CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAg
IChXZWJDb3JlOjpUaWxlQ2FjaGU6OnNldE5lZWRzRGlzcGxheUluUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlQ2FjaGU6OnNldFRpbGVOZWVkc0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6VGlsZUNhY2hlOjpzZXRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2Fj
aGU6OnNldEFjY2VsZXJhdGVzRHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6
OnNldFRpbGVzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6cHJlcG9wdWxh
dGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVy
V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpzZXRUaWxlRGVidWdCb3JkZXJD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OmNvbXB1dGVUaWxlQ292ZXJhZ2VS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6dGlsZVNpemVGb3JDb3ZlcmFnZVJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjp0aWxlUmV2YWxpZGF0aW9uVGltZXJG
aXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OmJsYW5rUGl4ZWxDb3VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpxdWV1ZVRpbGVGb3JSZW1vdmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVDYWNoZTo6cmVtb3ZlQWxsVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hl
OjpyZW1vdmVBbGxTZWNvbmRhcnlUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6
OnJlbW92ZVRpbGVzSW5Db2hvcnQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpyZXZh
bGlkYXRlVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpuZXh0VGlsZUNvaG9y
dCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnN0YXJ0ZWROZXdDb2hvcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpuZXdlc3RUaWxlQ29ob3J0KToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGVDYWNoZTo6b2xkZXN0VGlsZUNvaG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlQ2FjaGU6OnNjaGVkdWxlQ29ob3J0UmVtb3ZhbCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
Q2FjaGU6OmNvaG9ydFJlbW92YWxUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVD
YWNoZTo6ZW5zdXJlVGlsZXNGb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6
dGlsZUdyaWRFeHRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjp0aWxlQ292ZXJh
Z2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6dGlsZUxheWVyQXRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OmRyYXdUaWxlTWFwQ29udGVudHMpOgorCisy
MDEyLTEyLTEwICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCiAgICAg
ICAgIEZpeCBmcmFtZSBib3JkZXIgcGFpbnRpbmcgaW4gdGlsZWQgZHJhd2luZyBtb2RlCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ0NTMKICAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzExNjc4NjExPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmlu
ZGV4IDY5OGUwNTc4OWYxMzhhMDMxNWNlMDhjMGMzOTNhYjg0N2NiODA0MTguLmJhN2FlN2YyMWFk
ZDFiNTQ1ODg5MDU3MWFlYmQxYTA2ZjVjYjkzMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKQEAgLTE4OTMsNiArMTg5MywxNCBAQCBib29sIEZyYW1lVmlldzo6c2hvdWxkUnViYmVyQmFu
ZEluRGlyZWN0aW9uKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0CiBib29sIEZyYW1l
Vmlldzo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IEludFBvaW50JiBwb3NpdGlv
bikKIHsKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorICAgIGZwcmludGYoc3RkZXJy
LCAiRnJhbWVWaWV3OjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUgdG8gJWQsJWRcbiIsIHBv
c2l0aW9uLngoKSwgcG9zaXRpb24ueSgpKTsKKyAgICAKKyAgICBpZiAoVGlsZWRCYWNraW5nKiB0
aWxlZEJhY2tpbmcgPSB0aGlzLT50aWxlZEJhY2tpbmcoKSkgeworICAgICAgICBJbnRSZWN0IHZp
c2libGVSZWN0ID0gdmlzaWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAgIHZpc2libGVSZWN0LnNl
dExvY2F0aW9uKHBvc2l0aW9uKTsKKyAgICAgICAgdGlsZWRCYWNraW5nLT5wcmVwb3B1bGF0ZVJl
Y3QodmlzaWJsZVJlY3QpOworICAgIH0KKwogICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+
cGFnZSgpKSB7CiAgICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29v
cmRpbmF0b3IgPSBwYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQogICAgICAgICAgICAgcmV0
dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUodGhp
cywgcG9zaXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvVGlsZWRCYWNraW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxl
ZEJhY2tpbmcuaAppbmRleCA4MjFmNmNkNTc0ZjNmMmI1OWJhOWMyZTgxYjQ5ODc2MzhjZmY1OTc0
Li41NmQ3MzZhYjAxOGU0NmViMzhhMDdhYTRhMjZiYTQzMWY0OGM2Y2I1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcuaApAQCAtNDcsNiArNDcs
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVSZWN0KGNvbnN0IEludFJl
Y3QmKSA9IDA7CiAgICAgdmlydHVhbCBJbnRSZWN0IHZpc2libGVSZWN0KCkgY29uc3QgPSAwOwog
CisgICAgdmlydHVhbCB2b2lkIHByZXBvcHVsYXRlUmVjdChjb25zdCBJbnRSZWN0JikgPSAwOwor
CiAgICAgdmlydHVhbCB2b2lkIHNldElzSW5XaW5kb3coYm9vbCkgPSAwOwogCiAgICAgZW51bSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGls
ZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNh
Y2hlLmgKaW5kZXggNGVjNzVlMDNhNTliMGQ0ODlmNGI1MDk4YjVhNWNkMmRlMTAwZDI5YS4uNDdh
Nzg3Njg5YWMwZjM1NjdmYzNjYmZkMmMzMTkxZmViNjNlZTRjOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUuaApAQCAtMzAsNiAr
MzAsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIK
ICNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KQEAgLTgyLDEyICs4MywzMCBAQCBwdWJsaWM6CiAKICAgICAvLyBPbmx5
IHB1YmxpYyBmb3IgdGhlIFdlYlRpbGVDYWNoZU1hcExheWVyLgogICAgIHZvaWQgZHJhd1RpbGVN
YXBDb250ZW50cyhDR0NvbnRleHRSZWYsIENHUmVjdCk7Ci0gICAgCisKK3B1YmxpYzoKKyAgICAv
LyBPbmx5IHB1YmxpYyBmb3IgaW5saW5lIG1ldGhvZHMgaW4gdGhlIGltcGxlbWVudGF0aW9uIGZp
bGUuCisgICAgdHlwZWRlZiBJbnRQb2ludCBUaWxlSW5kZXg7CisgICAgdHlwZWRlZiB1bnNpZ25l
ZCBUaWxlQ29ob3J0OworICAgIHN0YXRpYyBjb25zdCBUaWxlQ29ob3J0IFZpc2libGVUaWxlQ29o
b3J0ID0gVUlOVF9NQVg7CisKKyAgICBzdHJ1Y3QgVGlsZUluZm8geworICAgICAgICBSZXRhaW5Q
dHI8V2ViVGlsZUxheWVyPiBsYXllcjsKKyAgICAgICAgVGlsZUNvaG9ydCBjb2hvcnQ7IC8vIFZp
c2libGVUaWxlQ29ob3J0IGlzIHZpc2libGUuCisgICAgICAgIGJvb2wgaGFzU3RhbGVDb250ZW50
OworICAgICAgICAKKyAgICAgICAgVGlsZUluZm8oKQorICAgICAgICAgICAgOiBjb2hvcnQoVmlz
aWJsZVRpbGVDb2hvcnQpCisgICAgICAgICAgICAsIGhhc1N0YWxlQ29udGVudChmYWxzZSkKKyAg
ICAgICAgeyB9CisgICAgfTsKKwogcHJpdmF0ZToKICAgICBUaWxlQ2FjaGUoV2ViVGlsZUNhY2hl
TGF5ZXIqKTsKIAogICAgIC8vIFRpbGVkQmFja2luZyBtZW1iZXIgZnVuY3Rpb25zLgogICAgIHZp
cnR1YWwgdm9pZCBzZXRWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHByZXBvcHVsYXRlUmVjdChjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCB2b2lkIHNldElzSW5XaW5kb3coYm9vbCkgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCB2b2lkIHNldFRpbGVDb3ZlcmFnZShUaWxlQ292ZXJhZ2UpIE9WRVJSSURFOwogICAgIHZpcnR1
YWwgVGlsZUNvdmVyYWdlIHRpbGVDb3ZlcmFnZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
dGlsZUNvdmVyYWdlOyB9CkBAIC0xMDIsMTggKzEyMSwzOCBAQCBwcml2YXRlOgogCiAgICAgSW50
UmVjdCBib3VuZHMoKSBjb25zdDsKIAotICAgIHR5cGVkZWYgSW50UG9pbnQgVGlsZUluZGV4Owog
ICAgIEludFJlY3QgcmVjdEZvclRpbGVJbmRleChjb25zdCBUaWxlSW5kZXgmKSBjb25zdDsKICAg
ICB2b2lkIGdldFRpbGVJbmRleFJhbmdlRm9yUmVjdChjb25zdCBJbnRSZWN0JiwgVGlsZUluZGV4
JiB0b3BMZWZ0LCBUaWxlSW5kZXgmIGJvdHRvbVJpZ2h0KSBjb25zdDsKIAotICAgIEludFJlY3Qg
Y29tcHV0ZVRpbGVDb3ZlcmFnZVJlY3QoKSBjb25zdDsKKyAgICBJbnRSZWN0IGNvbXB1dGVUaWxl
Q292ZXJhZ2VSZWN0KGNvbnN0IEludFJlY3QmIHByZXZpb3VzVmlzaWJsZVJlY3QpIGNvbnN0Owog
ICAgIEludFNpemUgdGlsZVNpemVGb3JDb3ZlcmFnZVJlY3QoY29uc3QgSW50UmVjdCYpIGNvbnN0
OwogCiAgICAgdm9pZCBzY2hlZHVsZVRpbGVSZXZhbGlkYXRpb24oZG91YmxlIGludGVydmFsKTsK
ICAgICB2b2lkIHRpbGVSZXZhbGlkYXRpb25UaW1lckZpcmVkKFRpbWVyPFRpbGVDYWNoZT4qKTsK
LSAgICB2b2lkIHJldmFsaWRhdGVUaWxlcygpOworCisgICAgdm9pZCBzY2hlZHVsZUNvaG9ydFJl
bW92YWwoKTsKKyAgICB2b2lkIGNvaG9ydFJlbW92YWxUaW1lckZpcmVkKFRpbWVyPFRpbGVDYWNo
ZT4qKTsKKyAgICAKKyAgICBlbnVtIFRpbGVWYWxpZGF0aW9uUG9saWN5IHsKKyAgICAgICAgS2Vl
cFNlY29uZGFyeVRpbGVzLAorICAgICAgICBQcnVuZVNlY29uZGFyeVRpbGVzCisgICAgfTsKKyAg
ICB2b2lkIHJldmFsaWRhdGVUaWxlcyhUaWxlVmFsaWRhdGlvblBvbGljeSA9IEtlZXBTZWNvbmRh
cnlUaWxlcyk7CisgICAgdm9pZCBlbnN1cmVUaWxlc0ZvclJlY3QoY29uc3QgSW50UmVjdCYpOwog
ICAgIHZvaWQgdXBkYXRlVGlsZUNvdmVyYWdlTWFwKCk7CiAKKyAgICB2b2lkIHJlbW92ZUFsbFRp
bGVzKCk7CisgICAgdm9pZCByZW1vdmVBbGxTZWNvbmRhcnlUaWxlcygpOworICAgIHZvaWQgcmVt
b3ZlVGlsZXNJbkNvaG9ydChUaWxlQ29ob3J0KTsKKworICAgIFRpbGVDb2hvcnQgbmV4dFRpbGVD
b2hvcnQoKSBjb25zdDsKKyAgICB2b2lkIHN0YXJ0ZWROZXdDb2hvcnQoVGlsZUNvaG9ydCk7Cisg
ICAgCisgICAgVGlsZUNvaG9ydCBuZXdlc3RUaWxlQ29ob3J0KCkgY29uc3Q7CisgICAgVGlsZUNv
aG9ydCBvbGRlc3RUaWxlQ29ob3J0KCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFRpbGVOZWVkc0Rp
c3BsYXlJblJlY3QoY29uc3QgVGlsZUluZGV4JiwgVGlsZUluZm8mLCBjb25zdCBJbnRSZWN0JiBy
ZXBhaW50UmVjdEluVGlsZUNvb3JkcywgY29uc3QgSW50UmVjdCYgY292ZXJhZ2VSZWN0SW5UaWxl
Q29vcmRzKTsKKwogICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyQXRJbmRleChjb25zdCBUaWxl
SW5kZXgmKSBjb25zdDsKICAgICBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiBjcmVhdGVUaWxlTGF5
ZXIoY29uc3QgSW50UmVjdCYpOwogCkBAIC0xMjYsMTEgKzE2NSwyNSBAQCBwcml2YXRlOgogCiAg
ICAgSW50U2l6ZSBtX3RpbGVTaXplOwogICAgIEludFJlY3QgbV92aXNpYmxlUmVjdDsKKyAgICBJ
bnRSZWN0IG1fdmlzaWJsZVJlY3RBdExhc3RSZXZhbGlkYXRlOwogCi0gICAgdHlwZWRlZiBIYXNo
TWFwPFRpbGVJbmRleCwgUmV0YWluUHRyPFdlYlRpbGVMYXllcj4gPiBUaWxlTWFwOworICAgIHR5
cGVkZWYgSGFzaE1hcDxUaWxlSW5kZXgsIFRpbGVJbmZvPiBUaWxlTWFwOwogICAgIFRpbGVNYXAg
bV90aWxlczsKICAgICBUaW1lcjxUaWxlQ2FjaGU+IG1fdGlsZVJldmFsaWRhdGlvblRpbWVyOwot
ICAgIEludFJlY3QgbV90aWxlQ292ZXJhZ2VSZWN0OworICAgIFRpbWVyPFRpbGVDYWNoZT4gbV9j
b2hvcnRSZW1vdmFsVGltZXI7CisKKyAgICBzdHJ1Y3QgVGlsZUNvaG9ydEluZm8geworICAgICAg
ICBUaWxlQ29ob3J0IGNvaG9ydDsKKyAgICAgICAgZG91YmxlIGNyZWF0aW9uVGltZTsgLy8gaW4g
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkuCisgICAgICAgIFRpbGVDb2hvcnRJbmZvKFRp
bGVDb2hvcnQgaW5Db2hvcnQsIGRvdWJsZSBpblRpbWUpCisgICAgICAgICAgICA6IGNvaG9ydChp
bkNvaG9ydCkKKyAgICAgICAgICAgICwgY3JlYXRpb25UaW1lKGluVGltZSkKKyAgICAgICAgeyB9
CisgICAgfTsKKyAgICB0eXBlZGVmIERlcXVlPFRpbGVDb2hvcnRJbmZvPiBUaWxlQ29ob3J0TGlz
dDsKKyAgICBUaWxlQ29ob3J0TGlzdCBtX2NvaG9ydExpc3Q7CisgICAgCisgICAgSW50UmVjdCBt
X3ByaW1hcnlUaWxlQ292ZXJhZ2VSZWN0OyAvLyBJbiB0aWxlIGNvb3Jkcy4KIAogICAgIENHRmxv
YXQgbV9zY2FsZTsKICAgICBDR0Zsb2F0IG1fZGV2aWNlU2NhbGVGYWN0b3I7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbQppbmRl
eCA3NjFmMzc5MDc0MzIyOTg4NDI0NjlhZDY4Y2EwZDA3MGY1NjkwYzU0Li4yMTUzYTQ1ZTExMTNm
NzU1ZDc1MzdkN2RmMGI5ODBmNDkwYzU3YWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0KQEAgLTk0LDYgKzk0LDcgQEAg
VGlsZUNhY2hlOjpUaWxlQ2FjaGUoV2ViVGlsZUNhY2hlTGF5ZXIqIHRpbGVDYWNoZUxheWVyKQog
ICAgICwgbV90aWxlQ29udGFpbmVyTGF5ZXIoYWRvcHRDRihbW0NBTGF5ZXIgYWxsb2NdIGluaXRd
KSkKICAgICAsIG1fdGlsZVNpemUoZGVmYXVsdFRpbGVDYWNoZVdpZHRoLCBkZWZhdWx0VGlsZUNh
Y2hlSGVpZ2h0KQogICAgICwgbV90aWxlUmV2YWxpZGF0aW9uVGltZXIodGhpcywgJlRpbGVDYWNo
ZTo6dGlsZVJldmFsaWRhdGlvblRpbWVyRmlyZWQpCisgICAgLCBtX2NvaG9ydFJlbW92YWxUaW1l
cih0aGlzLCAmVGlsZUNhY2hlOjpjb2hvcnRSZW1vdmFsVGltZXJGaXJlZCkKICAgICAsIG1fc2Nh
bGUoMSkKICAgICAsIG1fZGV2aWNlU2NhbGVGYWN0b3IoMSkKICAgICAsIG1fdGlsZUNvdmVyYWdl
KENvdmVyYWdlRm9yVmlzaWJsZUFyZWEpCkBAIC0xMTgsOCArMTE5LDggQEAgVGlsZUNhY2hlOjp+
VGlsZUNhY2hlKCkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgZm9yIChUaWxl
TWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gaXQt
PnZhbHVlLmdldCgpOwotICAgICAgICBbdGlsZUxheWVyIHNldFRpbGVDYWNoZTowXTsKKyAgICAg
ICAgY29uc3QgVGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZhbHVlOworICAgICAgICBbdGlsZUlu
Zm8ubGF5ZXIuZ2V0KCkgc2V0VGlsZUNhY2hlOjBdOwogICAgIH0KICAgICAKICAgICBpZiAobV90
aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyKQpAQCAtMTQwLDggKzE0MSwxMCBAQCB2b2lkIFRp
bGVDYWNoZTo6dGlsZUNhY2hlTGF5ZXJCb3VuZHNDaGFuZ2VkKCkKIAogdm9pZCBUaWxlQ2FjaGU6
OnNldE5lZWRzRGlzcGxheSgpCiB7Ci0gICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBbaXQtPnZhbHVlLmdldCgpIHNldE5lZWRzRGlzcGxheV07CisgICAgZm9yIChU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxl
cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0aWxl
SW5mbyA9IGl0LT52YWx1ZTsKKyAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdldCgpIHNldE5lZWRz
RGlzcGxheV07CisgICAgfQogfQogCiB2b2lkIFRpbGVDYWNoZTo6c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC0xNTEsMzcgKzE1NCw1NyBAQCB2b2lkIFRpbGVD
YWNoZTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAKICAgICBG
bG9hdFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKICAgICBzY2FsZWRSZWN0LnNjYWxlKG1fc2NhbGUp
OwotCi0gICAgLy8gRmluZCB0aGUgdGlsZXMgdGhhdCBuZWVkIHRvIGJlIGludmFsaWRhdGVkLgot
ICAgIEludFJlY3QgY292ZXJlZFJlY3QgPSBpbnRlcnNlY3Rpb24oZW5jbG9zaW5nSW50UmVjdChz
Y2FsZWRSZWN0KSwgbV90aWxlQ292ZXJhZ2VSZWN0KTsKLSAgICBpZiAoY292ZXJlZFJlY3QuaXNF
bXB0eSgpKQorICAgIEludFJlY3QgcmVwYWludFJlY3RJblRpbGVDb29yZHMoZW5jbG9zaW5nSW50
UmVjdChzY2FsZWRSZWN0KSk7CisKKyAgICAvLyBGb3Igc21hbGwgaW52YWxpZGF0aW9ucywgbG9v
a3VwIHRoZSBjb3ZlcmVkIHRpbGVzLgorICAgIGlmIChyZXBhaW50UmVjdEluVGlsZUNvb3Jkcy5o
ZWlnaHQoKSA8IDIgKiBtX3RpbGVTaXplLmhlaWdodCgpICYmIHJlcGFpbnRSZWN0SW5UaWxlQ29v
cmRzLndpZHRoKCkgPCAyICogbV90aWxlU2l6ZS53aWR0aCgpKSB7CisgICAgICAgIFRpbGVJbmRl
eCB0b3BMZWZ0OworICAgICAgICBUaWxlSW5kZXggYm90dG9tUmlnaHQ7CisgICAgICAgIGdldFRp
bGVJbmRleFJhbmdlRm9yUmVjdChyZXBhaW50UmVjdEluVGlsZUNvb3JkcywgdG9wTGVmdCwgYm90
dG9tUmlnaHQpOworCisgICAgICAgIGZvciAoaW50IHkgPSB0b3BMZWZ0LnkoKTsgeSA8PSBib3R0
b21SaWdodC55KCk7ICsreSkgeworICAgICAgICAgICAgZm9yIChpbnQgeCA9IHRvcExlZnQueCgp
OyB4IDw9IGJvdHRvbVJpZ2h0LngoKTsgKyt4KSB7CisgICAgICAgICAgICAgICAgVGlsZUluZGV4
IHRpbGVJbmRleCh4LCB5KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBUaWxl
TWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuZmluZCh0aWxlSW5kZXgpOworICAgICAgICAgICAg
ICAgIGlmIChpdCAhPSBtX3RpbGVzLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICBzZXRUaWxl
TmVlZHNEaXNwbGF5SW5SZWN0KHRpbGVJbmRleCwgaXQtPnZhbHVlLCByZXBhaW50UmVjdEluVGls
ZUNvb3JkcywgbV9wcmltYXJ5VGlsZUNvdmVyYWdlUmVjdCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIFRpbGVJbmRleCB0b3BMZWZ0Owot
ICAgIFRpbGVJbmRleCBib3R0b21SaWdodDsKLSAgICBnZXRUaWxlSW5kZXhSYW5nZUZvclJlY3Qo
Y292ZXJlZFJlY3QsIHRvcExlZnQsIGJvdHRvbVJpZ2h0KTsKLQotICAgIGZvciAoaW50IHkgPSB0
b3BMZWZ0LnkoKTsgeSA8PSBib3R0b21SaWdodC55KCk7ICsreSkgewotICAgICAgICBmb3IgKGlu
dCB4ID0gdG9wTGVmdC54KCk7IHggPD0gYm90dG9tUmlnaHQueCgpOyArK3gpIHsKLSAgICAgICAg
ICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gdGlsZUxheWVyQXRJbmRleChUaWxlSW5kZXgo
eCwgeSkpOwotICAgICAgICAgICAgaWYgKCF0aWxlTGF5ZXIpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwg
ZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBzZXRUaWxlTmVl
ZHNEaXNwbGF5SW5SZWN0KGl0LT5rZXksIGl0LT52YWx1ZSwgcmVwYWludFJlY3RJblRpbGVDb29y
ZHMsIG1fcHJpbWFyeVRpbGVDb3ZlcmFnZVJlY3QpOworfQogCi0gICAgICAgICAgICBDR1JlY3Qg
dGlsZVJlY3QgPSBbbV90aWxlQ2FjaGVMYXllciBjb252ZXJ0UmVjdDpyZWN0IHRvTGF5ZXI6dGls
ZUxheWVyXTsKLSAgICAgICAgICAgIGlmIChDR1JlY3RJc0VtcHR5KHRpbGVSZWN0KSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKK3ZvaWQgVGlsZUNhY2hlOjpzZXRUaWxlTmVlZHNEaXNwbGF5
SW5SZWN0KGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4LCBUaWxlSW5mbyYgdGlsZUluZm8sIGNv
bnN0IEludFJlY3QmIHJlcGFpbnRSZWN0SW5UaWxlQ29vcmRzLCBjb25zdCBJbnRSZWN0JiBjb3Zl
cmFnZVJlY3RJblRpbGVDb29yZHMpCit7CisgICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5ZXIgPSB0
aWxlSW5mby5sYXllci5nZXQoKTsKIAotICAgICAgICAgICAgW3RpbGVMYXllciBzZXROZWVkc0Rp
c3BsYXlJblJlY3Q6dGlsZVJlY3RdOworICAgIEludFJlY3QgdGlsZVJlY3QgPSByZWN0Rm9yVGls
ZUluZGV4KHRpbGVJbmRleCk7CisgICAgSW50UmVjdCB0aWxlUmVwYWludFJlY3QgPSB0aWxlUmVj
dDsKKyAgICB0aWxlUmVwYWludFJlY3QuaW50ZXJzZWN0KHJlcGFpbnRSZWN0SW5UaWxlQ29vcmRz
KTsKKyAgICBpZiAodGlsZVJlcGFpbnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1JlcGFpbnRDb3VudGVycygpKSB7Ci0gICAgICAg
ICAgICAgICAgQ0dSZWN0IGJvdW5kcyA9IFt0aWxlTGF5ZXIgYm91bmRzXTsKLSAgICAgICAgICAg
ICAgICBDR1JlY3QgaW5kaWNhdG9yUmVjdCA9IENHUmVjdE1ha2UoYm91bmRzLm9yaWdpbi54LCBi
b3VuZHMub3JpZ2luLnksIDUyLCAyNyk7Ci0gICAgICAgICAgICAgICAgW3RpbGVMYXllciBzZXRO
ZWVkc0Rpc3BsYXlJblJlY3Q6aW5kaWNhdG9yUmVjdF07Ci0gICAgICAgICAgICB9CisgICAgdGls
ZVJlcGFpbnRSZWN0Lm1vdmVCeSgtdGlsZVJlY3QubG9jYXRpb24oKSk7CisgICAgCisgICAgLy8g
V2UgY291bGQgdGVzdCBmb3IgaW50ZXJzZWN0aW9uIHdpdGggdGhlIHZpc2libGUgcmVjdC4gVGhp
cyB3b3VsZCByZWR1Y2UgcGFpbnRpbmcgeWV0IG1vcmUsCisgICAgLy8gYnV0IG1heSBtYWtlIHNj
cm9sbGluZyBzdGFsZSB0aWxlcyBpbnRvIHZpZXcgbW9yZSBmcmVxdWVudC4KKyAgICBpZiAodGls
ZVJlY3QuaW50ZXJzZWN0cyhjb3ZlcmFnZVJlY3RJblRpbGVDb29yZHMpKSB7CisgICAgICAgIFt0
aWxlTGF5ZXIgc2V0TmVlZHNEaXNwbGF5SW5SZWN0OnRpbGVSZXBhaW50UmVjdF07CisKKyAgICAg
ICAgaWYgKHNob3VsZFNob3dSZXBhaW50Q291bnRlcnMoKSkgeworICAgICAgICAgICAgQ0dSZWN0
IGJvdW5kcyA9IFt0aWxlTGF5ZXIgYm91bmRzXTsKKyAgICAgICAgICAgIENHUmVjdCBpbmRpY2F0
b3JSZWN0ID0gQ0dSZWN0TWFrZShib3VuZHMub3JpZ2luLngsIGJvdW5kcy5vcmlnaW4ueSwgNTIs
IDI3KTsKKyAgICAgICAgICAgIFt0aWxlTGF5ZXIgc2V0TmVlZHNEaXNwbGF5SW5SZWN0OmluZGlj
YXRvclJlY3RdOwogICAgICAgICB9Ci0gICAgfQorICAgIH0gZWxzZQorICAgICAgICB0aWxlSW5m
by5oYXNTdGFsZUNvbnRlbnQgPSB0cnVlOwogfQogCisKIHZvaWQgVGlsZUNhY2hlOjpkcmF3TGF5
ZXIoV2ViVGlsZUxheWVyICpsYXllciwgQ0dDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgUGxh
dGZvcm1DQUxheWVyKiBwbGF0Zm9ybUxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNB
TGF5ZXIobV90aWxlQ2FjaGVMYXllcik7CkBAIC0yMTksMTAgKzI0MiwxMSBAQCB2b2lkIFRpbGVD
YWNoZTo6c2V0U2NhbGUoQ0dGbG9hdCBzY2FsZSkKICAgICBtX3NjYWxlID0gc2NhbGU7CiAgICAg
W21fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFr
ZVNjYWxlKDEgLyBtX3NjYWxlLCAxIC8gbV9zY2FsZSwgMSldOwogCi0gICAgcmV2YWxpZGF0ZVRp
bGVzKCk7CisgICAgcmV2YWxpZGF0ZVRpbGVzKFBydW5lU2Vjb25kYXJ5VGlsZXMpOwogCiAgICAg
Zm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0g
bV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFtpdC0+dmFsdWUuZ2V0
KCkgc2V0Q29udGVudHNTY2FsZTpkZXZpY2VTY2FsZUZhY3Rvcl07CisgICAgICAgIGNvbnN0IFRp
bGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsKKyAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdl
dCgpIHNldENvbnRlbnRzU2NhbGU6ZGV2aWNlU2NhbGVGYWN0b3JdOwogCiAgICAgICAgIEludFJl
Y3QgdGlsZVJlY3QgPSByZWN0Rm9yVGlsZUluZGV4KGl0LT5rZXkpOwogICAgICAgICBGbG9hdFJl
Y3Qgc2NhbGVkVGlsZVJlY3QgPSB0aWxlUmVjdDsKQEAgLTI0Myw4ICsyNjcsMTAgQEAgdm9pZCBU
aWxlQ2FjaGU6OnNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sIGFjY2VsZXJhdGVzRHJhd2luZykK
IAogICAgIG1fYWNjZWxlcmF0ZXNEcmF3aW5nID0gYWNjZWxlcmF0ZXNEcmF3aW5nOwogCi0gICAg
Zm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0g
bV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBbaXQtPnZhbHVlLmdldCgp
IHNldEFjY2VsZXJhdGVzRHJhd2luZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CisgICAgZm9yIChU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxl
cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0aWxl
SW5mbyA9IGl0LT52YWx1ZTsKKyAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdldCgpIHNldEFjY2Vs
ZXJhdGVzRHJhd2luZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CisgICAgfQogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0oYWNjZWxlcmF0ZXNEcmF3aW5nKTsKICNlbmRpZgpAQCAtMjU4LDggKzI4NCw4
IEBAIHZvaWQgVGlsZUNhY2hlOjpzZXRUaWxlc09wYXF1ZShib29sIG9wYXF1ZSkKICAgICBtX3Rp
bGVzQXJlT3BhcXVlID0gb3BhcXVlOwogCiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9
IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gaXQtPnZhbHVlLmdldCgpOwotICAg
ICAgICBbdGlsZUxheWVyIHNldE9wYXF1ZTpvcGFxdWVdOworICAgICAgICBjb25zdCBUaWxlSW5m
byYgdGlsZUluZm8gPSBpdC0+dmFsdWU7CisgICAgICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBz
ZXRPcGFxdWU6b3BhcXVlXTsKICAgICB9CiB9CiAKQEAgLTI3Miw2ICsyOTgsMTEgQEAgdm9pZCBU
aWxlQ2FjaGU6OnNldFZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0KQogICAg
IHJldmFsaWRhdGVUaWxlcygpOwogfQogCit2b2lkIFRpbGVDYWNoZTo6cHJlcG9wdWxhdGVSZWN0
KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgZW5zdXJlVGlsZXNGb3JSZWN0KHJlY3QpOwor
fQorCiB2b2lkIFRpbGVDYWNoZTo6c2V0SXNJbldpbmRvdyhib29sIGlzSW5XaW5kb3cpCiB7CiAg
ICAgaWYgKG1faXNJbldpbmRvdyA9PSBpc0luV2luZG93KQpAQCAtMzA1LDggKzMzNiwxMCBAQCB2
b2lkIFRpbGVDYWNoZTo6c2V0VGlsZURlYnVnQm9yZGVyV2lkdGgoZmxvYXQgYm9yZGVyV2lkdGgp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fdGlsZURlYnVnQm9yZGVyV2lkdGggPSBib3JkZXJX
aWR0aDsKLSAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdp
bigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIFtpdC0+
dmFsdWUuZ2V0KCkgc2V0Qm9yZGVyV2lkdGg6bV90aWxlRGVidWdCb3JkZXJXaWR0aF07CisgICAg
Zm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0g
bV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0IFRpbGVJbmZv
JiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsKKyAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdldCgpIHNl
dEJvcmRlcldpZHRoOm1fdGlsZURlYnVnQm9yZGVyV2lkdGhdOworICAgIH0KIH0KIAogdm9pZCBU
aWxlQ2FjaGU6OnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKENHQ29sb3JSZWYgYm9yZGVyQ29sb3Ip
CkBAIC0zMTUsOCArMzQ4LDEwIEBAIHZvaWQgVGlsZUNhY2hlOjpzZXRUaWxlRGVidWdCb3JkZXJD
b2xvcihDR0NvbG9yUmVmIGJvcmRlckNvbG9yKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3Rp
bGVEZWJ1Z0JvcmRlckNvbG9yID0gYm9yZGVyQ29sb3I7Ci0gICAgZm9yIChUaWxlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICBbaXQtPnZhbHVlLmdldCgpIHNldEJvcmRlckNvbG9yOm1f
dGlsZURlYnVnQm9yZGVyQ29sb3IuZ2V0KCldOworICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICBjb25zdCBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7
CisgICAgICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXRCb3JkZXJDb2xvcjptX3RpbGVEZWJ1
Z0JvcmRlckNvbG9yLmdldCgpXTsKKyAgICB9CiB9CiAKIEludFJlY3QgVGlsZUNhY2hlOjpib3Vu
ZHMoKSBjb25zdApAQCAtMzUxLDMxICszODYsNDcgQEAgdm9pZCBUaWxlQ2FjaGU6OmdldFRpbGVJ
bmRleFJhbmdlRm9yUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBUaWxlSW5kZXgmIHRvcExlZnQK
ICAgICBib3R0b21SaWdodC5zZXRZKG1heChib3R0b21ZUmF0aW8gLSAxLCAwKSk7CiB9CiAKLUlu
dFJlY3QgVGlsZUNhY2hlOjpjb21wdXRlVGlsZUNvdmVyYWdlUmVjdCgpIGNvbnN0CitJbnRSZWN0
IFRpbGVDYWNoZTo6Y29tcHV0ZVRpbGVDb3ZlcmFnZVJlY3QoY29uc3QgSW50UmVjdCYgcHJldmlv
dXNWaXNpYmxlUmVjdCkgY29uc3QKIHsKLSAgICBJbnRSZWN0IHRpbGVDb3ZlcmFnZVJlY3QgPSBt
X3Zpc2libGVSZWN0OwotCiAgICAgLy8gSWYgdGhlIHBhZ2UgaXMgbm90IGluIGEgd2luZG93IChm
b3IgZXhhbXBsZSBpZiBpdCdzIGluIGEgYmFja2dyb3VuZCB0YWIpLCB3ZSBsaW1pdCB0aGUgdGls
ZSBjb3ZlcmFnZSByZWN0IHRvIHRoZSB2aXNpYmxlIHJlY3QuCiAgICAgLy8gRnVydGhlcm1vcmUs
IGlmIHRoZSBwYWdlIGNhbid0IGhhdmUgc2Nyb2xsYmFycyAoZm9yIGV4YW1wbGUgaWYgaXRzIGJv
ZHkgZWxlbWVudCBoYXMgb3ZlcmZsb3c6aGlkZGVuKSBpdCdzIHZlcnkgdW5saWtlbHkgdGhhdCB0
aGUKICAgICAvLyBwYWdlIHdpbGwgZXZlciBiZSBzY3JvbGxlZCBzbyB3ZSBsaW1pdCB0aGUgdGls
ZSBjb3ZlcmFnZSByZWN0IGFzIHdlbGwuCi0gICAgaWYgKG1faXNJbldpbmRvdyAmJiAhKG1fdGls
ZUNvdmVyYWdlICYgQ292ZXJhZ2VGb3JTbG93U2Nyb2xsaW5nKSkgewotICAgICAgICAvLyBJbmZs
YXRlIHRoZSBjb3ZlcmFnZSByZWN0IHNvIHRoYXQgaXQgY292ZXJzIDJ4IG9mIHRoZSB2aXNpYmxl
IHdpZHRoIGFuZCAzeCBvZiB0aGUgdmlzaWJsZSBoZWlnaHQuCi0gICAgICAgIC8vIFRoZXNlIHZh
bHVlcyB3ZXJlIGNob3NlbiBiZWNhdXNlIGl0J3MgbW9yZSBjb21tb24gdG8gaGF2ZSB0YWxsIHBh
Z2VzIGFuZCB0byBzY3JvbGwgdmVydGljYWxseSwKLSAgICAgICAgLy8gc28gd2Uga2VlcCBtb3Jl
IHRpbGVzIGFib3ZlIGFuZCBiZWxvdyB0aGUgY3VycmVudCBhcmVhLgotICAgICAgICBpZiAobV90
aWxlQ292ZXJhZ2UgJiBDb3ZlcmFnZUZvckhvcml6b250YWxTY3JvbGxpbmcpCi0gICAgICAgICAg
ICB0aWxlQ292ZXJhZ2VSZWN0LmluZmxhdGVYKHRpbGVDb3ZlcmFnZVJlY3Qud2lkdGgoKSAvIDIp
OwotCi0gICAgICAgIGlmIChtX3RpbGVDb3ZlcmFnZSAmIENvdmVyYWdlRm9yVmVydGljYWxTY3Jv
bGxpbmcpCi0gICAgICAgICAgICB0aWxlQ292ZXJhZ2VSZWN0LmluZmxhdGVZKHRpbGVDb3ZlcmFn
ZVJlY3QuaGVpZ2h0KCkpOwotICAgIH0KKyAgICBpZiAoIW1faXNJbldpbmRvdyB8fCBtX3RpbGVD
b3ZlcmFnZSAmIENvdmVyYWdlRm9yU2xvd1Njcm9sbGluZykKKyAgICAgICAgcmV0dXJuIG1fdmlz
aWJsZVJlY3Q7CisKKyAgICBib29sIGxhcmdlVmlzaWJsZVJlY3RDaGFuZ2UgPSAhcHJldmlvdXNW
aXNpYmxlUmVjdC5pc0VtcHR5KCkgJiYgIW1fdmlzaWJsZVJlY3QuaW50ZXJzZWN0cyhwcmV2aW91
c1Zpc2libGVSZWN0KTsKKyAgICAKKyAgICAvLyBGSVhNRTogbG9vayBhdCBob3cgZmFyIHRoZSBk
b2N1bWVudCBjYW4gc2Nyb2xsIGluIGVhY2ggZGltZW5zaW9uLgorICAgIGludCBjb3ZlcmFnZUhv
cml6b250YWxTaXplID0gbV92aXNpYmxlUmVjdC53aWR0aCgpOworICAgIGludCBjb3ZlcmFnZVZl
cnRpY2FsU2l6ZSA9IG1fdmlzaWJsZVJlY3QuaGVpZ2h0KCk7CisgICAgCisgICAgLy8gSW5mbGF0
ZSB0aGUgY292ZXJhZ2UgcmVjdCBzbyB0aGF0IGl0IGNvdmVycyAyeCBvZiB0aGUgdmlzaWJsZSB3
aWR0aCBhbmQgM3ggb2YgdGhlIHZpc2libGUgaGVpZ2h0LgorICAgIC8vIFRoZXNlIHZhbHVlcyB3
ZXJlIGNob3NlbiBiZWNhdXNlIGl0J3MgbW9yZSBjb21tb24gdG8gaGF2ZSB0YWxsIHBhZ2VzIGFu
ZCB0byBzY3JvbGwgdmVydGljYWxseSwKKyAgICAvLyBzbyB3ZSBrZWVwIG1vcmUgdGlsZXMgYWJv
dmUgYW5kIGJlbG93IHRoZSBjdXJyZW50IGFyZWEuCisgICAgaWYgKG1fdGlsZUNvdmVyYWdlICYg
Q292ZXJhZ2VGb3JIb3Jpem9udGFsU2Nyb2xsaW5nICYmICFsYXJnZVZpc2libGVSZWN0Q2hhbmdl
KQorICAgICAgICBjb3ZlcmFnZUhvcml6b250YWxTaXplICo9IDI7CisKKyAgICBpZiAobV90aWxl
Q292ZXJhZ2UgJiBDb3ZlcmFnZUZvclZlcnRpY2FsU2Nyb2xsaW5nICYmICFsYXJnZVZpc2libGVS
ZWN0Q2hhbmdlKQorICAgICAgICBjb3ZlcmFnZVZlcnRpY2FsU2l6ZSAqPSAzOworCisgICAgLy8g
RG9uJ3QgZXh0ZW5kIGNvdmVyYWdlIGJlZm9yZSAwIG9yIGFmdGVyIHRoZSBlbmQuCisgICAgSW50
UmVjdCBjb3ZlcmFnZUJvdW5kcyA9IGJvdW5kcygpOworICAgIGludCBjb3ZlcmFnZUxlZnQgPSBt
X3Zpc2libGVSZWN0LngoKSAtIChjb3ZlcmFnZUhvcml6b250YWxTaXplIC0gbV92aXNpYmxlUmVj
dC53aWR0aCgpKSAvIDI7CisgICAgY292ZXJhZ2VMZWZ0ID0gbWluKGNvdmVyYWdlTGVmdCwgY292
ZXJhZ2VCb3VuZHMubWF4WCgpIC0gY292ZXJhZ2VIb3Jpem9udGFsU2l6ZSk7CisgICAgY292ZXJh
Z2VMZWZ0ID0gbWF4KGNvdmVyYWdlTGVmdCwgY292ZXJhZ2VCb3VuZHMueCgpKTsKIAotICAgIHJl
dHVybiB0aWxlQ292ZXJhZ2VSZWN0OworICAgIGludCBjb3ZlcmFnZVRvcCA9IG1fdmlzaWJsZVJl
Y3QueSgpIC0gKGNvdmVyYWdlVmVydGljYWxTaXplIC0gbV92aXNpYmxlUmVjdC5oZWlnaHQoKSkg
LyAyOworICAgIGNvdmVyYWdlVG9wID0gbWluKGNvdmVyYWdlVG9wLCBjb3ZlcmFnZUJvdW5kcy5t
YXhZKCkgLSBjb3ZlcmFnZVZlcnRpY2FsU2l6ZSk7CisgICAgY292ZXJhZ2VUb3AgPSBtYXgoY292
ZXJhZ2VUb3AsIGNvdmVyYWdlQm91bmRzLnkoKSk7CisKKyAgICByZXR1cm4gSW50UmVjdChjb3Zl
cmFnZUxlZnQsIGNvdmVyYWdlVG9wLCBjb3ZlcmFnZUhvcml6b250YWxTaXplLCBjb3ZlcmFnZVZl
cnRpY2FsU2l6ZSk7CiB9CiAKIEludFNpemUgVGlsZUNhY2hlOjp0aWxlU2l6ZUZvckNvdmVyYWdl
UmVjdChjb25zdCBJbnRSZWN0JiBjb3ZlcmFnZVJlY3QpIGNvbnN0CiB7CiAgICAgaWYgKG1fdGls
ZUNvdmVyYWdlICYgQ292ZXJhZ2VGb3JTbG93U2Nyb2xsaW5nKQogICAgICAgICByZXR1cm4gY292
ZXJhZ2VSZWN0LnNpemUoKTsKKwogICAgIHJldHVybiBJbnRTaXplKGRlZmF1bHRUaWxlQ2FjaGVX
aWR0aCwgZGVmYXVsdFRpbGVDYWNoZUhlaWdodCk7CiB9CiAKQEAgLTM4OSwxMyArNDQwLDE1IEBA
IHZvaWQgVGlsZUNhY2hlOjpzY2hlZHVsZVRpbGVSZXZhbGlkYXRpb24oZG91YmxlIGludGVydmFs
KQogCiB2b2lkIFRpbGVDYWNoZTo6dGlsZVJldmFsaWRhdGlvblRpbWVyRmlyZWQoVGltZXI8VGls
ZUNhY2hlPiopCiB7Ci0gICAgcmV2YWxpZGF0ZVRpbGVzKCk7CisgICAgcmV2YWxpZGF0ZVRpbGVz
KFBydW5lU2Vjb25kYXJ5VGlsZXMpOwogfQogCiB1bnNpZ25lZCBUaWxlQ2FjaGU6OmJsYW5rUGl4
ZWxDb3VudCgpIGNvbnN0CiB7CiAgICAgV2ViVGlsZUxheWVyTGlzdCB0aWxlcyhtX3RpbGVzLnNp
emUoKSk7Ci0gICAgdGlsZXMuYXBwZW5kUmFuZ2UobV90aWxlcy5iZWdpbigpLnZhbHVlcygpLCBt
X3RpbGVzLmVuZCgpLnZhbHVlcygpKTsKKworICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsg
KytpdCkKKyAgICAgICAgdGlsZXMuYXBwZW5kKGl0LT52YWx1ZS5sYXllcik7CiAKICAgICByZXR1
cm4gYmxhbmtQaXhlbENvdW50Rm9yVGlsZXModGlsZXMsIG1fdmlzaWJsZVJlY3QsIEludFBvaW50
KDAsMCkpOwogfQpAQCAtNDIwLDcgKzQ3Myw2NSBAQCB1bnNpZ25lZCBUaWxlQ2FjaGU6OmJsYW5r
UGl4ZWxDb3VudEZvclRpbGVzKGNvbnN0IFdlYlRpbGVMYXllckxpc3QmIHRpbGVzLCBJbnRSZQog
ICAgIHJldHVybiB1bmNvdmVyZWRSZWdpb24udG90YWxBcmVhKCk7CiB9CiAKLXZvaWQgVGlsZUNh
Y2hlOjpyZXZhbGlkYXRlVGlsZXMoKQorc3RhdGljIGlubGluZSB2b2lkIHF1ZXVlVGlsZUZvclJl
bW92YWwoY29uc3QgVGlsZUNhY2hlOjpUaWxlSW5kZXgmIHRpbGVJbmRleCwgY29uc3QgVGlsZUNh
Y2hlOjpUaWxlSW5mbyYgdGlsZUluZm8sIFZlY3RvcjxUaWxlQ2FjaGU6OlRpbGVJbmRleD4mIHRp
bGVzVG9SZW1vdmUpCit7CisgICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5ZXIgPSB0aWxlSW5mby5s
YXllci5nZXQoKTsKKyAgICBbdGlsZUxheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBb
dGlsZUxheWVyIHNldFRpbGVDYWNoZTowXTsKKyAgICB0aWxlc1RvUmVtb3ZlLmFwcGVuZCh0aWxl
SW5kZXgpOworfQorCit2b2lkIFRpbGVDYWNoZTo6cmVtb3ZlQWxsVGlsZXMoKQoreworICAgIFZl
Y3RvcjxUaWxlSW5kZXg+IHRpbGVzVG9SZW1vdmU7CisKKyAgICBmb3IgKFRpbGVNYXA6Oml0ZXJh
dG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgIHF1ZXVlVGlsZUZvclJlbW92YWwoaXQtPmtleSwgaXQtPnZhbHVlLCB0
aWxlc1RvUmVtb3ZlKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb1JlbW92
ZS5zaXplKCk7ICsraSkgeworICAgICAgICBUaWxlSW5mbyB0aWxlSW5mbyA9IG1fdGlsZXMudGFr
ZSh0aWxlc1RvUmVtb3ZlW2ldKTsKKyAgICAgICAgTGF5ZXJQb29sOjpzaGFyZWRQb29sKCktPmFk
ZExheWVyKHRpbGVJbmZvLmxheWVyKTsKKyAgICB9Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpyZW1v
dmVBbGxTZWNvbmRhcnlUaWxlcygpCit7CisgICAgVmVjdG9yPFRpbGVJbmRleD4gdGlsZXNUb1Jl
bW92ZTsKKworICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCks
IGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBjb25zdCBU
aWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7CisgICAgICAgIGlmICh0aWxlSW5mby5jb2hv
cnQgPT0gVmlzaWJsZVRpbGVDb2hvcnQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBxdWV1ZVRpbGVGb3JSZW1vdmFsKGl0LT5rZXksIGl0LT52YWx1ZSwgdGlsZXNUb1JlbW92ZSk7
CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlc1RvUmVtb3ZlLnNpemUo
KTsgKytpKSB7CisgICAgICAgIFRpbGVJbmZvIHRpbGVJbmZvID0gbV90aWxlcy50YWtlKHRpbGVz
VG9SZW1vdmVbaV0pOworICAgICAgICBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+YWRkTGF5ZXIo
dGlsZUluZm8ubGF5ZXIpOworICAgIH0KK30KKwordm9pZCBUaWxlQ2FjaGU6OnJlbW92ZVRpbGVz
SW5Db2hvcnQoVGlsZUNvaG9ydCBjb2hvcnQpCit7CisgICAgQVNTRVJUKGNvaG9ydCAhPSBWaXNp
YmxlVGlsZUNvaG9ydCk7CisgICAgVmVjdG9yPFRpbGVJbmRleD4gdGlsZXNUb1JlbW92ZTsKKwor
ICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1f
dGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBjb25zdCBUaWxlSW5mbyYg
dGlsZUluZm8gPSBpdC0+dmFsdWU7CisgICAgICAgIGlmICh0aWxlSW5mby5jb2hvcnQgIT0gY29o
b3J0KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcXVldWVUaWxlRm9yUmVtb3Zh
bChpdC0+a2V5LCBpdC0+dmFsdWUsIHRpbGVzVG9SZW1vdmUpOworICAgIH0KKworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb1JlbW92ZS5zaXplKCk7ICsraSkgeworICAgICAgICBU
aWxlSW5mbyB0aWxlSW5mbyA9IG1fdGlsZXMudGFrZSh0aWxlc1RvUmVtb3ZlW2ldKTsKKyAgICAg
ICAgTGF5ZXJQb29sOjpzaGFyZWRQb29sKCktPmFkZExheWVyKHRpbGVJbmZvLmxheWVyKTsKKyAg
ICB9Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMoVGlsZVZhbGlkYXRpb25Q
b2xpY3kgdmFsaWRhdGlvblBvbGljeSkKIHsKICAgICAvLyBJZiB0aGUgdW5kZXJseWluZyBQbGF0
Zm9ybUxheWVyIGhhcyBiZWVuIGRlc3Ryb3llZCwgYnV0IHRoZSBXZWJUaWxlQ2FjaGVMYXllciBo
YXNuJ3QKICAgICAvLyBwbGF0Zm9ybUxheWVyIHdpbGwgYmUgbnVsbCBoZXJlLgpAQCAtNDMxLDU3
ICs1NDIsMjAxIEBAIHZvaWQgVGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMoKQogICAgIGlmICht
X3Zpc2libGVSZWN0LmlzRW1wdHkoKSB8fCBib3VuZHMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEludFJlY3QgdGlsZUNvdmVyYWdlUmVjdCA9IGNvbXB1dGVUaWxlQ292ZXJh
Z2VSZWN0KCk7Ci0gICAgSW50UmVjdCBjb3ZlcmFnZVJlY3RJblRpbGVDb29yZHModGlsZUNvdmVy
YWdlUmVjdCk7Ci0gICAgY292ZXJhZ2VSZWN0SW5UaWxlQ29vcmRzLnNjYWxlKG1fc2NhbGUpOwor
ICAgIC8vIElmIHRoZSB2aXNpYmxlIHJlY3Qgc2l6ZSBjaGFuZ2VkLCBkcm9wIHNlY29uZGFyeSB0
aWxlcyB0byBhdm9pZCBsb3RzIG9mIHJlcGFpbnRpbmcuCisgICAgLy8gRklYTUU6IHdoZW4gc2Nh
bGVkLCB0aGlzIGNoYW5nZXMgZHVlIHRvIHJvdW5kaW5nLiBXZSBzaG91bGQgdXNlIEZsb2F0UmVj
dHMgb3Igc29tZXRoaW5nLgorICAgIC8vIEFsc28gY2hhbmdlcyBvbiBydWJiZXIgYmFuZGluZy4K
KyAgICBpZiAobV92aXNpYmxlUmVjdEF0TGFzdFJldmFsaWRhdGUuc2l6ZSgpICE9IG1fdmlzaWJs
ZVJlY3Quc2l6ZSgpKQorICAgICAgICB2YWxpZGF0aW9uUG9saWN5ID0gUHJ1bmVTZWNvbmRhcnlU
aWxlczsKKyAgICAKKyAgICBJbnRSZWN0IHRpbGVDb3ZlcmFnZVJlY3QgPSBjb21wdXRlVGlsZUNv
dmVyYWdlUmVjdChtX3Zpc2libGVSZWN0QXRMYXN0UmV2YWxpZGF0ZSk7CisgICAgRmxvYXRSZWN0
IHNjYWxlZFJlY3QodGlsZUNvdmVyYWdlUmVjdCk7CisgICAgc2NhbGVkUmVjdC5zY2FsZShtX3Nj
YWxlKTsKKyAgICBJbnRSZWN0IGNvdmVyYWdlUmVjdEluVGlsZUNvb3JkcyhlbmNsb3NpbmdJbnRS
ZWN0KHNjYWxlZFJlY3QpKTsKIAogICAgIEludFNpemUgb2xkVGlsZVNpemUgPSBtX3RpbGVTaXpl
OwogICAgIG1fdGlsZVNpemUgPSB0aWxlU2l6ZUZvckNvdmVyYWdlUmVjdCh0aWxlQ292ZXJhZ2VS
ZWN0KTsKICAgICBib29sIHRpbGVTaXplQ2hhbmdlZCA9IG1fdGlsZVNpemUgIT0gb2xkVGlsZVNp
emU7CiAKLSAgICBWZWN0b3I8VGlsZUluZGV4PiB0aWxlc1RvUmVtb3ZlOworICAgIGlmICh0aWxl
U2l6ZUNoYW5nZWQpIHsKKyAgICAgICAgcmVtb3ZlQWxsVGlsZXMoKTsKKyAgICAgICAgbV9jb2hv
cnRMaXN0LmNsZWFyKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVGlsZUNvaG9ydCBjdXJyQ29o
b3J0ID0gbmV4dFRpbGVDb2hvcnQoKTsKKyAgICAgICAgdW5zaWduZWQgdGlsZXNJbkNvaG9ydCA9
IDA7CisgICAgICAgIAorICAgICAgICAvLyBNb3ZlIHRpbGVzIG5ld2x5IG91dHNpZGUgdGhlIGNv
dmVyYWdlIHJlY3QgaW50byB0aGUgY29ob3J0IG1hcC4KKyAgICAgICAgZm9yIChUaWxlTWFwOjpp
dGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgICAgICBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7
CisgICAgICAgICAgICBUaWxlSW5kZXggdGlsZUluZGV4ID0gaXQtPmtleTsKKworICAgICAgICAg
ICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsKKyAgICAg
ICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSByZWN0Rm9yVGlsZUluZGV4KHRpbGVJbmRleCk7Cisg
ICAgICAgICAgICBpZiAodGlsZVJlY3QuaW50ZXJzZWN0cyhjb3ZlcmFnZVJlY3RJblRpbGVDb29y
ZHMpKSB7CisgICAgICAgICAgICAgICAgdGlsZUluZm8uY29ob3J0ID0gVmlzaWJsZVRpbGVDb2hv
cnQ7CisgICAgICAgICAgICAgICAgaWYgKHRpbGVJbmZvLmhhc1N0YWxlQ29udGVudCkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogc3RvcmUgYSBkaXJ0eSByZWdpb24gcGVyIGxheWVy
PworICAgICAgICAgICAgICAgICAgICBbdGlsZUxheWVyIHNldE5lZWRzRGlzcGxheV07CisgICAg
ICAgICAgICAgICAgICAgIHRpbGVJbmZvLmhhc1N0YWxlQ29udGVudCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQWRk
IHRvIHRoZSBjdXJyZW50Q29ob3J0IGlmIG5vdCBhbHJlYWR5IGluIG9uZS4KKyAgICAgICAgICAg
ICAgICBpZiAodGlsZUluZm8uY29ob3J0ID09IFZpc2libGVUaWxlQ29ob3J0KSB7CisgICAgICAg
ICAgICAgICAgICAgIHRpbGVJbmZvLmNvaG9ydCA9IGN1cnJDb2hvcnQ7CisgICAgICAgICAgICAg
ICAgICAgICsrdGlsZXNJbkNvaG9ydDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh0aWxlc0luQ29ob3J0KQorICAgICAg
ICAgICAgc3RhcnRlZE5ld0NvaG9ydChjdXJyQ29ob3J0KTsKIAotICAgIGZvciAoVGlsZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBUaWxlSW5kZXgmIHRpbGVJbmRleCA9IGl0LT5r
ZXk7CisgICAgICAgIHNjaGVkdWxlQ29ob3J0UmVtb3ZhbCgpOworICAgIH0KIAotICAgICAgICBX
ZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICBUaWxlSW5kZXgg
dG9wTGVmdDsKKyAgICBUaWxlSW5kZXggYm90dG9tUmlnaHQ7CisgICAgZ2V0VGlsZUluZGV4UmFu
Z2VGb3JSZWN0KGNvdmVyYWdlUmVjdEluVGlsZUNvb3JkcywgdG9wTGVmdCwgYm90dG9tUmlnaHQp
OwogCi0gICAgICAgIGlmICghcmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpLmludGVyc2VjdHMo
Y292ZXJhZ2VSZWN0SW5UaWxlQ29vcmRzKSB8fCB0aWxlU2l6ZUNoYW5nZWQpIHsKLSAgICAgICAg
ICAgIC8vIFJlbW92ZSB0aGlzIGxheWVyLgotICAgICAgICAgICAgW3RpbGVMYXllciByZW1vdmVG
cm9tU3VwZXJsYXllcl07Ci0gICAgICAgICAgICBbdGlsZUxheWVyIHNldFRpbGVDYWNoZTowXTsK
KyAgICBWZWN0b3I8RmxvYXRSZWN0PiBkaXJ0eVJlY3RzOworICAgIAorICAgIC8vIEVuc3VyZSBw
cmltYXJ5IHRpbGUgY292ZXJhZ2UgdGlsZXMuCisgICAgbV9wcmltYXJ5VGlsZUNvdmVyYWdlUmVj
dCA9IEludFJlY3QoKTsKKyAgICBpbnQgcHJpbWFyeUxheWVyQ291bnQgPSAwOworICAgIAorICAg
IGZvciAoaW50IHkgPSB0b3BMZWZ0LnkoKTsgeSA8PSBib3R0b21SaWdodC55KCk7ICsreSkgewor
ICAgICAgICBmb3IgKGludCB4ID0gdG9wTGVmdC54KCk7IHggPD0gYm90dG9tUmlnaHQueCgpOyAr
K3gpIHsKKyAgICAgICAgICAgIFRpbGVJbmRleCB0aWxlSW5kZXgoeCwgeSk7CiAKLSAgICAgICAg
ICAgIHRpbGVzVG9SZW1vdmUuYXBwZW5kKHRpbGVJbmRleCk7CisgICAgICAgICAgICBJbnRSZWN0
IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpOworICAgICAgICAgICAgbV9w
cmltYXJ5VGlsZUNvdmVyYWdlUmVjdC51bml0ZSh0aWxlUmVjdCk7CisKKyAgICAgICAgICAgIFRp
bGVJbmZvJiB0aWxlSW5mbyA9IG1fdGlsZXMuYWRkKHRpbGVJbmRleCwgVGlsZUluZm8oKSkuaXRl
cmF0b3ItPnZhbHVlOworICAgICAgICAgICAgaWYgKCF0aWxlSW5mby5sYXllcikgeworICAgICAg
ICAgICAgICAgIHRpbGVJbmZvLmxheWVyID0gY3JlYXRlVGlsZUxheWVyKHRpbGVSZWN0KTsKKyAg
ICAgICAgICAgICAgICBbbV90aWxlQ29udGFpbmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6dGls
ZUluZm8ubGF5ZXIuZ2V0KCldOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAvLyBXZSBhbHJlYWR5IGhhdmUgYSBsYXllciBmb3IgdGhpcyB0aWxlLiBFbnN1cmUgdGhhdCBp
dHMgc2l6ZSBpcyBjb3JyZWN0LgorICAgICAgICAgICAgICAgIENHU2l6ZSB0aWxlTGF5ZXJTaXpl
ID0gW3RpbGVJbmZvLmxheWVyLmdldCgpIGZyYW1lXS5zaXplOworICAgICAgICAgICAgICAgIGlm
ICh0aWxlTGF5ZXJTaXplLndpZHRoID49IHRpbGVSZWN0LndpZHRoKCkgJiYgdGlsZUxheWVyU2l6
ZS5oZWlnaHQgPj0gdGlsZVJlY3QuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXRGcmFtZTp0aWxl
UmVjdF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICsrcHJpbWFy
eUxheWVyQ291bnQ7CisKKyAgICAgICAgICAgIEZsb2F0UmVjdCBzY2FsZWRUaWxlUmVjdCA9IHRp
bGVSZWN0OworICAgICAgICAgICAgc2NhbGVkVGlsZVJlY3Quc2NhbGUoMSAvIG1fc2NhbGUpOwor
ICAgICAgICAgICAgZGlydHlSZWN0cy5hcHBlbmQoc2NhbGVkVGlsZVJlY3QpOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgLy8gRklYTUU6IEJlIG1vcmUgY2xldmVyIGFib3V0IHdoaWNoIHRpbGVz
IHRvIHJlbW92ZS4gV2UgbWlnaHQgbm90IHdhbnQgdG8gcmVtb3ZlIGFsbAotICAgIC8vIHRoZSB0
aWxlcyB0aGF0IGFyZSBvdXRzaWRlIHRoZSBjb3ZlcmFnZSByZWN0LiBXaGVuIHdlIGtub3cgdGhh
dCB3ZSdyZSBnb2luZyB0byBiZSBzY3JvbGxpbmcgdXAsCi0gICAgLy8gd2UgbWlnaHQgd2FudCB0
byByZW1vdmUgdGhlIG9uZXMgYmVsb3cgdGhlIGNvdmVyYWdlIHJlY3QgYnV0IGtlZXAgdGhlIG9u
ZXMgYWJvdmUuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlc1RvUmVtb3ZlLnNpemUo
KTsgKytpKQotICAgICAgICBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+YWRkTGF5ZXIobV90aWxl
cy50YWtlKHRpbGVzVG9SZW1vdmVbaV0pKTsKKyAgICBpZiAodmFsaWRhdGlvblBvbGljeSA9PSBQ
cnVuZVNlY29uZGFyeVRpbGVzKSB7CisgICAgICAgIHJlbW92ZUFsbFNlY29uZGFyeVRpbGVzKCk7
CisgICAgICAgIG1fY29ob3J0TGlzdC5jbGVhcigpOworICAgIH0KKyAgICAKKyAgICBpZiAobV90
aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyKQorICAgICAgICB1cGRhdGVUaWxlQ292ZXJhZ2VN
YXAoKTsKKworICAgIG1fdmlzaWJsZVJlY3RBdExhc3RSZXZhbGlkYXRlID0gbV92aXNpYmxlUmVj
dDsKKworICAgIGlmIChkaXJ0eVJlY3RzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IHBsYXRmb3JtTGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckRpZENyZWF0ZVRpbGVzKGRp
cnR5UmVjdHMpOworfQorCitUaWxlQ2FjaGU6OlRpbGVDb2hvcnQgVGlsZUNhY2hlOjpuZXh0VGls
ZUNvaG9ydCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NvaG9ydExpc3QuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gbV9jb2hvcnRMaXN0Lmxhc3QoKS5jb2hvcnQgKyAxOworCisgICAgcmV0dXJu
IDE7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzdGFydGVkTmV3Q29ob3J0KFRpbGVDb2hvcnQgY29o
b3J0KQoreworICAgIG1fY29ob3J0TGlzdC5hcHBlbmQoVGlsZUNvaG9ydEluZm8oY29ob3J0LCBt
b25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSkpOworfQorCitUaWxlQ2FjaGU6OlRpbGVDb2hv
cnQgVGlsZUNhY2hlOjpuZXdlc3RUaWxlQ29ob3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9j
b2hvcnRMaXN0LmlzRW1wdHkoKSA/IDAgOiBtX2NvaG9ydExpc3QubGFzdCgpLmNvaG9ydDsKK30K
KworVGlsZUNhY2hlOjpUaWxlQ29ob3J0IFRpbGVDYWNoZTo6b2xkZXN0VGlsZUNvaG9ydCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fY29ob3J0TGlzdC5pc0VtcHR5KCkgPyAwIDogbV9jb2hvcnRM
aXN0LmZpcnN0KCkuY29ob3J0OworfQorCit2b2lkIFRpbGVDYWNoZTo6c2NoZWR1bGVDb2hvcnRS
ZW1vdmFsKCkKK3sKKyAgICBjb25zdCBkb3VibGUgY29ob3J0UmVtb3ZhbFRpbWVyU2Vjb25kcyA9
IDE7CisgICAgCisgICAgLy8gU3RhcnQgdGhlIHRpbWVyLCBvciByZXNjaGVkdWxlIHRoZSB0aW1l
ciBmcm9tIG5vdyBpZiBpdCdzIGFscmVhZHkgYWN0aXZlLgorICAgIGlmICghbV9jb2hvcnRSZW1v
dmFsVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9jb2hvcnRSZW1vdmFsVGltZXIuc3RhcnRS
ZXBlYXRpbmcoY29ob3J0UmVtb3ZhbFRpbWVyU2Vjb25kcyk7Cit9CisKK3ZvaWQgVGlsZUNhY2hl
Ojpjb2hvcnRSZW1vdmFsVGltZXJGaXJlZChUaW1lcjxUaWxlQ2FjaGU+KikKK3sKKyAgICBpZiAo
bV9jb2hvcnRMaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBtX2NvaG9ydFJlbW92YWxUaW1lci5z
dG9wKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkb3VibGUgY29ob3J0TGlmZVRp
bWVTZWNvbmRzID0gMjsKKyAgICBkb3VibGUgdGltZVRocmVzaG9sZCA9IG1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nVGltZSgpIC0gY29ob3J0TGlmZVRpbWVTZWNvbmRzOworICAgIAorICAgIHdoaWxl
ICghbV9jb2hvcnRMaXN0LmlzRW1wdHkoKSAmJiBtX2NvaG9ydExpc3QuZmlyc3QoKS5jcmVhdGlv
blRpbWUgPCB0aW1lVGhyZXNob2xkKSB7CisgICAgICAgIFRpbGVDb2hvcnRJbmZvIGZpcnN0Q29o
b3J0ID0gbV9jb2hvcnRMaXN0LnRha2VGaXJzdCgpOworICAgICAgICByZW1vdmVUaWxlc0luQ29o
b3J0KGZpcnN0Q29ob3J0LmNvaG9ydCk7CisgICAgfQorCisgICAgaWYgKG1fdGlsZWRTY3JvbGxp
bmdJbmRpY2F0b3JMYXllcikKKyAgICAgICAgdXBkYXRlVGlsZUNvdmVyYWdlTWFwKCk7Cit9CisK
K3ZvaWQgVGlsZUNhY2hlOjplbnN1cmVUaWxlc0ZvclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6
OnBsYXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxheWVyKTsKKyAgICBpZiAoIXBsYXRmb3JtTGF5
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVjdCBzY2FsZWRSZWN0KHJlY3QpOwor
ICAgIHNjYWxlZFJlY3Quc2NhbGUobV9zY2FsZSk7CisgICAgSW50UmVjdCByZWN0SW5UaWxlQ29v
cmRzKGVuY2xvc2luZ0ludFJlY3Qoc2NhbGVkUmVjdCkpOworCisgICAgaWYgKG1fcHJpbWFyeVRp
bGVDb3ZlcmFnZVJlY3QuY29udGFpbnMocmVjdEluVGlsZUNvb3JkcykpCisgICAgICAgIHJldHVy
bjsKIAogICAgIFRpbGVJbmRleCB0b3BMZWZ0OwogICAgIFRpbGVJbmRleCBib3R0b21SaWdodDsK
LSAgICBnZXRUaWxlSW5kZXhSYW5nZUZvclJlY3QoY292ZXJhZ2VSZWN0SW5UaWxlQ29vcmRzLCB0
b3BMZWZ0LCBib3R0b21SaWdodCk7CisgICAgZ2V0VGlsZUluZGV4UmFuZ2VGb3JSZWN0KHJlY3RJ
blRpbGVDb29yZHMsIHRvcExlZnQsIGJvdHRvbVJpZ2h0KTsKIAogICAgIFZlY3RvcjxGbG9hdFJl
Y3Q+IGRpcnR5UmVjdHM7CisgICAgVGlsZUNvaG9ydCBjdXJyQ29ob3J0ID0gbmV4dFRpbGVDb2hv
cnQoKTsKKyAgICB1bnNpZ25lZCB0aWxlc0luQ29ob3J0ID0gMDsKIAogICAgIGZvciAoaW50IHkg
PSB0b3BMZWZ0LnkoKTsgeSA8PSBib3R0b21SaWdodC55KCk7ICsreSkgewogICAgICAgICBmb3Ig
KGludCB4ID0gdG9wTGVmdC54KCk7IHggPD0gYm90dG9tUmlnaHQueCgpOyArK3gpIHsKICAgICAg
ICAgICAgIFRpbGVJbmRleCB0aWxlSW5kZXgoeCwgeSk7CiAKICAgICAgICAgICAgIEludFJlY3Qg
dGlsZVJlY3QgPSByZWN0Rm9yVGlsZUluZGV4KHRpbGVJbmRleCk7Ci0gICAgICAgICAgICBSZXRh
aW5QdHI8V2ViVGlsZUxheWVyPiYgdGlsZUxheWVyID0gbV90aWxlcy5hZGQodGlsZUluZGV4LCAw
KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgICAgICBpZiAoIXRpbGVMYXllcikgewotICAgICAg
ICAgICAgICAgIHRpbGVMYXllciA9IGNyZWF0ZVRpbGVMYXllcih0aWxlUmVjdCk7Ci0gICAgICAg
ICAgICAgICAgW21fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpIGFkZFN1YmxheWVyOnRpbGVMYXll
ci5nZXQoKV07CisgICAgICAgICAgICBUaWxlSW5mbyYgdGlsZUluZm8gPSBtX3RpbGVzLmFkZCh0
aWxlSW5kZXgsIFRpbGVJbmZvKCkpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgIGlmICgh
dGlsZUluZm8ubGF5ZXIpIHsKKyAgICAgICAgICAgICAgICB0aWxlSW5mby5sYXllciA9IGNyZWF0
ZVRpbGVMYXllcih0aWxlUmVjdCk7CisgICAgICAgICAgICAgICAgW21fdGlsZUNvbnRhaW5lckxh
eWVyLmdldCgpIGFkZFN1YmxheWVyOnRpbGVJbmZvLmxheWVyLmdldCgpXTsKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGEgbGF5ZXIgZm9y
IHRoaXMgdGlsZS4gRW5zdXJlIHRoYXQgaXRzIHNpemUgaXMgY29ycmVjdC4KLSAgICAgICAgICAg
ICAgICBDR1NpemUgdGlsZUxheWVyU2l6ZSA9IFt0aWxlTGF5ZXIuZ2V0KCkgZnJhbWVdLnNpemU7
CisgICAgICAgICAgICAgICAgQ0dTaXplIHRpbGVMYXllclNpemUgPSBbdGlsZUluZm8ubGF5ZXIu
Z2V0KCkgZnJhbWVdLnNpemU7CiAgICAgICAgICAgICAgICAgaWYgKHRpbGVMYXllclNpemUud2lk
dGggPj0gdGlsZVJlY3Qud2lkdGgoKSAmJiB0aWxlTGF5ZXJTaXplLmhlaWdodCA+PSB0aWxlUmVj
dC5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgW3RpbGVMYXllci5nZXQoKSBzZXRGcmFtZTp0aWxlUmVjdF07CisgICAgICAgICAgICAgICAg
W3RpbGVJbmZvLmxheWVyLmdldCgpIHNldEZyYW1lOnRpbGVSZWN0XTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCF0aWxlUmVjdC5pbnRlcnNlY3RzKG1fcHJpbWFyeVRpbGVDb3Zl
cmFnZVJlY3QpKSB7CisgICAgICAgICAgICAgICAgdGlsZUluZm8uY29ob3J0ID0gY3VyckNvaG9y
dDsKKyAgICAgICAgICAgICAgICArK3RpbGVzSW5Db2hvcnQ7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIEZsb2F0UmVjdCBzY2FsZWRUaWxlUmVjdCA9IHRpbGVSZWN0OwpAQCAtNDg5LDIw
ICs3NDQsMTUgQEAgdm9pZCBUaWxlQ2FjaGU6OnJldmFsaWRhdGVUaWxlcygpCiAgICAgICAgICAg
ICBkaXJ0eVJlY3RzLmFwcGVuZChzY2FsZWRUaWxlUmVjdCk7CiAgICAgICAgIH0KICAgICB9Ci0K
LSAgICBtX3RpbGVDb3ZlcmFnZVJlY3QgPSBJbnRSZWN0KCk7Ci0gICAgZm9yIChUaWxlTWFwOjpp
dGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4ID0gaXQtPmtl
eTsKLQotICAgICAgICBtX3RpbGVDb3ZlcmFnZVJlY3QudW5pdGUocmVjdEZvclRpbGVJbmRleCh0
aWxlSW5kZXgpKTsKLSAgICB9CisgICAgCisgICAgaWYgKHRpbGVzSW5Db2hvcnQpCisgICAgICAg
IHN0YXJ0ZWROZXdDb2hvcnQoY3VyckNvaG9ydCk7CiAKICAgICBpZiAobV90aWxlZFNjcm9sbGlu
Z0luZGljYXRvckxheWVyKQogICAgICAgICB1cGRhdGVUaWxlQ292ZXJhZ2VNYXAoKTsKIAotICAg
IGlmIChkaXJ0eVJlY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHBsYXRmb3Jt
TGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckRpZENyZWF0ZVRpbGVzKGRpcnR5UmVjdHMp
OworICAgIGlmICghZGlydHlSZWN0cy5pc0VtcHR5KCkpCisgICAgICAgIHBsYXRmb3JtTGF5ZXIt
Pm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckRpZENyZWF0ZVRpbGVzKGRpcnR5UmVjdHMpOwogfQog
CiB2b2lkIFRpbGVDYWNoZTo6dXBkYXRlVGlsZUNvdmVyYWdlTWFwKCkKQEAgLTU1Myw3ICs4MDMs
NyBAQCBJbnRSZWN0IFRpbGVDYWNoZTo6dGlsZUdyaWRFeHRlbnQoKSBjb25zdAogewogICAgIFRp
bGVJbmRleCB0b3BMZWZ0OwogICAgIFRpbGVJbmRleCBib3R0b21SaWdodDsKLSAgICBnZXRUaWxl
SW5kZXhSYW5nZUZvclJlY3QobV90aWxlQ292ZXJhZ2VSZWN0LCB0b3BMZWZ0LCBib3R0b21SaWdo
dCk7CisgICAgZ2V0VGlsZUluZGV4UmFuZ2VGb3JSZWN0KG1fcHJpbWFyeVRpbGVDb3ZlcmFnZVJl
Y3QsIHRvcExlZnQsIGJvdHRvbVJpZ2h0KTsKIAogICAgIC8vIFJldHVybiBpbmRleCBvZiB0b3As
IGxlZnQgdGlsZSBhbmQgdGhlIG51bWJlciBvZiB0aWxlcyBhY3Jvc3MgYW5kIGRvd24uCiAgICAg
cmV0dXJuIEludFJlY3QodG9wTGVmdC54KCksIHRvcExlZnQueSgpLCBib3R0b21SaWdodC54KCkg
LSB0b3BMZWZ0LngoKSArIDEsIGJvdHRvbVJpZ2h0LnkoKSAtIHRvcExlZnQueSgpICsgMSk7CkBA
IC01NjIsNyArODEyLDcgQEAgSW50UmVjdCBUaWxlQ2FjaGU6OnRpbGVHcmlkRXh0ZW50KCkgY29u
c3QKIC8vIFJldHVybiB0aGUgcmVjdCBpbiBsYXllciBjb29yZHMsIG5vdCB0aWxlIGNvb3Jkcy4K
IEludFJlY3QgVGlsZUNhY2hlOjp0aWxlQ292ZXJhZ2VSZWN0KCkgY29uc3QKIHsKLSAgICBJbnRS
ZWN0IGNvdmVyYWdlUmVjdEluTGF5ZXJDb29yZHMobV90aWxlQ292ZXJhZ2VSZWN0KTsKKyAgICBJ
bnRSZWN0IGNvdmVyYWdlUmVjdEluTGF5ZXJDb29yZHMobV9wcmltYXJ5VGlsZUNvdmVyYWdlUmVj
dCk7CiAgICAgY292ZXJhZ2VSZWN0SW5MYXllckNvb3Jkcy5zY2FsZSgxIC8gbV9zY2FsZSk7CiAg
ICAgcmV0dXJuIGNvdmVyYWdlUmVjdEluTGF5ZXJDb29yZHM7CiB9CkBAIC01OTQsNyArODQ0LDcg
QEAgdm9pZCBUaWxlQ2FjaGU6OnNldFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uKFNjcm9sbGluZ01v
ZGVJbmRpY2F0aW9uIHNjcm9sbGluZ01vZGUKIAogV2ViVGlsZUxheWVyKiBUaWxlQ2FjaGU6OnRp
bGVMYXllckF0SW5kZXgoY29uc3QgVGlsZUluZGV4JiBpbmRleCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV90aWxlcy5nZXQoaW5kZXgpLmdldCgpOworICAgIHJldHVybiBtX3RpbGVzLmdldChpbmRl
eCkubGF5ZXIuZ2V0KCk7CiB9CiAKIFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+IFRpbGVDYWNoZTo6
Y3JlYXRlVGlsZUxheWVyKGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQpAQCAtNjgxLDEyICs5MzEs
MTEgQEAgdm9pZCBUaWxlQ2FjaGU6OmRyYXdSZXBhaW50Q291bnRlcihXZWJUaWxlTGF5ZXIgKmxh
eWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCkKIAogdm9pZCBUaWxlQ2FjaGU6OmRyYXdUaWxlTWFw
Q29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUmVjdCBsYXllckJvdW5kcykKIHsKLSAg
ICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMC41LCAwLjUsIDAuNSwgMSk7Cisg
ICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDAuMywgMC4zLCAwLjMsIDEpOwog
ICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIGxheWVyQm91bmRzKTsKIAogICAgIENHRmxv
YXQgc2NhbGVGYWN0b3IgPSBsYXllckJvdW5kcy5zaXplLndpZHRoIC8gYm91bmRzKCkud2lkdGgo
KTsKICAgICAKLSAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMSwgMSwg
MSk7CiAgICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tlQ29sb3IoY29udGV4dCwgMCwgMCwgMCwgMSk7
CiAKICAgICBDR0Zsb2F0IGNvbnRleHRTY2FsZSA9IHNjYWxlRmFjdG9yIC8gc2NhbGUoKTsKQEAg
LTY5NSw3ICs5NDQsMjcgQEAgdm9pZCBUaWxlQ2FjaGU6OmRyYXdUaWxlTWFwQ29udGVudHMoQ0dD
b250ZXh0UmVmIGNvbnRleHQsIENHUmVjdCBsYXllckJvdW5kcykKICAgICBDR0NvbnRleHRTZXRM
aW5lV2lkdGgoY29udGV4dCwgMC41IC8gY29udGV4dFNjYWxlKTsKICAgICAKICAgICBmb3IgKFRp
bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVz
LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5
ZXIgPSBpdC0+dmFsdWUuZ2V0KCk7CisgICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9
IGl0LT52YWx1ZTsKKyAgICAgICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5ZXIgPSB0aWxlSW5mby5s
YXllci5nZXQoKTsKKyAgICAgICAgCisgICAgICAgIENHRmxvYXQgcmVkID0gMTsKKyAgICAgICAg
Q0dGbG9hdCBncmVlbiA9IDE7CisgICAgICAgIENHRmxvYXQgYmx1ZSA9IDE7CisgICAgICAgIGlm
ICh0aWxlSW5mby5oYXNTdGFsZUNvbnRlbnQpIHsKKyAgICAgICAgICAgIHJlZCA9IDAuMjU7Cisg
ICAgICAgICAgICBncmVlbiA9IDAuMTI1OworICAgICAgICAgICAgYmx1ZSA9IDA7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFRpbGVDb2hvcnQgbmV3ZXN0Q29ob3J0ID0gbmV3ZXN0VGls
ZUNvaG9ydCgpOworICAgICAgICBUaWxlQ29ob3J0IG9sZGVzdENvaG9ydCA9IG9sZGVzdFRpbGVD
b2hvcnQoKTsKKyAgICAgICAgCisgICAgICAgIGlmICh0aWxlSW5mby5jb2hvcnQgIT0gVmlzaWJs
ZVRpbGVDb2hvcnQgJiYgbmV3ZXN0Q29ob3J0ID4gb2xkZXN0Q29ob3J0KSB7CisgICAgICAgICAg
ICBmbG9hdCBjb2hvcnRQcm9wb3J0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChuZXdlc3RDb2hv
cnQgLSB0aWxlSW5mby5jb2hvcnQpKSAvIChuZXdlc3RDb2hvcnQgLSBvbGRlc3RDb2hvcnQpOwor
ICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIHJlZCwgZ3JlZW4s
IGJsdWUsIDEgLSBjb2hvcnRQcm9wb3J0aW9uKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgcmVkLCBncmVlbiwgYmx1ZSwgMSk7
CisKICAgICAgICAgQ0dSZWN0IGZyYW1lID0gW3RpbGVMYXllciBmcmFtZV07CiAgICAgICAgIENH
Q29udGV4dEZpbGxSZWN0KGNvbnRleHQsIGZyYW1lKTsKICAgICAgICAgQ0dDb250ZXh0U3Ryb2tl
UmVjdChjb250ZXh0LCBmcmFtZSk7Cg==
</data>
<flag name="review"
          id="195270"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>