<?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>123043</bug_id>
          
          <creation_ts>2013-10-18 16:02:46 -0700</creation_ts>
          <short_desc>Remote Layer Tree: Double-buffering and minimization of repaints</short_desc>
          <delta_ts>2013-10-18 17:49:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>941368</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-18 16:02:46 -0700</bug_when>
    <thetext>We should not repaint the entirety of a layer every time it is dirtied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941371</commentid>
    <comment_count>1</comment_count>
      <attachid>214611</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-18 16:19:40 -0700</bug_when>
    <thetext>Created attachment 214611
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941374</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-18 16:21:41 -0700</bug_when>
    <thetext>Attachment 214611 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/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebLayer.h&apos;, u&apos;Source/WebCore/platform/graphics/mac/WebLayer.mm&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerBackingStore.h&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerBackingStore.mm&apos;]&quot; exit_code: 1
Source/WebCore/platform/graphics/mac/WebLayer.h:47:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 9 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>941385</commentid>
    <comment_count>3</comment_count>
      <attachid>214611</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-10-18 16:35:31 -0700</bug_when>
    <thetext>Comment on attachment 214611
patch

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

&gt; Source/WebCore/platform/graphics/mac/WebLayer.mm:64
&gt; +    bool isTiledLayer = [layer isKindOfClass:[CATiledLayer class]];

Move this down.

&gt; Source/WebCore/platform/graphics/mac/WebLayer.mm:117
&gt; +    // If we have no dirty rects, repaint the whole layer.

Comment is the reverse of the immediately following statement which is confusing.

&gt; Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerBackingStore.mm:124
&gt; +        Region cleanRegion(layerBounds);
&gt; +        cleanRegion.subtract(m_dirtyRegion);
&gt; +
&gt; +        RetainPtr&lt;CGImageRef&gt; frontImage = m_frontBuffer-&gt;makeCGImage();
&gt; +
&gt; +        for (const auto&amp; rect : cleanRegion.rects())
&gt; +            context-&gt;drawNativeImage(frontImage.get(), m_frontBuffer-&gt;size(), ColorSpaceDeviceRGB, rect, rect);

Seems like this could be much slower than copying over the entire layer in many cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941399</commentid>
    <comment_count>4</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-18 17:00:52 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 214611 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=214611&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/mac/WebLayer.mm:64
&gt; &gt; +    bool isTiledLayer = [layer isKindOfClass:[CATiledLayer class]];
&gt; 
&gt; Move this down.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/mac/WebLayer.mm:117
&gt; &gt; +    // If we have no dirty rects, repaint the whole layer.
&gt; 
&gt; Comment is the reverse of the immediately following statement which is confusing.

OK, I&apos;ll flip it around.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerBackingStore.mm:124
&gt; &gt; +        Region cleanRegion(layerBounds);
&gt; &gt; +        cleanRegion.subtract(m_dirtyRegion);
&gt; &gt; +
&gt; &gt; +        RetainPtr&lt;CGImageRef&gt; frontImage = m_frontBuffer-&gt;makeCGImage();
&gt; &gt; +
&gt; &gt; +        for (const auto&amp; rect : cleanRegion.rects())
&gt; &gt; +            context-&gt;drawNativeImage(frontImage.get(), m_frontBuffer-&gt;size(), ColorSpaceDeviceRGB, rect, rect);
&gt; 
&gt; Seems like this could be much slower than copying over the entire layer in many cases.

Yeah. I meant to use the five-or-less rect set, not the raw set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941406</commentid>
    <comment_count>5</comment_count>
      <attachid>214622</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-18 17:36:03 -0700</bug_when>
    <thetext>Created attachment 214622
revised</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941409</commentid>
    <comment_count>6</comment_count>
      <attachid>214622</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-10-18 17:44:41 -0700</bug_when>
    <thetext>Comment on attachment 214622
revised

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

&gt; Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerBackingStore.mm:99
&gt; +        setNeedsDisplay();

It&apos;s odd to call setNeedsDisplay() inside of display().

&gt; Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerBackingStore.mm:108
&gt; +        setNeedsDisplay(indicatorRect);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941410</commentid>
    <comment_count>7</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-18 17:49:39 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/157658</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214611</attachid>
            <date>2013-10-18 16:19:40 -0700</date>
            <delta_ts>2013-10-18 17:36:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>repaint.diff</filename>
            <type>text/plain</type>
            <size>18818</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0MmQ5ZDU3Li43MGM4ODcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYg
QEAKKzIwMTMtMTAtMTggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVtb3RlIExheWVyIFRyZWU6IERvdWJsZS1idWZmZXJpbmcgYW5kIG1pbmltaXph
dGlvbiBvZiByZXBhaW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTIzMDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBub3QgeWV0IHRlc3RhYmxlLgorCisgICAgICAgICogV2Vi
Q29yZS5leHAuaW46CisgICAgICAgIEV4cG9ydCBvbmUgdmVyc2lvbiBvZiBkcmF3TGF5ZXJDb250
ZW50cyBhbmQgUmVnaW9uOjpjb250YWlucy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgRXhwb3NlIFdlYkxheWVyLmggYXMgYSBwcml2YXRl
IGhlYWRlci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5oOgor
ICAgICAgICBDbGVhbiB1cCB0aGlzIGhlYWRlciwgYW5kIGFkZCBhIG5ldyBkcmF3TGF5ZXJDb250
ZW50cyB0aGF0IGNhbiBvcGVyYXRlIHdpdGhvdXQgYSBDQUxheWVyLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0xh
eWVyQ29udGVudHMpOgorICAgICAgICBTcGxpdCBkcmF3TGF5ZXJDb250ZW50cyBpbnRvIG9uZSBt
ZXRob2QgdGhhdCBhY3F1aXJlcyBwcm9wZXJ0aWVzIENBTGF5ZXIsCisgICAgICAgIGFuZCBvbmUg
dGhhdCBqdXN0IGRvZXMgdGhlIHBhaW50aW5nLgorCiAyMDEzLTEwLTE4ICBDaGFuZ1Nlb2sgT2gg
IDxjaGFuZ3Nlb2sub2hAY29sbGFib3JhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxk
IGZpeCBmb3IgLS1uby1zdmcgb3B0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCBjOTAwZTlh
Li4wNzQ3OGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtNjc2LDYgKzY3Niw3IEBAIF9fWk43
V2ViQ29yZTE3U1FMaXRlVHJhbnNhY3Rpb25DMUVSTlNfMTRTUUxpdGVEYXRhYmFzZUViCiBfX1pO
N1dlYkNvcmUxN1NRTGl0ZVRyYW5zYWN0aW9uRDFFdgogX19aTjdXZWJDb3JlMTdTdWJyZXNvdXJj
ZUxvYWRlcjZjcmVhdGVFUE5TXzVGcmFtZUVQTlNfMTRDYWNoZWRSZXNvdXJjZUVSS05TXzE1UmVz
b3VyY2VSZXF1ZXN0RVJLTlNfMjFSZXNvdXJjZUxvYWRlck9wdGlvbnNFCiBfX1pON1dlYkNvcmUx
N2NhY2hlRE9NU3RydWN0dXJlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOM0pTQzlTdHJ1Y3R1
cmVFUEtOUzJfOUNsYXNzSW5mb0UKK19fWk43V2ViQ29yZTE3ZHJhd0xheWVyQ29udGVudHNFUDlD
R0NvbnRleHRQTlNfMTVQbGF0Zm9ybUNBTGF5ZXJFTlNfOUZsb2F0UmVjdEVOM1dURjZWZWN0b3JJ
UzRfTG01RU5TNV8xNUNyYXNoT25PdmVyZmxvd0VFRWIKIF9fWk43V2ViQ29yZTE3bGFuZ3VhZ2VE
aWRDaGFuZ2VFdgogX19aTjdXZWJDb3JlMTdvcGVuVGVtcG9yYXJ5RmlsZUVSS04zV1RGNlN0cmlu
Z0VSaQogX19aTjdXZWJDb3JlMTdzZXRDb29raWVzRnJvbURPTUVSS05TXzIxTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uRVJLTlNfM1VSTEVTNV9SS04zV1RGNlN0cmluZ0UKQEAgLTE3MDgsNiArMTcwOSw3
IEBAIF9fWk5LN1dlYkNvcmU2RWRpdG9yOGNhblBhc3RlRXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9y
OWNhbkRlbGV0ZUV2CiBfX1pOSzdXZWJDb3JlNkxlbmd0aDIyZGVjcmVtZW50Q2FsY3VsYXRlZFJl
ZkV2CiBfX1pOSzdXZWJDb3JlNlJlZ2lvbjVyZWN0c0V2CitfX1pOSzdXZWJDb3JlNlJlZ2lvbjhj
b250YWluc0VSS1MwXwogX19aTks3V2ViQ29yZTZXaWRnZXQxNHBsYXRmb3JtV2lkZ2V0RXYKIF9f
Wk5LN1dlYkNvcmU2V2lkZ2V0MjNjb252ZXJ0VG9Db250YWluaW5nVmlld0VSS05TXzdJbnRSZWN0
RQogX19aTks3V2ViQ29yZTZXaWRnZXQyM2NvbnZlcnRUb0NvbnRhaW5pbmdWaWV3RVJLTlNfOElu
dFBvaW50RQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGNiNDYyZWMuLjhiYzIxNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQ2MSw3ICs0NjEsNyBAQAogCQkw
RkNGMzMyQzBGMkI5QTI1MDA0QjY3OTUgLyogV2ViVGlsZWRMYXllci5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0YzMzI4MEYyQjlBMjUwMDRCNjc5
NSAvKiBXZWJUaWxlZExheWVyLm1tICovOyB9OwogCQkwRkNGMzMyRDBGMkI5QTI1MDA0QjY3OTUg
LyogV2ViVGlsZWRMYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZDRjMzMjkwRjJCOUEyNTAwNEI2Nzk1IC8qIFdlYlRpbGVkTGF5ZXIuaCAqLzsg
fTsKIAkJMEZDRjMzMkUwRjJCOUEyNTAwNEI2Nzk1IC8qIFdlYkxheWVyLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRjMzMkEwRjJCOUEyNTAwNEI2
Nzk1IC8qIFdlYkxheWVyLm1tICovOyB9OwotCQkwRkNGMzMyRjBGMkI5QTI1MDA0QjY3OTUgLyog
V2ViTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQ0YzMzJCMEYyQjlBMjUwMDRCNjc5NSAvKiBXZWJMYXllci5oICovOyB9OworCQkwRkNGMzMy
RjBGMkI5QTI1MDA0QjY3OTUgLyogV2ViTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0YzMzJCMEYyQjlBMjUwMDRCNjc5NSAvKiBXZWJMYXll
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
RDMwODBFMTE3Q0Y3RTcwMEE3OTFGNyAvKiBSZW5kZXJGcmFtZUJhc2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMzA4MEMxMTdDRjdFNzAwQTc5
MUY3IC8qIFJlbmRlckZyYW1lQmFzZS5jcHAgKi87IH07CiAJCTBGRDMwODBGMTE3Q0Y3RTcwMEE3
OTFGNyAvKiBSZW5kZXJGcmFtZUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDMwODBEMTE3Q0Y3RTcwMEE3OTFGNyAvKiBSZW5kZXJGcmFtZUJh
c2UuaCAqLzsgfTsKIAkJMEZEMzA4RDUxMTdEMTY4NTAwQTc5MUY3IC8qIFJlbmRlcklGcmFtZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzMDhE
MzExN0QxNjg0MDBBNzkxRjcgLyogUmVuZGVySUZyYW1lLmNwcCAqLzsgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLmgKaW5kZXggNjU1NjljZS4u
ZWJkMWVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L1dlYkxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dl
YkxheWVyLmgKQEAgLTI5LDIwICsyOSwyMyBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKIAogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0Zsb2F0UmVjdC5oPgorI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0gICAgY2xhc3MgR3JhcGhpY3NMYXllcjsKLSAgICBjbGFzcyBQbGF0Zm9ybUNBTGF5
ZXI7Ci0gICAgY2xhc3MgUGxhdGZvcm1DQUxheWVyQ2xpZW50OwotfQorY29uc3QgdW5zaWduZWQg
d2ViTGF5ZXJNYXhSZWN0c1RvUGFpbnQgPSA1OwogCi1AaW50ZXJmYWNlIFdlYkxheWVyIDogQ0FM
YXllciAKLXsKLX0KK0BpbnRlcmZhY2UgV2ViTGF5ZXIgOiBDQUxheWVyCiBAZW5kCiAKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzTGF5ZXI7CitjbGFzcyBQbGF0Zm9ybUNBTGF5
ZXI7CitjbGFzcyBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQ7CisKIC8vIEZ1bmN0aW9ucyBhbGxvd3Mg
dXMgdG8gc2hhcmUgaW1wbGVtZW50YXRpb24gYWNyb3NzIFdlYlRpbGVkTGF5ZXIgYW5kIFdlYkxh
eWVyCiB2b2lkIGRyYXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiwgQ0FMYXllciAqLCBXZWJD
b3JlOjpQbGF0Zm9ybUNBTGF5ZXIqKTsKK3ZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0
UmVmIGNvbnRleHQsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXllciwgV2Vi
Q29yZTo6RmxvYXRSZWN0IGxheWVyQm91bmRzLCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0LCB3
ZWJMYXllck1heFJlY3RzVG9QYWludD4gZGlydHlSZWN0cywgYm9vbCBpc1RpbGVkTGF5ZXIpOwor
fQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KaW5kZXggMDY1YThm
Ny4uZjI2NGVmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1dlYkxheWVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9XZWJMYXllci5tbQpAQCAtNDMsMjAgKzQzLDQ3IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCi1AaW1wbGVtZW50YXRpb24gV2ViTGF5ZXIKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgQ0FMYXllciAqbGF5
ZXIsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXllcikKIHsKKyAgICBDR1Jl
Y3QgbGF5ZXJCb3VuZHMgPSBbbGF5ZXIgYm91bmRzXTsKKworICAgIF9fYmxvY2sgZG91YmxlIHRv
dGFsUmVjdEFyZWEgPSAwOworICAgIF9fYmxvY2sgdW5zaWduZWQgcmVjdENvdW50ID0gMDsKKyAg
ICBfX2Jsb2NrIFZlY3RvcjxGbG9hdFJlY3QsIHdlYkxheWVyTWF4UmVjdHNUb1BhaW50PiBkaXJ0
eVJlY3RzOworCisgICAgd2tDQUxheWVyRW51bWVyYXRlUmVjdHNCZWluZ0RyYXduV2l0aEJsb2Nr
KGxheWVyLCBjb250ZXh0LCBeKENHUmVjdCByZWN0KSB7CisgICAgICAgIGlmICgrK3JlY3RDb3Vu
dCA+IHdlYkxheWVyTWF4UmVjdHNUb1BhaW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHRvdGFsUmVjdEFyZWEgKz0gcmVjdC5zaXplLndpZHRoICogcmVjdC5zaXplLmhlaWdodDsK
KyAgICAgICAgZGlydHlSZWN0cy5hcHBlbmQocmVjdCk7CisgICAgfSk7CisKKyAgICBib29sIGlz
VGlsZWRMYXllciA9IFtsYXllciBpc0tpbmRPZkNsYXNzOltDQVRpbGVkTGF5ZXIgY2xhc3NdXTsK
KworICAgIGNvbnN0IGZsb2F0IHdhc3RlZFNwYWNlVGhyZXNob2xkID0gMC43NWY7CisgICAgRmxv
YXRSZWN0IGNsaXBCb3VuZHMgPSBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCk7
CisgICAgZG91YmxlIGNsaXBBcmVhID0gY2xpcEJvdW5kcy53aWR0aCgpICogY2xpcEJvdW5kcy5o
ZWlnaHQoKTsKKworICAgIGlmIChyZWN0Q291bnQgPCB3ZWJMYXllck1heFJlY3RzVG9QYWludCAm
JiB0b3RhbFJlY3RBcmVhIDwgY2xpcEFyZWEgKiB3YXN0ZWRTcGFjZVRocmVzaG9sZCkKKyAgICAg
ICAgZGlydHlSZWN0cy5jbGVhcigpOworCisgICAgZHJhd0xheWVyQ29udGVudHMoY29udGV4dCwg
cGxhdGZvcm1MYXllciwgbGF5ZXJCb3VuZHMsIGRpcnR5UmVjdHMsIGlzVGlsZWRMYXllcik7Cit9
CisKK3ZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFdlYkNvcmU6
OlBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXllciwgRmxvYXRSZWN0IGxheWVyQm91bmRzLCBW
ZWN0b3I8RmxvYXRSZWN0LCB3ZWJMYXllck1heFJlY3RzVG9QYWludD4gZGlydHlSZWN0cywgYm9v
bCBpc1RpbGVkTGF5ZXIpCit7CiAgICAgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBs
YXllckNvbnRlbnRzID0gcGxhdGZvcm1MYXllci0+b3duZXIoKTsKICAgICBpZiAoIWxheWVyQ29u
dGVudHMpCiAgICAgICAgIHJldHVybjsKIAogICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4
dCk7CiAKLSAgICBDR1JlY3QgbGF5ZXJCb3VuZHMgPSBbbGF5ZXIgYm91bmRzXTsKICAgICBpZiAo
bGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRhdGlvbigpID09IFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNCb3R0b21VcCkgewog
ICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7Ci0gICAgICAgIENHQ29u
dGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpOwor
ICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLWxheWVyQm91bmRzLmhl
aWdodCgpKTsKICAgICB9CiAKICAgICBbTlNHcmFwaGljc0NvbnRleHQgc2F2ZUdyYXBoaWNzU3Rh
dGVdOwpAQCAtODcsMjQgKzExNCw5IEBAIHZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0
UmVmIGNvbnRleHQsIENBTGF5ZXIgKmxheWVyLCBXZWJDb3JlOjpQbGF0Zm9ybUNBCiAjZW5kaWYK
ICAgICBUaGVtZU1hYzo6c2V0Rm9jdXNSaW5nQ2xpcFJlY3QoZm9jdXNSaW5nQ2xpcFJlY3QpOwog
Ci0gICAgY29uc3QgZmxvYXQgd2FzdGVkU3BhY2VUaHJlc2hvbGQgPSAwLjc1ZjsKLSAgICBjb25z
dCB1bnNpZ25lZCBtYXhSZWN0c1RvUGFpbnQgPSA1OwotCi0gICAgZG91YmxlIGNsaXBBcmVhID0g
Y2xpcEJvdW5kcy53aWR0aCgpICogY2xpcEJvdW5kcy5oZWlnaHQoKTsKLSAgICBfX2Jsb2NrIGRv
dWJsZSB0b3RhbFJlY3RBcmVhID0gMDsKLSAgICBfX2Jsb2NrIHVuc2lnbmVkIHJlY3RDb3VudCA9
IDA7Ci0gICAgX19ibG9jayBWZWN0b3I8RmxvYXRSZWN0LCBtYXhSZWN0c1RvUGFpbnQ+IGRpcnR5
UmVjdHM7Ci0gICAgCi0gICAgd2tDQUxheWVyRW51bWVyYXRlUmVjdHNCZWluZ0RyYXduV2l0aEJs
b2NrKGxheWVyLCBjb250ZXh0LCBeKENHUmVjdCByZWN0KSB7Ci0gICAgICAgIGlmICgrK3JlY3RD
b3VudCA+IG1heFJlY3RzVG9QYWludCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0
b3RhbFJlY3RBcmVhICs9IHJlY3Quc2l6ZS53aWR0aCAqIHJlY3Quc2l6ZS5oZWlnaHQ7Ci0gICAg
ICAgIGRpcnR5UmVjdHMuYXBwZW5kKHJlY3QpOwotICAgIH0pOwotCi0gICAgaWYgKHJlY3RDb3Vu
dCA8IG1heFJlY3RzVG9QYWludCAmJiB0b3RhbFJlY3RBcmVhIDwgY2xpcEFyZWEgKiB3YXN0ZWRT
cGFjZVRocmVzaG9sZCkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVjdENv
dW50OyArK2kpIHsKKyAgICAvLyBJZiB3ZSBoYXZlIG5vIGRpcnR5IHJlY3RzLCByZXBhaW50IHRo
ZSB3aG9sZSBsYXllci4KKyAgICBpZiAoZGlydHlSZWN0cy5zaXplKCkpIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRpcnR5UmVjdHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UmVjdCYgY3VycmVudFJlY3QgPSBkaXJ0eVJlY3RzW2ldOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
Z3JhcGhpY3NDb250ZXh0KTsKQEAgLTEyOCwxMyArMTQwLDExIEBAIHZvaWQgZHJhd0xheWVyQ29u
dGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENBTGF5ZXIgKmxheWVyLCBXZWJDb3JlOjpQbGF0
Zm9ybUNBCiAKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogCi0gICAgLy8g
QWx3YXlzIHVwZGF0ZSB0aGUgcmVwYWluIGNvdW50IHNvIHRoYXQgaXQncyBhY2N1cmF0ZSBldmVu
IGlmIHRoZSBjb3VudCBpdHNlbGYgaXMgbm90IHNob3duLiBUaGlzIHdpbGwgYmUgdXNlZnVsCisg
ICAgLy8gQWx3YXlzIHVwZGF0ZSB0aGUgcmVwYWludCBjb3VudCBzbyB0aGF0IGl0J3MgYWNjdXJh
dGUgZXZlbiBpZiB0aGUgY291bnQgaXRzZWxmIGlzIG5vdCBzaG93bi4gVGhpcyB3aWxsIGJlIHVz
ZWZ1bAogICAgIC8vIGZvciB0aGUgV2ViIEluc3BlY3RvciBmZWVkaW5nIHRoaXMgaW5mb3JtYXRp
b24gdGhyb3VnaCB0aGUgTGF5ZXJUcmVlQWdlbnQuIAogICAgIGludCByZXBhaW50Q291bnQgPSBs
YXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQoKTsKIAog
ICAgIGlmICghcGxhdGZvcm1MYXllci0+dXNlc1RpbGVkQmFja2luZ0xheWVyKCkgJiYgbGF5ZXJD
b250ZW50cyAmJiBsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50
ZXIocGxhdGZvcm1MYXllcikpIHsKLSAgICAgICAgYm9vbCBpc1RpbGVkTGF5ZXIgPSBbbGF5ZXIg
aXNLaW5kT2ZDbGFzczpbQ0FUaWxlZExheWVyIGNsYXNzXV07Ci0KICAgICAgICAgY2hhciB0ZXh0
WzE2XTsgLy8gdGhhdCdzIGEgbG90IG9mIHJlcGFpbnRzCiAgICAgICAgIHNucHJpbnRmKHRleHQs
IHNpemVvZih0ZXh0KSwgIiVkIiwgcmVwYWludENvdW50KTsKIApAQCAtMTcwLDYgKzE4MCw5IEBA
IHZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENBTGF5ZXIgKmxh
eWVyLCBXZWJDb3JlOjpQbGF0Zm9ybUNBCiAgICAgfQogfQogCit9CisKK0BpbXBsZW1lbnRhdGlv
biBXZWJMYXllcgogCiAtIChpZDxDQUFjdGlvbj4pYWN0aW9uRm9yS2V5OihOU1N0cmluZyAqKWtl
eQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IGViMzA0ZmMuLjYxNTBjMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzNiBAQAorMjAxMy0xMC0xOCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdGUgTGF5ZXIgVHJlZTogRG91YmxlLWJ1ZmZlcmluZyBhbmQgbWlu
aW1pemF0aW9uIG9mIHJlcGFpbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjMwNDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVt
b3RlLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6ZW5zdXJlQmFja2luZ1N0
b3JlKToKKyAgICAgICAgRG9uJ3Qgd29ycnkgYWJvdXQgaXNPcGFxdWUgd2l0aCBSZW1vdGVMYXll
ckJhY2tpbmdTdG9yZTsgdGhpcyBpcyBhCisgICAgICAgIG9wdGltaXphdGlvbiB0aGF0IGlzIGNh
dXNpbmcgdHJvdWJsZTsgd2UgY2FuIHJlLWFkZCBpdCBsYXRlci4KKworICAgICAgICAoUGxhdGZv
cm1DQUxheWVyUmVtb3RlOjpzZXRCb3VuZHMpOgorICAgICAgICBNYWtlIHN1cmUgdGhhdCB3ZSB3
aWxsIHJlcGFpbnQgaWYgb3VyIGJvdW5kcyBjaGFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpiaXRtYXApOgorICAgICAgICBLZWVwIGEgZnJvbnQg
YW5kIGJhY2sgYnVmZmVyOyByZXR1cm4gdGhlIGZyb250IGJ1ZmZlciB3aGVuIGJlaW5nIGFza2Vk
IGZvciB0aGUgYml0bWFwLgorICAgICAgICBLZWVwIGEgUmVnaW9uIG9mIHJlcGFpbnQgYXJlYXMu
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0
b3JlLm1tOgorICAgICAgICAoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OlJlbW90ZUxheWVyQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjplbmNvZGUpOgor
ICAgICAgICAoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmRlY29kZSk6CisgICAgICAgIFNlcmlh
bGl6ZSBvbmx5IHRoZSBmcm9udCBidWZmZXIsIHNpbmNlIHRoZSBVSSBwcm9jZXNzIG9ubHkgbmVl
ZHMgdGhhdC4KKworICAgICAgICAoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OnNldE5lZWRzRGlz
cGxheSk6CisgICAgICAgIFN0b3JlIHJlcGFpbnQgcmVjdHMgaW5zdGVhZCBvZiBhbHdheXMgc2V0
dGluZyB0aGUgd2hvbGUgbGF5ZXIgdG8gYmUgZGlydHkuCisKKyAgICAgICAgKFJlbW90ZUxheWVy
QmFja2luZ1N0b3JlOjpkaXNwbGF5KToKKyAgICAgICAgUGFpbnQgaW50byB0aGUgYmFjayBidWZm
ZXIgKGNvcHlpbmcgdmFsaWQgcGFydHMgb3ZlciBmcm9tIHRoZSBmcm9udCBidWZmZXIpLAorICAg
ICAgICB0aGVuIHN3YXAgaXQgdG8gdGhlIGZyb250IGJ1ZmZlci4gVXNlIGRyYXdMYXllckNvbnRl
bnRzIHNvIHdlIGdldCByZXBhaW50IGNvdW50ZXJzLCBldGMuCisKIDIwMTMtMTAtMTggIERhbiBC
ZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmVkIHRoZSBfX01BQ19P
U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIGNvbmRpdGlvbiBmcm9tIHRoZSBkZWZpbml0aW9uIG9m
IFdLX0FQSV9FTkFCTEVELgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwCmluZGV4IDQwZTdm
NGEuLjVmMTEwNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAKQEAgLTEwMSwxMSAr
MTAxLDEwIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjphbmltYXRpb25TdGFydGVkKENG
VGltZUludGVydmFsIGJlZ2luVGltZSkKIHZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjplbnN1
cmVCYWNraW5nU3RvcmUoKQogewogICAgIGlmIChtX3Byb3BlcnRpZXMuYmFja2luZ1N0b3JlLmxh
eWVyKCkgPT0gdGhpcwotICAgICAgICAmJiBtX3Byb3BlcnRpZXMuYmFja2luZ1N0b3JlLnNpemUo
KSA9PSBtX3Byb3BlcnRpZXMuc2l6ZQotICAgICAgICAmJiBtX3Byb3BlcnRpZXMuYmFja2luZ1N0
b3JlLmlzT3BhcXVlKCkgPT0gbV9wcm9wZXJ0aWVzLm9wYXF1ZSkKKyAgICAgICAgJiYgbV9wcm9w
ZXJ0aWVzLmJhY2tpbmdTdG9yZS5zaXplKCkgPT0gbV9wcm9wZXJ0aWVzLnNpemUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fcHJvcGVydGllcy5iYWNraW5nU3RvcmUgPSBSZW1vdGVMYXllckJh
Y2tpbmdTdG9yZSh0aGlzLCBleHBhbmRlZEludFNpemUobV9wcm9wZXJ0aWVzLnNpemUpLCBtX3By
b3BlcnRpZXMub3BhcXVlKTsKKyAgICBtX3Byb3BlcnRpZXMuYmFja2luZ1N0b3JlID0gUmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmUodGhpcywgZXhwYW5kZWRJbnRTaXplKG1fcHJvcGVydGllcy5zaXpl
KSk7CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXROZWVkc0Rpc3BsYXkoY29u
c3QgRmxvYXRSZWN0KiBkaXJ0eVJlY3QpCkBAIC0yMTgsNiArMjE3LDggQEAgdm9pZCBQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGU6OnNldEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQogewogICAg
IG1fcHJvcGVydGllcy5zaXplID0gdmFsdWUuc2l6ZSgpOwogICAgIG1fcHJvcGVydGllcy5ub3Rl
UHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlNpemVDaGFuZ2Vk
KTsKKworICAgIGVuc3VyZUJhY2tpbmdTdG9yZSgpOwogfQogCiBGbG9hdFBvaW50M0QgUGxhdGZv
cm1DQUxheWVyUmVtb3RlOjpwb3NpdGlvbigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0
b3JlLmgKaW5kZXggZjM5MTIzZi4uODA0NDRjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3Rv
cmUuaApAQCAtMjksNyArMjksOCBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
IAogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVj
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9S
ZWdpb24uaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTM4LDE2ICszOSwxNSBAQCBjbGFz
cyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU7CiBjbGFzcyBSZW1vdGVMYXllckJhY2tpbmdTdG9yZSB7
CiBwdWJsaWM6CiAgICAgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUoKTsKLSAgICBSZW1vdGVMYXll
ckJhY2tpbmdTdG9yZShQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUqLCBXZWJDb3JlOjpJbnRTaXplLCBi
b29sIGlzT3BhcXVlKTsKKyAgICBSZW1vdGVMYXllckJhY2tpbmdTdG9yZShQbGF0Zm9ybUNBTGF5
ZXJSZW1vdGUqLCBXZWJDb3JlOjpJbnRTaXplKTsKIAogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5
KFdlYkNvcmU6OkludFJlY3QpOwogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAKICAgICBi
b29sIGRpc3BsYXkoKTsKIAotICAgIFNoYXJlYWJsZUJpdG1hcCogYml0bWFwKCkgY29uc3QgeyBy
ZXR1cm4gbV9iaXRtYXAuZ2V0KCk7IH0KKyAgICBTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCgpIGNv
bnN0IHsgcmV0dXJuIG1fZnJvbnRCdWZmZXIuZ2V0KCk7IH0KICAgICBXZWJDb3JlOjpJbnRTaXpl
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBib29sIGlzT3BhcXVlKCkgY29u
c3QgeyByZXR1cm4gbV9pc09wYXF1ZTsgfQogCiAgICAgUGxhdGZvcm1DQUxheWVyUmVtb3RlKiBs
YXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0KIApAQCAtNTgsMTEgKzU4LDExIEBAIHBy
aXZhdGU6CiAgICAgUGxhdGZvcm1DQUxheWVyUmVtb3RlKiBtX2xheWVyOwogCiAgICAgV2ViQ29y
ZTo6SW50U2l6ZSBtX3NpemU7Ci0gICAgYm9vbCBtX2lzT3BhcXVlOwogCi0gICAgYm9vbCBtX25l
ZWRzRnVsbFJlcGFpbnQ7CisgICAgV2ViQ29yZTo6UmVnaW9uIG1fZGlydHlSZWdpb247CiAKLSAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBtX2JpdG1hcDsKKyAgICBSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBtX2Zyb250QnVmZmVyOworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG1fYmFj
a0J1ZmZlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5t
bSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJCYWNr
aW5nU3RvcmUubW0KaW5kZXggNWFjMDY5NC4uMTE1NDJlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyQmFj
a2luZ1N0b3JlLm1tCkBAIC0zMiwxNSArMzIsMTQgQEAKICNpbXBvcnQgIkFyZ3VtZW50Q29kZXJz
LmgiCiAjaW1wb3J0ICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbXBvcnQgIldlYkNvcmVBcmd1bWVu
dENvZGVycy5oIgorI2ltcG9ydCA8V2ViQ29yZS9XZWJMYXllci5oPgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKLVJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlOjpSZW1vdGVMYXllckJhY2tpbmdTdG9yZShQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUqIGxh
eWVyLCBJbnRTaXplIHNpemUsIGJvb2wgaXNPcGFxdWUpCitSZW1vdGVMYXllckJhY2tpbmdTdG9y
ZTo6UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUoUGxhdGZvcm1DQUxheWVyUmVtb3RlKiBsYXllciwg
SW50U2l6ZSBzaXplKQogICAgIDogbV9sYXllcihsYXllcikKICAgICAsIG1fc2l6ZShzaXplKQot
ICAgICwgbV9pc09wYXF1ZShpc09wYXF1ZSkKLSAgICAsIG1fbmVlZHNGdWxsUmVwYWludCh0cnVl
KQogewogICAgIEFTU0VSVChsYXllcik7CiB9CkBAIC01Myw3ICs1Miw3IEBAIFJlbW90ZUxheWVy
QmFja2luZ1N0b3JlOjpSZW1vdGVMYXllckJhY2tpbmdTdG9yZSgpCiB2b2lkIFJlbW90ZUxheWVy
QmFja2luZ1N0b3JlOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogewogICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICBtX2JpdG1h
cC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CisgICAgbV9mcm9udEJ1ZmZlci0+Y3JlYXRlSGFuZGxl
KGhhbmRsZSk7CiAKICAgICBlbmNvZGVyIDw8IGhhbmRsZTsKICAgICBlbmNvZGVyIDw8IG1fc2l6
ZTsKQEAgLTY0LDcgKzYzLDcgQEAgYm9vbCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZGVjb2Rl
KENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgUmVtb3RlTGEKICAgICBTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5kbGUp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0Lm1fYml0bWFwID0gU2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKKyAgICByZXN1bHQubV9mcm9udEJ1ZmZlciA9IFNoYXJl
YWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7CiAKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5tX3NpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03NCwxMyArNzMsMTIgQEAg
Ym9vbCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciYgZGVjb2RlciwgUmVtb3RlTGEKIAogdm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6
c2V0TmVlZHNEaXNwbGF5KEludFJlY3QgcmVjdCkKIHsKLSAgICAvLyBGSVhNRTogT25seSByZXBh
aW50IGRpcnR5IHJlZ2lvbnMuCi0gICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbV9kaXJ0eVJl
Z2lvbi51bml0ZShyZWN0KTsKIH0KIAogdm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6c2V0
TmVlZHNEaXNwbGF5KCkKIHsKLSAgICBtX25lZWRzRnVsbFJlcGFpbnQgPSB0cnVlOworICAgIHNl
dE5lZWRzRGlzcGxheShJbnRSZWN0KEludFBvaW50KCksIG1fc2l6ZSkpOwogfQogCiBib29sIFJl
bW90ZUxheWVyQmFja2luZ1N0b3JlOjpkaXNwbGF5KCkKQEAgLTkwLDI2ICs4OCw1NiBAQCBib29s
IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpkaXNwbGF5KCkKIAogICAgIGlmICghbV9sYXllci0+
b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyRHJhd3NDb250ZW50KCkpIHsKICAgICAgICAgLy8gSWYg
d2UgcHJldmlvdXNseSB3ZXJlIGRyYXdzQ29udGVudD1ZRVMsIGFuZCBub3cgYXJlIG5vdCwgd2Ug
bmVlZAotICAgICAgICAvLyB0byBub3RlIHRoYXQgb3VyIGJhY2tpbmcgc3RvcmUgaGFzIGNoYW5n
ZWQgKGJ5IGJlaW5nIGNsZWFyZWQpLgotICAgICAgICBpZiAobV9iaXRtYXApIHsKLSAgICAgICAg
ICAgIG1fYml0bWFwID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gdG8gbm90ZSB0aGF0IG91ciBi
YWNraW5nIHN0b3JlIGhhcyBiZWVuIGNsZWFyZWQuCisgICAgICAgIHJldHVybiBtX2Zyb250QnVm
ZmVyOwogICAgIH0KIAotICAgIGlmIChtX2JpdG1hcCAmJiAhbV9uZWVkc0Z1bGxSZXBhaW50KQor
ICAgIGlmIChtX2RpcnR5UmVnaW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaWYgKCFtX2JpdG1hcCkgewotICAgICAgICBtX2JpdG1hcCA9IFNoYXJlYWJsZUJpdG1h
cDo6Y3JlYXRlU2hhcmVhYmxlKG1fc2l6ZSwgbV9pc09wYXF1ZSA/IFNoYXJlYWJsZUJpdG1hcDo6
Tm9GbGFncyA6IFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7Ci0gICAgICAgIG1fbmVl
ZHNGdWxsUmVwYWludCA9IHRydWU7CisgICAgbV9iYWNrQnVmZmVyID0gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGVTaGFyZWFibGUobV9zaXplLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEp
OworICAgIGlmICghbV9mcm9udEJ1ZmZlcikKKyAgICAgICAgc2V0TmVlZHNEaXNwbGF5KCk7CisK
KyAgICBJbnRSZWN0IGxheWVyQm91bmRzKEludFBvaW50KCksIG1fc2l6ZSk7CisKKyAgICBpZiAo
bV9sYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKG1fbGF5
ZXIpKSB7CisgICAgICAgIEludFJlY3QgaW5kaWNhdG9yUmVjdCA9IEludFJlY3QoMCwgMCwgNTIs
IDI3KTsKKyAgICAgICAgaWYgKG1fbGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckNvbnRl
bnRzT3JpZW50YXRpb24oKSA9PSBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nv
b3JkaW5hdGVzQm90dG9tVXApCisgICAgICAgICAgICBpbmRpY2F0b3JSZWN0LnNldFkobGF5ZXJC
b3VuZHMuaGVpZ2h0KCkgLSBpbmRpY2F0b3JSZWN0LnkoKSAtIGluZGljYXRvclJlY3QuaGVpZ2h0
KCkpOworCisgICAgICAgIHNldE5lZWRzRGlzcGxheShpbmRpY2F0b3JSZWN0KTsKKyAgICB9CisK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0ID0gbV9iYWNrQnVm
ZmVyLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKworICAgIFZlY3RvcjxJbnRSZWN0PiBkaXJ0
eVJlY3RzID0gbV9kaXJ0eVJlZ2lvbi5yZWN0cygpOworCisgICAgLy8gQ29weSBvdmVyIHRoZSBw
YXJ0cyBvZiB0aGUgZnJvbnQgYnVmZmVyIHRoYXQgd2UncmUgbm90IGdvaW5nIHRvIHJlcGFpbnQu
CisgICAgaWYgKG1fZnJvbnRCdWZmZXIpIHsKKyAgICAgICAgUmVnaW9uIGNsZWFuUmVnaW9uKGxh
eWVyQm91bmRzKTsKKyAgICAgICAgY2xlYW5SZWdpb24uc3VidHJhY3QobV9kaXJ0eVJlZ2lvbik7
CisKKyAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGZyb250SW1hZ2UgPSBtX2Zyb250QnVm
ZmVyLT5tYWtlQ0dJbWFnZSgpOworCisgICAgICAgIGZvciAoY29uc3QgYXV0byYgcmVjdCA6IGNs
ZWFuUmVnaW9uLnJlY3RzKCkpCisgICAgICAgICAgICBjb250ZXh0LT5kcmF3TmF0aXZlSW1hZ2Uo
ZnJvbnRJbWFnZS5nZXQoKSwgbV9mcm9udEJ1ZmZlci0+c2l6ZSgpLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCByZWN0LCByZWN0KTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBoYXZlIHRvbyBtYW55IHJl
Y3RzIHRvIHBhaW50LCBvciB3YW50IHRvIHBhaW50IHRoZSB3aG9sZSBsYXllciwKKyAgICAvLyBo
YW5kIGRyYXdDb250ZW50cyBhbiBlbXB0eSBsaXN0LCBhbmQgaXQgd2lsbCByZXBhaW50IGV2ZXJ5
dGhpbmcuCisgICAgLy8gRklYTUU6IFdlYkxheWVyIGFsc28gaGFzIGEgcGFpbnRlZC1hcmVhLWJh
c2VkIGxpbWl0LgorICAgIFZlY3RvcjxGbG9hdFJlY3QsIHdlYkxheWVyTWF4UmVjdHNUb1BhaW50
PiByZWN0c1RvUGFpbnQ7CisgICAgaWYgKGRpcnR5UmVjdHMuc2l6ZSgpIDw9IHdlYkxheWVyTWF4
UmVjdHNUb1BhaW50IHx8IG1fZGlydHlSZWdpb24uY29udGFpbnMobGF5ZXJCb3VuZHMpKSB7Cisg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgcmVjdCA6IGRpcnR5UmVjdHMpCisgICAgICAgICAgICBy
ZWN0c1RvUGFpbnQuYXBwZW5kKHJlY3QpOwogICAgIH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxH
cmFwaGljc0NvbnRleHQ+IGNvbnRleHQgPSBtX2JpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0
KCk7Ci0gICAgbV9sYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cygq
Y29udGV4dC5nZXQoKSwgSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpKTsKKyAgICBkcmF3TGF5
ZXJDb250ZW50cyhjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9sYXllciwgbGF5ZXJCb3Vu
ZHMsIHJlY3RzVG9QYWludCwgZmFsc2UpOworICAgIG1fZGlydHlSZWdpb24gPSBSZWdpb24oKTsK
IAotICAgIG1fbmVlZHNGdWxsUmVwYWludCA9IGZhbHNlOworICAgIG1fZnJvbnRCdWZmZXIgPSBt
X2JhY2tCdWZmZXI7CisgICAgbV9iYWNrQnVmZmVyID0gbnVsbHB0cjsKIAogICAgIHJldHVybiB0
cnVlOwogfQo=
</data>
<flag name="review"
          id="237177"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214622</attachid>
            <date>2013-10-18 17:36:03 -0700</date>
            <delta_ts>2013-10-18 17:44:41 -0700</delta_ts>
            <desc>revised</desc>
            <filename>repaint.diff</filename>
            <type>text/plain</type>
            <size>19873</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0MmQ5ZDU3Li43MGM4ODcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYg
QEAKKzIwMTMtMTAtMTggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVtb3RlIExheWVyIFRyZWU6IERvdWJsZS1idWZmZXJpbmcgYW5kIG1pbmltaXph
dGlvbiBvZiByZXBhaW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTIzMDQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBub3QgeWV0IHRlc3RhYmxlLgorCisgICAgICAgICogV2Vi
Q29yZS5leHAuaW46CisgICAgICAgIEV4cG9ydCBvbmUgdmVyc2lvbiBvZiBkcmF3TGF5ZXJDb250
ZW50cyBhbmQgUmVnaW9uOjpjb250YWlucy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgRXhwb3NlIFdlYkxheWVyLmggYXMgYSBwcml2YXRl
IGhlYWRlci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5oOgor
ICAgICAgICBDbGVhbiB1cCB0aGlzIGhlYWRlciwgYW5kIGFkZCBhIG5ldyBkcmF3TGF5ZXJDb250
ZW50cyB0aGF0IGNhbiBvcGVyYXRlIHdpdGhvdXQgYSBDQUxheWVyLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0xh
eWVyQ29udGVudHMpOgorICAgICAgICBTcGxpdCBkcmF3TGF5ZXJDb250ZW50cyBpbnRvIG9uZSBt
ZXRob2QgdGhhdCBhY3F1aXJlcyBwcm9wZXJ0aWVzIENBTGF5ZXIsCisgICAgICAgIGFuZCBvbmUg
dGhhdCBqdXN0IGRvZXMgdGhlIHBhaW50aW5nLgorCiAyMDEzLTEwLTE4ICBDaGFuZ1Nlb2sgT2gg
IDxjaGFuZ3Nlb2sub2hAY29sbGFib3JhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxk
IGZpeCBmb3IgLS1uby1zdmcgb3B0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCBjOTAwZTlh
Li4xM2I4NmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtNjc2LDYgKzY3Niw3IEBAIF9fWk43
V2ViQ29yZTE3U1FMaXRlVHJhbnNhY3Rpb25DMUVSTlNfMTRTUUxpdGVEYXRhYmFzZUViCiBfX1pO
N1dlYkNvcmUxN1NRTGl0ZVRyYW5zYWN0aW9uRDFFdgogX19aTjdXZWJDb3JlMTdTdWJyZXNvdXJj
ZUxvYWRlcjZjcmVhdGVFUE5TXzVGcmFtZUVQTlNfMTRDYWNoZWRSZXNvdXJjZUVSS05TXzE1UmVz
b3VyY2VSZXF1ZXN0RVJLTlNfMjFSZXNvdXJjZUxvYWRlck9wdGlvbnNFCiBfX1pON1dlYkNvcmUx
N2NhY2hlRE9NU3RydWN0dXJlRVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOM0pTQzlTdHJ1Y3R1
cmVFUEtOUzJfOUNsYXNzSW5mb0UKK19fWk43V2ViQ29yZTE3ZHJhd0xheWVyQ29udGVudHNFUDlD
R0NvbnRleHRQTlNfMTVQbGF0Zm9ybUNBTGF5ZXJFTlNfOUZsb2F0UmVjdEVOM1dURjZWZWN0b3JJ
UzRfTG01RU5TNV8xNUNyYXNoT25PdmVyZmxvd0VFRWIKIF9fWk43V2ViQ29yZTE3bGFuZ3VhZ2VE
aWRDaGFuZ2VFdgogX19aTjdXZWJDb3JlMTdvcGVuVGVtcG9yYXJ5RmlsZUVSS04zV1RGNlN0cmlu
Z0VSaQogX19aTjdXZWJDb3JlMTdzZXRDb29raWVzRnJvbURPTUVSS05TXzIxTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uRVJLTlNfM1VSTEVTNV9SS04zV1RGNlN0cmluZ0UKQEAgLTE3MDgsNiArMTcwOSw4
IEBAIF9fWk5LN1dlYkNvcmU2RWRpdG9yOGNhblBhc3RlRXYKIF9fWk5LN1dlYkNvcmU2RWRpdG9y
OWNhbkRlbGV0ZUV2CiBfX1pOSzdXZWJDb3JlNkxlbmd0aDIyZGVjcmVtZW50Q2FsY3VsYXRlZFJl
ZkV2CiBfX1pOSzdXZWJDb3JlNlJlZ2lvbjVyZWN0c0V2CitfX1pOSzdXZWJDb3JlNlJlZ2lvbjhj
b250YWluc0VSS1MwXworX19aTks3V2ViQ29yZTZSZWdpb245dG90YWxBcmVhRXYKIF9fWk5LN1dl
YkNvcmU2V2lkZ2V0MTRwbGF0Zm9ybVdpZGdldEV2CiBfX1pOSzdXZWJDb3JlNldpZGdldDIzY29u
dmVydFRvQ29udGFpbmluZ1ZpZXdFUktOU183SW50UmVjdEUKIF9fWk5LN1dlYkNvcmU2V2lkZ2V0
MjNjb252ZXJ0VG9Db250YWluaW5nVmlld0VSS05TXzhJbnRQb2ludEUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjYjQ2MmVjLi44
YmMyMTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC00NjEsNyArNDYxLDcgQEAKIAkJMEZDRjMzMkMwRjJCOUEyNTAwNEI2Nzk1
IC8qIFdlYlRpbGVkTGF5ZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkNGMzMyODBGMkI5QTI1MDA0QjY3OTUgLyogV2ViVGlsZWRMYXllci5tbSAq
LzsgfTsKIAkJMEZDRjMzMkQwRjJCOUEyNTAwNEI2Nzk1IC8qIFdlYlRpbGVkTGF5ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0YzMzI5MEYyQjlB
MjUwMDRCNjc5NSAvKiBXZWJUaWxlZExheWVyLmggKi87IH07CiAJCTBGQ0YzMzJFMEYyQjlBMjUw
MDRCNjc5NSAvKiBXZWJMYXllci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQ0YzMzJBMEYyQjlBMjUwMDRCNjc5NSAvKiBXZWJMYXllci5tbSAqLzsg
fTsKLQkJMEZDRjMzMkYwRjJCOUEyNTAwNEI2Nzk1IC8qIFdlYkxheWVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNGMzMyQjBGMkI5QTI1MDA0QjY3
OTUgLyogV2ViTGF5ZXIuaCAqLzsgfTsKKwkJMEZDRjMzMkYwRjJCOUEyNTAwNEI2Nzk1IC8qIFdl
YkxheWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkNGMzMyQjBGMkI5QTI1MDA0QjY3OTUgLyogV2ViTGF5ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQzMDgwRTExN0NGN0U3MDBBNzkxRjcg
LyogUmVuZGVyRnJhbWVCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDMwODBDMTE3Q0Y3RTcwMEE3OTFGNyAvKiBSZW5kZXJGcmFtZUJhc2Uu
Y3BwICovOyB9OwogCQkwRkQzMDgwRjExN0NGN0U3MDBBNzkxRjcgLyogUmVuZGVyRnJhbWVCYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzMDgw
RDExN0NGN0U3MDBBNzkxRjcgLyogUmVuZGVyRnJhbWVCYXNlLmggKi87IH07CiAJCTBGRDMwOEQ1
MTE3RDE2ODUwMEE3OTFGNyAvKiBSZW5kZXJJRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMzA4RDMxMTdEMTY4NDAwQTc5MUY3IC8qIFJl
bmRlcklGcmFtZS5jcHAgKi87IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9XZWJMYXllci5oCmluZGV4IDY1NTY5Y2UuLjRlOGEzZWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5oCkBAIC0yOSwyMCArMjks
MjQgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbXBvcnQgPFF1YXJ0
ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbXBv
cnQgPHd0Zi9WZWN0b3IuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEdyYXBo
aWNzTGF5ZXI7Ci0gICAgY2xhc3MgUGxhdGZvcm1DQUxheWVyOwotICAgIGNsYXNzIFBsYXRmb3Jt
Q0FMYXllckNsaWVudDsKLX0KK2NvbnN0IHVuc2lnbmVkIHdlYkxheWVyTWF4UmVjdHNUb1BhaW50
ID0gNTsKK2NvbnN0IGZsb2F0IHdlYkxheWVyV2FzdGVkU3BhY2VUaHJlc2hvbGQgPSAwLjc1ZjsK
IAotQGludGVyZmFjZSBXZWJMYXllciA6IENBTGF5ZXIgCi17Ci19CitAaW50ZXJmYWNlIFdlYkxh
eWVyIDogQ0FMYXllcgogQGVuZAogCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGlj
c0xheWVyOworY2xhc3MgUGxhdGZvcm1DQUxheWVyOworY2xhc3MgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50OworCiAvLyBGdW5jdGlvbnMgYWxsb3dzIHVzIHRvIHNoYXJlIGltcGxlbWVudGF0aW9uIGFj
cm9zcyBXZWJUaWxlZExheWVyIGFuZCBXZWJMYXllcgogdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhD
R0NvbnRleHRSZWYsIENBTGF5ZXIgKiwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKik7Cit2b2lk
IGRyYXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
KiwgV2ViQ29yZTo6RmxvYXRSZWN0IGxheWVyQm91bmRzLCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRS
ZWN0LCB3ZWJMYXllck1heFJlY3RzVG9QYWludD4gZGlydHlSZWN0cywgYm9vbCBpc1RpbGVkTGF5
ZXIpOworfQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KaW5kZXgg
MDY1YThmNy4uMGQ2YjFmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL1dlYkxheWVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9XZWJMYXllci5tbQpAQCAtNDMsMjAgKzQzLDQ1IEBACiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCi1AaW1wbGVtZW50YXRpb24gV2ViTGF5ZXIKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgQ0FMYXll
ciAqbGF5ZXIsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXllcikKIHsKKyAg
ICBDR1JlY3QgbGF5ZXJCb3VuZHMgPSBbbGF5ZXIgYm91bmRzXTsKKworICAgIF9fYmxvY2sgZG91
YmxlIHRvdGFsUmVjdEFyZWEgPSAwOworICAgIF9fYmxvY2sgdW5zaWduZWQgcmVjdENvdW50ID0g
MDsKKyAgICBfX2Jsb2NrIFZlY3RvcjxGbG9hdFJlY3QsIHdlYkxheWVyTWF4UmVjdHNUb1BhaW50
PiBkaXJ0eVJlY3RzOworCisgICAgd2tDQUxheWVyRW51bWVyYXRlUmVjdHNCZWluZ0RyYXduV2l0
aEJsb2NrKGxheWVyLCBjb250ZXh0LCBeKENHUmVjdCByZWN0KSB7CisgICAgICAgIGlmICgrK3Jl
Y3RDb3VudCA+IHdlYkxheWVyTWF4UmVjdHNUb1BhaW50KQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHRvdGFsUmVjdEFyZWEgKz0gcmVjdC5zaXplLndpZHRoICogcmVjdC5zaXplLmhl
aWdodDsKKyAgICAgICAgZGlydHlSZWN0cy5hcHBlbmQocmVjdCk7CisgICAgfSk7CisKKyAgICBG
bG9hdFJlY3QgY2xpcEJvdW5kcyA9IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0
KTsKKyAgICBkb3VibGUgY2xpcEFyZWEgPSBjbGlwQm91bmRzLndpZHRoKCkgKiBjbGlwQm91bmRz
LmhlaWdodCgpOworCisgICAgaWYgKHJlY3RDb3VudCA+PSB3ZWJMYXllck1heFJlY3RzVG9QYWlu
dCB8fCB0b3RhbFJlY3RBcmVhID49IGNsaXBBcmVhICogd2ViTGF5ZXJXYXN0ZWRTcGFjZVRocmVz
aG9sZCkKKyAgICAgICAgZGlydHlSZWN0cy5jbGVhcigpOworCisgICAgYm9vbCBpc1RpbGVkTGF5
ZXIgPSBbbGF5ZXIgaXNLaW5kT2ZDbGFzczpbQ0FUaWxlZExheWVyIGNsYXNzXV07CisgICAgZHJh
d0xheWVyQ29udGVudHMoY29udGV4dCwgcGxhdGZvcm1MYXllciwgbGF5ZXJCb3VuZHMsIGRpcnR5
UmVjdHMsIGlzVGlsZWRMYXllcik7Cit9CisKK3ZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250
ZXh0UmVmIGNvbnRleHQsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXllciwg
RmxvYXRSZWN0IGxheWVyQm91bmRzLCBWZWN0b3I8RmxvYXRSZWN0LCB3ZWJMYXllck1heFJlY3Rz
VG9QYWludD4gZGlydHlSZWN0cywgYm9vbCBpc1RpbGVkTGF5ZXIpCit7CiAgICAgV2ViQ29yZTo6
UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBsYXllckNvbnRlbnRzID0gcGxhdGZvcm1MYXllci0+b3du
ZXIoKTsKICAgICBpZiAoIWxheWVyQ29udGVudHMpCiAgICAgICAgIHJldHVybjsKIAogICAgIENH
Q29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAKLSAgICBDR1JlY3QgbGF5ZXJCb3VuZHMgPSBb
bGF5ZXIgYm91bmRzXTsKICAgICBpZiAobGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVyQ29u
dGVudHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0ZXNCb3R0b21VcCkgewogICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0
LCAxLCAtMSk7Ci0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtbGF5
ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpOworICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29u
dGV4dCwgMCwgLWxheWVyQm91bmRzLmhlaWdodCgpKTsKICAgICB9CiAKICAgICBbTlNHcmFwaGlj
c0NvbnRleHQgc2F2ZUdyYXBoaWNzU3RhdGVdOwpAQCAtODcsMjQgKzExMiwxMyBAQCB2b2lkIGRy
YXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBDQUxheWVyICpsYXllciwgV2Vi
Q29yZTo6UGxhdGZvcm1DQQogI2VuZGlmCiAgICAgVGhlbWVNYWM6OnNldEZvY3VzUmluZ0NsaXBS
ZWN0KGZvY3VzUmluZ0NsaXBSZWN0KTsKIAotICAgIGNvbnN0IGZsb2F0IHdhc3RlZFNwYWNlVGhy
ZXNob2xkID0gMC43NWY7Ci0gICAgY29uc3QgdW5zaWduZWQgbWF4UmVjdHNUb1BhaW50ID0gNTsK
LQotICAgIGRvdWJsZSBjbGlwQXJlYSA9IGNsaXBCb3VuZHMud2lkdGgoKSAqIGNsaXBCb3VuZHMu
aGVpZ2h0KCk7Ci0gICAgX19ibG9jayBkb3VibGUgdG90YWxSZWN0QXJlYSA9IDA7Ci0gICAgX19i
bG9jayB1bnNpZ25lZCByZWN0Q291bnQgPSAwOwotICAgIF9fYmxvY2sgVmVjdG9yPEZsb2F0UmVj
dCwgbWF4UmVjdHNUb1BhaW50PiBkaXJ0eVJlY3RzOwotICAgIAotICAgIHdrQ0FMYXllckVudW1l
cmF0ZVJlY3RzQmVpbmdEcmF3bldpdGhCbG9jayhsYXllciwgY29udGV4dCwgXihDR1JlY3QgcmVj
dCkgewotICAgICAgICBpZiAoKytyZWN0Q291bnQgPiBtYXhSZWN0c1RvUGFpbnQpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgdG90YWxSZWN0QXJlYSArPSByZWN0LnNpemUud2lkdGgg
KiByZWN0LnNpemUuaGVpZ2h0OwotICAgICAgICBkaXJ0eVJlY3RzLmFwcGVuZChyZWN0KTsKLSAg
ICB9KTsKLQotICAgIGlmIChyZWN0Q291bnQgPCBtYXhSZWN0c1RvUGFpbnQgJiYgdG90YWxSZWN0
QXJlYSA8IGNsaXBBcmVhICogd2FzdGVkU3BhY2VUaHJlc2hvbGQpIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHJlY3RDb3VudDsgKytpKSB7CisgICAgLy8gSWYgd2UgaGF2ZSBu
byBkaXJ0eSByZWN0cywgcmVwYWludCB0aGUgd2hvbGUgbGF5ZXIuCisgICAgaWYgKGRpcnR5UmVj
dHMuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveCgp
IGdpdmVzIHVzIHRoZSBib3VuZHMgb2YgdGhlIGRpcnR5IHJlZ2lvbiwgc28gY2xpcEJvdW5kcwor
ICAgICAgICAvLyBlbmNvbXBhc3NlcyBhbGwgdGhlIGRpcnR5IHJlY3RzLgorICAgICAgICBsYXll
ckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwg
ZW5jbG9zaW5nSW50UmVjdChjbGlwQm91bmRzKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRpcnR5UmVjdHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UmVjdCYgY3VycmVudFJlY3QgPSBkaXJ0eVJlY3RzW2ldOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
Z3JhcGhpY3NDb250ZXh0KTsKQEAgLTExMiwxMCArMTI2LDYgQEAgdm9pZCBkcmF3TGF5ZXJDb250
ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgQ0FMYXllciAqbGF5ZXIsIFdlYkNvcmU6OlBsYXRm
b3JtQ0EKICAgICAgICAgICAgIAogICAgICAgICAgICAgbGF5ZXJDb250ZW50cy0+cGxhdGZvcm1D
QUxheWVyUGFpbnRDb250ZW50cyhncmFwaGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY3Vy
cmVudFJlY3QpKTsKICAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIENHQ29udGV4
dEdldENsaXBCb3VuZGluZ0JveCgpIGdpdmVzIHVzIHRoZSBib3VuZHMgb2YgdGhlIGRpcnR5IHJl
Z2lvbiwgc28gY2xpcEJvdW5kcwotICAgICAgICAvLyBlbmNvbXBhc3NlcyBhbGwgdGhlIGRpcnR5
IHJlY3RzLgotICAgICAgICBsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRl
bnRzKGdyYXBoaWNzQ29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChjbGlwQm91bmRzKSk7CiAgICAg
fQogCiAgICAgVGhlbWVNYWM6OnNldEZvY3VzUmluZ0NsaXBSZWN0KEZsb2F0UmVjdCgpKTsKQEAg
LTEyOCwxMyArMTM4LDExIEBAIHZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmIGNv
bnRleHQsIENBTGF5ZXIgKmxheWVyLCBXZWJDb3JlOjpQbGF0Zm9ybUNBCiAKICAgICBDR0NvbnRl
eHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogCi0gICAgLy8gQWx3YXlzIHVwZGF0ZSB0aGUgcmVw
YWluIGNvdW50IHNvIHRoYXQgaXQncyBhY2N1cmF0ZSBldmVuIGlmIHRoZSBjb3VudCBpdHNlbGYg
aXMgbm90IHNob3duLiBUaGlzIHdpbGwgYmUgdXNlZnVsCisgICAgLy8gQWx3YXlzIHVwZGF0ZSB0
aGUgcmVwYWludCBjb3VudCBzbyB0aGF0IGl0J3MgYWNjdXJhdGUgZXZlbiBpZiB0aGUgY291bnQg
aXRzZWxmIGlzIG5vdCBzaG93bi4gVGhpcyB3aWxsIGJlIHVzZWZ1bAogICAgIC8vIGZvciB0aGUg
V2ViIEluc3BlY3RvciBmZWVkaW5nIHRoaXMgaW5mb3JtYXRpb24gdGhyb3VnaCB0aGUgTGF5ZXJU
cmVlQWdlbnQuIAogICAgIGludCByZXBhaW50Q291bnQgPSBsYXllckNvbnRlbnRzLT5wbGF0Zm9y
bUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQoKTsKIAogICAgIGlmICghcGxhdGZvcm1MYXll
ci0+dXNlc1RpbGVkQmFja2luZ0xheWVyKCkgJiYgbGF5ZXJDb250ZW50cyAmJiBsYXllckNvbnRl
bnRzLT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIocGxhdGZvcm1MYXllcikpIHsK
LSAgICAgICAgYm9vbCBpc1RpbGVkTGF5ZXIgPSBbbGF5ZXIgaXNLaW5kT2ZDbGFzczpbQ0FUaWxl
ZExheWVyIGNsYXNzXV07Ci0KICAgICAgICAgY2hhciB0ZXh0WzE2XTsgLy8gdGhhdCdzIGEgbG90
IG9mIHJlcGFpbnRzCiAgICAgICAgIHNucHJpbnRmKHRleHQsIHNpemVvZih0ZXh0KSwgIiVkIiwg
cmVwYWludENvdW50KTsKIApAQCAtMTcwLDYgKzE3OCw5IEBAIHZvaWQgZHJhd0xheWVyQ29udGVu
dHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENBTGF5ZXIgKmxheWVyLCBXZWJDb3JlOjpQbGF0Zm9y
bUNBCiAgICAgfQogfQogCit9CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJMYXllcgogCiAtIChpZDxD
QUFjdGlvbj4pYWN0aW9uRm9yS2V5OihOU1N0cmluZyAqKWtleQogewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGVi
MzA0ZmMuLjYxNTBjMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxMy0xMC0xOCAg
VGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdGUg
TGF5ZXIgVHJlZTogRG91YmxlLWJ1ZmZlcmluZyBhbmQgbWluaW1pemF0aW9uIG9mIHJlcGFpbnRz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjMwNDMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcDoKKyAgICAgICAgKFBs
YXRmb3JtQ0FMYXllclJlbW90ZTo6ZW5zdXJlQmFja2luZ1N0b3JlKToKKyAgICAgICAgRG9uJ3Qg
d29ycnkgYWJvdXQgaXNPcGFxdWUgd2l0aCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTsgdGhpcyBp
cyBhCisgICAgICAgIG9wdGltaXphdGlvbiB0aGF0IGlzIGNhdXNpbmcgdHJvdWJsZTsgd2UgY2Fu
IHJlLWFkZCBpdCBsYXRlci4KKworICAgICAgICAoUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRC
b3VuZHMpOgorICAgICAgICBNYWtlIHN1cmUgdGhhdCB3ZSB3aWxsIHJlcGFpbnQgaWYgb3VyIGJv
dW5kcyBjaGFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxh
eWVyQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyQmFja2luZ1N0
b3JlOjpiaXRtYXApOgorICAgICAgICBLZWVwIGEgZnJvbnQgYW5kIGJhY2sgYnVmZmVyOyByZXR1
cm4gdGhlIGZyb250IGJ1ZmZlciB3aGVuIGJlaW5nIGFza2VkIGZvciB0aGUgYml0bWFwLgorICAg
ICAgICBLZWVwIGEgUmVnaW9uIG9mIHJlcGFpbnQgYXJlYXMuCisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tOgorICAgICAgICAoUmVt
b3RlTGF5ZXJCYWNraW5nU3RvcmU6OlJlbW90ZUxheWVyQmFja2luZ1N0b3JlKToKKyAgICAgICAg
KFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjplbmNvZGUpOgorICAgICAgICAoUmVtb3RlTGF5ZXJC
YWNraW5nU3RvcmU6OmRlY29kZSk6CisgICAgICAgIFNlcmlhbGl6ZSBvbmx5IHRoZSBmcm9udCBi
dWZmZXIsIHNpbmNlIHRoZSBVSSBwcm9jZXNzIG9ubHkgbmVlZHMgdGhhdC4KKworICAgICAgICAo
UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAgIFN0b3Jl
IHJlcGFpbnQgcmVjdHMgaW5zdGVhZCBvZiBhbHdheXMgc2V0dGluZyB0aGUgd2hvbGUgbGF5ZXIg
dG8gYmUgZGlydHkuCisKKyAgICAgICAgKFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpkaXNwbGF5
KToKKyAgICAgICAgUGFpbnQgaW50byB0aGUgYmFjayBidWZmZXIgKGNvcHlpbmcgdmFsaWQgcGFy
dHMgb3ZlciBmcm9tIHRoZSBmcm9udCBidWZmZXIpLAorICAgICAgICB0aGVuIHN3YXAgaXQgdG8g
dGhlIGZyb250IGJ1ZmZlci4gVXNlIGRyYXdMYXllckNvbnRlbnRzIHNvIHdlIGdldCByZXBhaW50
IGNvdW50ZXJzLCBldGMuCisKIDIwMTMtMTAtMTggIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxl
LmNvbT4KIAogICAgICAgICBSZW1vdmVkIHRoZSBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEIGNvbmRpdGlvbiBmcm9tIHRoZSBkZWZpbml0aW9uIG9mIFdLX0FQSV9FTkFCTEVELgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNB
TGF5ZXJSZW1vdGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9Q
bGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwCmluZGV4IDQwZTdmNGEuLjVmMTEwNTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVy
UmVtb3RlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Bs
YXRmb3JtQ0FMYXllclJlbW90ZS5jcHAKQEAgLTEwMSwxMSArMTAxLDEwIEBAIHZvaWQgUGxhdGZv
cm1DQUxheWVyUmVtb3RlOjphbmltYXRpb25TdGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGlt
ZSkKIHZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjplbnN1cmVCYWNraW5nU3RvcmUoKQogewog
ICAgIGlmIChtX3Byb3BlcnRpZXMuYmFja2luZ1N0b3JlLmxheWVyKCkgPT0gdGhpcwotICAgICAg
ICAmJiBtX3Byb3BlcnRpZXMuYmFja2luZ1N0b3JlLnNpemUoKSA9PSBtX3Byb3BlcnRpZXMuc2l6
ZQotICAgICAgICAmJiBtX3Byb3BlcnRpZXMuYmFja2luZ1N0b3JlLmlzT3BhcXVlKCkgPT0gbV9w
cm9wZXJ0aWVzLm9wYXF1ZSkKKyAgICAgICAgJiYgbV9wcm9wZXJ0aWVzLmJhY2tpbmdTdG9yZS5z
aXplKCkgPT0gbV9wcm9wZXJ0aWVzLnNpemUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcHJv
cGVydGllcy5iYWNraW5nU3RvcmUgPSBSZW1vdGVMYXllckJhY2tpbmdTdG9yZSh0aGlzLCBleHBh
bmRlZEludFNpemUobV9wcm9wZXJ0aWVzLnNpemUpLCBtX3Byb3BlcnRpZXMub3BhcXVlKTsKKyAg
ICBtX3Byb3BlcnRpZXMuYmFja2luZ1N0b3JlID0gUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUodGhp
cywgZXhwYW5kZWRJbnRTaXplKG1fcHJvcGVydGllcy5zaXplKSk7CiB9CiAKIHZvaWQgUGxhdGZv
cm1DQUxheWVyUmVtb3RlOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0KiBkaXJ0eVJl
Y3QpCkBAIC0yMTgsNiArMjE3LDggQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldEJv
dW5kcyhjb25zdCBGbG9hdFJlY3QmIHZhbHVlKQogewogICAgIG1fcHJvcGVydGllcy5zaXplID0g
dmFsdWUuc2l6ZSgpOwogICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5nZWQoUmVt
b3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OlNpemVDaGFuZ2VkKTsKKworICAgIGVuc3VyZUJhY2tp
bmdTdG9yZSgpOwogfQogCiBGbG9hdFBvaW50M0QgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpwb3Np
dGlvbigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLmgKaW5kZXggZjM5MTIzZi4u
ODA0NDRjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUuaApAQCAtMjksNyArMjksOCBA
QAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIlNoYXJlYWJs
ZUJpdG1hcC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZWdpb24uaD4KIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKQEAgLTM4LDE2ICszOSwxNSBAQCBjbGFzcyBQbGF0Zm9ybUNBTGF5ZXJSZW1v
dGU7CiBjbGFzcyBSZW1vdGVMYXllckJhY2tpbmdTdG9yZSB7CiBwdWJsaWM6CiAgICAgUmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmUoKTsKLSAgICBSZW1vdGVMYXllckJhY2tpbmdTdG9yZShQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGUqLCBXZWJDb3JlOjpJbnRTaXplLCBib29sIGlzT3BhcXVlKTsKKyAgICBS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZShQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUqLCBXZWJDb3JlOjpJ
bnRTaXplKTsKIAogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KFdlYkNvcmU6OkludFJlY3QpOwog
ICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAKICAgICBib29sIGRpc3BsYXkoKTsKIAotICAg
IFNoYXJlYWJsZUJpdG1hcCogYml0bWFwKCkgY29uc3QgeyByZXR1cm4gbV9iaXRtYXAuZ2V0KCk7
IH0KKyAgICBTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbnRC
dWZmZXIuZ2V0KCk7IH0KICAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3NpemU7IH0KLSAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9pc09wYXF1
ZTsgfQogCiAgICAgUGxhdGZvcm1DQUxheWVyUmVtb3RlKiBsYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1fbGF5ZXI7IH0KIApAQCAtNTgsMTEgKzU4LDExIEBAIHByaXZhdGU6CiAgICAgUGxhdGZvcm1D
QUxheWVyUmVtb3RlKiBtX2xheWVyOwogCiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7Ci0g
ICAgYm9vbCBtX2lzT3BhcXVlOwogCi0gICAgYm9vbCBtX25lZWRzRnVsbFJlcGFpbnQ7CisgICAg
V2ViQ29yZTo6UmVnaW9uIG1fZGlydHlSZWdpb247CiAKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBtX2JpdG1hcDsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBtX2Zyb250QnVmZmVy
OworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG1fYmFja0J1ZmZlcjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0KaW5kZXggNWFj
MDY5NC4uZDAxNWM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCkBAIC0zMiwx
NSArMzIsMTQgQEAKICNpbXBvcnQgIkFyZ3VtZW50Q29kZXJzLmgiCiAjaW1wb3J0ICJTaGFyZWFi
bGVCaXRtYXAuaCIKICNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2ltcG9ydCA8
V2ViQ29yZS9XZWJMYXllci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CiAKLVJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpSZW1vdGVMYXllckJh
Y2tpbmdTdG9yZShQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUqIGxheWVyLCBJbnRTaXplIHNpemUsIGJv
b2wgaXNPcGFxdWUpCitSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6UmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmUoUGxhdGZvcm1DQUxheWVyUmVtb3RlKiBsYXllciwgSW50U2l6ZSBzaXplKQogICAgIDog
bV9sYXllcihsYXllcikKICAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9pc09wYXF1ZShpc09w
YXF1ZSkKLSAgICAsIG1fbmVlZHNGdWxsUmVwYWludCh0cnVlKQogewogICAgIEFTU0VSVChsYXll
cik7CiB9CkBAIC01Myw3ICs1Miw3IEBAIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpSZW1vdGVM
YXllckJhY2tpbmdTdG9yZSgpCiB2b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjplbmNvZGUo
Q29yZUlQQzo6QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewogICAgIFNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKLSAgICBtX2JpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRs
ZSk7CisgICAgbV9mcm9udEJ1ZmZlci0+Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CiAKICAgICBlbmNv
ZGVyIDw8IGhhbmRsZTsKICAgICBlbmNvZGVyIDw8IG1fc2l6ZTsKQEAgLTY0LDcgKzYzLDcgQEAg
Ym9vbCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciYgZGVjb2RlciwgUmVtb3RlTGEKICAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5k
bGU7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYW5kbGUpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmVzdWx0Lm1fYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxl
KTsKKyAgICByZXN1bHQubV9mcm9udEJ1ZmZlciA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhh
bmRsZSk7CiAKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX3NpemUpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC03NCwxMyArNzMsMTIgQEAgYm9vbCBSZW1vdGVMYXllckJhY2tp
bmdTdG9yZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgUmVtb3Rl
TGEKIAogdm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6c2V0TmVlZHNEaXNwbGF5KEludFJl
Y3QgcmVjdCkKIHsKLSAgICAvLyBGSVhNRTogT25seSByZXBhaW50IGRpcnR5IHJlZ2lvbnMuCi0g
ICAgc2V0TmVlZHNEaXNwbGF5KCk7CisgICAgbV9kaXJ0eVJlZ2lvbi51bml0ZShyZWN0KTsKIH0K
IAogdm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKLSAg
ICBtX25lZWRzRnVsbFJlcGFpbnQgPSB0cnVlOworICAgIHNldE5lZWRzRGlzcGxheShJbnRSZWN0
KEludFBvaW50KCksIG1fc2l6ZSkpOwogfQogCiBib29sIFJlbW90ZUxheWVyQmFja2luZ1N0b3Jl
OjpkaXNwbGF5KCkKQEAgLTg4LDI4ICs4Niw1NiBAQCBib29sIFJlbW90ZUxheWVyQmFja2luZ1N0
b3JlOjpkaXNwbGF5KCkKICAgICBpZiAoIW1fbGF5ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmICghbV9sYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyRHJhd3NDb250ZW50
KCkpIHsKLSAgICAgICAgLy8gSWYgd2UgcHJldmlvdXNseSB3ZXJlIGRyYXdzQ29udGVudD1ZRVMs
IGFuZCBub3cgYXJlIG5vdCwgd2UgbmVlZAotICAgICAgICAvLyB0byBub3RlIHRoYXQgb3VyIGJh
Y2tpbmcgc3RvcmUgaGFzIGNoYW5nZWQgKGJ5IGJlaW5nIGNsZWFyZWQpLgotICAgICAgICBpZiAo
bV9iaXRtYXApIHsKLSAgICAgICAgICAgIG1fYml0bWFwID0gbnVsbHB0cjsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgLy8gSWYgd2UgcHJldmlvdXNseSB3ZXJlIGRy
YXdzQ29udGVudD1ZRVMsIGFuZCBub3cgYXJlIG5vdCwgd2UgbmVlZAorICAgIC8vIHRvIG5vdGUg
dGhhdCBvdXIgYmFja2luZyBzdG9yZSBoYXMgYmVlbiBjbGVhcmVkLgorICAgIGlmICghbV9sYXll
ci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyRHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVy
biBtX2Zyb250QnVmZmVyOworCisgICAgaWYgKG1fZGlydHlSZWdpb24uaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2JhY2tCdWZmZXIgPSBTaGFyZWFibGVCaXRtYXA6
OmNyZWF0ZVNoYXJlYWJsZShtX3NpemUsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7
CisgICAgaWYgKCFtX2Zyb250QnVmZmVyKQorICAgICAgICBzZXROZWVkc0Rpc3BsYXkoKTsKKwor
ICAgIEludFJlY3QgbGF5ZXJCb3VuZHMoSW50UG9pbnQoKSwgbV9zaXplKTsKKworICAgIGlmICht
X2xheWVyLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIobV9sYXll
cikpIHsKKyAgICAgICAgSW50UmVjdCBpbmRpY2F0b3JSZWN0ID0gSW50UmVjdCgwLCAwLCA1Miwg
MjcpOworICAgICAgICBpZiAobV9sYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyQ29udGVu
dHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29v
cmRpbmF0ZXNCb3R0b21VcCkKKyAgICAgICAgICAgIGluZGljYXRvclJlY3Quc2V0WShsYXllckJv
dW5kcy5oZWlnaHQoKSAtIGluZGljYXRvclJlY3QueSgpIC0gaW5kaWNhdG9yUmVjdC5oZWlnaHQo
KSk7CisKKyAgICAgICAgc2V0TmVlZHNEaXNwbGF5KGluZGljYXRvclJlY3QpOwogICAgIH0KIAot
ICAgIGlmIChtX2JpdG1hcCAmJiAhbV9uZWVkc0Z1bGxSZXBhaW50KQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dCA9IG1f
YmFja0J1ZmZlci0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisKKyAgICBWZWN0b3I8SW50UmVj
dD4gZGlydHlSZWN0cyA9IG1fZGlydHlSZWdpb24ucmVjdHMoKTsKKworICAgIC8vIElmIHdlIGhh
dmUgbGVzcyB0aGFuIHdlYkxheWVyTWF4UmVjdHNUb1BhaW50IHJlY3RzIHRvIHBhaW50IGFuZCB0
aGV5IGNvdmVyIGxlc3MKKyAgICAvLyB0aGFuIHdlYkxheWVyV2FzdGVkU3BhY2VUaHJlc2hvbGQg
b2YgdGhlIGFyZWEsIHdlJ2xsIGRvIGEgcGFydGlhbCByZXBhaW50LgorICAgIFZlY3RvcjxGbG9h
dFJlY3QsIHdlYkxheWVyTWF4UmVjdHNUb1BhaW50PiByZWN0c1RvUGFpbnQ7CisgICAgaWYgKGRp
cnR5UmVjdHMuc2l6ZSgpIDw9IHdlYkxheWVyTWF4UmVjdHNUb1BhaW50ICYmIG1fZGlydHlSZWdp
b24udG90YWxBcmVhKCkgPD0gd2ViTGF5ZXJXYXN0ZWRTcGFjZVRocmVzaG9sZCAqIGxheWVyQm91
bmRzLndpZHRoKCkgKiBsYXllckJvdW5kcy5oZWlnaHQoKSkgeworICAgICAgICAvLyBDb3B5IG92
ZXIgdGhlIHBhcnRzIG9mIHRoZSBmcm9udCBidWZmZXIgdGhhdCB3ZSdyZSBub3QgZ29pbmcgdG8g
cmVwYWludC4KKyAgICAgICAgaWYgKG1fZnJvbnRCdWZmZXIpIHsKKyAgICAgICAgICAgIFJlZ2lv
biBjbGVhblJlZ2lvbihsYXllckJvdW5kcyk7CisgICAgICAgICAgICBjbGVhblJlZ2lvbi5zdWJ0
cmFjdChtX2RpcnR5UmVnaW9uKTsKKworICAgICAgICAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGZyb250SW1hZ2UgPSBtX2Zyb250QnVmZmVyLT5tYWtlQ0dJbWFnZSgpOworCisgICAgICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiBjbGVhblJlZ2lvbi5yZWN0cygpKQorICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmRyYXdOYXRpdmVJbWFnZShmcm9udEltYWdlLmdldCgpLCBtX2Zyb250
QnVmZmVyLT5zaXplKCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlY3QsIHJlY3QpOworICAgICAg
ICB9CiAKLSAgICBpZiAoIW1fYml0bWFwKSB7Ci0gICAgICAgIG1fYml0bWFwID0gU2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGVTaGFyZWFibGUobV9zaXplLCBtX2lzT3BhcXVlID8gU2hhcmVhYmxlQml0
bWFwOjpOb0ZsYWdzIDogU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKLSAgICAgICAg
bV9uZWVkc0Z1bGxSZXBhaW50ID0gdHJ1ZTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiByZWN0
IDogZGlydHlSZWN0cykKKyAgICAgICAgICAgIHJlY3RzVG9QYWludC5hcHBlbmQocmVjdCk7CiAg
ICAgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dCA9IG1f
Yml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKLSAgICBtX2xheWVyLT5vd25lcigpLT5w
bGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKCpjb250ZXh0LmdldCgpLCBJbnRSZWN0KEludFBv
aW50KCksIG1fc2l6ZSkpOworICAgIGRyYXdMYXllckNvbnRlbnRzKGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLCBtX2xheWVyLCBsYXllckJvdW5kcywgcmVjdHNUb1BhaW50LCBmYWxzZSk7Cisg
ICAgbV9kaXJ0eVJlZ2lvbiA9IFJlZ2lvbigpOwogCi0gICAgbV9uZWVkc0Z1bGxSZXBhaW50ID0g
ZmFsc2U7CisgICAgbV9mcm9udEJ1ZmZlciA9IG1fYmFja0J1ZmZlcjsKKyAgICBtX2JhY2tCdWZm
ZXIgPSBudWxscHRyOwogCiAgICAgcmV0dXJuIHRydWU7CiB9Cg==
</data>
<flag name="review"
          id="237187"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>