<?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>29987</bug_id>
          
          <creation_ts>2009-10-01 15:26:51 -0700</creation_ts>
          <short_desc>Refactor RenderThemeChromiumMac and RenderThemeChromiumSkia to render media controls using GraphicsContext.</short_desc>
          <delta_ts>2009-10-07 13:25:11 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</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>0</everconfirmed>
          <reporter name="Andrew Scherkus">scherkus</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>151717</commentid>
    <comment_count>0</comment_count>
    <who name="Andrew Scherkus">scherkus</who>
    <bug_when>2009-10-01 15:26:51 -0700</bug_when>
    <thetext>We were using a mix of GraphicsContext, CG and Skia canvas code depending on the port.  No more!!

This follows the pattern for RenderThemeSafari and RenderThemeWin where a common class RenderMediaControls is used to handle drawing the media controls.  For Chromium I created RenderMediaControlsChromium.

No need for additional layout tests as this is pure refactor/cosmetic change and does not address bugs or add new functionality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151730</commentid>
    <comment_count>1</comment_count>
      <attachid>40483</attachid>
    <who name="Andrew Scherkus">scherkus</who>
    <bug_when>2009-10-01 16:05:45 -0700</bug_when>
    <thetext>Created attachment 40483
Round 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151953</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-02 12:51:17 -0700</bug_when>
    <thetext>The WebKit video folks should be cc&apos;d.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151954</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-02 12:52:06 -0700</bug_when>
    <thetext>Oh, I read that as RenderThemeMac initially.  Now I see that this is chromium only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151956</commentid>
    <comment_count>4</comment_count>
    <who name="Andrew Scherkus">scherkus</who>
    <bug_when>2009-10-02 12:54:57 -0700</bug_when>
    <thetext>It&apos;s still ok to get video input :)

I&apos;m hoping that one day we can get rid of the special paintMediaFoo() methods in RenderTheme and switch to paintMedia(ControlPart part) instead (you&apos;ll notice in RenderTheme::paint() we do the case handling bit to pass off to methods)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151957</commentid>
    <comment_count>5</comment_count>
      <attachid>40483</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-02 13:01:10 -0700</bug_when>
    <thetext>Comment on attachment 40483
Round 1

Looks like you&apos;re just moving code.

Style:
 39     static bool shouldRenderMediaControlPart(ControlPart part, Element* e);

I&apos;m not sure I understand this change:
 141         &amp;&amp; (!style-&gt;hasAppearance() || document()-&gt;page()-&gt;theme()-&gt;shouldRenderMediaControlPart(style-&gt;appearance(), m_mediaElement));

I guess that allows all shouldRenderMediaControlPart implementations to ASSERT(appearance)?

Seems we could pretty easily consolidate this now, no?
// FIXME: this is copied from RenderMediaControls.cpp, try to consolidate.
 63 static HTMLMediaElement* parentMediaElement(RenderObject* o)

Seems we should just use a HashMap for all these now that we have so many:
79     static Image* soundFull = Image::loadPlatformResource(&quot;mediaSoundFull&quot;).releaseRef();
 80     static Image* soundNone = Image::loadPlatformResource(&quot;mediaSoundNone&quot;).releaseRef();
 81     static Image* soundDisabled = Image::loadPlatformResource(&quot;mediaSoundDisabled&quot;).releaseRef();

platformResource(&quot;name&quot;)

which looks it up and sticks it in the hash if it doesn&apos;t already exists.  I could ASSERT_NOT_REACHED that the loadPlatformResource ever fails.

Not required part of this change, but something to think about for the future.

Bug number?
 115     // FIXME: this should be a rounded rect but need to fix GraphicsContextSkia first.

We generally avoid default: for enums:
35         return true;
 236     default:
 237         return false;
Otherwise the compiler can&apos;t help us make sure we haven&apos;t missed a case.  Maybe ControlPart has a bunch more types than we&apos;re seeing here, in which case default: would maek sense.

Seems we should unify all the ASSERT_NOT_REACHED cases:
253     case MediaSeekBackButton:
 254         ASSERT_NOT_REACHED();
 255         break;
 256     case MediaSeekForwardButton:
 257         ASSERT_NOT_REACHED();
 258         break;

Seems this needs one more round.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152897</commentid>
    <comment_count>6</comment_count>
      <attachid>40750</attachid>
    <who name="Andrew Scherkus">scherkus</who>
    <bug_when>2009-10-06 16:59:24 -0700</bug_when>
    <thetext>Created attachment 40750
Round 2

no appearance means it will pass in NoControlPart enum, which doesn&apos;t help the callee figure out which part it is and they can&apos;t make a good decision whether they should render it or not</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152899</commentid>
    <comment_count>7</comment_count>
      <attachid>40750</attachid>
    <who name="Andrew Scherkus">scherkus</who>
    <bug_when>2009-10-06 17:14:24 -0700</bug_when>
    <thetext>Comment on attachment 40750
Round 2

gah forgot to prepare an updated change log</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152902</commentid>
    <comment_count>8</comment_count>
      <attachid>40752</attachid>
    <who name="Andrew Scherkus">scherkus</who>
    <bug_when>2009-10-06 17:27:54 -0700</bug_when>
    <thetext>Created attachment 40752
Round 2 + ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152903</commentid>
    <comment_count>9</comment_count>
    <who name="Andrew Scherkus">scherkus</who>
    <bug_when>2009-10-06 17:30:45 -0700</bug_when>
    <thetext>MediaControlElements seemed like the most logical place to put parentMediaElement (both RenderMediaControls and RenderMediaControlsChromium use that file), but I made the function a global -- if that&apos;s not cool just let me know.

RenderMedia didn&apos;t feel like as good as a fit since we&apos;re dealing with RenderOjects.  HTMLMediaElement might work.. thoughts appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153045</commentid>
    <comment_count>10</comment_count>
      <attachid>40752</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2009-10-07 08:18:48 -0700</bug_when>
    <thetext>Comment on attachment 40752
Round 2 + ChangeLog


&gt; +HTMLMediaElement* parentMediaElement(RenderObject* o)
&gt; +{
&gt; +    Node* node = o-&gt;node();
&gt; +    Node* mediaNode = node ? node-&gt;shadowAncestorNode() : 0;
&gt; +    if (!mediaNode || (!mediaNode-&gt;hasTagName(HTMLNames::videoTag) &amp;&amp; !mediaNode-&gt;hasTagName(HTMLNames::audioTag)))
&gt; +        return 0;
&gt; +
&gt; +    return static_cast&lt;HTMLMediaElement*&gt;(mediaNode);

I suggest naming this &quot;toParentMediaElement&quot; to match the pattern used elsewhere in WebCore (toInputElement, toRenderXXXX, etc). This file seems like the right place for the function.


&gt; +class RenderMediaControlsChromium {
&gt; +public:
&gt; +    static bool shouldRenderMediaControlPart(ControlPart part, Element* e);

Don&apos;t need the parameter names here.

r=me with these minor changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153156</commentid>
    <comment_count>11</comment_count>
      <attachid>40815</attachid>
    <who name="Andrew Scherkus">scherkus</who>
    <bug_when>2009-10-07 12:51:07 -0700</bug_when>
    <thetext>Created attachment 40815
Round 3

Renamed parentMediaElement -&gt; toParentMediaElement

Removed parameters from function signature in RenderMediaControlsChromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153163</commentid>
    <comment_count>12</comment_count>
      <attachid>40815</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2009-10-07 13:15:49 -0700</bug_when>
    <thetext>Comment on attachment 40815
Round 3

r=me

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153164</commentid>
    <comment_count>13</comment_count>
      <attachid>40815</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-07 13:25:07 -0700</bug_when>
    <thetext>Comment on attachment 40815
Round 3

Clearing flags on attachment: 40815

Committed r49259: &lt;http://trac.webkit.org/changeset/49259&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153165</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-10-07 13:25:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40483</attachid>
            <date>2009-10-01 16:05:45 -0700</date>
            <delta_ts>2009-10-06 16:59:24 -0700</delta_ts>
            <desc>Round 1</desc>
            <filename>refactor_controls.patch</filename>
            <type>text/plain</type>
            <size>44183</size>
            <attacher name="Andrew Scherkus">scherkus</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDVkMzhkNS4uYmViMWNmMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OCBAQAorMjAwOS0xMC0wMSAgQW5kcmV3IFNjaGVy
a3VzICA8c2NoZXJrdXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIFJlbmRlclRoZW1lQ2hyb21pdW1NYWMgYW5k
IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhIHRvIHJlbmRlciBtZWRpYSBjb250cm9scyB1c2luZyBH
cmFwaGljc0NvbnRleHQuCisKKyAgICAgICAgRGVzaWduIHdhcyBiYXNlZCBvbiBleGlzdGluZyBS
ZW5kZXJNZWRpYUNvbnRyb2xzLmNwcCB1c2VkIGJ5IFJlbmRlclRoZW1lU2FmYXJpL1dpbi4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk5ODcKKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIGxheW91dCB0ZXN0cyBhcyBubyBuZXcgZnVuY3Rp
b25hbGl0eSB3YXMgaW50cm9kdWNlZC4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQg
UmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmNwcC9oLgorICAgICAgICAqIGNzcy9tZWRpYUNv
bnRyb2xzQ2hyb21pdW0uY3NzOiBUd2Vha2VkIG1lZGlhIHNsaWRlciBwb3NpdGlvbiBhbmQgYm9y
ZGVyIHN0eWxlLgorICAgICAgICAqIHJlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVk
KTogRG9uJ3QgY2FsbCBzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KCkgaWYgZWxlbWVudCBo
YXMgbm8gYXBwZWFyYW5jZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbElucHV0RWxl
bWVudDo6cmVuZGVyZXJJc05lZWRlZCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1l
ZGlhU2xpZGVyVGh1bWJJbWFnZSk6IEltcGxlbWVudGF0aW9uIHJlZmFjdG9yZWQgZnJvbSBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjL1NraWEuCisgICAgICAgIChXZWJDb3JlOjptZWRpYVZvbHVtZVNs
aWRlclRodW1iSW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnBhaW50TWVkaWFCdXR0
b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnBhcmVudE1lZGlhRWxlbWVudCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRNZWRpYU11dGVCdXR0b24pOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OnBhaW50TWVkaWFQbGF5QnV0dG9uKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpwYWludE1lZGlhU2xpZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpwYWludE1l
ZGlhU2xpZGVyVGh1bWIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnBhaW50TWVkaWFWb2x1
bWVTbGlkZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnBhaW50TWVkaWFWb2x1bWVTbGlk
ZXJUaHVtYik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRNZWRpYVRpbWVsaW5lQ29u
dGFpbmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZWRpYUNvbnRyb2xzQ2hy
b21pdW06OnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFy
dCk6IFNhbWUKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6
YWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJN
ZWRpYUNvbnRyb2xzQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1NYWMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFk
anVzdFNsaWRlclRodW1iU2l6ZSk6IEltcGxlbWVudGF0aW9uIGRlbGVnYXRlZCB0byBSZW5kZXJN
ZWRpYUNvbnRyb2xzQ2hyb21pdW0uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjpzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhUGxheUJ1dHRvbik6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRp
YU11dGVCdXR0b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OnBhaW50TWVkaWFTbGlkZXJUcmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlh
U2xpZGVyVGh1bWIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYUNvbnRyb2xzQmFja2dyb3Vu
ZCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRp
YUNvbnRyb2xzQmFja2dyb3VuZCk6IEltcGxlbWVudGF0aW9uIGRlbGVnYXRlZCB0byBSZW5kZXJN
ZWRpYUNvbnRyb2xzQ2hyb21pdW0uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtU2tpYTo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0
U2xpZGVyVGh1bWJTaXplKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6cGFpbnRNZWRpYVNsaWRlclRodW1iKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1i
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFp
bnRNZWRpYVBsYXlCdXR0b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjpwYWludE1lZGlhTXV0ZUJ1dHRvbik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBh
cnQpOiBEaXR0by4KKwogMjAwOS0wOS0zMCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDFmOTNmMDEuLjk1Njkz
ZDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCkBAIC0yOTM1LDYgKzI5MzUsOCBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5k
ZXJNYXJxdWVlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAnLAog
ICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJNZWRpYS5oJywKKyAgICAgICAgICAgICdyZW5k
ZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncmVu
ZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdyZW5k
ZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVy
TWVudUxpc3QuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAnLApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc0Nocm9taXVtLmNzcyBiL1dlYkNv
cmUvY3NzL21lZGlhQ29udHJvbHNDaHJvbWl1bS5jc3MKaW5kZXggMTZmZjBlNC4uMGY2NjdiZCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc0Nocm9taXVtLmNzcworKysgYi9X
ZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3NzCkBAIC04Myw4ICs4Myw4IEBAIGF1
ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLWNvbnRhaW5lciwgdmlkZW86Oi13
ZWJraXQtbWVkaWEtY29udHJvbHMtCiAgICAgd2lkdGg6IGF1dG87CiAgICAgaGVpZ2h0OiAzMnB4
OwogCi0gICAgYm9yZGVyLWxlZnQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKLSAg
ICBib3JkZXItcmlnaHQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKKyAgICBib3Jk
ZXItbGVmdDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKKyAgICBib3JkZXIt
cmlnaHQ6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiB9CiAKIGF1ZGlvOjot
d2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5LCB2aWRlbzo6LXdlYmtp
dC1tZWRpYS1jb250cm9scy1jdXJyZW50LXRpbWUtZGlzcGxheSB7CkBAIC0xNDEsNyArMTQxLDcg
QEAgYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUsIHZpZGVvOjotd2Via2l0
LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lIHsKICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlh
LXNsaWRlcjsKICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgdG9wOiBhdXRvOwotICAgIGJv
dHRvbTogOHB4OworICAgIGJvdHRvbTogN3B4OwogICAgIGxlZnQ6IDZweDsKICAgICByaWdodDog
NjVweDsKICAgICBoZWlnaHQ6IDE2cHg7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9N
ZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHAKaW5kZXggMjllMmU1Ny4uYmQ3MTA3MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9y
ZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApAQCAtMTM4LDcgKzEzOCw3IEBAIGJvb2wgTWVkaWFD
b250cm9sRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpCiAgICAg
QVNTRVJUKGRvY3VtZW50KCktPnBhZ2UoKSk7CiAKICAgICByZXR1cm4gSFRNTERpdkVsZW1lbnQ6
OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpICYmIHBhcmVudCgpICYmIHBhcmVudCgpLT5yZW5kZXJl
cigpCi0gICAgICAgICYmIGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+c2hvdWxkUmVuZGVy
TWVkaWFDb250cm9sUGFydChzdHlsZS0+YXBwZWFyYW5jZSgpLCBtX21lZGlhRWxlbWVudCk7Cisg
ICAgICAgICYmICghc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSB8fCBkb2N1bWVudCgpLT5wYWdlKCkt
PnRoZW1lKCktPnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQoc3R5bGUtPmFwcGVhcmFuY2Uo
KSwgbV9tZWRpYUVsZW1lbnQpKTsKIH0KICAgICAKIHZvaWQgTWVkaWFDb250cm9sRWxlbWVudDo6
YXR0YWNoKCkKQEAgLTM2Niw3ICszNjYsNyBAQCBib29sIE1lZGlhQ29udHJvbElucHV0RWxlbWVu
dDo6cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSogc3R5bGUpCiAgICAgQVNTRVJUKGRvY3Vt
ZW50KCktPnBhZ2UoKSk7CiAKICAgICByZXR1cm4gSFRNTElucHV0RWxlbWVudDo6cmVuZGVyZXJJ
c05lZWRlZChzdHlsZSkgJiYgcGFyZW50KCkgJiYgcGFyZW50KCktPnJlbmRlcmVyKCkKLSAgICAg
ICAgJiYgZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5zaG91bGRSZW5kZXJNZWRpYUNvbnRy
b2xQYXJ0KHN0eWxlLT5hcHBlYXJhbmNlKCksIG1fbWVkaWFFbGVtZW50KTsKKyAgICAgICAgJiYg
KCFzdHlsZS0+aGFzQXBwZWFyYW5jZSgpIHx8IGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+
c2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChzdHlsZS0+YXBwZWFyYW5jZSgpLCBtX21lZGlh
RWxlbWVudCkpOwogfQogCiB2b2lkIE1lZGlhQ29udHJvbElucHV0RWxlbWVudDo6YXR0YWNoKCkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1
bS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOWYzMzgKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3Bw
CkBAIC0wLDAgKzEsMzAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5oIgorCisj
aW5jbHVkZSAiR3JhZGllbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShWSURFTykKK3N0YXRpYyBJbWFnZSogbWVkaWFT
bGlkZXJUaHVtYkltYWdlKCkKK3sKKyAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhU2xpZGVyVGh1bWIg
PSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhU2xpZGVyVGh1bWIiKS5yZWxlYXNl
UmVmKCk7CisgICAgcmV0dXJuIG1lZGlhU2xpZGVyVGh1bWI7Cit9CisKK3N0YXRpYyBJbWFnZSog
bWVkaWFWb2x1bWVTbGlkZXJUaHVtYkltYWdlKCkKK3sKKyAgICBzdGF0aWMgSW1hZ2UqIG1lZGlh
Vm9sdW1lU2xpZGVyVGh1bWIgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhVm9s
dW1lU2xpZGVyVGh1bWIiKS5yZWxlYXNlUmVmKCk7CisgICAgcmV0dXJuIG1lZGlhVm9sdW1lU2xp
ZGVyVGh1bWI7Cit9CisKK3N0YXRpYyBib29sIHBhaW50TWVkaWFCdXR0b24oR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBJbWFnZSogaW1hZ2UpCit7CisgICAg
Ly8gQ3JlYXRlIGEgZGVzdGluYXRpb24gcmVjdGFuZ2xlIGZvciB0aGUgaW1hZ2UgdGhhdCBpcyBj
ZW50ZXJlZCBpbiB0aGUgZHJhd2luZyByZWN0YW5nbGUsIHJvdW5kZWQgbGVmdCwgYW5kIGRvd24u
CisgICAgSW50UmVjdCBpbWFnZVJlY3QgPSBpbWFnZS0+cmVjdCgpOworICAgIGltYWdlUmVjdC5z
ZXRZKHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBpbWFnZS0+aGVpZ2h0KCkgKyAxKSAvIDIp
OworICAgIGltYWdlUmVjdC5zZXRYKHJlY3QueCgpICsgKHJlY3Qud2lkdGgoKSAtIGltYWdlLT53
aWR0aCgpICsgMSkgLyAyKTsKKworICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgaW1hZ2VS
ZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gRklYTUU6IHRoaXMgaXMgY29waWVkIGZy
b20gUmVuZGVyTWVkaWFDb250cm9scy5jcHAsIHRyeSB0byBjb25zb2xpZGF0ZS4KK3N0YXRpYyBI
VE1MTWVkaWFFbGVtZW50KiBwYXJlbnRNZWRpYUVsZW1lbnQoUmVuZGVyT2JqZWN0KiBvKQorewor
ICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbWVkaWFOb2RlID0gbm9kZSA/
IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDogMDsKKyAgICBpZiAoIW1lZGlhTm9kZSB8fCAo
IW1lZGlhTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKSAmJiAhbWVkaWFOb2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXVkaW9UYWcpKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1lZGlhTm9kZSk7Cit9
CisKK3N0YXRpYyBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHBhcmVudE1l
ZGlhRWxlbWVudChvYmplY3QpOworICAgIGlmICghbWVkaWFFbGVtZW50KQorICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgc3RhdGljIEltYWdlKiBzb3VuZEZ1bGwgPSBJbWFnZTo6bG9hZFBsYXRm
b3JtUmVzb3VyY2UoIm1lZGlhU291bmRGdWxsIikucmVsZWFzZVJlZigpOworICAgIHN0YXRpYyBJ
bWFnZSogc291bmROb25lID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVNvdW5k
Tm9uZSIpLnJlbGVhc2VSZWYoKTsKKyAgICBzdGF0aWMgSW1hZ2UqIHNvdW5kRGlzYWJsZWQgPSBJ
bWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhU291bmREaXNhYmxlZCIpLnJlbGVhc2VS
ZWYoKTsKKworICAgIGlmIChtZWRpYUVsZW1lbnQtPm5ldHdvcmtTdGF0ZSgpID09IEhUTUxNZWRp
YUVsZW1lbnQ6Ok5FVFdPUktfTk9fU09VUkNFIHx8ICFtZWRpYUVsZW1lbnQtPmhhc0F1ZGlvKCkp
CisgICAgICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHBhaW50SW5mby5jb250ZXh0LCByZWN0
LCBzb3VuZERpc2FibGVkKTsKKworICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHBhaW50SW5m
by5jb250ZXh0LCByZWN0LCBtZWRpYUVsZW1lbnQtPm11dGVkKCkgPyBzb3VuZE5vbmU6IHNvdW5k
RnVsbCk7Cit9CisKK3N0YXRpYyBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVj
dCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9
IHBhcmVudE1lZGlhRWxlbWVudChvYmplY3QpOworICAgIGlmICghbWVkaWFFbGVtZW50KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhUGxheSA9IEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFQbGF5IikucmVsZWFzZVJlZigpOworICAgIHN0
YXRpYyBJbWFnZSogbWVkaWFQYXVzZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVk
aWFQYXVzZSIpLnJlbGVhc2VSZWYoKTsKKyAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhUGxheURpc2Fi
bGVkID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVBsYXlEaXNhYmxlZCIpLnJl
bGVhc2VSZWYoKTsKKworICAgIGlmIChtZWRpYUVsZW1lbnQtPm5ldHdvcmtTdGF0ZSgpID09IEhU
TUxNZWRpYUVsZW1lbnQ6Ok5FVFdPUktfTk9fU09VUkNFKQorICAgICAgICByZXR1cm4gcGFpbnRN
ZWRpYUJ1dHRvbihwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFQbGF5RGlzYWJsZWQpOwor
CisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1l
ZGlhRWxlbWVudC0+cGF1c2VkKCkgPyBtZWRpYVBsYXkgOiBtZWRpYVBhdXNlKTsKK30KKworc3Rh
dGljIGJvb2wgcGFpbnRNZWRpYVNsaWRlcihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQo
b2JqZWN0KTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOworICAgIEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OworCisgICAgLy8gRHJhdyB0aGUg
Ym9yZGVyIG9mIHRoZSB0aW1lIGJhci4KKyAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYSBy
b3VuZGVkIHJlY3QgYnV0IG5lZWQgdG8gZml4IEdyYXBoaWNzQ29udGV4dFNraWEgZmlyc3QuCisg
ICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ry
b2tlKTsKKyAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihzdHlsZS0+Ym9yZGVyTGVmdENvbG9y
KCkpOworICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhzdHlsZS0+Ym9yZGVyTGVmdFdp
ZHRoKCkpOworICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihzdHlsZS0+YmFja2dyb3VuZENvbG9y
KCkpOworICAgIGNvbnRleHQtPmRyYXdSZWN0KHJlY3QpOworICAgIGNvbnRleHQtPnJlc3RvcmUo
KTsKKworICAgIC8vIERyYXcgdGhlIGJ1ZmZlcmVkIHJhbmdlcy4KKyAgICAvLyBGSVhNRTogRHJh
dyBtdWx0aXBsZSByYW5nZXMgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGJ1ZmZlcmVkIHJhbmdlcy4K
KyAgICAvLyBGSVhNRTogcGVyY2VudExvYWRlZCgpIGRvZXNuJ3QgYWx3YXlzIGhpdCAxLjAgc28g
d2UncmUgdXNpbmcgcm91bmQoKS4KKyAgICBJbnRSZWN0IGJ1ZmZlcmVkUmVjdCA9IHJlY3Q7Cisg
ICAgYnVmZmVyZWRSZWN0LmluZmxhdGUoLXN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSk7CisgICAg
YnVmZmVyZWRSZWN0LnNldFdpZHRoKHJvdW5kKChidWZmZXJlZFJlY3Qud2lkdGgoKSAqIG1lZGlh
RWxlbWVudC0+cGVyY2VudExvYWRlZCgpKSkpOworCisgICAgLy8gRG9uJ3QgYm90aGVyIGRyYXdp
bmcgYW4gZW1wdHkgYXJlYS4KKyAgICBpZiAoIWJ1ZmZlcmVkUmVjdC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgSW50UG9pbnQgc2xpZGVyVG9wTGVmdCA9IGJ1ZmZlcmVkUmVjdC5sb2NhdGlvbigpOwor
ICAgICAgICBJbnRQb2ludCBzbGlkZXJUb3BSaWdodCA9IHNsaWRlclRvcExlZnQ7CisgICAgICAg
IHNsaWRlclRvcFJpZ2h0Lm1vdmUoMCwgYnVmZmVyZWRSZWN0LmhlaWdodCgpKTsKKworICAgICAg
ICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShzbGlkZXJUb3BM
ZWZ0LCBzbGlkZXJUb3BSaWdodCk7CisgICAgICAgIENvbG9yIHN0YXJ0Q29sb3IgPSBvYmplY3Qt
PnN0eWxlKCktPmNvbG9yKCk7CisgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBz
dGFydENvbG9yKTsKKyAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKHN0
YXJ0Q29sb3IucmVkKCkgLyAyLCBzdGFydENvbG9yLmdyZWVuKCkgLyAyLCBzdGFydENvbG9yLmJs
dWUoKSAvIDIsIHN0YXJ0Q29sb3IuYWxwaGEoKSkpOworCisgICAgICAgIGNvbnRleHQtPnNhdmUo
KTsKKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoTm9TdHJva2UpOworICAgICAgICBj
b250ZXh0LT5zZXRGaWxsR3JhZGllbnQoZ3JhZGllbnQpOworICAgICAgICBjb250ZXh0LT5kcmF3
UmVjdChidWZmZXJlZFJlY3QpOworICAgICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHBhaW50TWVkaWFTbGlkZXJUaHVt
YihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW9iamVjdC0+cGFyZW50
KCktPmlzU2xpZGVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBwYWlu
dE1lZGlhQnV0dG9uKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYVNsaWRlclRodW1iSW1h
Z2UoKSk7Cit9CisKK3N0YXRpYyBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXIoUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50
ID0gcGFyZW50TWVkaWFFbGVtZW50KG9iamVjdCk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBh
aW50SW5mby5jb250ZXh0OworICAgIENvbG9yIG9yaWdpbmFsQ29sb3IgPSBjb250ZXh0LT5zdHJv
a2VDb2xvcigpOworICAgIGlmIChvcmlnaW5hbENvbG9yICE9IENvbG9yOjp3aGl0ZSkKKyAgICAg
ICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlKTsKKworICAgIGludCB4ID0g
cmVjdC54KCkgKyByZWN0LndpZHRoKCkgLyAyOworICAgIGNvbnRleHQtPmRyYXdMaW5lKEludFBv
aW50KHgsIHJlY3QueSgpKSwgIEludFBvaW50KHgsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSkp
OworCisgICAgaWYgKG9yaWdpbmFsQ29sb3IgIT0gQ29sb3I6OndoaXRlKQorICAgICAgICBjb250
ZXh0LT5zZXRTdHJva2VDb2xvcihvcmlnaW5hbENvbG9yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kworc3RhdGljIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIGlmICghb2JqZWN0LT5wYXJlbnQoKS0+aXNTbGlkZXIoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocGFp
bnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhVm9sdW1lU2xpZGVyVGh1bWJJbWFnZSgpKTsKK30K
Kworc3RhdGljIGJvb2wgcGFpbnRNZWRpYVRpbWVsaW5lQ29udGFpbmVyKFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHBh
cmVudE1lZGlhRWxlbWVudChvYmplY3QpOworICAgIGlmICghbWVkaWFFbGVtZW50KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OworICAgICAgICBDb2xv
ciBvcmlnaW5hbENvbG9yID0gY29udGV4dC0+c3Ryb2tlQ29sb3IoKTsKKyAgICAgICAgZmxvYXQg
b3JpZ2luYWxUaGlja25lc3MgPSBjb250ZXh0LT5zdHJva2VUaGlja25lc3MoKTsKKyAgICAgICAg
U3Ryb2tlU3R5bGUgb3JpZ2luYWxTdHlsZSA9IGNvbnRleHQtPnN0cm9rZVN0eWxlKCk7CisKKyAg
ICAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOworCisgICAgICAgIC8v
IERyYXcgdGhlIGxlZnQgYm9yZGVyIHVzaW5nIENTUyBkZWZpbmVkIHdpZHRoIGFuZCBjb2xvci4K
KyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKG9iamVjdC0+c3R5bGUoKS0+Ym9y
ZGVyTGVmdFdpZHRoKCkpOworICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvYmplY3Qt
PnN0eWxlKCktPmJvcmRlckxlZnRDb2xvcigpLnJnYigpKTsKKyAgICAgICAgY29udGV4dC0+ZHJh
d0xpbmUoSW50UG9pbnQocmVjdC54KCkgKyAxLCByZWN0LnkoKSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIEludFBvaW50KHJlY3QueCgpICsgMSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgp
KSk7CisKKyAgICAgICAgLy8gRHJhdyB0aGUgcmlnaHQgYm9yZGVyIHVzaW5nIENTUyBkZWZpbmVk
IHdpZHRoIGFuZCBjb2xvci4KKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKG9i
amVjdC0+c3R5bGUoKS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsKKyAgICAgICAgY29udGV4dC0+c2V0
U3Ryb2tlQ29sb3Iob2JqZWN0LT5zdHlsZSgpLT5ib3JkZXJSaWdodENvbG9yKCkucmdiKCkpOwor
ICAgICAgICBjb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChyZWN0LngoKSArIHJlY3Qud2lkdGgo
KSAtIDEsIHJlY3QueSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQocmVj
dC54KCkgKyByZWN0LndpZHRoKCkgLSAxLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpKTsKKwor
ICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvcmlnaW5hbENvbG9yKTsKKyAgICAgICAg
Y29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKG9yaWdpbmFsVGhpY2tuZXNzKTsKKyAgICAgICAg
Y29udGV4dC0+c2V0U3Ryb2tlU3R5bGUob3JpZ2luYWxTdHlsZSk7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6c2hvdWxkUmVu
ZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFydCBwYXJ0LCBFbGVtZW50KiBlKQoreworICAg
IFVOVVNFRF9QQVJBTShlKTsKKworICAgIHN3aXRjaCAocGFydCkgeworICAgIGNhc2UgTWVkaWFN
dXRlQnV0dG9uUGFydDoKKyAgICBjYXNlIE1lZGlhUGxheUJ1dHRvblBhcnQ6CisgICAgY2FzZSBN
ZWRpYVNsaWRlclBhcnQ6CisgICAgY2FzZSBNZWRpYVNsaWRlclRodW1iUGFydDoKKyAgICBjYXNl
IE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyUGFydDoKKyAgICBjYXNlIE1lZGlhVm9sdW1lU2xp
ZGVyUGFydDoKKyAgICBjYXNlIE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0OgorICAgIGNhc2Ug
TWVkaWFDb250cm9sc0JhY2tncm91bmRQYXJ0OgorICAgIGNhc2UgTWVkaWFDdXJyZW50VGltZVBh
cnQ6CisgICAgY2FzZSBNZWRpYVRpbWVSZW1haW5pbmdQYXJ0OgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29s
IFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRp
YUNvbnRyb2xFbGVtZW50VHlwZSBwYXJ0LCBSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAgICBjYXNlIE1lZGlhRnVsbHNjcmVlbkJ1dHRvbjoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVk
aWFNdXRlQnV0dG9uOgorICAgIGNhc2UgTWVkaWFVbk11dGVCdXR0b246CisgICAgICAgIHJldHVy
biBwYWludE1lZGlhTXV0ZUJ1dHRvbihvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CisgICAgY2Fz
ZSBNZWRpYVBhdXNlQnV0dG9uOgorICAgIGNhc2UgTWVkaWFQbGF5QnV0dG9uOgorICAgICAgICBy
ZXR1cm4gcGFpbnRNZWRpYVBsYXlCdXR0b24ob2JqZWN0LCBwYWludEluZm8sIHJlY3QpOworICAg
IGNhc2UgTWVkaWFTZWVrQmFja0J1dHRvbjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFTZWVrRm9yd2FyZEJ1dHRvbjoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFT
bGlkZXI6CisgICAgICAgIHJldHVybiBwYWludE1lZGlhU2xpZGVyKG9iamVjdCwgcGFpbnRJbmZv
LCByZWN0KTsKKyAgICBjYXNlIE1lZGlhU2xpZGVyVGh1bWI6CisgICAgICAgIHJldHVybiBwYWlu
dE1lZGlhU2xpZGVyVGh1bWIob2JqZWN0LCBwYWludEluZm8sIHJlY3QpOworICAgIGNhc2UgTWVk
aWFWb2x1bWVTbGlkZXJDb250YWluZXI6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhVm9sdW1lU2xpZGVyOgorICAgICAgICByZXR1
cm4gcGFpbnRNZWRpYVZvbHVtZVNsaWRlcihvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CisgICAg
Y2FzZSBNZWRpYVZvbHVtZVNsaWRlclRodW1iOgorICAgICAgICByZXR1cm4gcGFpbnRNZWRpYVZv
bHVtZVNsaWRlclRodW1iKG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKKyAgICBjYXNlIE1lZGlh
VGltZWxpbmVDb250YWluZXI6CisgICAgICAgIHJldHVybiBwYWludE1lZGlhVGltZWxpbmVDb250
YWluZXIob2JqZWN0LCBwYWludEluZm8sIHJlY3QpOworICAgIGNhc2UgTWVkaWFDdXJyZW50VGlt
ZURpc3BsYXk6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIE1lZGlhVGltZVJlbWFpbmluZ0Rpc3BsYXk6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhQ29udHJvbHNQYW5lbDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjph
ZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBJ
bWFnZSogdGh1bWJJbWFnZSA9IDA7CisgICAgaWYgKG9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5j
ZSgpID09IE1lZGlhU2xpZGVyVGh1bWJQYXJ0KQorICAgICAgICB0aHVtYkltYWdlID0gbWVkaWFT
bGlkZXJUaHVtYkltYWdlKCk7CisgICAgZWxzZSBpZiAob2JqZWN0LT5zdHlsZSgpLT5hcHBlYXJh
bmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpCisgICAgICAgIHRodW1iSW1hZ2Ug
PSBtZWRpYVZvbHVtZVNsaWRlclRodW1iSW1hZ2UoKTsKKworICAgIGlmICh0aHVtYkltYWdlKSB7
CisgICAgICAgIG9iamVjdC0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKHRodW1iSW1hZ2UtPndp
ZHRoKCksIEZpeGVkKSk7CisgICAgICAgIG9iamVjdC0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0
aCh0aHVtYkltYWdlLT5oZWlnaHQoKSwgRml4ZWQpKTsKKyAgICB9Cit9CisKKyNlbmRpZiAgLy8g
I2lmIEVOQUJMRShWSURFTykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmggYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi45ZGJiNDZiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmgKQEAgLTAsMCArMSw0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVuZGVyTWVkaWFDb250cm9sc0No
cm9taXVtX2gKKyNkZWZpbmUgUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtX2gKKworI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKK2NsYXNzIFJl
bmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgc2hv
dWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFydCBwYXJ0LCBFbGVtZW50KiBlKTsK
KyAgICBzdGF0aWMgYm9vbCBwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhQ29udHJvbEVsZW1l
bnRUeXBlLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKyAgICBzdGF0aWMgdm9pZCBhZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6
ZShSZW5kZXJPYmplY3QqKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtTWFjLmgKaW5kZXggOWY0MTJhMC4uNjFiNWU4ZiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5oCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMuaApAQCAtMTIxLDYgKzEyMSw3IEBAIHBy
b3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CiAKICNpZiBFTkFCTEUoVklERU8pCisgICAgdmlydHVhbCBib29sIHNob3VsZFJlbmRl
ck1lZGlhQ29udHJvbFBhcnQoQ29udHJvbFBhcnQsIEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVk
aWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVHJh
Y2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtTWFjLm1tIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQpp
bmRleCA2OTVmOWZhLi5iY2ZjZDU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtTWFjLm1tCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1NYWMubW0KQEAgLTI5LDcgKzI5LDYgQEAKICNpbXBvcnQgIkRvY3VtZW50LmgiCiAj
aW1wb3J0ICJFbGVtZW50LmgiCiAjaW1wb3J0ICJGcmFtZVZpZXcuaCIKLSNpbXBvcnQgIkdyYWRp
ZW50LmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIkhUTUxJbnB1dEVs
ZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxNZWRpYUVsZW1lbnQuaCIKQEAgLTM4LDYgKzM3LDcgQEAK
ICNpbXBvcnQgIkxvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIgogI2ltcG9ydCAiTWVkaWFD
b250cm9sRWxlbWVudHMuaCIKICNpbXBvcnQgIlJlbmRlck1lZGlhLmgiCisjaW1wb3J0ICJSZW5k
ZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uaCIKICNpbXBvcnQgIlJlbmRlclNsaWRlci5oIgogI2lt
cG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCkBAIC0xMjUxLDIw
ICsxMjUxLDYgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNsaWRlclRodW1i
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWMKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLSNpZiBFTkFCTEUoVklERU8pCi1zdGF0aWMgSW1hZ2UqIG1lZGlhU2xpZGVyVGh1bWJJbWFn
ZSgpCi17Ci0gICAgc3RhdGljIEltYWdlKiBtZWRpYVNsaWRlclRodW1iID0gSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKCJtZWRpYVNsaWRlclRodW1iIikucmVsZWFzZVJlZigpOwotICAgIHJl
dHVybiBtZWRpYVNsaWRlclRodW1iOwotfQotICAKLXN0YXRpYyBJbWFnZSogbWVkaWFWb2x1bWVT
bGlkZXJUaHVtYkltYWdlKCkKLXsKLSAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhVm9sdW1lU2xpZGVy
VGh1bWIgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhVm9sdW1lU2xpZGVyVGh1
bWIiKS5yZWxlYXNlUmVmKCk7Ci0gICAgcmV0dXJuIG1lZGlhVm9sdW1lU2xpZGVyVGh1bWI7Ci19
Ci0jZW5kaWYKLQogdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUaHVt
YlNpemUoUmVuZGVyT2JqZWN0KiBvKSBjb25zdAogewogICAgIHN0YXRpYyBjb25zdCBpbnQgc2xp
ZGVyVGh1bWJXaWR0aCA9IDE1OwpAQCAtMTI3NywxNiArMTI2Myw3IEBAIHZvaWQgUmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCogbykgY29u
c3QKICAgICB9CiAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgSW1hZ2UqIHRodW1iSW1hZ2UgPSAw
OwotICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFTbGlkZXJUaHVtYlBh
cnQpCi0gICAgICAgIHRodW1iSW1hZ2UgPSBtZWRpYVNsaWRlclRodW1iSW1hZ2UoKTsKLSAgICBl
bHNlIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVt
YlBhcnQpCi0gICAgICAgIHRodW1iSW1hZ2UgPSBtZWRpYVZvbHVtZVNsaWRlclRodW1iSW1hZ2Uo
KTsKLSAgCi0gICAgaWYgKHRodW1iSW1hZ2UpIHsKLSAgICAgICAgby0+c3R5bGUoKS0+c2V0V2lk
dGgoTGVuZ3RoKHRodW1iSW1hZ2UtPndpZHRoKCksIEZpeGVkKSk7Ci0gICAgICAgIG8tPnN0eWxl
KCktPnNldEhlaWdodChMZW5ndGgodGh1bWJJbWFnZS0+aGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAg
fQorICAgIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6YWRqdXN0TWVkaWFTbGlkZXJUaHVt
YlNpemUobyk7CiAjZW5kaWYKIH0KIApAQCAtMTUzNywxNzMgKzE1MTQsNDQgQEAgYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnMKIH0KIAogI2lmIEVOQUJMRShWSURFTykKLS8vIEF0dGVtcHQgdG8gcmV0
cmlldmUgYSBIVE1MTWVkaWFFbGVtZW50IGZyb20gYSBOb2RlLiBSZXR1cm5zIDAgaWYgb25lIGNh
bm5vdCBiZSBmb3VuZC4KLXN0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnRQYXJl
bnQoTm9kZSogbm9kZSkKLXsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiAwOwotICAg
IE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOwotICAgIGlmICgh
bWVkaWFOb2RlIHx8ICghbWVkaWFOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dmlkZW9UYWcp
ICYmICFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphdWRpb1RhZykpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4o
bWVkaWFOb2RlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlh
QnV0dG9uSW50ZXJuYWwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBJbWFnZSogaW1hZ2UpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNob3VsZFJl
bmRlck1lZGlhQ29udHJvbFBhcnQoQ29udHJvbFBhcnQgcGFydCwgRWxlbWVudCogZSkKIHsKLSAg
ICAvLyBDcmVhdGUgYSBkZXN0aW5hdGlvbiByZWN0YW5nbGUgZm9yIHRoZSBpbWFnZSB0aGF0IGlz
IGNlbnRlcmVkIGluIHRoZSBkcmF3aW5nIHJlY3RhbmdsZSwgcm91bmRlZCBsZWZ0LCBhbmQgZG93
bi4KLSAgICBJbnRSZWN0IGltYWdlUmVjdCA9IGltYWdlLT5yZWN0KCk7Ci0gICAgaW1hZ2VSZWN0
LnNldFkocmVjdC55KCkgKyAocmVjdC5oZWlnaHQoKSAtIGltYWdlLT5oZWlnaHQoKSArIDEpIC8g
Mik7Ci0gICAgaW1hZ2VSZWN0LnNldFgocmVjdC54KCkgKyAocmVjdC53aWR0aCgpIC0gaW1hZ2Ut
PndpZHRoKCkgKyAxKSAvIDIpOwotCi0gICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBpbWFn
ZVJlY3QpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xz
Q2hyb21pdW06OnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQocGFydCwgZSk7CiB9CiAKIGJv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50
ID0gbWVkaWFFbGVtZW50UGFyZW50KG9iamVjdC0+bm9kZSgpKTsKLSAgICBpZiAoIW1lZGlhRWxl
bWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3RhdGljIEltYWdlKiBtZWRpYVBs
YXkgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhUGxheSIpLnJlbGVhc2VSZWYo
KTsKLSAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhUGF1c2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVz
b3VyY2UoIm1lZGlhUGF1c2UiKS5yZWxlYXNlUmVmKCk7Ci0gICAgc3RhdGljIEltYWdlKiBtZWRp
YVBsYXlEaXNhYmxlZCA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFQbGF5RGlz
YWJsZWQiKS5yZWxlYXNlUmVmKCk7Ci0KLSAgICBpZiAobWVkaWFFbGVtZW50LT5uZXR3b3JrU3Rh
dGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50OjpORVRXT1JLX05PX1NPVVJDRSkKLSAgICAgICAgcmV0
dXJuIHBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVk
aWFQbGF5RGlzYWJsZWQpOwotCi0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChw
YWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFFbGVtZW50LT5wYXVzZWQoKSA/IG1lZGlhUGxh
eSA6IG1lZGlhUGF1c2UpOworICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06
OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFQbGF5QnV0dG9uLCBvYmplY3QsIHBhaW50SW5m
bywgcmVjdCk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYU11
dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgSFRNTE1lZGlhRWxl
bWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50KG9iamVjdC0+bm9kZSgpKTsK
LSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3Rh
dGljIEltYWdlKiBzb3VuZEZ1bGwgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlh
U291bmRGdWxsIikucmVsZWFzZVJlZigpOwotICAgIHN0YXRpYyBJbWFnZSogc291bmROb25lID0g
SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVNvdW5kTm9uZSIpLnJlbGVhc2VSZWYo
KTsKLSAgICBzdGF0aWMgSW1hZ2UqIHNvdW5kRGlzYWJsZWQgPSBJbWFnZTo6bG9hZFBsYXRmb3Jt
UmVzb3VyY2UoIm1lZGlhU291bmREaXNhYmxlZCIpLnJlbGVhc2VSZWYoKTsKLQotICAgIGlmICht
ZWRpYUVsZW1lbnQtPm5ldHdvcmtTdGF0ZSgpID09IEhUTUxNZWRpYUVsZW1lbnQ6Ok5FVFdPUktf
Tk9fU09VUkNFIHx8ICFtZWRpYUVsZW1lbnQtPmhhc0F1ZGlvKCkpCi0gICAgICAgIHJldHVybiBw
YWludE1lZGlhQnV0dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIHNvdW5kRGlz
YWJsZWQpOwotCi0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChwYWludEluZm8u
Y29udGV4dCwgcmVjdCwgbWVkaWFFbGVtZW50LT5tdXRlZCgpID8gc291bmROb25lIDogc291bmRG
dWxsKTsKKyAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpwYWludE1lZGlh
Q29udHJvbHNQYXJ0KE1lZGlhTXV0ZUJ1dHRvbiwgb2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwog
fQogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFTbGlkZXJUcmFjayhS
ZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQob2JqZWN0LT5ub2RlKCkpOwotICAgIGlmICgh
bWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7ICAgIAotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCA9IHBhaW50SW5mby5jb250ZXh0OwotICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICAKLSAgICBj
b250ZXh0LT5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7Ci0KLSAgICBJbnRTaXplIHRvcExlZnRS
YWRpdXMgPSBzdHlsZS0+Ym9yZGVyVG9wTGVmdFJhZGl1cygpOwotICAgIEludFNpemUgdG9wUmln
aHRSYWRpdXMgPSBzdHlsZS0+Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKTsKLSAgICBJbnRTaXplIGJv
dHRvbUxlZnRSYWRpdXMgPSBzdHlsZS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpOwotICAgIElu
dFNpemUgYm90dG9tUmlnaHRSYWRpdXMgPSBzdHlsZS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMo
KTsKLSAgICBmbG9hdCBib3JkZXJXaWR0aCA9IHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKTsKLQot
ICAgIC8vIERyYXcgdGhlIGJvcmRlciBvZiB0aGUgdGltZSBiYXIuCi0gICAgY29udGV4dC0+c2V0
U3Ryb2tlQ29sb3Ioc3R5bGUtPmJvcmRlckxlZnRDb2xvcigpKTsKLSAgICBjb250ZXh0LT5zZXRT
dHJva2VUaGlja25lc3MoYm9yZGVyV2lkdGgpOwotICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihz
dHlsZS0+YmFja2dyb3VuZENvbG9yKCkpOwotICAgIGNvbnRleHQtPmFkZFBhdGgoUGF0aDo6Y3Jl
YXRlUm91bmRlZFJlY3RhbmdsZShyZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywg
Ym90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpKTsKLSAgICBjb250ZXh0LT5kcmF3
UGF0aCgpOwotICAgIAotICAgIC8vIERyYXcgdGhlIGJ1ZmZlcmVkIHJhbmdlcy4KLSAgICAvLyBG
SVhNRTogRHJhdyBtdWx0aXBsZSByYW5nZXMgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGJ1ZmZlcmVk
IHJhbmdlcy4KLSAgICBGbG9hdFJlY3QgYnVmZmVyZWRSZWN0ID0gcmVjdDsKLSAgICBidWZmZXJl
ZFJlY3QuaW5mbGF0ZSgtMS4wIC0gYm9yZGVyV2lkdGgpOwotICAgIGJ1ZmZlcmVkUmVjdC5zZXRX
aWR0aChidWZmZXJlZFJlY3Qud2lkdGgoKSAqIG1lZGlhRWxlbWVudC0+cGVyY2VudExvYWRlZCgp
KTsKLSAgICBidWZmZXJlZFJlY3QgPSBjb250ZXh0LT5yb3VuZFRvRGV2aWNlUGl4ZWxzKGJ1ZmZl
cmVkUmVjdCk7Ci0gICAKLSAgICAvLyBEb24ndCBib3RoZXIgZHJhd2luZyBhbiBlbXB0eSBhcmVh
LgotICAgIGlmIChidWZmZXJlZFJlY3Qud2lkdGgoKSA+IDAgJiYgYnVmZmVyZWRSZWN0LmhlaWdo
dCgpID4gMCkgewotICAgICAgICBGbG9hdFBvaW50IHNsaWRlclRvcExlZnQgPSBidWZmZXJlZFJl
Y3QubG9jYXRpb24oKTsKLSAgICAgICAgRmxvYXRQb2ludCBzbGlkZXJUb3BSaWdodCA9IHNsaWRl
clRvcExlZnQ7Ci0gICAgICAgIHNsaWRlclRvcFJpZ2h0Lm1vdmUoMC4wZiwgYnVmZmVyZWRSZWN0
LmhlaWdodCgpKTsKLSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQg
PSBHcmFkaWVudDo6Y3JlYXRlKHNsaWRlclRvcExlZnQsIHNsaWRlclRvcFJpZ2h0KTsKLSAgICAg
ICAgQ29sb3Igc3RhcnRDb2xvciA9IG9iamVjdC0+c3R5bGUoKS0+Y29sb3IoKTsKLSAgICAgICAg
Z3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIHN0YXJ0Q29sb3IpOwotICAgICAgICBncmFkaWVu
dC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3Ioc3RhcnRDb2xvci5yZWQoKSAvIDIsIHN0YXJ0Q29s
b3IuZ3JlZW4oKSAvIDIsIHN0YXJ0Q29sb3IuYmx1ZSgpIC8gMiwgc3RhcnRDb2xvci5hbHBoYSgp
KSk7Ci0gCi0gICAgICAgIGNvbnRleHQtPnNldEZpbGxHcmFkaWVudChncmFkaWVudCk7Ci0gICAg
ICAgIGNvbnRleHQtPmFkZFBhdGgoUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShidWZmZXJl
ZFJlY3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBi
b3R0b21SaWdodFJhZGl1cykpOwotICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgpOwotICAgIH0K
LSAgICAKLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7ICAgIAotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1Bh
cnQoTWVkaWFTbGlkZXIsIG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKIH0KIAogYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50
ID0gbWVkaWFFbGVtZW50UGFyZW50KG9iamVjdC0+bm9kZSgpKTsKLSAgICBpZiAoIW1lZGlhRWxl
bWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7Ci0gICAgQ29sb3Igb3JpZ2luYWxDb2xvciA9IGNvbnRl
eHQtPnN0cm9rZUNvbG9yKCk7Ci0gICAgaWYgKG9yaWdpbmFsQ29sb3IgIT0gQ29sb3I6OndoaXRl
KQotICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6d2hpdGUpOwotCi0gICAg
aW50IHggPSByZWN0LngoKSArIHJlY3Qud2lkdGgoKSAvIDI7Ci0gICAgY29udGV4dC0+ZHJhd0xp
bmUoSW50UG9pbnQoeCwgcmVjdC55KCkpLCAgSW50UG9pbnQoeCwgcmVjdC55KCkgKyByZWN0Lmhl
aWdodCgpKSk7Ci0gICAgCi0gICAgaWYgKG9yaWdpbmFsQ29sb3IgIT0gQ29sb3I6OndoaXRlKQot
ICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvcmlnaW5hbENvbG9yKTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpwYWludE1l
ZGlhQ29udHJvbHNQYXJ0KE1lZGlhVm9sdW1lU2xpZGVyLCBvYmplY3QsIHBhaW50SW5mbywgcmVj
dCk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVNsaWRlclRo
dW1iKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghb2JqZWN0LT5wYXJl
bnQoKS0+aXNTbGlkZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHBh
aW50TWVkaWFCdXR0b25JbnRlcm5hbChwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFTbGlk
ZXJUaHVtYkltYWdlKCkpOworICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06
OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFTbGlkZXJUaHVtYiwgb2JqZWN0LCBwYWludElu
Zm8sIHJlY3QpOwogfQogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFW
b2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAo
IW9iamVjdC0+cGFyZW50KCktPmlzU2xpZGVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJl
Y3QsIG1lZGlhVm9sdW1lU2xpZGVyVGh1bWJJbWFnZSgpKTsKKyAgICByZXR1cm4gUmVuZGVyTWVk
aWFDb250cm9sc0Nocm9taXVtOjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhVm9sdW1lU2xp
ZGVyVGh1bWIsIG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpwYWludE1lZGlhQ29udHJvbHNCYWNrZ3JvdW5kKFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1l
ZGlhRWxlbWVudFBhcmVudChvYmplY3QtPm5vZGUoKSk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCi0gICAg
ewotICAgICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsK
LSAgICAgICAgQ29sb3Igb3JpZ2luYWxDb2xvciA9IGNvbnRleHQtPnN0cm9rZUNvbG9yKCk7Ci0g
Ci0gICAgICAgIC8vIERyYXdzIHRoZSBsZWZ0IGJvcmRlciwgaXQgaXMgYWx3YXlzIDFweCB3aWRl
LgotICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvYmplY3QtPnN0eWxlKCktPmJvcmRl
ckxlZnRDb2xvcigpKTsKLSAgICAgICAgY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQocmVjdC54
KCkgKyAxLCByZWN0LnkoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KHJl
Y3QueCgpICsgMSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgCi0KLSAgICAgICAgLy8gRHJhd3MgdGhlIHJpZ2h0IGJvcmRlciwgaXQgaXMgYWx3
YXlzIDFweCB3aWRlLgotICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvYmplY3QtPnN0
eWxlKCktPmJvcmRlclJpZ2h0Q29sb3IoKSk7Ci0gICAgICAgIGNvbnRleHQtPmRyYXdMaW5lKElu
dFBvaW50KHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gMSwgcmVjdC55KCkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbnRQb2ludChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIDEsIHJl
Y3QueSgpICsgcmVjdC5oZWlnaHQoKSkpOwotICAgICAgICAKLSAgICAgICAgY29udGV4dC0+c2V0
U3Ryb2tlQ29sb3Iob3JpZ2luYWxDb2xvcik7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1Bh
cnQoTWVkaWFUaW1lbGluZUNvbnRhaW5lciwgb2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwogfQog
ICAgIAogU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmV4dHJhTWVkaWFDb250cm9sc1N0
eWxlU2hlZXQoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWEuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEu
Y3BwCmluZGV4IDRmNDg2ZDUuLjNhMzk0MjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtU2tpYS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJNZWRp
YUNvbnRyb2xFbGVtZW50cy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNp
bmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIu
aCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgpAQCAtOTYsMjAgKzk3LDYgQEAgc3RhdGlj
IHZvaWQgZHJhd0JveChTa0NhbnZhcyogY2FudmFzLCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25z
dCBTa1BhaW50JiBwYWludCkKICAgICBkcmF3VmVydExpbmUoY2FudmFzLCByZWN0LngoKSwgcmVj
dC55KCksIGJvdHRvbSwgcGFpbnQpOwogfQogCi0jaWYgRU5BQkxFKFZJREVPKQotLy8gQXR0ZW1w
dCB0byByZXRyaWV2ZSBhIEhUTUxNZWRpYUVsZW1lbnQgZnJvbSBhIE5vZGUuIFJldHVybnMgTlVM
TCBpZiBvbmUgY2Fubm90IGJlIGZvdW5kLgotc3RhdGljIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudFBhcmVudChOb2RlKiBub2RlKQotewotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgTm9kZSogbWVkaWFOb2RlID0gbm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7
Ci0gICAgaWYgKCFtZWRpYU5vZGUgfHwgKCFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp2aWRlb1RhZykgJiYgIW1lZGlhTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmF1ZGlvVGFn
KSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxNZWRp
YUVsZW1lbnQqPihtZWRpYU5vZGUpOwotfQotI2VuZGlmCi0KIC8vIFdlIGFpbSB0byBtYXRjaCBJ
RSBoZXJlLgogLy8gLUlFIHVzZXMgYSBmb250IGJhc2VkIG9uIHRoZSBlbmNvZGluZyBhcyB0aGUg
ZGVmYXVsdCBmb250IGZvciBmb3JtIGNvbnRyb2xzLgogLy8gLUdlY2tvIHVzZXMgTVMgU2hlbGwg
RGxnIChhY3R1YWxseSBjYWxscyBHZXRTdG9ja09iamVjdChERUZBVUxUX0dVSV9GT05UKSwKQEAg
LTQ4Niw0MiArNDczLDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhQnV0dG9u
SW50ZXJuYWwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBJ
bWFnZSogaW1hZ2UpCi17Ci0gICAgLy8gQ3JlYXRlIGEgZGVzdGluYXRpb24gcmVjdGFuZ2xlIGZv
ciB0aGUgaW1hZ2UgdGhhdCBpcyBjZW50ZXJlZCBpbiB0aGUgZHJhd2luZyByZWN0YW5nbGUsIHJv
dW5kZWQgbGVmdCwgYW5kIGRvd24uCi0gICAgSW50UmVjdCBpbWFnZVJlY3QgPSBpbWFnZS0+cmVj
dCgpOwotICAgIGltYWdlUmVjdC5zZXRZKHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBpbWFn
ZS0+aGVpZ2h0KCkgKyAxKSAvIDIpOwotICAgIGltYWdlUmVjdC5zZXRYKHJlY3QueCgpICsgKHJl
Y3Qud2lkdGgoKSAtIGltYWdlLT53aWR0aCgpICsgMSkgLyAyKTsKLQotICAgIGNvbnRleHQtPmRy
YXdJbWFnZShpbWFnZSwgaW1hZ2VSZWN0KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBS
ZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYUNvbnRyb2xzQmFja2dyb3VuZChSZW5k
ZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICNpZiBFTkFCTEUoVklERU8pCi0gICAgSFRNTE1l
ZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50KG9iamVjdC0+bm9k
ZSgpKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIFNrQ2FudmFzKiBjYW52YXMg
PSBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwotICAgICAg
ICBTa1BhaW50IHBhaW50OwotCi0gICAgICAgIC8vIERyYXdzIHRoZSBsZWZ0IGJvcmRlciwgaXQg
aXMgYWx3YXlzIDFweCB3aWRlLgotICAgICAgICBwYWludC5zZXRDb2xvcihvYmplY3QtPnN0eWxl
KCktPmJvcmRlckxlZnRDb2xvcigpLnJnYigpKTsKLSAgICAgICAgY2FudmFzLT5kcmF3TGluZShy
ZWN0LngoKSArIDEsIHJlY3QueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueCgp
ICsgMSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
IHBhaW50KTsKLQotICAgICAgICAvLyBEcmF3cyB0aGUgcmlnaHQgYm9yZGVyLCBpdCBpcyBhbHdh
eXMgMXB4IHdpZGUuCi0gICAgICAgIHBhaW50LnNldENvbG9yKG9iamVjdC0+c3R5bGUoKS0+Ym9y
ZGVyUmlnaHRDb2xvcigpLnJnYigpKTsKLSAgICAgICAgY2FudmFzLT5kcmF3TGluZShyZWN0Lngo
KSArIHJlY3Qud2lkdGgoKSAtIDEsIHJlY3QueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
IHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gMSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRy
b2xzUGFydChNZWRpYVRpbWVsaW5lQ29udGFpbmVyLCBvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7
CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTShwYWlu
dEluZm8pOwpAQCAtNTMzLDYyICs0ODgsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
OjpwYWludE1lZGlhQ29udHJvbHNCYWNrZ3JvdW5kKFJlbmRlck9iamVjdCogb2JqZWN0LAogYm9v
bCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9i
amVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQogewogI2lmIEVOQUJMRShWSURFTykKLSAgICBIVE1MTWVkaWFF
bGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQob2JqZWN0LT5ub2RlKCkp
OwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBT
a0NhbnZhcyogY2FudmFzID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5j
YW52YXMoKTsKLSAgICBTa1JlY3QgYmFja2dyb3VuZFJlY3Q7Ci0gICAgYmFja2dyb3VuZFJlY3Qu
c2V0KHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC54KCkgKyByZWN0LndpZHRoKCksIHJlY3QueSgp
ICsgcmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBTa1BhaW50IHBhaW50OwotICAgIHBhaW50LnNldEFu
dGlBbGlhcyh0cnVlKTsKLQotICAgIC8vIERyYXcgdGhlIGJvcmRlciBvZiB0aGUgdGltZSBiYXIu
IFRoZSBib3JkZXIgb25seSBoYXMgb25lIHNpbmdsZSBjb2xvciwKLSAgICAvLyB3aWR0aCBhbmQg
cmFkaXVzLiBTbyB1c2UgdGhlIHByb3BlcnR5IG9mIHRoZSBsZWZ0IGJvcmRlci4KLSAgICBTa0Nv
bG9yIGJvcmRlckNvbG9yID0gb2JqZWN0LT5zdHlsZSgpLT5ib3JkZXJMZWZ0Q29sb3IoKS5yZ2Io
KTsKLSAgICBpbnQgYm9yZGVyV2lkdGggPSBvYmplY3QtPnN0eWxlKCktPmJvcmRlckxlZnRXaWR0
aCgpOwotICAgIEludFNpemUgYm9yZGVyUmFkaXVzID0gb2JqZWN0LT5zdHlsZSgpLT5ib3JkZXJU
b3BMZWZ0UmFkaXVzKCk7Ci0gICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a1N0cm9rZV9TdHls
ZSk7Ci0gICAgcGFpbnQuc2V0U3Ryb2tlV2lkdGgoYm9yZGVyV2lkdGgpOwotICAgIHBhaW50LnNl
dENvbG9yKGJvcmRlckNvbG9yKTsKLSAgICBjYW52YXMtPmRyYXdSb3VuZFJlY3QoYmFja2dyb3Vu
ZFJlY3QsIGJvcmRlclJhZGl1cy53aWR0aCgpLCBib3JkZXJSYWRpdXMuaGVpZ2h0KCksIHBhaW50
KTsKLQotICAgIC8vIERyYXcgdGhlIGJhY2tncm91bmQgb2YgdGhlIHRpbWUgYmFyLgotICAgIFNr
Q29sb3IgYmFja2dyb3VuZENvbG9yID0gb2JqZWN0LT5zdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3Io
KS5yZ2IoKTsKLSAgICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprRmlsbF9TdHlsZSk7Ci0gICAg
cGFpbnQuc2V0Q29sb3IoYmFja2dyb3VuZENvbG9yKTsKLSAgICBjYW52YXMtPmRyYXdSb3VuZFJl
Y3QoYmFja2dyb3VuZFJlY3QsIGJvcmRlclJhZGl1cy53aWR0aCgpLCBib3JkZXJSYWRpdXMuaGVp
Z2h0KCksIHBhaW50KTsKLQotICAgIGlmIChiYWNrZ3JvdW5kUmVjdC53aWR0aCgpID49IDMgJiYg
YmFja2dyb3VuZFJlY3QuaGVpZ2h0KCkgPj0gMykKLSAgICB7Ci0gICAgICAgIC8vIERyYXcgdGhl
IGJ1ZmZlcmVkIHJhbmdlcy4KLSAgICAgICAgLy8gRklYTUU6IERyYXcgbXVsdGlwbGUgcmFuZ2Vz
IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBidWZmZXJlZCByYW5nZXMuCi0gICAgICAgIFNrUmVjdCBi
dWZmZXJlZFJlY3Q7Ci0gICAgICAgIGJ1ZmZlcmVkUmVjdC5zZXQoYmFja2dyb3VuZFJlY3QuZkxl
ZnQgKyAyLCBiYWNrZ3JvdW5kUmVjdC5mVG9wICsgMiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBiYWNrZ3JvdW5kUmVjdC5mUmlnaHQgLSAxLCBiYWNrZ3JvdW5kUmVjdC5mQm90dG9tIC0gMSk7
Ci0gICAgICAgIGludCB3aWR0aCA9IHN0YXRpY19jYXN0PGludD4oYnVmZmVyZWRSZWN0LndpZHRo
KCkgKiBtZWRpYUVsZW1lbnQtPnBlcmNlbnRMb2FkZWQoKSk7Ci0gICAgICAgIGJ1ZmZlcmVkUmVj
dC5mUmlnaHQgPSBidWZmZXJlZFJlY3QuZkxlZnQgKyB3aWR0aDsKLQotICAgICAgICBTa1BvaW50
IHBvaW50c1syXSA9IHsgeyAwLCBidWZmZXJlZFJlY3QuZlRvcCB9LCB7IDAsIGJ1ZmZlcmVkUmVj
dC5mQm90dG9tIH0gfTsKLSAgICAgICAgU2tDb2xvciBzdGFydENvbG9yID0gb2JqZWN0LT5zdHls
ZSgpLT5jb2xvcigpLnJnYigpOwotICAgICAgICBTa0NvbG9yIGVuZENvbG9yID0gU2tDb2xvclNl
dFJHQihTa0NvbG9yR2V0UihzdGFydENvbG9yKSAvIDIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNrQ29sb3JHZXRHKHN0YXJ0Q29sb3IpIC8gMiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tDb2xvckdldEIoc3RhcnRDb2xvcikg
LyAyKTsKLSAgICAgICAgU2tDb2xvciBjb2xvcnNbMl0gPSB7IHN0YXJ0Q29sb3IsIGVuZENvbG9y
IH07Ci0gICAgICAgIFNrU2hhZGVyKiBncmFkaWVudCA9IFNrR3JhZGllbnRTaGFkZXI6OkNyZWF0
ZUxpbmVhcihwb2ludHMsIGNvbG9ycywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihwb2ludHMpIC8gc2l6ZW9mKHBv
aW50c1swXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTa1NoYWRlcjo6a01pcnJvcl9UaWxlTW9kZSwgMCk7Ci0KLSAgICAgICAg
cGFpbnQucmVzZXQoKTsKLSAgICAgICAgcGFpbnQuc2V0U2hhZGVyKGdyYWRpZW50KTsKLSAgICAg
ICAgcGFpbnQuc2V0QW50aUFsaWFzKHRydWUpOwotICAgICAgICAvLyBDaGVjayBmb3Igcm91bmQg
cmVjdCB3aXRoIHplcm8gd2lkdGggb3IgaGVpZ2h0LCBvdGhlcndpc2UgU2tpYSB3aWxsIGFzc2Vy
dAotICAgICAgICBpZiAoYnVmZmVyZWRSZWN0LndpZHRoKCkgPiAwICYmIGJ1ZmZlcmVkUmVjdC5o
ZWlnaHQoKSA+IDApCi0gICAgICAgICAgICBjYW52YXMtPmRyYXdSb3VuZFJlY3QoYnVmZmVyZWRS
ZWN0LCBib3JkZXJSYWRpdXMud2lkdGgoKSwgYm9yZGVyUmFkaXVzLmhlaWdodCgpLCBwYWludCk7
Ci0gICAgICAgIGdyYWRpZW50LT51bnJlZigpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpwYWludE1lZGlhQ29udHJvbHNQ
YXJ0KE1lZGlhU2xpZGVyLCBvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiAjZWxzZQogICAgIFVO
VVNFRF9QQVJBTShvYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTShwYWludEluZm8pOwpAQCAtNjAw
LDE3ICs1MDAsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhU2xp
ZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0CiBib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvYmplY3QtPm5vZGUoKSk7Ci0gICAgaWYg
KCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNrQ2FudmFzKiBj
YW52YXMgPSBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwot
ICAgIFNrUGFpbnQgcGFpbnQ7Ci0gICAgcGFpbnQuc2V0Q29sb3IoU0tfQ29sb3JXSElURSk7Ci0K
LSAgICBpbnQgeCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC8gMjsKLSAgICBjYW52YXMtPmRy
YXdMaW5lKHgsIHJlY3QueSgpLCB4LCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCksIHBhaW50KTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVt
OjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhVm9sdW1lU2xpZGVyLCBvYmplY3QsIHBhaW50
SW5mbywgcmVjdCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwogICAgIFVOVVNF
RF9QQVJBTShwYWludEluZm8pOwpAQCAtNjE5LDMxICs1MDksMTAgQEAgYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCog
b2JqZWN0LAogI2VuZGlmCiB9CiAKLXN0YXRpYyBJbWFnZSogbWVkaWFTbGlkZXJUaHVtYkltYWdl
KCkKLXsKLSAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhU2xpZGVyVGh1bWIgPSBJbWFnZTo6bG9hZFBs
YXRmb3JtUmVzb3VyY2UoIm1lZGlhU2xpZGVyVGh1bWIiKS5yZWxlYXNlUmVmKCk7Ci0gICAgcmV0
dXJuIG1lZGlhU2xpZGVyVGh1bWI7Ci19Ci0KLXN0YXRpYyBJbWFnZSogbWVkaWFWb2x1bWVTbGlk
ZXJUaHVtYkltYWdlKCkKLXsKLSAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhVm9sdW1lU2xpZGVyVGh1
bWIgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhVm9sdW1lU2xpZGVyVGh1bWIi
KS5yZWxlYXNlUmVmKCk7Ci0gICAgcmV0dXJuIG1lZGlhVm9sdW1lU2xpZGVyVGh1bWI7Ci19Ci0K
IHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5k
ZXJPYmplY3QqIG9iamVjdCkgY29uc3QKIHsKICNpZiBFTkFCTEUoVklERU8pCi0gICAgSW1hZ2Uq
IHRodW1iSW1hZ2UgPSAwOwotICAgIGlmIChvYmplY3QtPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9
PSBNZWRpYVNsaWRlclRodW1iUGFydCkKLSAgICAgICAgdGh1bWJJbWFnZSA9IG1lZGlhU2xpZGVy
VGh1bWJJbWFnZSgpOwotICAgIGVsc2UgaWYgKG9iamVjdC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgp
ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KQotICAgICAgICB0aHVtYkltYWdlID0gbWVk
aWFWb2x1bWVTbGlkZXJUaHVtYkltYWdlKCk7Ci0KLSAgICBpZiAodGh1bWJJbWFnZSkgewotICAg
ICAgICBvYmplY3QtPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aCh0aHVtYkltYWdlLT53aWR0aCgp
LCBGaXhlZCkpOwotICAgICAgICBvYmplY3QtPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgodGh1
bWJJbWFnZS0+aGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgfQorICAgIFJlbmRlck1lZGlhQ29udHJv
bHNDaHJvbWl1bTo6YWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUob2JqZWN0KTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7CiAjZW5kaWYKQEAgLTY1MiwxMCArNTIxLDcgQEAgdm9p
ZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlck9i
amVjdCogb2JqZWN0KSBjb25zdAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRN
ZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogI2lmIEVOQUJM
RShWSURFTykKLSAgICBpZiAoIW9iamVjdC0+cGFyZW50KCktPmlzU2xpZGVyKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwocGFp
bnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhU2xpZGVyVGh1bWJJbWFnZSgpKTsKKyAgICByZXR1
cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1l
ZGlhU2xpZGVyVGh1bWIsIG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKG9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHBhaW50SW5mbyk7CkBAIC02Njcs
MTAgKzUzMyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFTbGlk
ZXJUaHVtYihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QKIGJvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG9iamVj
dCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKIHsKICNpZiBFTkFCTEUoVklERU8pCi0gICAgaWYgKCFvYmplY3QtPnBhcmVudCgp
LT5pc1NsaWRlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcGFpbnRN
ZWRpYUJ1dHRvbkludGVybmFsKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYVZvbHVtZVNs
aWRlclRodW1iSW1hZ2UoKSk7CisgICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1
bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVZvbHVtZVNsaWRlclRodW1iLCBvYmplY3Qs
IHBhaW50SW5mbywgcmVjdCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwogICAg
IFVOVVNFRF9QQVJBTShwYWludEluZm8pOwpAQCAtNjgyLDE4ICs1NDUsNyBAQCBib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2Jq
ZWN0KiBvYmplY3QsCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhUGxh
eUJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICNpZiBFTkFCTEUoVklERU8p
Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50
KG9iamVjdC0+bm9kZSgpKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgc3RhdGljIEltYWdlKiBtZWRpYVBsYXkgPSBJbWFnZTo6bG9hZFBsYXRm
b3JtUmVzb3VyY2UoIm1lZGlhUGxheSIpLnJlbGVhc2VSZWYoKTsKLSAgICBzdGF0aWMgSW1hZ2Uq
IG1lZGlhUGF1c2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhUGF1c2UiKS5y
ZWxlYXNlUmVmKCk7Ci0gICAgc3RhdGljIEltYWdlKiBtZWRpYVBsYXlEaXNhYmxlZCA9IEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFQbGF5RGlzYWJsZWQiKS5yZWxlYXNlUmVmKCk7
Ci0KLSAgICBpZiAobWVkaWFFbGVtZW50LT5uZXR3b3JrU3RhdGUoKSA9PSBIVE1MTWVkaWFFbGVt
ZW50OjpORVRXT1JLX05PX1NPVVJDRSkKLSAgICAgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25J
bnRlcm5hbChwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFQbGF5RGlzYWJsZWQpOwotCi0g
ICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChwYWludEluZm8uY29udGV4dCwgcmVj
dCwgbWVkaWFFbGVtZW50LT5wYXVzZWQoKSA/IG1lZGlhUGxheSA6IG1lZGlhUGF1c2UpOworICAg
IHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1Bh
cnQoTWVkaWFQbGF5QnV0dG9uLCBvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTShvYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTShwYWludEluZm8pOwpAQCAt
NzA1LDE4ICs1NTcsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlh
UGxheUJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUgogYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvYmplY3QtPm5vZGUoKSk7Ci0gICAgaWYgKCFt
ZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0YXRpYyBJbWFnZSog
c291bmRGdWxsID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVNvdW5kRnVsbCIp
LnJlbGVhc2VSZWYoKTsKLSAgICBzdGF0aWMgSW1hZ2UqIHNvdW5kTm9uZSA9IEltYWdlOjpsb2Fk
UGxhdGZvcm1SZXNvdXJjZSgibWVkaWFTb3VuZE5vbmUiKS5yZWxlYXNlUmVmKCk7Ci0gICAgc3Rh
dGljIEltYWdlKiBzb3VuZERpc2FibGVkID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJt
ZWRpYVNvdW5kRGlzYWJsZWQiKS5yZWxlYXNlUmVmKCk7Ci0KLSAgICBpZiAobWVkaWFFbGVtZW50
LT5uZXR3b3JrU3RhdGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50OjpORVRXT1JLX05PX1NPVVJDRSB8
fCAhbWVkaWFFbGVtZW50LT5oYXNBdWRpbygpKQotICAgICAgICByZXR1cm4gcGFpbnRNZWRpYUJ1
dHRvbkludGVybmFsKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBzb3VuZERpc2FibGVkKTsKLQot
ICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJl
Y3QsIG1lZGlhRWxlbWVudC0+bXV0ZWQoKSA/IHNvdW5kTm9uZTogc291bmRGdWxsKTsKKyAgICBy
ZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpwYWludE1lZGlhQ29udHJvbHNQYXJ0
KE1lZGlhTXV0ZUJ1dHRvbiwgb2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0ob2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0ocGFpbnRJbmZvKTsKQEAgLTg3
MSwxMyArNzEyLDcgQEAgaW50IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpidXR0b25JbnRlcm5h
bFBhZGRpbmdCb3R0b20oKSBjb25zdAogI2lmIEVOQUJMRShWSURFTykKIGJvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQoQ29udHJvbFBhcnQg
cGFydCwgRWxlbWVudCogZSkKIHsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4oZSk7Ci0gICAgc3dpdGNoIChwYXJ0KSB7
Ci0gICAgY2FzZSBNZWRpYU11dGVCdXR0b25QYXJ0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnNob3VsZFJlbmRlck1lZGlh
Q29udHJvbFBhcnQocGFydCwgZSk7Ci0gICAgfQorICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRy
b2xzQ2hyb21pdW06OnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQocGFydCwgZSk7CiB9CiAj
ZW5kaWYKIAo=
</data>
<flag name="review"
          id="21713"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40750</attachid>
            <date>2009-10-06 16:59:24 -0700</date>
            <delta_ts>2009-10-06 17:14:24 -0700</delta_ts>
            <desc>Round 2</desc>
            <filename>refactor_controls.patch</filename>
            <type>text/plain</type>
            <size>42385</size>
            <attacher name="Andrew Scherkus">scherkus</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggMDNmNmY4NC4uYWM2MDdmMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI5MzgsNiArMjkzOCw4IEBACiAgICAgICAg
ICAgICAncmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5n
L1JlbmRlck1lZGlhLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlck1lZGlhLmgn
LAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3Bw
JywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmgn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xz
Q2hyb21pdW0uY3NzIGIvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc0Nocm9taXVtLmNzcwppbmRl
eCAxNmZmMGU0Li4wZjY2N2JkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9tZWRpYUNvbnRyb2xz
Q2hyb21pdW0uY3NzCisrKyBiL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHNDaHJvbWl1bS5jc3MK
QEAgLTgzLDggKzgzLDggQEAgYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUt
Y29udGFpbmVyLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy0KICAgICB3aWR0aDogYXV0
bzsKICAgICBoZWlnaHQ6IDMycHg7CiAKLSAgICBib3JkZXItbGVmdC1jb2xvcjogcmdiYSgyNTUs
IDI1NSwgMjU1LCAwLjIpOwotICAgIGJvcmRlci1yaWdodC1jb2xvcjogcmdiYSgyNTUsIDI1NSwg
MjU1LCAwLjIpOworICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1
LCAwLjIpOworICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwg
MC4yKTsKIH0KIAogYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtY3VycmVudC10aW1lLWRp
c3BsYXksIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5
IHsKQEAgLTE0MSw3ICsxNDEsNyBAQCBhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1l
bGluZSwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUgewogICAgIC13ZWJr
aXQtYXBwZWFyYW5jZTogbWVkaWEtc2xpZGVyOwogICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAg
ICB0b3A6IGF1dG87Ci0gICAgYm90dG9tOiA4cHg7CisgICAgYm90dG9tOiA3cHg7CiAgICAgbGVm
dDogNnB4OwogICAgIHJpZ2h0OiA2NXB4OwogICAgIGhlaWdodDogMTZweDsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1dlYkNvcmUvcmVu
ZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCAyOWUyZTU3Li5mODdhNjljIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysr
IGIvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC00Niw2ICs0
NiwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKK0hUTUxNZWRpYUVsZW1lbnQqIHBhcmVudE1lZGlhRWxlbWVudChSZW5kZXJPYmplY3QqIG8p
Cit7CisgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKKyAgICBOb2RlKiBtZWRpYU5vZGUgPSBu
b2RlID8gbm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOworICAgIGlmICghbWVkaWFOb2Rl
IHx8ICghbWVkaWFOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dmlkZW9UYWcpICYmICFtZWRp
YU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphdWRpb1RhZykpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obWVkaWFOb2Rl
KTsKK30KKwogLy8gRklYTUU6IFRoZXNlIGNvbnN0YW50cyBtYXkgbmVlZCB0byBiZSB0d2Vha2Vk
IHRvIGJldHRlciBtYXRjaCB0aGUgc2Vla2luZyBpbiB0aGUgUXVpY2tUaW1lIHBsdWctaW4uCiBz
dGF0aWMgY29uc3QgZmxvYXQgY1NlZWtSZXBlYXREZWxheSA9IDAuMWY7CiBzdGF0aWMgY29uc3Qg
ZmxvYXQgY1N0ZXBUaW1lID0gMC4wN2Y7CkBAIC0xMzgsNyArMTQ4LDcgQEAgYm9vbCBNZWRpYUNv
bnRyb2xFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkKICAgICBB
U1NFUlQoZG9jdW1lbnQoKS0+cGFnZSgpKTsKIAogICAgIHJldHVybiBIVE1MRGl2RWxlbWVudDo6
cmVuZGVyZXJJc05lZWRlZChzdHlsZSkgJiYgcGFyZW50KCkgJiYgcGFyZW50KCktPnJlbmRlcmVy
KCkKLSAgICAgICAgJiYgZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5zaG91bGRSZW5kZXJN
ZWRpYUNvbnRyb2xQYXJ0KHN0eWxlLT5hcHBlYXJhbmNlKCksIG1fbWVkaWFFbGVtZW50KTsKKyAg
ICAgICAgJiYgKCFzdHlsZS0+aGFzQXBwZWFyYW5jZSgpIHx8IGRvY3VtZW50KCktPnBhZ2UoKS0+
dGhlbWUoKS0+c2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChzdHlsZS0+YXBwZWFyYW5jZSgp
LCBtX21lZGlhRWxlbWVudCkpOwogfQogICAgIAogdm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50Ojph
dHRhY2goKQpAQCAtMzY2LDcgKzM3Niw3IEBAIGJvb2wgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50
OjpyZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkKICAgICBBU1NFUlQoZG9jdW1l
bnQoKS0+cGFnZSgpKTsKIAogICAgIHJldHVybiBIVE1MSW5wdXRFbGVtZW50OjpyZW5kZXJlcklz
TmVlZGVkKHN0eWxlKSAmJiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+cmVuZGVyZXIoKQotICAgICAg
ICAmJiBkb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPnNob3VsZFJlbmRlck1lZGlhQ29udHJv
bFBhcnQoc3R5bGUtPmFwcGVhcmFuY2UoKSwgbV9tZWRpYUVsZW1lbnQpOworICAgICAgICAmJiAo
IXN0eWxlLT5oYXNBcHBlYXJhbmNlKCkgfHwgZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5z
aG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KHN0eWxlLT5hcHBlYXJhbmNlKCksIG1fbWVkaWFF
bGVtZW50KSk7CiB9CiAKIHZvaWQgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjphdHRhY2goKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuaCBiL1dl
YkNvcmUvcmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmgKaW5kZXggZjY5MjQ4NS4uNmY1
YTdiNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMu
aAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCkBAIC02Niw2
ICs2Niw4IEBAIGVudW0gTWVkaWFDb250cm9sRWxlbWVudFR5cGUgewogICAgIE1lZGlhVm9sdW1l
U2xpZGVyVGh1bWIKIH07CiAKK0hUTUxNZWRpYUVsZW1lbnQqIHBhcmVudE1lZGlhRWxlbWVudChS
ZW5kZXJPYmplY3QqKTsKKwogY2xhc3MgTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQgOiBw
dWJsaWMgSFRNTERpdkVsZW1lbnQgewogcHVibGljOgogICAgIE1lZGlhQ29udHJvbFNoYWRvd1Jv
b3RFbGVtZW50KERvY3VtZW50KiwgSFRNTE1lZGlhRWxlbWVudCopOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAppbmRleCAwY2UwNjQyLi5jNDUwYjI2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcAorKysgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcApAQCAtODIsMTYgKzgyLDYgQEAg
dm9pZCBSZW5kZXJNZWRpYUNvbnRyb2xzOjphZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5k
ZXJPYmplY3QqIG8pCiAgICAgby0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChzdGF0aWNfY2Fz
dDxpbnQ+KG1lZGlhU2xpZGVyVGh1bWJIZWlnaHQgKiB6b29tTGV2ZWwpLCBGaXhlZCkpOwogfQog
Ci1zdGF0aWMgSFRNTE1lZGlhRWxlbWVudCogcGFyZW50TWVkaWFFbGVtZW50KFJlbmRlck9iamVj
dCogbykKLXsKLSAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOwotICAgIE5vZGUqIG1lZGlhTm9k
ZSA9IG5vZGUgPyBub2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7Ci0gICAgaWYgKCFtZWRp
YU5vZGUgfHwgKCFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp2aWRlb1RhZykgJiYg
IW1lZGlhTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmF1ZGlvVGFnKSkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtZWRp
YU5vZGUpOwotfQotCiBib29sIFJlbmRlck1lZGlhQ29udHJvbHM6OnBhaW50TWVkaWFDb250cm9s
c1BhcnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUgcGFydCwgUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQog
ewogICAgIEFTU0VSVChTYWZhcmlUaGVtZUxpYnJhcnkoKSk7CkBAIC0xNTksNCArMTQ5LDMgQEAg
Ym9vbCBSZW5kZXJNZWRpYUNvbnRyb2xzOjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhQ29u
dHJvbEVsZW1lbnRUeXBlIHBhcnQsIFIKICNlbmRpZiAgLy8gI2lmIEVOQUJMRShWSURFTykKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWVkaWFDb250cm9sc0Nocm9taXVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5kYzVjNDJmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TWVkaWFDb250cm9sc0Nocm9taXVtLmNwcApAQCAtMCwwICsxLDI4OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJNZWRp
YUNvbnRyb2xzQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgIkdyYWRpZW50LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoVklE
RU8pCisKK3R5cGVkZWYgV1RGOjpIYXNoTWFwPGNvbnN0IGNoYXIqLCBJbWFnZSo+IE1lZGlhQ29u
dHJvbEltYWdlTWFwOworc3RhdGljIE1lZGlhQ29udHJvbEltYWdlTWFwKiBnTWVkaWFDb250cm9s
SW1hZ2VNYXAgPSAwOworCitzdGF0aWMgSW1hZ2UqIHBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hh
ciogbmFtZSkKK3sKKyAgICBpZiAoIWdNZWRpYUNvbnRyb2xJbWFnZU1hcCkKKyAgICAgICAgZ01l
ZGlhQ29udHJvbEltYWdlTWFwID0gbmV3IE1lZGlhQ29udHJvbEltYWdlTWFwKCk7CisgICAgaWYg
KEltYWdlKiBpbWFnZSA9IGdNZWRpYUNvbnRyb2xJbWFnZU1hcC0+Z2V0KG5hbWUpKQorICAgICAg
ICByZXR1cm4gaW1hZ2U7CisgICAgaWYgKEltYWdlKiBpbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZv
cm1SZXNvdXJjZShuYW1lKS5yZWxlYXNlUmVmKCkpIHsKKyAgICAgICAgZ01lZGlhQ29udHJvbElt
YWdlTWFwLT5zZXQobmFtZSwgaW1hZ2UpOworICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgfQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgYm9v
bCBwYWludE1lZGlhQnV0dG9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVj
dCYgcmVjdCwgSW1hZ2UqIGltYWdlKQoreworICAgIC8vIENyZWF0ZSBhIGRlc3RpbmF0aW9uIHJl
Y3RhbmdsZSBmb3IgdGhlIGltYWdlIHRoYXQgaXMgY2VudGVyZWQgaW4gdGhlIGRyYXdpbmcgcmVj
dGFuZ2xlLCByb3VuZGVkIGxlZnQsIGFuZCBkb3duLgorICAgIEludFJlY3QgaW1hZ2VSZWN0ID0g
aW1hZ2UtPnJlY3QoKTsKKyAgICBpbWFnZVJlY3Quc2V0WShyZWN0LnkoKSArIChyZWN0LmhlaWdo
dCgpIC0gaW1hZ2UtPmhlaWdodCgpICsgMSkgLyAyKTsKKyAgICBpbWFnZVJlY3Quc2V0WChyZWN0
LngoKSArIChyZWN0LndpZHRoKCkgLSBpbWFnZS0+d2lkdGgoKSArIDEpIC8gMik7CisKKyAgICBj
b250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIGltYWdlUmVjdCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHBhcmVudE1l
ZGlhRWxlbWVudChvYmplY3QpOworICAgIGlmICghbWVkaWFFbGVtZW50KQorICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgc3RhdGljIEltYWdlKiBzb3VuZEZ1bGwgPSBwbGF0Zm9ybVJlc291cmNl
KCJtZWRpYVNvdW5kRnVsbCIpOworICAgIHN0YXRpYyBJbWFnZSogc291bmROb25lID0gcGxhdGZv
cm1SZXNvdXJjZSgibWVkaWFTb3VuZE5vbmUiKTsKKyAgICBzdGF0aWMgSW1hZ2UqIHNvdW5kRGlz
YWJsZWQgPSBwbGF0Zm9ybVJlc291cmNlKCJtZWRpYVNvdW5kRGlzYWJsZWQiKTsKKworICAgIGlm
IChtZWRpYUVsZW1lbnQtPm5ldHdvcmtTdGF0ZSgpID09IEhUTUxNZWRpYUVsZW1lbnQ6Ok5FVFdP
UktfTk9fU09VUkNFIHx8ICFtZWRpYUVsZW1lbnQtPmhhc0F1ZGlvKCkpCisgICAgICAgIHJldHVy
biBwYWludE1lZGlhQnV0dG9uKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBzb3VuZERpc2FibGVk
KTsKKworICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHBhaW50SW5mby5jb250ZXh0LCByZWN0
LCBtZWRpYUVsZW1lbnQtPm11dGVkKCkgPyBzb3VuZE5vbmU6IHNvdW5kRnVsbCk7Cit9CisKK3N0
YXRpYyBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxl
bWVudChvYmplY3QpOworICAgIGlmICghbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhUGxheSA9IHBsYXRmb3JtUmVzb3VyY2UoIm1l
ZGlhUGxheSIpOworICAgIHN0YXRpYyBJbWFnZSogbWVkaWFQYXVzZSA9IHBsYXRmb3JtUmVzb3Vy
Y2UoIm1lZGlhUGF1c2UiKTsKKyAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhUGxheURpc2FibGVkID0g
cGxhdGZvcm1SZXNvdXJjZSgibWVkaWFQbGF5RGlzYWJsZWQiKTsKKworICAgIGlmIChtZWRpYUVs
ZW1lbnQtPm5ldHdvcmtTdGF0ZSgpID09IEhUTUxNZWRpYUVsZW1lbnQ6Ok5FVFdPUktfTk9fU09V
UkNFKQorICAgICAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihwYWludEluZm8uY29udGV4dCwg
cmVjdCwgbWVkaWFQbGF5RGlzYWJsZWQpOworCisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24o
cGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhRWxlbWVudC0+cGF1c2VkKCkgPyBtZWRpYVBs
YXkgOiBtZWRpYVBhdXNlKTsKK30KKworc3RhdGljIGJvb2wgcGFpbnRNZWRpYVNsaWRlcihSZW5k
ZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVs
ZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQob2JqZWN0KTsKKyAgICBpZiAoIW1lZGlhRWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2Jq
ZWN0LT5zdHlsZSgpOworICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5j
b250ZXh0OworCisgICAgLy8gRHJhdyB0aGUgYm9yZGVyIG9mIHRoZSB0aW1lIGJhci4KKyAgICAv
LyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYSByb3VuZGVkIHJlY3QgYnV0IG5lZWQgdG8gZml4IEdy
YXBoaWNzQ29udGV4dFNraWEgZmlyc3QuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTMwMTQzCisgICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNvbnRleHQt
PnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKKyAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xv
cihzdHlsZS0+Ym9yZGVyTGVmdENvbG9yKCkpOworICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNr
bmVzcyhzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpOworICAgIGNvbnRleHQtPnNldEZpbGxDb2xv
cihzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkpOworICAgIGNvbnRleHQtPmRyYXdSZWN0KHJlY3Qp
OworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKworICAgIC8vIERyYXcgdGhlIGJ1ZmZlcmVkIHJh
bmdlcy4KKyAgICAvLyBGSVhNRTogRHJhdyBtdWx0aXBsZSByYW5nZXMgaWYgdGhlcmUgYXJlIG11
bHRpcGxlIGJ1ZmZlcmVkIHJhbmdlcy4KKyAgICAvLyBGSVhNRTogcGVyY2VudExvYWRlZCgpIGRv
ZXNuJ3QgYWx3YXlzIGhpdCAxLjAgc28gd2UncmUgdXNpbmcgcm91bmQoKS4KKyAgICBJbnRSZWN0
IGJ1ZmZlcmVkUmVjdCA9IHJlY3Q7CisgICAgYnVmZmVyZWRSZWN0LmluZmxhdGUoLXN0eWxlLT5i
b3JkZXJMZWZ0V2lkdGgoKSk7CisgICAgYnVmZmVyZWRSZWN0LnNldFdpZHRoKHJvdW5kKChidWZm
ZXJlZFJlY3Qud2lkdGgoKSAqIG1lZGlhRWxlbWVudC0+cGVyY2VudExvYWRlZCgpKSkpOworCisg
ICAgLy8gRG9uJ3QgYm90aGVyIGRyYXdpbmcgYW4gZW1wdHkgYXJlYS4KKyAgICBpZiAoIWJ1ZmZl
cmVkUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgSW50UG9pbnQgc2xpZGVyVG9wTGVmdCA9IGJ1
ZmZlcmVkUmVjdC5sb2NhdGlvbigpOworICAgICAgICBJbnRQb2ludCBzbGlkZXJUb3BSaWdodCA9
IHNsaWRlclRvcExlZnQ7CisgICAgICAgIHNsaWRlclRvcFJpZ2h0Lm1vdmUoMCwgYnVmZmVyZWRS
ZWN0LmhlaWdodCgpKTsKKworICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50ID0gR3Jh
ZGllbnQ6OmNyZWF0ZShzbGlkZXJUb3BMZWZ0LCBzbGlkZXJUb3BSaWdodCk7CisgICAgICAgIENv
bG9yIHN0YXJ0Q29sb3IgPSBvYmplY3QtPnN0eWxlKCktPmNvbG9yKCk7CisgICAgICAgIGdyYWRp
ZW50LT5hZGRDb2xvclN0b3AoMC4wLCBzdGFydENvbG9yKTsKKyAgICAgICAgZ3JhZGllbnQtPmFk
ZENvbG9yU3RvcCgxLjAsIENvbG9yKHN0YXJ0Q29sb3IucmVkKCkgLyAyLCBzdGFydENvbG9yLmdy
ZWVuKCkgLyAyLCBzdGFydENvbG9yLmJsdWUoKSAvIDIsIHN0YXJ0Q29sb3IuYWxwaGEoKSkpOwor
CisgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5
bGUoTm9TdHJva2UpOworICAgICAgICBjb250ZXh0LT5zZXRGaWxsR3JhZGllbnQoZ3JhZGllbnQp
OworICAgICAgICBjb250ZXh0LT5kcmF3UmVjdChidWZmZXJlZFJlY3QpOworICAgICAgICBjb250
ZXh0LT5yZXN0b3JlKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBi
b29sIHBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICBpZiAoIW9iamVjdC0+cGFyZW50KCktPmlzU2xpZGVyKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHN0YXRpYyBJbWFnZSogbWVkaWFTbGlkZXJUaHVtYiA9IHBsYXRmb3JtUmVz
b3VyY2UoIm1lZGlhU2xpZGVyVGh1bWIiKTsKKyAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihw
YWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFTbGlkZXJUaHVtYik7Cit9CisKK3N0YXRpYyBi
b29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50
KG9iamVjdCk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OworICAg
IENvbG9yIG9yaWdpbmFsQ29sb3IgPSBjb250ZXh0LT5zdHJva2VDb2xvcigpOworICAgIGlmIChv
cmlnaW5hbENvbG9yICE9IENvbG9yOjp3aGl0ZSkKKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tl
Q29sb3IoQ29sb3I6OndoaXRlKTsKKworICAgIGludCB4ID0gcmVjdC54KCkgKyByZWN0LndpZHRo
KCkgLyAyOworICAgIGNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KHgsIHJlY3QueSgpKSwgIElu
dFBvaW50KHgsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSkpOworCisgICAgaWYgKG9yaWdpbmFs
Q29sb3IgIT0gQ29sb3I6OndoaXRlKQorICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihv
cmlnaW5hbENvbG9yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgcGFpbnRN
ZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IGlmICghb2JqZWN0LT5wYXJlbnQoKS0+aXNTbGlkZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgc3RhdGljIEltYWdlKiBtZWRpYVZvbHVtZVNsaWRlclRodW1iID0gcGxhdGZvcm1S
ZXNvdXJjZSgibWVkaWFWb2x1bWVTbGlkZXJUaHVtYiIpOworICAgIHJldHVybiBwYWludE1lZGlh
QnV0dG9uKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYVZvbHVtZVNsaWRlclRodW1iKTsK
K30KKworc3RhdGljIGJvb2wgcGFpbnRNZWRpYVRpbWVsaW5lQ29udGFpbmVyKFJlbmRlck9iamVj
dCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9
IHBhcmVudE1lZGlhRWxlbWVudChvYmplY3QpOworICAgIGlmICghbWVkaWFFbGVtZW50KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAg
IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OworICAgICAgICBD
b2xvciBvcmlnaW5hbENvbG9yID0gY29udGV4dC0+c3Ryb2tlQ29sb3IoKTsKKyAgICAgICAgZmxv
YXQgb3JpZ2luYWxUaGlja25lc3MgPSBjb250ZXh0LT5zdHJva2VUaGlja25lc3MoKTsKKyAgICAg
ICAgU3Ryb2tlU3R5bGUgb3JpZ2luYWxTdHlsZSA9IGNvbnRleHQtPnN0cm9rZVN0eWxlKCk7CisK
KyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOworCisgICAgICAg
IC8vIERyYXcgdGhlIGxlZnQgYm9yZGVyIHVzaW5nIENTUyBkZWZpbmVkIHdpZHRoIGFuZCBjb2xv
ci4KKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKG9iamVjdC0+c3R5bGUoKS0+
Ym9yZGVyTGVmdFdpZHRoKCkpOworICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvYmpl
Y3QtPnN0eWxlKCktPmJvcmRlckxlZnRDb2xvcigpLnJnYigpKTsKKyAgICAgICAgY29udGV4dC0+
ZHJhd0xpbmUoSW50UG9pbnQocmVjdC54KCkgKyAxLCByZWN0LnkoKSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIEludFBvaW50KHJlY3QueCgpICsgMSwgcmVjdC55KCkgKyByZWN0LmhlaWdo
dCgpKSk7CisKKyAgICAgICAgLy8gRHJhdyB0aGUgcmlnaHQgYm9yZGVyIHVzaW5nIENTUyBkZWZp
bmVkIHdpZHRoIGFuZCBjb2xvci4KKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNz
KG9iamVjdC0+c3R5bGUoKS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsKKyAgICAgICAgY29udGV4dC0+
c2V0U3Ryb2tlQ29sb3Iob2JqZWN0LT5zdHlsZSgpLT5ib3JkZXJSaWdodENvbG9yKCkucmdiKCkp
OworICAgICAgICBjb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChyZWN0LngoKSArIHJlY3Qud2lk
dGgoKSAtIDEsIHJlY3QueSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQo
cmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSAxLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpKTsK
KworICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvcmlnaW5hbENvbG9yKTsKKyAgICAg
ICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKG9yaWdpbmFsVGhpY2tuZXNzKTsKKyAgICAg
ICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUob3JpZ2luYWxTdHlsZSk7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6c2hvdWxk
UmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFydCBwYXJ0LCBFbGVtZW50KiBlKQorewor
ICAgIFVOVVNFRF9QQVJBTShlKTsKKworICAgIHN3aXRjaCAocGFydCkgeworICAgIGNhc2UgTWVk
aWFNdXRlQnV0dG9uUGFydDoKKyAgICBjYXNlIE1lZGlhUGxheUJ1dHRvblBhcnQ6CisgICAgY2Fz
ZSBNZWRpYVNsaWRlclBhcnQ6CisgICAgY2FzZSBNZWRpYVNsaWRlclRodW1iUGFydDoKKyAgICBj
YXNlIE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyUGFydDoKKyAgICBjYXNlIE1lZGlhVm9sdW1l
U2xpZGVyUGFydDoKKyAgICBjYXNlIE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0OgorICAgIGNh
c2UgTWVkaWFDb250cm9sc0JhY2tncm91bmRQYXJ0OgorICAgIGNhc2UgTWVkaWFDdXJyZW50VGlt
ZVBhcnQ6CisgICAgY2FzZSBNZWRpYVRpbWVSZW1haW5pbmdQYXJ0OgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlck1lZGlhQ29u
dHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYUNvbnRyb2xFbGVtZW50
VHlwZSBwYXJ0LCBSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBzd2l0Y2ggKHBh
cnQpIHsKKyAgICBjYXNlIE1lZGlhTXV0ZUJ1dHRvbjoKKyAgICBjYXNlIE1lZGlhVW5NdXRlQnV0
dG9uOgorICAgICAgICByZXR1cm4gcGFpbnRNZWRpYU11dGVCdXR0b24ob2JqZWN0LCBwYWludElu
Zm8sIHJlY3QpOworICAgIGNhc2UgTWVkaWFQYXVzZUJ1dHRvbjoKKyAgICBjYXNlIE1lZGlhUGxh
eUJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIHBhaW50TWVkaWFQbGF5QnV0dG9uKG9iamVjdCwgcGFp
bnRJbmZvLCByZWN0KTsKKyAgICBjYXNlIE1lZGlhU2xpZGVyOgorICAgICAgICByZXR1cm4gcGFp
bnRNZWRpYVNsaWRlcihvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CisgICAgY2FzZSBNZWRpYVNs
aWRlclRodW1iOgorICAgICAgICByZXR1cm4gcGFpbnRNZWRpYVNsaWRlclRodW1iKG9iamVjdCwg
cGFpbnRJbmZvLCByZWN0KTsKKyAgICBjYXNlIE1lZGlhVm9sdW1lU2xpZGVyOgorICAgICAgICBy
ZXR1cm4gcGFpbnRNZWRpYVZvbHVtZVNsaWRlcihvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7Cisg
ICAgY2FzZSBNZWRpYVZvbHVtZVNsaWRlclRodW1iOgorICAgICAgICByZXR1cm4gcGFpbnRNZWRp
YVZvbHVtZVNsaWRlclRodW1iKG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKKyAgICBjYXNlIE1l
ZGlhVGltZWxpbmVDb250YWluZXI6CisgICAgICAgIHJldHVybiBwYWludE1lZGlhVGltZWxpbmVD
b250YWluZXIob2JqZWN0LCBwYWludEluZm8sIHJlY3QpOworICAgIGNhc2UgTWVkaWFGdWxsc2Ny
ZWVuQnV0dG9uOgorICAgIGNhc2UgTWVkaWFTZWVrQmFja0J1dHRvbjoKKyAgICBjYXNlIE1lZGlh
U2Vla0ZvcndhcmRCdXR0b246CisgICAgY2FzZSBNZWRpYVZvbHVtZVNsaWRlckNvbnRhaW5lcjoK
KyAgICBjYXNlIE1lZGlhQ3VycmVudFRpbWVEaXNwbGF5OgorICAgIGNhc2UgTWVkaWFUaW1lUmVt
YWluaW5nRGlzcGxheToKKyAgICBjYXNlIE1lZGlhQ29udHJvbHNQYW5lbDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjphZGp1c3RNZWRpYVNs
aWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBzdGF0aWMgSW1hZ2Uq
IG1lZGlhU2xpZGVyVGh1bWIgPSBwbGF0Zm9ybVJlc291cmNlKCJtZWRpYVNsaWRlclRodW1iIik7
CisgICAgc3RhdGljIEltYWdlKiBtZWRpYVZvbHVtZVNsaWRlclRodW1iID0gcGxhdGZvcm1SZXNv
dXJjZSgibWVkaWFWb2x1bWVTbGlkZXJUaHVtYiIpOworCisgICAgSW1hZ2UqIHRodW1iSW1hZ2Ug
PSAwOworICAgIGlmIChvYmplY3QtPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVNsaWRl
clRodW1iUGFydCkKKyAgICAgICAgdGh1bWJJbWFnZSA9IG1lZGlhU2xpZGVyVGh1bWI7CisgICAg
ZWxzZSBpZiAob2JqZWN0LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlk
ZXJUaHVtYlBhcnQpCisgICAgICAgIHRodW1iSW1hZ2UgPSBtZWRpYVZvbHVtZVNsaWRlclRodW1i
OworCisgICAgaWYgKHRodW1iSW1hZ2UpIHsKKyAgICAgICAgb2JqZWN0LT5zdHlsZSgpLT5zZXRX
aWR0aChMZW5ndGgodGh1bWJJbWFnZS0+d2lkdGgoKSwgRml4ZWQpKTsKKyAgICAgICAgb2JqZWN0
LT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHRodW1iSW1hZ2UtPmhlaWdodCgpLCBGaXhlZCkp
OworICAgIH0KK30KKworI2VuZGlmICAvLyAjaWYgRU5BQkxFKFZJREVPKQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNv
bnRyb2xzQ2hyb21pdW0uaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHND
aHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYmI0NmIKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzQ2hy
b21pdW0uaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW1faAorI2RlZmluZSBSZW5kZXJNZWRpYUNv
bnRyb2xzQ2hyb21pdW1faAorCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAi
TWVkaWFDb250cm9sRWxlbWVudHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBI
VE1MTWVkaWFFbGVtZW50OworY2xhc3MgUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENvbnRy
b2xQYXJ0IHBhcnQsIEVsZW1lbnQqIGUpOworICAgIHN0YXRpYyBib29sIHBhaW50TWVkaWFDb250
cm9sc1BhcnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUsIFJlbmRlck9iamVjdCosIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHN0YXRpYyB2b2lk
IGFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCopOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVt
X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMu
aCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMuaAppbmRleCA5ZjQx
MmEwLi42MWI1ZThmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtTWFjLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yy5oCkBAIC0xMjEsNiArMTIxLDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAogI2lmIEVOQUJMRShWSURFTykKKyAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFydCwg
RWxlbWVudCopOwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVh
bCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0gYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCmluZGV4IDY5NWY5ZmEuLmJjZmNkNTcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0KKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQpAQCAtMjksNyArMjksNiBA
QAogI2ltcG9ydCAiRG9jdW1lbnQuaCIKICNpbXBvcnQgIkVsZW1lbnQuaCIKICNpbXBvcnQgIkZy
YW1lVmlldy5oIgotI2ltcG9ydCAiR3JhZGllbnQuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2ltcG9ydCAiSFRNTElucHV0RWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTE1lZGlhRWxl
bWVudC5oIgpAQCAtMzgsNiArMzcsNyBAQAogI2ltcG9ydCAiTG9jYWxDdXJyZW50R3JhcGhpY3ND
b250ZXh0LmgiCiAjaW1wb3J0ICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgogI2ltcG9ydCAiUmVu
ZGVyTWVkaWEuaCIKKyNpbXBvcnQgIlJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5oIgogI2lt
cG9ydCAiUmVuZGVyU2xpZGVyLmgiCiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJT
aGFyZWRCdWZmZXIuaCIKQEAgLTEyNTEsMjAgKzEyNTEsNiBAQCBib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotI2lmIEVOQUJMRShWSURFTykKLXN0YXRpYyBJ
bWFnZSogbWVkaWFTbGlkZXJUaHVtYkltYWdlKCkKLXsKLSAgICBzdGF0aWMgSW1hZ2UqIG1lZGlh
U2xpZGVyVGh1bWIgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhU2xpZGVyVGh1
bWIiKS5yZWxlYXNlUmVmKCk7Ci0gICAgcmV0dXJuIG1lZGlhU2xpZGVyVGh1bWI7Ci19Ci0gIAot
c3RhdGljIEltYWdlKiBtZWRpYVZvbHVtZVNsaWRlclRodW1iSW1hZ2UoKQotewotICAgIHN0YXRp
YyBJbWFnZSogbWVkaWFWb2x1bWVTbGlkZXJUaHVtYiA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNv
dXJjZSgibWVkaWFWb2x1bWVTbGlkZXJUaHVtYiIpLnJlbGVhc2VSZWYoKTsKLSAgICByZXR1cm4g
bWVkaWFWb2x1bWVTbGlkZXJUaHVtYjsKLX0KLSNlbmRpZgotCiB2b2lkIFJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiB7
CiAgICAgc3RhdGljIGNvbnN0IGludCBzbGlkZXJUaHVtYldpZHRoID0gMTU7CkBAIC0xMjc3LDE2
ICsxMjYzLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUaHVt
YlNpemUoUmVuZGVyT2JqZWN0KiBvKSBjb25zdAogICAgIH0KIAogI2lmIEVOQUJMRShWSURFTykK
LSAgICBJbWFnZSogdGh1bWJJbWFnZSA9IDA7Ci0gICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFu
Y2UoKSA9PSBNZWRpYVNsaWRlclRodW1iUGFydCkKLSAgICAgICAgdGh1bWJJbWFnZSA9IG1lZGlh
U2xpZGVyVGh1bWJJbWFnZSgpOwotICAgIGVsc2UgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2Uo
KSA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCkKLSAgICAgICAgdGh1bWJJbWFnZSA9IG1l
ZGlhVm9sdW1lU2xpZGVyVGh1bWJJbWFnZSgpOwotICAKLSAgICBpZiAodGh1bWJJbWFnZSkgewot
ICAgICAgICBvLT5zdHlsZSgpLT5zZXRXaWR0aChMZW5ndGgodGh1bWJJbWFnZS0+d2lkdGgoKSwg
Rml4ZWQpKTsKLSAgICAgICAgby0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aCh0aHVtYkltYWdl
LT5oZWlnaHQoKSwgRml4ZWQpKTsKLSAgICB9CisgICAgUmVuZGVyTWVkaWFDb250cm9sc0Nocm9t
aXVtOjphZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShvKTsKICNlbmRpZgogfQogCkBAIC0xNTM3
LDE3MyArMTUxNCw0NCBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29ucwogfQogCiAjaWYgRU5BQkxF
KFZJREVPKQotLy8gQXR0ZW1wdCB0byByZXRyaWV2ZSBhIEhUTUxNZWRpYUVsZW1lbnQgZnJvbSBh
IE5vZGUuIFJldHVybnMgMCBpZiBvbmUgY2Fubm90IGJlIGZvdW5kLgotc3RhdGljIEhUTUxNZWRp
YUVsZW1lbnQqIG1lZGlhRWxlbWVudFBhcmVudChOb2RlKiBub2RlKQotewotICAgIGlmICghbm9k
ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgTm9kZSogbWVkaWFOb2RlID0gbm9kZS0+c2hhZG93
QW5jZXN0b3JOb2RlKCk7Ci0gICAgaWYgKCFtZWRpYU5vZGUgfHwgKCFtZWRpYU5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp2aWRlb1RhZykgJiYgIW1lZGlhTm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmF1ZGlvVGFnKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtZWRpYU5vZGUpOwotfQotCi1ib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIEltYWdlKiBpbWFnZSkKK2Jvb2wgUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6c2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFy
dCBwYXJ0LCBFbGVtZW50KiBlKQogewotICAgIC8vIENyZWF0ZSBhIGRlc3RpbmF0aW9uIHJlY3Rh
bmdsZSBmb3IgdGhlIGltYWdlIHRoYXQgaXMgY2VudGVyZWQgaW4gdGhlIGRyYXdpbmcgcmVjdGFu
Z2xlLCByb3VuZGVkIGxlZnQsIGFuZCBkb3duLgotICAgIEludFJlY3QgaW1hZ2VSZWN0ID0gaW1h
Z2UtPnJlY3QoKTsKLSAgICBpbWFnZVJlY3Quc2V0WShyZWN0LnkoKSArIChyZWN0LmhlaWdodCgp
IC0gaW1hZ2UtPmhlaWdodCgpICsgMSkgLyAyKTsKLSAgICBpbWFnZVJlY3Quc2V0WChyZWN0Lngo
KSArIChyZWN0LndpZHRoKCkgLSBpbWFnZS0+d2lkdGgoKSArIDEpIC8gMik7Ci0KLSAgICBjb250
ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIGltYWdlUmVjdCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6c2hvdWxkUmVuZGVyTWVkaWFDb250
cm9sUGFydChwYXJ0LCBlKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWlu
dE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBIVE1M
TWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQob2JqZWN0LT5u
b2RlKCkpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhUGxheSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZSgibWVkaWFQbGF5IikucmVsZWFzZVJlZigpOwotICAgIHN0YXRpYyBJbWFnZSogbWVkaWFQYXVz
ZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFQYXVzZSIpLnJlbGVhc2VSZWYo
KTsKLSAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhUGxheURpc2FibGVkID0gSW1hZ2U6OmxvYWRQbGF0
Zm9ybVJlc291cmNlKCJtZWRpYVBsYXlEaXNhYmxlZCIpLnJlbGVhc2VSZWYoKTsKLQotICAgIGlm
IChtZWRpYUVsZW1lbnQtPm5ldHdvcmtTdGF0ZSgpID09IEhUTUxNZWRpYUVsZW1lbnQ6Ok5FVFdP
UktfTk9fU09VUkNFKQotICAgICAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBh
aW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYVBsYXlEaXNhYmxlZCk7Ci0KLSAgICByZXR1cm4g
cGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYUVs
ZW1lbnQtPnBhdXNlZCgpID8gbWVkaWFQbGF5IDogbWVkaWFQYXVzZSk7CisgICAgcmV0dXJuIFJl
bmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVBs
YXlCdXR0b24sIG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1l
bnRQYXJlbnQob2JqZWN0LT5ub2RlKCkpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSW1hZ2UqIHNvdW5kRnVsbCA9IEltYWdlOjps
b2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFTb3VuZEZ1bGwiKS5yZWxlYXNlUmVmKCk7Ci0gICAg
c3RhdGljIEltYWdlKiBzb3VuZE5vbmUgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1l
ZGlhU291bmROb25lIikucmVsZWFzZVJlZigpOwotICAgIHN0YXRpYyBJbWFnZSogc291bmREaXNh
YmxlZCA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFTb3VuZERpc2FibGVkIiku
cmVsZWFzZVJlZigpOwotCi0gICAgaWYgKG1lZGlhRWxlbWVudC0+bmV0d29ya1N0YXRlKCkgPT0g
SFRNTE1lZGlhRWxlbWVudDo6TkVUV09SS19OT19TT1VSQ0UgfHwgIW1lZGlhRWxlbWVudC0+aGFz
QXVkaW8oKSkKLSAgICAgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChwYWludElu
Zm8uY29udGV4dCwgcmVjdCwgc291bmREaXNhYmxlZCk7Ci0KLSAgICByZXR1cm4gcGFpbnRNZWRp
YUJ1dHRvbkludGVybmFsKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYUVsZW1lbnQtPm11
dGVkKCkgPyBzb3VuZE5vbmUgOiBzb3VuZEZ1bGwpOworICAgIHJldHVybiBSZW5kZXJNZWRpYUNv
bnRyb2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFNdXRlQnV0dG9uLCBv
YmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewot
ICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChv
YmplY3QtPm5vZGUoKSk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsgICAgCi0g
ICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7Ci0gICAgY29u
dGV4dC0+c2F2ZSgpOwotICAgIAotICAgIGNvbnRleHQtPnNldFNob3VsZEFudGlhbGlhcyh0cnVl
KTsKLQotICAgIEludFNpemUgdG9wTGVmdFJhZGl1cyA9IHN0eWxlLT5ib3JkZXJUb3BMZWZ0UmFk
aXVzKCk7Ci0gICAgSW50U2l6ZSB0b3BSaWdodFJhZGl1cyA9IHN0eWxlLT5ib3JkZXJUb3BSaWdo
dFJhZGl1cygpOwotICAgIEludFNpemUgYm90dG9tTGVmdFJhZGl1cyA9IHN0eWxlLT5ib3JkZXJC
b3R0b21MZWZ0UmFkaXVzKCk7Ci0gICAgSW50U2l6ZSBib3R0b21SaWdodFJhZGl1cyA9IHN0eWxl
LT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpOwotICAgIGZsb2F0IGJvcmRlcldpZHRoID0gc3R5
bGUtPmJvcmRlckxlZnRXaWR0aCgpOwotCi0gICAgLy8gRHJhdyB0aGUgYm9yZGVyIG9mIHRoZSB0
aW1lIGJhci4KLSAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihzdHlsZS0+Ym9yZGVyTGVmdENv
bG9yKCkpOwotICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhib3JkZXJXaWR0aCk7Ci0g
ICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSk7Ci0gICAg
Y29udGV4dC0+YWRkUGF0aChQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHJlY3QsIHRvcExl
ZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJh
ZGl1cykpOwotICAgIGNvbnRleHQtPmRyYXdQYXRoKCk7Ci0gICAgCi0gICAgLy8gRHJhdyB0aGUg
YnVmZmVyZWQgcmFuZ2VzLgotICAgIC8vIEZJWE1FOiBEcmF3IG11bHRpcGxlIHJhbmdlcyBpZiB0
aGVyZSBhcmUgbXVsdGlwbGUgYnVmZmVyZWQgcmFuZ2VzLgotICAgIEZsb2F0UmVjdCBidWZmZXJl
ZFJlY3QgPSByZWN0OwotICAgIGJ1ZmZlcmVkUmVjdC5pbmZsYXRlKC0xLjAgLSBib3JkZXJXaWR0
aCk7Ci0gICAgYnVmZmVyZWRSZWN0LnNldFdpZHRoKGJ1ZmZlcmVkUmVjdC53aWR0aCgpICogbWVk
aWFFbGVtZW50LT5wZXJjZW50TG9hZGVkKCkpOwotICAgIGJ1ZmZlcmVkUmVjdCA9IGNvbnRleHQt
PnJvdW5kVG9EZXZpY2VQaXhlbHMoYnVmZmVyZWRSZWN0KTsKLSAgIAotICAgIC8vIERvbid0IGJv
dGhlciBkcmF3aW5nIGFuIGVtcHR5IGFyZWEuCi0gICAgaWYgKGJ1ZmZlcmVkUmVjdC53aWR0aCgp
ID4gMCAmJiBidWZmZXJlZFJlY3QuaGVpZ2h0KCkgPiAwKSB7Ci0gICAgICAgIEZsb2F0UG9pbnQg
c2xpZGVyVG9wTGVmdCA9IGJ1ZmZlcmVkUmVjdC5sb2NhdGlvbigpOwotICAgICAgICBGbG9hdFBv
aW50IHNsaWRlclRvcFJpZ2h0ID0gc2xpZGVyVG9wTGVmdDsKLSAgICAgICAgc2xpZGVyVG9wUmln
aHQubW92ZSgwLjBmLCBidWZmZXJlZFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAKLSAgICAgICAg
UmVmUHRyPEdyYWRpZW50PiBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoc2xpZGVyVG9wTGVm
dCwgc2xpZGVyVG9wUmlnaHQpOwotICAgICAgICBDb2xvciBzdGFydENvbG9yID0gb2JqZWN0LT5z
dHlsZSgpLT5jb2xvcigpOwotICAgICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgc3Rh
cnRDb2xvcik7Ci0gICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBDb2xvcihzdGFy
dENvbG9yLnJlZCgpIC8gMiwgc3RhcnRDb2xvci5ncmVlbigpIC8gMiwgc3RhcnRDb2xvci5ibHVl
KCkgLyAyLCBzdGFydENvbG9yLmFscGhhKCkpKTsKLSAKLSAgICAgICAgY29udGV4dC0+c2V0Rmls
bEdyYWRpZW50KGdyYWRpZW50KTsKLSAgICAgICAgY29udGV4dC0+YWRkUGF0aChQYXRoOjpjcmVh
dGVSb3VuZGVkUmVjdGFuZ2xlKGJ1ZmZlcmVkUmVjdCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRS
YWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7Ci0gICAgICAgIGNv
bnRleHQtPmZpbGxQYXRoKCk7Ci0gICAgfQotICAgIAotICAgIGNvbnRleHQtPnJlc3RvcmUoKTsg
ICAgCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJv
bWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVNsaWRlciwgb2JqZWN0LCBwYWludElu
Zm8sIHJlY3QpOwogfQogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFW
b2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBIVE1M
TWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQob2JqZWN0LT5u
b2RlKCkpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsKLSAgICBD
b2xvciBvcmlnaW5hbENvbG9yID0gY29udGV4dC0+c3Ryb2tlQ29sb3IoKTsKLSAgICBpZiAob3Jp
Z2luYWxDb2xvciAhPSBDb2xvcjo6d2hpdGUpCi0gICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNv
bG9yKENvbG9yOjp3aGl0ZSk7Ci0KLSAgICBpbnQgeCA9IHJlY3QueCgpICsgcmVjdC53aWR0aCgp
IC8gMjsKLSAgICBjb250ZXh0LT5kcmF3TGluZShJbnRQb2ludCh4LCByZWN0LnkoKSksICBJbnRQ
b2ludCh4LCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpKTsKLSAgICAKLSAgICBpZiAob3JpZ2lu
YWxDb2xvciAhPSBDb2xvcjo6d2hpdGUpCi0gICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9y
KG9yaWdpbmFsQ29sb3IpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBSZW5kZXJNZWRp
YUNvbnRyb2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFWb2x1bWVTbGlk
ZXIsIG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7Ci0gICAgaWYgKCFvYmplY3QtPnBhcmVudCgpLT5pc1NsaWRlcigpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBhaW50SW5m
by5jb250ZXh0LCByZWN0LCBtZWRpYVNsaWRlclRodW1iSW1hZ2UoKSk7CisgICAgcmV0dXJuIFJl
bmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVNs
aWRlclRodW1iLCBvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiB9CiAKIGJvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewotICAgIGlmICghb2JqZWN0LT5wYXJlbnQoKS0+aXNTbGlkZXIoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRl
cm5hbChwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFWb2x1bWVTbGlkZXJUaHVtYkltYWdl
KCkpOworICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OnBhaW50TWVkaWFD
b250cm9sc1BhcnQoTWVkaWFWb2x1bWVTbGlkZXJUaHVtYiwgb2JqZWN0LCBwYWludEluZm8sIHJl
Y3QpOwogfQogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFDb250cm9s
c0JhY2tncm91bmQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50KG9iamVjdC0+bm9kZSgp
KTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKCFyZWN0LmlzRW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCA9IHBhaW50SW5mby5jb250ZXh0OwotICAgICAgICBDb2xvciBvcmlnaW5hbENvbG9yID0g
Y29udGV4dC0+c3Ryb2tlQ29sb3IoKTsKLSAKLSAgICAgICAgLy8gRHJhd3MgdGhlIGxlZnQgYm9y
ZGVyLCBpdCBpcyBhbHdheXMgMXB4IHdpZGUuCi0gICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNv
bG9yKG9iamVjdC0+c3R5bGUoKS0+Ym9yZGVyTGVmdENvbG9yKCkpOwotICAgICAgICBjb250ZXh0
LT5kcmF3TGluZShJbnRQb2ludChyZWN0LngoKSArIDEsIHJlY3QueSgpKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW50UG9pbnQocmVjdC54KCkgKyAxLCByZWN0LnkoKSArIHJlY3QuaGVp
Z2h0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgICAgICAvLyBEcmF3cyB0
aGUgcmlnaHQgYm9yZGVyLCBpdCBpcyBhbHdheXMgMXB4IHdpZGUuCi0gICAgICAgIGNvbnRleHQt
PnNldFN0cm9rZUNvbG9yKG9iamVjdC0+c3R5bGUoKS0+Ym9yZGVyUmlnaHRDb2xvcigpKTsKLSAg
ICAgICAgY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQocmVjdC54KCkgKyByZWN0LndpZHRoKCkg
LSAxLCByZWN0LnkoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KHJlY3Qu
eCgpICsgcmVjdC53aWR0aCgpIC0gMSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKSk7Ci0gICAg
ICAgIAotICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvcmlnaW5hbENvbG9yKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJv
bWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVRpbWVsaW5lQ29udGFpbmVyLCBvYmpl
Y3QsIHBhaW50SW5mbywgcmVjdCk7CiB9CiAgICAgCiBTdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAKaW5kZXggNGY0ODZkNS4uM2EzOTQyMyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcApAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUg
IlJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5o
IgogI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgi
CkBAIC05NiwyMCArOTcsNiBAQCBzdGF0aWMgdm9pZCBkcmF3Qm94KFNrQ2FudmFzKiBjYW52YXMs
IGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IFNrUGFpbnQmIHBhaW50KQogICAgIGRyYXdWZXJ0
TGluZShjYW52YXMsIHJlY3QueCgpLCByZWN0LnkoKSwgYm90dG9tLCBwYWludCk7CiB9CiAKLSNp
ZiBFTkFCTEUoVklERU8pCi0vLyBBdHRlbXB0IHRvIHJldHJpZXZlIGEgSFRNTE1lZGlhRWxlbWVu
dCBmcm9tIGEgTm9kZS4gUmV0dXJucyBOVUxMIGlmIG9uZSBjYW5ub3QgYmUgZm91bmQuCi1zdGF0
aWMgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50UGFyZW50KE5vZGUqIG5vZGUpCi17Ci0g
ICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gMDsKLSAgICBOb2RlKiBtZWRpYU5vZGUgPSBu
b2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKLSAgICBpZiAoIW1lZGlhTm9kZSB8fCAoIW1lZGlh
Tm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKSAmJiAhbWVkaWFOb2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6YXVkaW9UYWcpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1lZGlhTm9kZSk7Ci19Ci0jZW5k
aWYKLQogLy8gV2UgYWltIHRvIG1hdGNoIElFIGhlcmUuCiAvLyAtSUUgdXNlcyBhIGZvbnQgYmFz
ZWQgb24gdGhlIGVuY29kaW5nIGFzIHRoZSBkZWZhdWx0IGZvbnQgZm9yIGZvcm0gY29udHJvbHMu
CiAvLyAtR2Vja28gdXNlcyBNUyBTaGVsbCBEbGcgKGFjdHVhbGx5IGNhbGxzIEdldFN0b2NrT2Jq
ZWN0KERFRkFVTFRfR1VJX0ZPTlQpLApAQCAtNDg2LDQyICs0NzMsMTAgQEAgYm9vbCBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb24KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWE6OnBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIEltYWdlKiBpbWFnZSkKLXsKLSAgICAvLyBDcmVhdGUg
YSBkZXN0aW5hdGlvbiByZWN0YW5nbGUgZm9yIHRoZSBpbWFnZSB0aGF0IGlzIGNlbnRlcmVkIGlu
IHRoZSBkcmF3aW5nIHJlY3RhbmdsZSwgcm91bmRlZCBsZWZ0LCBhbmQgZG93bi4KLSAgICBJbnRS
ZWN0IGltYWdlUmVjdCA9IGltYWdlLT5yZWN0KCk7Ci0gICAgaW1hZ2VSZWN0LnNldFkocmVjdC55
KCkgKyAocmVjdC5oZWlnaHQoKSAtIGltYWdlLT5oZWlnaHQoKSArIDEpIC8gMik7Ci0gICAgaW1h
Z2VSZWN0LnNldFgocmVjdC54KCkgKyAocmVjdC53aWR0aCgpIC0gaW1hZ2UtPndpZHRoKCkgKyAx
KSAvIDIpOwotCi0gICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlLCBpbWFnZVJlY3QpOwotICAg
IHJldHVybiB0cnVlOwotfQotCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1l
ZGlhQ29udHJvbHNCYWNrZ3JvdW5kKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogI2lm
IEVOQUJMRShWSURFTykKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRp
YUVsZW1lbnRQYXJlbnQob2JqZWN0LT5ub2RlKCkpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQotICAgIHsK
LSAgICAgICAgU2tDYW52YXMqIGNhbnZhcyA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y2FudmFzKCk7Ci0gICAgICAgIFNrUGFpbnQgcGFpbnQ7Ci0KLSAgICAgICAgLy8g
RHJhd3MgdGhlIGxlZnQgYm9yZGVyLCBpdCBpcyBhbHdheXMgMXB4IHdpZGUuCi0gICAgICAgIHBh
aW50LnNldENvbG9yKG9iamVjdC0+c3R5bGUoKS0+Ym9yZGVyTGVmdENvbG9yKCkucmdiKCkpOwot
ICAgICAgICBjYW52YXMtPmRyYXdMaW5lKHJlY3QueCgpICsgMSwgcmVjdC55KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgcmVjdC54KCkgKyAxLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnQpOwotCi0gICAgICAgIC8vIERyYXdzIHRo
ZSByaWdodCBib3JkZXIsIGl0IGlzIGFsd2F5cyAxcHggd2lkZS4KLSAgICAgICAgcGFpbnQuc2V0
Q29sb3Iob2JqZWN0LT5zdHlsZSgpLT5ib3JkZXJSaWdodENvbG9yKCkucmdiKCkpOwotICAgICAg
ICBjYW52YXMtPmRyYXdMaW5lKHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gMSwgcmVjdC55KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSAxLCBy
ZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnQp
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9s
c0Nocm9taXVtOjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhVGltZWxpbmVDb250YWluZXIs
IG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG9iamVj
dCk7CiAgICAgVU5VU0VEX1BBUkFNKHBhaW50SW5mbyk7CkBAIC01MzMsNjIgKzQ4OCw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFDb250cm9sc0JhY2tncm91bmQo
UmVuZGVyT2JqZWN0KiBvYmplY3QsCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWlu
dE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAjaWYgRU5B
QkxFKFZJREVPKQotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxl
bWVudFBhcmVudChvYmplY3QtPm5vZGUoKSk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBwYWludEluZm8uY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwotICAgIFNrUmVjdCBiYWNrZ3JvdW5k
UmVjdDsKLSAgICBiYWNrZ3JvdW5kUmVjdC5zZXQocmVjdC54KCksIHJlY3QueSgpLCByZWN0Lngo
KSArIHJlY3Qud2lkdGgoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKTsKLQotICAgIFNrUGFp
bnQgcGFpbnQ7Ci0gICAgcGFpbnQuc2V0QW50aUFsaWFzKHRydWUpOwotCi0gICAgLy8gRHJhdyB0
aGUgYm9yZGVyIG9mIHRoZSB0aW1lIGJhci4gVGhlIGJvcmRlciBvbmx5IGhhcyBvbmUgc2luZ2xl
IGNvbG9yLAotICAgIC8vIHdpZHRoIGFuZCByYWRpdXMuIFNvIHVzZSB0aGUgcHJvcGVydHkgb2Yg
dGhlIGxlZnQgYm9yZGVyLgotICAgIFNrQ29sb3IgYm9yZGVyQ29sb3IgPSBvYmplY3QtPnN0eWxl
KCktPmJvcmRlckxlZnRDb2xvcigpLnJnYigpOwotICAgIGludCBib3JkZXJXaWR0aCA9IG9iamVj
dC0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCk7Ci0gICAgSW50U2l6ZSBib3JkZXJSYWRpdXMg
PSBvYmplY3QtPnN0eWxlKCktPmJvcmRlclRvcExlZnRSYWRpdXMoKTsKLSAgICBwYWludC5zZXRT
dHlsZShTa1BhaW50OjprU3Ryb2tlX1N0eWxlKTsKLSAgICBwYWludC5zZXRTdHJva2VXaWR0aChi
b3JkZXJXaWR0aCk7Ci0gICAgcGFpbnQuc2V0Q29sb3IoYm9yZGVyQ29sb3IpOwotICAgIGNhbnZh
cy0+ZHJhd1JvdW5kUmVjdChiYWNrZ3JvdW5kUmVjdCwgYm9yZGVyUmFkaXVzLndpZHRoKCksIGJv
cmRlclJhZGl1cy5oZWlnaHQoKSwgcGFpbnQpOwotCi0gICAgLy8gRHJhdyB0aGUgYmFja2dyb3Vu
ZCBvZiB0aGUgdGltZSBiYXIuCi0gICAgU2tDb2xvciBiYWNrZ3JvdW5kQ29sb3IgPSBvYmplY3Qt
PnN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpLnJnYigpOwotICAgIHBhaW50LnNldFN0eWxlKFNr
UGFpbnQ6OmtGaWxsX1N0eWxlKTsKLSAgICBwYWludC5zZXRDb2xvcihiYWNrZ3JvdW5kQ29sb3Ip
OwotICAgIGNhbnZhcy0+ZHJhd1JvdW5kUmVjdChiYWNrZ3JvdW5kUmVjdCwgYm9yZGVyUmFkaXVz
LndpZHRoKCksIGJvcmRlclJhZGl1cy5oZWlnaHQoKSwgcGFpbnQpOwotCi0gICAgaWYgKGJhY2tn
cm91bmRSZWN0LndpZHRoKCkgPj0gMyAmJiBiYWNrZ3JvdW5kUmVjdC5oZWlnaHQoKSA+PSAzKQot
ICAgIHsKLSAgICAgICAgLy8gRHJhdyB0aGUgYnVmZmVyZWQgcmFuZ2VzLgotICAgICAgICAvLyBG
SVhNRTogRHJhdyBtdWx0aXBsZSByYW5nZXMgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGJ1ZmZlcmVk
IHJhbmdlcy4KLSAgICAgICAgU2tSZWN0IGJ1ZmZlcmVkUmVjdDsKLSAgICAgICAgYnVmZmVyZWRS
ZWN0LnNldChiYWNrZ3JvdW5kUmVjdC5mTGVmdCArIDIsIGJhY2tncm91bmRSZWN0LmZUb3AgKyAy
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRSZWN0LmZSaWdodCAtIDEsIGJh
Y2tncm91bmRSZWN0LmZCb3R0b20gLSAxKTsKLSAgICAgICAgaW50IHdpZHRoID0gc3RhdGljX2Nh
c3Q8aW50PihidWZmZXJlZFJlY3Qud2lkdGgoKSAqIG1lZGlhRWxlbWVudC0+cGVyY2VudExvYWRl
ZCgpKTsKLSAgICAgICAgYnVmZmVyZWRSZWN0LmZSaWdodCA9IGJ1ZmZlcmVkUmVjdC5mTGVmdCAr
IHdpZHRoOwotCi0gICAgICAgIFNrUG9pbnQgcG9pbnRzWzJdID0geyB7IDAsIGJ1ZmZlcmVkUmVj
dC5mVG9wIH0sIHsgMCwgYnVmZmVyZWRSZWN0LmZCb3R0b20gfSB9OwotICAgICAgICBTa0NvbG9y
IHN0YXJ0Q29sb3IgPSBvYmplY3QtPnN0eWxlKCktPmNvbG9yKCkucmdiKCk7Ci0gICAgICAgIFNr
Q29sb3IgZW5kQ29sb3IgPSBTa0NvbG9yU2V0UkdCKFNrQ29sb3JHZXRSKHN0YXJ0Q29sb3IpIC8g
MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tDb2xvckdldEco
c3RhcnRDb2xvcikgLyAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTa0NvbG9yR2V0QihzdGFydENvbG9yKSAvIDIpOwotICAgICAgICBTa0NvbG9yIGNvbG9yc1sy
XSA9IHsgc3RhcnRDb2xvciwgZW5kQ29sb3IgfTsKLSAgICAgICAgU2tTaGFkZXIqIGdyYWRpZW50
ID0gU2tHcmFkaWVudFNoYWRlcjo6Q3JlYXRlTGluZWFyKHBvaW50cywgY29sb3JzLCAwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZW9mKHBvaW50cykgLyBzaXplb2YocG9pbnRzWzBdKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2hhZGVyOjprTWlycm9y
X1RpbGVNb2RlLCAwKTsKLQotICAgICAgICBwYWludC5yZXNldCgpOwotICAgICAgICBwYWludC5z
ZXRTaGFkZXIoZ3JhZGllbnQpOwotICAgICAgICBwYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7Ci0g
ICAgICAgIC8vIENoZWNrIGZvciByb3VuZCByZWN0IHdpdGggemVybyB3aWR0aCBvciBoZWlnaHQs
IG90aGVyd2lzZSBTa2lhIHdpbGwgYXNzZXJ0Ci0gICAgICAgIGlmIChidWZmZXJlZFJlY3Qud2lk
dGgoKSA+IDAgJiYgYnVmZmVyZWRSZWN0LmhlaWdodCgpID4gMCkKLSAgICAgICAgICAgIGNhbnZh
cy0+ZHJhd1JvdW5kUmVjdChidWZmZXJlZFJlY3QsIGJvcmRlclJhZGl1cy53aWR0aCgpLCBib3Jk
ZXJSYWRpdXMuaGVpZ2h0KCksIHBhaW50KTsKLSAgICAgICAgZ3JhZGllbnQtPnVucmVmKCk7Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hy
b21pdW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFTbGlkZXIsIG9iamVjdCwgcGFpbnRJ
bmZvLCByZWN0KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7CiAgICAgVU5VU0VE
X1BBUkFNKHBhaW50SW5mbyk7CkBAIC02MDAsMTcgKzUwMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG9iamVjdCwg
Y29uc3QKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFWb2x1bWVTbGlk
ZXJUcmFjayhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICNpZiBFTkFCTEUoVklERU8p
Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50
KG9iamVjdC0+bm9kZSgpKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgU2tDYW52YXMqIGNhbnZhcyA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Ci0gICAgU2tQYWludCBwYWludDsKLSAgICBwYWludC5z
ZXRDb2xvcihTS19Db2xvcldISVRFKTsKLQotICAgIGludCB4ID0gcmVjdC54KCkgKyByZWN0Lndp
ZHRoKCkgLyAyOwotICAgIGNhbnZhcy0+ZHJhd0xpbmUoeCwgcmVjdC55KCksIHgsIHJlY3QueSgp
ICsgcmVjdC5oZWlnaHQoKSwgcGFpbnQpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBS
ZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFW
b2x1bWVTbGlkZXIsIG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKICNlbHNlCiAgICAgVU5VU0VE
X1BBUkFNKG9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHBhaW50SW5mbyk7CkBAIC02MTksMzEg
KzUwOSwxMCBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhVm9sdW1l
U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsCiAjZW5kaWYKIH0KIAotc3RhdGljIElt
YWdlKiBtZWRpYVNsaWRlclRodW1iSW1hZ2UoKQotewotICAgIHN0YXRpYyBJbWFnZSogbWVkaWFT
bGlkZXJUaHVtYiA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFTbGlkZXJUaHVt
YiIpLnJlbGVhc2VSZWYoKTsKLSAgICByZXR1cm4gbWVkaWFTbGlkZXJUaHVtYjsKLX0KLQotc3Rh
dGljIEltYWdlKiBtZWRpYVZvbHVtZVNsaWRlclRodW1iSW1hZ2UoKQotewotICAgIHN0YXRpYyBJ
bWFnZSogbWVkaWFWb2x1bWVTbGlkZXJUaHVtYiA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZSgibWVkaWFWb2x1bWVTbGlkZXJUaHVtYiIpLnJlbGVhc2VSZWYoKTsKLSAgICByZXR1cm4gbWVk
aWFWb2x1bWVTbGlkZXJUaHVtYjsKLX0KLQogdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6
YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCogb2JqZWN0KSBjb25zdAogewogI2lm
IEVOQUJMRShWSURFTykKLSAgICBJbWFnZSogdGh1bWJJbWFnZSA9IDA7Ci0gICAgaWYgKG9iamVj
dC0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IE1lZGlhU2xpZGVyVGh1bWJQYXJ0KQotICAgICAg
ICB0aHVtYkltYWdlID0gbWVkaWFTbGlkZXJUaHVtYkltYWdlKCk7Ci0gICAgZWxzZSBpZiAob2Jq
ZWN0LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQp
Ci0gICAgICAgIHRodW1iSW1hZ2UgPSBtZWRpYVZvbHVtZVNsaWRlclRodW1iSW1hZ2UoKTsKLQot
ICAgIGlmICh0aHVtYkltYWdlKSB7Ci0gICAgICAgIG9iamVjdC0+c3R5bGUoKS0+c2V0V2lkdGgo
TGVuZ3RoKHRodW1iSW1hZ2UtPndpZHRoKCksIEZpeGVkKSk7Ci0gICAgICAgIG9iamVjdC0+c3R5
bGUoKS0+c2V0SGVpZ2h0KExlbmd0aCh0aHVtYkltYWdlLT5oZWlnaHQoKSwgRml4ZWQpKTsKLSAg
ICB9CisgICAgUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjphZGp1c3RNZWRpYVNsaWRlclRo
dW1iU2l6ZShvYmplY3QpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKICNlbmRp
ZgpAQCAtNjUyLDEwICs1MjEsNyBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1
c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyT2JqZWN0KiBvYmplY3QpIGNvbnN0CiBib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBv
YmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIGlmICghb2JqZWN0LT5wYXJl
bnQoKS0+aXNTbGlkZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHBh
aW50TWVkaWFCdXR0b25JbnRlcm5hbChwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFTbGlk
ZXJUaHVtYkltYWdlKCkpOworICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06
OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFTbGlkZXJUaHVtYiwgb2JqZWN0LCBwYWludElu
Zm8sIHJlY3QpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKICAgICBVTlVTRURf
UEFSQU0ocGFpbnRJbmZvKTsKQEAgLTY2NywxMCArNTMzLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6cGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0LCBj
b25zdAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRl
clRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogI2lmIEVOQUJMRShWSURFTykK
LSAgICBpZiAoIW9iamVjdC0+cGFyZW50KCktPmlzU2xpZGVyKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNv
bnRleHQsIHJlY3QsIG1lZGlhVm9sdW1lU2xpZGVyVGh1bWJJbWFnZSgpKTsKKyAgICByZXR1cm4g
UmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlh
Vm9sdW1lU2xpZGVyVGh1bWIsIG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKICNlbHNlCiAgICAg
VU5VU0VEX1BBUkFNKG9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHBhaW50SW5mbyk7CkBAIC02
ODIsMTggKzU0NSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFW
b2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG9iamVjdCwKIGJvb2wgUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewogI2lmIEVOQUJMRShWSURFTykKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVs
ZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQob2JqZWN0LT5ub2RlKCkpOwotICAgIGlmICghbWVk
aWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSW1hZ2UqIG1l
ZGlhUGxheSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFQbGF5IikucmVsZWFz
ZVJlZigpOwotICAgIHN0YXRpYyBJbWFnZSogbWVkaWFQYXVzZSA9IEltYWdlOjpsb2FkUGxhdGZv
cm1SZXNvdXJjZSgibWVkaWFQYXVzZSIpLnJlbGVhc2VSZWYoKTsKLSAgICBzdGF0aWMgSW1hZ2Uq
IG1lZGlhUGxheURpc2FibGVkID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVBs
YXlEaXNhYmxlZCIpLnJlbGVhc2VSZWYoKTsKLQotICAgIGlmIChtZWRpYUVsZW1lbnQtPm5ldHdv
cmtTdGF0ZSgpID09IEhUTUxNZWRpYUVsZW1lbnQ6Ok5FVFdPUktfTk9fU09VUkNFKQotICAgICAg
ICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBhaW50SW5mby5jb250ZXh0LCByZWN0
LCBtZWRpYVBsYXlEaXNhYmxlZCk7Ci0KLSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbkludGVy
bmFsKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYUVsZW1lbnQtPnBhdXNlZCgpID8gbWVk
aWFQbGF5IDogbWVkaWFQYXVzZSk7CisgICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJv
bWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVBsYXlCdXR0b24sIG9iamVjdCwgcGFp
bnRJbmZvLCByZWN0KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7CiAgICAgVU5V
U0VEX1BBUkFNKHBhaW50SW5mbyk7CkBAIC03MDUsMTggKzU1Nyw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0
LCBjb25zdCBSCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhTXV0ZUJ1
dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICNpZiBFTkFCTEUoVklERU8pCi0g
ICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50KG9i
amVjdC0+bm9kZSgpKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgc3RhdGljIEltYWdlKiBzb3VuZEZ1bGwgPSBJbWFnZTo6bG9hZFBsYXRmb3Jt
UmVzb3VyY2UoIm1lZGlhU291bmRGdWxsIikucmVsZWFzZVJlZigpOwotICAgIHN0YXRpYyBJbWFn
ZSogc291bmROb25lID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVNvdW5kTm9u
ZSIpLnJlbGVhc2VSZWYoKTsKLSAgICBzdGF0aWMgSW1hZ2UqIHNvdW5kRGlzYWJsZWQgPSBJbWFn
ZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhU291bmREaXNhYmxlZCIpLnJlbGVhc2VSZWYo
KTsKLQotICAgIGlmIChtZWRpYUVsZW1lbnQtPm5ldHdvcmtTdGF0ZSgpID09IEhUTUxNZWRpYUVs
ZW1lbnQ6Ok5FVFdPUktfTk9fU09VUkNFIHx8ICFtZWRpYUVsZW1lbnQtPmhhc0F1ZGlvKCkpCi0g
ICAgICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQs
IHJlY3QsIHNvdW5kRGlzYWJsZWQpOwotCi0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRl
cm5hbChwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFFbGVtZW50LT5tdXRlZCgpID8gc291
bmROb25lOiBzb3VuZEZ1bGwpOworICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21p
dW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFNdXRlQnV0dG9uLCBvYmplY3QsIHBhaW50
SW5mbywgcmVjdCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwogICAgIFVOVVNF
RF9QQVJBTShwYWludEluZm8pOwpAQCAtODcxLDEzICs3MTIsNyBAQCBpbnQgUmVuZGVyVGhlbWVD
aHJvbWl1bVNraWE6OmJ1dHRvbkludGVybmFsUGFkZGluZ0JvdHRvbSgpIGNvbnN0CiAjaWYgRU5B
QkxFKFZJREVPKQogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6c2hvdWxkUmVuZGVyTWVk
aWFDb250cm9sUGFydChDb250cm9sUGFydCBwYXJ0LCBFbGVtZW50KiBlKQogewotICAgIEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQq
PihlKTsKLSAgICBzd2l0Y2ggKHBhcnQpIHsKLSAgICBjYXNlIE1lZGlhTXV0ZUJ1dHRvblBhcnQ6
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBSZW5k
ZXJUaGVtZTo6c2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChwYXJ0LCBlKTsKLSAgICB9Cisg
ICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6c2hvdWxkUmVuZGVyTWVkaWFD
b250cm9sUGFydChwYXJ0LCBlKTsKIH0KICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40752</attachid>
            <date>2009-10-06 17:27:54 -0700</date>
            <delta_ts>2009-10-07 12:51:07 -0700</delta_ts>
            <desc>Round 2 + ChangeLog</desc>
            <filename>refactor_controls.patch</filename>
            <type>text/plain</type>
            <size>46293</size>
            <attacher name="Andrew Scherkus">scherkus</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZTcyNWZjNy4uY2ExYWJmZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAwOS0xMC0wNiAgQW5kcmV3IFNjaGVy
a3VzICA8c2NoZXJrdXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIFJlbmRlclRoZW1lQ2hyb21pdW1NYWMgYW5k
IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhIHRvIHJlbmRlciBtZWRpYSBjb250cm9scyB1c2luZyBH
cmFwaGljc0NvbnRleHQuCisKKyAgICAgICAgRGVzaWduIHdhcyBiYXNlZCBvbiBleGlzdGluZyBS
ZW5kZXJNZWRpYUNvbnRyb2xzLmNwcCB1c2VkIGJ5IFJlbmRlclRoZW1lU2FmYXJpL1dpbi4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk5ODcKKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIGxheW91dCB0ZXN0cyBhcyBubyBuZXcgZnVuY3Rp
b25hbGl0eSB3YXMgaW50cm9kdWNlZC4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQg
UmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmNwcC9oLgorICAgICAgICAqIGNzcy9tZWRpYUNv
bnRyb2xzQ2hyb21pdW0uY3NzOiBUd2Vha2VkIG1lZGlhIHNsaWRlciBwb3NpdGlvbiBhbmQgYm9y
ZGVyIHN0eWxlLgorICAgICAgICAqIHJlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpwYXJlbnRNZWRpYUVsZW1lbnQpOiBUYWtlbiBmcm9tIFJlbmRl
ck1lZGlhQ29udHJvbHMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xFbGVtZW50Ojpy
ZW5kZXJlcklzTmVlZGVkKTogRG9uJ3QgY2FsbCBzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0
KCkgaWYgZWxlbWVudCBoYXMgbm8gYXBwZWFyYW5jZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29udHJvbElucHV0RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZCk6IERpdHRvLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzLmNwcDogTW92ZWQgcGFyZW50TWVkaWFFbGVt
ZW50KCkgdG8gTWVkaWFDb250cm9sRWxlbWVudHMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ck1lZGlhQ29udHJvbHNDaHJvbWl1bS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6cGxh
dGZvcm1SZXNvdXJjZSk6IEhlbHBlciB0byBsb2FkIGFuZCBjYWNoZSBtZWRpYSBjb250cm9sIGlt
YWdlIHJlc291cmNlcy4KKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhU2xpZGVyVGh1bWJJbWFnZSk6
IEltcGxlbWVudGF0aW9uIHJlZmFjdG9yZWQgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtTWFjL1Nr
aWEuCisgICAgICAgIChXZWJDb3JlOjptZWRpYVZvbHVtZVNsaWRlclRodW1iSW1hZ2UpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OnBhaW50TWVkaWFCdXR0b24pOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OnBhaW50TWVkaWFNdXRlQnV0dG9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpwYWludE1lZGlhUGxheUJ1dHRvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRN
ZWRpYVNsaWRlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRNZWRpYVNsaWRlclRo
dW1iKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnBhaW50TWVkaWFUaW1lbGluZUNvbnRhaW5lcik6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpzaG91
bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQpOiBTYW1lCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OmFkanVzdE1lZGlh
U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9s
c0Nocm9taXVtLmg6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtTWFjLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJU
aHVtYlNpemUpOiBJbXBsZW1lbnRhdGlvbiBkZWxlZ2F0ZWQgdG8gUmVuZGVyTWVkaWFDb250cm9s
c0Nocm9taXVtLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c2hv
dWxkUmVuZGVyTWVkaWFDb250cm9sUGFydCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVBsYXlCdXR0b24pOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFNdXRlQnV0dG9u
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWlu
dE1lZGlhU2xpZGVyVHJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVNsaWRlclRodW1i
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWlu
dE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFDb250cm9sc0JhY2tncm91bmQpOiBEaXR0by4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFDb250cm9sc0Jh
Y2tncm91bmQpOiBJbXBsZW1lbnRhdGlvbiBkZWxlZ2F0ZWQgdG8gUmVuZGVyTWVkaWFDb250cm9s
c0Nocm9taXVtLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBh
aW50TWVkaWFTbGlkZXJUcmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNsaWRlclRodW1i
U2l6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6
OnBhaW50TWVkaWFTbGlkZXJUaHVtYik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFQbGF5
QnV0dG9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6cGFpbnRNZWRpYU11dGVCdXR0b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjpzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KTogRGl0dG8u
CisKIDIwMDktMTAtMDIgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFkZWxlIFBldGVyc29uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAwM2Y2Zjg0Li5hYzYwN2YzIDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMjkzOCw2ICsyOTM4LDggQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyTWFy
cXVlZS5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwJywKICAgICAg
ICAgICAgICdyZW5kZXJpbmcvUmVuZGVyTWVkaWEuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5n
L1JlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9SZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5n
L1JlbmRlck1lbnVMaXN0LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlck1lbnVM
aXN0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwJywKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHNDaHJvbWl1bS5jc3MgYi9XZWJDb3JlL2Nz
cy9tZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3NzCmluZGV4IDE2ZmYwZTQuLjBmNjY3YmQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvY3NzL21lZGlhQ29udHJvbHNDaHJvbWl1bS5jc3MKKysrIGIvV2ViQ29y
ZS9jc3MvbWVkaWFDb250cm9sc0Nocm9taXVtLmNzcwpAQCAtODMsOCArODMsOCBAQCBhdWRpbzo6
LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZS1jb250YWluZXIsIHZpZGVvOjotd2Via2l0
LW1lZGlhLWNvbnRyb2xzLQogICAgIHdpZHRoOiBhdXRvOwogICAgIGhlaWdodDogMzJweDsKIAot
ICAgIGJvcmRlci1sZWZ0LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Ci0gICAgYm9y
ZGVyLXJpZ2h0LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CisgICAgYm9yZGVyLWxl
ZnQ6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CisgICAgYm9yZGVyLXJpZ2h0
OiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwogfQogCiBhdWRpbzo6LXdlYmtp
dC1tZWRpYS1jb250cm9scy1jdXJyZW50LXRpbWUtZGlzcGxheSwgdmlkZW86Oi13ZWJraXQtbWVk
aWEtY29udHJvbHMtY3VycmVudC10aW1lLWRpc3BsYXkgewpAQCAtMTQxLDcgKzE0MSw3IEBAIGF1
ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLCB2aWRlbzo6LXdlYmtpdC1tZWRp
YS1jb250cm9scy10aW1lbGluZSB7CiAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS1zbGlk
ZXI7CiAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgIHRvcDogYXV0bzsKLSAgICBib3R0b206
IDhweDsKKyAgICBib3R0b206IDdweDsKICAgICBsZWZ0OiA2cHg7CiAgICAgcmlnaHQ6IDY1cHg7
CiAgICAgaGVpZ2h0OiAxNnB4OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFD
b250cm9sRWxlbWVudHMuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVu
dHMuY3BwCmluZGV4IDI5ZTJlNTcuLmY4N2E2OWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9NZWRp
YUNvbnRyb2xFbGVtZW50cy5jcHAKQEAgLTQ2LDYgKzQ2LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAorSFRNTE1lZGlhRWxlbWVudCogcGFy
ZW50TWVkaWFFbGVtZW50KFJlbmRlck9iamVjdCogbykKK3sKKyAgICBOb2RlKiBub2RlID0gby0+
bm9kZSgpOworICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUgPyBub2RlLT5zaGFkb3dBbmNlc3Rv
ck5vZGUoKSA6IDA7CisgICAgaWYgKCFtZWRpYU5vZGUgfHwgKCFtZWRpYU5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp2aWRlb1RhZykgJiYgIW1lZGlhTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmF1ZGlvVGFnKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtZWRpYU5vZGUpOworfQorCiAvLyBGSVhNRTogVGhlc2Ug
Y29uc3RhbnRzIG1heSBuZWVkIHRvIGJlIHR3ZWFrZWQgdG8gYmV0dGVyIG1hdGNoIHRoZSBzZWVr
aW5nIGluIHRoZSBRdWlja1RpbWUgcGx1Zy1pbi4KIHN0YXRpYyBjb25zdCBmbG9hdCBjU2Vla1Jl
cGVhdERlbGF5ID0gMC4xZjsKIHN0YXRpYyBjb25zdCBmbG9hdCBjU3RlcFRpbWUgPSAwLjA3ZjsK
QEAgLTEzOCw3ICsxNDgsNyBAQCBib29sIE1lZGlhQ29udHJvbEVsZW1lbnQ6OnJlbmRlcmVySXNO
ZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxlKQogICAgIEFTU0VSVChkb2N1bWVudCgpLT5wYWdlKCkp
OwogCiAgICAgcmV0dXJuIEhUTUxEaXZFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKSAm
JiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+cmVuZGVyZXIoKQotICAgICAgICAmJiBkb2N1bWVudCgp
LT5wYWdlKCktPnRoZW1lKCktPnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQoc3R5bGUtPmFw
cGVhcmFuY2UoKSwgbV9tZWRpYUVsZW1lbnQpOworICAgICAgICAmJiAoIXN0eWxlLT5oYXNBcHBl
YXJhbmNlKCkgfHwgZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5zaG91bGRSZW5kZXJNZWRp
YUNvbnRyb2xQYXJ0KHN0eWxlLT5hcHBlYXJhbmNlKCksIG1fbWVkaWFFbGVtZW50KSk7CiB9CiAg
ICAgCiB2b2lkIE1lZGlhQ29udHJvbEVsZW1lbnQ6OmF0dGFjaCgpCkBAIC0zNjYsNyArMzc2LDcg
QEAgYm9vbCBNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVy
U3R5bGUqIHN0eWxlKQogICAgIEFTU0VSVChkb2N1bWVudCgpLT5wYWdlKCkpOwogCiAgICAgcmV0
dXJuIEhUTUxJbnB1dEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpICYmIHBhcmVudCgp
ICYmIHBhcmVudCgpLT5yZW5kZXJlcigpCi0gICAgICAgICYmIGRvY3VtZW50KCktPnBhZ2UoKS0+
dGhlbWUoKS0+c2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChzdHlsZS0+YXBwZWFyYW5jZSgp
LCBtX21lZGlhRWxlbWVudCk7CisgICAgICAgICYmICghc3R5bGUtPmhhc0FwcGVhcmFuY2UoKSB8
fCBkb2N1bWVudCgpLT5wYWdlKCktPnRoZW1lKCktPnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBh
cnQoc3R5bGUtPmFwcGVhcmFuY2UoKSwgbV9tZWRpYUVsZW1lbnQpKTsKIH0KIAogdm9pZCBNZWRp
YUNvbnRyb2xJbnB1dEVsZW1lbnQ6OmF0dGFjaCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250
cm9sRWxlbWVudHMuaAppbmRleCBmNjkyNDg1Li42ZjVhN2I2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L01lZGlhQ29udHJvbEVsZW1lbnRzLmgKQEAgLTY2LDYgKzY2LDggQEAgZW51bSBNZWRpYUNvbnRy
b2xFbGVtZW50VHlwZSB7CiAgICAgTWVkaWFWb2x1bWVTbGlkZXJUaHVtYgogfTsKIAorSFRNTE1l
ZGlhRWxlbWVudCogcGFyZW50TWVkaWFFbGVtZW50KFJlbmRlck9iamVjdCopOworCiBjbGFzcyBN
ZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudCB7CiBw
dWJsaWM6CiAgICAgTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQoRG9jdW1lbnQqLCBIVE1M
TWVkaWFFbGVtZW50Kik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRp
YUNvbnRyb2xzLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3Bw
CmluZGV4IDBjZTA2NDIuLmM0NTBiMjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1lZGlhQ29udHJvbHMuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlh
Q29udHJvbHMuY3BwCkBAIC04MiwxNiArODIsNiBAQCB2b2lkIFJlbmRlck1lZGlhQ29udHJvbHM6
OmFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCogbykKICAgICBvLT5zdHls
ZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4obWVkaWFTbGlkZXJUaHVtYkhl
aWdodCAqIHpvb21MZXZlbCksIEZpeGVkKSk7CiB9CiAKLXN0YXRpYyBIVE1MTWVkaWFFbGVtZW50
KiBwYXJlbnRNZWRpYUVsZW1lbnQoUmVuZGVyT2JqZWN0KiBvKQotewotICAgIE5vZGUqIG5vZGUg
PSBvLT5ub2RlKCk7Ci0gICAgTm9kZSogbWVkaWFOb2RlID0gbm9kZSA/IG5vZGUtPnNoYWRvd0Fu
Y2VzdG9yTm9kZSgpIDogMDsKLSAgICBpZiAoIW1lZGlhTm9kZSB8fCAoIW1lZGlhTm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKSAmJiAhbWVkaWFOb2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6YXVkaW9UYWcpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1lZGlhTm9kZSk7Ci19Ci0KIGJvb2wgUmVuZGVy
TWVkaWFDb250cm9sczo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYUNvbnRyb2xFbGVtZW50
VHlwZSBwYXJ0LCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgQVNTRVJUKFNhZmFyaVRoZW1l
TGlicmFyeSgpKTsKQEAgLTE1OSw0ICsxNDksMyBAQCBib29sIFJlbmRlck1lZGlhQ29udHJvbHM6
OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUgcGFydCwgUgog
I2VuZGlmICAvLyAjaWYgRU5BQkxFKFZJREVPKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1
bS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNWM0MmYKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3Bw
CkBAIC0wLDAgKzEsMjg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5oIgorCisj
aW5jbHVkZSAiR3JhZGllbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShWSURFTykKKwordHlwZWRlZiBXVEY6Okhhc2hN
YXA8Y29uc3QgY2hhciosIEltYWdlKj4gTWVkaWFDb250cm9sSW1hZ2VNYXA7CitzdGF0aWMgTWVk
aWFDb250cm9sSW1hZ2VNYXAqIGdNZWRpYUNvbnRyb2xJbWFnZU1hcCA9IDA7CisKK3N0YXRpYyBJ
bWFnZSogcGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIGlmICghZ01l
ZGlhQ29udHJvbEltYWdlTWFwKQorICAgICAgICBnTWVkaWFDb250cm9sSW1hZ2VNYXAgPSBuZXcg
TWVkaWFDb250cm9sSW1hZ2VNYXAoKTsKKyAgICBpZiAoSW1hZ2UqIGltYWdlID0gZ01lZGlhQ29u
dHJvbEltYWdlTWFwLT5nZXQobmFtZSkpCisgICAgICAgIHJldHVybiBpbWFnZTsKKyAgICBpZiAo
SW1hZ2UqIGltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKG5hbWUpLnJlbGVhc2VS
ZWYoKSkgeworICAgICAgICBnTWVkaWFDb250cm9sSW1hZ2VNYXAtPnNldChuYW1lLCBpbWFnZSk7
CisgICAgICAgIHJldHVybiBpbWFnZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIHBhaW50TWVkaWFCdXR0b24oR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBJbWFnZSogaW1hZ2UpCit7
CisgICAgLy8gQ3JlYXRlIGEgZGVzdGluYXRpb24gcmVjdGFuZ2xlIGZvciB0aGUgaW1hZ2UgdGhh
dCBpcyBjZW50ZXJlZCBpbiB0aGUgZHJhd2luZyByZWN0YW5nbGUsIHJvdW5kZWQgbGVmdCwgYW5k
IGRvd24uCisgICAgSW50UmVjdCBpbWFnZVJlY3QgPSBpbWFnZS0+cmVjdCgpOworICAgIGltYWdl
UmVjdC5zZXRZKHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBpbWFnZS0+aGVpZ2h0KCkgKyAx
KSAvIDIpOworICAgIGltYWdlUmVjdC5zZXRYKHJlY3QueCgpICsgKHJlY3Qud2lkdGgoKSAtIGlt
YWdlLT53aWR0aCgpICsgMSkgLyAyKTsKKworICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwg
aW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgcGFpbnRNZWRp
YU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KG9iamVjdCk7CisgICAg
aWYgKCFtZWRpYUVsZW1lbnQpCisgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0aWMgSW1h
Z2UqIHNvdW5kRnVsbCA9IHBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhU291bmRGdWxsIik7CisgICAg
c3RhdGljIEltYWdlKiBzb3VuZE5vbmUgPSBwbGF0Zm9ybVJlc291cmNlKCJtZWRpYVNvdW5kTm9u
ZSIpOworICAgIHN0YXRpYyBJbWFnZSogc291bmREaXNhYmxlZCA9IHBsYXRmb3JtUmVzb3VyY2Uo
Im1lZGlhU291bmREaXNhYmxlZCIpOworCisgICAgaWYgKG1lZGlhRWxlbWVudC0+bmV0d29ya1N0
YXRlKCkgPT0gSFRNTE1lZGlhRWxlbWVudDo6TkVUV09SS19OT19TT1VSQ0UgfHwgIW1lZGlhRWxl
bWVudC0+aGFzQXVkaW8oKSkKKyAgICAgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocGFpbnRJ
bmZvLmNvbnRleHQsIHJlY3QsIHNvdW5kRGlzYWJsZWQpOworCisgICAgcmV0dXJuIHBhaW50TWVk
aWFCdXR0b24ocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhRWxlbWVudC0+bXV0ZWQoKSA/
IHNvdW5kTm9uZTogc291bmRGdWxsKTsKK30KKworc3RhdGljIGJvb2wgcGFpbnRNZWRpYVBsYXlC
dXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgSFRNTE1lZGlhRWxlbWVu
dCogbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KG9iamVjdCk7CisgICAgaWYgKCFt
ZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN0YXRpYyBJbWFnZSog
bWVkaWFQbGF5ID0gcGxhdGZvcm1SZXNvdXJjZSgibWVkaWFQbGF5Iik7CisgICAgc3RhdGljIElt
YWdlKiBtZWRpYVBhdXNlID0gcGxhdGZvcm1SZXNvdXJjZSgibWVkaWFQYXVzZSIpOworICAgIHN0
YXRpYyBJbWFnZSogbWVkaWFQbGF5RGlzYWJsZWQgPSBwbGF0Zm9ybVJlc291cmNlKCJtZWRpYVBs
YXlEaXNhYmxlZCIpOworCisgICAgaWYgKG1lZGlhRWxlbWVudC0+bmV0d29ya1N0YXRlKCkgPT0g
SFRNTE1lZGlhRWxlbWVudDo6TkVUV09SS19OT19TT1VSQ0UpCisgICAgICAgIHJldHVybiBwYWlu
dE1lZGlhQnV0dG9uKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYVBsYXlEaXNhYmxlZCk7
CisKKyAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihwYWludEluZm8uY29udGV4dCwgcmVjdCwg
bWVkaWFFbGVtZW50LT5wYXVzZWQoKSA/IG1lZGlhUGxheSA6IG1lZGlhUGF1c2UpOworfQorCitz
dGF0aWMgYm9vbCBwYWludE1lZGlhU2xpZGVyKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVu
dChvYmplY3QpOworICAgIGlmICghbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvYmplY3QtPnN0eWxlKCk7CisgICAgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CisKKyAgICAvLyBEcmF3IHRo
ZSBib3JkZXIgb2YgdGhlIHRpbWUgYmFyLgorICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBh
IHJvdW5kZWQgcmVjdCBidXQgbmVlZCB0byBmaXggR3JhcGhpY3NDb250ZXh0U2tpYSBmaXJzdC4K
KyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAxNDMKKyAg
ICBjb250ZXh0LT5zYXZlKCk7CisgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJv
a2UpOworICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHN0eWxlLT5ib3JkZXJMZWZ0Q29sb3Io
KSk7CisgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKHN0eWxlLT5ib3JkZXJMZWZ0V2lk
dGgoKSk7CisgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3Io
KSk7CisgICAgY29udGV4dC0+ZHJhd1JlY3QocmVjdCk7CisgICAgY29udGV4dC0+cmVzdG9yZSgp
OworCisgICAgLy8gRHJhdyB0aGUgYnVmZmVyZWQgcmFuZ2VzLgorICAgIC8vIEZJWE1FOiBEcmF3
IG11bHRpcGxlIHJhbmdlcyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgYnVmZmVyZWQgcmFuZ2VzLgor
ICAgIC8vIEZJWE1FOiBwZXJjZW50TG9hZGVkKCkgZG9lc24ndCBhbHdheXMgaGl0IDEuMCBzbyB3
ZSdyZSB1c2luZyByb3VuZCgpLgorICAgIEludFJlY3QgYnVmZmVyZWRSZWN0ID0gcmVjdDsKKyAg
ICBidWZmZXJlZFJlY3QuaW5mbGF0ZSgtc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpKTsKKyAgICBi
dWZmZXJlZFJlY3Quc2V0V2lkdGgocm91bmQoKGJ1ZmZlcmVkUmVjdC53aWR0aCgpICogbWVkaWFF
bGVtZW50LT5wZXJjZW50TG9hZGVkKCkpKSk7CisKKyAgICAvLyBEb24ndCBib3RoZXIgZHJhd2lu
ZyBhbiBlbXB0eSBhcmVhLgorICAgIGlmICghYnVmZmVyZWRSZWN0LmlzRW1wdHkoKSkgeworICAg
ICAgICBJbnRQb2ludCBzbGlkZXJUb3BMZWZ0ID0gYnVmZmVyZWRSZWN0LmxvY2F0aW9uKCk7Cisg
ICAgICAgIEludFBvaW50IHNsaWRlclRvcFJpZ2h0ID0gc2xpZGVyVG9wTGVmdDsKKyAgICAgICAg
c2xpZGVyVG9wUmlnaHQubW92ZSgwLCBidWZmZXJlZFJlY3QuaGVpZ2h0KCkpOworCisgICAgICAg
IFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKHNsaWRlclRvcExl
ZnQsIHNsaWRlclRvcFJpZ2h0KTsKKyAgICAgICAgQ29sb3Igc3RhcnRDb2xvciA9IG9iamVjdC0+
c3R5bGUoKS0+Y29sb3IoKTsKKyAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIHN0
YXJ0Q29sb3IpOworICAgICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3Ioc3Rh
cnRDb2xvci5yZWQoKSAvIDIsIHN0YXJ0Q29sb3IuZ3JlZW4oKSAvIDIsIHN0YXJ0Q29sb3IuYmx1
ZSgpIC8gMiwgc3RhcnRDb2xvci5hbHBoYSgpKSk7CisKKyAgICAgICAgY29udGV4dC0+c2F2ZSgp
OworICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VTdHlsZShOb1N0cm9rZSk7CisgICAgICAgIGNv
bnRleHQtPnNldEZpbGxHcmFkaWVudChncmFkaWVudCk7CisgICAgICAgIGNvbnRleHQtPmRyYXdS
ZWN0KGJ1ZmZlcmVkUmVjdCk7CisgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRodW1i
KFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghb2JqZWN0LT5wYXJlbnQo
KS0+aXNTbGlkZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3RhdGljIEltYWdl
KiBtZWRpYVNsaWRlclRodW1iID0gcGxhdGZvcm1SZXNvdXJjZSgibWVkaWFTbGlkZXJUaHVtYiIp
OworICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBt
ZWRpYVNsaWRlclRodW1iKTsKK30KKworc3RhdGljIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRl
cihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQob2JqZWN0KTsKKyAgICBpZiAoIW1lZGlh
RWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CisgICAgQ29sb3Igb3JpZ2luYWxDb2xvciA9IGNv
bnRleHQtPnN0cm9rZUNvbG9yKCk7CisgICAgaWYgKG9yaWdpbmFsQ29sb3IgIT0gQ29sb3I6Ondo
aXRlKQorICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcjo6d2hpdGUpOworCisg
ICAgaW50IHggPSByZWN0LngoKSArIHJlY3Qud2lkdGgoKSAvIDI7CisgICAgY29udGV4dC0+ZHJh
d0xpbmUoSW50UG9pbnQoeCwgcmVjdC55KCkpLCAgSW50UG9pbnQoeCwgcmVjdC55KCkgKyByZWN0
LmhlaWdodCgpKSk7CisKKyAgICBpZiAob3JpZ2luYWxDb2xvciAhPSBDb2xvcjo6d2hpdGUpCisg
ICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKG9yaWdpbmFsQ29sb3IpOworICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFvYmplY3QtPnBhcmVudCgpLT5p
c1NsaWRlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0aWMgSW1hZ2UqIG1l
ZGlhVm9sdW1lU2xpZGVyVGh1bWIgPSBwbGF0Zm9ybVJlc291cmNlKCJtZWRpYVZvbHVtZVNsaWRl
clRodW1iIik7CisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocGFpbnRJbmZvLmNvbnRleHQs
IHJlY3QsIG1lZGlhVm9sdW1lU2xpZGVyVGh1bWIpOworfQorCitzdGF0aWMgYm9vbCBwYWludE1l
ZGlhVGltZWxpbmVDb250YWluZXIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAg
SFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KG9iamVj
dCk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghcmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
ID0gcGFpbnRJbmZvLmNvbnRleHQ7CisgICAgICAgIENvbG9yIG9yaWdpbmFsQ29sb3IgPSBjb250
ZXh0LT5zdHJva2VDb2xvcigpOworICAgICAgICBmbG9hdCBvcmlnaW5hbFRoaWNrbmVzcyA9IGNv
bnRleHQtPnN0cm9rZVRoaWNrbmVzcygpOworICAgICAgICBTdHJva2VTdHlsZSBvcmlnaW5hbFN0
eWxlID0gY29udGV4dC0+c3Ryb2tlU3R5bGUoKTsKKworICAgICAgICBjb250ZXh0LT5zZXRTdHJv
a2VTdHlsZShTb2xpZFN0cm9rZSk7CisKKyAgICAgICAgLy8gRHJhdyB0aGUgbGVmdCBib3JkZXIg
dXNpbmcgQ1NTIGRlZmluZWQgd2lkdGggYW5kIGNvbG9yLgorICAgICAgICBjb250ZXh0LT5zZXRT
dHJva2VUaGlja25lc3Mob2JqZWN0LT5zdHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSk7CisgICAg
ICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKG9iamVjdC0+c3R5bGUoKS0+Ym9yZGVyTGVmdENv
bG9yKCkucmdiKCkpOworICAgICAgICBjb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChyZWN0Lngo
KSArIDEsIHJlY3QueSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQocmVj
dC54KCkgKyAxLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpKTsKKworICAgICAgICAvLyBEcmF3
IHRoZSByaWdodCBib3JkZXIgdXNpbmcgQ1NTIGRlZmluZWQgd2lkdGggYW5kIGNvbG9yLgorICAg
ICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3Mob2JqZWN0LT5zdHlsZSgpLT5ib3JkZXJS
aWdodFdpZHRoKCkpOworICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvYmplY3QtPnN0
eWxlKCktPmJvcmRlclJpZ2h0Q29sb3IoKS5yZ2IoKSk7CisgICAgICAgIGNvbnRleHQtPmRyYXdM
aW5lKEludFBvaW50KHJlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gMSwgcmVjdC55KCkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAt
IDEsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSkpOworCisgICAgICAgIGNvbnRleHQtPnNldFN0
cm9rZUNvbG9yKG9yaWdpbmFsQ29sb3IpOworICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlj
a25lc3Mob3JpZ2luYWxUaGlja25lc3MpOworICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VTdHls
ZShvcmlnaW5hbFN0eWxlKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVu
ZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENv
bnRyb2xQYXJ0IHBhcnQsIEVsZW1lbnQqIGUpCit7CisgICAgVU5VU0VEX1BBUkFNKGUpOworCisg
ICAgc3dpdGNoIChwYXJ0KSB7CisgICAgY2FzZSBNZWRpYU11dGVCdXR0b25QYXJ0OgorICAgIGNh
c2UgTWVkaWFQbGF5QnV0dG9uUGFydDoKKyAgICBjYXNlIE1lZGlhU2xpZGVyUGFydDoKKyAgICBj
YXNlIE1lZGlhU2xpZGVyVGh1bWJQYXJ0OgorICAgIGNhc2UgTWVkaWFWb2x1bWVTbGlkZXJDb250
YWluZXJQYXJ0OgorICAgIGNhc2UgTWVkaWFWb2x1bWVTbGlkZXJQYXJ0OgorICAgIGNhc2UgTWVk
aWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQ6CisgICAgY2FzZSBNZWRpYUNvbnRyb2xzQmFja2dyb3Vu
ZFBhcnQ6CisgICAgY2FzZSBNZWRpYUN1cnJlbnRUaW1lUGFydDoKKyAgICBjYXNlIE1lZGlhVGlt
ZVJlbWFpbmluZ1BhcnQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpwYWludE1lZGlh
Q29udHJvbHNQYXJ0KE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlIHBhcnQsIFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIHN3aXRjaCAocGFydCkgeworICAgIGNhc2UgTWVkaWFNdXRl
QnV0dG9uOgorICAgIGNhc2UgTWVkaWFVbk11dGVCdXR0b246CisgICAgICAgIHJldHVybiBwYWlu
dE1lZGlhTXV0ZUJ1dHRvbihvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CisgICAgY2FzZSBNZWRp
YVBhdXNlQnV0dG9uOgorICAgIGNhc2UgTWVkaWFQbGF5QnV0dG9uOgorICAgICAgICByZXR1cm4g
cGFpbnRNZWRpYVBsYXlCdXR0b24ob2JqZWN0LCBwYWludEluZm8sIHJlY3QpOworICAgIGNhc2Ug
TWVkaWFTbGlkZXI6CisgICAgICAgIHJldHVybiBwYWludE1lZGlhU2xpZGVyKG9iamVjdCwgcGFp
bnRJbmZvLCByZWN0KTsKKyAgICBjYXNlIE1lZGlhU2xpZGVyVGh1bWI6CisgICAgICAgIHJldHVy
biBwYWludE1lZGlhU2xpZGVyVGh1bWIob2JqZWN0LCBwYWludEluZm8sIHJlY3QpOworICAgIGNh
c2UgTWVkaWFWb2x1bWVTbGlkZXI6CisgICAgICAgIHJldHVybiBwYWludE1lZGlhVm9sdW1lU2xp
ZGVyKG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKKyAgICBjYXNlIE1lZGlhVm9sdW1lU2xpZGVy
VGh1bWI6CisgICAgICAgIHJldHVybiBwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIob2JqZWN0
LCBwYWludEluZm8sIHJlY3QpOworICAgIGNhc2UgTWVkaWFUaW1lbGluZUNvbnRhaW5lcjoKKyAg
ICAgICAgcmV0dXJuIHBhaW50TWVkaWFUaW1lbGluZUNvbnRhaW5lcihvYmplY3QsIHBhaW50SW5m
bywgcmVjdCk7CisgICAgY2FzZSBNZWRpYUZ1bGxzY3JlZW5CdXR0b246CisgICAgY2FzZSBNZWRp
YVNlZWtCYWNrQnV0dG9uOgorICAgIGNhc2UgTWVkaWFTZWVrRm9yd2FyZEJ1dHRvbjoKKyAgICBj
YXNlIE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyOgorICAgIGNhc2UgTWVkaWFDdXJyZW50VGlt
ZURpc3BsYXk6CisgICAgY2FzZSBNZWRpYVRpbWVSZW1haW5pbmdEaXNwbGF5OgorICAgIGNhc2Ug
TWVkaWFDb250cm9sc1BhbmVsOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJNZWRp
YUNvbnRyb2xzQ2hyb21pdW06OmFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVj
dCogb2JqZWN0KQoreworICAgIHN0YXRpYyBJbWFnZSogbWVkaWFTbGlkZXJUaHVtYiA9IHBsYXRm
b3JtUmVzb3VyY2UoIm1lZGlhU2xpZGVyVGh1bWIiKTsKKyAgICBzdGF0aWMgSW1hZ2UqIG1lZGlh
Vm9sdW1lU2xpZGVyVGh1bWIgPSBwbGF0Zm9ybVJlc291cmNlKCJtZWRpYVZvbHVtZVNsaWRlclRo
dW1iIik7CisKKyAgICBJbWFnZSogdGh1bWJJbWFnZSA9IDA7CisgICAgaWYgKG9iamVjdC0+c3R5
bGUoKS0+YXBwZWFyYW5jZSgpID09IE1lZGlhU2xpZGVyVGh1bWJQYXJ0KQorICAgICAgICB0aHVt
YkltYWdlID0gbWVkaWFTbGlkZXJUaHVtYjsKKyAgICBlbHNlIGlmIChvYmplY3QtPnN0eWxlKCkt
PmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCkKKyAgICAgICAgdGh1
bWJJbWFnZSA9IG1lZGlhVm9sdW1lU2xpZGVyVGh1bWI7CisKKyAgICBpZiAodGh1bWJJbWFnZSkg
eworICAgICAgICBvYmplY3QtPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aCh0aHVtYkltYWdlLT53
aWR0aCgpLCBGaXhlZCkpOworICAgICAgICBvYmplY3QtPnN0eWxlKCktPnNldEhlaWdodChMZW5n
dGgodGh1bWJJbWFnZS0+aGVpZ2h0KCksIEZpeGVkKSk7CisgICAgfQorfQorCisjZW5kaWYgIC8v
ICNpZiBFTkFCTEUoVklERU8pCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5oIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOWRiYjQ2YgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5oCkBAIC0wLDAgKzEsNDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlbmRlck1lZGlhQ29udHJvbHND
aHJvbWl1bV9oCisjZGVmaW5lIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bV9oCisKKyNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFzcyBS
ZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0geworcHVibGljOgorICAgIHN0YXRpYyBib29sIHNo
b3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQoQ29udHJvbFBhcnQgcGFydCwgRWxlbWVudCogZSk7
CisgICAgc3RhdGljIGJvb2wgcGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYUNvbnRyb2xFbGVt
ZW50VHlwZSwgUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgc3RhdGljIHZvaWQgYWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNp
emUoUmVuZGVyT2JqZWN0Kik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW1faApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYy5oCmluZGV4IDlmNDEyYTAuLjYxYjVlOGYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMuaAorKysgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLmgKQEAgLTEyMSw2ICsxMjEsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9u
KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZW5k
ZXJNZWRpYUNvbnRyb2xQYXJ0KENvbnRyb2xQYXJ0LCBFbGVtZW50Kik7CiAgICAgdmlydHVhbCBi
b29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
ZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRy
YWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYy5tbSBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0K
aW5kZXggNjk1ZjlmYS4uYmNmY2Q1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtTWFjLm1tCkBAIC0yOSw3ICsyOSw2IEBACiAjaW1wb3J0ICJEb2N1bWVudC5oIgog
I2ltcG9ydCAiRWxlbWVudC5oIgogI2ltcG9ydCAiRnJhbWVWaWV3LmgiCi0jaW1wb3J0ICJHcmFk
aWVudC5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0ICJIVE1MSW5wdXRF
bGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MTWVkaWFFbGVtZW50LmgiCkBAIC0zOCw2ICszNyw3IEBA
CiAjaW1wb3J0ICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIk1lZGlh
Q29udHJvbEVsZW1lbnRzLmgiCiAjaW1wb3J0ICJSZW5kZXJNZWRpYS5oIgorI2ltcG9ydCAiUmVu
ZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmgiCiAjaW1wb3J0ICJSZW5kZXJTbGlkZXIuaCIKICNp
bXBvcnQgIlJlbmRlclZpZXcuaCIKICNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgpAQCAtMTI1MSwy
MCArMTI1MSw2IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTbGlkZXJUaHVt
YihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi0jaWYgRU5BQkxFKFZJREVPKQotc3RhdGljIEltYWdlKiBtZWRpYVNsaWRlclRodW1iSW1h
Z2UoKQotewotICAgIHN0YXRpYyBJbWFnZSogbWVkaWFTbGlkZXJUaHVtYiA9IEltYWdlOjpsb2Fk
UGxhdGZvcm1SZXNvdXJjZSgibWVkaWFTbGlkZXJUaHVtYiIpLnJlbGVhc2VSZWYoKTsKLSAgICBy
ZXR1cm4gbWVkaWFTbGlkZXJUaHVtYjsKLX0KLSAgCi1zdGF0aWMgSW1hZ2UqIG1lZGlhVm9sdW1l
U2xpZGVyVGh1bWJJbWFnZSgpCi17Ci0gICAgc3RhdGljIEltYWdlKiBtZWRpYVZvbHVtZVNsaWRl
clRodW1iID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVZvbHVtZVNsaWRlclRo
dW1iIikucmVsZWFzZVJlZigpOwotICAgIHJldHVybiBtZWRpYVZvbHVtZVNsaWRlclRodW1iOwot
fQotI2VuZGlmCi0KIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2xpZGVyVGh1
bWJTaXplKFJlbmRlck9iamVjdCogbykgY29uc3QKIHsKICAgICBzdGF0aWMgY29uc3QgaW50IHNs
aWRlclRodW1iV2lkdGggPSAxNTsKQEAgLTEyNzcsMTYgKzEyNjMsNyBAQCB2b2lkIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqIG8pIGNv
bnN0CiAgICAgfQogCiAjaWYgRU5BQkxFKFZJREVPKQotICAgIEltYWdlKiB0aHVtYkltYWdlID0g
MDsKLSAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IE1lZGlhU2xpZGVyVGh1bWJQ
YXJ0KQotICAgICAgICB0aHVtYkltYWdlID0gbWVkaWFTbGlkZXJUaHVtYkltYWdlKCk7Ci0gICAg
ZWxzZSBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1
bWJQYXJ0KQotICAgICAgICB0aHVtYkltYWdlID0gbWVkaWFWb2x1bWVTbGlkZXJUaHVtYkltYWdl
KCk7Ci0gIAotICAgIGlmICh0aHVtYkltYWdlKSB7Ci0gICAgICAgIG8tPnN0eWxlKCktPnNldFdp
ZHRoKExlbmd0aCh0aHVtYkltYWdlLT53aWR0aCgpLCBGaXhlZCkpOwotICAgICAgICBvLT5zdHls
ZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHRodW1iSW1hZ2UtPmhlaWdodCgpLCBGaXhlZCkpOwotICAg
IH0KKyAgICBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OmFkanVzdE1lZGlhU2xpZGVyVGh1
bWJTaXplKG8pOwogI2VuZGlmCiB9CiAKQEAgLTE1MzcsMTczICsxNTE0LDQ0IEBAIGJvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVy
T2JqZWN0KiBvLCBjb25zCiB9CiAKICNpZiBFTkFCTEUoVklERU8pCi0vLyBBdHRlbXB0IHRvIHJl
dHJpZXZlIGEgSFRNTE1lZGlhRWxlbWVudCBmcm9tIGEgTm9kZS4gUmV0dXJucyAwIGlmIG9uZSBj
YW5ub3QgYmUgZm91bmQuCi1zdGF0aWMgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50UGFy
ZW50KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKLSAgICBpZiAo
IW1lZGlhTm9kZSB8fCAoIW1lZGlhTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFn
KSAmJiAhbWVkaWFOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXVkaW9UYWcpKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+
KG1lZGlhTm9kZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRp
YUJ1dHRvbkludGVybmFsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYg
cmVjdCwgSW1hZ2UqIGltYWdlKQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzaG91bGRS
ZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENvbnRyb2xQYXJ0IHBhcnQsIEVsZW1lbnQqIGUpCiB7Ci0g
ICAgLy8gQ3JlYXRlIGEgZGVzdGluYXRpb24gcmVjdGFuZ2xlIGZvciB0aGUgaW1hZ2UgdGhhdCBp
cyBjZW50ZXJlZCBpbiB0aGUgZHJhd2luZyByZWN0YW5nbGUsIHJvdW5kZWQgbGVmdCwgYW5kIGRv
d24uCi0gICAgSW50UmVjdCBpbWFnZVJlY3QgPSBpbWFnZS0+cmVjdCgpOwotICAgIGltYWdlUmVj
dC5zZXRZKHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBpbWFnZS0+aGVpZ2h0KCkgKyAxKSAv
IDIpOwotICAgIGltYWdlUmVjdC5zZXRYKHJlY3QueCgpICsgKHJlY3Qud2lkdGgoKSAtIGltYWdl
LT53aWR0aCgpICsgMSkgLyAyKTsKLQotICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgaW1h
Z2VSZWN0KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9s
c0Nocm9taXVtOjpzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KHBhcnQsIGUpOwogfQogCiBi
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9i
amVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVu
dCA9IG1lZGlhRWxlbWVudFBhcmVudChvYmplY3QtPm5vZGUoKSk7Ci0gICAgaWYgKCFtZWRpYUVs
ZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0YXRpYyBJbWFnZSogbWVkaWFQ
bGF5ID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVBsYXkiKS5yZWxlYXNlUmVm
KCk7Ci0gICAgc3RhdGljIEltYWdlKiBtZWRpYVBhdXNlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJl
c291cmNlKCJtZWRpYVBhdXNlIikucmVsZWFzZVJlZigpOwotICAgIHN0YXRpYyBJbWFnZSogbWVk
aWFQbGF5RGlzYWJsZWQgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhUGxheURp
c2FibGVkIikucmVsZWFzZVJlZigpOwotCi0gICAgaWYgKG1lZGlhRWxlbWVudC0+bmV0d29ya1N0
YXRlKCkgPT0gSFRNTE1lZGlhRWxlbWVudDo6TkVUV09SS19OT19TT1VSQ0UpCi0gICAgICAgIHJl
dHVybiBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1l
ZGlhUGxheURpc2FibGVkKTsKLQotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwo
cGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhRWxlbWVudC0+cGF1c2VkKCkgPyBtZWRpYVBs
YXkgOiBtZWRpYVBhdXNlKTsKKyAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVt
OjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhUGxheUJ1dHRvbiwgb2JqZWN0LCBwYWludElu
Zm8sIHJlY3QpOwogfQogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFN
dXRlQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEhUTUxNZWRpYUVs
ZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvYmplY3QtPm5vZGUoKSk7
Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0
YXRpYyBJbWFnZSogc291bmRGdWxsID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRp
YVNvdW5kRnVsbCIpLnJlbGVhc2VSZWYoKTsKLSAgICBzdGF0aWMgSW1hZ2UqIHNvdW5kTm9uZSA9
IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFTb3VuZE5vbmUiKS5yZWxlYXNlUmVm
KCk7Ci0gICAgc3RhdGljIEltYWdlKiBzb3VuZERpc2FibGVkID0gSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKCJtZWRpYVNvdW5kRGlzYWJsZWQiKS5yZWxlYXNlUmVmKCk7Ci0KLSAgICBpZiAo
bWVkaWFFbGVtZW50LT5uZXR3b3JrU3RhdGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50OjpORVRXT1JL
X05PX1NPVVJDRSB8fCAhbWVkaWFFbGVtZW50LT5oYXNBdWRpbygpKQotICAgICAgICByZXR1cm4g
cGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBzb3VuZERp
c2FibGVkKTsKLQotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwocGFpbnRJbmZv
LmNvbnRleHQsIHJlY3QsIG1lZGlhRWxlbWVudC0+bXV0ZWQoKSA/IHNvdW5kTm9uZSA6IHNvdW5k
RnVsbCk7CisgICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRp
YUNvbnRyb2xzUGFydChNZWRpYU11dGVCdXR0b24sIG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsK
IH0KIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhU2xpZGVyVHJhY2so
UmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVk
aWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50KG9iamVjdC0+bm9kZSgpKTsKLSAgICBpZiAo
IW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOyAgICAKLSAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQgPSBwYWludEluZm8uY29udGV4dDsKLSAgICBjb250ZXh0LT5zYXZlKCk7Ci0gICAgCi0gICAg
Y29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOwotCi0gICAgSW50U2l6ZSB0b3BMZWZ0
UmFkaXVzID0gc3R5bGUtPmJvcmRlclRvcExlZnRSYWRpdXMoKTsKLSAgICBJbnRTaXplIHRvcFJp
Z2h0UmFkaXVzID0gc3R5bGUtPmJvcmRlclRvcFJpZ2h0UmFkaXVzKCk7Ci0gICAgSW50U2l6ZSBi
b3R0b21MZWZ0UmFkaXVzID0gc3R5bGUtPmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKTsKLSAgICBJ
bnRTaXplIGJvdHRvbVJpZ2h0UmFkaXVzID0gc3R5bGUtPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVz
KCk7Ci0gICAgZmxvYXQgYm9yZGVyV2lkdGggPSBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCk7Ci0K
LSAgICAvLyBEcmF3IHRoZSBib3JkZXIgb2YgdGhlIHRpbWUgYmFyLgotICAgIGNvbnRleHQtPnNl
dFN0cm9rZUNvbG9yKHN0eWxlLT5ib3JkZXJMZWZ0Q29sb3IoKSk7Ci0gICAgY29udGV4dC0+c2V0
U3Ryb2tlVGhpY2tuZXNzKGJvcmRlcldpZHRoKTsKLSAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3Io
c3R5bGUtPmJhY2tncm91bmRDb2xvcigpKTsKLSAgICBjb250ZXh0LT5hZGRQYXRoKFBhdGg6OmNy
ZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMs
IGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKSk7Ci0gICAgY29udGV4dC0+ZHJh
d1BhdGgoKTsKLSAgICAKLSAgICAvLyBEcmF3IHRoZSBidWZmZXJlZCByYW5nZXMuCi0gICAgLy8g
RklYTUU6IERyYXcgbXVsdGlwbGUgcmFuZ2VzIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBidWZmZXJl
ZCByYW5nZXMuCi0gICAgRmxvYXRSZWN0IGJ1ZmZlcmVkUmVjdCA9IHJlY3Q7Ci0gICAgYnVmZmVy
ZWRSZWN0LmluZmxhdGUoLTEuMCAtIGJvcmRlcldpZHRoKTsKLSAgICBidWZmZXJlZFJlY3Quc2V0
V2lkdGgoYnVmZmVyZWRSZWN0LndpZHRoKCkgKiBtZWRpYUVsZW1lbnQtPnBlcmNlbnRMb2FkZWQo
KSk7Ci0gICAgYnVmZmVyZWRSZWN0ID0gY29udGV4dC0+cm91bmRUb0RldmljZVBpeGVscyhidWZm
ZXJlZFJlY3QpOwotICAgCi0gICAgLy8gRG9uJ3QgYm90aGVyIGRyYXdpbmcgYW4gZW1wdHkgYXJl
YS4KLSAgICBpZiAoYnVmZmVyZWRSZWN0LndpZHRoKCkgPiAwICYmIGJ1ZmZlcmVkUmVjdC5oZWln
aHQoKSA+IDApIHsKLSAgICAgICAgRmxvYXRQb2ludCBzbGlkZXJUb3BMZWZ0ID0gYnVmZmVyZWRS
ZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgIEZsb2F0UG9pbnQgc2xpZGVyVG9wUmlnaHQgPSBzbGlk
ZXJUb3BMZWZ0OwotICAgICAgICBzbGlkZXJUb3BSaWdodC5tb3ZlKDAuMGYsIGJ1ZmZlcmVkUmVj
dC5oZWlnaHQoKSk7Ci0gICAgICAgIAotICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50
ID0gR3JhZGllbnQ6OmNyZWF0ZShzbGlkZXJUb3BMZWZ0LCBzbGlkZXJUb3BSaWdodCk7Ci0gICAg
ICAgIENvbG9yIHN0YXJ0Q29sb3IgPSBvYmplY3QtPnN0eWxlKCktPmNvbG9yKCk7Ci0gICAgICAg
IGdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBzdGFydENvbG9yKTsKLSAgICAgICAgZ3JhZGll
bnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKHN0YXJ0Q29sb3IucmVkKCkgLyAyLCBzdGFydENv
bG9yLmdyZWVuKCkgLyAyLCBzdGFydENvbG9yLmJsdWUoKSAvIDIsIHN0YXJ0Q29sb3IuYWxwaGEo
KSkpOwotIAotICAgICAgICBjb250ZXh0LT5zZXRGaWxsR3JhZGllbnQoZ3JhZGllbnQpOwotICAg
ICAgICBjb250ZXh0LT5hZGRQYXRoKFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoYnVmZmVy
ZWRSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywg
Ym90dG9tUmlnaHRSYWRpdXMpKTsKLSAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKTsKLSAgICB9
Ci0gICAgCi0gICAgY29udGV4dC0+cmVzdG9yZSgpOyAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpwYWludE1lZGlhQ29udHJvbHNQ
YXJ0KE1lZGlhU2xpZGVyLCBvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiB9CiAKIGJvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9i
amVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVu
dCA9IG1lZGlhRWxlbWVudFBhcmVudChvYmplY3QtPm5vZGUoKSk7Ci0gICAgaWYgKCFtZWRpYUVs
ZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCA9IHBhaW50SW5mby5jb250ZXh0OwotICAgIENvbG9yIG9yaWdpbmFsQ29sb3IgPSBjb250
ZXh0LT5zdHJva2VDb2xvcigpOwotICAgIGlmIChvcmlnaW5hbENvbG9yICE9IENvbG9yOjp3aGl0
ZSkKLSAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlKTsKLQotICAg
IGludCB4ID0gcmVjdC54KCkgKyByZWN0LndpZHRoKCkgLyAyOwotICAgIGNvbnRleHQtPmRyYXdM
aW5lKEludFBvaW50KHgsIHJlY3QueSgpKSwgIEludFBvaW50KHgsIHJlY3QueSgpICsgcmVjdC5o
ZWlnaHQoKSkpOwotICAgIAotICAgIGlmIChvcmlnaW5hbENvbG9yICE9IENvbG9yOjp3aGl0ZSkK
LSAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Iob3JpZ2luYWxDb2xvcik7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRN
ZWRpYUNvbnRyb2xzUGFydChNZWRpYVZvbHVtZVNsaWRlciwgb2JqZWN0LCBwYWludEluZm8sIHJl
Y3QpOwogfQogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFTbGlkZXJU
aHVtYihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAoIW9iamVjdC0+cGFy
ZW50KCktPmlzU2xpZGVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBw
YWludE1lZGlhQnV0dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhU2xp
ZGVyVGh1bWJJbWFnZSgpKTsKKyAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVt
OjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhU2xpZGVyVGh1bWIsIG9iamVjdCwgcGFpbnRJ
bmZvLCByZWN0KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlh
Vm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYg
KCFvYmplY3QtPnBhcmVudCgpLT5pc1NsaWRlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBhaW50SW5mby5jb250ZXh0LCBy
ZWN0LCBtZWRpYVZvbHVtZVNsaWRlclRodW1iSW1hZ2UoKSk7CisgICAgcmV0dXJuIFJlbmRlck1l
ZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVZvbHVtZVNs
aWRlclRodW1iLCBvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiB9CiAKIGJvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYUNvbnRyb2xzQmFja2dyb3VuZChSZW5kZXJPYmplY3Qq
IG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKIHsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBt
ZWRpYUVsZW1lbnRQYXJlbnQob2JqZWN0LT5ub2RlKCkpOwotICAgIGlmICghbWVkaWFFbGVtZW50
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQotICAg
IHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7
Ci0gICAgICAgIENvbG9yIG9yaWdpbmFsQ29sb3IgPSBjb250ZXh0LT5zdHJva2VDb2xvcigpOwot
IAotICAgICAgICAvLyBEcmF3cyB0aGUgbGVmdCBib3JkZXIsIGl0IGlzIGFsd2F5cyAxcHggd2lk
ZS4KLSAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Iob2JqZWN0LT5zdHlsZSgpLT5ib3Jk
ZXJMZWZ0Q29sb3IoKSk7Ci0gICAgICAgIGNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KHJlY3Qu
eCgpICsgMSwgcmVjdC55KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChy
ZWN0LngoKSArIDEsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgIAotCi0gICAgICAgIC8vIERyYXdzIHRoZSByaWdodCBib3JkZXIsIGl0IGlzIGFs
d2F5cyAxcHggd2lkZS4KLSAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Iob2JqZWN0LT5z
dHlsZSgpLT5ib3JkZXJSaWdodENvbG9yKCkpOwotICAgICAgICBjb250ZXh0LT5kcmF3TGluZShJ
bnRQb2ludChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIDEsIHJlY3QueSgpKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgSW50UG9pbnQocmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSAxLCBy
ZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnRleHQtPnNl
dFN0cm9rZUNvbG9yKG9yaWdpbmFsQ29sb3IpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpwYWludE1lZGlhQ29udHJvbHNQ
YXJ0KE1lZGlhVGltZWxpbmVDb250YWluZXIsIG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKIH0K
ICAgICAKIFN0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpleHRyYU1lZGlhQ29udHJvbHNT
dHlsZVNoZWV0KCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
LmNwcAppbmRleCA0ZjQ4NmQ1Li4zYTM5NDIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiTWVk
aWFDb250cm9sRWxlbWVudHMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAj
aW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyTWVkaWFDb250cm9sc0Nocm9t
aXVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU2xpZGVy
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKQEAgLTk2LDIwICs5Nyw2IEBAIHN0YXRp
YyB2b2lkIGRyYXdCb3goU2tDYW52YXMqIGNhbnZhcywgY29uc3QgSW50UmVjdCYgcmVjdCwgY29u
c3QgU2tQYWludCYgcGFpbnQpCiAgICAgZHJhd1ZlcnRMaW5lKGNhbnZhcywgcmVjdC54KCksIHJl
Y3QueSgpLCBib3R0b20sIHBhaW50KTsKIH0KIAotI2lmIEVOQUJMRShWSURFTykKLS8vIEF0dGVt
cHQgdG8gcmV0cmlldmUgYSBIVE1MTWVkaWFFbGVtZW50IGZyb20gYSBOb2RlLiBSZXR1cm5zIE5V
TEwgaWYgb25lIGNhbm5vdCBiZSBmb3VuZC4KLXN0YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnRQYXJlbnQoTm9kZSogbm9kZSkKLXsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgp
OwotICAgIGlmICghbWVkaWFOb2RlIHx8ICghbWVkaWFOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dmlkZW9UYWcpICYmICFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphdWRpb1Rh
ZykpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWVk
aWFFbGVtZW50Kj4obWVkaWFOb2RlKTsKLX0KLSNlbmRpZgotCiAvLyBXZSBhaW0gdG8gbWF0Y2gg
SUUgaGVyZS4KIC8vIC1JRSB1c2VzIGEgZm9udCBiYXNlZCBvbiB0aGUgZW5jb2RpbmcgYXMgdGhl
IGRlZmF1bHQgZm9udCBmb3IgZm9ybSBjb250cm9scy4KIC8vIC1HZWNrbyB1c2VzIE1TIFNoZWxs
IERsZyAoYWN0dWFsbHkgY2FsbHMgR2V0U3RvY2tPYmplY3QoREVGQVVMVF9HVUlfRk9OVCksCkBA
IC00ODYsNDIgKzQ3MywxMCBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYUJ1dHRv
bkludGVybmFsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwg
SW1hZ2UqIGltYWdlKQotewotICAgIC8vIENyZWF0ZSBhIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSBm
b3IgdGhlIGltYWdlIHRoYXQgaXMgY2VudGVyZWQgaW4gdGhlIGRyYXdpbmcgcmVjdGFuZ2xlLCBy
b3VuZGVkIGxlZnQsIGFuZCBkb3duLgotICAgIEludFJlY3QgaW1hZ2VSZWN0ID0gaW1hZ2UtPnJl
Y3QoKTsKLSAgICBpbWFnZVJlY3Quc2V0WShyZWN0LnkoKSArIChyZWN0LmhlaWdodCgpIC0gaW1h
Z2UtPmhlaWdodCgpICsgMSkgLyAyKTsKLSAgICBpbWFnZVJlY3Quc2V0WChyZWN0LngoKSArIChy
ZWN0LndpZHRoKCkgLSBpbWFnZS0+d2lkdGgoKSArIDEpIC8gMik7Ci0KLSAgICBjb250ZXh0LT5k
cmF3SW1hZ2UoaW1hZ2UsIGltYWdlUmVjdCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wg
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFDb250cm9sc0JhY2tncm91bmQoUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvYmplY3QtPm5v
ZGUoKSk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCi0gICAgewotICAgICAgICBTa0NhbnZhcyogY2FudmFz
ID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKLSAgICAg
ICAgU2tQYWludCBwYWludDsKLQotICAgICAgICAvLyBEcmF3cyB0aGUgbGVmdCBib3JkZXIsIGl0
IGlzIGFsd2F5cyAxcHggd2lkZS4KLSAgICAgICAgcGFpbnQuc2V0Q29sb3Iob2JqZWN0LT5zdHls
ZSgpLT5ib3JkZXJMZWZ0Q29sb3IoKS5yZ2IoKSk7Ci0gICAgICAgIGNhbnZhcy0+ZHJhd0xpbmUo
cmVjdC54KCkgKyAxLCByZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZWN0Lngo
KSArIDEsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBwYWludCk7Ci0KLSAgICAgICAgLy8gRHJhd3MgdGhlIHJpZ2h0IGJvcmRlciwgaXQgaXMgYWx3
YXlzIDFweCB3aWRlLgotICAgICAgICBwYWludC5zZXRDb2xvcihvYmplY3QtPnN0eWxlKCktPmJv
cmRlclJpZ2h0Q29sb3IoKS5yZ2IoKSk7Ci0gICAgICAgIGNhbnZhcy0+ZHJhd0xpbmUocmVjdC54
KCkgKyByZWN0LndpZHRoKCkgLSAxLCByZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICByZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIDEsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBwYWludCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250
cm9sc1BhcnQoTWVkaWFUaW1lbGluZUNvbnRhaW5lciwgb2JqZWN0LCBwYWludEluZm8sIHJlY3Qp
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0ocGFp
bnRJbmZvKTsKQEAgLTUzMyw2MiArNDg4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6cGFpbnRNZWRpYUNvbnRyb2xzQmFja2dyb3VuZChSZW5kZXJPYmplY3QqIG9iamVjdCwKIGJv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJP
YmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICNpZiBFTkFCTEUoVklERU8pCi0gICAgSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50KG9iamVjdC0+bm9kZSgp
KTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
U2tDYW52YXMqIGNhbnZhcyA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCk7Ci0gICAgU2tSZWN0IGJhY2tncm91bmRSZWN0OwotICAgIGJhY2tncm91bmRSZWN0
LnNldChyZWN0LngoKSwgcmVjdC55KCksIHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCByZWN0Lnko
KSArIHJlY3QuaGVpZ2h0KCkpOwotCi0gICAgU2tQYWludCBwYWludDsKLSAgICBwYWludC5zZXRB
bnRpQWxpYXModHJ1ZSk7Ci0KLSAgICAvLyBEcmF3IHRoZSBib3JkZXIgb2YgdGhlIHRpbWUgYmFy
LiBUaGUgYm9yZGVyIG9ubHkgaGFzIG9uZSBzaW5nbGUgY29sb3IsCi0gICAgLy8gd2lkdGggYW5k
IHJhZGl1cy4gU28gdXNlIHRoZSBwcm9wZXJ0eSBvZiB0aGUgbGVmdCBib3JkZXIuCi0gICAgU2tD
b2xvciBib3JkZXJDb2xvciA9IG9iamVjdC0+c3R5bGUoKS0+Ym9yZGVyTGVmdENvbG9yKCkucmdi
KCk7Ci0gICAgaW50IGJvcmRlcldpZHRoID0gb2JqZWN0LT5zdHlsZSgpLT5ib3JkZXJMZWZ0V2lk
dGgoKTsKLSAgICBJbnRTaXplIGJvcmRlclJhZGl1cyA9IG9iamVjdC0+c3R5bGUoKS0+Ym9yZGVy
VG9wTGVmdFJhZGl1cygpOwotICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtTdHJva2VfU3R5
bGUpOwotICAgIHBhaW50LnNldFN0cm9rZVdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBwYWludC5z
ZXRDb2xvcihib3JkZXJDb2xvcik7Ci0gICAgY2FudmFzLT5kcmF3Um91bmRSZWN0KGJhY2tncm91
bmRSZWN0LCBib3JkZXJSYWRpdXMud2lkdGgoKSwgYm9yZGVyUmFkaXVzLmhlaWdodCgpLCBwYWlu
dCk7Ci0KLSAgICAvLyBEcmF3IHRoZSBiYWNrZ3JvdW5kIG9mIHRoZSB0aW1lIGJhci4KLSAgICBT
a0NvbG9yIGJhY2tncm91bmRDb2xvciA9IG9iamVjdC0+c3R5bGUoKS0+YmFja2dyb3VuZENvbG9y
KCkucmdiKCk7Ci0gICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a0ZpbGxfU3R5bGUpOwotICAg
IHBhaW50LnNldENvbG9yKGJhY2tncm91bmRDb2xvcik7Ci0gICAgY2FudmFzLT5kcmF3Um91bmRS
ZWN0KGJhY2tncm91bmRSZWN0LCBib3JkZXJSYWRpdXMud2lkdGgoKSwgYm9yZGVyUmFkaXVzLmhl
aWdodCgpLCBwYWludCk7Ci0KLSAgICBpZiAoYmFja2dyb3VuZFJlY3Qud2lkdGgoKSA+PSAzICYm
IGJhY2tncm91bmRSZWN0LmhlaWdodCgpID49IDMpCi0gICAgewotICAgICAgICAvLyBEcmF3IHRo
ZSBidWZmZXJlZCByYW5nZXMuCi0gICAgICAgIC8vIEZJWE1FOiBEcmF3IG11bHRpcGxlIHJhbmdl
cyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgYnVmZmVyZWQgcmFuZ2VzLgotICAgICAgICBTa1JlY3Qg
YnVmZmVyZWRSZWN0OwotICAgICAgICBidWZmZXJlZFJlY3Quc2V0KGJhY2tncm91bmRSZWN0LmZM
ZWZ0ICsgMiwgYmFja2dyb3VuZFJlY3QuZlRvcCArIDIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgYmFja2dyb3VuZFJlY3QuZlJpZ2h0IC0gMSwgYmFja2dyb3VuZFJlY3QuZkJvdHRvbSAtIDEp
OwotICAgICAgICBpbnQgd2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KGJ1ZmZlcmVkUmVjdC53aWR0
aCgpICogbWVkaWFFbGVtZW50LT5wZXJjZW50TG9hZGVkKCkpOwotICAgICAgICBidWZmZXJlZFJl
Y3QuZlJpZ2h0ID0gYnVmZmVyZWRSZWN0LmZMZWZ0ICsgd2lkdGg7Ci0KLSAgICAgICAgU2tQb2lu
dCBwb2ludHNbMl0gPSB7IHsgMCwgYnVmZmVyZWRSZWN0LmZUb3AgfSwgeyAwLCBidWZmZXJlZFJl
Y3QuZkJvdHRvbSB9IH07Ci0gICAgICAgIFNrQ29sb3Igc3RhcnRDb2xvciA9IG9iamVjdC0+c3R5
bGUoKS0+Y29sb3IoKS5yZ2IoKTsKLSAgICAgICAgU2tDb2xvciBlbmRDb2xvciA9IFNrQ29sb3JT
ZXRSR0IoU2tDb2xvckdldFIoc3RhcnRDb2xvcikgLyAyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTa0NvbG9yR2V0RyhzdGFydENvbG9yKSAvIDIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrQ29sb3JHZXRCKHN0YXJ0Q29sb3Ip
IC8gMik7Ci0gICAgICAgIFNrQ29sb3IgY29sb3JzWzJdID0geyBzdGFydENvbG9yLCBlbmRDb2xv
ciB9OwotICAgICAgICBTa1NoYWRlciogZ3JhZGllbnQgPSBTa0dyYWRpZW50U2hhZGVyOjpDcmVh
dGVMaW5lYXIocG9pbnRzLCBjb2xvcnMsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocG9pbnRzKSAvIHNpemVvZihw
b2ludHNbMF0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2tTaGFkZXI6OmtNaXJyb3JfVGlsZU1vZGUsIDApOwotCi0gICAgICAg
IHBhaW50LnJlc2V0KCk7Ci0gICAgICAgIHBhaW50LnNldFNoYWRlcihncmFkaWVudCk7Ci0gICAg
ICAgIHBhaW50LnNldEFudGlBbGlhcyh0cnVlKTsKLSAgICAgICAgLy8gQ2hlY2sgZm9yIHJvdW5k
IHJlY3Qgd2l0aCB6ZXJvIHdpZHRoIG9yIGhlaWdodCwgb3RoZXJ3aXNlIFNraWEgd2lsbCBhc3Nl
cnQKLSAgICAgICAgaWYgKGJ1ZmZlcmVkUmVjdC53aWR0aCgpID4gMCAmJiBidWZmZXJlZFJlY3Qu
aGVpZ2h0KCkgPiAwKQotICAgICAgICAgICAgY2FudmFzLT5kcmF3Um91bmRSZWN0KGJ1ZmZlcmVk
UmVjdCwgYm9yZGVyUmFkaXVzLndpZHRoKCksIGJvcmRlclJhZGl1cy5oZWlnaHQoKSwgcGFpbnQp
OwotICAgICAgICBncmFkaWVudC0+dW5yZWYoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xz
UGFydChNZWRpYVNsaWRlciwgb2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0ob2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0ocGFpbnRJbmZvKTsKQEAgLTYw
MCwxNyArNTAwLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVNs
aWRlclRyYWNrKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdAogYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQogewogI2lmIEVOQUJMRShWSURFTykKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBt
ZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQob2JqZWN0LT5ub2RlKCkpOwotICAgIGlm
ICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTa0NhbnZhcyog
Y2FudmFzID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsK
LSAgICBTa1BhaW50IHBhaW50OwotICAgIHBhaW50LnNldENvbG9yKFNLX0NvbG9yV0hJVEUpOwot
Ci0gICAgaW50IHggPSByZWN0LngoKSArIHJlY3Qud2lkdGgoKSAvIDI7Ci0gICAgY2FudmFzLT5k
cmF3TGluZSh4LCByZWN0LnkoKSwgeCwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpLCBwYWludCk7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1
bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVZvbHVtZVNsaWRlciwgb2JqZWN0LCBwYWlu
dEluZm8sIHJlY3QpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKICAgICBVTlVT
RURfUEFSQU0ocGFpbnRJbmZvKTsKQEAgLTYxOSwzMSArNTA5LDEwIEBAIGJvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3Qq
IG9iamVjdCwKICNlbmRpZgogfQogCi1zdGF0aWMgSW1hZ2UqIG1lZGlhU2xpZGVyVGh1bWJJbWFn
ZSgpCi17Ci0gICAgc3RhdGljIEltYWdlKiBtZWRpYVNsaWRlclRodW1iID0gSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKCJtZWRpYVNsaWRlclRodW1iIikucmVsZWFzZVJlZigpOwotICAgIHJl
dHVybiBtZWRpYVNsaWRlclRodW1iOwotfQotCi1zdGF0aWMgSW1hZ2UqIG1lZGlhVm9sdW1lU2xp
ZGVyVGh1bWJJbWFnZSgpCi17Ci0gICAgc3RhdGljIEltYWdlKiBtZWRpYVZvbHVtZVNsaWRlclRo
dW1iID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVZvbHVtZVNsaWRlclRodW1i
IikucmVsZWFzZVJlZigpOwotICAgIHJldHVybiBtZWRpYVZvbHVtZVNsaWRlclRodW1iOwotfQot
CiB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVu
ZGVyT2JqZWN0KiBvYmplY3QpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIEltYWdl
KiB0aHVtYkltYWdlID0gMDsKLSAgICBpZiAob2JqZWN0LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkg
PT0gTWVkaWFTbGlkZXJUaHVtYlBhcnQpCi0gICAgICAgIHRodW1iSW1hZ2UgPSBtZWRpYVNsaWRl
clRodW1iSW1hZ2UoKTsKLSAgICBlbHNlIGlmIChvYmplY3QtPnN0eWxlKCktPmFwcGVhcmFuY2Uo
KSA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCkKLSAgICAgICAgdGh1bWJJbWFnZSA9IG1l
ZGlhVm9sdW1lU2xpZGVyVGh1bWJJbWFnZSgpOwotCi0gICAgaWYgKHRodW1iSW1hZ2UpIHsKLSAg
ICAgICAgb2JqZWN0LT5zdHlsZSgpLT5zZXRXaWR0aChMZW5ndGgodGh1bWJJbWFnZS0+d2lkdGgo
KSwgRml4ZWQpKTsKLSAgICAgICAgb2JqZWN0LT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHRo
dW1iSW1hZ2UtPmhlaWdodCgpLCBGaXhlZCkpOwotICAgIH0KKyAgICBSZW5kZXJNZWRpYUNvbnRy
b2xzQ2hyb21pdW06OmFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKG9iamVjdCk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwogI2VuZGlmCkBAIC02NTIsMTAgKzUyMSw3IEBAIHZv
aWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJP
YmplY3QqIG9iamVjdCkgY29uc3QKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50
TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICNpZiBFTkFC
TEUoVklERU8pCi0gICAgaWYgKCFvYmplY3QtPnBhcmVudCgpLT5pc1NsaWRlcigpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBh
aW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYVNsaWRlclRodW1iSW1hZ2UoKSk7CisgICAgcmV0
dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChN
ZWRpYVNsaWRlclRodW1iLCBvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiAjZWxzZQogICAgIFVO
VVNFRF9QQVJBTShvYmplY3QpOwogICAgIFVOVVNFRF9QQVJBTShwYWludEluZm8pOwpAQCAtNjY3
LDEwICs1MzMsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhU2xp
ZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0CiBib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1Ta2lhOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIGlmICghb2JqZWN0LT5wYXJlbnQo
KS0+aXNTbGlkZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHBhaW50
TWVkaWFCdXR0b25JbnRlcm5hbChwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFWb2x1bWVT
bGlkZXJUaHVtYkltYWdlKCkpOworICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21p
dW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFWb2x1bWVTbGlkZXJUaHVtYiwgb2JqZWN0
LCBwYWludEluZm8sIHJlY3QpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKICAg
ICBVTlVTRURfUEFSQU0ocGFpbnRJbmZvKTsKQEAgLTY4MiwxOCArNTQ1LDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9i
amVjdCogb2JqZWN0LAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVBs
YXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAjaWYgRU5BQkxFKFZJREVP
KQotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVu
dChvYmplY3QtPm5vZGUoKSk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHN0YXRpYyBJbWFnZSogbWVkaWFQbGF5ID0gSW1hZ2U6OmxvYWRQbGF0
Zm9ybVJlc291cmNlKCJtZWRpYVBsYXkiKS5yZWxlYXNlUmVmKCk7Ci0gICAgc3RhdGljIEltYWdl
KiBtZWRpYVBhdXNlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVBhdXNlIiku
cmVsZWFzZVJlZigpOwotICAgIHN0YXRpYyBJbWFnZSogbWVkaWFQbGF5RGlzYWJsZWQgPSBJbWFn
ZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhUGxheURpc2FibGVkIikucmVsZWFzZVJlZigp
OwotCi0gICAgaWYgKG1lZGlhRWxlbWVudC0+bmV0d29ya1N0YXRlKCkgPT0gSFRNTE1lZGlhRWxl
bWVudDo6TkVUV09SS19OT19TT1VSQ0UpCi0gICAgICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9u
SW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhUGxheURpc2FibGVkKTsKLQot
ICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJl
Y3QsIG1lZGlhRWxlbWVudC0+cGF1c2VkKCkgPyBtZWRpYVBsYXkgOiBtZWRpYVBhdXNlKTsKKyAg
ICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpwYWludE1lZGlhQ29udHJvbHNQ
YXJ0KE1lZGlhUGxheUJ1dHRvbiwgb2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0ocGFpbnRJbmZvKTsKQEAg
LTcwNSwxOCArNTU3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRp
YVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFIKIGJvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewogI2lmIEVOQUJMRShWSURFTykKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQob2JqZWN0LT5ub2RlKCkpOwotICAgIGlmICgh
bWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSW1hZ2Uq
IHNvdW5kRnVsbCA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFTb3VuZEZ1bGwi
KS5yZWxlYXNlUmVmKCk7Ci0gICAgc3RhdGljIEltYWdlKiBzb3VuZE5vbmUgPSBJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhU291bmROb25lIikucmVsZWFzZVJlZigpOwotICAgIHN0
YXRpYyBJbWFnZSogc291bmREaXNhYmxlZCA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgi
bWVkaWFTb3VuZERpc2FibGVkIikucmVsZWFzZVJlZigpOwotCi0gICAgaWYgKG1lZGlhRWxlbWVu
dC0+bmV0d29ya1N0YXRlKCkgPT0gSFRNTE1lZGlhRWxlbWVudDo6TkVUV09SS19OT19TT1VSQ0Ug
fHwgIW1lZGlhRWxlbWVudC0+aGFzQXVkaW8oKSkKLSAgICAgICAgcmV0dXJuIHBhaW50TWVkaWFC
dXR0b25JbnRlcm5hbChwYWludEluZm8uY29udGV4dCwgcmVjdCwgc291bmREaXNhYmxlZCk7Ci0K
LSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBhaW50SW5mby5jb250ZXh0LCBy
ZWN0LCBtZWRpYUVsZW1lbnQtPm11dGVkKCkgPyBzb3VuZE5vbmU6IHNvdW5kRnVsbCk7CisgICAg
cmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFy
dChNZWRpYU11dGVCdXR0b24sIG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKICNlbHNlCiAgICAg
VU5VU0VEX1BBUkFNKG9iamVjdCk7CiAgICAgVU5VU0VEX1BBUkFNKHBhaW50SW5mbyk7CkBAIC04
NzEsMTMgKzcxMiw3IEBAIGludCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YnV0dG9uSW50ZXJu
YWxQYWRkaW5nQm90dG9tKCkgY29uc3QKICNpZiBFTkFCTEUoVklERU8pCiBib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1Ta2lhOjpzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENvbnRyb2xQYXJ0
IHBhcnQsIEVsZW1lbnQqIGUpCiB7Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KGUpOwotICAgIHN3aXRjaCAocGFydCkg
ewotICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uUGFydDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzaG91bGRSZW5kZXJNZWRp
YUNvbnRyb2xQYXJ0KHBhcnQsIGUpOwotICAgIH0KKyAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250
cm9sc0Nocm9taXVtOjpzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KHBhcnQsIGUpOwogfQog
I2VuZGlmCiAK
</data>
<flag name="review"
          id="22023"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
    <flag name="commit-queue"
          id="22024"
          type_id="3"
          status="-"
          setter="eric.carlson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40815</attachid>
            <date>2009-10-07 12:51:07 -0700</date>
            <delta_ts>2009-10-07 13:25:07 -0700</delta_ts>
            <desc>Round 3</desc>
            <filename>refactor_controls.patch</filename>
            <type>text/plain</type>
            <size>46947</size>
            <attacher name="Andrew Scherkus">scherkus</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZTcyNWZjNy4uMWE5MTRjOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAwOS0xMC0wNiAgQW5kcmV3IFNjaGVy
a3VzICA8c2NoZXJrdXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIFJlbmRlclRoZW1lQ2hyb21pdW1NYWMgYW5k
IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhIHRvIHJlbmRlciBtZWRpYSBjb250cm9scyB1c2luZyBH
cmFwaGljc0NvbnRleHQuCisKKyAgICAgICAgRGVzaWduIHdhcyBiYXNlZCBvbiBleGlzdGluZyBS
ZW5kZXJNZWRpYUNvbnRyb2xzLmNwcCB1c2VkIGJ5IFJlbmRlclRoZW1lU2FmYXJpL1dpbi4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk5ODcKKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIGxheW91dCB0ZXN0cyBhcyBubyBuZXcgZnVuY3Rp
b25hbGl0eSB3YXMgaW50cm9kdWNlZC4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaTogQWRkZWQg
UmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmNwcC9oLgorICAgICAgICAqIGNzcy9tZWRpYUNv
bnRyb2xzQ2hyb21pdW0uY3NzOiBUd2Vha2VkIG1lZGlhIHNsaWRlciBwb3NpdGlvbiBhbmQgYm9y
ZGVyIHN0eWxlLgorICAgICAgICAqIHJlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp0b1BhcmVudE1lZGlhRWxlbWVudCk6IFRha2VuIGZyb20gUmVu
ZGVyTWVkaWFDb250cm9scy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbEVsZW1lbnQ6
OnJlbmRlcmVySXNOZWVkZWQpOiBEb24ndCBjYWxsIHNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBh
cnQoKSBpZiBlbGVtZW50IGhhcyBubyBhcHBlYXJhbmNlLgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFDb250cm9sSW5wdXRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKTogRGl0dG8uCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwOiBNb3ZlZCBwYXJlbnRNZWRpYUVs
ZW1lbnQoKSB0byBNZWRpYUNvbnRyb2xFbGVtZW50cy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpw
bGF0Zm9ybVJlc291cmNlKTogSGVscGVyIHRvIGxvYWQgYW5kIGNhY2hlIG1lZGlhIGNvbnRyb2wg
aW1hZ2UgcmVzb3VyY2VzLgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFTbGlkZXJUaHVtYkltYWdl
KTogSW1wbGVtZW50YXRpb24gcmVmYWN0b3JlZCBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW1NYWMv
U2tpYS4KKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhVm9sdW1lU2xpZGVyVGh1bWJJbWFnZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRNZWRpYUJ1dHRvbik6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6cGFpbnRNZWRpYU11dGVCdXR0b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OnBhaW50TWVkaWFQbGF5QnV0dG9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpwYWlu
dE1lZGlhU2xpZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpwYWludE1lZGlhU2xpZGVy
VGh1bWIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXIp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYik6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRNZWRpYVRpbWVsaW5lQ29udGFpbmVyKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OnNo
b3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydCk6IFNhbWUK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6YWRqdXN0TWVk
aWFTbGlkZXJUaHVtYlNpemUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZWRpYUNvbnRy
b2xzQ2hyb21pdW0uaDogQWRkZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1NYWMuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNsaWRl
clRodW1iU2l6ZSk6IEltcGxlbWVudGF0aW9uIGRlbGVnYXRlZCB0byBSZW5kZXJNZWRpYUNvbnRy
b2xzQ2hyb21pdW0uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpz
aG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhUGxheUJ1dHRvbik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYU11dGVCdXR0
b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBh
aW50TWVkaWFTbGlkZXJUcmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhU2xpZGVyVGh1
bWIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBh
aW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYUNvbnRyb2xzQmFja2dyb3VuZCk6IERpdHRv
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYUNvbnRyb2xz
QmFja2dyb3VuZCk6IEltcGxlbWVudGF0aW9uIGRlbGVnYXRlZCB0byBSZW5kZXJNZWRpYUNvbnRy
b2xzQ2hyb21pdW0uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6
cGFpbnRNZWRpYVNsaWRlclRyYWNrKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6YWRqdXN0U2xpZGVyVGh1
bWJTaXplKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6cGFpbnRNZWRpYVNsaWRlclRodW1iKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVBs
YXlCdXR0b24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1T
a2lhOjpwYWludE1lZGlhTXV0ZUJ1dHRvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQpOiBEaXR0
by4KKwogMjAwOS0xMC0wMiAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQWRlbGUgUGV0ZXJzb24uCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDAzZjZmODQuLmFjNjA3ZjMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0yOTM4LDYgKzI5MzgsOCBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJN
YXJxdWVlLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAnLAogICAg
ICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJNZWRpYS5oJywKKyAgICAgICAgICAgICdyZW5kZXJp
bmcvUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmNwcCcsCisgICAgICAgICAgICAncmVuZGVy
aW5nL1JlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdyZW5kZXJp
bmcvUmVuZGVyTWVudUxpc3QuY3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAnLApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc0Nocm9taXVtLmNzcyBiL1dlYkNvcmUv
Y3NzL21lZGlhQ29udHJvbHNDaHJvbWl1bS5jc3MKaW5kZXggMTZmZjBlNC4uMGY2NjdiZCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc0Nocm9taXVtLmNzcworKysgYi9XZWJD
b3JlL2Nzcy9tZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3NzCkBAIC04Myw4ICs4Myw4IEBAIGF1ZGlv
Ojotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lLWNvbnRhaW5lciwgdmlkZW86Oi13ZWJr
aXQtbWVkaWEtY29udHJvbHMtCiAgICAgd2lkdGg6IGF1dG87CiAgICAgaGVpZ2h0OiAzMnB4Owog
Ci0gICAgYm9yZGVyLWxlZnQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKLSAgICBi
b3JkZXItcmlnaHQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKKyAgICBib3JkZXIt
bGVmdDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKKyAgICBib3JkZXItcmln
aHQ6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiB9CiAKIGF1ZGlvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5LCB2aWRlbzo6LXdlYmtpdC1t
ZWRpYS1jb250cm9scy1jdXJyZW50LXRpbWUtZGlzcGxheSB7CkBAIC0xNDEsNyArMTQxLDcgQEAg
YXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUsIHZpZGVvOjotd2Via2l0LW1l
ZGlhLWNvbnRyb2xzLXRpbWVsaW5lIHsKICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLXNs
aWRlcjsKICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgdG9wOiBhdXRvOwotICAgIGJvdHRv
bTogOHB4OworICAgIGJvdHRvbTogN3B4OwogICAgIGxlZnQ6IDZweDsKICAgICByaWdodDogNjVw
eDsKICAgICBoZWlnaHQ6IDE2cHg7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9NZWRp
YUNvbnRyb2xFbGVtZW50cy5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xFbGVt
ZW50cy5jcHAKaW5kZXggMjllMmU1Ny4uOWE5MTNjOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL01l
ZGlhQ29udHJvbEVsZW1lbnRzLmNwcApAQCAtNDYsNiArNDYsMTYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCitIVE1MTWVkaWFFbGVtZW50KiB0
b1BhcmVudE1lZGlhRWxlbWVudChSZW5kZXJPYmplY3QqIG8pCit7CisgICAgTm9kZSogbm9kZSA9
IG8tPm5vZGUoKTsKKyAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlID8gbm9kZS0+c2hhZG93QW5j
ZXN0b3JOb2RlKCkgOiAwOworICAgIGlmICghbWVkaWFOb2RlIHx8ICghbWVkaWFOb2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dmlkZW9UYWcpICYmICFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjphdWRpb1RhZykpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obWVkaWFOb2RlKTsKK30KKwogLy8gRklYTUU6IFRo
ZXNlIGNvbnN0YW50cyBtYXkgbmVlZCB0byBiZSB0d2Vha2VkIHRvIGJldHRlciBtYXRjaCB0aGUg
c2Vla2luZyBpbiB0aGUgUXVpY2tUaW1lIHBsdWctaW4uCiBzdGF0aWMgY29uc3QgZmxvYXQgY1Nl
ZWtSZXBlYXREZWxheSA9IDAuMWY7CiBzdGF0aWMgY29uc3QgZmxvYXQgY1N0ZXBUaW1lID0gMC4w
N2Y7CkBAIC0xMzgsNyArMTQ4LDcgQEAgYm9vbCBNZWRpYUNvbnRyb2xFbGVtZW50OjpyZW5kZXJl
cklzTmVlZGVkKFJlbmRlclN0eWxlKiBzdHlsZSkKICAgICBBU1NFUlQoZG9jdW1lbnQoKS0+cGFn
ZSgpKTsKIAogICAgIHJldHVybiBIVE1MRGl2RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHls
ZSkgJiYgcGFyZW50KCkgJiYgcGFyZW50KCktPnJlbmRlcmVyKCkKLSAgICAgICAgJiYgZG9jdW1l
bnQoKS0+cGFnZSgpLT50aGVtZSgpLT5zaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KHN0eWxl
LT5hcHBlYXJhbmNlKCksIG1fbWVkaWFFbGVtZW50KTsKKyAgICAgICAgJiYgKCFzdHlsZS0+aGFz
QXBwZWFyYW5jZSgpIHx8IGRvY3VtZW50KCktPnBhZ2UoKS0+dGhlbWUoKS0+c2hvdWxkUmVuZGVy
TWVkaWFDb250cm9sUGFydChzdHlsZS0+YXBwZWFyYW5jZSgpLCBtX21lZGlhRWxlbWVudCkpOwog
fQogICAgIAogdm9pZCBNZWRpYUNvbnRyb2xFbGVtZW50OjphdHRhY2goKQpAQCAtMzY2LDcgKzM3
Niw3IEBAIGJvb2wgTWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKFJl
bmRlclN0eWxlKiBzdHlsZSkKICAgICBBU1NFUlQoZG9jdW1lbnQoKS0+cGFnZSgpKTsKIAogICAg
IHJldHVybiBIVE1MSW5wdXRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKSAmJiBwYXJl
bnQoKSAmJiBwYXJlbnQoKS0+cmVuZGVyZXIoKQotICAgICAgICAmJiBkb2N1bWVudCgpLT5wYWdl
KCktPnRoZW1lKCktPnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQoc3R5bGUtPmFwcGVhcmFu
Y2UoKSwgbV9tZWRpYUVsZW1lbnQpOworICAgICAgICAmJiAoIXN0eWxlLT5oYXNBcHBlYXJhbmNl
KCkgfHwgZG9jdW1lbnQoKS0+cGFnZSgpLT50aGVtZSgpLT5zaG91bGRSZW5kZXJNZWRpYUNvbnRy
b2xQYXJ0KHN0eWxlLT5hcHBlYXJhbmNlKCksIG1fbWVkaWFFbGVtZW50KSk7CiB9CiAKIHZvaWQg
TWVkaWFDb250cm9sSW5wdXRFbGVtZW50OjphdHRhY2goKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL01lZGlh
Q29udHJvbEVsZW1lbnRzLmgKaW5kZXggZjY5MjQ4NS4uZTU2MmJiNSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMuaAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9NZWRpYUNvbnRyb2xFbGVtZW50cy5oCkBAIC02Niw2ICs2Niw4IEBAIGVudW0gTWVkaWFD
b250cm9sRWxlbWVudFR5cGUgewogICAgIE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIKIH07CiAKK0hU
TUxNZWRpYUVsZW1lbnQqIHRvUGFyZW50TWVkaWFFbGVtZW50KFJlbmRlck9iamVjdCopOworCiBj
bGFzcyBNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVudCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVu
dCB7CiBwdWJsaWM6CiAgICAgTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQoRG9jdW1lbnQq
LCBIVE1MTWVkaWFFbGVtZW50Kik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNZWRpYUNvbnRyb2xzLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhQ29udHJv
bHMuY3BwCmluZGV4IDBjZTA2NDIuLjQzMDNhYWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lZGlhQ29udHJvbHMuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lZGlhQ29udHJvbHMuY3BwCkBAIC04MiwxNiArODIsNiBAQCB2b2lkIFJlbmRlck1lZGlhQ29u
dHJvbHM6OmFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCogbykKICAgICBv
LT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4obWVkaWFTbGlkZXJU
aHVtYkhlaWdodCAqIHpvb21MZXZlbCksIEZpeGVkKSk7CiB9CiAKLXN0YXRpYyBIVE1MTWVkaWFF
bGVtZW50KiBwYXJlbnRNZWRpYUVsZW1lbnQoUmVuZGVyT2JqZWN0KiBvKQotewotICAgIE5vZGUq
IG5vZGUgPSBvLT5ub2RlKCk7Ci0gICAgTm9kZSogbWVkaWFOb2RlID0gbm9kZSA/IG5vZGUtPnNo
YWRvd0FuY2VzdG9yTm9kZSgpIDogMDsKLSAgICBpZiAoIW1lZGlhTm9kZSB8fCAoIW1lZGlhTm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKSAmJiAhbWVkaWFOb2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YXVkaW9UYWcpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1lZGlhTm9kZSk7Ci19Ci0KIGJvb2wg
UmVuZGVyTWVkaWFDb250cm9sczo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYUNvbnRyb2xF
bGVtZW50VHlwZSBwYXJ0LCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgQVNTRVJUKFNhZmFy
aVRoZW1lTGlicmFyeSgpKTsKQEAgLTEyMSw3ICsxMTEsNyBAQCBib29sIFJlbmRlck1lZGlhQ29u
dHJvbHM6OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFDb250cm9sRWxlbWVudFR5cGUgcGFy
dCwgUgogICAgICAgICAgICAgcGFpbnRUaGVtZVBhcnQoU2FmYXJpVGhlbWU6Ok1lZGlhU2Vla0Zv
cndhcmRCdXR0b25QYXJ0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIs
IE5TUmVndWxhckNvbnRyb2xTaXplLCBkZXRlcm1pbmVTdGF0ZShvKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBNZWRpYVNsaWRlcjogewotICAgICAgICAgICAgaWYgKEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudChvKSkKKyAgICAg
ICAgICAgIGlmIChIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVudE1lZGlh
RWxlbWVudChvKSkKICAgICAgICAgICAgICAgICBTVFBhaW50UHJvZ3Jlc3NJbmRpY2F0b3IoU2Fm
YXJpVGhlbWU6Ok1lZGlhVHlwZSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LCByLCBOU1JlZ3VsYXJDb250cm9sU2l6ZSwgMCwgbWVkaWFFbGVtZW50LT5wZXJjZW50TG9hZGVk
KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE1OSw0ICsxNDksMyBAQCBi
b29sIFJlbmRlck1lZGlhQ29udHJvbHM6OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFDb250
cm9sRWxlbWVudFR5cGUgcGFydCwgUgogI2VuZGlmICAvLyAjaWYgRU5BQkxFKFZJREVPKQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmJiYTJmYTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZWRpYUNvbnRyb2xzQ2hyb21pdW0uY3BwCkBAIC0wLDAgKzEsMjg5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlck1lZGlh
Q29udHJvbHNDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiR3JhZGllbnQuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShWSURF
TykKKwordHlwZWRlZiBXVEY6Okhhc2hNYXA8Y29uc3QgY2hhciosIEltYWdlKj4gTWVkaWFDb250
cm9sSW1hZ2VNYXA7CitzdGF0aWMgTWVkaWFDb250cm9sSW1hZ2VNYXAqIGdNZWRpYUNvbnRyb2xJ
bWFnZU1hcCA9IDA7CisKK3N0YXRpYyBJbWFnZSogcGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFy
KiBuYW1lKQoreworICAgIGlmICghZ01lZGlhQ29udHJvbEltYWdlTWFwKQorICAgICAgICBnTWVk
aWFDb250cm9sSW1hZ2VNYXAgPSBuZXcgTWVkaWFDb250cm9sSW1hZ2VNYXAoKTsKKyAgICBpZiAo
SW1hZ2UqIGltYWdlID0gZ01lZGlhQ29udHJvbEltYWdlTWFwLT5nZXQobmFtZSkpCisgICAgICAg
IHJldHVybiBpbWFnZTsKKyAgICBpZiAoSW1hZ2UqIGltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKG5hbWUpLnJlbGVhc2VSZWYoKSkgeworICAgICAgICBnTWVkaWFDb250cm9sSW1h
Z2VNYXAtPnNldChuYW1lLCBpbWFnZSk7CisgICAgICAgIHJldHVybiBpbWFnZTsKKyAgICB9Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29s
IHBhaW50TWVkaWFCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiByZWN0LCBJbWFnZSogaW1hZ2UpCit7CisgICAgLy8gQ3JlYXRlIGEgZGVzdGluYXRpb24gcmVj
dGFuZ2xlIGZvciB0aGUgaW1hZ2UgdGhhdCBpcyBjZW50ZXJlZCBpbiB0aGUgZHJhd2luZyByZWN0
YW5nbGUsIHJvdW5kZWQgbGVmdCwgYW5kIGRvd24uCisgICAgSW50UmVjdCBpbWFnZVJlY3QgPSBp
bWFnZS0+cmVjdCgpOworICAgIGltYWdlUmVjdC5zZXRZKHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0
KCkgLSBpbWFnZS0+aGVpZ2h0KCkgKyAxKSAvIDIpOworICAgIGltYWdlUmVjdC5zZXRYKHJlY3Qu
eCgpICsgKHJlY3Qud2lkdGgoKSAtIGltYWdlLT53aWR0aCgpICsgMSkgLyAyKTsKKworICAgIGNv
bnRleHQtPmRyYXdJbWFnZShpbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kworc3RhdGljIGJvb2wgcGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRN
ZWRpYUVsZW1lbnQob2JqZWN0KTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKKyAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHN0YXRpYyBJbWFnZSogc291bmRGdWxsID0gcGxhdGZvcm1SZXNvdXJj
ZSgibWVkaWFTb3VuZEZ1bGwiKTsKKyAgICBzdGF0aWMgSW1hZ2UqIHNvdW5kTm9uZSA9IHBsYXRm
b3JtUmVzb3VyY2UoIm1lZGlhU291bmROb25lIik7CisgICAgc3RhdGljIEltYWdlKiBzb3VuZERp
c2FibGVkID0gcGxhdGZvcm1SZXNvdXJjZSgibWVkaWFTb3VuZERpc2FibGVkIik7CisKKyAgICBp
ZiAobWVkaWFFbGVtZW50LT5uZXR3b3JrU3RhdGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50OjpORVRX
T1JLX05PX1NPVVJDRSB8fCAhbWVkaWFFbGVtZW50LT5oYXNBdWRpbygpKQorICAgICAgICByZXR1
cm4gcGFpbnRNZWRpYUJ1dHRvbihwYWludEluZm8uY29udGV4dCwgcmVjdCwgc291bmREaXNhYmxl
ZCk7CisKKyAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihwYWludEluZm8uY29udGV4dCwgcmVj
dCwgbWVkaWFFbGVtZW50LT5tdXRlZCgpID8gc291bmROb25lOiBzb3VuZEZ1bGwpOworfQorCitz
dGF0aWMgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVudE1lZGlh
RWxlbWVudChvYmplY3QpOworICAgIGlmICghbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhUGxheSA9IHBsYXRmb3JtUmVzb3VyY2Uo
Im1lZGlhUGxheSIpOworICAgIHN0YXRpYyBJbWFnZSogbWVkaWFQYXVzZSA9IHBsYXRmb3JtUmVz
b3VyY2UoIm1lZGlhUGF1c2UiKTsKKyAgICBzdGF0aWMgSW1hZ2UqIG1lZGlhUGxheURpc2FibGVk
ID0gcGxhdGZvcm1SZXNvdXJjZSgibWVkaWFQbGF5RGlzYWJsZWQiKTsKKworICAgIGlmIChtZWRp
YUVsZW1lbnQtPm5ldHdvcmtTdGF0ZSgpID09IEhUTUxNZWRpYUVsZW1lbnQ6Ok5FVFdPUktfTk9f
U09VUkNFKQorICAgICAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihwYWludEluZm8uY29udGV4
dCwgcmVjdCwgbWVkaWFQbGF5RGlzYWJsZWQpOworCisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0
b24ocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhRWxlbWVudC0+cGF1c2VkKCkgPyBtZWRp
YVBsYXkgOiBtZWRpYVBhdXNlKTsKK30KKworc3RhdGljIGJvb2wgcGFpbnRNZWRpYVNsaWRlcihS
ZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChvYmplY3QpOworICAgIGlmICghbWVkaWFF
bGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSBvYmplY3QtPnN0eWxlKCk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJ
bmZvLmNvbnRleHQ7CisKKyAgICAvLyBEcmF3IHRoZSBib3JkZXIgb2YgdGhlIHRpbWUgYmFyLgor
ICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBhIHJvdW5kZWQgcmVjdCBidXQgbmVlZCB0byBm
aXggR3JhcGhpY3NDb250ZXh0U2tpYSBmaXJzdC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAxNDMKKyAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgY29u
dGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOworICAgIGNvbnRleHQtPnNldFN0cm9r
ZUNvbG9yKHN0eWxlLT5ib3JkZXJMZWZ0Q29sb3IoKSk7CisgICAgY29udGV4dC0+c2V0U3Ryb2tl
VGhpY2tuZXNzKHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSk7CisgICAgY29udGV4dC0+c2V0Rmls
bENvbG9yKHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgY29udGV4dC0+ZHJhd1JlY3Qo
cmVjdCk7CisgICAgY29udGV4dC0+cmVzdG9yZSgpOworCisgICAgLy8gRHJhdyB0aGUgYnVmZmVy
ZWQgcmFuZ2VzLgorICAgIC8vIEZJWE1FOiBEcmF3IG11bHRpcGxlIHJhbmdlcyBpZiB0aGVyZSBh
cmUgbXVsdGlwbGUgYnVmZmVyZWQgcmFuZ2VzLgorICAgIC8vIEZJWE1FOiBwZXJjZW50TG9hZGVk
KCkgZG9lc24ndCBhbHdheXMgaGl0IDEuMCBzbyB3ZSdyZSB1c2luZyByb3VuZCgpLgorICAgIElu
dFJlY3QgYnVmZmVyZWRSZWN0ID0gcmVjdDsKKyAgICBidWZmZXJlZFJlY3QuaW5mbGF0ZSgtc3R5
bGUtPmJvcmRlckxlZnRXaWR0aCgpKTsKKyAgICBidWZmZXJlZFJlY3Quc2V0V2lkdGgocm91bmQo
KGJ1ZmZlcmVkUmVjdC53aWR0aCgpICogbWVkaWFFbGVtZW50LT5wZXJjZW50TG9hZGVkKCkpKSk7
CisKKyAgICAvLyBEb24ndCBib3RoZXIgZHJhd2luZyBhbiBlbXB0eSBhcmVhLgorICAgIGlmICgh
YnVmZmVyZWRSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICBJbnRQb2ludCBzbGlkZXJUb3BMZWZ0
ID0gYnVmZmVyZWRSZWN0LmxvY2F0aW9uKCk7CisgICAgICAgIEludFBvaW50IHNsaWRlclRvcFJp
Z2h0ID0gc2xpZGVyVG9wTGVmdDsKKyAgICAgICAgc2xpZGVyVG9wUmlnaHQubW92ZSgwLCBidWZm
ZXJlZFJlY3QuaGVpZ2h0KCkpOworCisgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQg
PSBHcmFkaWVudDo6Y3JlYXRlKHNsaWRlclRvcExlZnQsIHNsaWRlclRvcFJpZ2h0KTsKKyAgICAg
ICAgQ29sb3Igc3RhcnRDb2xvciA9IG9iamVjdC0+c3R5bGUoKS0+Y29sb3IoKTsKKyAgICAgICAg
Z3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIHN0YXJ0Q29sb3IpOworICAgICAgICBncmFkaWVu
dC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3Ioc3RhcnRDb2xvci5yZWQoKSAvIDIsIHN0YXJ0Q29s
b3IuZ3JlZW4oKSAvIDIsIHN0YXJ0Q29sb3IuYmx1ZSgpIC8gMiwgc3RhcnRDb2xvci5hbHBoYSgp
KSk7CisKKyAgICAgICAgY29udGV4dC0+c2F2ZSgpOworICAgICAgICBjb250ZXh0LT5zZXRTdHJv
a2VTdHlsZShOb1N0cm9rZSk7CisgICAgICAgIGNvbnRleHQtPnNldEZpbGxHcmFkaWVudChncmFk
aWVudCk7CisgICAgICAgIGNvbnRleHQtPmRyYXdSZWN0KGJ1ZmZlcmVkUmVjdCk7CisgICAgICAg
IGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3Rh
dGljIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIGlmICghb2JqZWN0LT5wYXJlbnQoKS0+aXNTbGlkZXIoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgc3RhdGljIEltYWdlKiBtZWRpYVNsaWRlclRodW1iID0gcGxhdGZv
cm1SZXNvdXJjZSgibWVkaWFTbGlkZXJUaHVtYiIpOworICAgIHJldHVybiBwYWludE1lZGlhQnV0
dG9uKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYVNsaWRlclRodW1iKTsKK30KKworc3Rh
dGljIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlcihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVudE1lZGlh
RWxlbWVudChvYmplY3QpOworICAgIGlmICghbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4
dDsKKyAgICBDb2xvciBvcmlnaW5hbENvbG9yID0gY29udGV4dC0+c3Ryb2tlQ29sb3IoKTsKKyAg
ICBpZiAob3JpZ2luYWxDb2xvciAhPSBDb2xvcjo6d2hpdGUpCisgICAgICAgIGNvbnRleHQtPnNl
dFN0cm9rZUNvbG9yKENvbG9yOjp3aGl0ZSk7CisKKyAgICBpbnQgeCA9IHJlY3QueCgpICsgcmVj
dC53aWR0aCgpIC8gMjsKKyAgICBjb250ZXh0LT5kcmF3TGluZShJbnRQb2ludCh4LCByZWN0Lnko
KSksICBJbnRQb2ludCh4LCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpKTsKKworICAgIGlmIChv
cmlnaW5hbENvbG9yICE9IENvbG9yOjp3aGl0ZSkKKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tl
Q29sb3Iob3JpZ2luYWxDb2xvcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29s
IHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICBpZiAoIW9iamVjdC0+cGFyZW50KCktPmlzU2xpZGVyKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHN0YXRpYyBJbWFnZSogbWVkaWFWb2x1bWVTbGlkZXJUaHVtYiA9IHBs
YXRmb3JtUmVzb3VyY2UoIm1lZGlhVm9sdW1lU2xpZGVyVGh1bWIiKTsKKyAgICByZXR1cm4gcGFp
bnRNZWRpYUJ1dHRvbihwYWludEluZm8uY29udGV4dCwgcmVjdCwgbWVkaWFWb2x1bWVTbGlkZXJU
aHVtYik7Cit9CisKK3N0YXRpYyBib29sIHBhaW50TWVkaWFUaW1lbGluZUNvbnRhaW5lcihSZW5k
ZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVs
ZW1lbnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChvYmplY3QpOworICAgIGlmICghbWVkaWFFbGVt
ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKSB7
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0Owor
ICAgICAgICBDb2xvciBvcmlnaW5hbENvbG9yID0gY29udGV4dC0+c3Ryb2tlQ29sb3IoKTsKKyAg
ICAgICAgZmxvYXQgb3JpZ2luYWxUaGlja25lc3MgPSBjb250ZXh0LT5zdHJva2VUaGlja25lc3Mo
KTsKKyAgICAgICAgU3Ryb2tlU3R5bGUgb3JpZ2luYWxTdHlsZSA9IGNvbnRleHQtPnN0cm9rZVN0
eWxlKCk7CisKKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwor
CisgICAgICAgIC8vIERyYXcgdGhlIGxlZnQgYm9yZGVyIHVzaW5nIENTUyBkZWZpbmVkIHdpZHRo
IGFuZCBjb2xvci4KKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKG9iamVjdC0+
c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCkpOworICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VD
b2xvcihvYmplY3QtPnN0eWxlKCktPmJvcmRlckxlZnRDb2xvcigpLnJnYigpKTsKKyAgICAgICAg
Y29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQocmVjdC54KCkgKyAxLCByZWN0LnkoKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KHJlY3QueCgpICsgMSwgcmVjdC55KCkgKyBy
ZWN0LmhlaWdodCgpKSk7CisKKyAgICAgICAgLy8gRHJhdyB0aGUgcmlnaHQgYm9yZGVyIHVzaW5n
IENTUyBkZWZpbmVkIHdpZHRoIGFuZCBjb2xvci4KKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tl
VGhpY2tuZXNzKG9iamVjdC0+c3R5bGUoKS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsKKyAgICAgICAg
Y29udGV4dC0+c2V0U3Ryb2tlQ29sb3Iob2JqZWN0LT5zdHlsZSgpLT5ib3JkZXJSaWdodENvbG9y
KCkucmdiKCkpOworICAgICAgICBjb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChyZWN0LngoKSAr
IHJlY3Qud2lkdGgoKSAtIDEsIHJlY3QueSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
SW50UG9pbnQocmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSAxLCByZWN0LnkoKSArIHJlY3QuaGVp
Z2h0KCkpKTsKKworICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihvcmlnaW5hbENvbG9y
KTsKKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKG9yaWdpbmFsVGhpY2tuZXNz
KTsKKyAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUob3JpZ2luYWxTdHlsZSk7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1
bTo6c2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFydCBwYXJ0LCBFbGVtZW50
KiBlKQoreworICAgIFVOVVNFRF9QQVJBTShlKTsKKworICAgIHN3aXRjaCAocGFydCkgeworICAg
IGNhc2UgTWVkaWFNdXRlQnV0dG9uUGFydDoKKyAgICBjYXNlIE1lZGlhUGxheUJ1dHRvblBhcnQ6
CisgICAgY2FzZSBNZWRpYVNsaWRlclBhcnQ6CisgICAgY2FzZSBNZWRpYVNsaWRlclRodW1iUGFy
dDoKKyAgICBjYXNlIE1lZGlhVm9sdW1lU2xpZGVyQ29udGFpbmVyUGFydDoKKyAgICBjYXNlIE1l
ZGlhVm9sdW1lU2xpZGVyUGFydDoKKyAgICBjYXNlIE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0
OgorICAgIGNhc2UgTWVkaWFDb250cm9sc0JhY2tncm91bmRQYXJ0OgorICAgIGNhc2UgTWVkaWFD
dXJyZW50VGltZVBhcnQ6CisgICAgY2FzZSBNZWRpYVRpbWVSZW1haW5pbmdQYXJ0OgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRl
ck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYUNvbnRy
b2xFbGVtZW50VHlwZSBwYXJ0LCBSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBz
d2l0Y2ggKHBhcnQpIHsKKyAgICBjYXNlIE1lZGlhTXV0ZUJ1dHRvbjoKKyAgICBjYXNlIE1lZGlh
VW5NdXRlQnV0dG9uOgorICAgICAgICByZXR1cm4gcGFpbnRNZWRpYU11dGVCdXR0b24ob2JqZWN0
LCBwYWludEluZm8sIHJlY3QpOworICAgIGNhc2UgTWVkaWFQYXVzZUJ1dHRvbjoKKyAgICBjYXNl
IE1lZGlhUGxheUJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIHBhaW50TWVkaWFQbGF5QnV0dG9uKG9i
amVjdCwgcGFpbnRJbmZvLCByZWN0KTsKKyAgICBjYXNlIE1lZGlhU2xpZGVyOgorICAgICAgICBy
ZXR1cm4gcGFpbnRNZWRpYVNsaWRlcihvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CisgICAgY2Fz
ZSBNZWRpYVNsaWRlclRodW1iOgorICAgICAgICByZXR1cm4gcGFpbnRNZWRpYVNsaWRlclRodW1i
KG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKKyAgICBjYXNlIE1lZGlhVm9sdW1lU2xpZGVyOgor
ICAgICAgICByZXR1cm4gcGFpbnRNZWRpYVZvbHVtZVNsaWRlcihvYmplY3QsIHBhaW50SW5mbywg
cmVjdCk7CisgICAgY2FzZSBNZWRpYVZvbHVtZVNsaWRlclRodW1iOgorICAgICAgICByZXR1cm4g
cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKKyAg
ICBjYXNlIE1lZGlhVGltZWxpbmVDb250YWluZXI6CisgICAgICAgIHJldHVybiBwYWludE1lZGlh
VGltZWxpbmVDb250YWluZXIob2JqZWN0LCBwYWludEluZm8sIHJlY3QpOworICAgIGNhc2UgTWVk
aWFGdWxsc2NyZWVuQnV0dG9uOgorICAgIGNhc2UgTWVkaWFTZWVrQmFja0J1dHRvbjoKKyAgICBj
YXNlIE1lZGlhU2Vla0ZvcndhcmRCdXR0b246CisgICAgY2FzZSBNZWRpYVZvbHVtZVNsaWRlckNv
bnRhaW5lcjoKKyAgICBjYXNlIE1lZGlhQ3VycmVudFRpbWVEaXNwbGF5OgorICAgIGNhc2UgTWVk
aWFUaW1lUmVtYWluaW5nRGlzcGxheToKKyAgICBjYXNlIE1lZGlhQ29udHJvbHNQYW5lbDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjphZGp1
c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBzdGF0
aWMgSW1hZ2UqIG1lZGlhU2xpZGVyVGh1bWIgPSBwbGF0Zm9ybVJlc291cmNlKCJtZWRpYVNsaWRl
clRodW1iIik7CisgICAgc3RhdGljIEltYWdlKiBtZWRpYVZvbHVtZVNsaWRlclRodW1iID0gcGxh
dGZvcm1SZXNvdXJjZSgibWVkaWFWb2x1bWVTbGlkZXJUaHVtYiIpOworCisgICAgSW1hZ2UqIHRo
dW1iSW1hZ2UgPSAwOworICAgIGlmIChvYmplY3QtPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBN
ZWRpYVNsaWRlclRodW1iUGFydCkKKyAgICAgICAgdGh1bWJJbWFnZSA9IG1lZGlhU2xpZGVyVGh1
bWI7CisgICAgZWxzZSBpZiAob2JqZWN0LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFW
b2x1bWVTbGlkZXJUaHVtYlBhcnQpCisgICAgICAgIHRodW1iSW1hZ2UgPSBtZWRpYVZvbHVtZVNs
aWRlclRodW1iOworCisgICAgaWYgKHRodW1iSW1hZ2UpIHsKKyAgICAgICAgb2JqZWN0LT5zdHls
ZSgpLT5zZXRXaWR0aChMZW5ndGgodGh1bWJJbWFnZS0+d2lkdGgoKSwgRml4ZWQpKTsKKyAgICAg
ICAgb2JqZWN0LT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHRodW1iSW1hZ2UtPmhlaWdodCgp
LCBGaXhlZCkpOworICAgIH0KK30KKworI2VuZGlmICAvLyAjaWYgRU5BQkxFKFZJREVPKQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlh
Q29udHJvbHNDaHJvbWl1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2
ZDk4NmMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYUNv
bnRyb2xzQ2hyb21pdW0uaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW1faAorI2RlZmluZSBSZW5k
ZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW1faAorCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisj
aW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBIVE1MTWVkaWFFbGVtZW50OworY2xhc3MgUmVuZGVyTWVkaWFDb250cm9sc0Nocm9t
aXVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQ
YXJ0KENvbnRyb2xQYXJ0LCBFbGVtZW50Kik7CisgICAgc3RhdGljIGJvb2wgcGFpbnRNZWRpYUNv
bnRyb2xzUGFydChNZWRpYUNvbnRyb2xFbGVtZW50VHlwZSwgUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgc3RhdGljIHZv
aWQgYWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyT2JqZWN0Kik7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21p
dW1faApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yy5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5oCmluZGV4IDlm
NDEyYTAuLjYxYjVlOGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1NYWMuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
TWFjLmgKQEAgLTEyMSw2ICsxMjEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHBh
aW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQor
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENvbnRyb2xQYXJ0
LCBFbGVtZW50Kik7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbSBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0KaW5kZXggNjk1ZjlmYS4uYmNmY2Q1NyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCkBAIC0yOSw3ICsyOSw2
IEBACiAjaW1wb3J0ICJEb2N1bWVudC5oIgogI2ltcG9ydCAiRWxlbWVudC5oIgogI2ltcG9ydCAi
RnJhbWVWaWV3LmgiCi0jaW1wb3J0ICJHcmFkaWVudC5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW1wb3J0ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MTWVkaWFF
bGVtZW50LmgiCkBAIC0zOCw2ICszNyw3IEBACiAjaW1wb3J0ICJMb2NhbEN1cnJlbnRHcmFwaGlj
c0NvbnRleHQuaCIKICNpbXBvcnQgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW1wb3J0ICJS
ZW5kZXJNZWRpYS5oIgorI2ltcG9ydCAiUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmgiCiAj
aW1wb3J0ICJSZW5kZXJTbGlkZXIuaCIKICNpbXBvcnQgIlJlbmRlclZpZXcuaCIKICNpbXBvcnQg
IlNoYXJlZEJ1ZmZlci5oIgpAQCAtMTI1MSwyMCArMTI1MSw2IEBAIGJvb2wgUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0jaWYgRU5BQkxFKFZJREVPKQotc3RhdGlj
IEltYWdlKiBtZWRpYVNsaWRlclRodW1iSW1hZ2UoKQotewotICAgIHN0YXRpYyBJbWFnZSogbWVk
aWFTbGlkZXJUaHVtYiA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFTbGlkZXJU
aHVtYiIpLnJlbGVhc2VSZWYoKTsKLSAgICByZXR1cm4gbWVkaWFTbGlkZXJUaHVtYjsKLX0KLSAg
Ci1zdGF0aWMgSW1hZ2UqIG1lZGlhVm9sdW1lU2xpZGVyVGh1bWJJbWFnZSgpCi17Ci0gICAgc3Rh
dGljIEltYWdlKiBtZWRpYVZvbHVtZVNsaWRlclRodW1iID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJl
c291cmNlKCJtZWRpYVZvbHVtZVNsaWRlclRodW1iIikucmVsZWFzZVJlZigpOwotICAgIHJldHVy
biBtZWRpYVZvbHVtZVNsaWRlclRodW1iOwotfQotI2VuZGlmCi0KIHZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCogbykgY29uc3QK
IHsKICAgICBzdGF0aWMgY29uc3QgaW50IHNsaWRlclRodW1iV2lkdGggPSAxNTsKQEAgLTEyNzcs
MTYgKzEyNjMsNyBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNsaWRlclRo
dW1iU2l6ZShSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiAgICAgfQogCiAjaWYgRU5BQkxFKFZJREVP
KQotICAgIEltYWdlKiB0aHVtYkltYWdlID0gMDsKLSAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFy
YW5jZSgpID09IE1lZGlhU2xpZGVyVGh1bWJQYXJ0KQotICAgICAgICB0aHVtYkltYWdlID0gbWVk
aWFTbGlkZXJUaHVtYkltYWdlKCk7Ci0gICAgZWxzZSBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5j
ZSgpID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KQotICAgICAgICB0aHVtYkltYWdlID0g
bWVkaWFWb2x1bWVTbGlkZXJUaHVtYkltYWdlKCk7Ci0gIAotICAgIGlmICh0aHVtYkltYWdlKSB7
Ci0gICAgICAgIG8tPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aCh0aHVtYkltYWdlLT53aWR0aCgp
LCBGaXhlZCkpOwotICAgICAgICBvLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHRodW1iSW1h
Z2UtPmhlaWdodCgpLCBGaXhlZCkpOwotICAgIH0KKyAgICBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hy
b21pdW06OmFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKG8pOwogI2VuZGlmCiB9CiAKQEAgLTE1
MzcsMTczICsxNTE0LDQ0IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFy
Y2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zCiB9CiAKICNpZiBFTkFC
TEUoVklERU8pCi0vLyBBdHRlbXB0IHRvIHJldHJpZXZlIGEgSFRNTE1lZGlhRWxlbWVudCBmcm9t
IGEgTm9kZS4gUmV0dXJucyAwIGlmIG9uZSBjYW5ub3QgYmUgZm91bmQuCi1zdGF0aWMgSFRNTE1l
ZGlhRWxlbWVudCogbWVkaWFFbGVtZW50UGFyZW50KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFu
b2RlKQotICAgICAgICByZXR1cm4gMDsKLSAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlLT5zaGFk
b3dBbmNlc3Rvck5vZGUoKTsKLSAgICBpZiAoIW1lZGlhTm9kZSB8fCAoIW1lZGlhTm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKSAmJiAhbWVkaWFOb2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6YXVkaW9UYWcpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCo+KG1lZGlhTm9kZSk7Ci19Ci0KLWJvb2wgUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgSW1hZ2UqIGltYWdlKQorYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjpzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENvbnRyb2xQ
YXJ0IHBhcnQsIEVsZW1lbnQqIGUpCiB7Ci0gICAgLy8gQ3JlYXRlIGEgZGVzdGluYXRpb24gcmVj
dGFuZ2xlIGZvciB0aGUgaW1hZ2UgdGhhdCBpcyBjZW50ZXJlZCBpbiB0aGUgZHJhd2luZyByZWN0
YW5nbGUsIHJvdW5kZWQgbGVmdCwgYW5kIGRvd24uCi0gICAgSW50UmVjdCBpbWFnZVJlY3QgPSBp
bWFnZS0+cmVjdCgpOwotICAgIGltYWdlUmVjdC5zZXRZKHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0
KCkgLSBpbWFnZS0+aGVpZ2h0KCkgKyAxKSAvIDIpOwotICAgIGltYWdlUmVjdC5zZXRYKHJlY3Qu
eCgpICsgKHJlY3Qud2lkdGgoKSAtIGltYWdlLT53aWR0aCgpICsgMSkgLyAyKTsKLQotICAgIGNv
bnRleHQtPmRyYXdJbWFnZShpbWFnZSwgaW1hZ2VSZWN0KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpzaG91bGRSZW5kZXJNZWRpYUNv
bnRyb2xQYXJ0KHBhcnQsIGUpOwogfQogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBh
aW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEhU
TUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvYmplY3Qt
Pm5vZGUoKSk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHN0YXRpYyBJbWFnZSogbWVkaWFQbGF5ID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291
cmNlKCJtZWRpYVBsYXkiKS5yZWxlYXNlUmVmKCk7Ci0gICAgc3RhdGljIEltYWdlKiBtZWRpYVBh
dXNlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVBhdXNlIikucmVsZWFzZVJl
ZigpOwotICAgIHN0YXRpYyBJbWFnZSogbWVkaWFQbGF5RGlzYWJsZWQgPSBJbWFnZTo6bG9hZFBs
YXRmb3JtUmVzb3VyY2UoIm1lZGlhUGxheURpc2FibGVkIikucmVsZWFzZVJlZigpOwotCi0gICAg
aWYgKG1lZGlhRWxlbWVudC0+bmV0d29ya1N0YXRlKCkgPT0gSFRNTE1lZGlhRWxlbWVudDo6TkVU
V09SS19OT19TT1VSQ0UpCi0gICAgICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwo
cGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhUGxheURpc2FibGVkKTsKLQotICAgIHJldHVy
biBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlh
RWxlbWVudC0+cGF1c2VkKCkgPyBtZWRpYVBsYXkgOiBtZWRpYVBhdXNlKTsKKyAgICByZXR1cm4g
UmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlh
UGxheUJ1dHRvbiwgb2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwogfQogCiBib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxl
bWVudFBhcmVudChvYmplY3QtPm5vZGUoKSk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0YXRpYyBJbWFnZSogc291bmRGdWxsID0gSW1hZ2U6
OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVNvdW5kRnVsbCIpLnJlbGVhc2VSZWYoKTsKLSAg
ICBzdGF0aWMgSW1hZ2UqIHNvdW5kTm9uZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgi
bWVkaWFTb3VuZE5vbmUiKS5yZWxlYXNlUmVmKCk7Ci0gICAgc3RhdGljIEltYWdlKiBzb3VuZERp
c2FibGVkID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVNvdW5kRGlzYWJsZWQi
KS5yZWxlYXNlUmVmKCk7Ci0KLSAgICBpZiAobWVkaWFFbGVtZW50LT5uZXR3b3JrU3RhdGUoKSA9
PSBIVE1MTWVkaWFFbGVtZW50OjpORVRXT1JLX05PX1NPVVJDRSB8fCAhbWVkaWFFbGVtZW50LT5o
YXNBdWRpbygpKQotICAgICAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBhaW50
SW5mby5jb250ZXh0LCByZWN0LCBzb3VuZERpc2FibGVkKTsKLQotICAgIHJldHVybiBwYWludE1l
ZGlhQnV0dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhRWxlbWVudC0+
bXV0ZWQoKSA/IHNvdW5kTm9uZSA6IHNvdW5kRnVsbCk7CisgICAgcmV0dXJuIFJlbmRlck1lZGlh
Q29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYU11dGVCdXR0b24s
IG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVt
TWFjOjpwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFFbGVtZW50UGFyZW50
KG9iamVjdC0+bm9kZSgpKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gb2JqZWN0LT5zdHlsZSgpOyAgICAK
LSAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsKLSAgICBj
b250ZXh0LT5zYXZlKCk7Ci0gICAgCi0gICAgY29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKHRy
dWUpOwotCi0gICAgSW50U2l6ZSB0b3BMZWZ0UmFkaXVzID0gc3R5bGUtPmJvcmRlclRvcExlZnRS
YWRpdXMoKTsKLSAgICBJbnRTaXplIHRvcFJpZ2h0UmFkaXVzID0gc3R5bGUtPmJvcmRlclRvcFJp
Z2h0UmFkaXVzKCk7Ci0gICAgSW50U2l6ZSBib3R0b21MZWZ0UmFkaXVzID0gc3R5bGUtPmJvcmRl
ckJvdHRvbUxlZnRSYWRpdXMoKTsKLSAgICBJbnRTaXplIGJvdHRvbVJpZ2h0UmFkaXVzID0gc3R5
bGUtPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCk7Ci0gICAgZmxvYXQgYm9yZGVyV2lkdGggPSBz
dHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCk7Ci0KLSAgICAvLyBEcmF3IHRoZSBib3JkZXIgb2YgdGhl
IHRpbWUgYmFyLgotICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHN0eWxlLT5ib3JkZXJMZWZ0
Q29sb3IoKSk7Ci0gICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGJvcmRlcldpZHRoKTsK
LSAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3Ioc3R5bGUtPmJhY2tncm91bmRDb2xvcigpKTsKLSAg
ICBjb250ZXh0LT5hZGRQYXRoKFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdCwgdG9w
TGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0
UmFkaXVzKSk7Ci0gICAgY29udGV4dC0+ZHJhd1BhdGgoKTsKLSAgICAKLSAgICAvLyBEcmF3IHRo
ZSBidWZmZXJlZCByYW5nZXMuCi0gICAgLy8gRklYTUU6IERyYXcgbXVsdGlwbGUgcmFuZ2VzIGlm
IHRoZXJlIGFyZSBtdWx0aXBsZSBidWZmZXJlZCByYW5nZXMuCi0gICAgRmxvYXRSZWN0IGJ1ZmZl
cmVkUmVjdCA9IHJlY3Q7Ci0gICAgYnVmZmVyZWRSZWN0LmluZmxhdGUoLTEuMCAtIGJvcmRlcldp
ZHRoKTsKLSAgICBidWZmZXJlZFJlY3Quc2V0V2lkdGgoYnVmZmVyZWRSZWN0LndpZHRoKCkgKiBt
ZWRpYUVsZW1lbnQtPnBlcmNlbnRMb2FkZWQoKSk7Ci0gICAgYnVmZmVyZWRSZWN0ID0gY29udGV4
dC0+cm91bmRUb0RldmljZVBpeGVscyhidWZmZXJlZFJlY3QpOwotICAgCi0gICAgLy8gRG9uJ3Qg
Ym90aGVyIGRyYXdpbmcgYW4gZW1wdHkgYXJlYS4KLSAgICBpZiAoYnVmZmVyZWRSZWN0LndpZHRo
KCkgPiAwICYmIGJ1ZmZlcmVkUmVjdC5oZWlnaHQoKSA+IDApIHsKLSAgICAgICAgRmxvYXRQb2lu
dCBzbGlkZXJUb3BMZWZ0ID0gYnVmZmVyZWRSZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgIEZsb2F0
UG9pbnQgc2xpZGVyVG9wUmlnaHQgPSBzbGlkZXJUb3BMZWZ0OwotICAgICAgICBzbGlkZXJUb3BS
aWdodC5tb3ZlKDAuMGYsIGJ1ZmZlcmVkUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIAotICAgICAg
ICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShzbGlkZXJUb3BM
ZWZ0LCBzbGlkZXJUb3BSaWdodCk7Ci0gICAgICAgIENvbG9yIHN0YXJ0Q29sb3IgPSBvYmplY3Qt
PnN0eWxlKCktPmNvbG9yKCk7Ci0gICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBz
dGFydENvbG9yKTsKLSAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKHN0
YXJ0Q29sb3IucmVkKCkgLyAyLCBzdGFydENvbG9yLmdyZWVuKCkgLyAyLCBzdGFydENvbG9yLmJs
dWUoKSAvIDIsIHN0YXJ0Q29sb3IuYWxwaGEoKSkpOwotIAotICAgICAgICBjb250ZXh0LT5zZXRG
aWxsR3JhZGllbnQoZ3JhZGllbnQpOwotICAgICAgICBjb250ZXh0LT5hZGRQYXRoKFBhdGg6OmNy
ZWF0ZVJvdW5kZWRSZWN0YW5nbGUoYnVmZmVyZWRSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdo
dFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpKTsKLSAgICAgICAg
Y29udGV4dC0+ZmlsbFBhdGgoKTsKLSAgICB9Ci0gICAgCi0gICAgY29udGV4dC0+cmVzdG9yZSgp
OyAgICAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0No
cm9taXVtOjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhU2xpZGVyLCBvYmplY3QsIHBhaW50
SW5mbywgcmVjdCk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRp
YVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEhU
TUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvYmplY3Qt
Pm5vZGUoKSk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OwotICAg
IENvbG9yIG9yaWdpbmFsQ29sb3IgPSBjb250ZXh0LT5zdHJva2VDb2xvcigpOwotICAgIGlmIChv
cmlnaW5hbENvbG9yICE9IENvbG9yOjp3aGl0ZSkKLSAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tl
Q29sb3IoQ29sb3I6OndoaXRlKTsKLQotICAgIGludCB4ID0gcmVjdC54KCkgKyByZWN0LndpZHRo
KCkgLyAyOwotICAgIGNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KHgsIHJlY3QueSgpKSwgIElu
dFBvaW50KHgsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSkpOwotICAgIAotICAgIGlmIChvcmln
aW5hbENvbG9yICE9IENvbG9yOjp3aGl0ZSkKLSAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29s
b3Iob3JpZ2luYWxDb2xvcik7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFJlbmRlck1l
ZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVZvbHVtZVNs
aWRlciwgb2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwogfQogCiBib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OnBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKLSAgICBpZiAoIW9iamVjdC0+cGFyZW50KCktPmlzU2xpZGVyKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwocGFpbnRJ
bmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhU2xpZGVyVGh1bWJJbWFnZSgpKTsKKyAgICByZXR1cm4g
UmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlh
U2xpZGVyVGh1bWIsIG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKIH0KIAogYm9vbCBSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFvYmplY3QtPnBhcmVudCgpLT5pc1NsaWRlcigp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbklu
dGVybmFsKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYVZvbHVtZVNsaWRlclRodW1iSW1h
Z2UoKSk7CisgICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRp
YUNvbnRyb2xzUGFydChNZWRpYVZvbHVtZVNsaWRlclRodW1iLCBvYmplY3QsIHBhaW50SW5mbywg
cmVjdCk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYUNvbnRy
b2xzQmFja2dyb3VuZChSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBIVE1MTWVk
aWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQob2JqZWN0LT5ub2Rl
KCkpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoIXJlY3QuaXNFbXB0eSgpKQotICAgIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7Ci0gICAgICAgIENvbG9yIG9yaWdpbmFsQ29sb3Ig
PSBjb250ZXh0LT5zdHJva2VDb2xvcigpOwotIAotICAgICAgICAvLyBEcmF3cyB0aGUgbGVmdCBi
b3JkZXIsIGl0IGlzIGFsd2F5cyAxcHggd2lkZS4KLSAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tl
Q29sb3Iob2JqZWN0LT5zdHlsZSgpLT5ib3JkZXJMZWZ0Q29sb3IoKSk7Ci0gICAgICAgIGNvbnRl
eHQtPmRyYXdMaW5lKEludFBvaW50KHJlY3QueCgpICsgMSwgcmVjdC55KCkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbnRQb2ludChyZWN0LngoKSArIDEsIHJlY3QueSgpICsgcmVjdC5o
ZWlnaHQoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gICAgICAgIC8vIERyYXdz
IHRoZSByaWdodCBib3JkZXIsIGl0IGlzIGFsd2F5cyAxcHggd2lkZS4KLSAgICAgICAgY29udGV4
dC0+c2V0U3Ryb2tlQ29sb3Iob2JqZWN0LT5zdHlsZSgpLT5ib3JkZXJSaWdodENvbG9yKCkpOwot
ICAgICAgICBjb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChyZWN0LngoKSArIHJlY3Qud2lkdGgo
KSAtIDEsIHJlY3QueSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQocmVj
dC54KCkgKyByZWN0LndpZHRoKCkgLSAxLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpKTsKLSAg
ICAgICAgCi0gICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKG9yaWdpbmFsQ29sb3IpOwot
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0No
cm9taXVtOjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhVGltZWxpbmVDb250YWluZXIsIG9i
amVjdCwgcGFpbnRJbmZvLCByZWN0KTsKIH0KICAgICAKIFN0cmluZyBSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjpleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAppbmRleCA0ZjQ4NmQ1Li4zYTM5NDIzIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAK
KysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCkBAIC0z
Myw2ICszMyw3IEBACiAjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVk
ZSAiUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUu
aCIKQEAgLTk2LDIwICs5Nyw2IEBAIHN0YXRpYyB2b2lkIGRyYXdCb3goU2tDYW52YXMqIGNhbnZh
cywgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgU2tQYWludCYgcGFpbnQpCiAgICAgZHJhd1Zl
cnRMaW5lKGNhbnZhcywgcmVjdC54KCksIHJlY3QueSgpLCBib3R0b20sIHBhaW50KTsKIH0KIAot
I2lmIEVOQUJMRShWSURFTykKLS8vIEF0dGVtcHQgdG8gcmV0cmlldmUgYSBIVE1MTWVkaWFFbGVt
ZW50IGZyb20gYSBOb2RlLiBSZXR1cm5zIE5VTEwgaWYgb25lIGNhbm5vdCBiZSBmb3VuZC4KLXN0
YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnRQYXJlbnQoTm9kZSogbm9kZSkKLXsK
LSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIE5vZGUqIG1lZGlhTm9kZSA9
IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpOwotICAgIGlmICghbWVkaWFOb2RlIHx8ICghbWVk
aWFOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dmlkZW9UYWcpICYmICFtZWRpYU5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjphdWRpb1RhZykpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obWVkaWFOb2RlKTsKLX0KLSNl
bmRpZgotCiAvLyBXZSBhaW0gdG8gbWF0Y2ggSUUgaGVyZS4KIC8vIC1JRSB1c2VzIGEgZm9udCBi
YXNlZCBvbiB0aGUgZW5jb2RpbmcgYXMgdGhlIGRlZmF1bHQgZm9udCBmb3IgZm9ybSBjb250cm9s
cy4KIC8vIC1HZWNrbyB1c2VzIE1TIFNoZWxsIERsZyAoYWN0dWFsbHkgY2FsbHMgR2V0U3RvY2tP
YmplY3QoREVGQVVMVF9HVUlfRk9OVCksCkBAIC00ODYsNDIgKzQ3MywxMCBAQCBib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtU2tpYTo6cGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgSW1hZ2UqIGltYWdlKQotewotICAgIC8vIENyZWF0
ZSBhIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSBmb3IgdGhlIGltYWdlIHRoYXQgaXMgY2VudGVyZWQg
aW4gdGhlIGRyYXdpbmcgcmVjdGFuZ2xlLCByb3VuZGVkIGxlZnQsIGFuZCBkb3duLgotICAgIElu
dFJlY3QgaW1hZ2VSZWN0ID0gaW1hZ2UtPnJlY3QoKTsKLSAgICBpbWFnZVJlY3Quc2V0WShyZWN0
LnkoKSArIChyZWN0LmhlaWdodCgpIC0gaW1hZ2UtPmhlaWdodCgpICsgMSkgLyAyKTsKLSAgICBp
bWFnZVJlY3Quc2V0WChyZWN0LngoKSArIChyZWN0LndpZHRoKCkgLSBpbWFnZS0+d2lkdGgoKSAr
IDEpIC8gMik7Ci0KLSAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UsIGltYWdlUmVjdCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50
TWVkaWFDb250cm9sc0JhY2tncm91bmQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAj
aWYgRU5BQkxFKFZJREVPKQotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IG1l
ZGlhRWxlbWVudFBhcmVudChvYmplY3QtPm5vZGUoKSk7Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCi0gICAg
ewotICAgICAgICBTa0NhbnZhcyogY2FudmFzID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jYW52YXMoKTsKLSAgICAgICAgU2tQYWludCBwYWludDsKLQotICAgICAgICAv
LyBEcmF3cyB0aGUgbGVmdCBib3JkZXIsIGl0IGlzIGFsd2F5cyAxcHggd2lkZS4KLSAgICAgICAg
cGFpbnQuc2V0Q29sb3Iob2JqZWN0LT5zdHlsZSgpLT5ib3JkZXJMZWZ0Q29sb3IoKS5yZ2IoKSk7
Ci0gICAgICAgIGNhbnZhcy0+ZHJhd0xpbmUocmVjdC54KCkgKyAxLCByZWN0LnkoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICByZWN0LngoKSArIDEsIHJlY3QueSgpICsgcmVjdC5oZWlnaHQo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwYWludCk7Ci0KLSAgICAgICAgLy8gRHJhd3Mg
dGhlIHJpZ2h0IGJvcmRlciwgaXQgaXMgYWx3YXlzIDFweCB3aWRlLgotICAgICAgICBwYWludC5z
ZXRDb2xvcihvYmplY3QtPnN0eWxlKCktPmJvcmRlclJpZ2h0Q29sb3IoKS5yZ2IoKSk7Ci0gICAg
ICAgIGNhbnZhcy0+ZHJhd0xpbmUocmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSAxLCByZWN0Lnko
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIDEs
IHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwYWlu
dCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRy
b2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFUaW1lbGluZUNvbnRhaW5l
ciwgb2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ob2Jq
ZWN0KTsKICAgICBVTlVTRURfUEFSQU0ocGFpbnRJbmZvKTsKQEAgLTUzMyw2MiArNDg4LDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYUNvbnRyb2xzQmFja2dyb3Vu
ZChSZW5kZXJPYmplY3QqIG9iamVjdCwKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBh
aW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICNpZiBF
TkFCTEUoVklERU8pCi0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gbWVkaWFF
bGVtZW50UGFyZW50KG9iamVjdC0+bm9kZSgpKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU2tDYW52YXMqIGNhbnZhcyA9IHBhaW50SW5mby5j
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Ci0gICAgU2tSZWN0IGJhY2tncm91
bmRSZWN0OwotICAgIGJhY2tncm91bmRSZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qu
eCgpICsgcmVjdC53aWR0aCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOwotCi0gICAgU2tQ
YWludCBwYWludDsKLSAgICBwYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7Ci0KLSAgICAvLyBEcmF3
IHRoZSBib3JkZXIgb2YgdGhlIHRpbWUgYmFyLiBUaGUgYm9yZGVyIG9ubHkgaGFzIG9uZSBzaW5n
bGUgY29sb3IsCi0gICAgLy8gd2lkdGggYW5kIHJhZGl1cy4gU28gdXNlIHRoZSBwcm9wZXJ0eSBv
ZiB0aGUgbGVmdCBib3JkZXIuCi0gICAgU2tDb2xvciBib3JkZXJDb2xvciA9IG9iamVjdC0+c3R5
bGUoKS0+Ym9yZGVyTGVmdENvbG9yKCkucmdiKCk7Ci0gICAgaW50IGJvcmRlcldpZHRoID0gb2Jq
ZWN0LT5zdHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKTsKLSAgICBJbnRTaXplIGJvcmRlclJhZGl1
cyA9IG9iamVjdC0+c3R5bGUoKS0+Ym9yZGVyVG9wTGVmdFJhZGl1cygpOwotICAgIHBhaW50LnNl
dFN0eWxlKFNrUGFpbnQ6OmtTdHJva2VfU3R5bGUpOwotICAgIHBhaW50LnNldFN0cm9rZVdpZHRo
KGJvcmRlcldpZHRoKTsKLSAgICBwYWludC5zZXRDb2xvcihib3JkZXJDb2xvcik7Ci0gICAgY2Fu
dmFzLT5kcmF3Um91bmRSZWN0KGJhY2tncm91bmRSZWN0LCBib3JkZXJSYWRpdXMud2lkdGgoKSwg
Ym9yZGVyUmFkaXVzLmhlaWdodCgpLCBwYWludCk7Ci0KLSAgICAvLyBEcmF3IHRoZSBiYWNrZ3Jv
dW5kIG9mIHRoZSB0aW1lIGJhci4KLSAgICBTa0NvbG9yIGJhY2tncm91bmRDb2xvciA9IG9iamVj
dC0+c3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCkucmdiKCk7Ci0gICAgcGFpbnQuc2V0U3R5bGUo
U2tQYWludDo6a0ZpbGxfU3R5bGUpOwotICAgIHBhaW50LnNldENvbG9yKGJhY2tncm91bmRDb2xv
cik7Ci0gICAgY2FudmFzLT5kcmF3Um91bmRSZWN0KGJhY2tncm91bmRSZWN0LCBib3JkZXJSYWRp
dXMud2lkdGgoKSwgYm9yZGVyUmFkaXVzLmhlaWdodCgpLCBwYWludCk7Ci0KLSAgICBpZiAoYmFj
a2dyb3VuZFJlY3Qud2lkdGgoKSA+PSAzICYmIGJhY2tncm91bmRSZWN0LmhlaWdodCgpID49IDMp
Ci0gICAgewotICAgICAgICAvLyBEcmF3IHRoZSBidWZmZXJlZCByYW5nZXMuCi0gICAgICAgIC8v
IEZJWE1FOiBEcmF3IG11bHRpcGxlIHJhbmdlcyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgYnVmZmVy
ZWQgcmFuZ2VzLgotICAgICAgICBTa1JlY3QgYnVmZmVyZWRSZWN0OwotICAgICAgICBidWZmZXJl
ZFJlY3Quc2V0KGJhY2tncm91bmRSZWN0LmZMZWZ0ICsgMiwgYmFja2dyb3VuZFJlY3QuZlRvcCAr
IDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFJlY3QuZlJpZ2h0IC0gMSwg
YmFja2dyb3VuZFJlY3QuZkJvdHRvbSAtIDEpOwotICAgICAgICBpbnQgd2lkdGggPSBzdGF0aWNf
Y2FzdDxpbnQ+KGJ1ZmZlcmVkUmVjdC53aWR0aCgpICogbWVkaWFFbGVtZW50LT5wZXJjZW50TG9h
ZGVkKCkpOwotICAgICAgICBidWZmZXJlZFJlY3QuZlJpZ2h0ID0gYnVmZmVyZWRSZWN0LmZMZWZ0
ICsgd2lkdGg7Ci0KLSAgICAgICAgU2tQb2ludCBwb2ludHNbMl0gPSB7IHsgMCwgYnVmZmVyZWRS
ZWN0LmZUb3AgfSwgeyAwLCBidWZmZXJlZFJlY3QuZkJvdHRvbSB9IH07Ci0gICAgICAgIFNrQ29s
b3Igc3RhcnRDb2xvciA9IG9iamVjdC0+c3R5bGUoKS0+Y29sb3IoKS5yZ2IoKTsKLSAgICAgICAg
U2tDb2xvciBlbmRDb2xvciA9IFNrQ29sb3JTZXRSR0IoU2tDb2xvckdldFIoc3RhcnRDb2xvcikg
LyAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa0NvbG9yR2V0
RyhzdGFydENvbG9yKSAvIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNrQ29sb3JHZXRCKHN0YXJ0Q29sb3IpIC8gMik7Ci0gICAgICAgIFNrQ29sb3IgY29sb3Jz
WzJdID0geyBzdGFydENvbG9yLCBlbmRDb2xvciB9OwotICAgICAgICBTa1NoYWRlciogZ3JhZGll
bnQgPSBTa0dyYWRpZW50U2hhZGVyOjpDcmVhdGVMaW5lYXIocG9pbnRzLCBjb2xvcnMsIDAsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplb2YocG9pbnRzKSAvIHNpemVvZihwb2ludHNbMF0pLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTaGFkZXI6OmtNaXJy
b3JfVGlsZU1vZGUsIDApOwotCi0gICAgICAgIHBhaW50LnJlc2V0KCk7Ci0gICAgICAgIHBhaW50
LnNldFNoYWRlcihncmFkaWVudCk7Ci0gICAgICAgIHBhaW50LnNldEFudGlBbGlhcyh0cnVlKTsK
LSAgICAgICAgLy8gQ2hlY2sgZm9yIHJvdW5kIHJlY3Qgd2l0aCB6ZXJvIHdpZHRoIG9yIGhlaWdo
dCwgb3RoZXJ3aXNlIFNraWEgd2lsbCBhc3NlcnQKLSAgICAgICAgaWYgKGJ1ZmZlcmVkUmVjdC53
aWR0aCgpID4gMCAmJiBidWZmZXJlZFJlY3QuaGVpZ2h0KCkgPiAwKQotICAgICAgICAgICAgY2Fu
dmFzLT5kcmF3Um91bmRSZWN0KGJ1ZmZlcmVkUmVjdCwgYm9yZGVyUmFkaXVzLndpZHRoKCksIGJv
cmRlclJhZGl1cy5oZWlnaHQoKSwgcGFpbnQpOwotICAgICAgICBncmFkaWVudC0+dW5yZWYoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHND
aHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVNsaWRlciwgb2JqZWN0LCBwYWlu
dEluZm8sIHJlY3QpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKICAgICBVTlVT
RURfUEFSQU0ocGFpbnRJbmZvKTsKQEAgLTYwMCwxNyArNTAwLDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogb2JqZWN0
LCBjb25zdAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVZvbHVtZVNs
aWRlclRyYWNrKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogI2lmIEVOQUJMRShWSURF
TykKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJl
bnQob2JqZWN0LT5ub2RlKCkpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBTa0NhbnZhcyogY2FudmFzID0gcGFpbnRJbmZvLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKLSAgICBTa1BhaW50IHBhaW50OwotICAgIHBhaW50
LnNldENvbG9yKFNLX0NvbG9yV0hJVEUpOwotCi0gICAgaW50IHggPSByZWN0LngoKSArIHJlY3Qu
d2lkdGgoKSAvIDI7Ci0gICAgY2FudmFzLT5kcmF3TGluZSh4LCByZWN0LnkoKSwgeCwgcmVjdC55
KCkgKyByZWN0LmhlaWdodCgpLCBwYWludCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRp
YVZvbHVtZVNsaWRlciwgb2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwogI2Vsc2UKICAgICBVTlVT
RURfUEFSQU0ob2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0ocGFpbnRJbmZvKTsKQEAgLTYxOSwz
MSArNTA5LDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFWb2x1
bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG9iamVjdCwKICNlbmRpZgogfQogCi1zdGF0aWMg
SW1hZ2UqIG1lZGlhU2xpZGVyVGh1bWJJbWFnZSgpCi17Ci0gICAgc3RhdGljIEltYWdlKiBtZWRp
YVNsaWRlclRodW1iID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVNsaWRlclRo
dW1iIikucmVsZWFzZVJlZigpOwotICAgIHJldHVybiBtZWRpYVNsaWRlclRodW1iOwotfQotCi1z
dGF0aWMgSW1hZ2UqIG1lZGlhVm9sdW1lU2xpZGVyVGh1bWJJbWFnZSgpCi17Ci0gICAgc3RhdGlj
IEltYWdlKiBtZWRpYVZvbHVtZVNsaWRlclRodW1iID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291
cmNlKCJtZWRpYVZvbHVtZVNsaWRlclRodW1iIikucmVsZWFzZVJlZigpOwotICAgIHJldHVybiBt
ZWRpYVZvbHVtZVNsaWRlclRodW1iOwotfQotCiB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
OjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyT2JqZWN0KiBvYmplY3QpIGNvbnN0CiB7CiAj
aWYgRU5BQkxFKFZJREVPKQotICAgIEltYWdlKiB0aHVtYkltYWdlID0gMDsKLSAgICBpZiAob2Jq
ZWN0LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFTbGlkZXJUaHVtYlBhcnQpCi0gICAg
ICAgIHRodW1iSW1hZ2UgPSBtZWRpYVNsaWRlclRodW1iSW1hZ2UoKTsKLSAgICBlbHNlIGlmIChv
YmplY3QtPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFy
dCkKLSAgICAgICAgdGh1bWJJbWFnZSA9IG1lZGlhVm9sdW1lU2xpZGVyVGh1bWJJbWFnZSgpOwot
Ci0gICAgaWYgKHRodW1iSW1hZ2UpIHsKLSAgICAgICAgb2JqZWN0LT5zdHlsZSgpLT5zZXRXaWR0
aChMZW5ndGgodGh1bWJJbWFnZS0+d2lkdGgoKSwgRml4ZWQpKTsKLSAgICAgICAgb2JqZWN0LT5z
dHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHRodW1iSW1hZ2UtPmhlaWdodCgpLCBGaXhlZCkpOwot
ICAgIH0KKyAgICBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OmFkanVzdE1lZGlhU2xpZGVy
VGh1bWJTaXplKG9iamVjdCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwogI2Vu
ZGlmCkBAIC02NTIsMTAgKzUyMSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmFk
anVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqIG9iamVjdCkgY29uc3QKIGJvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3Qq
IG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKIHsKICNpZiBFTkFCTEUoVklERU8pCi0gICAgaWYgKCFvYmplY3QtPnBh
cmVudCgpLT5pc1NsaWRlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
cGFpbnRNZWRpYUJ1dHRvbkludGVybmFsKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYVNs
aWRlclRodW1iSW1hZ2UoKSk7CisgICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1
bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVNsaWRlclRodW1iLCBvYmplY3QsIHBhaW50
SW5mbywgcmVjdCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShvYmplY3QpOwogICAgIFVOVVNF
RF9QQVJBTShwYWludEluZm8pOwpAQCAtNjY3LDEwICs1MzMsNyBAQCBib29sIFJlbmRlclRoZW1l
Q2hyb21pdW1Ta2lhOjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvYmplY3Qs
IGNvbnN0CiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpwYWludE1lZGlhVm9sdW1lU2xp
ZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAjaWYgRU5BQkxFKFZJREVP
KQotICAgIGlmICghb2JqZWN0LT5wYXJlbnQoKS0+aXNTbGlkZXIoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChwYWludEluZm8u
Y29udGV4dCwgcmVjdCwgbWVkaWFWb2x1bWVTbGlkZXJUaHVtYkltYWdlKCkpOworICAgIHJldHVy
biBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVk
aWFWb2x1bWVTbGlkZXJUaHVtYiwgb2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKICAgICBVTlVTRURfUEFSQU0ocGFpbnRJbmZvKTsKQEAg
LTY4MiwxOCArNTQ1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRp
YVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0LAogYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudCA9IG1lZGlhRWxlbWVudFBhcmVudChvYmplY3QtPm5vZGUoKSk7Ci0gICAgaWYgKCFt
ZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0YXRpYyBJbWFnZSog
bWVkaWFQbGF5ID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJtZWRpYVBsYXkiKS5yZWxl
YXNlUmVmKCk7Ci0gICAgc3RhdGljIEltYWdlKiBtZWRpYVBhdXNlID0gSW1hZ2U6OmxvYWRQbGF0
Zm9ybVJlc291cmNlKCJtZWRpYVBhdXNlIikucmVsZWFzZVJlZigpOwotICAgIHN0YXRpYyBJbWFn
ZSogbWVkaWFQbGF5RGlzYWJsZWQgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlh
UGxheURpc2FibGVkIikucmVsZWFzZVJlZigpOwotCi0gICAgaWYgKG1lZGlhRWxlbWVudC0+bmV0
d29ya1N0YXRlKCkgPT0gSFRNTE1lZGlhRWxlbWVudDo6TkVUV09SS19OT19TT1VSQ0UpCi0gICAg
ICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uSW50ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJl
Y3QsIG1lZGlhUGxheURpc2FibGVkKTsKLQotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uSW50
ZXJuYWwocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QsIG1lZGlhRWxlbWVudC0+cGF1c2VkKCkgPyBt
ZWRpYVBsYXkgOiBtZWRpYVBhdXNlKTsKKyAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0No
cm9taXVtOjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhUGxheUJ1dHRvbiwgb2JqZWN0LCBw
YWludEluZm8sIHJlY3QpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ob2JqZWN0KTsKICAgICBV
TlVTRURfUEFSQU0ocGFpbnRJbmZvKTsKQEAgLTcwNSwxOCArNTU3LDcgQEAgYm9vbCBSZW5kZXJU
aGVtZUNocm9taXVtU2tpYTo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFIKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OnBhaW50TWVkaWFNdXRl
QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogI2lmIEVOQUJMRShWSURFTykK
LSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBtZWRpYUVsZW1lbnRQYXJlbnQo
b2JqZWN0LT5ub2RlKCkpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBzdGF0aWMgSW1hZ2UqIHNvdW5kRnVsbCA9IEltYWdlOjpsb2FkUGxhdGZv
cm1SZXNvdXJjZSgibWVkaWFTb3VuZEZ1bGwiKS5yZWxlYXNlUmVmKCk7Ci0gICAgc3RhdGljIElt
YWdlKiBzb3VuZE5vbmUgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm1lZGlhU291bmRO
b25lIikucmVsZWFzZVJlZigpOwotICAgIHN0YXRpYyBJbWFnZSogc291bmREaXNhYmxlZCA9IElt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgibWVkaWFTb3VuZERpc2FibGVkIikucmVsZWFzZVJl
ZigpOwotCi0gICAgaWYgKG1lZGlhRWxlbWVudC0+bmV0d29ya1N0YXRlKCkgPT0gSFRNTE1lZGlh
RWxlbWVudDo6TkVUV09SS19OT19TT1VSQ0UgfHwgIW1lZGlhRWxlbWVudC0+aGFzQXVkaW8oKSkK
LSAgICAgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b25JbnRlcm5hbChwYWludEluZm8uY29udGV4
dCwgcmVjdCwgc291bmREaXNhYmxlZCk7Ci0KLSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbklu
dGVybmFsKHBhaW50SW5mby5jb250ZXh0LCByZWN0LCBtZWRpYUVsZW1lbnQtPm11dGVkKCkgPyBz
b3VuZE5vbmU6IHNvdW5kRnVsbCk7CisgICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJv
bWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYU11dGVCdXR0b24sIG9iamVjdCwgcGFp
bnRJbmZvLCByZWN0KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7CiAgICAgVU5V
U0VEX1BBUkFNKHBhaW50SW5mbyk7CkBAIC04NzEsMTMgKzcxMiw3IEBAIGludCBSZW5kZXJUaGVt
ZUNocm9taXVtU2tpYTo6YnV0dG9uSW50ZXJuYWxQYWRkaW5nQm90dG9tKCkgY29uc3QKICNpZiBF
TkFCTEUoVklERU8pCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpzaG91bGRSZW5kZXJN
ZWRpYUNvbnRyb2xQYXJ0KENvbnRyb2xQYXJ0IHBhcnQsIEVsZW1lbnQqIGUpCiB7Ci0gICAgSFRN
TE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVu
dCo+KGUpOwotICAgIHN3aXRjaCAocGFydCkgewotICAgIGNhc2UgTWVkaWFNdXRlQnV0dG9uUGFy
dDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFJl
bmRlclRoZW1lOjpzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KHBhcnQsIGUpOwotICAgIH0K
KyAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpzaG91bGRSZW5kZXJNZWRp
YUNvbnRyb2xQYXJ0KHBhcnQsIGUpOwogfQogI2VuZGlmCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>