<?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>90716</bug_id>
          
          <creation_ts>2012-07-06 19:05:22 -0700</creation_ts>
          <short_desc>Move zero-length-subpaths from RenderSVGShape to RenderSVGPath</short_desc>
          <delta_ts>2012-07-17 14:43:20 -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>SVG</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>
          
          <blocked>88231</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Philip Rogers">pdr</reporter>
          <assigned_to name="Philip Rogers">pdr</assigned_to>
          <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>664323</commentid>
    <comment_count>0</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-07-06 19:05:22 -0700</bug_when>
    <thetext>The SVG spec only allows zero-length-subpaths in paths but our current codebase has the code in RenderSVGShape, the superclass of RenderSVGRect and RenderSVGEllipse. Neither rects nor ellipses can contain zero-length-subpaths so we should move the zero-length-subpath code into RenderSVGPath for better code clarity and rendering performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664326</commentid>
    <comment_count>1</comment_count>
      <attachid>151129</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-07-06 19:35:47 -0700</bug_when>
    <thetext>Created attachment 151129
Preliminary patch

This patch depends on both WK90514 and WK90655 so it&apos;s just a preview until those land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668088</commentid>
    <comment_count>2</comment_count>
      <attachid>152024</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-07-12 12:33:05 -0700</bug_when>
    <thetext>Created attachment 152024
Move zero-length-subpaths from RenderSVGShape to RenderSVGPath</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668138</commentid>
    <comment_count>3</comment_count>
      <attachid>152024</attachid>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2012-07-12 13:16:25 -0700</bug_when>
    <thetext>Comment on attachment 152024
Move zero-length-subpaths from RenderSVGShape to RenderSVGPath

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

Looks good to me.

&gt; Source/WebCore/ChangeLog:10
&gt; +        to RenderSVGPath.

I would suggest adding what you gain by this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668161</commentid>
    <comment_count>4</comment_count>
      <attachid>152046</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-07-12 13:38:56 -0700</bug_when>
    <thetext>Created attachment 152046
Update per reviewer comments

Updated ChangeLog to summarize why this is awesome.

Also added OVERRIDEs to RenderSVGPath per schenney&apos;s comments in wkb.ug/88231</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670646</commentid>
    <comment_count>5</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-07-16 14:08:33 -0700</bug_when>
    <thetext>Nikolas, I think you may have the most context for a review here. Friendly ping for a review :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671029</commentid>
    <comment_count>6</comment_count>
      <attachid>152046</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-07-16 23:46:51 -0700</bug_when>
    <thetext>Comment on attachment 152046
Update per reviewer comments

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

Looks great, r=me with a minor comment.

&gt; Source/WebCore/rendering/svg/RenderSVGPath.cpp:56
&gt; +FloatRect RenderSVGPath::updateStrokeBoundingBox() const

I think updateStrokeBoundingBox is a misleading name, as it returns a new strokeBoundingBox, instead of updating the m_strokeBoundingBox.
Maybe you can come up with a better name not involving update...

&gt; Source/WebCore/rendering/svg/RenderSVGPath.cpp:96
&gt; +    context-&gt;save();

Use GraphicsContextStateSaver stateSaver(*context, true) here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671572</commentid>
    <comment_count>7</comment_count>
      <attachid>152821</attachid>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2012-07-17 13:56:40 -0700</bug_when>
    <thetext>Created attachment 152821
Update per reviewer comments (2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671613</commentid>
    <comment_count>8</comment_count>
      <attachid>152821</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-17 14:43:15 -0700</bug_when>
    <thetext>Comment on attachment 152821
Update per reviewer comments (2)

Clearing flags on attachment: 152821

Committed r122875: &lt;http://trac.webkit.org/changeset/122875&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>671614</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-17 14:43:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151129</attachid>
            <date>2012-07-06 19:35:47 -0700</date>
            <delta_ts>2012-07-12 12:33:05 -0700</delta_ts>
            <desc>Preliminary patch</desc>
            <filename>90716.1.patch</filename>
            <type>text/plain</type>
            <size>25682</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjA0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDEyLTA3LTA2ICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgTW92ZSB6ZXJvLWxlbmd0aC1zdWJw
YXRocyBmcm9tIFJlbmRlclNWR1NoYXBlIHRvIFJlbmRlclNWR1BhdGgKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNzE2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRE8gTk9UIFNVQk1JVCAtIGRlcGVuZHMg
b24gV0s5MDY1NSBhbmQgV0s5MDUxNCBhbmQgbmVlZHMgdG8gYmUgcmViYXNlbGluZWQuCisKKyAg
ICAgICAgUHJldmlvdXNseSB6ZXJvLWxlbmd0aC1zdWJwYXRoIGNvZGUgd2FzIHByZXNlbnQgaW4g
UmVuZGVyU1ZHU2hhcGUgYnV0IGl0IGlzCisgICAgICAgIG9ubHkgbmVlZGVkIGluIFJlbmRlclNW
R1BhdGguIFRoaXMgcGF0Y2ggbW92ZXMgdGhlIHplcm8tbGVuZ3RoLXN1YnBhdGggY29kZQorICAg
ICAgICB0byBSZW5kZXJTVkdQYXRoLgorCisgICAgICAgIFRoZSBwYXRjaCBpcyBwcmltYXJpbHkg
YSBzdHJhaWdodGZvcndhcmQgY29kZSBtb3ZlIGJ1dCB1c2VTdHJva2VTdHlsZVRvRmlsbAorICAg
ICAgICBuZWVkcyBmdXJ0aGVyIGV4cGxhbmF0aW9uOgorICAgICAgICBaZXJvLWxlbmd0aC1zdWJw
YXRocyBhcmUgZHJhd24gdXNpbmcgcmVjdGFuZ3VsYXIgYW5kIGNpcmN1bGFyIHBhdGhzIHdoaWNo
CisgICAgICAgIGFyZSBmaWxsZWQuCisgICAgICAgIFByZXZpb3VzbHkgaW4gUmVuZGVyU1ZHU2hh
cGU6OmZpbGxBbmRTdHJva2VQYXRoLCBzdHJva2VQYXRoIHdhcyBjYWxsZWQgZm9yCisgICAgICAg
IHRoZSBtYWluIHBhdGggd2l0aCBBcHBseVRvU3Ryb2tlTW9kZSBhbmQgdGhlbiBzdHJva2VQYXRo
IHdhcyBjYWxsZWQgZm9yCisgICAgICAgIGVhY2ggemVyby1sZW5ndGgtc3VicGF0aCB3aXRoIEFw
cGx5VG9GaWxsTW9kZS4KKyAgICAgICAgQXBwbHlUb0ZpbGxNb2RlIGhhZCB0aGUgZWZmZWN0IG9m
IHNldHRpbmcgdGhlIGNvbnRleHQncyBzdHJva2Ugc3R5bGUgdG8KKyAgICAgICAgdGhlIGZpbGwg
c3R5bGUgc28gemVyby1sZW5ndGgtc3VicGF0aHMgd2VyZSAiZmlsbGVkIiB3aXRoIHRoZSBzdHJv
a2Ugc3R5bGUuCisgICAgICAgIEFmdGVyIHRoaXMgcGF0Y2gsIHRoZSBjb250ZXh0IGlzIG9ubHkg
c2V0dXAgb25jZSAod2hpY2ggaXMgZmFzdGVyISkgdXNpbmcKKyAgICAgICAgQXBwbHlUb1N0cm9r
ZU1vZGUgc28gd2UgbWFudWFsbHkgc2V0IHRoZSBzdHJva2Ugc3R5bGUgdG8gdGhlIGZpbGwgc3R5
bGUKKyAgICAgICAgdXNpbmcgdXNlU3Ryb2tlU3R5bGVUb0ZpbGwuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLCBqdXN0IGEgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUGF0aDo6Y3JlYXRl
U2hhcGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQ
YXRoOjpzdHJva2VCb3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjp1c2VTdHJva2VTdHls
ZVRvRmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRoOjpzdHJva2VTaGFwZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRoOjpzaGFwZURlcGVuZGVudFN0cm9rZUNv
bnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1BhdGg6OnNob3VsZFN0cm9rZVpl
cm9MZW5ndGhTdWJwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1BhdGg6Onplcm9M
ZW5ndGhTdWJwYXRoUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRoOjp6ZXJv
TGVuZ3RoTGluZWNhcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUGF0aDo6cHJv
Y2Vzc1plcm9MZW5ndGhTdWJwYXRocyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdQYXRoLmg6CisgICAgICAgIChSZW5kZXJTVkdQYXRoKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1NoYXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBl
OjpjcmVhdGVTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6b2JqZWN0
Qm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdTaGFwZTo6c3Ryb2tlQm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHU2hhcGU6OnN0cm9rZVNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBl
OjpzdHJva2VDb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6Zmls
bFNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpmaWxsQW5kU3Ryb2tl
U2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjp1cGRhdGVDYWNoZWRCb3VuZGFyaWVzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmg6CisgICAgICAgIChSZW5kZXJT
VkdTaGFwZSk6CisKIDIwMTItMDctMDYgIExhdXJvIE5ldG8gIDxsYXVyby5uZXRvQG9wZW5ib3Nz
YS5vcmc+CiAKICAgICAgICAgW1F0XSBBdm9pZCBkZWVwIGNvcHkgb2YgUUltYWdlIGluIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCShyZXZpc2lvbiAxMjIwNDUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgogI2luY2x1
ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHU3VicGF0
aERhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NCw2ICs0NSwxMjYgQEAgUmVu
ZGVyU1ZHUGF0aDo6flJlbmRlclNWR1BhdGgoKQogewogfQogCit2b2lkIFJlbmRlclNWR1BhdGg6
OmNyZWF0ZVNoYXBlKCkKK3sKKyAgICBSZW5kZXJTVkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKKyAg
ICBwcm9jZXNzWmVyb0xlbmd0aFN1YnBhdGhzKCk7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdQ
YXRoOjpzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IHN0cm9rZUJv
dW5kaW5nQm94ID0gUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KCk7CisKKyAgICBj
b25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworICAg
IGlmIChzdmdTdHlsZS0+aGFzU3Ryb2tlKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IHplcm8tbGVu
Z3RoIHN1YnBhdGhzIGRvIG5vdCByZXNwZWN0IHZlY3Rvci1lZmZlY3QgPSBub24tc2NhbGluZy1z
dHJva2UuCisgICAgICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gdGhpcy0+c3Ryb2tlV2lkdGgoKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRp
b25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgc3Ryb2tlQm91bmRpbmdCb3gudW5pdGUoemVy
b0xlbmd0aFN1YnBhdGhSZWN0KG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnNbaV0sIHN0cm9r
ZVdpZHRoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHN0cm9rZUJvdW5kaW5nQm94OworfQorCitz
dGF0aWMgdm9pZCB1c2VTdHJva2VTdHlsZVRvRmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQp
Cit7CisgICAgaWYgKEdyYWRpZW50KiBncmFkaWVudCA9IGNvbnRleHQtPnN0cm9rZUdyYWRpZW50
KCkpCisgICAgICAgIGNvbnRleHQtPnNldEZpbGxHcmFkaWVudChncmFkaWVudCk7CisgICAgZWxz
ZSBpZiAoUGF0dGVybiogcGF0dGVybiA9IGNvbnRleHQtPnN0cm9rZVBhdHRlcm4oKSkKKyAgICAg
ICAgY29udGV4dC0+c2V0RmlsbFBhdHRlcm4ocGF0dGVybik7CisgICAgZWxzZQorICAgICAgICBj
b250ZXh0LT5zZXRGaWxsQ29sb3IoY29udGV4dC0+c3Ryb2tlQ29sb3IoKSwgY29udGV4dC0+c3Ry
b2tlQ29sb3JTcGFjZSgpKTsKK30KKwordm9pZCBSZW5kZXJTVkdQYXRoOjpzdHJva2VTaGFwZShH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKCFzdHlsZSgpLT5zdmdT
dHlsZSgpLT5oYXNWaXNpYmxlU3Ryb2tlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRl
clNWR1NoYXBlOjpzdHJva2VTaGFwZShjb250ZXh0KTsKKworICAgIGlmIChtX3plcm9MZW5ndGhM
aW5lY2FwTG9jYXRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGF0aCog
dXNlUGF0aDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1RyYW5zZm9ybTsKKworICAg
IGlmIChoYXNOb25TY2FsaW5nU3Ryb2tlKCkpCisgICAgICAgIG5vblNjYWxpbmdUcmFuc2Zvcm0g
PSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKCk7CisKKyAgICBjb250ZXh0LT5zYXZlKCk7Cisg
ICAgdXNlU3Ryb2tlU3R5bGVUb0ZpbGwoY29udGV4dCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAg
IHVzZVBhdGggPSB6ZXJvTGVuZ3RoTGluZWNhcFBhdGgobV96ZXJvTGVuZ3RoTGluZWNhcExvY2F0
aW9uc1tpXSk7CisgICAgICAgIGlmIChoYXNOb25TY2FsaW5nU3Ryb2tlKCkpCisgICAgICAgICAg
ICB1c2VQYXRoID0gbm9uU2NhbGluZ1N0cm9rZVBhdGgodXNlUGF0aCwgbm9uU2NhbGluZ1RyYW5z
Zm9ybSk7CisgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCp1c2VQYXRoKTsKKyAgICB9CisgICAg
Y29udGV4dC0+cmVzdG9yZSgpOworfQorCitib29sIFJlbmRlclNWR1BhdGg6OnNoYXBlRGVwZW5k
ZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAg
aWYgKFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKHBvaW50KSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5
bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV96
ZXJvTGVuZ3RoTGluZWNhcExvY2F0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBBU1NFUlQo
c3ZnU3R5bGUtPmhhc1N0cm9rZSgpKTsKKyAgICAgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSB0aGlz
LT5zdHJva2VXaWR0aCgpOworICAgICAgICBpZiAoc3ZnU3R5bGUtPmNhcFN0eWxlKCkgPT0gU3F1
YXJlQ2FwKSB7CisgICAgICAgICAgICBpZiAoemVyb0xlbmd0aFN1YnBhdGhSZWN0KG1femVyb0xl
bmd0aExpbmVjYXBMb2NhdGlvbnNbaV0sIHN0cm9rZVdpZHRoKS5jb250YWlucyhwb2ludCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBBU1NFUlQoc3ZnU3R5bGUtPmNhcFN0eWxlKCkgPT0gUm91bmRDYXApOworICAgICAgICAgICAg
RmxvYXRQb2ludCByYWRpdXNWZWN0b3IocG9pbnQueCgpIC0gbV96ZXJvTGVuZ3RoTGluZWNhcExv
Y2F0aW9uc1tpXS54KCksIHBvaW50LnkoKSAtICBtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRpb25z
W2ldLnkoKSk7CisgICAgICAgICAgICBpZiAocmFkaXVzVmVjdG9yLmxlbmd0aFNxdWFyZWQoKSA8
IHN0cm9rZVdpZHRoICogc3Ryb2tlV2lkdGggKiAuMjVmKQorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBS
ZW5kZXJTVkdQYXRoOjpzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0Cit7Cisg
ICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hhbGwgbm90IGJlIHN0
cm9rZWQgaWYgdGhlICJzdHJva2UtbGluZWNhcCIgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2YgYnV0
dAorICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSAic3Ryb2tlLWxpbmVjYXAiIHBy
b3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQorICAgIHJldHVybiBzdHlsZSgp
LT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSAmJiBzdHlsZSgpLT5zdmdTdHlsZSgpLT5jYXBTdHls
ZSgpICE9IEJ1dHRDYXA7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdQYXRoOjp6ZXJvTGVuZ3Ro
U3VicGF0aFJlY3QoY29uc3QgRmxvYXRQb2ludCYgbGluZWNhcFBvc2l0aW9uLCBmbG9hdCBzdHJv
a2VXaWR0aCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KGxpbmVjYXBQb3NpdGlvbi54
KCkgLSBzdHJva2VXaWR0aCAvIDIsIGxpbmVjYXBQb3NpdGlvbi55KCkgLSBzdHJva2VXaWR0aCAv
IDIsIHN0cm9rZVdpZHRoLCBzdHJva2VXaWR0aCk7Cit9CisKK1BhdGgqIFJlbmRlclNWR1BhdGg6
Onplcm9MZW5ndGhMaW5lY2FwUGF0aChjb25zdCBGbG9hdFBvaW50JiBsaW5lY2FwUG9zaXRpb24p
IGNvbnN0Cit7CisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hh
bGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlICJzdHJva2UtbGluZWNhcCIgcHJvcGVydHkgaGFzIGEg
dmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSAic3Ryb2tl
LWxpbmVjYXAiIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQorICAgIERF
RklORV9TVEFUSUNfTE9DQUwoUGF0aCwgdGVtcFBhdGgsICgpKTsKKworICAgIHRlbXBQYXRoLmNs
ZWFyKCk7CisgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgpOworICAg
IGlmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpID09IFNxdWFyZUNhcCkKKyAgICAg
ICAgdGVtcFBhdGguYWRkUmVjdCh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QobGluZWNhcFBvc2l0aW9u
LCBzdHJva2VXaWR0aCkpOworICAgIGVsc2UKKyAgICAgICAgdGVtcFBhdGguYWRkRWxsaXBzZSh6
ZXJvTGVuZ3RoU3VicGF0aFJlY3QobGluZWNhcFBvc2l0aW9uLCBzdHJva2VXaWR0aCkpOworCisg
ICAgcmV0dXJuICZ0ZW1wUGF0aDsKK30KKwordm9pZCBSZW5kZXJTVkdQYXRoOjpwcm9jZXNzWmVy
b0xlbmd0aFN1YnBhdGhzKCkKK3sKKyAgICBtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zLmNs
ZWFyKCk7CisKKyAgICBpZiAoIXN0cm9rZVdpZHRoKCkgfHwgIXNob3VsZFN0cm9rZVplcm9MZW5n
dGhTdWJwYXRoKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNWR1N1YnBhdGhEYXRhIHN1YnBh
dGhEYXRhKG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnMpOworICAgIHBhdGgoKS5hcHBseSgm
c3VicGF0aERhdGEsIFNWR1N1YnBhdGhEYXRhOjp1cGRhdGVGcm9tUGF0aEVsZW1lbnQpOworICAg
IHN1YnBhdGhEYXRhLnBhdGhJc0RvbmUoKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFNW
RykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5o
CShyZXZpc2lvbiAxMjIwNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksMjAgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdQYXRoKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJS
ZW5kZXJTVkdQYXRoIjsgfQorCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYXBlKCk7CisKKyAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgc2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29u
c3Q7CisKKyAgICBib29sIHNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3Q7Cisg
ICAgdm9pZCBwcm9jZXNzWmVyb0xlbmd0aFN1YnBhdGhzKCk7CisgICAgUGF0aCogemVyb0xlbmd0
aExpbmVjYXBQYXRoKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBGbG9hdFJlY3QgemVy
b0xlbmd0aFN1YnBhdGhSZWN0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlv
bnM7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1NoYXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1NoYXBlLmNwcAkocmV2aXNpb24gMTIyMDQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDYgQEAKICNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKICNpbmNsdWRlICJTVkdSZXNvdXJjZXND
YWNoZS5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCi0jaW5j
bHVkZSAiU1ZHU3VicGF0aERhdGEuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAj
aW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVy
LmgiCkBAIC03Myw3ICs3Miw2IEBAIHZvaWQgUmVuZGVyU1ZHU2hhcGU6OmNyZWF0ZVNoYXBlKCkK
IAogICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nh
c3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkpOwogICAgIHVwZGF0ZVBh
dGhGcm9tR3JhcGhpY3NFbGVtZW50KGVsZW1lbnQsIHBhdGgoKSk7Ci0gICAgcHJvY2Vzc1plcm9M
ZW5ndGhTdWJwYXRocygpOwogICAgIHByb2Nlc3NNYXJrZXJQb3NpdGlvbnMoKTsKIH0KIApAQCAt
ODksMTMgKzg3LDQ3IEBAIHZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFwZShHcmFwaGljc0MK
IAogRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBlOjpvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fcGF0aC0+ZmFzdEJvdW5kaW5nUmVjdCgpOworICAgIHJldHVybiBwYXRo
KCkuZmFzdEJvdW5kaW5nUmVjdCgpOworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6OnN0
cm9rZUJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wYXRoKTsKKyAgICBGbG9h
dFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3g7CisKKyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3Zn
U3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworICAgIGlmIChzdmdTdHlsZS0+aGFzU3Ryb2tl
KCkpIHsKKyAgICAgICAgQm91bmRpbmdSZWN0U3Ryb2tlU3R5bGVBcHBsaWVyIHN0cm9rZVN0eWxl
KHRoaXMsIHN0eWxlKCkpOworICAgICAgICBpZiAoaGFzTm9uU2NhbGluZ1N0cm9rZSgpKSB7Cisg
ICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1RyYW5zZm9ybSA9IG5vblNjYWxp
bmdTdHJva2VUcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIGlmIChub25TY2FsaW5nVHJhbnNmb3Jt
LmlzSW52ZXJ0aWJsZSgpKSB7CisgICAgICAgICAgICAgICAgUGF0aCogdXNlUGF0aCA9IG5vblNj
YWxpbmdTdHJva2VQYXRoKG1fcGF0aC5nZXQoKSwgbm9uU2NhbGluZ1RyYW5zZm9ybSk7CisgICAg
ICAgICAgICAgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nUmVjdCA9IHVzZVBhdGgtPnN0cm9r
ZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5bGUpOworICAgICAgICAgICAgICAgIHN0cm9rZUJvdW5k
aW5nUmVjdCA9IG5vblNjYWxpbmdUcmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFJlY3Qoc3Ryb2tlQm91
bmRpbmdSZWN0KTsKKyAgICAgICAgICAgICAgICBzdHJva2VCb3VuZGluZ0JveC51bml0ZShzdHJv
a2VCb3VuZGluZ1JlY3QpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHN0cm9rZUJvdW5kaW5nQm94LnVuaXRlKHBhdGgoKS5zdHJva2VCb3VuZGluZ1JlY3QoJnN0
cm9rZVN0eWxlKSk7CisgICAgfQorCisgICAgaWYgKCFtX21hcmtlclBvc2l0aW9ucy5pc0VtcHR5
KCkpCisgICAgICAgIHN0cm9rZUJvdW5kaW5nQm94LnVuaXRlKG1hcmtlclJlY3Qoc3Ryb2tlV2lk
dGgoKSkpOworCisgICAgcmV0dXJuIHN0cm9rZUJvdW5kaW5nQm94OwogfQogCiB2b2lkIFJlbmRl
clNWR1NoYXBlOjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7
Ci0gICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1Zpc2libGVTdHJva2UoKSkKLSAgICAg
ICAgY29udGV4dC0+c3Ryb2tlUGF0aChwYXRoKCkpOworICAgIEFTU0VSVChtX3BhdGgpOworICAg
IGlmICghc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzVmlzaWJsZVN0cm9rZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBQYXRoKiB1c2VQYXRoID0gbV9wYXRoLmdldCgpOworCisgICAgaWYgKGhh
c05vblNjYWxpbmdTdHJva2UoKSkKKyAgICAgICAgdXNlUGF0aCA9IG5vblNjYWxpbmdTdHJva2VQ
YXRoKHVzZVBhdGgsIG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0oKSk7CisKKyAgICBjb250ZXh0
LT5zdHJva2VQYXRoKCp1c2VQYXRoKTsKIH0KIAogYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2hhcGVE
ZXBlbmRlbnRTdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKQEAg
LTEzMywzNCArMTY1LDE3IEBAIGJvb2wgUmVuZGVyU1ZHU2hhcGU6OmZpbGxDb250YWlucyhjb25z
dCAKIAogYm9vbCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGJvb2wgcmVxdWlyZXNTdHJva2UpCiB7Ci0gICAgaWYgKCFzdHJva2VCb3VuZGlu
Z0JveCgpLmNvbnRhaW5zKHBvaW50KSkKKyAgICBpZiAoIW1fc3Ryb2tlQm91bmRpbmdCb3guY29u
dGFpbnMocG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBDb2xvciBmYWxsYmFj
a0NvbG9yOwogICAgIGlmIChyZXF1aXJlc1N0cm9rZSAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6OnN0
cm9rZVBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9
IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3plcm9M
ZW5ndGhMaW5lY2FwTG9jYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEFTU0VSVChzdHls
ZSgpLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSk7Ci0gICAgICAgIGZsb2F0IHN0cm9rZVdpZHRo
ID0gdGhpcy0+c3Ryb2tlV2lkdGgoKTsKLSAgICAgICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxlKCkt
PmNhcFN0eWxlKCkgPT0gU3F1YXJlQ2FwKSB7Ci0gICAgICAgICAgICBpZiAoemVyb0xlbmd0aFN1
YnBhdGhSZWN0KG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnNbaV0sIHN0cm9rZVdpZHRoKS5j
b250YWlucyhwb2ludCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUo
KSA9PSBSb3VuZENhcCk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHJhZGl1c1ZlY3Rvcihwb2lu
dC54KCkgLSBtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zW2ldLngoKSwgcG9pbnQueSgpIC0g
IG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnNbaV0ueSgpKTsKLSAgICAgICAgICAgIGlmIChy
YWRpdXNWZWN0b3IubGVuZ3RoU3F1YXJlZCgpIDwgc3Ryb2tlV2lkdGggKiBzdHJva2VXaWR0aCAq
IC4yNWYpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoIXN2Z1N0eWxlLT5zdHJva2VEYXNoQXJyYXkoKS5pc0VtcHR5KCkgfHwgc3ZnU3R5
bGUtPnN0cm9rZU1pdGVyTGltaXQoKSAhPSBzdmdTdHlsZS0+aW5pdGlhbFN0cm9rZU1pdGVyTGlt
aXQoKQotICAgICAgICB8fCBzdmdTdHlsZS0+am9pblN0eWxlKCkgIT0gc3ZnU3R5bGUtPmluaXRp
YWxKb2luU3R5bGUoKSB8fCBzdmdTdHlsZS0+Y2FwU3R5bGUoKSAhPSBzdmdTdHlsZS0+aW5pdGlh
bENhcFN0eWxlKCkpIHsKLSAgICAgICAgaWYgKCFtX3BhdGgpCi0gICAgICAgICAgICBSZW5kZXJT
VkdTaGFwZTo6Y3JlYXRlU2hhcGUoKTsKLSAgICAgICAgcmV0dXJuIFJlbmRlclNWR1NoYXBlOjpz
aGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKHBvaW50KTsKLSAgICB9CisvKgorQ29kZSBSZW1v
dmVkIGluIFdLOTA1MTQKK05vdGU6IHN2Zy9jdXN0b20vcG9pbnRlci1ldmVudHMtd2l0aC1saW5l
Y2Fwcy1hbmQtbWl0ZXJsaW1pdHMueGh0bWwgd2lsbCBmYWlsIHdpdGhvdXQgV0s5MDUxNAorKi8K
ICAgICByZXR1cm4gc2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhwb2ludCk7CiB9CiAKQEAg
LTIzMSwxMyArMjQ2LDYgQEAgQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1NoYXBlOjpub25TY2Fs
aQogICAgIHJldHVybiBlbGVtZW50LT5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxv
d1N0eWxlVXBkYXRlKTsKIH0KIAotYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2hvdWxkU3Ryb2tlWmVy
b0xlbmd0aFN1YnBhdGgoKSBjb25zdAotewotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxl
bmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSAic3Ryb2tlLWxpbmVjYXAi
IHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tl
ZCBpZiB0aGUgInN0cm9rZS1saW5lY2FwIiBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBv
ciBzcXVhcmUKLSAgICByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgJiYg
c3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSAhPSBCdXR0Q2FwOwotfQotCiBib29sIFJl
bmRlclNWR1NoYXBlOjpzaG91bGRHZW5lcmF0ZU1hcmtlclBvc2l0aW9ucygpIGNvbnN0CiB7CiAg
ICAgaWYgKCFzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNNYXJrZXJzKCkpCkBAIC0yNTQsNTAgKzI2
MiwyOSBAQCBib29sIFJlbmRlclNWR1NoYXBlOjpzaG91bGRHZW5lcmF0ZU1hcmtlCiAgICAgcmV0
dXJuIHJlc291cmNlcy0+bWFya2VyU3RhcnQoKSB8fCByZXNvdXJjZXMtPm1hcmtlck1pZCgpIHx8
IHJlc291cmNlcy0+bWFya2VyRW5kKCk7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6
emVyb0xlbmd0aFN1YnBhdGhSZWN0KGNvbnN0IEZsb2F0UG9pbnQmIGxpbmVjYXBQb3NpdGlvbiwg
ZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChsaW5lY2Fw
UG9zaXRpb24ueCgpIC0gc3Ryb2tlV2lkdGggLyAyLCBsaW5lY2FwUG9zaXRpb24ueSgpIC0gc3Ry
b2tlV2lkdGggLyAyLCBzdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgpOwotfQotCi1QYXRoKiBSZW5k
ZXJTVkdTaGFwZTo6emVyb0xlbmd0aExpbmVjYXBQYXRoKGNvbnN0IEZsb2F0UG9pbnQmIGxpbmVj
YXBQb3NpdGlvbikKLXsKLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0
aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUgInN0cm9rZS1saW5lY2FwIiBwcm9wZXJ0eSBo
YXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlICJz
dHJva2UtbGluZWNhcCIgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYXRoLCB0ZW1wUGF0aCwgKCkpOwotCi0gICAgdGVtcFBh
dGguY2xlYXIoKTsKLSAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHRoaXMtPnN0cm9rZVdpZHRoKCk7
Ci0gICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gU3F1YXJlQ2FwKQot
ICAgICAgICB0ZW1wUGF0aC5hZGRSZWN0KHplcm9MZW5ndGhTdWJwYXRoUmVjdChsaW5lY2FwUG9z
aXRpb24sIHN0cm9rZVdpZHRoKSk7Ci0gICAgZWxzZQotICAgICAgICB0ZW1wUGF0aC5hZGRFbGxp
cHNlKHplcm9MZW5ndGhTdWJwYXRoUmVjdChsaW5lY2FwUG9zaXRpb24sIHN0cm9rZVdpZHRoKSk7
Ci0KLSAgICByZXR1cm4gJnRlbXBQYXRoOwotfQotCi12b2lkIFJlbmRlclNWR1NoYXBlOjpmaWxs
U2hhcGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFBhdGgq
IHBhdGgsIFJlbmRlclNWR1NoYXBlKiBzaGFwZSkKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxT
aGFwZShSZW5kZXJTdHlsZSogc3R5bGUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKIHsKICAg
ICBDb2xvciBmYWxsYmFja0NvbG9yOwogICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBh
aW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2Uo
dGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpKSB7CiAgICAgICAgIGlmIChmaWxsUGFpbnRpbmdS
ZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxN
b2RlKSkKLSAgICAgICAgICAgIGZpbGxQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJj
ZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUsIHBhdGgsIHNoYXBlKTsKKyAgICAgICAg
ICAgIGZpbGxQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0
LCBBcHBseVRvRmlsbE1vZGUsIDAsIHRoaXMpOwogICAgICAgICBlbHNlIGlmIChmYWxsYmFja0Nv
bG9yLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9y
KiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRp
bmdSZXNvdXJjZSgpOwogICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFs
bGJhY2tDb2xvcik7CiAgICAgICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNv
dXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAgICAg
ICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBB
cHBseVRvRmlsbE1vZGUsIHBhdGgsIHNoYXBlKTsKKyAgICAgICAgICAgICAgICBmYWxsYmFja1Jl
c291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUs
IDAsIHRoaXMpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFJlbmRlclNWR1NoYXBlOjpz
dHJva2VQYXRoKFJlbmRlclN0eWxlKiBzdHlsZSwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBQ
YXRoKiBwYXRoLCBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSwKK3Zv
aWQgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKFJlbmRlclN0eWxlKiBzdHlsZSwgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNv
dXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29sb3ImIGZhbGxi
YWNrQ29sb3IsIGludCBhcHBseU1vZGUpCiB7CiAgICAgaWYgKCFzdHlsZS0+c3ZnU3R5bGUoKS0+
aGFzVmlzaWJsZVN0cm9rZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc3Ryb2tlUGFp
bnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgYXBwbHlN
b2RlKSkgewotICAgICAgICBzdHJva2VQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJj
ZSh0aGlzLCBjb250ZXh0LCBhcHBseU1vZGUsIHBhdGgsIHRoaXMpOworICAgICAgICBzdHJva2VQ
YWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBseU1v
ZGUsIDAsIHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMDcsMjEgKzI5NCwy
MCBAQCB2b2lkIFJlbmRlclNWR1NoYXBlOjpzdHJva2VQYXRoKFJlbmRlclN0CiAgICAgUmVuZGVy
U1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3Vy
Y2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOwogICAgIGZhbGxiYWNrUmVzb3VyY2Ut
PnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOwogICAgIGlmIChmYWxsYmFja1Jlc291cmNlLT5hcHBs
eVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUpKQotICAgICAgICBmYWxs
YmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBseU1vZGUs
IHBhdGgsIHRoaXMpOworICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJj
ZSh0aGlzLCBjb250ZXh0LCBhcHBseU1vZGUsIDAsIHRoaXMpOwogfQogCi12b2lkIFJlbmRlclNW
R1NoYXBlOjpmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit2b2lk
IFJlbmRlclNWR1NoYXBlOjpmaWxsQW5kU3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0KQogewogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRoaXMtPnN0eWxlKCk7CiAKLSAgICBm
aWxsU2hhcGUoc3R5bGUsIGNvbnRleHQsIDAsIHRoaXMpOworICAgIGZpbGxTaGFwZShzdHlsZSwg
Y29udGV4dCk7CiAKICAgICBDb2xvciBmYWxsYmFja0NvbG9yID0gQ29sb3IoKTsKICAgICBSZW5k
ZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNl
OjpzdHJva2VQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKTsKICAg
ICBpZiAoIXN0cm9rZVBhaW50aW5nUmVzb3VyY2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFBh
dGgqIHVzZVBhdGggPSBtX3BhdGguZ2V0KCk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKCpjb250ZXh0LCBmYWxzZSk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG5vblNj
YWxpbmdUcmFuc2Zvcm07CiAKQEAgLTMyOSwxOSArMzE1LDkgQEAgdm9pZCBSZW5kZXJTVkdTaGFw
ZTo6ZmlsbEFuZFN0cm9rZVBhdGgoRwogICAgICAgICBub25TY2FsaW5nVHJhbnNmb3JtID0gbm9u
U2NhbGluZ1N0cm9rZVRyYW5zZm9ybSgpOwogICAgICAgICBpZiAoIXNldHVwTm9uU2NhbGluZ1N0
cm9rZUNvbnRleHQobm9uU2NhbGluZ1RyYW5zZm9ybSwgc3RhdGVTYXZlcikpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIHVzZVBhdGggPSBub25TY2FsaW5nU3Ryb2tlUGF0aCh1c2VQYXRo
LCBub25TY2FsaW5nVHJhbnNmb3JtKTsKICAgICB9CiAKLSAgICBzdHJva2VQYXRoKHN0eWxlLCBj
b250ZXh0LCB1c2VQYXRoLCBzdHJva2VQYWludGluZ1Jlc291cmNlLCBmYWxsYmFja0NvbG9yLCBB
cHBseVRvU3Ryb2tlTW9kZSk7Ci0KLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGgg
c3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUgInN0cm9rZS1saW5lY2FwIiBwcm9w
ZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYg
dGhlICJzdHJva2UtbGluZWNhcCIgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1
YXJlCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRp
b25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFBhdGgqIHVzZVBhdGggPSB6ZXJvTGVuZ3RoTGlu
ZWNhcFBhdGgobV96ZXJvTGVuZ3RoTGluZWNhcExvY2F0aW9uc1tpXSk7Ci0gICAgICAgIGlmICho
YXNOb25TY2FsaW5nU3Ryb2tlKCkpCi0gICAgICAgICAgICB1c2VQYXRoID0gbm9uU2NhbGluZ1N0
cm9rZVBhdGgodXNlUGF0aCwgbm9uU2NhbGluZ1RyYW5zZm9ybSk7Ci0gICAgICAgIHN0cm9rZVBh
dGgoc3R5bGUsIGNvbnRleHQsIHVzZVBhdGgsIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UsIGZhbGxi
YWNrQ29sb3IsIEFwcGx5VG9GaWxsTW9kZSk7Ci0gICAgfQorICAgIHN0cm9rZVNoYXBlKHN0eWxl
LCBjb250ZXh0LCBzdHJva2VQYWludGluZ1Jlc291cmNlLCBmYWxsYmFja0NvbG9yLCBBcHBseVRv
U3Ryb2tlTW9kZSk7CiB9CiAKIHZvaWQgUmVuZGVyU1ZHU2hhcGU6OnBhaW50KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYpCkBAIC0zNjYsNyArMzQyLDcgQEAgdm9pZCBS
ZW5kZXJTVkdTaGFwZTo6cGFpbnQoUGFpbnRJbmZvJiBwYQogICAgICAgICAgICAgICAgIGlmIChz
dmdTdHlsZS0+c2hhcGVSZW5kZXJpbmcoKSA9PSBTUl9DUklTUEVER0VTKQogICAgICAgICAgICAg
ICAgICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2Up
OwogCi0gICAgICAgICAgICAgICAgZmlsbEFuZFN0cm9rZVBhdGgoY2hpbGRQYWludEluZm8uY29u
dGV4dCk7CisgICAgICAgICAgICAgICAgZmlsbEFuZFN0cm9rZVNoYXBlKGNoaWxkUGFpbnRJbmZv
LmNvbnRleHQpOwogICAgICAgICAgICAgICAgIGlmICghbV9tYXJrZXJQb3NpdGlvbnMuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgICAgICBkcmF3TWFya2VycyhjaGlsZFBhaW50SW5mbyk7CiAg
ICAgICAgICAgICB9CkBAIC00NTMsMjYgKzQyOSwyMCBAQCB2b2lkIFJlbmRlclNWR1NoYXBlOjp1
cGRhdGVDYWNoZWRCb3VuZGFyCiB7CiAgICAgaWYgKGlzRW1wdHkoKSkgewogICAgICAgICBtX2Zp
bGxCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJv
dW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7CisgICAgICAgIG1fc3Ryb2tlQm91bmRpbmdCb3ggPSBG
bG9hdFJlY3QoKTsKICAgICAgICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIGZpbGwg
Ym91bmRpbmcgYm94LCB1c2VkIGZvciBjYWxjdWxhdGlvbnMgaW4gcmVzb3VyY2VzCisgICAgLy8g
Q2FjaGUgX3VuY2xpcHBlZF8gZmlsbCBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9u
cyBpbiByZXNvdXJjZXMuCiAgICAgbV9maWxsQm91bmRpbmdCb3ggPSBvYmplY3RCb3VuZGluZ0Jv
eCgpOwogCi0gICAgLy8gQWRkIHplcm8tbGVuZ3RoIHN1Yi1wYXRoIGxpbmVjYXBzIHRvIHRoZSBm
aWxsIGJveAotICAgIC8vIEZJWE1FOiB6ZXJvLWxlbmd0aCBzdWJwYXRocyBkbyBub3QgcmVzcGVj
dCB2ZWN0b3ItZWZmZWN0ID0gbm9uLXNjYWxpbmctc3Ryb2tlLgotICAgIGZsb2F0IHN0cm9rZVdp
ZHRoID0gdGhpcy0+c3Ryb2tlV2lkdGgoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
emVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fZmlsbEJv
dW5kaW5nQm94LnVuaXRlKHplcm9MZW5ndGhTdWJwYXRoUmVjdChtX3plcm9MZW5ndGhMaW5lY2Fw
TG9jYXRpb25zW2ldLCBzdHJva2VXaWR0aCkpOworICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIHN0
cm9rZSBib3VuZGluZyBib3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMgKGlu
Y2x1ZGVzIG1hcmtlciBib3VuZGFyaWVzKS4KKyAgICBtX3N0cm9rZUJvdW5kaW5nQm94ID0gbV9m
aWxsQm91bmRpbmdCb3g7CisgICAgbV9zdHJva2VCb3VuZGluZ0JveC51bml0ZShzdHJva2VCb3Vu
ZGluZ0JveCgpKTsKIAotICAgIC8vIENhY2hlIF91bmNsaXBwZWRfIHN0cm9rZSBib3VuZGluZyBi
b3gsIHVzZWQgZm9yIGNhbGN1bGF0aW9ucyBpbiByZXNvdXJjZXMgKGluY2x1ZGVzIG1hcmtlciBi
b3VuZGFyaWVzKQotICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3ggPSBtX2ZpbGxCb3Vu
ZGluZ0JveDsKLSAgICBpZiAoaGFzUGF0aCgpKQotICAgICAgICBpbmZsYXRlV2l0aFN0cm9rZUFu
ZE1hcmtlckJvdW5kcygpOwotICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFpbnQg
cmVjdGFuZ2xlCi0gICAgbV9yZXBhaW50Qm91bmRpbmdCb3ggPSBzdHJva2VCb3VuZGluZ0JveCgp
OworICAgIC8vIENhY2hlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcGFpbnQgcmVwYWludCByZWN0Lgor
ICAgIG1fcmVwYWludEJvdW5kaW5nQm94ID0gbV9zdHJva2VCb3VuZGluZ0JveDsKICAgICBTVkdS
ZW5kZXJTdXBwb3J0OjppbnRlcnNlY3RSZXBhaW50UmVjdFdpdGhSZXNvdXJjZXModGhpcywgbV9y
ZXBhaW50Qm91bmRpbmdCb3gpOwogfQogCkBAIC00ODMsMjggKzQ1Myw2IEBAIGZsb2F0IFJlbmRl
clNWR1NoYXBlOjpzdHJva2VXaWR0aCgpIGNvbnMKICAgICByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5
bGUoKS0+c3Ryb2tlV2lkdGgoKS52YWx1ZShsZW5ndGhDb250ZXh0KTsKIH0KIAotdm9pZCBSZW5k
ZXJTVkdTaGFwZTo6aW5mbGF0ZVdpdGhTdHJva2VBbmRNYXJrZXJCb3VuZHMoKQotewotICAgIGNv
bnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAg
aWYgKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSkgewotICAgICAgICBCb3VuZGluZ1JlY3RTdHJva2VT
dHlsZUFwcGxpZXIgc3Ryb2tlU3R5bGUodGhpcywgc3R5bGUoKSk7Ci0KLSAgICAgICAgLy8gU1ZH
MS4yIFRpbnkgb25seSBkZWZpbmVzIG5vbiBzY2FsaW5nIHN0cm9rZSBmb3IgdGhlIHN0cm9rZSBi
dXQgbm90IG1hcmtlcnMuCi0gICAgICAgIGlmIChoYXNOb25TY2FsaW5nU3Ryb2tlKCkpIHsKLSAg
ICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5nVHJhbnNmb3JtID0gbm9uU2NhbGlu
Z1N0cm9rZVRyYW5zZm9ybSgpOwotICAgICAgICAgICAgaWYgKG5vblNjYWxpbmdUcmFuc2Zvcm0u
aXNJbnZlcnRpYmxlKCkpIHsKLSAgICAgICAgICAgICAgICBQYXRoKiB1c2VQYXRoID0gbm9uU2Nh
bGluZ1N0cm9rZVBhdGgobV9wYXRoLmdldCgpLCBub25TY2FsaW5nVHJhbnNmb3JtKTsKLSAgICAg
ICAgICAgICAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdSZWN0ID0gdXNlUGF0aC0+c3Ryb2tl
Qm91bmRpbmdSZWN0KCZzdHJva2VTdHlsZSk7Ci0gICAgICAgICAgICAgICAgc3Ryb2tlQm91bmRp
bmdSZWN0ID0gbm9uU2NhbGluZ1RyYW5zZm9ybS5pbnZlcnNlKCkubWFwUmVjdChzdHJva2VCb3Vu
ZGluZ1JlY3QpOwotICAgICAgICAgICAgICAgIG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3gu
dW5pdGUoc3Ryb2tlQm91bmRpbmdSZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5nQm94LnVuaXRlKHBhdGgoKS5z
dHJva2VCb3VuZGluZ1JlY3QoJnN0cm9rZVN0eWxlKSk7Ci0gICAgfQotICAgIGlmICghbV9tYXJr
ZXJQb3NpdGlvbnMuaXNFbXB0eSgpKQotICAgICAgICBtX3N0cm9rZUFuZE1hcmtlckJvdW5kaW5n
Qm94LnVuaXRlKG1hcmtlclJlY3Qoc3Ryb2tlV2lkdGgoKSkpOwotfQotCiB2b2lkIFJlbmRlclNW
R1NoYXBlOjpkcmF3TWFya2VycyhQYWludEluZm8mIHBhaW50SW5mbykKIHsKICAgICBBU1NFUlQo
IW1fbWFya2VyUG9zaXRpb25zLmlzRW1wdHkoKSk7CkBAIC01MjcsMjEgKzQ3NSw2IEBAIHZvaWQg
UmVuZGVyU1ZHU2hhcGU6OmRyYXdNYXJrZXJzKFBhaW50SW4KICAgICB9CiB9CiAKLXZvaWQgUmVu
ZGVyU1ZHU2hhcGU6OnByb2Nlc3NaZXJvTGVuZ3RoU3VicGF0aHMoKQotewotICAgIG1femVyb0xl
bmd0aExpbmVjYXBMb2NhdGlvbnMuY2xlYXIoKTsKLQotICAgIGZsb2F0IHN0cm9rZVdpZHRoID0g
dGhpcy0+c3Ryb2tlV2lkdGgoKTsKLSAgICBpZiAoIXN0cm9rZVdpZHRoIHx8ICFzaG91bGRTdHJv
a2VaZXJvTGVuZ3RoU3VicGF0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9w
YXRoKTsKLQotICAgIFNWR1N1YnBhdGhEYXRhIHN1YnBhdGhEYXRhKG1femVyb0xlbmd0aExpbmVj
YXBMb2NhdGlvbnMpOwotICAgIG1fcGF0aC0+YXBwbHkoJnN1YnBhdGhEYXRhLCBTVkdTdWJwYXRo
RGF0YTo6dXBkYXRlRnJvbVBhdGhFbGVtZW50KTsKLSAgICBzdWJwYXRoRGF0YS5wYXRoSXNEb25l
KCk7Ci19Ci0KIHZvaWQgUmVuZGVyU1ZHU2hhcGU6OnByb2Nlc3NNYXJrZXJQb3NpdGlvbnMoKQog
ewogICAgIG1fbWFya2VyUG9zaXRpb25zLmNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCShyZXZpc2lvbiAxMjIwNDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg3LDE0ICs4NywxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0
ZVNoYXBlKCk7CiAgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdDsKICAgICB2aXJ0dWFs
IEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VBbmRNYXJrZXJC
b3VuZGluZ0JveDsgfQotICAgIHZvaWQgc2V0U3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3goRmxv
YXRSZWN0IHJlY3QpIHsgbV9zdHJva2VBbmRNYXJrZXJCb3VuZGluZ0JveCA9IHJlY3Q7IH0KKyAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYsIGNvbnN0IFdpbmRSdWxlKSBjb25zdDsKICAgICBmbG9hdCBzdHJva2VXaWR0
aCgpIGNvbnN0OwogICAgIHZvaWQgc2V0SXNQYWludGluZ0ZhbGxiYWNrKGJvb2wgaXNGYWxsYmFj
aykgeyBtX2ZpbGxGYWxsYmFjayA9IGlzRmFsbGJhY2s7IH0KICAgICBib29sIGhhc1BhdGgoKSBj
b25zdCB7IHJldHVybiBtX3BhdGguZ2V0KCk7IH0KICAgICBib29sIGhhc05vblNjYWxpbmdTdHJv
a2UoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5zdmdTdHlsZSgpLT52ZWN0b3JFZmZlY3QoKSA9
PSBWRV9OT05fU0NBTElOR19TVFJPS0U7IH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGlu
Z1N0cm9rZVRyYW5zZm9ybSgpIGNvbnN0OworICAgIFBhdGgqIG5vblNjYWxpbmdTdHJva2VQYXRo
KGNvbnN0IFBhdGgqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBjb25zdDsKIAogcHJpdmF0ZToK
ICAgICAvLyBIaXQtZGV0ZWN0aW9uIHNlcGFyYXRlZCBmb3IgdGhlIGZpbGwgYW5kIHRoZSBzdHJv
a2UKQEAgLTExNiwzMyArMTE3LDIzIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZUNhY2hl
ZEJvdW5kYXJpZXMoKTsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5nU3Ryb2tlVHJh
bnNmb3JtKCkgY29uc3Q7Ci0gICAgYm9vbCBzZXR1cE5vblNjYWxpbmdTdHJva2VDb250ZXh0KEFm
ZmluZVRyYW5zZm9ybSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImKTsKLSAgICBQYXRoKiBu
b25TY2FsaW5nU3Ryb2tlUGF0aChjb25zdCBQYXRoKiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJikg
Y29uc3Q7Ci0KLSAgICBQYXRoKiB6ZXJvTGVuZ3RoTGluZWNhcFBhdGgoY29uc3QgRmxvYXRQb2lu
dCYpOwotICAgIGJvb2wgc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSBjb25zdDsKLSAg
ICBGbG9hdFJlY3QgemVyb0xlbmd0aFN1YnBhdGhSZWN0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9h
dCkgY29uc3Q7Ci0gICAgdm9pZCBwcm9jZXNzWmVyb0xlbmd0aFN1YnBhdGhzKCk7CisgICAgYm9v
bCBzZXR1cE5vblNjYWxpbmdTdHJva2VDb250ZXh0KEFmZmluZVRyYW5zZm9ybSYsIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXImKTsgICAgCiAKICAgICBib29sIHNob3VsZEdlbmVyYXRlTWFya2Vy
UG9zaXRpb25zKCkgY29uc3Q7CiAgICAgRmxvYXRSZWN0IG1hcmtlclJlY3QoZmxvYXQgc3Ryb2tl
V2lkdGgpIGNvbnN0OwogICAgIHZvaWQgcHJvY2Vzc01hcmtlclBvc2l0aW9ucygpOwogCi0gICAg
dm9pZCBmaWxsU2hhcGUoUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqLCBQYXRoKiwgUmVu
ZGVyU1ZHU2hhcGUqKTsKLSAgICB2b2lkIHN0cm9rZVBhdGgoUmVuZGVyU3R5bGUqLCBHcmFwaGlj
c0NvbnRleHQqLCBQYXRoKiwgUmVuZGVyU1ZHUmVzb3VyY2UqLAotICAgICAgICAgICAgICAgICAg
ICBjb25zdCBDb2xvciYsIGludCk7Ci0gICAgdm9pZCBmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGlj
c0NvbnRleHQqKTsKLSAgICB2b2lkIGluZmxhdGVXaXRoU3Ryb2tlQW5kTWFya2VyQm91bmRzKCk7
CisgICAgdm9pZCBmaWxsU2hhcGUoUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqKTsKKyAg
ICB2b2lkIHN0cm9rZVNoYXBlKFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVy
U1ZHUmVzb3VyY2UqLCBjb25zdCBDb2xvciYsIGludCk7CisgICAgdm9pZCBmaWxsQW5kU3Ryb2tl
U2hhcGUoR3JhcGhpY3NDb250ZXh0Kik7CiAgICAgdm9pZCBkcmF3TWFya2VycyhQYWludEluZm8m
KTsKIAogcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgbV9maWxsQm91bmRpbmdCb3g7Ci0gICAgRmxv
YXRSZWN0IG1fc3Ryb2tlQW5kTWFya2VyQm91bmRpbmdCb3g7CisgICAgRmxvYXRSZWN0IG1fc3Ry
b2tlQm91bmRpbmdCb3g7CiAgICAgRmxvYXRSZWN0IG1fcmVwYWludEJvdW5kaW5nQm94OwogICAg
IEFmZmluZVRyYW5zZm9ybSBtX2xvY2FsVHJhbnNmb3JtOwogICAgIE93blB0cjxQYXRoPiBtX3Bh
dGg7Ci0gICAgVmVjdG9yPEZsb2F0UG9pbnQ+IG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnM7
CiAgICAgVmVjdG9yPE1hcmtlclBvc2l0aW9uPiBtX21hcmtlclBvc2l0aW9uczsKIAogICAgIGJv
b2wgbV9uZWVkc0JvdW5kYXJpZXNVcGRhdGUgOiAxOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152024</attachid>
            <date>2012-07-12 12:33:05 -0700</date>
            <delta_ts>2012-07-12 13:38:56 -0700</delta_ts>
            <desc>Move zero-length-subpaths from RenderSVGShape to RenderSVGPath</desc>
            <filename>90716.2.patch</filename>
            <type>text/plain</type>
            <size>21205</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjQ5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDEyLTA3LTEyICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgTW92ZSB6ZXJvLWxlbmd0aC1zdWJw
YXRocyBmcm9tIFJlbmRlclNWR1NoYXBlIHRvIFJlbmRlclNWR1BhdGgKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNzE2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmlvdXNseSB6ZXJvLWxlbmd0aC1z
dWJwYXRoIGNvZGUgd2FzIHByZXNlbnQgaW4gUmVuZGVyU1ZHU2hhcGUgYnV0IGl0IGlzCisgICAg
ICAgIG9ubHkgbmVlZGVkIGluIFJlbmRlclNWR1BhdGguIFRoaXMgcGF0Y2ggbW92ZXMgdGhlIHpl
cm8tbGVuZ3RoLXN1YnBhdGggY29kZQorICAgICAgICB0byBSZW5kZXJTVkdQYXRoLgorCisgICAg
ICAgIFRoZSBwYXRjaCBpcyBwcmltYXJpbHkgYSBzdHJhaWdodGZvcndhcmQgY29kZSBtb3ZlIGJ1
dCB1c2VTdHJva2VTdHlsZVRvRmlsbAorICAgICAgICBuZWVkcyBmdXJ0aGVyIGV4cGxhbmF0aW9u
OgorICAgICAgICBaZXJvLWxlbmd0aC1zdWJwYXRocyBhcmUgZHJhd24gdXNpbmcgcmVjdGFuZ3Vs
YXIgYW5kIGNpcmN1bGFyIHBhdGhzIHdoaWNoCisgICAgICAgIGFyZSBmaWxsZWQuCisgICAgICAg
IFByZXZpb3VzbHkgaW4gUmVuZGVyU1ZHU2hhcGU6OmZpbGxBbmRTdHJva2VQYXRoLCBzdHJva2VQ
YXRoIHdhcyBjYWxsZWQgZm9yCisgICAgICAgIHRoZSBtYWluIHBhdGggd2l0aCBBcHBseVRvU3Ry
b2tlTW9kZSBhbmQgdGhlbiBzdHJva2VQYXRoIHdhcyBjYWxsZWQgZm9yCisgICAgICAgIGVhY2gg
emVyby1sZW5ndGgtc3VicGF0aCB3aXRoIEFwcGx5VG9GaWxsTW9kZS4KKyAgICAgICAgQXBwbHlU
b0ZpbGxNb2RlIGhhZCB0aGUgZWZmZWN0IG9mIHNldHRpbmcgdGhlIGNvbnRleHQncyBzdHJva2Ug
c3R5bGUgdG8KKyAgICAgICAgdGhlIGZpbGwgc3R5bGUgc28gemVyby1sZW5ndGgtc3VicGF0aHMg
d2VyZSAiZmlsbGVkIiB3aXRoIHRoZSBzdHJva2Ugc3R5bGUuCisgICAgICAgIEFmdGVyIHRoaXMg
cGF0Y2gsIHRoZSBjb250ZXh0IGlzIG9ubHkgc2V0dXAgb25jZSAod2hpY2ggaXMgZmFzdGVyISkg
dXNpbmcKKyAgICAgICAgQXBwbHlUb1N0cm9rZU1vZGUgc28gd2UgbWFudWFsbHkgc2V0IHRoZSBz
dHJva2Ugc3R5bGUgdG8gdGhlIGZpbGwgc3R5bGUKKyAgICAgICAgdXNpbmcgdXNlU3Ryb2tlU3R5
bGVUb0ZpbGwuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBqdXN0IGEgcmVmYWN0b3JpbmcuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUGF0aDo6dXBkYXRlU2hhcGVGcm9tRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1BhdGg6OnVwZGF0ZVN0cm9rZUJv
dW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OnVzZVN0cm9rZVN0eWxlVG9GaWxsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1BhdGg6OnN0cm9rZVNoYXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1BhdGg6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUGF0aDo6c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUGF0aDo6emVyb0xlbmd0aExpbmVjYXBQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1BhdGg6Onplcm9MZW5ndGhTdWJwYXRo
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRoOjp1cGRhdGVaZXJvTGVuZ3Ro
U3VicGF0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oOgorICAg
ICAgICAoUmVuZGVyU1ZHUGF0aCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdT
aGFwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6dXBkYXRlU2hhcGVG
cm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlU2hh
cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUNvbnRhaW5zKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmZp
bGxTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbEFuZFN0cm9r
ZVNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpwYWludCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6Y2FsY3VsYXRlU3Ryb2tlQm91bmRpbmdCb3gp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1NoYXBlOjpoYXNQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpoYXNOb25TY2FsaW5nU3Ryb2tlKToKKyAgICAgICAgKFJlbmRlclNWR1NoYXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VCb3VuZGluZ0JveCk6
CisKIDIwMTItMDctMTEgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTAwMApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCShyZXZpc2lv
biAxMjI0NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGgu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJTVkdQYXRo
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCisj
aW5jbHVkZSAiU1ZHU3VicGF0aERhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00
NCw2ICs0NSwxMjQgQEAgUmVuZGVyU1ZHUGF0aDo6flJlbmRlclNWR1BhdGgoKQogewogfQogCit2
b2lkIFJlbmRlclNWR1BhdGg6OnVwZGF0ZVNoYXBlRnJvbUVsZW1lbnQoKQoreworICAgIFJlbmRl
clNWR1NoYXBlOjp1cGRhdGVTaGFwZUZyb21FbGVtZW50KCk7CisgICAgdXBkYXRlWmVyb0xlbmd0
aFN1YnBhdGhzKCk7CisKKyAgICBtX3N0cm9rZUJvdW5kaW5nQm94ID0gdXBkYXRlU3Ryb2tlQm91
bmRpbmdCb3goKTsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1BhdGg6OnVwZGF0ZVN0cm9rZUJv
dW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICBGbG9hdFJlY3Qgc3Ryb2tlQm91bmRpbmdCb3ggPSBt
X3N0cm9rZUJvdW5kaW5nQm94OworCisgICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0
cm9rZSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiB6ZXJvLWxlbmd0aCBzdWJwYXRocyBkbyBub3Qg
cmVzcGVjdCB2ZWN0b3ItZWZmZWN0ID0gbm9uLXNjYWxpbmctc3Ryb2tlLgorICAgICAgICBmbG9h
dCBzdHJva2VXaWR0aCA9IHRoaXMtPnN0cm9rZVdpZHRoKCk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV96ZXJvTGVuZ3RoTGluZWNhcExvY2F0aW9ucy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgIHN0cm9rZUJvdW5kaW5nQm94LnVuaXRlKHplcm9MZW5ndGhTdWJwYXRoUmVjdCht
X3plcm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zW2ldLCBzdHJva2VXaWR0aCkpOworICAgIH0KKwor
ICAgIHJldHVybiBzdHJva2VCb3VuZGluZ0JveDsKK30KKworc3RhdGljIHZvaWQgdXNlU3Ryb2tl
U3R5bGVUb0ZpbGwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIGlmIChHcmFkaWVu
dCogZ3JhZGllbnQgPSBjb250ZXh0LT5zdHJva2VHcmFkaWVudCgpKQorICAgICAgICBjb250ZXh0
LT5zZXRGaWxsR3JhZGllbnQoZ3JhZGllbnQpOworICAgIGVsc2UgaWYgKFBhdHRlcm4qIHBhdHRl
cm4gPSBjb250ZXh0LT5zdHJva2VQYXR0ZXJuKCkpCisgICAgICAgIGNvbnRleHQtPnNldEZpbGxQ
YXR0ZXJuKHBhdHRlcm4pOworICAgIGVsc2UKKyAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9y
KGNvbnRleHQtPnN0cm9rZUNvbG9yKCksIGNvbnRleHQtPnN0cm9rZUNvbG9yU3BhY2UoKSk7Cit9
CisKK3ZvaWQgUmVuZGVyU1ZHUGF0aDo6c3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0KSBjb25zdAoreworICAgIGlmICghc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzVmlzaWJsZVN0
cm9rZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlU2hh
cGUoY29udGV4dCk7CisKKyAgICBpZiAobV96ZXJvTGVuZ3RoTGluZWNhcExvY2F0aW9ucy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFBhdGgqIHVzZVBhdGg7CisgICAgQWZmaW5l
VHJhbnNmb3JtIG5vblNjYWxpbmdUcmFuc2Zvcm07CisKKyAgICBpZiAoaGFzTm9uU2NhbGluZ1N0
cm9rZSgpKQorICAgICAgICBub25TY2FsaW5nVHJhbnNmb3JtID0gbm9uU2NhbGluZ1N0cm9rZVRy
YW5zZm9ybSgpOworCisgICAgY29udGV4dC0+c2F2ZSgpOworICAgIHVzZVN0cm9rZVN0eWxlVG9G
aWxsKGNvbnRleHQpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV96ZXJvTGVuZ3RoTGlu
ZWNhcExvY2F0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICB1c2VQYXRoID0gemVyb0xlbmd0
aExpbmVjYXBQYXRoKG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnNbaV0pOworICAgICAgICBp
ZiAoaGFzTm9uU2NhbGluZ1N0cm9rZSgpKQorICAgICAgICAgICAgdXNlUGF0aCA9IG5vblNjYWxp
bmdTdHJva2VQYXRoKHVzZVBhdGgsIG5vblNjYWxpbmdUcmFuc2Zvcm0pOworICAgICAgICBjb250
ZXh0LT5maWxsUGF0aCgqdXNlUGF0aCk7CisgICAgfQorICAgIGNvbnRleHQtPnJlc3RvcmUoKTsK
K30KKworYm9vbCBSZW5kZXJTVkdQYXRoOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIGlmIChSZW5kZXJTVkdTaGFwZTo6c2hhcGVE
ZXBlbmRlbnRTdHJva2VDb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5bGUoKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKHN2Z1N0eWxlLT5oYXNTdHJva2UoKSk7Cisg
ICAgICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gdGhpcy0+c3Ryb2tlV2lkdGgoKTsKKyAgICAgICAg
aWYgKHN2Z1N0eWxlLT5jYXBTdHlsZSgpID09IFNxdWFyZUNhcCkgeworICAgICAgICAgICAgaWYg
KHplcm9MZW5ndGhTdWJwYXRoUmVjdChtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zW2ldLCBz
dHJva2VXaWR0aCkuY29udGFpbnMocG9pbnQpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHN2Z1N0eWxlLT5jYXBTdHls
ZSgpID09IFJvdW5kQ2FwKTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgcmFkaXVzVmVjdG9yKHBv
aW50LngoKSAtIG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnNbaV0ueCgpLCBwb2ludC55KCkg
LSAgbV96ZXJvTGVuZ3RoTGluZWNhcExvY2F0aW9uc1tpXS55KCkpOworICAgICAgICAgICAgaWYg
KHJhZGl1c1ZlY3Rvci5sZW5ndGhTcXVhcmVkKCkgPCBzdHJva2VXaWR0aCAqIHN0cm9rZVdpZHRo
ICogLjI1ZikKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUGF0aDo6c2hvdWxkU3Ryb2tl
WmVyb0xlbmd0aFN1YnBhdGgoKSBjb25zdAoreworICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJv
IGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSAic3Ryb2tlLWxpbmVj
YXAiIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKKyAgICAvLyBidXQgc2hhbGwgYmUgc3Ry
b2tlZCBpZiB0aGUgInN0cm9rZS1saW5lY2FwIiBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3Vu
ZCBvciBzcXVhcmUKKyAgICByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkg
JiYgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSAhPSBCdXR0Q2FwOworfQorCitQYXRo
KiBSZW5kZXJTVkdQYXRoOjp6ZXJvTGVuZ3RoTGluZWNhcFBhdGgoY29uc3QgRmxvYXRQb2ludCYg
bGluZWNhcFBvc2l0aW9uKSBjb25zdAoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUGF0aCwg
dGVtcFBhdGgsICgpKTsKKworICAgIHRlbXBQYXRoLmNsZWFyKCk7CisgICAgaWYgKHN0eWxlKCkt
PnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gU3F1YXJlQ2FwKQorICAgICAgICB0ZW1wUGF0aC5h
ZGRSZWN0KHplcm9MZW5ndGhTdWJwYXRoUmVjdChsaW5lY2FwUG9zaXRpb24sIHRoaXMtPnN0cm9r
ZVdpZHRoKCkpKTsKKyAgICBlbHNlCisgICAgICAgIHRlbXBQYXRoLmFkZEVsbGlwc2UoemVyb0xl
bmd0aFN1YnBhdGhSZWN0KGxpbmVjYXBQb3NpdGlvbiwgdGhpcy0+c3Ryb2tlV2lkdGgoKSkpOwor
CisgICAgcmV0dXJuICZ0ZW1wUGF0aDsKK30KKworRmxvYXRSZWN0IFJlbmRlclNWR1BhdGg6Onpl
cm9MZW5ndGhTdWJwYXRoUmVjdChjb25zdCBGbG9hdFBvaW50JiBsaW5lY2FwUG9zaXRpb24sIGZs
b2F0IHN0cm9rZVdpZHRoKSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFJlY3QobGluZWNhcFBv
c2l0aW9uLngoKSAtIHN0cm9rZVdpZHRoIC8gMiwgbGluZWNhcFBvc2l0aW9uLnkoKSAtIHN0cm9r
ZVdpZHRoIC8gMiwgc3Ryb2tlV2lkdGgsIHN0cm9rZVdpZHRoKTsKK30KKwordm9pZCBSZW5kZXJT
VkdQYXRoOjp1cGRhdGVaZXJvTGVuZ3RoU3VicGF0aHMoKQoreworICAgIG1femVyb0xlbmd0aExp
bmVjYXBMb2NhdGlvbnMuY2xlYXIoKTsKKworICAgIGlmICghc3Ryb2tlV2lkdGgoKSB8fCAhc2hv
dWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU1ZH
U3VicGF0aERhdGEgc3VicGF0aERhdGEobV96ZXJvTGVuZ3RoTGluZWNhcExvY2F0aW9ucyk7Cisg
ICAgcGF0aCgpLmFwcGx5KCZzdWJwYXRoRGF0YSwgU1ZHU3VicGF0aERhdGE6OnVwZGF0ZUZyb21Q
YXRoRWxlbWVudCk7CisgICAgc3VicGF0aERhdGEucGF0aElzRG9uZSgpOworfQorCiB9CiAKICNl
bmRpZiAvLyBFTkFCTEUoU1ZHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdQYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdQYXRoLmgJKHJldmlzaW9uIDEyMjQ3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwx
OSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1NWR1BhdGgoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1BhdGgiOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlU2hhcGVGcm9tRWxlbWVudCgpOworICAgIEZsb2F0UmVjdCB1cGRhdGVTdHJva2VCb3VuZGlu
Z0JveCgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHN0cm9rZVNoYXBlKEdyYXBoaWNzQ29u
dGV4dCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmKTsKKworICAgIGJvb2wgc2hvdWxkU3Ryb2tlWmVyb0xlbmd0
aFN1YnBhdGgoKSBjb25zdDsKKyAgICBQYXRoKiB6ZXJvTGVuZ3RoTGluZWNhcFBhdGgoY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0OworICAgIEZsb2F0UmVjdCB6ZXJvTGVuZ3RoU3VicGF0aFJlY3Qo
Y29uc3QgRmxvYXRQb2ludCYsIGZsb2F0KSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVplcm9MZW5n
dGhTdWJwYXRocygpOworCisgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IG1femVyb0xlbmd0aExpbmVj
YXBMb2NhdGlvbnM7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1NoYXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAkocmV2aXNpb24gMTIyNDcxKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRlICJTVkdSZXNvdXJjZXMuaCIKICNpbmNsdWRlICJTVkdS
ZXNvdXJjZXNDYWNoZS5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
LmgiCi0jaW5jbHVkZSAiU1ZHU3VicGF0aERhdGEuaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1M
aXN0LmgiCiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiU3Ryb2tlU3R5
bGVBcHBsaWVyLmgiCkBAIC03Miw3ICs3MSw2IEBAIHZvaWQgUmVuZGVyU1ZHU2hhcGU6OnVwZGF0
ZVNoYXBlRnJvbUVsZW0KIAogICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KiBlbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqPihub2RlKCkp
OwogICAgIHVwZGF0ZVBhdGhGcm9tR3JhcGhpY3NFbGVtZW50KGVsZW1lbnQsIHBhdGgoKSk7Ci0g
ICAgcHJvY2Vzc1plcm9MZW5ndGhTdWJwYXRocygpOwogICAgIHByb2Nlc3NNYXJrZXJQb3NpdGlv
bnMoKTsKIAogICAgIG1fZmlsbEJvdW5kaW5nQm94ID0gY2FsY3VsYXRlT2JqZWN0Qm91bmRpbmdC
b3goKTsKQEAgLTkxLDggKzg5LDEzIEBAIHZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFwZShH
cmFwaGljc0MKIAogdm9pZCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0KSBjb25zdAogewotICAgIGlmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNW
aXNpYmxlU3Ryb2tlKCkpCi0gICAgICAgIGNvbnRleHQtPnN0cm9rZVBhdGgocGF0aCgpKTsKKyAg
ICBBU1NFUlQobV9wYXRoKTsKKyAgICBQYXRoKiB1c2VQYXRoID0gbV9wYXRoLmdldCgpOworCisg
ICAgaWYgKGhhc05vblNjYWxpbmdTdHJva2UoKSkKKyAgICAgICAgdXNlUGF0aCA9IG5vblNjYWxp
bmdTdHJva2VQYXRoKHVzZVBhdGgsIG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0oKSk7CisKKyAg
ICBjb250ZXh0LT5zdHJva2VQYXRoKCp1c2VQYXRoKTsKIH0KIAogYm9vbCBSZW5kZXJTVkdTaGFw
ZTo6c2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkK
QEAgLTEzNiwyMCArMTM5LDYgQEAgYm9vbCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQ29udGFpbnMo
Y29ucwogICAgIGlmIChyZXF1aXJlc1N0cm9rZSAmJiAhUmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9r
ZVBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUoKSwgZmFsbGJhY2tDb2xvcikpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV96ZXJvTGVuZ3Ro
TGluZWNhcExvY2F0aW9ucy5zaXplKCk7ICsraSkgewotICAgICAgICBBU1NFUlQoc3R5bGUoKS0+
c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpOwotICAgICAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHRo
aXMtPnN0cm9rZVdpZHRoKCk7Ci0gICAgICAgIGlmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5jYXBT
dHlsZSgpID09IFNxdWFyZUNhcCkgewotICAgICAgICAgICAgaWYgKHplcm9MZW5ndGhTdWJwYXRo
UmVjdChtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zW2ldLCBzdHJva2VXaWR0aCkuY29udGFp
bnMocG9pbnQpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgQVNTRVJUKHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0g
Um91bmRDYXApOwotICAgICAgICAgICAgRmxvYXRQb2ludCByYWRpdXNWZWN0b3IocG9pbnQueCgp
IC0gbV96ZXJvTGVuZ3RoTGluZWNhcExvY2F0aW9uc1tpXS54KCksIHBvaW50LnkoKSAtICBtX3pl
cm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zW2ldLnkoKSk7Ci0gICAgICAgICAgICBpZiAocmFkaXVz
VmVjdG9yLmxlbmd0aFNxdWFyZWQoKSA8IHN0cm9rZVdpZHRoICogc3Ryb2tlV2lkdGggKiAuMjVm
KQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCiAgICAg
cmV0dXJuIHNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMocG9pbnQpOwogfQogCkBAIC0yMTIs
MTMgKzIwMSw2IEBAIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdTaGFwZTo6bm9uU2NhbGkKICAg
ICByZXR1cm4gZWxlbWVudC0+Z2V0U2NyZWVuQ1RNKFNWR0xvY2F0YWJsZTo6RGlzYWxsb3dTdHls
ZVVwZGF0ZSk7CiB9CiAKLWJvb2wgUmVuZGVyU1ZHU2hhcGU6OnNob3VsZFN0cm9rZVplcm9MZW5n
dGhTdWJwYXRoKCkgY29uc3QKLXsKLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGgg
c3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUgInN0cm9rZS1saW5lY2FwIiBwcm9w
ZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYg
dGhlICJzdHJva2UtbGluZWNhcCIgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1
YXJlCi0gICAgcmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0cm9rZSgpICYmIHN0eWxl
KCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgIT0gQnV0dENhcDsKLX0KLQogYm9vbCBSZW5kZXJT
VkdTaGFwZTo6c2hvdWxkR2VuZXJhdGVNYXJrZXJQb3NpdGlvbnMoKSBjb25zdAogewogICAgIGlm
ICghc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzTWFya2VycygpKQpAQCAtMjM1LDk0ICsyMTcsNTUg
QEAgYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2hvdWxkR2VuZXJhdGVNYXJrZQogICAgIHJldHVybiBy
ZXNvdXJjZXMtPm1hcmtlclN0YXJ0KCkgfHwgcmVzb3VyY2VzLT5tYXJrZXJNaWQoKSB8fCByZXNv
dXJjZXMtPm1hcmtlckVuZCgpOwogfQogCi1GbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6Onplcm9M
ZW5ndGhTdWJwYXRoUmVjdChjb25zdCBGbG9hdFBvaW50JiBsaW5lY2FwUG9zaXRpb24sIGZsb2F0
IHN0cm9rZVdpZHRoKSBjb25zdAotewotICAgIHJldHVybiBGbG9hdFJlY3QobGluZWNhcFBvc2l0
aW9uLngoKSAtIHN0cm9rZVdpZHRoIC8gMiwgbGluZWNhcFBvc2l0aW9uLnkoKSAtIHN0cm9rZVdp
ZHRoIC8gMiwgc3Ryb2tlV2lkdGgsIHN0cm9rZVdpZHRoKTsKLX0KLQotUGF0aCogUmVuZGVyU1ZH
U2hhcGU6Onplcm9MZW5ndGhMaW5lY2FwUGF0aChjb25zdCBGbG9hdFBvaW50JiBsaW5lY2FwUG9z
aXRpb24pCi17Ci0gICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hh
bGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlICJzdHJva2UtbGluZWNhcCIgcHJvcGVydHkgaGFzIGEg
dmFsdWUgb2YgYnV0dAotICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSAic3Ryb2tl
LWxpbmVjYXAiIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQotICAgIERF
RklORV9TVEFUSUNfTE9DQUwoUGF0aCwgdGVtcFBhdGgsICgpKTsKLQotICAgIHRlbXBQYXRoLmNs
ZWFyKCk7Ci0gICAgZmxvYXQgc3Ryb2tlV2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgpOwotICAg
IGlmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpID09IFNxdWFyZUNhcCkKLSAgICAg
ICAgdGVtcFBhdGguYWRkUmVjdCh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QobGluZWNhcFBvc2l0aW9u
LCBzdHJva2VXaWR0aCkpOwotICAgIGVsc2UKLSAgICAgICAgdGVtcFBhdGguYWRkRWxsaXBzZSh6
ZXJvTGVuZ3RoU3VicGF0aFJlY3QobGluZWNhcFBvc2l0aW9uLCBzdHJva2VXaWR0aCkpOwotCi0g
ICAgcmV0dXJuICZ0ZW1wUGF0aDsKLX0KLQotdm9pZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBl
KFJlbmRlclN0eWxlKiBzdHlsZSwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBQYXRoKiBwYXRo
LCBSZW5kZXJTVkdTaGFwZSogc2hhcGUpCit2b2lkIFJlbmRlclNWR1NoYXBlOjpmaWxsU2hhcGUo
UmVuZGVyU3R5bGUqIHN0eWxlLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgQ29s
b3IgZmFsbGJhY2tDb2xvcjsKICAgICBpZiAoUmVuZGVyU1ZHUmVzb3VyY2UqIGZpbGxQYWludGlu
Z1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OmZpbGxQYWludGluZ1Jlc291cmNlKHRoaXMs
IHN0eWxlLCBmYWxsYmFja0NvbG9yKSkgewogICAgICAgICBpZiAoZmlsbFBhaW50aW5nUmVzb3Vy
Y2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkp
Ci0gICAgICAgICAgICBmaWxsUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhp
cywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlLCBwYXRoLCBzaGFwZSk7CisgICAgICAgICAgICBm
aWxsUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBw
bHlUb0ZpbGxNb2RlLCAwLCB0aGlzKTsKICAgICAgICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5p
c1ZhbGlkKCkpIHsKICAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFs
bGJhY2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVz
b3VyY2UoKTsKICAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNr
Q29sb3IpOwogICAgICAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2Uo
dGhpcywgc3R5bGUsIGNvbnRleHQsIEFwcGx5VG9GaWxsTW9kZSkpCi0gICAgICAgICAgICAgICAg
ZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlU
b0ZpbGxNb2RlLCBwYXRoLCBzaGFwZSk7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJj
ZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlLCAwLCB0
aGlzKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tl
UGF0aChSZW5kZXJTdHlsZSogc3R5bGUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUGF0aCog
cGF0aCwgUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbG9yJiBmYWxsYmFja0NvbG9yLCBpbnQg
YXBwbHlNb2RlKQordm9pZCBSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlU2hhcGUoUmVuZGVyU3R5bGUq
IHN0eWxlLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgaWYgKCFzdHlsZS0+c3Zn
U3R5bGUoKS0+aGFzVmlzaWJsZVN0cm9rZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4
dCwgYXBwbHlNb2RlKSkgewotICAgICAgICBzdHJva2VQYWludGluZ1Jlc291cmNlLT5wb3N0QXBw
bHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBhcHBseU1vZGUsIHBhdGgsIHRoaXMpOwotICAgICAg
ICByZXR1cm47CisgICAgQ29sb3IgZmFsbGJhY2tDb2xvcjsKKyAgICBpZiAoUmVuZGVyU1ZHUmVz
b3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tl
UGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJhY2tDb2xvcikpIHsKKyAgICAgICAg
aWYgKHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUsIGNv
bnRleHQsIEFwcGx5VG9TdHJva2VNb2RlKSkKKyAgICAgICAgICAgIHN0cm9rZVBhaW50aW5nUmVz
b3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9TdHJva2VNb2Rl
LCAwLCB0aGlzKTsKKyAgICAgICAgZWxzZSBpZiAoZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNvdXJj
ZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKKyAg
ICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnNldENvbG9yKGZhbGxiYWNrQ29sb3IpOworICAg
ICAgICAgICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywgc3R5bGUs
IGNvbnRleHQsIEFwcGx5VG9TdHJva2VNb2RlKSkKKyAgICAgICAgICAgICAgICBmYWxsYmFja1Jl
c291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvU3Ryb2tlTW9k
ZSwgMCwgdGhpcyk7CisgICAgICAgIH0KICAgICB9Ci0KLSAgICBpZiAoIWZhbGxiYWNrQ29sb3Iu
aXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlk
Q29sb3IqIGZhbGxiYWNrUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQ
YWludGluZ1Jlc291cmNlKCk7Ci0gICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJh
Y2tDb2xvcik7Ci0gICAgaWYgKGZhbGxiYWNrUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UodGhpcywg
c3R5bGUsIGNvbnRleHQsIGFwcGx5TW9kZSkpCi0gICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBv
c3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgcGF0aCwgdGhpcyk7CiB9
CiAKLXZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxBbmRTdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCkKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxBbmRTdHJva2VTaGFwZShHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGhpcy0+
c3R5bGUoKTsKIAotICAgIGZpbGxTaGFwZShzdHlsZSwgY29udGV4dCwgMCwgdGhpcyk7CisgICAg
ZmlsbFNoYXBlKHN0eWxlLCBjb250ZXh0KTsKIAotICAgIENvbG9yIGZhbGxiYWNrQ29sb3IgPSBD
b2xvcigpOwotICAgIFJlbmRlclNWR1Jlc291cmNlKiBzdHJva2VQYWludGluZ1Jlc291cmNlID0g
UmVuZGVyU1ZHUmVzb3VyY2U6OnN0cm9rZVBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZh
bGxiYWNrQ29sb3IpOwotICAgIGlmICghc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSkKKyAgICBpZiAo
IXN0eWxlLT5zdmdTdHlsZSgpLT5oYXNWaXNpYmxlU3Ryb2tlKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFBhdGgqIHVzZVBhdGggPSBtX3BhdGguZ2V0KCk7CiAgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0LCBmYWxzZSk7CiAgICAgQWZmaW5lVHJhbnNm
b3JtIG5vblNjYWxpbmdUcmFuc2Zvcm07CiAKICAgICBpZiAoaGFzTm9uU2NhbGluZ1N0cm9rZSgp
KSB7Ci0gICAgICAgIG5vblNjYWxpbmdUcmFuc2Zvcm0gPSBub25TY2FsaW5nU3Ryb2tlVHJhbnNm
b3JtKCk7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5nVHJhbnNmb3JtID0gbm9u
U2NhbGluZ1N0cm9rZVRyYW5zZm9ybSgpOwogICAgICAgICBpZiAoIXNldHVwTm9uU2NhbGluZ1N0
cm9rZUNvbnRleHQobm9uU2NhbGluZ1RyYW5zZm9ybSwgc3RhdGVTYXZlcikpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIHVzZVBhdGggPSBub25TY2FsaW5nU3Ryb2tlUGF0aCh1c2VQYXRo
LCBub25TY2FsaW5nVHJhbnNmb3JtKTsKICAgICB9CiAKLSAgICBzdHJva2VQYXRoKHN0eWxlLCBj
b250ZXh0LCB1c2VQYXRoLCBzdHJva2VQYWludGluZ1Jlc291cmNlLCBmYWxsYmFja0NvbG9yLCBB
cHBseVRvU3Ryb2tlTW9kZSk7Ci0KLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGgg
c3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUgInN0cm9rZS1saW5lY2FwIiBwcm9w
ZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYg
dGhlICJzdHJva2UtbGluZWNhcCIgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1
YXJlCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRp
b25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFBhdGgqIHVzZVBhdGggPSB6ZXJvTGVuZ3RoTGlu
ZWNhcFBhdGgobV96ZXJvTGVuZ3RoTGluZWNhcExvY2F0aW9uc1tpXSk7Ci0gICAgICAgIGlmICho
YXNOb25TY2FsaW5nU3Ryb2tlKCkpCi0gICAgICAgICAgICB1c2VQYXRoID0gbm9uU2NhbGluZ1N0
cm9rZVBhdGgodXNlUGF0aCwgbm9uU2NhbGluZ1RyYW5zZm9ybSk7Ci0gICAgICAgIHN0cm9rZVBh
dGgoc3R5bGUsIGNvbnRleHQsIHVzZVBhdGgsIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UsIGZhbGxi
YWNrQ29sb3IsIEFwcGx5VG9GaWxsTW9kZSk7Ci0gICAgfQorICAgIHN0cm9rZVNoYXBlKHN0eWxl
LCBjb250ZXh0KTsKIH0KIAogdm9pZCBSZW5kZXJTVkdTaGFwZTo6cGFpbnQoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JikKQEAgLTM0Nyw3ICsyOTAsNyBAQCB2b2lkIFJl
bmRlclNWR1NoYXBlOjpwYWludChQYWludEluZm8mIHBhCiAgICAgICAgICAgICAgICAgaWYgKHN2
Z1N0eWxlLT5zaGFwZVJlbmRlcmluZygpID09IFNSX0NSSVNQRURHRVMpCiAgICAgICAgICAgICAg
ICAgICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnNldFNob3VsZEFudGlhbGlhcyhmYWxzZSk7
CiAKLSAgICAgICAgICAgICAgICBmaWxsQW5kU3Ryb2tlUGF0aChjaGlsZFBhaW50SW5mby5jb250
ZXh0KTsKKyAgICAgICAgICAgICAgICBmaWxsQW5kU3Ryb2tlU2hhcGUoY2hpbGRQYWludEluZm8u
Y29udGV4dCk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX21hcmtlclBvc2l0aW9ucy5pc0VtcHR5
KCkpCiAgICAgICAgICAgICAgICAgICAgIGRyYXdNYXJrZXJzKGNoaWxkUGFpbnRJbmZvKTsKICAg
ICAgICAgICAgIH0KQEAgLTQ1MywxMSArMzk2LDYgQEAgRmxvYXRSZWN0IFJlbmRlclNWR1NoYXBl
OjpjYWxjdWxhdGVTdHJvawogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIHN0cm9rZUJvdW5kaW5nQm94LnVuaXRlKHBhdGgoKS5zdHJva2VCb3VuZGluZ1JlY3QoJnN0
cm9rZVN0eWxlKSk7Ci0KLSAgICAgICAgLy8gRklYTUU6IHplcm8tbGVuZ3RoIHN1YnBhdGhzIGRv
IG5vdCByZXNwZWN0IHZlY3Rvci1lZmZlY3QgPSBub24tc2NhbGluZy1zdHJva2UuCi0gICAgICAg
IGZsb2F0IHN0cm9rZVdpZHRoID0gdGhpcy0+c3Ryb2tlV2lkdGgoKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zLnNpemUoKTsgKytp
KQotICAgICAgICAgICAgc3Ryb2tlQm91bmRpbmdCb3gudW5pdGUoemVyb0xlbmd0aFN1YnBhdGhS
ZWN0KG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnNbaV0sIHN0cm9rZVdpZHRoKSk7CiAgICAg
fQogCiAgICAgaWYgKCFtX21hcmtlclBvc2l0aW9ucy5pc0VtcHR5KCkpCkBAIC01MTAsMjEgKzQ0
OCw2IEBAIHZvaWQgUmVuZGVyU1ZHU2hhcGU6OmRyYXdNYXJrZXJzKFBhaW50SW4KICAgICB9CiB9
CiAKLXZvaWQgUmVuZGVyU1ZHU2hhcGU6OnByb2Nlc3NaZXJvTGVuZ3RoU3VicGF0aHMoKQotewot
ICAgIG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnMuY2xlYXIoKTsKLQotICAgIGZsb2F0IHN0
cm9rZVdpZHRoID0gdGhpcy0+c3Ryb2tlV2lkdGgoKTsKLSAgICBpZiAoIXN0cm9rZVdpZHRoIHx8
ICFzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBBU1NFUlQobV9wYXRoKTsKLQotICAgIFNWR1N1YnBhdGhEYXRhIHN1YnBhdGhEYXRhKG1femVy
b0xlbmd0aExpbmVjYXBMb2NhdGlvbnMpOwotICAgIG1fcGF0aC0+YXBwbHkoJnN1YnBhdGhEYXRh
LCBTVkdTdWJwYXRoRGF0YTo6dXBkYXRlRnJvbVBhdGhFbGVtZW50KTsKLSAgICBzdWJwYXRoRGF0
YS5wYXRoSXNEb25lKCk7Ci19Ci0KIHZvaWQgUmVuZGVyU1ZHU2hhcGU6OnByb2Nlc3NNYXJrZXJQ
b3NpdGlvbnMoKQogewogICAgIG1fbWFya2VyUG9zaXRpb25zLmNsZWFyKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCShyZXZpc2lvbiAx
MjI0NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg5LDkgKzg5LDEyIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IGJvb2wgc2hhcGVEZXBlbmRlbnRGaWxsQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0
IFdpbmRSdWxlKSBjb25zdDsKICAgICBmbG9hdCBzdHJva2VXaWR0aCgpIGNvbnN0OwogICAgIGJv
b2wgaGFzUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aC5nZXQoKTsgfQotICAgIGJvb2wgaGFz
Tm9uU2NhbGluZ1N0cm9rZSgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPnZl
Y3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9LRTsgfQogICAgIGJvb2wgaGFzU21v
b3RoU3Ryb2tlKCkgY29uc3Q7CiAKKyAgICBib29sIGhhc05vblNjYWxpbmdTdHJva2UoKSBjb25z
dCB7IHJldHVybiBzdHlsZSgpLT5zdmdTdHlsZSgpLT52ZWN0b3JFZmZlY3QoKSA9PSBWRV9OT05f
U0NBTElOR19TVFJPS0U7IH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1N0cm9rZVRy
YW5zZm9ybSgpIGNvbnN0OworICAgIFBhdGgqIG5vblNjYWxpbmdTdHJva2VQYXRoKGNvbnN0IFBh
dGgqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBjb25zdDsKKwogICAgIEZsb2F0UmVjdCBtX2Zp
bGxCb3VuZGluZ0JveDsKICAgICBGbG9hdFJlY3QgbV9zdHJva2VCb3VuZGluZ0JveDsKIApAQCAt
MTE1LDM1ICsxMTgsMjUgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVj
dEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9maWxsQm91bmRpbmdCb3g7IH0KICAgICB2
aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
b2tlQm91bmRpbmdCb3g7IH0KLQogICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVPYmplY3RCb3VuZGlu
Z0JveCgpIGNvbnN0OwogICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVTdHJva2VCb3VuZGluZ0JveCgp
IGNvbnN0OwogICAgIHZvaWQgdXBkYXRlUmVwYWludEJvdW5kaW5nQm94KCk7CiAKLSAgICBBZmZp
bmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSgpIGNvbnN0OwogICAgIGJvb2wg
c2V0dXBOb25TY2FsaW5nU3Ryb2tlQ29udGV4dChBZmZpbmVUcmFuc2Zvcm0mLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyJik7Ci0gICAgUGF0aCogbm9uU2NhbGluZ1N0cm9rZVBhdGgoY29uc3Qg
UGF0aCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0OwotCi0gICAgUGF0aCogemVyb0xl
bmd0aExpbmVjYXBQYXRoKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICBib29sIHNob3VsZFN0cm9r
ZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IHplcm9MZW5ndGhTdWJw
YXRoUmVjdChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQpIGNvbnN0OwotICAgIHZvaWQgcHJvY2Vz
c1plcm9MZW5ndGhTdWJwYXRocygpOwogCiAgICAgYm9vbCBzaG91bGRHZW5lcmF0ZU1hcmtlclBv
c2l0aW9ucygpIGNvbnN0OwogICAgIEZsb2F0UmVjdCBtYXJrZXJSZWN0KGZsb2F0IHN0cm9rZVdp
ZHRoKSBjb25zdDsKICAgICB2b2lkIHByb2Nlc3NNYXJrZXJQb3NpdGlvbnMoKTsKIAotICAgIHZv
aWQgZmlsbFNoYXBlKFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0KiwgUGF0aCosIFJlbmRl
clNWR1NoYXBlKik7Ci0gICAgdm9pZCBzdHJva2VQYXRoKFJlbmRlclN0eWxlKiwgR3JhcGhpY3ND
b250ZXh0KiwgUGF0aCosIFJlbmRlclNWR1Jlc291cmNlKiwKLSAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQ29sb3ImLCBpbnQpOwotICAgIHZvaWQgZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3ND
b250ZXh0Kik7CisgICAgdm9pZCBmaWxsU2hhcGUoUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRl
eHQqKTsKKyAgICB2b2lkIHN0cm9rZVNoYXBlKFJlbmRlclN0eWxlKiwgR3JhcGhpY3NDb250ZXh0
Kik7CisgICAgdm9pZCBmaWxsQW5kU3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0Kik7CiAgICAg
dm9pZCBkcmF3TWFya2VycyhQYWludEluZm8mKTsKIAogcHJpdmF0ZToKICAgICBGbG9hdFJlY3Qg
bV9yZXBhaW50Qm91bmRpbmdCb3g7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fbG9jYWxUcmFuc2Zv
cm07CiAgICAgT3duUHRyPFBhdGg+IG1fcGF0aDsKLSAgICBWZWN0b3I8RmxvYXRQb2ludD4gbV96
ZXJvTGVuZ3RoTGluZWNhcExvY2F0aW9uczsKICAgICBWZWN0b3I8TWFya2VyUG9zaXRpb24+IG1f
bWFya2VyUG9zaXRpb25zOwogCiAgICAgYm9vbCBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA6IDE7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152046</attachid>
            <date>2012-07-12 13:38:56 -0700</date>
            <delta_ts>2012-07-17 13:56:40 -0700</delta_ts>
            <desc>Update per reviewer comments</desc>
            <filename>90716.3.patch</filename>
            <type>text/plain</type>
            <size>21669</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjQ5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBACisyMDEyLTA3LTEyICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgTW92ZSB6ZXJvLWxlbmd0aC1zdWJw
YXRocyBmcm9tIFJlbmRlclNWR1NoYXBlIHRvIFJlbmRlclNWR1BhdGgKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNzE2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmlvdXNseSB6ZXJvLWxlbmd0aC1z
dWJwYXRoIGNvZGUgd2FzIHByZXNlbnQgaW4gUmVuZGVyU1ZHU2hhcGUgYnV0IGl0IGlzCisgICAg
ICAgIG9ubHkgbmVlZGVkIGluIFJlbmRlclNWR1BhdGguIFRoaXMgcGF0Y2ggbW92ZXMgdGhlIHpl
cm8tbGVuZ3RoLXN1YnBhdGggY29kZQorICAgICAgICB0byBSZW5kZXJTVkdQYXRoLgorCisgICAg
ICAgIEluIHRoaXMgY2hhbmdlLCB3ZSBnYWluOgorICAgICAgICAxKSBFbGxpcHNlcywgQ2lyY2xl
cywgYW5kIFJlY3RzIHdpbGwgbm8gbG9uZ2VyIGNhcnJ5IGFuIGVtcHR5IFZlY3RvciBub3IKKyAg
ICAgICAgICAgY2hlY2tzIGZvciB6ZXJvLWxlbmd0aCBzdWJwYXRocyB3aGljaCAocGVyIHRoZSBz
cGVjKSB0aGV5IGNhbm5vdCBoYXZlLgorICAgICAgICAyKSBSZW5kZXJTVkdTaGFwZSwgdGhlIHN1
cGVyY2xhc3Mgb2YgYWxsIHNoYXBlIHJlbmRlcmluZywgaGFzIGJlZW4KKyAgICAgICAgICAgZHJh
c3RpY2FsbHkgc2ltcGxpZmllZCBieSByZW1vdmluZyA3MCBsaW5lcyBvZiBjb2RlIHRoYXQgb25s
eSBhcHBsaWVzCisgICAgICAgICAgIHRvIFBhdGggcmVuZGVyaW5nLiBUaGlzIGdlbmVyYWxseSBh
aWRzIGluIGNvZGUgdW5kZXJzdGFuZGFiaWxpdHkuCisKKyAgICAgICAgVGhlIHBhdGNoIGlzIHBy
aW1hcmlseSBhIHN0cmFpZ2h0Zm9yd2FyZCBjb2RlIG1vdmUgYnV0IHVzZVN0cm9rZVN0eWxlVG9G
aWxsCisgICAgICAgIG5lZWRzIGZ1cnRoZXIgZXhwbGFuYXRpb246CisgICAgICAgIFplcm8tbGVu
Z3RoLXN1YnBhdGhzIGFyZSBkcmF3biB1c2luZyByZWN0YW5ndWxhciBhbmQgY2lyY3VsYXIgcGF0
aHMgd2hpY2gKKyAgICAgICAgYXJlIGZpbGxlZC4KKyAgICAgICAgUHJldmlvdXNseSBpbiBSZW5k
ZXJTVkdTaGFwZTo6ZmlsbEFuZFN0cm9rZVBhdGgsIHN0cm9rZVBhdGggd2FzIGNhbGxlZCBmb3IK
KyAgICAgICAgdGhlIG1haW4gcGF0aCB3aXRoIEFwcGx5VG9TdHJva2VNb2RlIGFuZCB0aGVuIHN0
cm9rZVBhdGggd2FzIGNhbGxlZCBmb3IKKyAgICAgICAgZWFjaCB6ZXJvLWxlbmd0aC1zdWJwYXRo
IHdpdGggQXBwbHlUb0ZpbGxNb2RlLgorICAgICAgICBBcHBseVRvRmlsbE1vZGUgaGFkIHRoZSBl
ZmZlY3Qgb2Ygc2V0dGluZyB0aGUgY29udGV4dCdzIHN0cm9rZSBzdHlsZSB0bworICAgICAgICB0
aGUgZmlsbCBzdHlsZSBzbyB6ZXJvLWxlbmd0aC1zdWJwYXRocyB3ZXJlICJmaWxsZWQiIHdpdGgg
dGhlIHN0cm9rZSBzdHlsZS4KKyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaCwgdGhlIGNvbnRleHQg
aXMgb25seSBzZXR1cCBvbmNlICh3aGljaCBpcyBmYXN0ZXIhKSB1c2luZworICAgICAgICBBcHBs
eVRvU3Ryb2tlTW9kZSBzbyB3ZSBtYW51YWxseSBzZXQgdGhlIHN0cm9rZSBzdHlsZSB0byB0aGUg
ZmlsbCBzdHlsZQorICAgICAgICB1c2luZyB1c2VTdHJva2VTdHlsZVRvRmlsbC4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIGp1c3QgYSByZWZhY3RvcmluZy4KKworICAgICAgICAqIHJlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRo
Ojp1cGRhdGVTaGFwZUZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUGF0aDo6dXBkYXRlU3Ryb2tlQm91bmRpbmdCb3gpOgorICAgICAg
ICAoV2ViQ29yZTo6dXNlU3Ryb2tlU3R5bGVUb0ZpbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU1ZHUGF0aDo6c3Ryb2tlU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUGF0
aDo6c2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdQYXRoOjpzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdQYXRoOjp6ZXJvTGVuZ3RoTGluZWNhcFBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUGF0aDo6emVyb0xlbmd0aFN1YnBhdGhSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1BhdGg6OnVwZGF0ZVplcm9MZW5ndGhTdWJwYXRocyk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmg6CisgICAgICAgIChSZW5kZXJTVkdQYXRo
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjp1cGRhdGVTaGFwZUZyb21FbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpmaWxsQW5kU3Ryb2tlU2hhcGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1NoYXBlOjpjYWxjdWxhdGVTdHJva2VCb3VuZGluZ0JveCk6CisgICAgICAgICogcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hh
cGU6Omhhc1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Omhhc05vblNj
YWxpbmdTdHJva2UpOgorICAgICAgICAoUmVuZGVyU1ZHU2hhcGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZUJvdW5kaW5nQm94KToKKwogMjAxMi0wNy0xMSAgRGF2
aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMDAwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAJKHJldmlzaW9uIDEyMjQ3MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdTdWJwYXRo
RGF0YS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDYgKzQ1LDEyNCBAQCBSZW5k
ZXJTVkdQYXRoOjp+UmVuZGVyU1ZHUGF0aCgpCiB7CiB9CiAKK3ZvaWQgUmVuZGVyU1ZHUGF0aDo6
dXBkYXRlU2hhcGVGcm9tRWxlbWVudCgpCit7CisgICAgUmVuZGVyU1ZHU2hhcGU6OnVwZGF0ZVNo
YXBlRnJvbUVsZW1lbnQoKTsKKyAgICB1cGRhdGVaZXJvTGVuZ3RoU3VicGF0aHMoKTsKKworICAg
IG1fc3Ryb2tlQm91bmRpbmdCb3ggPSB1cGRhdGVTdHJva2VCb3VuZGluZ0JveCgpOworfQorCitG
bG9hdFJlY3QgUmVuZGVyU1ZHUGF0aDo6dXBkYXRlU3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdAor
eworICAgIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCA9IG1fc3Ryb2tlQm91bmRpbmdCb3g7
CisKKyAgICBpZiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkpIHsKKyAgICAgICAg
Ly8gRklYTUU6IHplcm8tbGVuZ3RoIHN1YnBhdGhzIGRvIG5vdCByZXNwZWN0IHZlY3Rvci1lZmZl
Y3QgPSBub24tc2NhbGluZy1zdHJva2UuCisgICAgICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gdGhp
cy0+c3Ryb2tlV2lkdGgoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3plcm9M
ZW5ndGhMaW5lY2FwTG9jYXRpb25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgc3Ryb2tlQm91
bmRpbmdCb3gudW5pdGUoemVyb0xlbmd0aFN1YnBhdGhSZWN0KG1femVyb0xlbmd0aExpbmVjYXBM
b2NhdGlvbnNbaV0sIHN0cm9rZVdpZHRoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHN0cm9rZUJv
dW5kaW5nQm94OworfQorCitzdGF0aWMgdm9pZCB1c2VTdHJva2VTdHlsZVRvRmlsbChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgaWYgKEdyYWRpZW50KiBncmFkaWVudCA9IGNvbnRl
eHQtPnN0cm9rZUdyYWRpZW50KCkpCisgICAgICAgIGNvbnRleHQtPnNldEZpbGxHcmFkaWVudChn
cmFkaWVudCk7CisgICAgZWxzZSBpZiAoUGF0dGVybiogcGF0dGVybiA9IGNvbnRleHQtPnN0cm9r
ZVBhdHRlcm4oKSkKKyAgICAgICAgY29udGV4dC0+c2V0RmlsbFBhdHRlcm4ocGF0dGVybik7Cisg
ICAgZWxzZQorICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoY29udGV4dC0+c3Ryb2tlQ29s
b3IoKSwgY29udGV4dC0+c3Ryb2tlQ29sb3JTcGFjZSgpKTsKK30KKwordm9pZCBSZW5kZXJTVkdQ
YXRoOjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAg
aWYgKCFzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNWaXNpYmxlU3Ryb2tlKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZShjb250ZXh0KTsKKworICAg
IGlmIChtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgUGF0aCogdXNlUGF0aDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGlu
Z1RyYW5zZm9ybTsKKworICAgIGlmIChoYXNOb25TY2FsaW5nU3Ryb2tlKCkpCisgICAgICAgIG5v
blNjYWxpbmdUcmFuc2Zvcm0gPSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKCk7CisKKyAgICBj
b250ZXh0LT5zYXZlKCk7CisgICAgdXNlU3Ryb2tlU3R5bGVUb0ZpbGwoY29udGV4dCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zLnNpemUo
KTsgKytpKSB7CisgICAgICAgIHVzZVBhdGggPSB6ZXJvTGVuZ3RoTGluZWNhcFBhdGgobV96ZXJv
TGVuZ3RoTGluZWNhcExvY2F0aW9uc1tpXSk7CisgICAgICAgIGlmIChoYXNOb25TY2FsaW5nU3Ry
b2tlKCkpCisgICAgICAgICAgICB1c2VQYXRoID0gbm9uU2NhbGluZ1N0cm9rZVBhdGgodXNlUGF0
aCwgbm9uU2NhbGluZ1RyYW5zZm9ybSk7CisgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCp1c2VQ
YXRoKTsKKyAgICB9CisgICAgY29udGV4dC0+cmVzdG9yZSgpOworfQorCitib29sIFJlbmRlclNW
R1BhdGg6OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpCit7CisgICAgaWYgKFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRh
aW5zKHBvaW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSogc3ZnU3R5bGUgPSBzdHlsZSgpLT5zdmdTdHlsZSgpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV96ZXJvTGVuZ3RoTGluZWNhcExvY2F0aW9ucy5zaXplKCk7ICsraSkgeworICAg
ICAgICBBU1NFUlQoc3ZnU3R5bGUtPmhhc1N0cm9rZSgpKTsKKyAgICAgICAgZmxvYXQgc3Ryb2tl
V2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgpOworICAgICAgICBpZiAoc3ZnU3R5bGUtPmNhcFN0
eWxlKCkgPT0gU3F1YXJlQ2FwKSB7CisgICAgICAgICAgICBpZiAoemVyb0xlbmd0aFN1YnBhdGhS
ZWN0KG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnNbaV0sIHN0cm9rZVdpZHRoKS5jb250YWlu
cyhwb2ludCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBBU1NFUlQoc3ZnU3R5bGUtPmNhcFN0eWxlKCkgPT0gUm91bmRDYXApOwor
ICAgICAgICAgICAgRmxvYXRQb2ludCByYWRpdXNWZWN0b3IocG9pbnQueCgpIC0gbV96ZXJvTGVu
Z3RoTGluZWNhcExvY2F0aW9uc1tpXS54KCksIHBvaW50LnkoKSAtICBtX3plcm9MZW5ndGhMaW5l
Y2FwTG9jYXRpb25zW2ldLnkoKSk7CisgICAgICAgICAgICBpZiAocmFkaXVzVmVjdG9yLmxlbmd0
aFNxdWFyZWQoKSA8IHN0cm9rZVdpZHRoICogc3Ryb2tlV2lkdGggKiAuMjVmKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBSZW5kZXJTVkdQYXRoOjpzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgp
IGNvbnN0Cit7CisgICAgLy8gU3BlYygxMS40KTogQW55IHplcm8gbGVuZ3RoIHN1YnBhdGggc2hh
bGwgbm90IGJlIHN0cm9rZWQgaWYgdGhlICJzdHJva2UtbGluZWNhcCIgcHJvcGVydHkgaGFzIGEg
dmFsdWUgb2YgYnV0dAorICAgIC8vIGJ1dCBzaGFsbCBiZSBzdHJva2VkIGlmIHRoZSAic3Ryb2tl
LWxpbmVjYXAiIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIHJvdW5kIG9yIHNxdWFyZQorICAgIHJl
dHVybiBzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSAmJiBzdHlsZSgpLT5zdmdTdHls
ZSgpLT5jYXBTdHlsZSgpICE9IEJ1dHRDYXA7Cit9CisKK1BhdGgqIFJlbmRlclNWR1BhdGg6Onpl
cm9MZW5ndGhMaW5lY2FwUGF0aChjb25zdCBGbG9hdFBvaW50JiBsaW5lY2FwUG9zaXRpb24pIGNv
bnN0Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYXRoLCB0ZW1wUGF0aCwgKCkpOworCisg
ICAgdGVtcFBhdGguY2xlYXIoKTsKKyAgICBpZiAoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5
bGUoKSA9PSBTcXVhcmVDYXApCisgICAgICAgIHRlbXBQYXRoLmFkZFJlY3QoemVyb0xlbmd0aFN1
YnBhdGhSZWN0KGxpbmVjYXBQb3NpdGlvbiwgdGhpcy0+c3Ryb2tlV2lkdGgoKSkpOworICAgIGVs
c2UKKyAgICAgICAgdGVtcFBhdGguYWRkRWxsaXBzZSh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QobGlu
ZWNhcFBvc2l0aW9uLCB0aGlzLT5zdHJva2VXaWR0aCgpKSk7CisKKyAgICByZXR1cm4gJnRlbXBQ
YXRoOworfQorCitGbG9hdFJlY3QgUmVuZGVyU1ZHUGF0aDo6emVyb0xlbmd0aFN1YnBhdGhSZWN0
KGNvbnN0IEZsb2F0UG9pbnQmIGxpbmVjYXBQb3NpdGlvbiwgZmxvYXQgc3Ryb2tlV2lkdGgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEZsb2F0UmVjdChsaW5lY2FwUG9zaXRpb24ueCgpIC0gc3Ryb2tl
V2lkdGggLyAyLCBsaW5lY2FwUG9zaXRpb24ueSgpIC0gc3Ryb2tlV2lkdGggLyAyLCBzdHJva2VX
aWR0aCwgc3Ryb2tlV2lkdGgpOworfQorCit2b2lkIFJlbmRlclNWR1BhdGg6OnVwZGF0ZVplcm9M
ZW5ndGhTdWJwYXRocygpCit7CisgICAgbV96ZXJvTGVuZ3RoTGluZWNhcExvY2F0aW9ucy5jbGVh
cigpOworCisgICAgaWYgKCFzdHJva2VXaWR0aCgpIHx8ICFzaG91bGRTdHJva2VaZXJvTGVuZ3Ro
U3VicGF0aCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTVkdTdWJwYXRoRGF0YSBzdWJwYXRo
RGF0YShtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zKTsKKyAgICBwYXRoKCkuYXBwbHkoJnN1
YnBhdGhEYXRhLCBTVkdTdWJwYXRoRGF0YTo6dXBkYXRlRnJvbVBhdGhFbGVtZW50KTsKKyAgICBz
dWJwYXRoRGF0YS5wYXRoSXNEb25lKCk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAko
cmV2aXNpb24gMTIyNDcxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdQYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDE5IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgdmlydHVhbCBib29sIGlzU1ZHUGF0aCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVu
ZGVyU1ZHUGF0aCI7IH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTaGFwZUZyb21FbGVtZW50
KCkgT1ZFUlJJREU7CisgICAgRmxvYXRSZWN0IHVwZGF0ZVN0cm9rZUJvdW5kaW5nQm94KCkgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0KikgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFp
bnMoY29uc3QgRmxvYXRQb2ludCYpIE9WRVJSSURFOworCisgICAgYm9vbCBzaG91bGRTdHJva2Va
ZXJvTGVuZ3RoU3VicGF0aCgpIGNvbnN0OworICAgIFBhdGgqIHplcm9MZW5ndGhMaW5lY2FwUGF0
aChjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgRmxvYXRSZWN0IHplcm9MZW5ndGhTdWJw
YXRoUmVjdChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQpIGNvbnN0OworICAgIHZvaWQgdXBkYXRl
WmVyb0xlbmd0aFN1YnBhdGhzKCk7CisKKyAgICBWZWN0b3I8RmxvYXRQb2ludD4gbV96ZXJvTGVu
Z3RoTGluZWNhcExvY2F0aW9uczsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCShyZXZpc2lvbiAxMjI0NzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgogI2luY2x1
ZGUgIlNWR1Jlc291cmNlc0NhY2hlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdTdWJwYXRoRGF0YS5oIgogI2luY2x1ZGUgIlNWR1Ry
YW5zZm9ybUxpc3QuaCIKICNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJT
dHJva2VTdHlsZUFwcGxpZXIuaCIKQEAgLTcyLDcgKzcxLDYgQEAgdm9pZCBSZW5kZXJTVkdTaGFw
ZTo6dXBkYXRlU2hhcGVGcm9tRWxlbQogCiAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+
KG5vZGUoKSk7CiAgICAgdXBkYXRlUGF0aEZyb21HcmFwaGljc0VsZW1lbnQoZWxlbWVudCwgcGF0
aCgpKTsKLSAgICBwcm9jZXNzWmVyb0xlbmd0aFN1YnBhdGhzKCk7CiAgICAgcHJvY2Vzc01hcmtl
clBvc2l0aW9ucygpOwogCiAgICAgbV9maWxsQm91bmRpbmdCb3ggPSBjYWxjdWxhdGVPYmplY3RC
b3VuZGluZ0JveCgpOwpAQCAtOTEsOCArODksMTMgQEAgdm9pZCBSZW5kZXJTVkdTaGFwZTo6Zmls
bFNoYXBlKEdyYXBoaWNzQwogCiB2b2lkIFJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZShHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxl
KCktPmhhc1Zpc2libGVTdHJva2UoKSkKLSAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aChwYXRo
KCkpOworICAgIEFTU0VSVChtX3BhdGgpOworICAgIFBhdGgqIHVzZVBhdGggPSBtX3BhdGguZ2V0
KCk7CisKKyAgICBpZiAoaGFzTm9uU2NhbGluZ1N0cm9rZSgpKQorICAgICAgICB1c2VQYXRoID0g
bm9uU2NhbGluZ1N0cm9rZVBhdGgodXNlUGF0aCwgbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSgp
KTsKKworICAgIGNvbnRleHQtPnN0cm9rZVBhdGgoKnVzZVBhdGgpOwogfQogCiBib29sIFJlbmRl
clNWR1NoYXBlOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50KQpAQCAtMTM2LDIwICsxMzksNiBAQCBib29sIFJlbmRlclNWR1NoYXBlOjpzdHJva2VD
b250YWlucyhjb25zCiAgICAgaWYgKHJlcXVpcmVzU3Ryb2tlICYmICFSZW5kZXJTVkdSZXNvdXJj
ZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3pl
cm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEFTU0VSVChz
dHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSk7Ci0gICAgICAgIGZsb2F0IHN0cm9rZVdp
ZHRoID0gdGhpcy0+c3Ryb2tlV2lkdGgoKTsKLSAgICAgICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxl
KCktPmNhcFN0eWxlKCkgPT0gU3F1YXJlQ2FwKSB7Ci0gICAgICAgICAgICBpZiAoemVyb0xlbmd0
aFN1YnBhdGhSZWN0KG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnNbaV0sIHN0cm9rZVdpZHRo
KS5jb250YWlucyhwb2ludCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5
bGUoKSA9PSBSb3VuZENhcCk7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHJhZGl1c1ZlY3Rvcihw
b2ludC54KCkgLSBtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zW2ldLngoKSwgcG9pbnQueSgp
IC0gIG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnNbaV0ueSgpKTsKLSAgICAgICAgICAgIGlm
IChyYWRpdXNWZWN0b3IubGVuZ3RoU3F1YXJlZCgpIDwgc3Ryb2tlV2lkdGggKiBzdHJva2VXaWR0
aCAqIC4yNWYpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9
Ci0KICAgICByZXR1cm4gc2hhcGVEZXBlbmRlbnRTdHJva2VDb250YWlucyhwb2ludCk7CiB9CiAK
QEAgLTIxMiwxMyArMjAxLDYgQEAgQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1NoYXBlOjpub25T
Y2FsaQogICAgIHJldHVybiBlbGVtZW50LT5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRhYmxlOjpEaXNh
bGxvd1N0eWxlVXBkYXRlKTsKIH0KIAotYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2hvdWxkU3Ryb2tl
WmVyb0xlbmd0aFN1YnBhdGgoKSBjb25zdAotewotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJv
IGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSAic3Ryb2tlLWxpbmVj
YXAiIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ry
b2tlZCBpZiB0aGUgInN0cm9rZS1saW5lY2FwIiBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3Vu
ZCBvciBzcXVhcmUKLSAgICByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkg
JiYgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSAhPSBCdXR0Q2FwOwotfQotCiBib29s
IFJlbmRlclNWR1NoYXBlOjpzaG91bGRHZW5lcmF0ZU1hcmtlclBvc2l0aW9ucygpIGNvbnN0CiB7
CiAgICAgaWYgKCFzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNNYXJrZXJzKCkpCkBAIC0yMzUsOTQg
KzIxNyw1NSBAQCBib29sIFJlbmRlclNWR1NoYXBlOjpzaG91bGRHZW5lcmF0ZU1hcmtlCiAgICAg
cmV0dXJuIHJlc291cmNlcy0+bWFya2VyU3RhcnQoKSB8fCByZXNvdXJjZXMtPm1hcmtlck1pZCgp
IHx8IHJlc291cmNlcy0+bWFya2VyRW5kKCk7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdTaGFw
ZTo6emVyb0xlbmd0aFN1YnBhdGhSZWN0KGNvbnN0IEZsb2F0UG9pbnQmIGxpbmVjYXBQb3NpdGlv
biwgZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChsaW5l
Y2FwUG9zaXRpb24ueCgpIC0gc3Ryb2tlV2lkdGggLyAyLCBsaW5lY2FwUG9zaXRpb24ueSgpIC0g
c3Ryb2tlV2lkdGggLyAyLCBzdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgpOwotfQotCi1QYXRoKiBS
ZW5kZXJTVkdTaGFwZTo6emVyb0xlbmd0aExpbmVjYXBQYXRoKGNvbnN0IEZsb2F0UG9pbnQmIGxp
bmVjYXBQb3NpdGlvbikKLXsKLSAgICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3Vi
cGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUgInN0cm9rZS1saW5lY2FwIiBwcm9wZXJ0
eSBoYXMgYSB2YWx1ZSBvZiBidXR0Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhl
ICJzdHJva2UtbGluZWNhcCIgcHJvcGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJl
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYXRoLCB0ZW1wUGF0aCwgKCkpOwotCi0gICAgdGVt
cFBhdGguY2xlYXIoKTsKLSAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHRoaXMtPnN0cm9rZVdpZHRo
KCk7Ci0gICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gU3F1YXJlQ2Fw
KQotICAgICAgICB0ZW1wUGF0aC5hZGRSZWN0KHplcm9MZW5ndGhTdWJwYXRoUmVjdChsaW5lY2Fw
UG9zaXRpb24sIHN0cm9rZVdpZHRoKSk7Ci0gICAgZWxzZQotICAgICAgICB0ZW1wUGF0aC5hZGRF
bGxpcHNlKHplcm9MZW5ndGhTdWJwYXRoUmVjdChsaW5lY2FwUG9zaXRpb24sIHN0cm9rZVdpZHRo
KSk7Ci0KLSAgICByZXR1cm4gJnRlbXBQYXRoOwotfQotCi12b2lkIFJlbmRlclNWR1NoYXBlOjpm
aWxsU2hhcGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFBh
dGgqIHBhdGgsIFJlbmRlclNWR1NoYXBlKiBzaGFwZSkKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZp
bGxTaGFwZShSZW5kZXJTdHlsZSogc3R5bGUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKIHsK
ICAgICBDb2xvciBmYWxsYmFja0NvbG9yOwogICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmls
bFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3Vy
Y2UodGhpcywgc3R5bGUsIGZhbGxiYWNrQ29sb3IpKSB7CiAgICAgICAgIGlmIChmaWxsUGFpbnRp
bmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0Zp
bGxNb2RlKSkKLSAgICAgICAgICAgIGZpbGxQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNv
dXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUsIHBhdGgsIHNoYXBlKTsKKyAgICAg
ICAgICAgIGZpbGxQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250
ZXh0LCBBcHBseVRvRmlsbE1vZGUsIDAsIHRoaXMpOwogICAgICAgICBlbHNlIGlmIChmYWxsYmFj
a0NvbG9yLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENv
bG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFp
bnRpbmdSZXNvdXJjZSgpOwogICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3Io
ZmFsbGJhY2tDb2xvcik7CiAgICAgICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlS
ZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAg
ICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0
LCBBcHBseVRvRmlsbE1vZGUsIHBhdGgsIHNoYXBlKTsKKyAgICAgICAgICAgICAgICBmYWxsYmFj
a1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1v
ZGUsIDAsIHRoaXMpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFJlbmRlclNWR1NoYXBl
OjpzdHJva2VQYXRoKFJlbmRlclN0eWxlKiBzdHlsZSwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBQYXRoKiBwYXRoLCBSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29sb3ImIGZhbGxiYWNrQ29s
b3IsIGludCBhcHBseU1vZGUpCit2b2lkIFJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZShSZW5k
ZXJTdHlsZSogc3R5bGUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBpZiAoIXN0
eWxlLT5zdmdTdHlsZSgpLT5oYXNWaXNpYmxlU3Ryb2tlKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChzdHJva2VQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxl
LCBjb250ZXh0LCBhcHBseU1vZGUpKSB7Ci0gICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3VyY2Ut
PnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgcGF0aCwgdGhpcyk7
Ci0gICAgICAgIHJldHVybjsKKyAgICBDb2xvciBmYWxsYmFja0NvbG9yOworICAgIGlmIChSZW5k
ZXJTVkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNl
OjpzdHJva2VQYWludGluZ1Jlc291cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKSkgewor
ICAgICAgICBpZiAoc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBz
dHlsZSwgY29udGV4dCwgQXBwbHlUb1N0cm9rZU1vZGUpKQorICAgICAgICAgICAgc3Ryb2tlUGFp
bnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb1N0
cm9rZU1vZGUsIDAsIHRoaXMpOworICAgICAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFs
aWQoKSkgeworICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFj
a1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJj
ZSgpOworICAgICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xv
cik7CisgICAgICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlz
LCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb1N0cm9rZU1vZGUpKQorICAgICAgICAgICAgICAgIGZh
bGxiYWNrUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9T
dHJva2VNb2RlLCAwLCB0aGlzKTsKKyAgICAgICAgfQogICAgIH0KLQotICAgIGlmICghZmFsbGJh
Y2tDb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvciogZmFsbGJhY2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFy
ZWRTb2xpZFBhaW50aW5nUmVzb3VyY2UoKTsKLSAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xv
cihmYWxsYmFja0NvbG9yKTsKLSAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJj
ZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgYXBwbHlNb2RlKSkKLSAgICAgICAgZmFsbGJhY2tSZXNv
dXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgYXBwbHlNb2RlLCBwYXRoLCB0
aGlzKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KQordm9pZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbEFuZFN0cm9rZVNo
YXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKIHsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSB0aGlzLT5zdHlsZSgpOwogCi0gICAgZmlsbFNoYXBlKHN0eWxlLCBjb250ZXh0LCAwLCB0aGlz
KTsKKyAgICBmaWxsU2hhcGUoc3R5bGUsIGNvbnRleHQpOwogCi0gICAgQ29sb3IgZmFsbGJhY2tD
b2xvciA9IENvbG9yKCk7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVz
b3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBz
dHlsZSwgZmFsbGJhY2tDb2xvcik7Ci0gICAgaWYgKCFzdHJva2VQYWludGluZ1Jlc291cmNlKQor
ICAgIGlmICghc3R5bGUtPnN2Z1N0eWxlKCktPmhhc1Zpc2libGVTdHJva2UoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUGF0aCogdXNlUGF0aCA9IG1fcGF0aC5nZXQoKTsKICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQsIGZhbHNlKTsKICAgICBBZmZp
bmVUcmFuc2Zvcm0gbm9uU2NhbGluZ1RyYW5zZm9ybTsKIAogICAgIGlmIChoYXNOb25TY2FsaW5n
U3Ryb2tlKCkpIHsKLSAgICAgICAgbm9uU2NhbGluZ1RyYW5zZm9ybSA9IG5vblNjYWxpbmdTdHJv
a2VUcmFuc2Zvcm0oKTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdUcmFuc2Zv
cm0gPSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKCk7CiAgICAgICAgIGlmICghc2V0dXBOb25T
Y2FsaW5nU3Ryb2tlQ29udGV4dChub25TY2FsaW5nVHJhbnNmb3JtLCBzdGF0ZVNhdmVyKSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdXNlUGF0aCA9IG5vblNjYWxpbmdTdHJva2VQYXRo
KHVzZVBhdGgsIG5vblNjYWxpbmdUcmFuc2Zvcm0pOwogICAgIH0KIAotICAgIHN0cm9rZVBhdGgo
c3R5bGUsIGNvbnRleHQsIHVzZVBhdGgsIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UsIGZhbGxiYWNr
Q29sb3IsIEFwcGx5VG9TdHJva2VNb2RlKTsKLQotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJv
IGxlbmd0aCBzdWJwYXRoIHNoYWxsIG5vdCBiZSBzdHJva2VkIGlmIHRoZSAic3Ryb2tlLWxpbmVj
YXAiIHByb3BlcnR5IGhhcyBhIHZhbHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ry
b2tlZCBpZiB0aGUgInN0cm9rZS1saW5lY2FwIiBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3Vu
ZCBvciBzcXVhcmUKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1femVyb0xlbmd0aExpbmVj
YXBMb2NhdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUGF0aCogdXNlUGF0aCA9IHplcm9M
ZW5ndGhMaW5lY2FwUGF0aChtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zW2ldKTsKLSAgICAg
ICAgaWYgKGhhc05vblNjYWxpbmdTdHJva2UoKSkKLSAgICAgICAgICAgIHVzZVBhdGggPSBub25T
Y2FsaW5nU3Ryb2tlUGF0aCh1c2VQYXRoLCBub25TY2FsaW5nVHJhbnNmb3JtKTsKLSAgICAgICAg
c3Ryb2tlUGF0aChzdHlsZSwgY29udGV4dCwgdXNlUGF0aCwgc3Ryb2tlUGFpbnRpbmdSZXNvdXJj
ZSwgZmFsbGJhY2tDb2xvciwgQXBwbHlUb0ZpbGxNb2RlKTsKLSAgICB9CisgICAgc3Ryb2tlU2hh
cGUoc3R5bGUsIGNvbnRleHQpOwogfQogCiB2b2lkIFJlbmRlclNWR1NoYXBlOjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmKQpAQCAtMzQ3LDcgKzI5MCw3IEBA
IHZvaWQgUmVuZGVyU1ZHU2hhcGU6OnBhaW50KFBhaW50SW5mbyYgcGEKICAgICAgICAgICAgICAg
ICBpZiAoc3ZnU3R5bGUtPnNoYXBlUmVuZGVyaW5nKCkgPT0gU1JfQ1JJU1BFREdFUykKICAgICAg
ICAgICAgICAgICAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFz
KGZhbHNlKTsKIAotICAgICAgICAgICAgICAgIGZpbGxBbmRTdHJva2VQYXRoKGNoaWxkUGFpbnRJ
bmZvLmNvbnRleHQpOworICAgICAgICAgICAgICAgIGZpbGxBbmRTdHJva2VTaGFwZShjaGlsZFBh
aW50SW5mby5jb250ZXh0KTsKICAgICAgICAgICAgICAgICBpZiAoIW1fbWFya2VyUG9zaXRpb25z
LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgZHJhd01hcmtlcnMoY2hpbGRQYWludElu
Zm8pOwogICAgICAgICAgICAgfQpAQCAtNDUzLDExICszOTYsNiBAQCBGbG9hdFJlY3QgUmVuZGVy
U1ZHU2hhcGU6OmNhbGN1bGF0ZVN0cm9rCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgc3Ryb2tlQm91bmRpbmdCb3gudW5pdGUocGF0aCgpLnN0cm9rZUJvdW5kaW5n
UmVjdCgmc3Ryb2tlU3R5bGUpKTsKLQotICAgICAgICAvLyBGSVhNRTogemVyby1sZW5ndGggc3Vi
cGF0aHMgZG8gbm90IHJlc3BlY3QgdmVjdG9yLWVmZmVjdCA9IG5vbi1zY2FsaW5nLXN0cm9rZS4K
LSAgICAgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnMuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICBzdHJva2VCb3VuZGluZ0JveC51bml0ZSh6ZXJvTGVuZ3Ro
U3VicGF0aFJlY3QobV96ZXJvTGVuZ3RoTGluZWNhcExvY2F0aW9uc1tpXSwgc3Ryb2tlV2lkdGgp
KTsKICAgICB9CiAKICAgICBpZiAoIW1fbWFya2VyUG9zaXRpb25zLmlzRW1wdHkoKSkKQEAgLTUx
MCwyMSArNDQ4LDYgQEAgdm9pZCBSZW5kZXJTVkdTaGFwZTo6ZHJhd01hcmtlcnMoUGFpbnRJbgog
ICAgIH0KIH0KIAotdm9pZCBSZW5kZXJTVkdTaGFwZTo6cHJvY2Vzc1plcm9MZW5ndGhTdWJwYXRo
cygpCi17Ci0gICAgbV96ZXJvTGVuZ3RoTGluZWNhcExvY2F0aW9ucy5jbGVhcigpOwotCi0gICAg
ZmxvYXQgc3Ryb2tlV2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgpOwotICAgIGlmICghc3Ryb2tl
V2lkdGggfHwgIXNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChtX3BhdGgpOwotCi0gICAgU1ZHU3VicGF0aERhdGEgc3VicGF0aERh
dGEobV96ZXJvTGVuZ3RoTGluZWNhcExvY2F0aW9ucyk7Ci0gICAgbV9wYXRoLT5hcHBseSgmc3Vi
cGF0aERhdGEsIFNWR1N1YnBhdGhEYXRhOjp1cGRhdGVGcm9tUGF0aEVsZW1lbnQpOwotICAgIHN1
YnBhdGhEYXRhLnBhdGhJc0RvbmUoKTsKLX0KLQogdm9pZCBSZW5kZXJTVkdTaGFwZTo6cHJvY2Vz
c01hcmtlclBvc2l0aW9ucygpCiB7CiAgICAgbV9tYXJrZXJQb3NpdGlvbnMuY2xlYXIoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgJKHJl
dmlzaW9uIDEyMjQ3MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
U2hhcGUuaAkod29ya2luZyBjb3B5KQpAQCAtODksOSArODksMTIgQEAgcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgYm9vbCBzaGFwZURlcGVuZGVudEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50
JiwgY29uc3QgV2luZFJ1bGUpIGNvbnN0OwogICAgIGZsb2F0IHN0cm9rZVdpZHRoKCkgY29uc3Q7
CiAgICAgYm9vbCBoYXNQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoLmdldCgpOyB9Ci0gICAg
Ym9vbCBoYXNOb25TY2FsaW5nU3Ryb2tlKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5
bGUoKS0+dmVjdG9yRWZmZWN0KCkgPT0gVkVfTk9OX1NDQUxJTkdfU1RST0tFOyB9CiAgICAgYm9v
bCBoYXNTbW9vdGhTdHJva2UoKSBjb25zdDsKIAorICAgIGJvb2wgaGFzTm9uU2NhbGluZ1N0cm9r
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPnZlY3RvckVmZmVjdCgpID09
IFZFX05PTl9TQ0FMSU5HX1NUUk9LRTsgfQorICAgIEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5n
U3Ryb2tlVHJhbnNmb3JtKCkgY29uc3Q7CisgICAgUGF0aCogbm9uU2NhbGluZ1N0cm9rZVBhdGgo
Y29uc3QgUGF0aCosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGNvbnN0OworCiAgICAgRmxvYXRS
ZWN0IG1fZmlsbEJvdW5kaW5nQm94OwogICAgIEZsb2F0UmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94
OwogCkBAIC0xMTUsMzUgKzExOCwyNSBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBGbG9hdFJl
Y3Qgb2JqZWN0Qm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX2ZpbGxCb3VuZGluZ0JveDsg
fQogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1
cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQotCiAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZU9iamVj
dEJvdW5kaW5nQm94KCkgY29uc3Q7CiAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZVN0cm9rZUJvdW5k
aW5nQm94KCkgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVSZXBhaW50Qm91bmRpbmdCb3goKTsKIAot
ICAgIEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKCkgY29uc3Q7CiAg
ICAgYm9vbCBzZXR1cE5vblNjYWxpbmdTdHJva2VDb250ZXh0KEFmZmluZVRyYW5zZm9ybSYsIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXImKTsKLSAgICBQYXRoKiBub25TY2FsaW5nU3Ryb2tlUGF0
aChjb25zdCBQYXRoKiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgY29uc3Q7Ci0KLSAgICBQYXRo
KiB6ZXJvTGVuZ3RoTGluZWNhcFBhdGgoY29uc3QgRmxvYXRQb2ludCYpOwotICAgIGJvb2wgc2hv
dWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgemVyb0xl
bmd0aFN1YnBhdGhSZWN0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCkgY29uc3Q7Ci0gICAgdm9p
ZCBwcm9jZXNzWmVyb0xlbmd0aFN1YnBhdGhzKCk7CiAKICAgICBib29sIHNob3VsZEdlbmVyYXRl
TWFya2VyUG9zaXRpb25zKCkgY29uc3Q7CiAgICAgRmxvYXRSZWN0IG1hcmtlclJlY3QoZmxvYXQg
c3Ryb2tlV2lkdGgpIGNvbnN0OwogICAgIHZvaWQgcHJvY2Vzc01hcmtlclBvc2l0aW9ucygpOwog
Ci0gICAgdm9pZCBmaWxsU2hhcGUoUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqLCBQYXRo
KiwgUmVuZGVyU1ZHU2hhcGUqKTsKLSAgICB2b2lkIHN0cm9rZVBhdGgoUmVuZGVyU3R5bGUqLCBH
cmFwaGljc0NvbnRleHQqLCBQYXRoKiwgUmVuZGVyU1ZHUmVzb3VyY2UqLAotICAgICAgICAgICAg
ICAgICAgICBjb25zdCBDb2xvciYsIGludCk7Ci0gICAgdm9pZCBmaWxsQW5kU3Ryb2tlUGF0aChH
cmFwaGljc0NvbnRleHQqKTsKKyAgICB2b2lkIGZpbGxTaGFwZShSZW5kZXJTdHlsZSosIEdyYXBo
aWNzQ29udGV4dCopOworICAgIHZvaWQgc3Ryb2tlU2hhcGUoUmVuZGVyU3R5bGUqLCBHcmFwaGlj
c0NvbnRleHQqKTsKKyAgICB2b2lkIGZpbGxBbmRTdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQq
KTsKICAgICB2b2lkIGRyYXdNYXJrZXJzKFBhaW50SW5mbyYpOwogCiBwcml2YXRlOgogICAgIEZs
b2F0UmVjdCBtX3JlcGFpbnRCb3VuZGluZ0JveDsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2Nh
bFRyYW5zZm9ybTsKICAgICBPd25QdHI8UGF0aD4gbV9wYXRoOwotICAgIFZlY3RvcjxGbG9hdFBv
aW50PiBtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zOwogICAgIFZlY3RvcjxNYXJrZXJQb3Np
dGlvbj4gbV9tYXJrZXJQb3NpdGlvbnM7CiAKICAgICBib29sIG1fbmVlZHNCb3VuZGFyaWVzVXBk
YXRlIDogMTsK
</data>
<flag name="review"
          id="160640"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
    <flag name="commit-queue"
          id="160641"
          type_id="3"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152821</attachid>
            <date>2012-07-17 13:56:40 -0700</date>
            <delta_ts>2012-07-17 14:43:15 -0700</delta_ts>
            <desc>Update per reviewer comments (2)</desc>
            <filename>90716.4.patch</filename>
            <type>text/plain</type>
            <size>21705</size>
            <attacher name="Philip Rogers">pdr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjg3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBACisyMDEyLTA3LTE3ICBQaGlsaXAg
Um9nZXJzICA8cGRyQGdvb2dsZS5jb20+CisKKyAgICAgICAgTW92ZSB6ZXJvLWxlbmd0aC1zdWJw
YXRocyBmcm9tIFJlbmRlclNWR1NoYXBlIHRvIFJlbmRlclNWR1BhdGgKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNzE2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTmlrb2xhcyBaaW1tZXJtYW5uLgorCisgICAgICAgIFByZXZpb3VzbHkgemVyby1sZW5n
dGgtc3VicGF0aCBjb2RlIHdhcyBwcmVzZW50IGluIFJlbmRlclNWR1NoYXBlIGJ1dCBpdCBpcwor
ICAgICAgICBvbmx5IG5lZWRlZCBpbiBSZW5kZXJTVkdQYXRoLiBUaGlzIHBhdGNoIG1vdmVzIHRo
ZSB6ZXJvLWxlbmd0aC1zdWJwYXRoIGNvZGUKKyAgICAgICAgdG8gUmVuZGVyU1ZHUGF0aC4KKwor
ICAgICAgICBJbiB0aGlzIGNoYW5nZSwgd2UgZ2FpbjoKKyAgICAgICAgMSkgRWxsaXBzZXMsIENp
cmNsZXMsIGFuZCBSZWN0cyB3aWxsIG5vIGxvbmdlciBjYXJyeSBhbiBlbXB0eSBWZWN0b3Igbm9y
CisgICAgICAgICAgIGNoZWNrcyBmb3IgemVyby1sZW5ndGggc3VicGF0aHMgd2hpY2ggKHBlciB0
aGUgc3BlYykgdGhleSBjYW5ub3QgaGF2ZS4KKyAgICAgICAgMikgUmVuZGVyU1ZHU2hhcGUsIHRo
ZSBzdXBlcmNsYXNzIG9mIGFsbCBzaGFwZSByZW5kZXJpbmcsIGhhcyBiZWVuCisgICAgICAgICAg
IGRyYXN0aWNhbGx5IHNpbXBsaWZpZWQgYnkgcmVtb3ZpbmcgNzAgbGluZXMgb2YgY29kZSB0aGF0
IG9ubHkgYXBwbGllcworICAgICAgICAgICB0byBQYXRoIHJlbmRlcmluZy4gVGhpcyBnZW5lcmFs
bHkgYWlkcyBpbiBjb2RlIHVuZGVyc3RhbmRhYmlsaXR5LgorCisgICAgICAgIFRoZSBwYXRjaCBp
cyBwcmltYXJpbHkgYSBzdHJhaWdodGZvcndhcmQgY29kZSBtb3ZlIGJ1dCB1c2VTdHJva2VTdHls
ZVRvRmlsbAorICAgICAgICBuZWVkcyBmdXJ0aGVyIGV4cGxhbmF0aW9uOgorICAgICAgICBaZXJv
LWxlbmd0aC1zdWJwYXRocyBhcmUgZHJhd24gdXNpbmcgcmVjdGFuZ3VsYXIgYW5kIGNpcmN1bGFy
IHBhdGhzIHdoaWNoCisgICAgICAgIGFyZSBmaWxsZWQuCisgICAgICAgIFByZXZpb3VzbHkgaW4g
UmVuZGVyU1ZHU2hhcGU6OmZpbGxBbmRTdHJva2VQYXRoLCBzdHJva2VQYXRoIHdhcyBjYWxsZWQg
Zm9yCisgICAgICAgIHRoZSBtYWluIHBhdGggd2l0aCBBcHBseVRvU3Ryb2tlTW9kZSBhbmQgdGhl
biBzdHJva2VQYXRoIHdhcyBjYWxsZWQgZm9yCisgICAgICAgIGVhY2ggemVyby1sZW5ndGgtc3Vi
cGF0aCB3aXRoIEFwcGx5VG9GaWxsTW9kZS4KKyAgICAgICAgQXBwbHlUb0ZpbGxNb2RlIGhhZCB0
aGUgZWZmZWN0IG9mIHNldHRpbmcgdGhlIGNvbnRleHQncyBzdHJva2Ugc3R5bGUgdG8KKyAgICAg
ICAgdGhlIGZpbGwgc3R5bGUgc28gemVyby1sZW5ndGgtc3VicGF0aHMgd2VyZSAiZmlsbGVkIiB3
aXRoIHRoZSBzdHJva2Ugc3R5bGUuCisgICAgICAgIEFmdGVyIHRoaXMgcGF0Y2gsIHRoZSBjb250
ZXh0IGlzIG9ubHkgc2V0dXAgb25jZSAod2hpY2ggaXMgZmFzdGVyISkgdXNpbmcKKyAgICAgICAg
QXBwbHlUb1N0cm9rZU1vZGUgc28gd2UgbWFudWFsbHkgc2V0IHRoZSBzdHJva2Ugc3R5bGUgdG8g
dGhlIGZpbGwgc3R5bGUKKyAgICAgICAgdXNpbmcgdXNlU3Ryb2tlU3R5bGVUb0ZpbGwuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLCBqdXN0IGEgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
UGF0aDo6dXBkYXRlU2hhcGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1BhdGg6OmNhbGN1bGF0ZVVwZGF0ZWRTdHJva2VCb3VuZGlu
Z0JveCk6CisgICAgICAgIChXZWJDb3JlOjp1c2VTdHJva2VTdHlsZVRvRmlsbCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdQYXRoOjpzdHJva2VTaGFwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdQYXRoOjpzaGFwZURlcGVuZGVudFN0cm9rZUNvbnRhaW5zKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1BhdGg6OnNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1BhdGg6Onplcm9MZW5ndGhMaW5lY2FwUGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRoOjp6ZXJvTGVuZ3RoU3VicGF0aFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUGF0aDo6dXBkYXRlWmVyb0xlbmd0aFN1YnBh
dGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaDoKKyAgICAgICAg
KFJlbmRlclNWR1BhdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnVwZGF0ZVNoYXBlRnJvbUVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpzdHJva2VDb250YWlucyk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1NoYXBlOjpmaWxsU2hh
cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmZpbGxBbmRTdHJva2VTaGFw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6cGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6OmNhbGN1bGF0ZVN0cm9rZUJvdW5kaW5nQm94KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdTaGFwZTo6aGFzUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdT
aGFwZTo6aGFzTm9uU2NhbGluZ1N0cm9rZSk6CisgICAgICAgIChSZW5kZXJTVkdTaGFwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6c3Ryb2tlQm91bmRpbmdCb3gpOgorCiAy
MDEyLTA3LTE3ICBNYXggVnVqb3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KIAogICAgICAgICBV
cGRhdGUgQU5HTEUgaW4gV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1BhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAJKHJldmlzaW9uIDEyMjg3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIlNWR1BhdGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdTdWJwYXRoRGF0YS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDYgKzQ1LDEyMyBAQCBSZW5kZXJTVkdQ
YXRoOjp+UmVuZGVyU1ZHUGF0aCgpCiB7CiB9CiAKK3ZvaWQgUmVuZGVyU1ZHUGF0aDo6dXBkYXRl
U2hhcGVGcm9tRWxlbWVudCgpCit7CisgICAgUmVuZGVyU1ZHU2hhcGU6OnVwZGF0ZVNoYXBlRnJv
bUVsZW1lbnQoKTsKKyAgICB1cGRhdGVaZXJvTGVuZ3RoU3VicGF0aHMoKTsKKworICAgIG1fc3Ry
b2tlQm91bmRpbmdCb3ggPSBjYWxjdWxhdGVVcGRhdGVkU3Ryb2tlQm91bmRpbmdCb3goKTsKK30K
KworRmxvYXRSZWN0IFJlbmRlclNWR1BhdGg6OmNhbGN1bGF0ZVVwZGF0ZWRTdHJva2VCb3VuZGlu
Z0JveCgpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94ID0gbV9zdHJv
a2VCb3VuZGluZ0JveDsKKworICAgIGlmIChzdHlsZSgpLT5zdmdTdHlsZSgpLT5oYXNTdHJva2Uo
KSkgeworICAgICAgICAvLyBGSVhNRTogemVyby1sZW5ndGggc3VicGF0aHMgZG8gbm90IHJlc3Bl
Y3QgdmVjdG9yLWVmZmVjdCA9IG5vbi1zY2FsaW5nLXN0cm9rZS4KKyAgICAgICAgZmxvYXQgc3Ry
b2tlV2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICBzdHJva2VCb3VuZGluZ0JveC51bml0ZSh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QobV96ZXJv
TGVuZ3RoTGluZWNhcExvY2F0aW9uc1tpXSwgc3Ryb2tlV2lkdGgpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gc3Ryb2tlQm91bmRpbmdCb3g7Cit9CisKK3N0YXRpYyB2b2lkIHVzZVN0cm9rZVN0eWxl
VG9GaWxsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBpZiAoR3JhZGllbnQqIGdy
YWRpZW50ID0gY29udGV4dC0+c3Ryb2tlR3JhZGllbnQoKSkKKyAgICAgICAgY29udGV4dC0+c2V0
RmlsbEdyYWRpZW50KGdyYWRpZW50KTsKKyAgICBlbHNlIGlmIChQYXR0ZXJuKiBwYXR0ZXJuID0g
Y29udGV4dC0+c3Ryb2tlUGF0dGVybigpKQorICAgICAgICBjb250ZXh0LT5zZXRGaWxsUGF0dGVy
bihwYXR0ZXJuKTsKKyAgICBlbHNlCisgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihjb250
ZXh0LT5zdHJva2VDb2xvcigpLCBjb250ZXh0LT5zdHJva2VDb2xvclNwYWNlKCkpOworfQorCit2
b2lkIFJlbmRlclNWR1BhdGg6OnN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkg
Y29uc3QKK3sKKyAgICBpZiAoIXN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1Zpc2libGVTdHJva2Uo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyU1ZHU2hhcGU6OnN0cm9rZVNoYXBlKGNv
bnRleHQpOworCisgICAgaWYgKG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBQYXRoKiB1c2VQYXRoOworICAgIEFmZmluZVRyYW5z
Zm9ybSBub25TY2FsaW5nVHJhbnNmb3JtOworCisgICAgaWYgKGhhc05vblNjYWxpbmdTdHJva2Uo
KSkKKyAgICAgICAgbm9uU2NhbGluZ1RyYW5zZm9ybSA9IG5vblNjYWxpbmdTdHJva2VUcmFuc2Zv
cm0oKTsKKworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4
dCwgdHJ1ZSk7CisgICAgdXNlU3Ryb2tlU3R5bGVUb0ZpbGwoY29udGV4dCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zLnNpemUoKTsgKytp
KSB7CisgICAgICAgIHVzZVBhdGggPSB6ZXJvTGVuZ3RoTGluZWNhcFBhdGgobV96ZXJvTGVuZ3Ro
TGluZWNhcExvY2F0aW9uc1tpXSk7CisgICAgICAgIGlmIChoYXNOb25TY2FsaW5nU3Ryb2tlKCkp
CisgICAgICAgICAgICB1c2VQYXRoID0gbm9uU2NhbGluZ1N0cm9rZVBhdGgodXNlUGF0aCwgbm9u
U2NhbGluZ1RyYW5zZm9ybSk7CisgICAgICAgIGNvbnRleHQtPmZpbGxQYXRoKCp1c2VQYXRoKTsK
KyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyU1ZHUGF0aDo6c2hhcGVEZXBlbmRlbnRTdHJva2VDb250
YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAoUmVuZGVyU1ZHU2hhcGU6
OnNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMocG9pbnQpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxlKCktPnN2Z1N0
eWxlKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3plcm9MZW5ndGhMaW5lY2FwTG9j
YXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIEFTU0VSVChzdmdTdHlsZS0+aGFzU3Ryb2tl
KCkpOworICAgICAgICBmbG9hdCBzdHJva2VXaWR0aCA9IHRoaXMtPnN0cm9rZVdpZHRoKCk7Cisg
ICAgICAgIGlmIChzdmdTdHlsZS0+Y2FwU3R5bGUoKSA9PSBTcXVhcmVDYXApIHsKKyAgICAgICAg
ICAgIGlmICh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QobV96ZXJvTGVuZ3RoTGluZWNhcExvY2F0aW9u
c1tpXSwgc3Ryb2tlV2lkdGgpLmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChzdmdTdHlsZS0+
Y2FwU3R5bGUoKSA9PSBSb3VuZENhcCk7CisgICAgICAgICAgICBGbG9hdFBvaW50IHJhZGl1c1Zl
Y3Rvcihwb2ludC54KCkgLSBtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zW2ldLngoKSwgcG9p
bnQueSgpIC0gIG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnNbaV0ueSgpKTsKKyAgICAgICAg
ICAgIGlmIChyYWRpdXNWZWN0b3IubGVuZ3RoU3F1YXJlZCgpIDwgc3Ryb2tlV2lkdGggKiBzdHJv
a2VXaWR0aCAqIC4yNWYpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclNWR1BhdGg6OnNob3Vs
ZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkgY29uc3QKK3sKKyAgICAvLyBTcGVjKDExLjQpOiBB
bnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ryb2tlZCBpZiB0aGUgInN0cm9r
ZS1saW5lY2FwIiBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0CisgICAgLy8gYnV0IHNoYWxs
IGJlIHN0cm9rZWQgaWYgdGhlICJzdHJva2UtbGluZWNhcCIgcHJvcGVydHkgaGFzIGEgdmFsdWUg
b2Ygcm91bmQgb3Igc3F1YXJlCisgICAgcmV0dXJuIHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1N0
cm9rZSgpICYmIHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgIT0gQnV0dENhcDsKK30K
KworUGF0aCogUmVuZGVyU1ZHUGF0aDo6emVyb0xlbmd0aExpbmVjYXBQYXRoKGNvbnN0IEZsb2F0
UG9pbnQmIGxpbmVjYXBQb3NpdGlvbikgY29uc3QKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFBhdGgsIHRlbXBQYXRoLCAoKSk7CisKKyAgICB0ZW1wUGF0aC5jbGVhcigpOworICAgIGlmIChz
dHlsZSgpLT5zdmdTdHlsZSgpLT5jYXBTdHlsZSgpID09IFNxdWFyZUNhcCkKKyAgICAgICAgdGVt
cFBhdGguYWRkUmVjdCh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QobGluZWNhcFBvc2l0aW9uLCB0aGlz
LT5zdHJva2VXaWR0aCgpKSk7CisgICAgZWxzZQorICAgICAgICB0ZW1wUGF0aC5hZGRFbGxpcHNl
KHplcm9MZW5ndGhTdWJwYXRoUmVjdChsaW5lY2FwUG9zaXRpb24sIHRoaXMtPnN0cm9rZVdpZHRo
KCkpKTsKKworICAgIHJldHVybiAmdGVtcFBhdGg7Cit9CisKK0Zsb2F0UmVjdCBSZW5kZXJTVkdQ
YXRoOjp6ZXJvTGVuZ3RoU3VicGF0aFJlY3QoY29uc3QgRmxvYXRQb2ludCYgbGluZWNhcFBvc2l0
aW9uLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3QKK3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KGxp
bmVjYXBQb3NpdGlvbi54KCkgLSBzdHJva2VXaWR0aCAvIDIsIGxpbmVjYXBQb3NpdGlvbi55KCkg
LSBzdHJva2VXaWR0aCAvIDIsIHN0cm9rZVdpZHRoLCBzdHJva2VXaWR0aCk7Cit9CisKK3ZvaWQg
UmVuZGVyU1ZHUGF0aDo6dXBkYXRlWmVyb0xlbmd0aFN1YnBhdGhzKCkKK3sKKyAgICBtX3plcm9M
ZW5ndGhMaW5lY2FwTG9jYXRpb25zLmNsZWFyKCk7CisKKyAgICBpZiAoIXN0cm9rZVdpZHRoKCkg
fHwgIXNob3VsZFN0cm9rZVplcm9MZW5ndGhTdWJwYXRoKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFNWR1N1YnBhdGhEYXRhIHN1YnBhdGhEYXRhKG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlv
bnMpOworICAgIHBhdGgoKS5hcHBseSgmc3VicGF0aERhdGEsIFNWR1N1YnBhdGhEYXRhOjp1cGRh
dGVGcm9tUGF0aEVsZW1lbnQpOworICAgIHN1YnBhdGhEYXRhLnBhdGhJc0RvbmUoKTsKK30KKwog
fQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCShyZXZpc2lvbiAxMjI4NzEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMzks
NiArMzksMTkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdQYXRo
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVy
TmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdQYXRoIjsgfQorCisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVNoYXBlRnJvbUVsZW1lbnQoKSBPVkVSUklERTsKKyAgICBGbG9hdFJlY3QgY2Fs
Y3VsYXRlVXBkYXRlZFN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZv
aWQgc3Ryb2tlU2hhcGUoR3JhcGhpY3NDb250ZXh0KikgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBib29sIHNoYXBlRGVwZW5kZW50U3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYp
IE9WRVJSSURFOworCisgICAgYm9vbCBzaG91bGRTdHJva2VaZXJvTGVuZ3RoU3VicGF0aCgpIGNv
bnN0OworICAgIFBhdGgqIHplcm9MZW5ndGhMaW5lY2FwUGF0aChjb25zdCBGbG9hdFBvaW50Jikg
Y29uc3Q7CisgICAgRmxvYXRSZWN0IHplcm9MZW5ndGhTdWJwYXRoUmVjdChjb25zdCBGbG9hdFBv
aW50JiwgZmxvYXQpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlWmVyb0xlbmd0aFN1YnBhdGhzKCk7
CisKKyAgICBWZWN0b3I8RmxvYXRQb2ludD4gbV96ZXJvTGVuZ3RoTGluZWNhcExvY2F0aW9uczsK
IH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hh
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHU2hhcGUuY3BwCShyZXZpc2lvbiAxMjI4NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNiBA
QAogI2luY2x1ZGUgIlNWR1Jlc291cmNlcy5oIgogI2luY2x1ZGUgIlNWR1Jlc291cmNlc0NhY2hl
LmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJTVkdTdWJwYXRoRGF0YS5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNs
dWRlICJTVkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIK
QEAgLTcyLDcgKzcxLDYgQEAgdm9pZCBSZW5kZXJTVkdTaGFwZTo6dXBkYXRlU2hhcGVGcm9tRWxl
bQogCiAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCo+KG5vZGUoKSk7CiAgICAgdXBkYXRl
UGF0aEZyb21HcmFwaGljc0VsZW1lbnQoZWxlbWVudCwgcGF0aCgpKTsKLSAgICBwcm9jZXNzWmVy
b0xlbmd0aFN1YnBhdGhzKCk7CiAgICAgcHJvY2Vzc01hcmtlclBvc2l0aW9ucygpOwogCiAgICAg
bV9maWxsQm91bmRpbmdCb3ggPSBjYWxjdWxhdGVPYmplY3RCb3VuZGluZ0JveCgpOwpAQCAtOTEs
OCArODksMTMgQEAgdm9pZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbFNoYXBlKEdyYXBoaWNzQwogCiB2
b2lkIFJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQp
IGNvbnN0CiB7Ci0gICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmhhc1Zpc2libGVTdHJva2Uo
KSkKLSAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aChwYXRoKCkpOworICAgIEFTU0VSVChtX3Bh
dGgpOworICAgIFBhdGgqIHVzZVBhdGggPSBtX3BhdGguZ2V0KCk7CisKKyAgICBpZiAoaGFzTm9u
U2NhbGluZ1N0cm9rZSgpKQorICAgICAgICB1c2VQYXRoID0gbm9uU2NhbGluZ1N0cm9rZVBhdGgo
dXNlUGF0aCwgbm9uU2NhbGluZ1N0cm9rZVRyYW5zZm9ybSgpKTsKKworICAgIGNvbnRleHQtPnN0
cm9rZVBhdGgoKnVzZVBhdGgpOwogfQogCiBib29sIFJlbmRlclNWR1NoYXBlOjpzaGFwZURlcGVu
ZGVudFN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQpAQCAtMTM2LDIwICsx
MzksNiBAQCBib29sIFJlbmRlclNWR1NoYXBlOjpzdHJva2VDb250YWlucyhjb25zCiAgICAgaWYg
KHJlcXVpcmVzU3Ryb2tlICYmICFSZW5kZXJTVkdSZXNvdXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNv
dXJjZSh0aGlzLCBzdHlsZSgpLCBmYWxsYmFja0NvbG9yKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3plcm9MZW5ndGhMaW5lY2FwTG9jYXRp
b25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEFTU0VSVChzdHlsZSgpLT5zdmdTdHlsZSgpLT5o
YXNTdHJva2UoKSk7Ci0gICAgICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gdGhpcy0+c3Ryb2tlV2lk
dGgoKTsKLSAgICAgICAgaWYgKHN0eWxlKCktPnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gU3F1
YXJlQ2FwKSB7Ci0gICAgICAgICAgICBpZiAoemVyb0xlbmd0aFN1YnBhdGhSZWN0KG1femVyb0xl
bmd0aExpbmVjYXBMb2NhdGlvbnNbaV0sIHN0cm9rZVdpZHRoKS5jb250YWlucyhwb2ludCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoc3R5bGUoKS0+c3ZnU3R5bGUoKS0+Y2FwU3R5bGUoKSA9PSBSb3VuZENhcCk7Ci0g
ICAgICAgICAgICBGbG9hdFBvaW50IHJhZGl1c1ZlY3Rvcihwb2ludC54KCkgLSBtX3plcm9MZW5n
dGhMaW5lY2FwTG9jYXRpb25zW2ldLngoKSwgcG9pbnQueSgpIC0gIG1femVyb0xlbmd0aExpbmVj
YXBMb2NhdGlvbnNbaV0ueSgpKTsKLSAgICAgICAgICAgIGlmIChyYWRpdXNWZWN0b3IubGVuZ3Ro
U3F1YXJlZCgpIDwgc3Ryb2tlV2lkdGggKiBzdHJva2VXaWR0aCAqIC4yNWYpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICByZXR1cm4gc2hhcGVE
ZXBlbmRlbnRTdHJva2VDb250YWlucyhwb2ludCk7CiB9CiAKQEAgLTIxMiwxMyArMjAxLDYgQEAg
QWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1NoYXBlOjpub25TY2FsaQogICAgIHJldHVybiBlbGVt
ZW50LT5nZXRTY3JlZW5DVE0oU1ZHTG9jYXRhYmxlOjpEaXNhbGxvd1N0eWxlVXBkYXRlKTsKIH0K
IAotYm9vbCBSZW5kZXJTVkdTaGFwZTo6c2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1YnBhdGgoKSBj
b25zdAotewotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxs
IG5vdCBiZSBzdHJva2VkIGlmIHRoZSAic3Ryb2tlLWxpbmVjYXAiIHByb3BlcnR5IGhhcyBhIHZh
bHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUgInN0cm9rZS1s
aW5lY2FwIiBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICByZXR1
cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+aGFzU3Ryb2tlKCkgJiYgc3R5bGUoKS0+c3ZnU3R5bGUo
KS0+Y2FwU3R5bGUoKSAhPSBCdXR0Q2FwOwotfQotCiBib29sIFJlbmRlclNWR1NoYXBlOjpzaG91
bGRHZW5lcmF0ZU1hcmtlclBvc2l0aW9ucygpIGNvbnN0CiB7CiAgICAgaWYgKCFzdHlsZSgpLT5z
dmdTdHlsZSgpLT5oYXNNYXJrZXJzKCkpCkBAIC0yMzUsOTQgKzIxNyw1NSBAQCBib29sIFJlbmRl
clNWR1NoYXBlOjpzaG91bGRHZW5lcmF0ZU1hcmtlCiAgICAgcmV0dXJuIHJlc291cmNlcy0+bWFy
a2VyU3RhcnQoKSB8fCByZXNvdXJjZXMtPm1hcmtlck1pZCgpIHx8IHJlc291cmNlcy0+bWFya2Vy
RW5kKCk7CiB9CiAKLUZsb2F0UmVjdCBSZW5kZXJTVkdTaGFwZTo6emVyb0xlbmd0aFN1YnBhdGhS
ZWN0KGNvbnN0IEZsb2F0UG9pbnQmIGxpbmVjYXBQb3NpdGlvbiwgZmxvYXQgc3Ryb2tlV2lkdGgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChsaW5lY2FwUG9zaXRpb24ueCgpIC0gc3Ry
b2tlV2lkdGggLyAyLCBsaW5lY2FwUG9zaXRpb24ueSgpIC0gc3Ryb2tlV2lkdGggLyAyLCBzdHJv
a2VXaWR0aCwgc3Ryb2tlV2lkdGgpOwotfQotCi1QYXRoKiBSZW5kZXJTVkdTaGFwZTo6emVyb0xl
bmd0aExpbmVjYXBQYXRoKGNvbnN0IEZsb2F0UG9pbnQmIGxpbmVjYXBQb3NpdGlvbikKLXsKLSAg
ICAvLyBTcGVjKDExLjQpOiBBbnkgemVybyBsZW5ndGggc3VicGF0aCBzaGFsbCBub3QgYmUgc3Ry
b2tlZCBpZiB0aGUgInN0cm9rZS1saW5lY2FwIiBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiBidXR0
Ci0gICAgLy8gYnV0IHNoYWxsIGJlIHN0cm9rZWQgaWYgdGhlICJzdHJva2UtbGluZWNhcCIgcHJv
cGVydHkgaGFzIGEgdmFsdWUgb2Ygcm91bmQgb3Igc3F1YXJlCi0gICAgREVGSU5FX1NUQVRJQ19M
T0NBTChQYXRoLCB0ZW1wUGF0aCwgKCkpOwotCi0gICAgdGVtcFBhdGguY2xlYXIoKTsKLSAgICBm
bG9hdCBzdHJva2VXaWR0aCA9IHRoaXMtPnN0cm9rZVdpZHRoKCk7Ci0gICAgaWYgKHN0eWxlKCkt
PnN2Z1N0eWxlKCktPmNhcFN0eWxlKCkgPT0gU3F1YXJlQ2FwKQotICAgICAgICB0ZW1wUGF0aC5h
ZGRSZWN0KHplcm9MZW5ndGhTdWJwYXRoUmVjdChsaW5lY2FwUG9zaXRpb24sIHN0cm9rZVdpZHRo
KSk7Ci0gICAgZWxzZQotICAgICAgICB0ZW1wUGF0aC5hZGRFbGxpcHNlKHplcm9MZW5ndGhTdWJw
YXRoUmVjdChsaW5lY2FwUG9zaXRpb24sIHN0cm9rZVdpZHRoKSk7Ci0KLSAgICByZXR1cm4gJnRl
bXBQYXRoOwotfQotCi12b2lkIFJlbmRlclNWR1NoYXBlOjpmaWxsU2hhcGUoUmVuZGVyU3R5bGUq
IHN0eWxlLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFBhdGgqIHBhdGgsIFJlbmRlclNWR1No
YXBlKiBzaGFwZSkKK3ZvaWQgUmVuZGVyU1ZHU2hhcGU6OmZpbGxTaGFwZShSZW5kZXJTdHlsZSog
c3R5bGUsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKIHsKICAgICBDb2xvciBmYWxsYmFja0Nv
bG9yOwogICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogZmlsbFBhaW50aW5nUmVzb3VyY2UgPSBS
ZW5kZXJTVkdSZXNvdXJjZTo6ZmlsbFBhaW50aW5nUmVzb3VyY2UodGhpcywgc3R5bGUsIGZhbGxi
YWNrQ29sb3IpKSB7CiAgICAgICAgIGlmIChmaWxsUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNv
dXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAgICAg
IGZpbGxQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBB
cHBseVRvRmlsbE1vZGUsIHBhdGgsIHNoYXBlKTsKKyAgICAgICAgICAgIGZpbGxQYWludGluZ1Jl
c291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUs
IDAsIHRoaXMpOwogICAgICAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkgewog
ICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNl
ID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOwogICAg
ICAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7CiAgICAg
ICAgICAgICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwg
Y29udGV4dCwgQXBwbHlUb0ZpbGxNb2RlKSkKLSAgICAgICAgICAgICAgICBmYWxsYmFja1Jlc291
cmNlLT5wb3N0QXBwbHlSZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUsIHBh
dGgsIHNoYXBlKTsKKyAgICAgICAgICAgICAgICBmYWxsYmFja1Jlc291cmNlLT5wb3N0QXBwbHlS
ZXNvdXJjZSh0aGlzLCBjb250ZXh0LCBBcHBseVRvRmlsbE1vZGUsIDAsIHRoaXMpOwogICAgICAg
ICB9CiAgICAgfQogfQogCi12b2lkIFJlbmRlclNWR1NoYXBlOjpzdHJva2VQYXRoKFJlbmRlclN0
eWxlKiBzdHlsZSwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBQYXRoKiBwYXRoLCBSZW5kZXJT
VkdSZXNvdXJjZSogc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgQ29sb3ImIGZhbGxiYWNrQ29sb3IsIGludCBhcHBseU1vZGUpCit2
b2lkIFJlbmRlclNWR1NoYXBlOjpzdHJva2VTaGFwZShSZW5kZXJTdHlsZSogc3R5bGUsIEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBpZiAoIXN0eWxlLT5zdmdTdHlsZSgpLT5oYXNW
aXNpYmxlU3Ryb2tlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChzdHJva2VQYWludGlu
Z1Jlc291cmNlLT5hcHBseVJlc291cmNlKHRoaXMsIHN0eWxlLCBjb250ZXh0LCBhcHBseU1vZGUp
KSB7Ci0gICAgICAgIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHRo
aXMsIGNvbnRleHQsIGFwcGx5TW9kZSwgcGF0aCwgdGhpcyk7Ci0gICAgICAgIHJldHVybjsKKyAg
ICBDb2xvciBmYWxsYmFja0NvbG9yOworICAgIGlmIChSZW5kZXJTVkdSZXNvdXJjZSogc3Ryb2tl
UGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzdHJva2VQYWludGluZ1Jlc291
cmNlKHRoaXMsIHN0eWxlLCBmYWxsYmFja0NvbG9yKSkgeworICAgICAgICBpZiAoc3Ryb2tlUGFp
bnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBwbHlU
b1N0cm9rZU1vZGUpKQorICAgICAgICAgICAgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFw
cGx5UmVzb3VyY2UodGhpcywgY29udGV4dCwgQXBwbHlUb1N0cm9rZU1vZGUsIDAsIHRoaXMpOwor
ICAgICAgICBlbHNlIGlmIChmYWxsYmFja0NvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICAgICAg
UmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBmYWxsYmFja1Jlc291cmNlID0gUmVuZGVyU1ZH
UmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOworICAgICAgICAgICAgZmFs
bGJhY2tSZXNvdXJjZS0+c2V0Q29sb3IoZmFsbGJhY2tDb2xvcik7CisgICAgICAgICAgICBpZiAo
ZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4dCwgQXBw
bHlUb1N0cm9rZU1vZGUpKQorICAgICAgICAgICAgICAgIGZhbGxiYWNrUmVzb3VyY2UtPnBvc3RB
cHBseVJlc291cmNlKHRoaXMsIGNvbnRleHQsIEFwcGx5VG9TdHJva2VNb2RlLCAwLCB0aGlzKTsK
KyAgICAgICAgfQogICAgIH0KLQotICAgIGlmICghZmFsbGJhY2tDb2xvci5pc1ZhbGlkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogZmFsbGJh
Y2tSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3Vy
Y2UoKTsKLSAgICBmYWxsYmFja1Jlc291cmNlLT5zZXRDb2xvcihmYWxsYmFja0NvbG9yKTsKLSAg
ICBpZiAoZmFsbGJhY2tSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZSh0aGlzLCBzdHlsZSwgY29udGV4
dCwgYXBwbHlNb2RlKSkKLSAgICAgICAgZmFsbGJhY2tSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3Vy
Y2UodGhpcywgY29udGV4dCwgYXBwbHlNb2RlLCBwYXRoLCB0aGlzKTsKIH0KIAotdm9pZCBSZW5k
ZXJTVkdTaGFwZTo6ZmlsbEFuZFN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQor
dm9pZCBSZW5kZXJTVkdTaGFwZTo6ZmlsbEFuZFN0cm9rZVNoYXBlKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCkKIHsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0aGlzLT5zdHlsZSgpOwogCi0g
ICAgZmlsbFNoYXBlKHN0eWxlLCBjb250ZXh0LCAwLCB0aGlzKTsKKyAgICBmaWxsU2hhcGUoc3R5
bGUsIGNvbnRleHQpOwogCi0gICAgQ29sb3IgZmFsbGJhY2tDb2xvciA9IENvbG9yKCk7Ci0gICAg
UmVuZGVyU1ZHUmVzb3VyY2UqIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNv
dXJjZTo6c3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSh0aGlzLCBzdHlsZSwgZmFsbGJhY2tDb2xvcik7
Ci0gICAgaWYgKCFzdHJva2VQYWludGluZ1Jlc291cmNlKQorICAgIGlmICghc3R5bGUtPnN2Z1N0
eWxlKCktPmhhc1Zpc2libGVTdHJva2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUGF0aCog
dXNlUGF0aCA9IG1fcGF0aC5nZXQoKTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoKmNvbnRleHQsIGZhbHNlKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbm9uU2NhbGlu
Z1RyYW5zZm9ybTsKIAogICAgIGlmIChoYXNOb25TY2FsaW5nU3Ryb2tlKCkpIHsKLSAgICAgICAg
bm9uU2NhbGluZ1RyYW5zZm9ybSA9IG5vblNjYWxpbmdTdHJva2VUcmFuc2Zvcm0oKTsKKyAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIG5vblNjYWxpbmdUcmFuc2Zvcm0gPSBub25TY2FsaW5nU3Ryb2tl
VHJhbnNmb3JtKCk7CiAgICAgICAgIGlmICghc2V0dXBOb25TY2FsaW5nU3Ryb2tlQ29udGV4dChu
b25TY2FsaW5nVHJhbnNmb3JtLCBzdGF0ZVNhdmVyKSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgdXNlUGF0aCA9IG5vblNjYWxpbmdTdHJva2VQYXRoKHVzZVBhdGgsIG5vblNjYWxpbmdU
cmFuc2Zvcm0pOwogICAgIH0KIAotICAgIHN0cm9rZVBhdGgoc3R5bGUsIGNvbnRleHQsIHVzZVBh
dGgsIHN0cm9rZVBhaW50aW5nUmVzb3VyY2UsIGZhbGxiYWNrQ29sb3IsIEFwcGx5VG9TdHJva2VN
b2RlKTsKLQotICAgIC8vIFNwZWMoMTEuNCk6IEFueSB6ZXJvIGxlbmd0aCBzdWJwYXRoIHNoYWxs
IG5vdCBiZSBzdHJva2VkIGlmIHRoZSAic3Ryb2tlLWxpbmVjYXAiIHByb3BlcnR5IGhhcyBhIHZh
bHVlIG9mIGJ1dHQKLSAgICAvLyBidXQgc2hhbGwgYmUgc3Ryb2tlZCBpZiB0aGUgInN0cm9rZS1s
aW5lY2FwIiBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBvZiByb3VuZCBvciBzcXVhcmUKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgUGF0aCogdXNlUGF0aCA9IHplcm9MZW5ndGhMaW5lY2FwUGF0aChtX3pl
cm9MZW5ndGhMaW5lY2FwTG9jYXRpb25zW2ldKTsKLSAgICAgICAgaWYgKGhhc05vblNjYWxpbmdT
dHJva2UoKSkKLSAgICAgICAgICAgIHVzZVBhdGggPSBub25TY2FsaW5nU3Ryb2tlUGF0aCh1c2VQ
YXRoLCBub25TY2FsaW5nVHJhbnNmb3JtKTsKLSAgICAgICAgc3Ryb2tlUGF0aChzdHlsZSwgY29u
dGV4dCwgdXNlUGF0aCwgc3Ryb2tlUGFpbnRpbmdSZXNvdXJjZSwgZmFsbGJhY2tDb2xvciwgQXBw
bHlUb0ZpbGxNb2RlKTsKLSAgICB9CisgICAgc3Ryb2tlU2hhcGUoc3R5bGUsIGNvbnRleHQpOwog
fQogCiB2b2lkIFJlbmRlclNWR1NoYXBlOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmKQpAQCAtMzQ3LDcgKzI5MCw3IEBAIHZvaWQgUmVuZGVyU1ZHU2hhcGU6
OnBhaW50KFBhaW50SW5mbyYgcGEKICAgICAgICAgICAgICAgICBpZiAoc3ZnU3R5bGUtPnNoYXBl
UmVuZGVyaW5nKCkgPT0gU1JfQ1JJU1BFREdFUykKICAgICAgICAgICAgICAgICAgICAgY2hpbGRQ
YWludEluZm8uY29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKIAotICAgICAgICAg
ICAgICAgIGZpbGxBbmRTdHJva2VQYXRoKGNoaWxkUGFpbnRJbmZvLmNvbnRleHQpOworICAgICAg
ICAgICAgICAgIGZpbGxBbmRTdHJva2VTaGFwZShjaGlsZFBhaW50SW5mby5jb250ZXh0KTsKICAg
ICAgICAgICAgICAgICBpZiAoIW1fbWFya2VyUG9zaXRpb25zLmlzRW1wdHkoKSkKICAgICAgICAg
ICAgICAgICAgICAgZHJhd01hcmtlcnMoY2hpbGRQYWludEluZm8pOwogICAgICAgICAgICAgfQpA
QCAtNDUzLDExICszOTYsNiBAQCBGbG9hdFJlY3QgUmVuZGVyU1ZHU2hhcGU6OmNhbGN1bGF0ZVN0
cm9rCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgc3Ryb2tlQm91
bmRpbmdCb3gudW5pdGUocGF0aCgpLnN0cm9rZUJvdW5kaW5nUmVjdCgmc3Ryb2tlU3R5bGUpKTsK
LQotICAgICAgICAvLyBGSVhNRTogemVyby1sZW5ndGggc3VicGF0aHMgZG8gbm90IHJlc3BlY3Qg
dmVjdG9yLWVmZmVjdCA9IG5vbi1zY2FsaW5nLXN0cm9rZS4KLSAgICAgICAgZmxvYXQgc3Ryb2tl
V2lkdGggPSB0aGlzLT5zdHJva2VXaWR0aCgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1femVyb0xlbmd0aExpbmVjYXBMb2NhdGlvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAg
ICBzdHJva2VCb3VuZGluZ0JveC51bml0ZSh6ZXJvTGVuZ3RoU3VicGF0aFJlY3QobV96ZXJvTGVu
Z3RoTGluZWNhcExvY2F0aW9uc1tpXSwgc3Ryb2tlV2lkdGgpKTsKICAgICB9CiAKICAgICBpZiAo
IW1fbWFya2VyUG9zaXRpb25zLmlzRW1wdHkoKSkKQEAgLTUxMCwyMSArNDQ4LDYgQEAgdm9pZCBS
ZW5kZXJTVkdTaGFwZTo6ZHJhd01hcmtlcnMoUGFpbnRJbgogICAgIH0KIH0KIAotdm9pZCBSZW5k
ZXJTVkdTaGFwZTo6cHJvY2Vzc1plcm9MZW5ndGhTdWJwYXRocygpCi17Ci0gICAgbV96ZXJvTGVu
Z3RoTGluZWNhcExvY2F0aW9ucy5jbGVhcigpOwotCi0gICAgZmxvYXQgc3Ryb2tlV2lkdGggPSB0
aGlzLT5zdHJva2VXaWR0aCgpOwotICAgIGlmICghc3Ryb2tlV2lkdGggfHwgIXNob3VsZFN0cm9r
ZVplcm9MZW5ndGhTdWJwYXRoKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX3Bh
dGgpOwotCi0gICAgU1ZHU3VicGF0aERhdGEgc3VicGF0aERhdGEobV96ZXJvTGVuZ3RoTGluZWNh
cExvY2F0aW9ucyk7Ci0gICAgbV9wYXRoLT5hcHBseSgmc3VicGF0aERhdGEsIFNWR1N1YnBhdGhE
YXRhOjp1cGRhdGVGcm9tUGF0aEVsZW1lbnQpOwotICAgIHN1YnBhdGhEYXRhLnBhdGhJc0RvbmUo
KTsKLX0KLQogdm9pZCBSZW5kZXJTVkdTaGFwZTo6cHJvY2Vzc01hcmtlclBvc2l0aW9ucygpCiB7
CiAgICAgbV9tYXJrZXJQb3NpdGlvbnMuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgJKHJldmlzaW9uIDEyMjg3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaAkod29ya2luZyBjb3B5
KQpAQCAtODksOSArODksMTIgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBzaGFwZURl
cGVuZGVudEZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgV2luZFJ1bGUpIGNv
bnN0OwogICAgIGZsb2F0IHN0cm9rZVdpZHRoKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNQYXRoKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXRoLmdldCgpOyB9Ci0gICAgYm9vbCBoYXNOb25TY2FsaW5nU3Ry
b2tlKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+c3ZnU3R5bGUoKS0+dmVjdG9yRWZmZWN0KCkg
PT0gVkVfTk9OX1NDQUxJTkdfU1RST0tFOyB9CiAgICAgYm9vbCBoYXNTbW9vdGhTdHJva2UoKSBj
b25zdDsKIAorICAgIGJvb2wgaGFzTm9uU2NhbGluZ1N0cm9rZSgpIGNvbnN0IHsgcmV0dXJuIHN0
eWxlKCktPnN2Z1N0eWxlKCktPnZlY3RvckVmZmVjdCgpID09IFZFX05PTl9TQ0FMSU5HX1NUUk9L
RTsgfQorICAgIEFmZmluZVRyYW5zZm9ybSBub25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKCkgY29u
c3Q7CisgICAgUGF0aCogbm9uU2NhbGluZ1N0cm9rZVBhdGgoY29uc3QgUGF0aCosIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYpIGNvbnN0OworCiAgICAgRmxvYXRSZWN0IG1fZmlsbEJvdW5kaW5nQm94
OwogICAgIEZsb2F0UmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94OwogCkBAIC0xMTUsMzUgKzExOCwy
NSBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBGbG9hdFJlY3Qgb2JqZWN0Qm91bmRpbmdCb3go
KSBjb25zdCB7IHJldHVybiBtX2ZpbGxCb3VuZGluZ0JveDsgfQogICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0Jv
eDsgfQotCiAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZU9iamVjdEJvdW5kaW5nQm94KCkgY29uc3Q7
CiAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZVN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3Q7CiAgICAg
dm9pZCB1cGRhdGVSZXBhaW50Qm91bmRpbmdCb3goKTsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBu
b25TY2FsaW5nU3Ryb2tlVHJhbnNmb3JtKCkgY29uc3Q7CiAgICAgYm9vbCBzZXR1cE5vblNjYWxp
bmdTdHJva2VDb250ZXh0KEFmZmluZVRyYW5zZm9ybSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXImKTsKLSAgICBQYXRoKiBub25TY2FsaW5nU3Ryb2tlUGF0aChjb25zdCBQYXRoKiwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJikgY29uc3Q7Ci0KLSAgICBQYXRoKiB6ZXJvTGVuZ3RoTGluZWNhcFBh
dGgoY29uc3QgRmxvYXRQb2ludCYpOwotICAgIGJvb2wgc2hvdWxkU3Ryb2tlWmVyb0xlbmd0aFN1
YnBhdGgoKSBjb25zdDsKLSAgICBGbG9hdFJlY3QgemVyb0xlbmd0aFN1YnBhdGhSZWN0KGNvbnN0
IEZsb2F0UG9pbnQmLCBmbG9hdCkgY29uc3Q7Ci0gICAgdm9pZCBwcm9jZXNzWmVyb0xlbmd0aFN1
YnBhdGhzKCk7CiAKICAgICBib29sIHNob3VsZEdlbmVyYXRlTWFya2VyUG9zaXRpb25zKCkgY29u
c3Q7CiAgICAgRmxvYXRSZWN0IG1hcmtlclJlY3QoZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0Owog
ICAgIHZvaWQgcHJvY2Vzc01hcmtlclBvc2l0aW9ucygpOwogCi0gICAgdm9pZCBmaWxsU2hhcGUo
UmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqLCBQYXRoKiwgUmVuZGVyU1ZHU2hhcGUqKTsK
LSAgICB2b2lkIHN0cm9rZVBhdGgoUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqLCBQYXRo
KiwgUmVuZGVyU1ZHUmVzb3VyY2UqLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBDb2xvciYs
IGludCk7Ci0gICAgdm9pZCBmaWxsQW5kU3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHQqKTsKKyAg
ICB2b2lkIGZpbGxTaGFwZShSZW5kZXJTdHlsZSosIEdyYXBoaWNzQ29udGV4dCopOworICAgIHZv
aWQgc3Ryb2tlU2hhcGUoUmVuZGVyU3R5bGUqLCBHcmFwaGljc0NvbnRleHQqKTsKKyAgICB2b2lk
IGZpbGxBbmRTdHJva2VTaGFwZShHcmFwaGljc0NvbnRleHQqKTsKICAgICB2b2lkIGRyYXdNYXJr
ZXJzKFBhaW50SW5mbyYpOwogCiBwcml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3JlcGFpbnRCb3Vu
ZGluZ0JveDsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9sb2NhbFRyYW5zZm9ybTsKICAgICBPd25Q
dHI8UGF0aD4gbV9wYXRoOwotICAgIFZlY3RvcjxGbG9hdFBvaW50PiBtX3plcm9MZW5ndGhMaW5l
Y2FwTG9jYXRpb25zOwogICAgIFZlY3RvcjxNYXJrZXJQb3NpdGlvbj4gbV9tYXJrZXJQb3NpdGlv
bnM7CiAKICAgICBib29sIG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlIDogMTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>