<?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>47473</bug_id>
          
          <creation_ts>2010-10-10 12:13:01 -0700</creation_ts>
          <short_desc>Use new WebThemeEngine api on chromium / linux to draw scrollbars.</short_desc>
          <delta_ts>2010-10-12 10:10:45 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Moore">davemoore</reporter>
          <assigned_to name="Dave Moore">davemoore</assigned_to>
          <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>292340</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Moore">davemoore</who>
    <bug_when>2010-10-10 12:13:01 -0700</bug_when>
    <thetext>Use new WebThemeEngine api on chromium / linux to draw scrollbars.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292341</commentid>
    <comment_count>1</comment_count>
      <attachid>70409</attachid>
    <who name="Dave Moore">davemoore</who>
    <bug_when>2010-10-10 12:15:21 -0700</bug_when>
    <thetext>Created attachment 70409
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292343</commentid>
    <comment_count>2</comment_count>
      <attachid>70410</attachid>
    <who name="Dave Moore">davemoore</who>
    <bug_when>2010-10-10 12:21:44 -0700</bug_when>
    <thetext>Created attachment 70410
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292346</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Moore">davemoore</who>
    <bug_when>2010-10-10 12:27:18 -0700</bug_when>
    <thetext>The WebThemeEngine api was added to the chromium linux port in https://bugs.webkit.org/show_bug.cgi?id=47278 Support has been added to chromium as of http://src.chromium.org/viewvc/chrome?view=rev&amp;revision=62093 

This patch makes the chromium linux scrollbar implementation use that api. It also removes the top level WinThemeEngine.h file which has been moved to the win subdir. The top level include is no longer referenced from chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292541</commentid>
    <comment_count>4</comment_count>
      <attachid>70410</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-11 10:26:50 -0700</bug_when>
    <thetext>Comment on attachment 70410
Patch

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

Overall, looks ok.  Mostly naming and style nits.

&gt; WebCore/platform/chromium/ChromiumBridge.h:259
&gt; +        enum Part {

Can we pick a more descriptive name than Part?  ChromiumBridge has a lot of stuff in it so it&apos;s not obvious what WebCore::ChromiumBridge::Part is.  Maybe ThemeScrollbarPart?

&gt; WebCore/platform/chromium/ChromiumBridge.h:271
&gt; +        enum State {

Same thing, maybe name this ThemePaintState or something.

&gt; WebCore/platform/chromium/ChromiumBridge.h:286
&gt; +        union ExtraParams {

Maybe ThemePaintExtraParams?

&gt; WebCore/platform/chromium/ChromiumBridge.h:293
&gt; +        static IntSize getSize(Part);

getThemePartSize?

&gt; WebCore/platform/chromium/ChromiumBridge.h:295
&gt; +        static void paint(GraphicsContext*, Part, State, const IntRect&amp;, const ExtraParams*);

paintThemePart?

&gt; WebCore/platform/chromium/ScrollbarThemeChromiumLinux.cpp:56
&gt; +    ChromiumBridge::State state =
&gt; +        scrollbar-&gt;hoveredPart() == partType ? ChromiumBridge::StateHover : ChromiumBridge::StateNormal;

Nit: I would just put this on a single line.

&gt; WebCore/platform/chromium/ScrollbarThemeChromiumLinux.cpp:67
&gt; +        scrollbar-&gt;orientation() == HorizontalScrollbar ?
&gt; +            ChromiumBridge::PartScrollbarHoriztonalTrack :
&gt; +            ChromiumBridge::PartScrollbarVerticalTrack,

Nit: single line

&gt; WebCore/platform/chromium/ScrollbarThemeChromiumLinux.cpp:79
&gt;      if (scrollbar-&gt;orientation() == HorizontalScrollbar) {

FWIW, checking the orientation doesn&apos;t seem to matter here.  Would be nice to remove this check if we can.

&gt; WebCore/platform/chromium/ScrollbarThemeChromiumLinux.cpp:97
&gt; +    if (checkMin &amp;&amp; (scrollbar-&gt;currentPos() &lt;= 0)
&gt; +        || (checkMax &amp;&amp; scrollbar-&gt;currentPos() == scrollbar-&gt;maximum())) {

I think you need another pair of () here or the
  checkMin &amp;&amp; () || ()
will cause a gcc warning.

&gt; WebCore/platform/chromium/ScrollbarThemeChromiumLinux.cpp:122
&gt; +        scrollbar-&gt;orientation() == HorizontalScrollbar ?
&gt; +            ChromiumBridge::PartScrollbarHorizontalThumb :
&gt; +            ChromiumBridge::PartScrollbarVerticalThumb,

nit: single line

&gt; WebCore/platform/chromium/ScrollbarThemeChromiumLinux.cpp:-196
&gt; -    if (scrollbar-&gt;orientation() == VerticalScrollbar)
&gt; -        return IntSize(scrollbarThicknessValue, scrollbar-&gt;height() &lt; 2 * buttonLength ? scrollbar-&gt;height() / 2 : buttonLength);
&gt; -
&gt; -    // HorizontalScrollbar
&gt; -    return IntSize(scrollbar-&gt;width() &lt; 2 * buttonLength ? scrollbar-&gt;width() / 2 : buttonLength, scrollbarThicknessValue);

This is relatively new code.  It looks like the code on the chrome side doesn&apos;t include the 2x check.

&gt; WebKit/chromium/src/ChromiumBridge.cpp:756
&gt; +    default: return WebThemeEngine::PartScrollbarDownArrow;

Please remove the default: and just enumerate all the cases.  It avoids errors when new values are added.

&gt; WebKit/chromium/src/ChromiumBridge.cpp:767
&gt; +    default: return WebThemeEngine::StateDisabled;

no default</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292718</commentid>
    <comment_count>5</comment_count>
      <attachid>70484</attachid>
    <who name="Dave Moore">davemoore</who>
    <bug_when>2010-10-11 15:40:06 -0700</bug_when>
    <thetext>Created attachment 70484
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292720</commentid>
    <comment_count>6</comment_count>
    <who name="Dave Moore">davemoore</who>
    <bug_when>2010-10-11 15:43:07 -0700</bug_when>
    <thetext>Comments address except

FWIW, checking the orientation doesn&apos;t seem to matter here.  Would be nice to remove this check if we can.

Perhaps I don&apos;t understand but the line I think you&apos;re referring to is attempting to make sure we ask for the right button to be painted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292735</commentid>
    <comment_count>7</comment_count>
      <attachid>70484</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-11 16:02:50 -0700</bug_when>
    <thetext>Comment on attachment 70484
Patch

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

You&apos;ll probably have to roll WebKit/WebKit/chromium/DEPS to pick up your chromium fixes.

Please watch the build.webkit.org DRT bots and the build.chromium.org experimental bots when landing.

&gt; WebCore/platform/chromium/ScrollbarThemeChromiumLinux.cpp:76
&gt;      if (scrollbar-&gt;orientation() == HorizontalScrollbar) {

Sorry, you&apos;re right, this condition is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292984</commentid>
    <comment_count>8</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-12 10:10:45 -0700</bug_when>
    <thetext>Committed r69586: &lt;http://trac.webkit.org/changeset/69586&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70409</attachid>
            <date>2010-10-10 12:15:21 -0700</date>
            <delta_ts>2010-10-10 12:21:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47473-20101010121520.patch</filename>
            <type>text/plain</type>
            <size>20144</size>
            <attacher name="Dave Moore">davemoore</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDY5NDY4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMTAt
MTAgIERhdmUgTW9vcmUgIDxkYXZlbW9vcmVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBuZXcgV2ViVGhlbWVFbmdpbmUg
YXBpIG9uIGNocm9taXVtIC8gbGludXggdG8gZHJhdyBzY3JvbGxiYXJzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc0NzMKKworICAgICAgICAqIC4u
Ly4uL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaDoKKyAgICAgICAg
KiAuLi8uLi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1M
aW51eC5jcHA6CisgICAgICAgICogLi4vLi4vV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJUaGVt
ZUVuZ2luZS5oOiBSZW1vdmVkLgorICAgICAgICAqIC4uLy4uL1dlYktpdC9jaHJvbWl1bS9zcmMv
Q2hyb21pdW1CcmlkZ2UuY3BwOgorCiAyMDEwLTEwLTA4ICBCYWxhenMgS2VsZW1lbiAgPGtiYWxh
enNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9nb27DoWMu
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCShyZXZp
c2lvbiA2OTQ2OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDYgKzI1NCw0NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQg
Y2xhc3NpY1N0YXRlLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHBhaW50
UHJvZ3Jlc3NCYXIoCiAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0
JiBiYXJSZWN0LCBjb25zdCBJbnRSZWN0JiB2YWx1ZVJlY3QsIGJvb2wgZGV0ZXJtaW5hdGUsIGRv
dWJsZSBhbmltYXRlZFNlY29uZHMpOworI2VsaWYgT1MoTElOVVgpCisgICAgICAgIC8vIFRoZSBV
SSBwYXJ0IHdoaWNoIGlzIGJlaW5nIGFjY2Vzc2VkLgorICAgICAgICBlbnVtIFBhcnQgeworICAg
ICAgICAgICAgUGFydFNjcm9sbGJhckRvd25BcnJvdywKKyAgICAgICAgICAgIFBhcnRTY3JvbGxi
YXJMZWZ0QXJyb3csCisgICAgICAgICAgICBQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdywKKyAgICAg
ICAgICAgIFBhcnRTY3JvbGxiYXJVcEFycm93LAorICAgICAgICAgICAgUGFydFNjcm9sbGJhckhv
cml6b250YWxUaHVtYiwKKyAgICAgICAgICAgIFBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRodW1iLAor
ICAgICAgICAgICAgUGFydFNjcm9sbGJhckhvcml6dG9uYWxUcmFjaywKKyAgICAgICAgICAgIFBh
cnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrLAorICAgICAgICB9OworCisgICAgICAgIC8vIFRoZSBj
dXJyZW50IHN0YXRlIG9mIHRoZSBhc3NvY2lhdGVkIFBhcnQuCisgICAgICAgIGVudW0gU3RhdGUg
eworICAgICAgICAgICAgU3RhdGVEaXNhYmxlZCwKKyAgICAgICAgICAgIFN0YXRlSG92ZXIsCisg
ICAgICAgICAgICBTdGF0ZU5vcm1hbCwKKyAgICAgICAgICAgIFN0YXRlUHJlc3NlZCwKKyAgICAg
ICAgfTsKKworICAgICAgICBzdHJ1Y3QgU2Nyb2xsYmFyVHJhY2tFeHRyYVBhcmFtcyB7CisgICAg
ICAgICAgICAvLyBUaGUgYm91bmRzIG9mIHRoZSBlbnRpcmUgdHJhY2ssIGFzIG9wcG9zZWQgdG8g
dGhlIHBhcnQgYmVpbmcgcGFpbnRlZC4KKyAgICAgICAgICAgIGludCB0cmFja1g7CisgICAgICAg
ICAgICBpbnQgdHJhY2tZOworICAgICAgICAgICAgaW50IHRyYWNrV2lkdGg7CisgICAgICAgICAg
ICBpbnQgdHJhY2tIZWlnaHQ7CisgICAgICAgIH07CisKKyAgICAgICAgdW5pb24gRXh0cmFQYXJh
bXMgeworICAgICAgICAgICAgU2Nyb2xsYmFyVHJhY2tFeHRyYVBhcmFtcyBzY3JvbGxiYXJUcmFj
azsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBHZXRzIHRoZSBzaXplIG9mIHRoZSBnaXZlbiB0
aGVtZSBwYXJ0LiBGb3IgdmFyaWFibGUgc2l6ZWQgaXRlbXMKKyAgICAgICAgLy8gbGlrZSB2ZXJ0
aWNhbCBzY3JvbGxiYXIgdGh1bWJzLCB0aGUgd2lkdGggd2lsbCBiZSB0aGUgcmVxdWlyZWQgd2lk
dGggb2YKKyAgICAgICAgLy8gdGhlIHRyYWNrIHdoaWxlIHRoZSBoZWlnaHQgd2lsbCBiZSB0aGUg
bWluaW11bSBoZWlnaHQuCisgICAgICAgIHN0YXRpYyBJbnRTaXplIGdldFNpemUoUGFydCk7Cisg
ICAgICAgIC8vIFBhaW50IHRoZSBnaXZlbiB0aGUgZ2l2ZW4gdGhlbWUgcGFydC4KKyAgICAgICAg
c3RhdGljIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgUGFydCwgU3RhdGUsIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBFeHRyYVBhcmFtcyopOwogI2VuZGlmCiAKICAgICAgICAgLy8gVHJhY2Ug
RXZlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bUxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHAJKHJldmlzaW9uIDY5NDY4KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSwxNyArMzEsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXguaCIKIAotI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dFNraWEuaCIKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0ay5o
IgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IGludCBzY3JvbGxiYXJU
aGlja25lc3NWYWx1ZSA9IDE1Owotc3RhdGljIGNvbnN0IGludCBidXR0b25MZW5ndGggPSAxNDsK
LQogU2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpCiB7CiAgICAg
c3RhdGljIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eCB0aGVtZTsKQEAgLTUwLDEzNiArNDUs
ODQgQEAgU2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaAogCiBpbnQgU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29u
dHJvbFNpemUgY29udHJvbFNpemUpCiB7Ci0gICAgcmV0dXJuIHNjcm9sbGJhclRoaWNrbmVzc1Zh
bHVlOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3VmVydExpbmUoU2tDYW52YXMqIGNhbnZhcywgaW50
IHgsIGludCB5MSwgaW50IHkyLCBjb25zdCBTa1BhaW50JiBwYWludCkKLXsKLSAgICBTa0lSZWN0
IHNrcmVjdDsKLSAgICBza3JlY3Quc2V0KHgsIHkxLCB4ICsgMSwgeTIgKyAxKTsKLSAgICBjYW52
YXMtPmRyYXdJUmVjdChza3JlY3QsIHBhaW50KTsKLX0KLQotc3RhdGljIHZvaWQgZHJhd0hvcml6
TGluZShTa0NhbnZhcyogY2FudmFzLCBpbnQgeDEsIGludCB4MiwgaW50IHksIGNvbnN0IFNrUGFp
bnQmIHBhaW50KQotewotICAgIFNrSVJlY3Qgc2tyZWN0OwotICAgIHNrcmVjdC5zZXQoeDEsIHks
IHgyICsgMSwgeSArIDEpOwotICAgIGNhbnZhcy0+ZHJhd0lSZWN0KHNrcmVjdCwgcGFpbnQpOwot
fQotCi1zdGF0aWMgdm9pZCBkcmF3Qm94KFNrQ2FudmFzKiBjYW52YXMsIGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IFNrUGFpbnQmIHBhaW50KQotewotICAgIGNvbnN0IGludCByaWdodCA9IHJl
Y3QueCgpICsgcmVjdC53aWR0aCgpIC0gMTsKLSAgICBjb25zdCBpbnQgYm90dG9tID0gcmVjdC55
KCkgKyByZWN0LmhlaWdodCgpIC0gMTsKLSAgICBkcmF3SG9yaXpMaW5lKGNhbnZhcywgcmVjdC54
KCksIHJpZ2h0LCByZWN0LnkoKSwgcGFpbnQpOwotICAgIGRyYXdWZXJ0TGluZShjYW52YXMsIHJp
Z2h0LCByZWN0LnkoKSwgYm90dG9tLCBwYWludCk7Ci0gICAgZHJhd0hvcml6TGluZShjYW52YXMs
IHJlY3QueCgpLCByaWdodCwgYm90dG9tLCBwYWludCk7Ci0gICAgZHJhd1ZlcnRMaW5lKGNhbnZh
cywgcmVjdC54KCksIHJlY3QueSgpLCBib3R0b20sIHBhaW50KTsKKyAgICAvLyBIb3JpeiBhbmQg
VmVydCBzY3JvbGxiYXJzIGFyZSB0aGUgc2FtZSB0aGlja25lc3MuCisgICAgSW50U2l6ZSBzY3Jv
bGxiYXJTaXplID0gQ2hyb21pdW1CcmlkZ2U6OmdldFNpemUoQ2hyb21pdW1CcmlkZ2U6OlBhcnRT
Y3JvbGxiYXJWZXJ0aWNhbFRyYWNrKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyU2l6ZS53aWR0aCgp
OwogfQogCiB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUcmFja1BpZWNl
KEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0
JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnRUeXBlKQogewotICAgIFNrQ2FudmFzKiBjb25zdCBj
YW52YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwotICAgIFNrUGFpbnQgcGFp
bnQ7Ci0gICAgU2tJUmVjdCBza3JlY3Q7Ci0KLSAgICBza3JlY3Quc2V0KHJlY3QueCgpLCByZWN0
LnkoKSwgcmVjdC54KCkgKyByZWN0LndpZHRoKCksIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSk7
Ci0gICAgU2tTY2FsYXIgdHJhY2tIU1ZbM107Ci0gICAgU2tDb2xvclRvSFNWKFBsYXRmb3JtVGhl
bWVDaHJvbWl1bUd0azo6dHJhY2tDb2xvcigpLCB0cmFja0hTVik7Ci0gICAgcGFpbnQuc2V0Q29s
b3IoUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjpzYXR1cmF0ZUFuZEJyaWdodGVuKHRyYWNrSFNW
LCAwLCAwKSk7Ci0gICAgY2FudmFzLT5kcmF3SVJlY3Qoc2tyZWN0LCBwYWludCk7Ci0KLSAgICBT
a1NjYWxhciB0aHVtYkhTVlszXTsKLSAgICBTa0NvbG9yVG9IU1YoUGxhdGZvcm1UaGVtZUNocm9t
aXVtR3RrOjp0aHVtYkluYWN0aXZlQ29sb3IoKSwKLSAgICAgICAgICAgICAgICAgdGh1bWJIU1Yp
OwotCi0gICAgcGFpbnQuc2V0Q29sb3IoUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjpvdXRsaW5l
Q29sb3IodHJhY2tIU1YsIHRodW1iSFNWKSk7Ci0gICAgZHJhd0JveChjYW52YXMsIHJlY3QsIHBh
aW50KTsKKyAgICBDaHJvbWl1bUJyaWRnZTo6U3RhdGUgc3RhdGUgPQorICAgICAgICBzY3JvbGxi
YXItPmhvdmVyZWRQYXJ0KCkgPT0gcGFydFR5cGUgPyBDaHJvbWl1bUJyaWRnZTo6U3RhdGVIb3Zl
ciA6IENocm9taXVtQnJpZGdlOjpTdGF0ZU5vcm1hbDsKKyAgICBJbnRSZWN0IGFsaWduUmVjdCA9
IHRyYWNrUmVjdChzY3JvbGxiYXIsIGZhbHNlKTsKKyAgICBDaHJvbWl1bUJyaWRnZTo6RXh0cmFQ
YXJhbXMgZXh0cmFQYXJhbXM7CisgICAgZXh0cmFQYXJhbXMuc2Nyb2xsYmFyVHJhY2sudHJhY2tY
ID0gYWxpZ25SZWN0LngoKTsKKyAgICBleHRyYVBhcmFtcy5zY3JvbGxiYXJUcmFjay50cmFja1kg
PSBhbGlnblJlY3QueSgpOworICAgIGV4dHJhUGFyYW1zLnNjcm9sbGJhclRyYWNrLnRyYWNrV2lk
dGggPSBhbGlnblJlY3Qud2lkdGgoKTsKKyAgICBleHRyYVBhcmFtcy5zY3JvbGxiYXJUcmFjay50
cmFja0hlaWdodCA9IGFsaWduUmVjdC5oZWlnaHQoKTsKKyAgICBDaHJvbWl1bUJyaWRnZTo6cGFp
bnQoCisgICAgICAgIGdjLAorICAgICAgICBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9y
aXpvbnRhbFNjcm9sbGJhciA/CisgICAgICAgICAgICBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9s
bGJhckhvcml6dG9uYWxUcmFjayA6CisgICAgICAgICAgICBDaHJvbWl1bUJyaWRnZTo6UGFydFNj
cm9sbGJhclZlcnRpY2FsVHJhY2ssCisgICAgICAgIHN0YXRlLAorICAgICAgICByZWN0LAorICAg
ICAgICAmZXh0cmFQYXJhbXMpOwogfQogCiB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51
eDo6cGFpbnRCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyKiBzY3JvbGxiYXIs
IGNvbnN0IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydCkKIHsKLSAgICBQbGF0Zm9y
bVRoZW1lQ2hyb21pdW1HdGs6OkFycm93RGlyZWN0aW9uIGRpcmVjdGlvbjsKKyAgICBDaHJvbWl1
bUJyaWRnZTo6UGFydCBwYWludFBhcnQ7CisgICAgQ2hyb21pdW1CcmlkZ2U6OlN0YXRlIHN0YXRl
ID0gQ2hyb21pdW1CcmlkZ2U6OlN0YXRlTm9ybWFsOworICAgIGJvb2wgY2hlY2tNaW4gPSBmYWxz
ZTsKKyAgICBib29sIGNoZWNrTWF4ID0gZmFsc2U7CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50
YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGlmIChwYXJ0ID09IEJh
Y2tCdXR0b25TdGFydFBhcnQpCi0gICAgICAgICAgICBkaXJlY3Rpb24gPSBQbGF0Zm9ybVRoZW1l
Q2hyb21pdW1HdGs6Oldlc3Q7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRpcmVjdGlvbiA9
IFBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0azo6RWFzdDsKKyAgICAgICAgaWYgKHBhcnQgPT0gQmFj
a0J1dHRvblN0YXJ0UGFydCkgeworICAgICAgICAgICAgcGFpbnRQYXJ0ID0gQ2hyb21pdW1Ccmlk
Z2U6OlBhcnRTY3JvbGxiYXJMZWZ0QXJyb3c7CisgICAgICAgICAgICBjaGVja01pbiA9IHRydWU7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYWludFBhcnQgPSBDaHJvbWl1bUJyaWRn
ZTo6UGFydFNjcm9sbGJhclJpZ2h0QXJyb3c7CisgICAgICAgICAgICBjaGVja01heCA9IHRydWU7
CisgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9u
U3RhcnRQYXJ0KQotICAgICAgICAgICAgZGlyZWN0aW9uID0gUGxhdGZvcm1UaGVtZUNocm9taXVt
R3RrOjpOb3J0aDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGlyZWN0aW9uID0gUGxhdGZv
cm1UaGVtZUNocm9taXVtR3RrOjpTb3V0aDsKKyAgICAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRv
blN0YXJ0UGFydCkgeworICAgICAgICAgICAgcGFpbnRQYXJ0ID0gQ2hyb21pdW1CcmlkZ2U6OlBh
cnRTY3JvbGxiYXJVcEFycm93OworICAgICAgICAgICAgY2hlY2tNaW4gPSB0cnVlOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgcGFpbnRQYXJ0ID0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRT
Y3JvbGxiYXJEb3duQXJyb3c7CisgICAgICAgICAgICBjaGVja01heCA9IHRydWU7CisgICAgICAg
IH0KICAgICB9Ci0KLSAgICBDb250cm9sU3RhdGVzIHN0YXRlcyA9IDA7Ci0gICAgLy8gRGV0ZXJt
aW5lIGlmIHRoZSBidXR0b24gY2FuIGJlIHByZXNzZWQuCi0gICAgaWYgKCgoZGlyZWN0aW9uID09
IFBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0azo6V2VzdCB8fCBkaXJlY3Rpb24gPT0gUGxhdGZvcm1U
aGVtZUNocm9taXVtR3RrOjpOb3J0aCkgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkpCi0gICAg
ICAgIHx8ICgoZGlyZWN0aW9uID09IFBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0azo6RWFzdCB8fCBk
aXJlY3Rpb24gPT0gUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjpTb3V0aCkgJiYgc2Nyb2xsYmFy
LT5jdXJyZW50UG9zKCkgIT0gc2Nyb2xsYmFyLT5tYXhpbXVtKCkpKQotICAgICAgICBzdGF0ZXMg
fD0gRW5hYmxlZFN0YXRlOwotCi0gICAgaWYgKHN0YXRlcyAmIEVuYWJsZWRTdGF0ZSkgeworICAg
IGlmIChjaGVja01pbiAmJiAoc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgPD0gMCkKKyAgICAgICAg
fHwgKGNoZWNrTWF4ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpID09IHNjcm9sbGJhci0+bWF4
aW11bSgpKSkgeworICAgICAgICBzdGF0ZSA9IENocm9taXVtQnJpZGdlOjpTdGF0ZURpc2FibGVk
OworICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChwYXJ0ID09IHNjcm9sbGJhci0+cHJlc3NlZFBh
cnQoKSkKLSAgICAgICAgICAgIHN0YXRlcyB8PSBQcmVzc2VkU3RhdGU7CisgICAgICAgICAgICBz
dGF0ZSA9IENocm9taXVtQnJpZGdlOjpTdGF0ZVByZXNzZWQ7CiAgICAgICAgIGVsc2UgaWYgKHBh
cnQgPT0gc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpKQotICAgICAgICAgICAgc3RhdGVzIHw9IEhv
dmVyU3RhdGU7CisgICAgICAgICAgICBzdGF0ZSA9IENocm9taXVtQnJpZGdlOjpTdGF0ZUhvdmVy
OwogICAgIH0KLQotICAgIFBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0azo6cGFpbnRBcnJvd0J1dHRv
bihnYywgcmVjdCwgZGlyZWN0aW9uLCBzdGF0ZXMpOworICAgIENocm9taXVtQnJpZGdlOjpwYWlu
dChnYywgcGFpbnRQYXJ0LCBzdGF0ZSwgcmVjdCwgMCk7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bUxpbnV4OjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGNvbnN0IGJvb2wgaG92
ZXJlZCA9IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBUaHVtYlBhcnQ7Ci0gICAgY29uc3Qg
aW50IG1pZHggPSByZWN0LngoKSArIHJlY3Qud2lkdGgoKSAvIDI7Ci0gICAgY29uc3QgaW50IG1p
ZHkgPSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkgLyAyOwotICAgIGNvbnN0IGJvb2wgdmVydGlj
YWwgPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXI7Ci0gICAg
U2tDYW52YXMqIGNvbnN0IGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7
Ci0KLSAgICBTa1NjYWxhciB0aHVtYlszXTsKLSAgICBTa0NvbG9yVG9IU1YoaG92ZXJlZAotICAg
ICAgICAgICAgICAgICA/IFBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0azo6dGh1bWJBY3RpdmVDb2xv
cigpCi0gICAgICAgICAgICAgICAgIDogUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjp0aHVtYklu
YWN0aXZlQ29sb3IoKSwKLSAgICAgICAgICAgICAgICAgdGh1bWIpOwotCi0gICAgU2tQYWludCBw
YWludDsKLSAgICBwYWludC5zZXRDb2xvcihQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6OnNhdHVy
YXRlQW5kQnJpZ2h0ZW4odGh1bWIsIDAsIDAuMDIpKTsKLQotICAgIFNrSVJlY3Qgc2tyZWN0Owot
ICAgIGlmICh2ZXJ0aWNhbCkKLSAgICAgICAgc2tyZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCks
IG1pZHggKyAxLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOwotICAgIGVsc2UKLSAgICAgICAg
c2tyZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCksIHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCBt
aWR5ICsgMSk7Ci0KLSAgICBjYW52YXMtPmRyYXdJUmVjdChza3JlY3QsIHBhaW50KTsKKyAgICBD
aHJvbWl1bUJyaWRnZTo6U3RhdGUgc3RhdGU7CiAKLSAgICBwYWludC5zZXRDb2xvcihQbGF0Zm9y
bVRoZW1lQ2hyb21pdW1HdGs6OnNhdHVyYXRlQW5kQnJpZ2h0ZW4odGh1bWIsIDAsIC0wLjAyKSk7
Ci0KLSAgICBpZiAodmVydGljYWwpCi0gICAgICAgIHNrcmVjdC5zZXQobWlkeCArIDEsIHJlY3Qu
eSgpLCByZWN0LngoKSArIHJlY3Qud2lkdGgoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKTsK
KyAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKKyAgICAgICAg
c3RhdGUgPSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVQcmVzc2VkOworICAgIGVsc2UgaWYgKHNjcm9s
bGJhci0+aG92ZXJlZFBhcnQoKSA9PSBUaHVtYlBhcnQpCisgICAgICAgIHN0YXRlID0gQ2hyb21p
dW1CcmlkZ2U6OlN0YXRlSG92ZXI7CiAgICAgZWxzZQotICAgICAgICBza3JlY3Quc2V0KHJlY3Qu
eCgpLCBtaWR5ICsgMSwgcmVjdC54KCkgKyByZWN0LndpZHRoKCksIHJlY3QueSgpICsgcmVjdC5o
ZWlnaHQoKSk7Ci0KLSAgICBjYW52YXMtPmRyYXdJUmVjdChza3JlY3QsIHBhaW50KTsKLQotICAg
IFNrU2NhbGFyIHRyYWNrWzNdOwotICAgIFNrQ29sb3JUb0hTVihQbGF0Zm9ybVRoZW1lQ2hyb21p
dW1HdGs6OnRyYWNrQ29sb3IoKSwgdHJhY2spOwotICAgIHBhaW50LnNldENvbG9yKFBsYXRmb3Jt
VGhlbWVDaHJvbWl1bUd0azo6b3V0bGluZUNvbG9yKHRyYWNrLCB0aHVtYikpOwotICAgIGRyYXdC
b3goY2FudmFzLCByZWN0LCBwYWludCk7Ci0KLSAgICBpZiAocmVjdC5oZWlnaHQoKSA+IDEwICYm
IHJlY3Qud2lkdGgoKSA+IDEwKSB7Ci0gICAgICAgIGNvbnN0IGludCBncmlwcHlIYWxmV2lkdGgg
PSAyOwotICAgICAgICBjb25zdCBpbnQgaW50ZXJHcmlwcHlPZmZzZXQgPSAzOwotICAgICAgICBp
ZiAodmVydGljYWwpIHsKLSAgICAgICAgICAgIGRyYXdIb3JpekxpbmUoY2FudmFzLCBtaWR4IC0g
Z3JpcHB5SGFsZldpZHRoLCBtaWR4ICsgZ3JpcHB5SGFsZldpZHRoLCBtaWR5IC0gaW50ZXJHcmlw
cHlPZmZzZXQsIHBhaW50KTsKLSAgICAgICAgICAgIGRyYXdIb3JpekxpbmUoY2FudmFzLCBtaWR4
IC0gZ3JpcHB5SGFsZldpZHRoLCBtaWR4ICsgZ3JpcHB5SGFsZldpZHRoLCBtaWR5LCAgICAgICAg
ICAgICAgICAgICAgIHBhaW50KTsKLSAgICAgICAgICAgIGRyYXdIb3JpekxpbmUoY2FudmFzLCBt
aWR4IC0gZ3JpcHB5SGFsZldpZHRoLCBtaWR4ICsgZ3JpcHB5SGFsZldpZHRoLCBtaWR5ICsgaW50
ZXJHcmlwcHlPZmZzZXQsIHBhaW50KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRy
YXdWZXJ0TGluZShjYW52YXMsIG1pZHggLSBpbnRlckdyaXBweU9mZnNldCwgbWlkeSAtIGdyaXBw
eUhhbGZXaWR0aCwgbWlkeSArIGdyaXBweUhhbGZXaWR0aCwgcGFpbnQpOwotICAgICAgICAgICAg
ZHJhd1ZlcnRMaW5lKGNhbnZhcywgbWlkeCwgICAgICAgICAgICAgICAgICAgICBtaWR5IC0gZ3Jp
cHB5SGFsZldpZHRoLCBtaWR5ICsgZ3JpcHB5SGFsZldpZHRoLCBwYWludCk7Ci0gICAgICAgICAg
ICBkcmF3VmVydExpbmUoY2FudmFzLCBtaWR4ICsgaW50ZXJHcmlwcHlPZmZzZXQsIG1pZHkgLSBn
cmlwcHlIYWxmV2lkdGgsIG1pZHkgKyBncmlwcHlIYWxmV2lkdGgsIHBhaW50KTsKLSAgICAgICAg
fQotICAgIH0KKyAgICAgICAgc3RhdGUgPSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVOb3JtYWw7Cisg
ICAgQ2hyb21pdW1CcmlkZ2U6OnBhaW50KAorICAgICAgICBnYywKKyAgICAgICAgc2Nyb2xsYmFy
LT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPworICAgICAgICAgICAgQ2hy
b21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVGh1bWIgOgorICAgICAgICAgICAg
Q2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRodW1iLAorICAgICAgICBzdGF0
ZSwKKyAgICAgICAgcmVjdCwKKyAgICAgICAgMCk7CiB9CiAKIGJvb2wgU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bUxpbnV4OjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYgZXZ0KQpAQCAtMTg5LDE3ICsxMzIsMjEgQEAgYm9vbCBTY3JvbGxiYXJU
aGVtZUNocm9taXVtTGludXg6OnNob3VsZAogCiBJbnRTaXplIFNjcm9sbGJhclRoZW1lQ2hyb21p
dW1MaW51eDo6YnV0dG9uU2l6ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKLSAgICBpZiAoc2Ny
b2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICByZXR1
cm4gSW50U2l6ZShzY3JvbGxiYXJUaGlja25lc3NWYWx1ZSwgc2Nyb2xsYmFyLT5oZWlnaHQoKSA8
IDIgKiBidXR0b25MZW5ndGggPyBzY3JvbGxiYXItPmhlaWdodCgpIC8gMiA6IGJ1dHRvbkxlbmd0
aCk7Ci0KLSAgICAvLyBIb3Jpem9udGFsU2Nyb2xsYmFyCi0gICAgcmV0dXJuIEludFNpemUoc2Ny
b2xsYmFyLT53aWR0aCgpIDwgMiAqIGJ1dHRvbkxlbmd0aCA/IHNjcm9sbGJhci0+d2lkdGgoKSAv
IDIgOiBidXR0b25MZW5ndGgsIHNjcm9sbGJhclRoaWNrbmVzc1ZhbHVlKTsKKyAgICByZXR1cm4g
Q2hyb21pdW1CcmlkZ2U6OmdldFNpemUoCisgICAgICAgIHNjcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8KKyAgICAgICAgICAgIENocm9taXVtQnJpZGdlOjpQ
YXJ0U2Nyb2xsYmFyTGVmdEFycm93IDoKKyAgICAgICAgICAgIENocm9taXVtQnJpZGdlOjpQYXJ0
U2Nyb2xsYmFyVXBBcnJvdyk7CiB9CiAKIGludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6
Om1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKLSAgICAvLyBUaGlz
IG1hdGNoZXMgRmlyZWZveCBvbiBMaW51eC4KLSAgICByZXR1cm4gMiAqIHNjcm9sbGJhclRoaWNr
bmVzcyhzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkpOworICAgIGlmIChzY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgSW50U2l6ZSBzaXplID0g
Q2hyb21pdW1CcmlkZ2U6OmdldFNpemUoQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0
aWNhbFRodW1iKTsKKyAgICAgICAgcmV0dXJuIHNpemUuaGVpZ2h0KCk7CisgICAgfQorCisgICAg
SW50U2l6ZSBzaXplID0gQ2hyb21pdW1CcmlkZ2U6OmdldFNpemUoQ2hyb21pdW1CcmlkZ2U6OlBh
cnRTY3JvbGxiYXJIb3Jpem9udGFsVGh1bWIpOworICAgIHJldHVybiBzaXplLndpZHRoKCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViVGhlbWVFbmdpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlRoZW1lRW5naW5lLmgJKHJldmlzaW9uIDY5NDY4KQorKysgV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJUaGVtZUVuZ2luZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFdlYlRoZW1lRW5naW5lX2gKLSNkZWZpbmUgV2ViVGhlbWVFbmdpbmVfaAotCi0jaW5jbHVkZSAi
V2ViQ2FudmFzLmgiCi0jaW5jbHVkZSAiV2ViQ29sb3IuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLXN0cnVjdCBXZWJSZWN0Owotc3RydWN0IFdlYlNpemU7Ci0KLS8vIEZJWE1FOiBUaGlzIGZp
bGUgaGFzIGJlZW4gbW92ZWQgdG8gdGhlIHdpbiBzdWJkaXJlY3RvcnkgYXMgaXQncyBlbnRpcmVs
eQotLy8gd2luZG93cyBkZXBlbmRlbnQuIE9uY2UgY2hyb21pdW0gaGFzIGJlZW4gdXBkYXRlZCB0
byBhY2Nlc3MgdGhlIGZpbGUgZnJvbQotLy8gdGhlcmUgdGhpcyBmaWxlIHNob3VsZCBiZSBkZWxl
dGVkLgotY2xhc3MgV2ViVGhlbWVFbmdpbmUgewotcHVibGljOgotI2lmZGVmIFdJTjMyCi0vLyBU
aGUgcGFydCBhbmQgc3RhdGUgcGFyYW1ldGVycyBjb3JyZXNwb25kIHRvIHZhbHVlcyBkZWZpbmVk
IGJ5IHRoZQotLy8gV2luZG93cyBUaGVtZSBBUEkgKHNlZQotLy8gaHR0cDovL21zZG4ubWljcm9z
b2Z0LmNvbS9lbi11cy9saWJyYXJ5L2JiNzczMTg3KFZTLjg1KS5hc3B4ICkuCi0vLyBUaGUgY2xh
c3NpY1N0YXRlIHBhcmFtZXRlciBjb3JyZXNwb25kcyB0byB0aGUgdVN0YXRlCi0vLyBwYXJhbWV0
ZXIgb2YgdGhlIFdpbmRvd3MgRHJhd0ZyYW1lQ29udHJvbCgpIGZ1bmN0aW9uLgotLy8gU2VlIHRo
ZSBkZWZpbml0aW9ucyBpbiA8dnNzdHlsZS5oPiBhbmQgPHdpbnVzZXIuaD4uCi0gICAgdmlydHVh
bCB2b2lkIHBhaW50QnV0dG9uKAotICAgICAgICBXZWJDYW52YXMqLCBpbnQgcGFydCwgaW50IHN0
YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAotICAgICAgICBjb25zdCBXZWJSZWN0JikgPSAwOwotCi0g
ICAgdmlydHVhbCB2b2lkIHBhaW50TWVudUxpc3QoCi0gICAgICAgIFdlYkNhbnZhcyosIGludCBw
YXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCi0gICAgICAgIGNvbnN0IFdlYlJlY3Qm
KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxiYXJBcnJvdygKLSAgICAgICAg
V2ViQ2FudmFzKiwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAotICAgICAgICBjb25zdCBX
ZWJSZWN0JikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsYmFyVGh1bWIoCi0g
ICAgICAgIFdlYkNhbnZhcyosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUs
Ci0gICAgICAgIGNvbnN0IFdlYlJlY3QmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRT
Y3JvbGxiYXJUcmFjaygKLSAgICAgICAgV2ViQ2FudmFzKiwgaW50IHBhcnQsIGludCBzdGF0ZSwg
aW50IGNsYXNzaWNTdGF0ZSwKLSAgICAgICAgY29uc3QgV2ViUmVjdCYsIGNvbnN0IFdlYlJlY3Qm
IGFsaWduUmVjdCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHBhaW50U3BpbkJ1dHRvbigKLSAg
ICAgICAgV2ViQ2FudmFzKiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwK
LSAgICAgICAgY29uc3QgV2ViUmVjdCYpIHt9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUZXh0
RmllbGQoCi0gICAgICAgIFdlYkNhbnZhcyosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFz
c2ljU3RhdGUsCi0gICAgICAgIGNvbnN0IFdlYlJlY3QmLCBXZWJDb2xvciwgYm9vbCBmaWxsQ29u
dGVudEFyZWEsIGJvb2wgZHJhd0VkZ2VzKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRU
cmFja2JhcigKLSAgICAgICAgV2ViQ2FudmFzKiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNs
YXNzaWNTdGF0ZSwKLSAgICAgICAgY29uc3QgV2ViUmVjdCYpID0gMDsKLQotICAgIHZpcnR1YWwg
dm9pZCBwYWludFByb2dyZXNzQmFyKAotICAgICAgICBXZWJDYW52YXMqLCBjb25zdCBXZWJSZWN0
JiBiYXJSZWN0LCBjb25zdCBXZWJSZWN0JiB2YWx1ZVJlY3QsCi0gICAgICAgIGJvb2wgZGV0ZXJt
aW5hdGUsIGRvdWJsZSBhbmltYXRlZFNlY29uZHMpIHt9Ci0KLSNlbmRpZgotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJv
bWl1bUJyaWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1
bUJyaWRnZS5jcHAJKHJldmlzaW9uIDY5NDY4KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJv
bWl1bUJyaWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDcgQEAKICNlbmRpZgog
CiAjaWYgT1MoTElOVVgpIHx8IE9TKEZSRUVCU0QpCisjaW5jbHVkZSAibGludXgvV2ViVGhlbWVF
bmdpbmUuaCIKICNpbmNsdWRlICJXZWJGb250SW5mby5oIgogI2luY2x1ZGUgIldlYkZvbnRSZW5k
ZXJTdHlsZS5oIgogI2VuZGlmCkBAIC03MzksNiArNzQwLDU4IEBAIHZvaWQgQ2hyb21pdW1Ccmlk
Z2U6OnBhaW50UHJvZ3Jlc3NCYXIoCiAgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2Fu
dmFzKCksIGJhclJlY3QsIHZhbHVlUmVjdCwgZGV0ZXJtaW5hdGUsIGFuaW1hdGVkU2Vjb25kcyk7
CiB9CiAKKyNlbGlmIE9TKExJTlVYKQorCitzdGF0aWMgV2ViVGhlbWVFbmdpbmU6OlBhcnQgV2Vi
VGhlbWVQYXJ0KENocm9taXVtQnJpZGdlOjpQYXJ0IHBhcnQpCit7CisgICAgc3dpdGNoIChwYXJ0
KSB7CisgICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckRvd25BcnJvdzogcmV0
dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyRG93bkFycm93OworICAgIGNhc2UgQ2hy
b21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJMZWZ0QXJyb3c6IHJldHVybiBXZWJUaGVtZUVuZ2lu
ZTo6UGFydFNjcm9sbGJhckxlZnRBcnJvdzsKKyAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0
U2Nyb2xsYmFyUmlnaHRBcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFy
UmlnaHRBcnJvdzsKKyAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVXBBcnJv
dzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyVXBBcnJvdzsKKyAgICBjYXNl
IENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRodW1iOiByZXR1cm4gV2Vi
VGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVGh1bWI7CisgICAgY2FzZSBDaHJv
bWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWI6IHJldHVybiBXZWJUaGVtZUVu
Z2luZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWI7CisgICAgY2FzZSBDaHJvbWl1bUJyaWRn
ZTo6UGFydFNjcm9sbGJhckhvcml6dG9uYWxUcmFjazogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQ
YXJ0U2Nyb2xsYmFySG9yaXp0b25hbFRyYWNrOworICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBh
cnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3Jv
bGxiYXJWZXJ0aWNhbFRyYWNrOworICAgIGRlZmF1bHQ6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6
UGFydFNjcm9sbGJhckRvd25BcnJvdzsKKyAgICB9Cit9CisKK3N0YXRpYyBXZWJUaGVtZUVuZ2lu
ZTo6U3RhdGUgV2ViVGhlbWVTdGF0ZShDaHJvbWl1bUJyaWRnZTo6U3RhdGUgc3RhdGUpCit7Cisg
ICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlN0YXRlRGlzYWJs
ZWQ6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVEaXNhYmxlZDsKKyAgICBjYXNlIENocm9t
aXVtQnJpZGdlOjpTdGF0ZUhvdmVyOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlSG92ZXI7
CisgICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVOb3JtYWw6IHJldHVybiBXZWJUaGVtZUVu
Z2luZTo6U3RhdGVOb3JtYWw7CisgICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVQcmVzc2Vk
OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlUHJlc3NlZDsKKyAgICBkZWZhdWx0OiByZXR1
cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlRGlzYWJsZWQ7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCBHZXRXZWJUaGVtZUV4dHJhUGFyYW1zKENocm9taXVtQnJpZGdlOjpQYXJ0IHBhcnQsIENocm9t
aXVtQnJpZGdlOjpTdGF0ZSBzdGF0ZSwgY29uc3QgQ2hyb21pdW1CcmlkZ2U6OkV4dHJhUGFyYW1z
KiBleHRyYVBhcmFtcywgV2ViVGhlbWVFbmdpbmU6OkV4dHJhUGFyYW1zKiB3ZWJUaGVtZUV4dHJh
UGFyYW1zKQoreworICAgIGlmIChwYXJ0ID09IENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFy
SG9yaXp0b25hbFRyYWNrIHx8IHBhcnQgPT0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJW
ZXJ0aWNhbFRyYWNrKSB7CisgICAgICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMtPnNjcm9sbGJhclRy
YWNrLnRyYWNrWCA9IGV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1g7CisgICAgICAg
IHdlYlRoZW1lRXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrWSA9IGV4dHJhUGFyYW1z
LT5zY3JvbGxiYXJUcmFjay50cmFja1k7CisgICAgICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMtPnNj
cm9sbGJhclRyYWNrLnRyYWNrV2lkdGggPSBleHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJh
Y2tXaWR0aDsKKyAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJh
Y2tIZWlnaHQgPSBleHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tIZWlnaHQ7CisgICAg
fQorfQorCitJbnRTaXplIENocm9taXVtQnJpZGdlOjpnZXRTaXplKFBhcnQgcGFydCkKK3sKKyAg
ICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5nZXRTaXplKFdlYlRoZW1l
UGFydChwYXJ0KSk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50KAorICAgIEdyYXBo
aWNzQ29udGV4dCogZ2MsIFBhcnQgcGFydCwgU3RhdGUgc3RhdGUsIGNvbnN0IEludFJlY3QmIHJl
Y3QsIGNvbnN0IEV4dHJhUGFyYW1zKiBleHRyYVBhcmFtcykKK3sKKyAgICBXZWJUaGVtZUVuZ2lu
ZTo6RXh0cmFQYXJhbXMgd2ViVGhlbWVFeHRyYVBhcmFtczsKKyAgICBHZXRXZWJUaGVtZUV4dHJh
UGFyYW1zKHBhcnQsIHN0YXRlLCBleHRyYVBhcmFtcywgJndlYlRoZW1lRXh0cmFQYXJhbXMpOwor
ICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludCgKKyAgICAgICAgZ2MtPnBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgV2ViVGhlbWVQYXJ0KHBhcnQpLCBXZWJUaGVtZVN0
YXRlKHN0YXRlKSwgcmVjdCwgJndlYlRoZW1lRXh0cmFQYXJhbXMpOworfQorCiAjZW5kaWYKIAog
Ly8gVHJhY2UgRXZlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70410</attachid>
            <date>2010-10-10 12:21:44 -0700</date>
            <delta_ts>2010-10-11 15:40:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47473-20101010122143.patch</filename>
            <type>text/plain</type>
            <size>20621</size>
            <attacher name="Dave Moore">davemoore</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTQ2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTAtMTAtMTAgIERhdmUgTW9vcmUgIDxkYXZlbW9vcmVAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFVzZSBuZXcgV2ViVGhlbWVFbmdpbmUgYXBpIG9uIGNocm9taXVtIC8gbGludXggdG8gZHJhdyBz
Y3JvbGxiYXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDc0NzMKKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmg6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4
LmNwcDoKKwogMjAxMC0xMC0wOSAgRXJpYyBVaHJoYW5lICA8ZXJpY3VAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCShyZXZpc2lvbiA2OTQ2OCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MjU0LDYgKzI1NCw0NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25zdCBJ
bnRSZWN0Jik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoCiAgICAgICAg
ICAgICBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBiYXJSZWN0LCBjb25zdCBJbnRS
ZWN0JiB2YWx1ZVJlY3QsIGJvb2wgZGV0ZXJtaW5hdGUsIGRvdWJsZSBhbmltYXRlZFNlY29uZHMp
OworI2VsaWYgT1MoTElOVVgpCisgICAgICAgIC8vIFRoZSBVSSBwYXJ0IHdoaWNoIGlzIGJlaW5n
IGFjY2Vzc2VkLgorICAgICAgICBlbnVtIFBhcnQgeworICAgICAgICAgICAgUGFydFNjcm9sbGJh
ckRvd25BcnJvdywKKyAgICAgICAgICAgIFBhcnRTY3JvbGxiYXJMZWZ0QXJyb3csCisgICAgICAg
ICAgICBQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdywKKyAgICAgICAgICAgIFBhcnRTY3JvbGxiYXJV
cEFycm93LAorICAgICAgICAgICAgUGFydFNjcm9sbGJhckhvcml6b250YWxUaHVtYiwKKyAgICAg
ICAgICAgIFBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRodW1iLAorICAgICAgICAgICAgUGFydFNjcm9s
bGJhckhvcml6dG9uYWxUcmFjaywKKyAgICAgICAgICAgIFBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRy
YWNrLAorICAgICAgICB9OworCisgICAgICAgIC8vIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBh
c3NvY2lhdGVkIFBhcnQuCisgICAgICAgIGVudW0gU3RhdGUgeworICAgICAgICAgICAgU3RhdGVE
aXNhYmxlZCwKKyAgICAgICAgICAgIFN0YXRlSG92ZXIsCisgICAgICAgICAgICBTdGF0ZU5vcm1h
bCwKKyAgICAgICAgICAgIFN0YXRlUHJlc3NlZCwKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1
Y3QgU2Nyb2xsYmFyVHJhY2tFeHRyYVBhcmFtcyB7CisgICAgICAgICAgICAvLyBUaGUgYm91bmRz
IG9mIHRoZSBlbnRpcmUgdHJhY2ssIGFzIG9wcG9zZWQgdG8gdGhlIHBhcnQgYmVpbmcgcGFpbnRl
ZC4KKyAgICAgICAgICAgIGludCB0cmFja1g7CisgICAgICAgICAgICBpbnQgdHJhY2tZOworICAg
ICAgICAgICAgaW50IHRyYWNrV2lkdGg7CisgICAgICAgICAgICBpbnQgdHJhY2tIZWlnaHQ7Cisg
ICAgICAgIH07CisKKyAgICAgICAgdW5pb24gRXh0cmFQYXJhbXMgeworICAgICAgICAgICAgU2Ny
b2xsYmFyVHJhY2tFeHRyYVBhcmFtcyBzY3JvbGxiYXJUcmFjazsKKyAgICAgICAgfTsKKworICAg
ICAgICAvLyBHZXRzIHRoZSBzaXplIG9mIHRoZSBnaXZlbiB0aGVtZSBwYXJ0LiBGb3IgdmFyaWFi
bGUgc2l6ZWQgaXRlbXMKKyAgICAgICAgLy8gbGlrZSB2ZXJ0aWNhbCBzY3JvbGxiYXIgdGh1bWJz
LCB0aGUgd2lkdGggd2lsbCBiZSB0aGUgcmVxdWlyZWQgd2lkdGggb2YKKyAgICAgICAgLy8gdGhl
IHRyYWNrIHdoaWxlIHRoZSBoZWlnaHQgd2lsbCBiZSB0aGUgbWluaW11bSBoZWlnaHQuCisgICAg
ICAgIHN0YXRpYyBJbnRTaXplIGdldFNpemUoUGFydCk7CisgICAgICAgIC8vIFBhaW50IHRoZSBn
aXZlbiB0aGUgZ2l2ZW4gdGhlbWUgcGFydC4KKyAgICAgICAgc3RhdGljIHZvaWQgcGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiwgUGFydCwgU3RhdGUsIGNvbnN0IEludFJlY3QmLCBjb25zdCBFeHRyYVBh
cmFtcyopOwogI2VuZGlmCiAKICAgICAgICAgLy8gVHJhY2UgRXZlbnQgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1M
aW51eC5jcHAJKHJldmlzaW9uIDY5NDY4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9T
Y3JvbGxiYXJUaGVtZUNocm9taXVtTGludXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNyAr
MzEsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTGludXguaCIKIAotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNs
dWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0ay5oIgogI2luY2x1ZGUgIlNjcm9sbGJh
ci5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RhdGljIGNvbnN0IGludCBzY3JvbGxiYXJUaGlja25lc3NWYWx1ZSA9IDE1Owot
c3RhdGljIGNvbnN0IGludCBidXR0b25MZW5ndGggPSAxNDsKLQogU2Nyb2xsYmFyVGhlbWUqIFNj
cm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpCiB7CiAgICAgc3RhdGljIFNjcm9sbGJhclRoZW1l
Q2hyb21pdW1MaW51eCB0aGVtZTsKQEAgLTUwLDEzNiArNDUsODQgQEAgU2Nyb2xsYmFyVGhlbWUq
IFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaAogCiBpbnQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxp
bnV4OjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUp
CiB7Ci0gICAgcmV0dXJuIHNjcm9sbGJhclRoaWNrbmVzc1ZhbHVlOwotfQotCi1zdGF0aWMgdm9p
ZCBkcmF3VmVydExpbmUoU2tDYW52YXMqIGNhbnZhcywgaW50IHgsIGludCB5MSwgaW50IHkyLCBj
b25zdCBTa1BhaW50JiBwYWludCkKLXsKLSAgICBTa0lSZWN0IHNrcmVjdDsKLSAgICBza3JlY3Qu
c2V0KHgsIHkxLCB4ICsgMSwgeTIgKyAxKTsKLSAgICBjYW52YXMtPmRyYXdJUmVjdChza3JlY3Qs
IHBhaW50KTsKLX0KLQotc3RhdGljIHZvaWQgZHJhd0hvcml6TGluZShTa0NhbnZhcyogY2FudmFz
LCBpbnQgeDEsIGludCB4MiwgaW50IHksIGNvbnN0IFNrUGFpbnQmIHBhaW50KQotewotICAgIFNr
SVJlY3Qgc2tyZWN0OwotICAgIHNrcmVjdC5zZXQoeDEsIHksIHgyICsgMSwgeSArIDEpOwotICAg
IGNhbnZhcy0+ZHJhd0lSZWN0KHNrcmVjdCwgcGFpbnQpOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3
Qm94KFNrQ2FudmFzKiBjYW52YXMsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IFNrUGFpbnQm
IHBhaW50KQotewotICAgIGNvbnN0IGludCByaWdodCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgp
IC0gMTsKLSAgICBjb25zdCBpbnQgYm90dG9tID0gcmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC0g
MTsKLSAgICBkcmF3SG9yaXpMaW5lKGNhbnZhcywgcmVjdC54KCksIHJpZ2h0LCByZWN0LnkoKSwg
cGFpbnQpOwotICAgIGRyYXdWZXJ0TGluZShjYW52YXMsIHJpZ2h0LCByZWN0LnkoKSwgYm90dG9t
LCBwYWludCk7Ci0gICAgZHJhd0hvcml6TGluZShjYW52YXMsIHJlY3QueCgpLCByaWdodCwgYm90
dG9tLCBwYWludCk7Ci0gICAgZHJhd1ZlcnRMaW5lKGNhbnZhcywgcmVjdC54KCksIHJlY3QueSgp
LCBib3R0b20sIHBhaW50KTsKKyAgICAvLyBIb3JpeiBhbmQgVmVydCBzY3JvbGxiYXJzIGFyZSB0
aGUgc2FtZSB0aGlja25lc3MuCisgICAgSW50U2l6ZSBzY3JvbGxiYXJTaXplID0gQ2hyb21pdW1C
cmlkZ2U6OmdldFNpemUoQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNr
KTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyU2l6ZS53aWR0aCgpOwogfQogCiB2b2lkIFNjcm9sbGJh
clRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUcmFja1BpZWNlKEdyYXBoaWNzQ29udGV4dCogZ2Ms
IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0
IHBhcnRUeXBlKQogewotICAgIFNrQ2FudmFzKiBjb25zdCBjYW52YXMgPSBnYy0+cGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpOwotICAgIFNrUGFpbnQgcGFpbnQ7Ci0gICAgU2tJUmVjdCBza3Jl
Y3Q7Ci0KLSAgICBza3JlY3Quc2V0KHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC54KCkgKyByZWN0
LndpZHRoKCksIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSk7Ci0gICAgU2tTY2FsYXIgdHJhY2tI
U1ZbM107Ci0gICAgU2tDb2xvclRvSFNWKFBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0azo6dHJhY2tD
b2xvcigpLCB0cmFja0hTVik7Ci0gICAgcGFpbnQuc2V0Q29sb3IoUGxhdGZvcm1UaGVtZUNocm9t
aXVtR3RrOjpzYXR1cmF0ZUFuZEJyaWdodGVuKHRyYWNrSFNWLCAwLCAwKSk7Ci0gICAgY2FudmFz
LT5kcmF3SVJlY3Qoc2tyZWN0LCBwYWludCk7Ci0KLSAgICBTa1NjYWxhciB0aHVtYkhTVlszXTsK
LSAgICBTa0NvbG9yVG9IU1YoUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjp0aHVtYkluYWN0aXZl
Q29sb3IoKSwKLSAgICAgICAgICAgICAgICAgdGh1bWJIU1YpOwotCi0gICAgcGFpbnQuc2V0Q29s
b3IoUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjpvdXRsaW5lQ29sb3IodHJhY2tIU1YsIHRodW1i
SFNWKSk7Ci0gICAgZHJhd0JveChjYW52YXMsIHJlY3QsIHBhaW50KTsKKyAgICBDaHJvbWl1bUJy
aWRnZTo6U3RhdGUgc3RhdGUgPQorICAgICAgICBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0g
cGFydFR5cGUgPyBDaHJvbWl1bUJyaWRnZTo6U3RhdGVIb3ZlciA6IENocm9taXVtQnJpZGdlOjpT
dGF0ZU5vcm1hbDsKKyAgICBJbnRSZWN0IGFsaWduUmVjdCA9IHRyYWNrUmVjdChzY3JvbGxiYXIs
IGZhbHNlKTsKKyAgICBDaHJvbWl1bUJyaWRnZTo6RXh0cmFQYXJhbXMgZXh0cmFQYXJhbXM7Cisg
ICAgZXh0cmFQYXJhbXMuc2Nyb2xsYmFyVHJhY2sudHJhY2tYID0gYWxpZ25SZWN0LngoKTsKKyAg
ICBleHRyYVBhcmFtcy5zY3JvbGxiYXJUcmFjay50cmFja1kgPSBhbGlnblJlY3QueSgpOworICAg
IGV4dHJhUGFyYW1zLnNjcm9sbGJhclRyYWNrLnRyYWNrV2lkdGggPSBhbGlnblJlY3Qud2lkdGgo
KTsKKyAgICBleHRyYVBhcmFtcy5zY3JvbGxiYXJUcmFjay50cmFja0hlaWdodCA9IGFsaWduUmVj
dC5oZWlnaHQoKTsKKyAgICBDaHJvbWl1bUJyaWRnZTo6cGFpbnQoCisgICAgICAgIGdjLAorICAg
ICAgICBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/Cisg
ICAgICAgICAgICBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6dG9uYWxUcmFjayA6
CisgICAgICAgICAgICBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVHJhY2ss
CisgICAgICAgIHN0YXRlLAorICAgICAgICByZWN0LAorICAgICAgICAmZXh0cmFQYXJhbXMpOwog
fQogCiB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRCdXR0b24oR3JhcGhp
Y3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3Qs
IFNjcm9sbGJhclBhcnQgcGFydCkKIHsKLSAgICBQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6OkFy
cm93RGlyZWN0aW9uIGRpcmVjdGlvbjsKKyAgICBDaHJvbWl1bUJyaWRnZTo6UGFydCBwYWludFBh
cnQ7CisgICAgQ2hyb21pdW1CcmlkZ2U6OlN0YXRlIHN0YXRlID0gQ2hyb21pdW1CcmlkZ2U6OlN0
YXRlTm9ybWFsOworICAgIGJvb2wgY2hlY2tNaW4gPSBmYWxzZTsKKyAgICBib29sIGNoZWNrTWF4
ID0gZmFsc2U7CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyKSB7Ci0gICAgICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQpCi0g
ICAgICAgICAgICBkaXJlY3Rpb24gPSBQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6Oldlc3Q7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRpcmVjdGlvbiA9IFBsYXRmb3JtVGhlbWVDaHJvbWl1
bUd0azo6RWFzdDsKKyAgICAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCkgewor
ICAgICAgICAgICAgcGFpbnRQYXJ0ID0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJMZWZ0
QXJyb3c7CisgICAgICAgICAgICBjaGVja01pbiA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBwYWludFBhcnQgPSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclJpZ2h0
QXJyb3c7CisgICAgICAgICAgICBjaGVja01heCA9IHRydWU7CisgICAgICAgIH0KICAgICB9IGVs
c2UgewotICAgICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0KQotICAgICAgICAg
ICAgZGlyZWN0aW9uID0gUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjpOb3J0aDsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgZGlyZWN0aW9uID0gUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjpT
b3V0aDsKKyAgICAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCkgeworICAgICAg
ICAgICAgcGFpbnRQYXJ0ID0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJVcEFycm93Owor
ICAgICAgICAgICAgY2hlY2tNaW4gPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgcGFpbnRQYXJ0ID0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJEb3duQXJyb3c7Cisg
ICAgICAgICAgICBjaGVja01heCA9IHRydWU7CisgICAgICAgIH0KICAgICB9Ci0KLSAgICBDb250
cm9sU3RhdGVzIHN0YXRlcyA9IDA7Ci0gICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBidXR0b24gY2Fu
IGJlIHByZXNzZWQuCi0gICAgaWYgKCgoZGlyZWN0aW9uID09IFBsYXRmb3JtVGhlbWVDaHJvbWl1
bUd0azo6V2VzdCB8fCBkaXJlY3Rpb24gPT0gUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjpOb3J0
aCkgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkpCi0gICAgICAgIHx8ICgoZGlyZWN0aW9uID09
IFBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0azo6RWFzdCB8fCBkaXJlY3Rpb24gPT0gUGxhdGZvcm1U
aGVtZUNocm9taXVtR3RrOjpTb3V0aCkgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgIT0gc2Ny
b2xsYmFyLT5tYXhpbXVtKCkpKQotICAgICAgICBzdGF0ZXMgfD0gRW5hYmxlZFN0YXRlOwotCi0g
ICAgaWYgKHN0YXRlcyAmIEVuYWJsZWRTdGF0ZSkgeworICAgIGlmIChjaGVja01pbiAmJiAoc2Ny
b2xsYmFyLT5jdXJyZW50UG9zKCkgPD0gMCkKKyAgICAgICAgfHwgKGNoZWNrTWF4ICYmIHNjcm9s
bGJhci0+Y3VycmVudFBvcygpID09IHNjcm9sbGJhci0+bWF4aW11bSgpKSkgeworICAgICAgICBz
dGF0ZSA9IENocm9taXVtQnJpZGdlOjpTdGF0ZURpc2FibGVkOworICAgIH0gZWxzZSB7CiAgICAg
ICAgIGlmIChwYXJ0ID09IHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSkKLSAgICAgICAgICAgIHN0
YXRlcyB8PSBQcmVzc2VkU3RhdGU7CisgICAgICAgICAgICBzdGF0ZSA9IENocm9taXVtQnJpZGdl
OjpTdGF0ZVByZXNzZWQ7CiAgICAgICAgIGVsc2UgaWYgKHBhcnQgPT0gc2Nyb2xsYmFyLT5ob3Zl
cmVkUGFydCgpKQotICAgICAgICAgICAgc3RhdGVzIHw9IEhvdmVyU3RhdGU7CisgICAgICAgICAg
ICBzdGF0ZSA9IENocm9taXVtQnJpZGdlOjpTdGF0ZUhvdmVyOwogICAgIH0KLQotICAgIFBsYXRm
b3JtVGhlbWVDaHJvbWl1bUd0azo6cGFpbnRBcnJvd0J1dHRvbihnYywgcmVjdCwgZGlyZWN0aW9u
LCBzdGF0ZXMpOworICAgIENocm9taXVtQnJpZGdlOjpwYWludChnYywgcGFpbnRQYXJ0LCBzdGF0
ZSwgcmVjdCwgMCk7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWlu
dFRodW1iKEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewotICAgIGNvbnN0IGJvb2wgaG92ZXJlZCA9IHNjcm9sbGJhci0+aG92
ZXJlZFBhcnQoKSA9PSBUaHVtYlBhcnQ7Ci0gICAgY29uc3QgaW50IG1pZHggPSByZWN0LngoKSAr
IHJlY3Qud2lkdGgoKSAvIDI7Ci0gICAgY29uc3QgaW50IG1pZHkgPSByZWN0LnkoKSArIHJlY3Qu
aGVpZ2h0KCkgLyAyOwotICAgIGNvbnN0IGJvb2wgdmVydGljYWwgPSBzY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXI7Ci0gICAgU2tDYW52YXMqIGNvbnN0IGNhbnZh
cyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Ci0KLSAgICBTa1NjYWxhciB0aHVt
YlszXTsKLSAgICBTa0NvbG9yVG9IU1YoaG92ZXJlZAotICAgICAgICAgICAgICAgICA/IFBsYXRm
b3JtVGhlbWVDaHJvbWl1bUd0azo6dGh1bWJBY3RpdmVDb2xvcigpCi0gICAgICAgICAgICAgICAg
IDogUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjp0aHVtYkluYWN0aXZlQ29sb3IoKSwKLSAgICAg
ICAgICAgICAgICAgdGh1bWIpOwotCi0gICAgU2tQYWludCBwYWludDsKLSAgICBwYWludC5zZXRD
b2xvcihQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6OnNhdHVyYXRlQW5kQnJpZ2h0ZW4odGh1bWIs
IDAsIDAuMDIpKTsKLQotICAgIFNrSVJlY3Qgc2tyZWN0OwotICAgIGlmICh2ZXJ0aWNhbCkKLSAg
ICAgICAgc2tyZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCksIG1pZHggKyAxLCByZWN0LnkoKSAr
IHJlY3QuaGVpZ2h0KCkpOwotICAgIGVsc2UKLSAgICAgICAgc2tyZWN0LnNldChyZWN0LngoKSwg
cmVjdC55KCksIHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCBtaWR5ICsgMSk7Ci0KLSAgICBjYW52
YXMtPmRyYXdJUmVjdChza3JlY3QsIHBhaW50KTsKKyAgICBDaHJvbWl1bUJyaWRnZTo6U3RhdGUg
c3RhdGU7CiAKLSAgICBwYWludC5zZXRDb2xvcihQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6OnNh
dHVyYXRlQW5kQnJpZ2h0ZW4odGh1bWIsIDAsIC0wLjAyKSk7Ci0KLSAgICBpZiAodmVydGljYWwp
Ci0gICAgICAgIHNrcmVjdC5zZXQobWlkeCArIDEsIHJlY3QueSgpLCByZWN0LngoKSArIHJlY3Qu
d2lkdGgoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKTsKKyAgICBpZiAoc2Nyb2xsYmFyLT5w
cmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKKyAgICAgICAgc3RhdGUgPSBDaHJvbWl1bUJyaWRn
ZTo6U3RhdGVQcmVzc2VkOworICAgIGVsc2UgaWYgKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9
PSBUaHVtYlBhcnQpCisgICAgICAgIHN0YXRlID0gQ2hyb21pdW1CcmlkZ2U6OlN0YXRlSG92ZXI7
CiAgICAgZWxzZQotICAgICAgICBza3JlY3Quc2V0KHJlY3QueCgpLCBtaWR5ICsgMSwgcmVjdC54
KCkgKyByZWN0LndpZHRoKCksIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBjYW52
YXMtPmRyYXdJUmVjdChza3JlY3QsIHBhaW50KTsKLQotICAgIFNrU2NhbGFyIHRyYWNrWzNdOwot
ICAgIFNrQ29sb3JUb0hTVihQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6OnRyYWNrQ29sb3IoKSwg
dHJhY2spOwotICAgIHBhaW50LnNldENvbG9yKFBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0azo6b3V0
bGluZUNvbG9yKHRyYWNrLCB0aHVtYikpOwotICAgIGRyYXdCb3goY2FudmFzLCByZWN0LCBwYWlu
dCk7Ci0KLSAgICBpZiAocmVjdC5oZWlnaHQoKSA+IDEwICYmIHJlY3Qud2lkdGgoKSA+IDEwKSB7
Ci0gICAgICAgIGNvbnN0IGludCBncmlwcHlIYWxmV2lkdGggPSAyOwotICAgICAgICBjb25zdCBp
bnQgaW50ZXJHcmlwcHlPZmZzZXQgPSAzOwotICAgICAgICBpZiAodmVydGljYWwpIHsKLSAgICAg
ICAgICAgIGRyYXdIb3JpekxpbmUoY2FudmFzLCBtaWR4IC0gZ3JpcHB5SGFsZldpZHRoLCBtaWR4
ICsgZ3JpcHB5SGFsZldpZHRoLCBtaWR5IC0gaW50ZXJHcmlwcHlPZmZzZXQsIHBhaW50KTsKLSAg
ICAgICAgICAgIGRyYXdIb3JpekxpbmUoY2FudmFzLCBtaWR4IC0gZ3JpcHB5SGFsZldpZHRoLCBt
aWR4ICsgZ3JpcHB5SGFsZldpZHRoLCBtaWR5LCAgICAgICAgICAgICAgICAgICAgIHBhaW50KTsK
LSAgICAgICAgICAgIGRyYXdIb3JpekxpbmUoY2FudmFzLCBtaWR4IC0gZ3JpcHB5SGFsZldpZHRo
LCBtaWR4ICsgZ3JpcHB5SGFsZldpZHRoLCBtaWR5ICsgaW50ZXJHcmlwcHlPZmZzZXQsIHBhaW50
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRyYXdWZXJ0TGluZShjYW52YXMsIG1p
ZHggLSBpbnRlckdyaXBweU9mZnNldCwgbWlkeSAtIGdyaXBweUhhbGZXaWR0aCwgbWlkeSArIGdy
aXBweUhhbGZXaWR0aCwgcGFpbnQpOwotICAgICAgICAgICAgZHJhd1ZlcnRMaW5lKGNhbnZhcywg
bWlkeCwgICAgICAgICAgICAgICAgICAgICBtaWR5IC0gZ3JpcHB5SGFsZldpZHRoLCBtaWR5ICsg
Z3JpcHB5SGFsZldpZHRoLCBwYWludCk7Ci0gICAgICAgICAgICBkcmF3VmVydExpbmUoY2FudmFz
LCBtaWR4ICsgaW50ZXJHcmlwcHlPZmZzZXQsIG1pZHkgLSBncmlwcHlIYWxmV2lkdGgsIG1pZHkg
KyBncmlwcHlIYWxmV2lkdGgsIHBhaW50KTsKLSAgICAgICAgfQotICAgIH0KKyAgICAgICAgc3Rh
dGUgPSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVOb3JtYWw7CisgICAgQ2hyb21pdW1CcmlkZ2U6OnBh
aW50KAorICAgICAgICBnYywKKyAgICAgICAgc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhv
cml6b250YWxTY3JvbGxiYXIgPworICAgICAgICAgICAgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3Jv
bGxiYXJIb3Jpem9udGFsVGh1bWIgOgorICAgICAgICAgICAgQ2hyb21pdW1CcmlkZ2U6OlBhcnRT
Y3JvbGxiYXJWZXJ0aWNhbFRodW1iLAorICAgICAgICBzdGF0ZSwKKyAgICAgICAgcmVjdCwKKyAg
ICAgICAgMCk7CiB9CiAKIGJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpzaG91bGRD
ZW50ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQpA
QCAtMTg5LDE3ICsxMzIsMjEgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OnNo
b3VsZAogCiBJbnRTaXplIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6YnV0dG9uU2l6ZShT
Y3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxiYXJU
aGlja25lc3NWYWx1ZSwgc2Nyb2xsYmFyLT5oZWlnaHQoKSA8IDIgKiBidXR0b25MZW5ndGggPyBz
Y3JvbGxiYXItPmhlaWdodCgpIC8gMiA6IGJ1dHRvbkxlbmd0aCk7Ci0KLSAgICAvLyBIb3Jpem9u
dGFsU2Nyb2xsYmFyCi0gICAgcmV0dXJuIEludFNpemUoc2Nyb2xsYmFyLT53aWR0aCgpIDwgMiAq
IGJ1dHRvbkxlbmd0aCA/IHNjcm9sbGJhci0+d2lkdGgoKSAvIDIgOiBidXR0b25MZW5ndGgsIHNj
cm9sbGJhclRoaWNrbmVzc1ZhbHVlKTsKKyAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmdldFNp
emUoCisgICAgICAgIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyID8KKyAgICAgICAgICAgIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyTGVmdEFycm93
IDoKKyAgICAgICAgICAgIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVXBBcnJvdyk7CiB9
CiAKIGludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6Om1pbmltdW1UaHVtYkxlbmd0aChT
Y3JvbGxiYXIqIHNjcm9sbGJhcikKIHsKLSAgICAvLyBUaGlzIG1hdGNoZXMgRmlyZWZveCBvbiBM
aW51eC4KLSAgICByZXR1cm4gMiAqIHNjcm9sbGJhclRoaWNrbmVzcyhzY3JvbGxiYXItPmNvbnRy
b2xTaXplKCkpOworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxT
Y3JvbGxiYXIpIHsKKyAgICAgICAgSW50U2l6ZSBzaXplID0gQ2hyb21pdW1CcmlkZ2U6OmdldFNp
emUoQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRodW1iKTsKKyAgICAgICAg
cmV0dXJuIHNpemUuaGVpZ2h0KCk7CisgICAgfQorCisgICAgSW50U2l6ZSBzaXplID0gQ2hyb21p
dW1CcmlkZ2U6OmdldFNpemUoQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFs
VGh1bWIpOworICAgIHJldHVybiBzaXplLndpZHRoKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjk0NjgpCisrKyBXZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTAtMTAg
IERhdmUgTW9vcmUgIDxkYXZlbW9vcmVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBuZXcgV2ViVGhlbWVFbmdpbmUgYXBp
IG9uIGNocm9taXVtIC8gbGludXggdG8gZHJhdyBzY3JvbGxiYXJzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc0NzMKKworICAgICAgICAqIHB1Ymxp
Yy9XZWJUaGVtZUVuZ2luZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGNocm9taXVtL3NyYy9DaHJv
bWl1bUJyaWRnZS5jcHA6CisKIDIwMTAtMTAtMDkgIFZhcnVuIEphaW4gIDx2YXJ1bmphaW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVGhlbWVFbmdpbmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlRoZW1lRW5naW5lLmgJKHJldmlzaW9uIDY5NDY4KQorKysg
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJUaGVtZUVuZ2luZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlRoZW1lRW5naW5lX2gKLSNkZWZpbmUgV2ViVGhlbWVF
bmdpbmVfaAotCi0jaW5jbHVkZSAiV2ViQ2FudmFzLmgiCi0jaW5jbHVkZSAiV2ViQ29sb3IuaCIK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0cnVjdCBXZWJSZWN0Owotc3RydWN0IFdlYlNpemU7
Ci0KLS8vIEZJWE1FOiBUaGlzIGZpbGUgaGFzIGJlZW4gbW92ZWQgdG8gdGhlIHdpbiBzdWJkaXJl
Y3RvcnkgYXMgaXQncyBlbnRpcmVseQotLy8gd2luZG93cyBkZXBlbmRlbnQuIE9uY2UgY2hyb21p
dW0gaGFzIGJlZW4gdXBkYXRlZCB0byBhY2Nlc3MgdGhlIGZpbGUgZnJvbQotLy8gdGhlcmUgdGhp
cyBmaWxlIHNob3VsZCBiZSBkZWxldGVkLgotY2xhc3MgV2ViVGhlbWVFbmdpbmUgewotcHVibGlj
OgotI2lmZGVmIFdJTjMyCi0vLyBUaGUgcGFydCBhbmQgc3RhdGUgcGFyYW1ldGVycyBjb3JyZXNw
b25kIHRvIHZhbHVlcyBkZWZpbmVkIGJ5IHRoZQotLy8gV2luZG93cyBUaGVtZSBBUEkgKHNlZQot
Ly8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2JiNzczMTg3KFZTLjg1
KS5hc3B4ICkuCi0vLyBUaGUgY2xhc3NpY1N0YXRlIHBhcmFtZXRlciBjb3JyZXNwb25kcyB0byB0
aGUgdVN0YXRlCi0vLyBwYXJhbWV0ZXIgb2YgdGhlIFdpbmRvd3MgRHJhd0ZyYW1lQ29udHJvbCgp
IGZ1bmN0aW9uLgotLy8gU2VlIHRoZSBkZWZpbml0aW9ucyBpbiA8dnNzdHlsZS5oPiBhbmQgPHdp
bnVzZXIuaD4uCi0gICAgdmlydHVhbCB2b2lkIHBhaW50QnV0dG9uKAotICAgICAgICBXZWJDYW52
YXMqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAotICAgICAgICBjb25z
dCBXZWJSZWN0JikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHBhaW50TWVudUxpc3QoCi0gICAg
ICAgIFdlYkNhbnZhcyosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCi0g
ICAgICAgIGNvbnN0IFdlYlJlY3QmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3Jv
bGxiYXJBcnJvdygKLSAgICAgICAgV2ViQ2FudmFzKiwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0
YXRlLAotICAgICAgICBjb25zdCBXZWJSZWN0JikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHBh
aW50U2Nyb2xsYmFyVGh1bWIoCi0gICAgICAgIFdlYkNhbnZhcyosIGludCBwYXJ0LCBpbnQgc3Rh
dGUsIGludCBjbGFzc2ljU3RhdGUsCi0gICAgICAgIGNvbnN0IFdlYlJlY3QmKSA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxiYXJUcmFjaygKLSAgICAgICAgV2ViQ2FudmFzKiwg
aW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICAgICAgY29uc3QgV2Vi
UmVjdCYsIGNvbnN0IFdlYlJlY3QmIGFsaWduUmVjdCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lk
IHBhaW50U3BpbkJ1dHRvbigKLSAgICAgICAgV2ViQ2FudmFzKiwgaW50IHBhcnQsIGludCBzdGF0
ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICAgICAgY29uc3QgV2ViUmVjdCYpIHt9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRUZXh0RmllbGQoCi0gICAgICAgIFdlYkNhbnZhcyosIGludCBwYXJ0
LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCi0gICAgICAgIGNvbnN0IFdlYlJlY3QmLCBX
ZWJDb2xvciwgYm9vbCBmaWxsQ29udGVudEFyZWEsIGJvb2wgZHJhd0VkZ2VzKSA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRUcmFja2JhcigKLSAgICAgICAgV2ViQ2FudmFzKiwgaW50IHBh
cnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICAgICAgY29uc3QgV2ViUmVjdCYp
ID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBwYWludFByb2dyZXNzQmFyKAotICAgICAgICBXZWJD
YW52YXMqLCBjb25zdCBXZWJSZWN0JiBiYXJSZWN0LCBjb25zdCBXZWJSZWN0JiB2YWx1ZVJlY3Qs
Ci0gICAgICAgIGJvb2wgZGV0ZXJtaW5hdGUsIGRvdWJsZSBhbmltYXRlZFNlY29uZHMpIHt9Ci0K
LSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpJbmRleDogV2Vi
S2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAJKHJldmlzaW9uIDY5NDY4KQorKysgV2Vi
S2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3
LDYgKzY3LDcgQEAKICNlbmRpZgogCiAjaWYgT1MoTElOVVgpIHx8IE9TKEZSRUVCU0QpCisjaW5j
bHVkZSAibGludXgvV2ViVGhlbWVFbmdpbmUuaCIKICNpbmNsdWRlICJXZWJGb250SW5mby5oIgog
I2luY2x1ZGUgIldlYkZvbnRSZW5kZXJTdHlsZS5oIgogI2VuZGlmCkBAIC03MzksNiArNzQwLDU4
IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50UHJvZ3Jlc3NCYXIoCiAgICAgICAgIGdjLT5w
bGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIGJhclJlY3QsIHZhbHVlUmVjdCwgZGV0ZXJtaW5h
dGUsIGFuaW1hdGVkU2Vjb25kcyk7CiB9CiAKKyNlbGlmIE9TKExJTlVYKQorCitzdGF0aWMgV2Vi
VGhlbWVFbmdpbmU6OlBhcnQgV2ViVGhlbWVQYXJ0KENocm9taXVtQnJpZGdlOjpQYXJ0IHBhcnQp
Cit7CisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNj
cm9sbGJhckRvd25BcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyRG93
bkFycm93OworICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJMZWZ0QXJyb3c6
IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhckxlZnRBcnJvdzsKKyAgICBjYXNl
IENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdzogcmV0dXJuIFdlYlRoZW1l
RW5naW5lOjpQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdzsKKyAgICBjYXNlIENocm9taXVtQnJpZGdl
OjpQYXJ0U2Nyb2xsYmFyVXBBcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xs
YmFyVXBBcnJvdzsKKyAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9yaXpv
bnRhbFRodW1iOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFs
VGh1bWI7CisgICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVGh1
bWI6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWI7Cisg
ICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6dG9uYWxUcmFjazogcmV0
dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFySG9yaXp0b25hbFRyYWNrOworICAgIGNh
c2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrOiByZXR1cm4gV2Vi
VGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrOworICAgIGRlZmF1bHQ6IHJl
dHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhckRvd25BcnJvdzsKKyAgICB9Cit9CisK
K3N0YXRpYyBXZWJUaGVtZUVuZ2luZTo6U3RhdGUgV2ViVGhlbWVTdGF0ZShDaHJvbWl1bUJyaWRn
ZTo6U3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgQ2hyb21p
dW1CcmlkZ2U6OlN0YXRlRGlzYWJsZWQ6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVEaXNh
YmxlZDsKKyAgICBjYXNlIENocm9taXVtQnJpZGdlOjpTdGF0ZUhvdmVyOiByZXR1cm4gV2ViVGhl
bWVFbmdpbmU6OlN0YXRlSG92ZXI7CisgICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVOb3Jt
YWw6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVOb3JtYWw7CisgICAgY2FzZSBDaHJvbWl1
bUJyaWRnZTo6U3RhdGVQcmVzc2VkOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlUHJlc3Nl
ZDsKKyAgICBkZWZhdWx0OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlRGlzYWJsZWQ7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCBHZXRXZWJUaGVtZUV4dHJhUGFyYW1zKENocm9taXVtQnJp
ZGdlOjpQYXJ0IHBhcnQsIENocm9taXVtQnJpZGdlOjpTdGF0ZSBzdGF0ZSwgY29uc3QgQ2hyb21p
dW1CcmlkZ2U6OkV4dHJhUGFyYW1zKiBleHRyYVBhcmFtcywgV2ViVGhlbWVFbmdpbmU6OkV4dHJh
UGFyYW1zKiB3ZWJUaGVtZUV4dHJhUGFyYW1zKQoreworICAgIGlmIChwYXJ0ID09IENocm9taXVt
QnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9yaXp0b25hbFRyYWNrIHx8IHBhcnQgPT0gQ2hyb21pdW1C
cmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrKSB7CisgICAgICAgIHdlYlRoZW1lRXh0
cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrWCA9IGV4dHJhUGFyYW1zLT5zY3JvbGxiYXJU
cmFjay50cmFja1g7CisgICAgICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNr
LnRyYWNrWSA9IGV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1k7CisgICAgICAgIHdl
YlRoZW1lRXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrV2lkdGggPSBleHRyYVBhcmFt
cy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tXaWR0aDsKKyAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFt
cy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tIZWlnaHQgPSBleHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJh
Y2sudHJhY2tIZWlnaHQ7CisgICAgfQorfQorCitJbnRTaXplIENocm9taXVtQnJpZGdlOjpnZXRT
aXplKFBhcnQgcGFydCkKK3sKKyAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2lu
ZSgpLT5nZXRTaXplKFdlYlRoZW1lUGFydChwYXJ0KSk7Cit9CisKK3ZvaWQgQ2hyb21pdW1Ccmlk
Z2U6OnBhaW50KAorICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIFBhcnQgcGFydCwgU3RhdGUgc3Rh
dGUsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEV4dHJhUGFyYW1zKiBleHRyYVBhcmFtcykK
K3sKKyAgICBXZWJUaGVtZUVuZ2luZTo6RXh0cmFQYXJhbXMgd2ViVGhlbWVFeHRyYVBhcmFtczsK
KyAgICBHZXRXZWJUaGVtZUV4dHJhUGFyYW1zKHBhcnQsIHN0YXRlLCBleHRyYVBhcmFtcywgJndl
YlRoZW1lRXh0cmFQYXJhbXMpOworICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5w
YWludCgKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgV2ViVGhlbWVQ
YXJ0KHBhcnQpLCBXZWJUaGVtZVN0YXRlKHN0YXRlKSwgcmVjdCwgJndlYlRoZW1lRXh0cmFQYXJh
bXMpOworfQorCiAjZW5kaWYKIAogLy8gVHJhY2UgRXZlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70484</attachid>
            <date>2010-10-11 15:40:06 -0700</date>
            <delta_ts>2010-10-11 16:02:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47473-20101011154005.patch</filename>
            <type>text/plain</type>
            <size>21143</size>
            <attacher name="Dave Moore">davemoore</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTQ3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTAtMTAtMTAgIERhdmUgTW9vcmUgIDxkYXZlbW9vcmVAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFVzZSBuZXcgV2ViVGhlbWVFbmdpbmUgYXBpIG9uIGNocm9taXVtIC8gbGludXggdG8gZHJhdyBz
Y3JvbGxiYXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDc0NzMKKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmg6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4
LmNwcDoKKwogMjAxMC0xMC0xMCAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaAkocmV2aXNpb24gNjk1MjIpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
NCw2ICsyNTQsNDUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgR3JhcGhpY3ND
b250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50
UmVjdCYpOwogICAgICAgICBzdGF0aWMgdm9pZCBwYWludFByb2dyZXNzQmFyKAogICAgICAgICAg
ICAgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgYmFyUmVjdCwgY29uc3QgSW50UmVj
dCYgdmFsdWVSZWN0LCBib29sIGRldGVybWluYXRlLCBkb3VibGUgYW5pbWF0ZWRTZWNvbmRzKTsK
KyNlbGlmIE9TKExJTlVYKQorICAgICAgICAvLyBUaGUgVUkgcGFydCB3aGljaCBpcyBiZWluZyBh
Y2Nlc3NlZC4KKyAgICAgICAgZW51bSBUaGVtZVBhcnQgeworICAgICAgICAgICAgUGFydFNjcm9s
bGJhckRvd25BcnJvdywKKyAgICAgICAgICAgIFBhcnRTY3JvbGxiYXJMZWZ0QXJyb3csCisgICAg
ICAgICAgICBQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdywKKyAgICAgICAgICAgIFBhcnRTY3JvbGxi
YXJVcEFycm93LAorICAgICAgICAgICAgUGFydFNjcm9sbGJhckhvcml6b250YWxUaHVtYiwKKyAg
ICAgICAgICAgIFBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRodW1iLAorICAgICAgICAgICAgUGFydFNj
cm9sbGJhckhvcml6dG9uYWxUcmFjaywKKyAgICAgICAgICAgIFBhcnRTY3JvbGxiYXJWZXJ0aWNh
bFRyYWNrLAorICAgICAgICB9OworCisgICAgICAgIC8vIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRo
ZSBhc3NvY2lhdGVkIFBhcnQuCisgICAgICAgIGVudW0gVGhlbWVQYWludFN0YXRlIHsKKyAgICAg
ICAgICAgIFN0YXRlRGlzYWJsZWQsCisgICAgICAgICAgICBTdGF0ZUhvdmVyLAorICAgICAgICAg
ICAgU3RhdGVOb3JtYWwsCisgICAgICAgICAgICBTdGF0ZVByZXNzZWQsCisgICAgICAgIH07CisK
KyAgICAgICAgc3RydWN0IFNjcm9sbGJhclRyYWNrRXh0cmFQYXJhbXMgeworICAgICAgICAgICAg
Ly8gVGhlIGJvdW5kcyBvZiB0aGUgZW50aXJlIHRyYWNrLCBhcyBvcHBvc2VkIHRvIHRoZSBwYXJ0
IGJlaW5nIHBhaW50ZWQuCisgICAgICAgICAgICBpbnQgdHJhY2tYOworICAgICAgICAgICAgaW50
IHRyYWNrWTsKKyAgICAgICAgICAgIGludCB0cmFja1dpZHRoOworICAgICAgICAgICAgaW50IHRy
YWNrSGVpZ2h0OworICAgICAgICB9OworCisgICAgICAgIHVuaW9uIFRoZW1lUGFpbnRFeHRyYVBh
cmFtcyB7CisgICAgICAgICAgICBTY3JvbGxiYXJUcmFja0V4dHJhUGFyYW1zIHNjcm9sbGJhclRy
YWNrOworICAgICAgICB9OworCisgICAgICAgIC8vIEdldHMgdGhlIHNpemUgb2YgdGhlIGdpdmVu
IHRoZW1lIHBhcnQuIEZvciB2YXJpYWJsZSBzaXplZCBpdGVtcworICAgICAgICAvLyBsaWtlIHZl
cnRpY2FsIHNjcm9sbGJhciB0aHVtYnMsIHRoZSB3aWR0aCB3aWxsIGJlIHRoZSByZXF1aXJlZCB3
aWR0aCBvZgorICAgICAgICAvLyB0aGUgdHJhY2sgd2hpbGUgdGhlIGhlaWdodCB3aWxsIGJlIHRo
ZSBtaW5pbXVtIGhlaWdodC4KKyAgICAgICAgc3RhdGljIEludFNpemUgZ2V0VGhlbWVQYXJ0U2l6
ZShUaGVtZVBhcnQpOworICAgICAgICAvLyBQYWludCB0aGUgZ2l2ZW4gdGhlIGdpdmVuIHRoZW1l
IHBhcnQuCisgICAgICAgIHN0YXRpYyB2b2lkIHBhaW50VGhlbWVQYXJ0KEdyYXBoaWNzQ29udGV4
dCosIFRoZW1lUGFydCwgVGhlbWVQYWludFN0YXRlLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgVGhl
bWVQYWludEV4dHJhUGFyYW1zKik7CiAjZW5kaWYKIAogICAgICAgICAvLyBUcmFjZSBFdmVudCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTGlu
dXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bUxpbnV4LmNwcAkocmV2aXNpb24gNjk1MjIpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDE3ICszMSwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNj
cm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5oIgogCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
U2tpYS5oIgorI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1N
b3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsYmFyLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgaW50IHNjcm9sbGJhclRoaWNrbmVz
c1ZhbHVlID0gMTU7Ci1zdGF0aWMgY29uc3QgaW50IGJ1dHRvbkxlbmd0aCA9IDE0OwotCiBTY3Jv
bGxiYXJUaGVtZSogU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKIHsKICAgICBzdGF0aWMg
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4IHRoZW1lOwpAQCAtNTAsMTM2ICs0NSw3OSBAQCBT
Y3JvbGxiYXJUaGVtZSogU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoCiAKIGludCBTY3JvbGxiYXJU
aGVtZUNocm9taXVtTGludXg6OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6
ZSBjb250cm9sU2l6ZSkKIHsKLSAgICByZXR1cm4gc2Nyb2xsYmFyVGhpY2tuZXNzVmFsdWU7Ci19
Ci0KLXN0YXRpYyB2b2lkIGRyYXdWZXJ0TGluZShTa0NhbnZhcyogY2FudmFzLCBpbnQgeCwgaW50
IHkxLCBpbnQgeTIsIGNvbnN0IFNrUGFpbnQmIHBhaW50KQotewotICAgIFNrSVJlY3Qgc2tyZWN0
OwotICAgIHNrcmVjdC5zZXQoeCwgeTEsIHggKyAxLCB5MiArIDEpOwotICAgIGNhbnZhcy0+ZHJh
d0lSZWN0KHNrcmVjdCwgcGFpbnQpOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3SG9yaXpMaW5lKFNr
Q2FudmFzKiBjYW52YXMsIGludCB4MSwgaW50IHgyLCBpbnQgeSwgY29uc3QgU2tQYWludCYgcGFp
bnQpCi17Ci0gICAgU2tJUmVjdCBza3JlY3Q7Ci0gICAgc2tyZWN0LnNldCh4MSwgeSwgeDIgKyAx
LCB5ICsgMSk7Ci0gICAgY2FudmFzLT5kcmF3SVJlY3Qoc2tyZWN0LCBwYWludCk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGRyYXdCb3goU2tDYW52YXMqIGNhbnZhcywgY29uc3QgSW50UmVjdCYgcmVjdCwg
Y29uc3QgU2tQYWludCYgcGFpbnQpCi17Ci0gICAgY29uc3QgaW50IHJpZ2h0ID0gcmVjdC54KCkg
KyByZWN0LndpZHRoKCkgLSAxOwotICAgIGNvbnN0IGludCBib3R0b20gPSByZWN0LnkoKSArIHJl
Y3QuaGVpZ2h0KCkgLSAxOwotICAgIGRyYXdIb3JpekxpbmUoY2FudmFzLCByZWN0LngoKSwgcmln
aHQsIHJlY3QueSgpLCBwYWludCk7Ci0gICAgZHJhd1ZlcnRMaW5lKGNhbnZhcywgcmlnaHQsIHJl
Y3QueSgpLCBib3R0b20sIHBhaW50KTsKLSAgICBkcmF3SG9yaXpMaW5lKGNhbnZhcywgcmVjdC54
KCksIHJpZ2h0LCBib3R0b20sIHBhaW50KTsKLSAgICBkcmF3VmVydExpbmUoY2FudmFzLCByZWN0
LngoKSwgcmVjdC55KCksIGJvdHRvbSwgcGFpbnQpOworICAgIC8vIEhvcml6IGFuZCBWZXJ0IHNj
cm9sbGJhcnMgYXJlIHRoZSBzYW1lIHRoaWNrbmVzcy4KKyAgICBJbnRTaXplIHNjcm9sbGJhclNp
emUgPSBDaHJvbWl1bUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShDaHJvbWl1bUJyaWRnZTo6UGFy
dFNjcm9sbGJhclZlcnRpY2FsVHJhY2spOworICAgIHJldHVybiBzY3JvbGxiYXJTaXplLndpZHRo
KCk7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFRyYWNrUGll
Y2UoR3JhcGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJl
Y3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFydFR5cGUpCiB7Ci0gICAgU2tDYW52YXMqIGNvbnN0
IGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Ci0gICAgU2tQYWludCBw
YWludDsKLSAgICBTa0lSZWN0IHNrcmVjdDsKLQotICAgIHNrcmVjdC5zZXQocmVjdC54KCksIHJl
Y3QueSgpLCByZWN0LngoKSArIHJlY3Qud2lkdGgoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgp
KTsKLSAgICBTa1NjYWxhciB0cmFja0hTVlszXTsKLSAgICBTa0NvbG9yVG9IU1YoUGxhdGZvcm1U
aGVtZUNocm9taXVtR3RrOjp0cmFja0NvbG9yKCksIHRyYWNrSFNWKTsKLSAgICBwYWludC5zZXRD
b2xvcihQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6OnNhdHVyYXRlQW5kQnJpZ2h0ZW4odHJhY2tI
U1YsIDAsIDApKTsKLSAgICBjYW52YXMtPmRyYXdJUmVjdChza3JlY3QsIHBhaW50KTsKLQotICAg
IFNrU2NhbGFyIHRodW1iSFNWWzNdOwotICAgIFNrQ29sb3JUb0hTVihQbGF0Zm9ybVRoZW1lQ2hy
b21pdW1HdGs6OnRodW1iSW5hY3RpdmVDb2xvcigpLAotICAgICAgICAgICAgICAgICB0aHVtYkhT
Vik7Ci0KLSAgICBwYWludC5zZXRDb2xvcihQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6Om91dGxp
bmVDb2xvcih0cmFja0hTViwgdGh1bWJIU1YpKTsKLSAgICBkcmF3Qm94KGNhbnZhcywgcmVjdCwg
cGFpbnQpOworICAgIENocm9taXVtQnJpZGdlOjpUaGVtZVBhaW50U3RhdGUgc3RhdGUgPSBzY3Jv
bGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gcGFydFR5cGUgPyBDaHJvbWl1bUJyaWRnZTo6U3RhdGVI
b3ZlciA6IENocm9taXVtQnJpZGdlOjpTdGF0ZU5vcm1hbDsKKyAgICBJbnRSZWN0IGFsaWduUmVj
dCA9IHRyYWNrUmVjdChzY3JvbGxiYXIsIGZhbHNlKTsKKyAgICBDaHJvbWl1bUJyaWRnZTo6VGhl
bWVQYWludEV4dHJhUGFyYW1zIGV4dHJhUGFyYW1zOworICAgIGV4dHJhUGFyYW1zLnNjcm9sbGJh
clRyYWNrLnRyYWNrWCA9IGFsaWduUmVjdC54KCk7CisgICAgZXh0cmFQYXJhbXMuc2Nyb2xsYmFy
VHJhY2sudHJhY2tZID0gYWxpZ25SZWN0LnkoKTsKKyAgICBleHRyYVBhcmFtcy5zY3JvbGxiYXJU
cmFjay50cmFja1dpZHRoID0gYWxpZ25SZWN0LndpZHRoKCk7CisgICAgZXh0cmFQYXJhbXMuc2Ny
b2xsYmFyVHJhY2sudHJhY2tIZWlnaHQgPSBhbGlnblJlY3QuaGVpZ2h0KCk7CisgICAgQ2hyb21p
dW1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0KAorICAgICAgICBnYywKKyAgICAgICAgc2Nyb2xsYmFy
LT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBDaHJvbWl1bUJyaWRnZTo6
UGFydFNjcm9sbGJhckhvcml6dG9uYWxUcmFjayA6IENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xs
YmFyVmVydGljYWxUcmFjaywKKyAgICAgICAgc3RhdGUsCisgICAgICAgIHJlY3QsCisgICAgICAg
ICZleHRyYVBhcmFtcyk7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4Ojpw
YWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29u
c3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQogewotICAgIFBsYXRmb3JtVGhl
bWVDaHJvbWl1bUd0azo6QXJyb3dEaXJlY3Rpb24gZGlyZWN0aW9uOworICAgIENocm9taXVtQnJp
ZGdlOjpUaGVtZVBhcnQgcGFpbnRQYXJ0OworICAgIENocm9taXVtQnJpZGdlOjpUaGVtZVBhaW50
U3RhdGUgc3RhdGUgPSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVOb3JtYWw7CisgICAgYm9vbCBjaGVj
a01pbiA9IGZhbHNlOworICAgIGJvb2wgY2hlY2tNYXggPSBmYWxzZTsKICAgICBpZiAoc2Nyb2xs
YmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgaWYg
KHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCkKLSAgICAgICAgICAgIGRpcmVjdGlvbiA9IFBs
YXRmb3JtVGhlbWVDaHJvbWl1bUd0azo6V2VzdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
ZGlyZWN0aW9uID0gUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjpFYXN0OworICAgICAgICBpZiAo
cGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0KSB7CisgICAgICAgICAgICBwYWludFBhcnQgPSBD
aHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckxlZnRBcnJvdzsKKyAgICAgICAgICAgIGNoZWNr
TWluID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhaW50UGFydCA9IENo
cm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdzsKKyAgICAgICAgICAgIGNoZWNr
TWF4ID0gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChwYXJ0ID09
IEJhY2tCdXR0b25TdGFydFBhcnQpCi0gICAgICAgICAgICBkaXJlY3Rpb24gPSBQbGF0Zm9ybVRo
ZW1lQ2hyb21pdW1HdGs6Ok5vcnRoOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkaXJlY3Rp
b24gPSBQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6OlNvdXRoOworICAgICAgICBpZiAocGFydCA9
PSBCYWNrQnV0dG9uU3RhcnRQYXJ0KSB7CisgICAgICAgICAgICBwYWludFBhcnQgPSBDaHJvbWl1
bUJyaWRnZTo6UGFydFNjcm9sbGJhclVwQXJyb3c7CisgICAgICAgICAgICBjaGVja01pbiA9IHRy
dWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYWludFBhcnQgPSBDaHJvbWl1bUJy
aWRnZTo6UGFydFNjcm9sbGJhckRvd25BcnJvdzsKKyAgICAgICAgICAgIGNoZWNrTWF4ID0gdHJ1
ZTsKKyAgICAgICAgfQogICAgIH0KLQotICAgIENvbnRyb2xTdGF0ZXMgc3RhdGVzID0gMDsKLSAg
ICAvLyBEZXRlcm1pbmUgaWYgdGhlIGJ1dHRvbiBjYW4gYmUgcHJlc3NlZC4KLSAgICBpZiAoKChk
aXJlY3Rpb24gPT0gUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjpXZXN0IHx8IGRpcmVjdGlvbiA9
PSBQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6Ok5vcnRoKSAmJiBzY3JvbGxiYXItPmN1cnJlbnRQ
b3MoKSkKLSAgICAgICAgfHwgKChkaXJlY3Rpb24gPT0gUGxhdGZvcm1UaGVtZUNocm9taXVtR3Rr
OjpFYXN0IHx8IGRpcmVjdGlvbiA9PSBQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6OlNvdXRoKSAm
JiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSAhPSBzY3JvbGxiYXItPm1heGltdW0oKSkpCi0gICAg
ICAgIHN0YXRlcyB8PSBFbmFibGVkU3RhdGU7Ci0KLSAgICBpZiAoc3RhdGVzICYgRW5hYmxlZFN0
YXRlKSB7CisgICAgaWYgKChjaGVja01pbiAmJiAoc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgPD0g
MCkpCisgICAgICAgIHx8IChjaGVja01heCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSA9PSBz
Y3JvbGxiYXItPm1heGltdW0oKSkpIHsKKyAgICAgICAgc3RhdGUgPSBDaHJvbWl1bUJyaWRnZTo6
U3RhdGVEaXNhYmxlZDsKKyAgICB9IGVsc2UgewogICAgICAgICBpZiAocGFydCA9PSBzY3JvbGxi
YXItPnByZXNzZWRQYXJ0KCkpCi0gICAgICAgICAgICBzdGF0ZXMgfD0gUHJlc3NlZFN0YXRlOwor
ICAgICAgICAgICAgc3RhdGUgPSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVQcmVzc2VkOwogICAgICAg
ICBlbHNlIGlmIChwYXJ0ID09IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSkKLSAgICAgICAgICAg
IHN0YXRlcyB8PSBIb3ZlclN0YXRlOworICAgICAgICAgICAgc3RhdGUgPSBDaHJvbWl1bUJyaWRn
ZTo6U3RhdGVIb3ZlcjsKICAgICB9Ci0KLSAgICBQbGF0Zm9ybVRoZW1lQ2hyb21pdW1HdGs6OnBh
aW50QXJyb3dCdXR0b24oZ2MsIHJlY3QsIGRpcmVjdGlvbiwgc3RhdGVzKTsKKyAgICBDaHJvbWl1
bUJyaWRnZTo6cGFpbnRUaGVtZVBhcnQoZ2MsIHBhaW50UGFydCwgc3RhdGUsIHJlY3QsIDApOwog
fQogCiB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUaHVtYihHcmFwaGlj
c0NvbnRleHQqIGdjLCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKLSAgICBjb25zdCBib29sIGhvdmVyZWQgPSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0g
VGh1bWJQYXJ0OwotICAgIGNvbnN0IGludCBtaWR4ID0gcmVjdC54KCkgKyByZWN0LndpZHRoKCkg
LyAyOwotICAgIGNvbnN0IGludCBtaWR5ID0gcmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC8gMjsK
LSAgICBjb25zdCBib29sIHZlcnRpY2FsID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZl
cnRpY2FsU2Nyb2xsYmFyOwotICAgIFNrQ2FudmFzKiBjb25zdCBjYW52YXMgPSBnYy0+cGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpOwotCi0gICAgU2tTY2FsYXIgdGh1bWJbM107Ci0gICAgU2tD
b2xvclRvSFNWKGhvdmVyZWQKLSAgICAgICAgICAgICAgICAgPyBQbGF0Zm9ybVRoZW1lQ2hyb21p
dW1HdGs6OnRodW1iQWN0aXZlQ29sb3IoKQotICAgICAgICAgICAgICAgICA6IFBsYXRmb3JtVGhl
bWVDaHJvbWl1bUd0azo6dGh1bWJJbmFjdGl2ZUNvbG9yKCksCi0gICAgICAgICAgICAgICAgIHRo
dW1iKTsKLQotICAgIFNrUGFpbnQgcGFpbnQ7Ci0gICAgcGFpbnQuc2V0Q29sb3IoUGxhdGZvcm1U
aGVtZUNocm9taXVtR3RrOjpzYXR1cmF0ZUFuZEJyaWdodGVuKHRodW1iLCAwLCAwLjAyKSk7Ci0K
LSAgICBTa0lSZWN0IHNrcmVjdDsKLSAgICBpZiAodmVydGljYWwpCi0gICAgICAgIHNrcmVjdC5z
ZXQocmVjdC54KCksIHJlY3QueSgpLCBtaWR4ICsgMSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgp
KTsKLSAgICBlbHNlCi0gICAgICAgIHNrcmVjdC5zZXQocmVjdC54KCksIHJlY3QueSgpLCByZWN0
LngoKSArIHJlY3Qud2lkdGgoKSwgbWlkeSArIDEpOwotCi0gICAgY2FudmFzLT5kcmF3SVJlY3Qo
c2tyZWN0LCBwYWludCk7CisgICAgQ2hyb21pdW1CcmlkZ2U6OlRoZW1lUGFpbnRTdGF0ZSBzdGF0
ZTsKIAotICAgIHBhaW50LnNldENvbG9yKFBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0azo6c2F0dXJh
dGVBbmRCcmlnaHRlbih0aHVtYiwgMCwgLTAuMDIpKTsKLQotICAgIGlmICh2ZXJ0aWNhbCkKLSAg
ICAgICAgc2tyZWN0LnNldChtaWR4ICsgMSwgcmVjdC55KCksIHJlY3QueCgpICsgcmVjdC53aWR0
aCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOworICAgIGlmIChzY3JvbGxiYXItPnByZXNz
ZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQorICAgICAgICBzdGF0ZSA9IENocm9taXVtQnJpZGdlOjpT
dGF0ZVByZXNzZWQ7CisgICAgZWxzZSBpZiAoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IFRo
dW1iUGFydCkKKyAgICAgICAgc3RhdGUgPSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVIb3ZlcjsKICAg
ICBlbHNlCi0gICAgICAgIHNrcmVjdC5zZXQocmVjdC54KCksIG1pZHkgKyAxLCByZWN0LngoKSAr
IHJlY3Qud2lkdGgoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKTsKLQotICAgIGNhbnZhcy0+
ZHJhd0lSZWN0KHNrcmVjdCwgcGFpbnQpOwotCi0gICAgU2tTY2FsYXIgdHJhY2tbM107Ci0gICAg
U2tDb2xvclRvSFNWKFBsYXRmb3JtVGhlbWVDaHJvbWl1bUd0azo6dHJhY2tDb2xvcigpLCB0cmFj
ayk7Ci0gICAgcGFpbnQuc2V0Q29sb3IoUGxhdGZvcm1UaGVtZUNocm9taXVtR3RrOjpvdXRsaW5l
Q29sb3IodHJhY2ssIHRodW1iKSk7Ci0gICAgZHJhd0JveChjYW52YXMsIHJlY3QsIHBhaW50KTsK
LQotICAgIGlmIChyZWN0LmhlaWdodCgpID4gMTAgJiYgcmVjdC53aWR0aCgpID4gMTApIHsKLSAg
ICAgICAgY29uc3QgaW50IGdyaXBweUhhbGZXaWR0aCA9IDI7Ci0gICAgICAgIGNvbnN0IGludCBp
bnRlckdyaXBweU9mZnNldCA9IDM7Ci0gICAgICAgIGlmICh2ZXJ0aWNhbCkgewotICAgICAgICAg
ICAgZHJhd0hvcml6TGluZShjYW52YXMsIG1pZHggLSBncmlwcHlIYWxmV2lkdGgsIG1pZHggKyBn
cmlwcHlIYWxmV2lkdGgsIG1pZHkgLSBpbnRlckdyaXBweU9mZnNldCwgcGFpbnQpOwotICAgICAg
ICAgICAgZHJhd0hvcml6TGluZShjYW52YXMsIG1pZHggLSBncmlwcHlIYWxmV2lkdGgsIG1pZHgg
KyBncmlwcHlIYWxmV2lkdGgsIG1pZHksICAgICAgICAgICAgICAgICAgICAgcGFpbnQpOwotICAg
ICAgICAgICAgZHJhd0hvcml6TGluZShjYW52YXMsIG1pZHggLSBncmlwcHlIYWxmV2lkdGgsIG1p
ZHggKyBncmlwcHlIYWxmV2lkdGgsIG1pZHkgKyBpbnRlckdyaXBweU9mZnNldCwgcGFpbnQpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZHJhd1ZlcnRMaW5lKGNhbnZhcywgbWlkeCAt
IGludGVyR3JpcHB5T2Zmc2V0LCBtaWR5IC0gZ3JpcHB5SGFsZldpZHRoLCBtaWR5ICsgZ3JpcHB5
SGFsZldpZHRoLCBwYWludCk7Ci0gICAgICAgICAgICBkcmF3VmVydExpbmUoY2FudmFzLCBtaWR4
LCAgICAgICAgICAgICAgICAgICAgIG1pZHkgLSBncmlwcHlIYWxmV2lkdGgsIG1pZHkgKyBncmlw
cHlIYWxmV2lkdGgsIHBhaW50KTsKLSAgICAgICAgICAgIGRyYXdWZXJ0TGluZShjYW52YXMsIG1p
ZHggKyBpbnRlckdyaXBweU9mZnNldCwgbWlkeSAtIGdyaXBweUhhbGZXaWR0aCwgbWlkeSArIGdy
aXBweUhhbGZXaWR0aCwgcGFpbnQpOwotICAgICAgICB9Ci0gICAgfQorICAgICAgICBzdGF0ZSA9
IENocm9taXVtQnJpZGdlOjpTdGF0ZU5vcm1hbDsKKyAgICBDaHJvbWl1bUJyaWRnZTo6cGFpbnRU
aGVtZVBhcnQoCisgICAgICAgIGdjLAorICAgICAgICBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkg
PT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9y
aXpvbnRhbFRodW1iIDogQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRodW1i
LAorICAgICAgICBzdGF0ZSwKKyAgICAgICAgcmVjdCwKKyAgICAgICAgMCk7CiB9CiAKIGJvb2wg
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJh
ciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQpAQCAtMTg5LDE3ICsxMjcsMjUgQEAg
Ym9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OnNob3VsZAogCiBJbnRTaXplIFNjcm9s
bGJhclRoZW1lQ2hyb21pdW1MaW51eDo6YnV0dG9uU2l6ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikK
IHsKLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFy
KQotICAgICAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxiYXJUaGlja25lc3NWYWx1ZSwgc2Nyb2xs
YmFyLT5oZWlnaHQoKSA8IDIgKiBidXR0b25MZW5ndGggPyBzY3JvbGxiYXItPmhlaWdodCgpIC8g
MiA6IGJ1dHRvbkxlbmd0aCk7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBJbnRTaXplIHNpemUgPSBDaHJvbWl1bUJyaWRn
ZTo6Z2V0VGhlbWVQYXJ0U2l6ZShDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclVwQXJyb3cp
OworICAgICAgICByZXR1cm4gSW50U2l6ZShzaXplLndpZHRoKCksIHNjcm9sbGJhci0+aGVpZ2h0
KCkgPCAyICogc2l6ZS5oZWlnaHQoKSA/IHNjcm9sbGJhci0+aGVpZ2h0KCkgLyAyIDogc2l6ZS5o
ZWlnaHQoKSk7CisgICAgfQogCiAgICAgLy8gSG9yaXpvbnRhbFNjcm9sbGJhcgotICAgIHJldHVy
biBJbnRTaXplKHNjcm9sbGJhci0+d2lkdGgoKSA8IDIgKiBidXR0b25MZW5ndGggPyBzY3JvbGxi
YXItPndpZHRoKCkgLyAyIDogYnV0dG9uTGVuZ3RoLCBzY3JvbGxiYXJUaGlja25lc3NWYWx1ZSk7
CisgICAgSW50U2l6ZSBzaXplID0gQ2hyb21pdW1CcmlkZ2U6OmdldFRoZW1lUGFydFNpemUoQ2hy
b21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJMZWZ0QXJyb3cpOworICAgIHJldHVybiBJbnRTaXpl
KHNjcm9sbGJhci0+d2lkdGgoKSA8IDIgKiBzaXplLndpZHRoKCkgPyBzY3JvbGxiYXItPndpZHRo
KCkgLyAyIDogc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKIH0KIAogaW50IFNjcm9sbGJh
clRoZW1lQ2hyb21pdW1MaW51eDo6bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJhciogc2Nyb2xs
YmFyKQogewotICAgIC8vIFRoaXMgbWF0Y2hlcyBGaXJlZm94IG9uIExpbnV4LgotICAgIHJldHVy
biAyICogc2Nyb2xsYmFyVGhpY2tuZXNzKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7CisgICAg
aWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgeworICAg
ICAgICBJbnRTaXplIHNpemUgPSBDaHJvbWl1bUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShDaHJv
bWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWIpOworICAgICAgICByZXR1cm4g
c2l6ZS5oZWlnaHQoKTsKKyAgICB9CisKKyAgICBJbnRTaXplIHNpemUgPSBDaHJvbWl1bUJyaWRn
ZTo6Z2V0VGhlbWVQYXJ0U2l6ZShDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250
YWxUaHVtYik7CisgICAgcmV0dXJuIHNpemUud2lkdGgoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2OTUyMikKKysrIFdlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0xMC0x
MCAgRGF2ZSBNb29yZSAgPGRhdmVtb29yZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIG5ldyBXZWJUaGVtZUVuZ2luZSBh
cGkgb24gY2hyb21pdW0gLyBsaW51eCB0byBkcmF3IHNjcm9sbGJhcnMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzQ3MworCisgICAgICAgICogcHVi
bGljL1dlYlRoZW1lRW5naW5lLmg6IFJlbW92ZWQuCisgICAgICAgICogY2hyb21pdW0vc3JjL0No
cm9taXVtQnJpZGdlLmNwcDoKKwogMjAxMC0xMC0xMSAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0Bn
b29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpJbmRleDogV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJUaGVtZUVuZ2luZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViVGhlbWVFbmdpbmUuaAkocmV2aXNpb24gNjk1MjIpCisrKyBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlRoZW1lRW5naW5lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsOTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICog
bWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgV2ViVGhlbWVFbmdpbmVfaAotI2RlZmluZSBXZWJUaGVtZUVu
Z2luZV9oCi0KLSNpbmNsdWRlICJXZWJDYW52YXMuaCIKLSNpbmNsdWRlICJXZWJDb2xvci5oIgot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RydWN0IFdlYlJlY3Q7Ci1zdHJ1Y3QgV2ViU2l6ZTsK
LQotLy8gRklYTUU6IFRoaXMgZmlsZSBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgd2luIHN1YmRpcmVj
dG9yeSBhcyBpdCdzIGVudGlyZWx5Ci0vLyB3aW5kb3dzIGRlcGVuZGVudC4gT25jZSBjaHJvbWl1
bSBoYXMgYmVlbiB1cGRhdGVkIHRvIGFjY2VzcyB0aGUgZmlsZSBmcm9tCi0vLyB0aGVyZSB0aGlz
IGZpbGUgc2hvdWxkIGJlIGRlbGV0ZWQuCi1jbGFzcyBXZWJUaGVtZUVuZ2luZSB7Ci1wdWJsaWM6
Ci0jaWZkZWYgV0lOMzIKLS8vIFRoZSBwYXJ0IGFuZCBzdGF0ZSBwYXJhbWV0ZXJzIGNvcnJlc3Bv
bmQgdG8gdmFsdWVzIGRlZmluZWQgYnkgdGhlCi0vLyBXaW5kb3dzIFRoZW1lIEFQSSAoc2VlCi0v
LyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvYmI3NzMxODcoVlMuODUp
LmFzcHggKS4KLS8vIFRoZSBjbGFzc2ljU3RhdGUgcGFyYW1ldGVyIGNvcnJlc3BvbmRzIHRvIHRo
ZSB1U3RhdGUKLS8vIHBhcmFtZXRlciBvZiB0aGUgV2luZG93cyBEcmF3RnJhbWVDb250cm9sKCkg
ZnVuY3Rpb24uCi0vLyBTZWUgdGhlIGRlZmluaXRpb25zIGluIDx2c3N0eWxlLmg+IGFuZCA8d2lu
dXNlci5oPi4KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCdXR0b24oCi0gICAgICAgIFdlYkNhbnZh
cyosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCi0gICAgICAgIGNvbnN0
IFdlYlJlY3QmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRNZW51TGlzdCgKLSAgICAg
ICAgV2ViQ2FudmFzKiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAg
ICAgICAgY29uc3QgV2ViUmVjdCYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBwYWludFNjcm9s
bGJhckFycm93KAotICAgICAgICBXZWJDYW52YXMqLCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3Rh
dGUsCi0gICAgICAgIGNvbnN0IFdlYlJlY3QmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRTY3JvbGxiYXJUaHVtYigKLSAgICAgICAgV2ViQ2FudmFzKiwgaW50IHBhcnQsIGludCBzdGF0
ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICAgICAgY29uc3QgV2ViUmVjdCYpID0gMDsKLQotICAg
IHZpcnR1YWwgdm9pZCBwYWludFNjcm9sbGJhclRyYWNrKAotICAgICAgICBXZWJDYW52YXMqLCBp
bnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAotICAgICAgICBjb25zdCBXZWJS
ZWN0JiwgY29uc3QgV2ViUmVjdCYgYWxpZ25SZWN0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRTcGluQnV0dG9uKAotICAgICAgICBXZWJDYW52YXMqLCBpbnQgcGFydCwgaW50IHN0YXRl
LCBpbnQgY2xhc3NpY1N0YXRlLAotICAgICAgICBjb25zdCBXZWJSZWN0Jikge30KLQotICAgIHZp
cnR1YWwgdm9pZCBwYWludFRleHRGaWVsZCgKLSAgICAgICAgV2ViQ2FudmFzKiwgaW50IHBhcnQs
IGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICAgICAgY29uc3QgV2ViUmVjdCYsIFdl
YkNvbG9yLCBib29sIGZpbGxDb250ZW50QXJlYSwgYm9vbCBkcmF3RWRnZXMpID0gMDsKLQotICAg
IHZpcnR1YWwgdm9pZCBwYWludFRyYWNrYmFyKAotICAgICAgICBXZWJDYW52YXMqLCBpbnQgcGFy
dCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAotICAgICAgICBjb25zdCBXZWJSZWN0Jikg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoCi0gICAgICAgIFdlYkNh
bnZhcyosIGNvbnN0IFdlYlJlY3QmIGJhclJlY3QsIGNvbnN0IFdlYlJlY3QmIHZhbHVlUmVjdCwK
LSAgICAgICAgYm9vbCBkZXRlcm1pbmF0ZSwgZG91YmxlIGFuaW1hdGVkU2Vjb25kcykge30KLQot
I2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAkocmV2aXNpb24gNjk1MjIpCisrKyBXZWJL
aXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcs
NiArNjcsNyBAQAogI2VuZGlmCiAKICNpZiBPUyhMSU5VWCkgfHwgT1MoRlJFRUJTRCkKKyNpbmNs
dWRlICJsaW51eC9XZWJUaGVtZUVuZ2luZS5oIgogI2luY2x1ZGUgIldlYkZvbnRJbmZvLmgiCiAj
aW5jbHVkZSAiV2ViRm9udFJlbmRlclN0eWxlLmgiCiAjZW5kaWYKQEAgLTczOSw2ICs3NDAsNjAg
QEAgdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRQcm9ncmVzc0JhcigKICAgICAgICAgZ2MtPnBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgYmFyUmVjdCwgdmFsdWVSZWN0LCBkZXRlcm1pbmF0
ZSwgYW5pbWF0ZWRTZWNvbmRzKTsKIH0KIAorI2VsaWYgT1MoTElOVVgpCisKK3N0YXRpYyBXZWJU
aGVtZUVuZ2luZTo6UGFydCBXZWJUaGVtZVBhcnQoQ2hyb21pdW1CcmlkZ2U6OlRoZW1lUGFydCBw
YXJ0KQoreworICAgIHN3aXRjaCAocGFydCkgeworICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBh
cnRTY3JvbGxiYXJEb3duQXJyb3c6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJh
ckRvd25BcnJvdzsKKyAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyTGVmdEFy
cm93OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJMZWZ0QXJyb3c7CisgICAg
Y2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclJpZ2h0QXJyb3c6IHJldHVybiBXZWJU
aGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhclJpZ2h0QXJyb3c7CisgICAgY2FzZSBDaHJvbWl1bUJy
aWRnZTo6UGFydFNjcm9sbGJhclVwQXJyb3c6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNj
cm9sbGJhclVwQXJyb3c7CisgICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckhv
cml6b250YWxUaHVtYjogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFySG9yaXpv
bnRhbFRodW1iOworICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNh
bFRodW1iOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRodW1i
OworICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJIb3JpenRvbmFsVHJhY2s6
IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhckhvcml6dG9uYWxUcmFjazsKKyAg
ICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUcmFjazogcmV0dXJu
IFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUcmFjazsKKyAgICB9CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Ny
b2xsYmFyRG93bkFycm93OworfQorCitzdGF0aWMgV2ViVGhlbWVFbmdpbmU6OlN0YXRlIFdlYlRo
ZW1lU3RhdGUoQ2hyb21pdW1CcmlkZ2U6OlRoZW1lUGFpbnRTdGF0ZSBzdGF0ZSkKK3sKKyAgICBz
d2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVEaXNhYmxlZDog
cmV0dXJuIFdlYlRoZW1lRW5naW5lOjpTdGF0ZURpc2FibGVkOworICAgIGNhc2UgQ2hyb21pdW1C
cmlkZ2U6OlN0YXRlSG92ZXI6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVIb3ZlcjsKKyAg
ICBjYXNlIENocm9taXVtQnJpZGdlOjpTdGF0ZU5vcm1hbDogcmV0dXJuIFdlYlRoZW1lRW5naW5l
OjpTdGF0ZU5vcm1hbDsKKyAgICBjYXNlIENocm9taXVtQnJpZGdlOjpTdGF0ZVByZXNzZWQ6IHJl
dHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVQcmVzc2VkOworICAgIH0KKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlRGlzYWJsZWQ7Cit9
CisKK3N0YXRpYyB2b2lkIEdldFdlYlRoZW1lRXh0cmFQYXJhbXMoQ2hyb21pdW1CcmlkZ2U6OlRo
ZW1lUGFydCBwYXJ0LCBDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHN0YXRlLCBjb25z
dCBDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludEV4dHJhUGFyYW1zKiBleHRyYVBhcmFtcywgV2Vi
VGhlbWVFbmdpbmU6OkV4dHJhUGFyYW1zKiB3ZWJUaGVtZUV4dHJhUGFyYW1zKQoreworICAgIGlm
IChwYXJ0ID09IENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9yaXp0b25hbFRyYWNrIHx8
IHBhcnQgPT0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrKSB7Cisg
ICAgICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrWCA9IGV4dHJh
UGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1g7CisgICAgICAgIHdlYlRoZW1lRXh0cmFQYXJh
bXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrWSA9IGV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50
cmFja1k7CisgICAgICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNr
V2lkdGggPSBleHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tXaWR0aDsKKyAgICAgICAg
d2ViVGhlbWVFeHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tIZWlnaHQgPSBleHRyYVBh
cmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tIZWlnaHQ7CisgICAgfQorfQorCitJbnRTaXplIENo
cm9taXVtQnJpZGdlOjpnZXRUaGVtZVBhcnRTaXplKFRoZW1lUGFydCBwYXJ0KQoreworICAgICBy
ZXR1cm4gd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPmdldFNpemUoV2ViVGhlbWVQYXJ0
KHBhcnQpKTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRUaGVtZVBhcnQoCisgICAg
R3JhcGhpY3NDb250ZXh0KiBnYywgVGhlbWVQYXJ0IHBhcnQsIFRoZW1lUGFpbnRTdGF0ZSBzdGF0
ZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgVGhlbWVQYWludEV4dHJhUGFyYW1zKiBleHRy
YVBhcmFtcykKK3sKKyAgICBXZWJUaGVtZUVuZ2luZTo6RXh0cmFQYXJhbXMgd2ViVGhlbWVFeHRy
YVBhcmFtczsKKyAgICBHZXRXZWJUaGVtZUV4dHJhUGFyYW1zKHBhcnQsIHN0YXRlLCBleHRyYVBh
cmFtcywgJndlYlRoZW1lRXh0cmFQYXJhbXMpOworICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVu
Z2luZSgpLT5wYWludCgKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwg
V2ViVGhlbWVQYXJ0KHBhcnQpLCBXZWJUaGVtZVN0YXRlKHN0YXRlKSwgcmVjdCwgJndlYlRoZW1l
RXh0cmFQYXJhbXMpOworfQorCiAjZW5kaWYKIAogLy8gVHJhY2UgRXZlbnQgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo=
</data>
<flag name="review"
          id="60341"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>