<?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>21775</bug_id>
          
          <creation_ts>2008-10-21 13:40:57 -0700</creation_ts>
          <short_desc>Convert buttons on OS X to new Theme API</short_desc>
          <delta_ts>2008-10-22 14:51:50 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>96097</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-21 13:40:57 -0700</bug_when>
    <thetext>Convert buttons on OS X to new Theme API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96205</commentid>
    <comment_count>1</comment_count>
      <attachid>24562</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-22 12:32:26 -0700</bug_when>
    <thetext>Created attachment 24562
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96216</commentid>
    <comment_count>2</comment_count>
      <attachid>24562</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-10-22 13:17:44 -0700</bug_when>
    <thetext>Comment on attachment 24562
Patch

 41     LengthBox(int v)

Maybe we should make this a named constructor, like LengthBox::square or LengthBox::fixedSquare or LengthBox::squareWithFixedSideLength?

If we only ever use it for constructing 0-sized LengthBoxes (as your patch does), maybe we should remove the parameter and call it LengthBox::empty?

@@ bool Theme::controlSupportsBorder(Contro
3636         case SearchFieldPart:
3737         case CheckboxPart:
3838         case RadioPart:
39              return false;
 39             return LengthBox(0);

Shouldn&apos;t we be returning zoomedBox here instead of LengthBox(0)?

 92     // Allows the theme to modify the existing padding/border.
 93     virtual LengthBox controlPadding(ControlPart, const Font&amp;, const LengthBox&amp; zoomedBox, float zoomFactor) const;
 94     virtual LengthBox controlBorder(ControlPart, const Font&amp;, const LengthBox&amp; zoomedBox, float zoomFactor) const;

Do you think it&apos;s worth mentioning that a return value of LengthBox(0) means that the control doesn&apos;t support border/padding?

 89     // Returns the minimum size for a control in zoomed coordinates.  
 90     virtual LengthSize minControlSize(ControlPart, const Font&amp;, float zoomFactor) const { return LengthSize(Length(0, Fixed), Length(0, Fixed)); }

I think I&apos;d prefer &quot;minimum&quot; over &quot;min&quot; in the name of this function. Should we stick &quot;zoomed&quot; in there, too?

 48     virtual bool controlRequiresPreWhiteSpace(ControlPart part) const { return part == PushButtonPart; }

I think we try to avoid inlining virtual functions.

 314 static NSButtonCell* button(ControlPart part, ControlStates states, const IntRect&amp; zoomedRect, float zoomFactor)
 315 {
 316     static NSButtonCell* buttonCell;

We put the space before the * for ObjC types.

 325     if (part == SquareButtonPart ||
 326         zoomedRect.height() &gt; buttonSizes()[NSRegularControlSize].height() * zoomFactor) {

I think it&apos;s better to have the boolean operator at the beginning of the second line in multi-line expressions like this.

 346 static void paintButton(ControlPart part, ControlStates states, GraphicsContext* context, const IntRect&amp; zoomedRect, float zoomFactor, ScrollView* scrollView)
 347 {
 348     // Determine the width and height needed for the control and prepare the cell for painting.
 349     NSButtonCell* buttonCell = button(part, states, zoomedRect, zoomFactor);

Ditto here re: * placement

 350     LocalCurrentGraphicsContext localContext(context);
 351 
 352     context-&gt;save();

Why is it necessary to save/restore the local context?

 356     zoomedSize.setWidth(zoomedRect.width());
 357     zoomedSize.setHeight(zoomedSize.height() * zoomFactor);

Why do we only multiply the height by the zoomFactor?

Have you checked the default button pulse after applying your patch?

 406 FontDescription ThemeMac::controlFont(ControlPart part, const Font&amp; font, float zoomFactor) const
 407 {
 408     switch (part) {
 409         case PushButtonPart: {
 410             FontDescription fontDescription;
 411             fontDescription.setIsAbsoluteSize(true);
 412             fontDescription.setGenericFamily(FontDescription::SerifFamily);
 413 
 414             NSFont* nsFont = [NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:controlSizeForFont(font)]];
 415             fontDescription.firstFamily().setFamily([nsFont familyName]);
 416             fontDescription.setComputedSize([nsFont pointSize] * zoomFactor);
 417             fontDescription.setSpecifiedSize([nsFont pointSize] * zoomFactor);
 418             return fontDescription;
 419         }
 420         default:
 421             return Theme::controlFont(part, font, zoomFactor);
 422     }
 423 }

With only two cases it might be clearer to just use an if:

if (part != PushButtonPart)
    return Theme::controlFont(...);
....

 440 LengthSize ThemeMac::minControlSize(ControlPart part, const Font&amp; font, float zoomFactor) const
 441 {
 442     switch (part) {
 443         case SquareButtonPart:
 444         case DefaultButtonPart:
 445         case ButtonPart:
 446             return LengthSize(Length(0, Fixed), Length(static_cast&lt;int&gt;(15 * zoomFactor), Fixed));

Is truncation here correct? If it isn&apos;t, maybe we should add a FIXME.

 452 LengthBox ThemeMac::controlBorder(ControlPart part, const Font&amp; font, const LengthBox&amp; zoomedBox, float zoomFactor) const
 453 {
 454     switch (part) {
 455         case SquareButtonPart:
 456         case DefaultButtonPart:
 457         case ButtonPart: {
 458             return LengthBox(0, zoomedBox.right().value(), 0, zoomedBox.left().value());
 459         }

The braces here aren&apos;t needed.

 465 LengthBox ThemeMac::controlPadding(ControlPart part, const Font&amp; font, const LengthBox&amp; zoomedBox, float zoomFactor) const
 466 {
 467     switch (part) {
 468         case PushButtonPart: {

Why don&apos;t we lump DefaultButtonPart in with PushButtonPart in this function? We do that in other similar functions. I assume we aren&apos;t mentioning ButtonPart here because we have different rules for &lt;button&gt; vs. &lt;input type=button&gt;?

@@ void ThemeMac::inflateControlPaintRect(C
336504             zoomedRect = inflateRect(zoomedRect, zoomedSize, radioMargins(controlSize), zoomFactor);
337505             break;
338506         }
 507         case PushButtonPart:
 508         case DefaultButtonPart:
 509         case ButtonPart: {
 510             NSButtonCell* cell = button(part, states, zoomedRect, zoomFactor);
 511             NSControlSize controlSize = [cell controlSize];
 512 
 513             // We inflate the rect as needed to account for the Aqua button&apos;s shadow.
 514             if ([cell bezelStyle] == NSRoundedBezelStyle) {
 515                 IntSize zoomedSize = buttonSizes()[controlSize];
 516                 zoomedSize.setHeight(zoomedSize.height() * zoomFactor);
 517                 zoomedSize.setWidth(zoomedRect.width());
 518                 zoomedRect = inflateRect(zoomedRect, zoomedSize, buttonMargins(controlSize), zoomFactor);
 519             }

Misplaced * before cell. You can move controlSize within the if block. Why are we only multiplying the height by the zoomFactor?

 91                 if (!borderBox.top().value())
 92                     style-&gt;resetBorderTop();
 93                 else
 94                     style-&gt;setBorderTopWidth(borderBox.top().value());

Why not just flip this if/else so you can get rid of the negation? I think that would be clearer. Ditto for the other if/else pairs in this block of code, of course.

 510     if (isDefault(o) &amp;&amp; o-&gt;document()-&gt;page()-&gt;focusController()-&gt;isActive())

Should we be checking SelectionController::isFocusedAndActive instead of FocusController::isActive? (i.e., do we want to allow default buttons pulsing in any frame other than the focused frame?) This change seems worth a comment in the ChangeLog (as do many others, but particularly this one since it isn&apos;t directly related to moving things into Theme).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96226</commentid>
    <comment_count>3</comment_count>
      <attachid>24571</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-22 14:09:40 -0700</bug_when>
    <thetext>Created attachment 24571
Patch #2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96230</commentid>
    <comment_count>4</comment_count>
      <attachid>24571</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-10-22 14:16:02 -0700</bug_when>
    <thetext>Comment on attachment 24571
Patch #2

 89     // Returns the minimum size for a control in zoomed coordinates.  
 90     virtual LengthSize minControlSize(ControlPart, const Font&amp;, float zoomFactor) const { return LengthSize(Length(0, Fixed), Length(0, Fixed)); }

I still think &quot;minimumControlSize&quot; would be nicer.

 299 // Buttons really only constrain height.  They respect width.

We normally just use a single space after a period.

 352     LocalCurrentGraphicsContext localContext(context);
 353 
 354     context-&gt;save();

Is the save/restore actually needed since we have a local context?

 91                 if (borderBox.top().value())
 92                     style-&gt;setBorderTopWidth(borderBox.top().value());
 93                 else
 94                     style-&gt;resetBorderTop();

If the reset* calls are only needed to appease DRT, you could add a comment to that effect.

 440     float zoomLevel = o-&gt;style()-&gt;effectiveZoom();

I do think zoomFactor is a clearer name than zoomLevel. A zoomLevel of 1.0f makes it sound like the user zoomed once, while in fact there is no zooming going on at all.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96232</commentid>
    <comment_count>5</comment_count>
      <attachid>24573</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-22 14:38:34 -0700</bug_when>
    <thetext>Created attachment 24573
Patch #3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96234</commentid>
    <comment_count>6</comment_count>
      <attachid>24573</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-10-22 14:41:16 -0700</bug_when>
    <thetext>Comment on attachment 24573
Patch #3

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96237</commentid>
    <comment_count>7</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-22 14:51:50 -0700</bug_when>
    <thetext>Fixed in r37790.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24562</attachid>
            <date>2008-10-22 12:32:26 -0700</date>
            <delta_ts>2008-10-22 14:09:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>41690</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM3Nzg1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMDgtMTAt
MjIgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc3NQorCisgICAgICAgIENvbnZlcnQgYnV0
dG9ucyBvdmVyIHRvIHVzZSB0aGUgbmV3IFRoZW1lIEFQSSBvbiBPUyBYLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoQm94
Lmg6CisgICAgICAgIChXZWJDb3JlOjpMZW5ndGhCb3g6Okxlbmd0aEJveCk6CisgICAgICAgICog
cGxhdGZvcm0vVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OmNvbnRyb2xCb3Jk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OmNvbnRyb2xQYWRkaW5nKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9UaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OmNvbnRyb2xGb250
KToKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lOjpjb250cm9sU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUaGVtZTo6bWluQ29udHJvbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OmNv
bnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UaGVt
ZU1hYy5oOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVNYWM6OmNvbnRyb2xSZXF1aXJlc1ByZVdo
aXRlU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UaGVtZU1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OmNoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpyYWRpb1NpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6YnV0dG9uU2l6ZXMpOgorICAgICAgICAoV2ViQ29yZTo6YnV0dG9u
TWFyZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpidXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6
cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVNYWM6OmNvbnRyb2xGb250KToK
KyAgICAgICAgKFdlYkNvcmU6OlRoZW1lTWFjOjpjb250cm9sU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUaGVtZU1hYzo6bWluQ29udHJvbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVN
YWM6OmNvbnRyb2xCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVNYWM6OmNvbnRyb2xQ
YWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lTWFjOjppbmZsYXRlQ29udHJvbFBhaW50
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZU1hYzo6cGFpbnQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6
YWRqdXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpjb250cm9sU3RhdGVzRm9yUmVuZGVyZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzRGVmYXVsdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0UmFkaW9TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2V0UmFkaW9T
aXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0UmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6bWVudUxpc3RCdXR0
b25TaXplcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxp
c3RTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6cGFkZGluZ0JveCk6CisgICAgICAgIChXZWJD
b3JlOjpJbmhlcml0ZWRGbGFnczo6c2V0UGFkZGluZ0JveCk6CisKIDIwMDgtMTAtMjIgIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNh
bSBXZWluaWcuCkluZGV4OiBwbGF0Zm9ybS9MZW5ndGhCb3guaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0
Zm9ybS9MZW5ndGhCb3guaAkocmV2aXNpb24gMzc3NjEpCisrKyBwbGF0Zm9ybS9MZW5ndGhCb3gu
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsMjIgQEAgc3RydWN0IExlbmd0aEJveCB7CiAg
ICAgewogICAgIH0KIAorICAgIExlbmd0aEJveChpbnQgdikKKyAgICAgICAgOiBtX2xlZnQoTGVu
Z3RoKHYsIEZpeGVkKSkKKyAgICAgICAgLCBtX3JpZ2h0KExlbmd0aCh2LCBGaXhlZCkpCisgICAg
ICAgICwgbV90b3AoTGVuZ3RoKHYsIEZpeGVkKSkKKyAgICAgICAgLCBtX2JvdHRvbShMZW5ndGgo
diwgRml4ZWQpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTGVuZ3RoQm94KGludCB0LCBpbnQg
ciwgaW50IGIsIGludCBsKQorICAgICAgICA6IG1fbGVmdChMZW5ndGgobCwgRml4ZWQpKQorICAg
ICAgICAsIG1fcmlnaHQoTGVuZ3RoKHIsIEZpeGVkKSkKKyAgICAgICAgLCBtX3RvcChMZW5ndGgo
dCwgRml4ZWQpKQorICAgICAgICAsIG1fYm90dG9tKExlbmd0aChiLCBGaXhlZCkpCisgICAgewor
ICAgIH0KKwogICAgIExlbmd0aCBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9CiAgICAg
TGVuZ3RoIHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodDsgfQogICAgIExlbmd0aCB0b3Ao
KSBjb25zdCB7IHJldHVybiBtX3RvcDsgfQpJbmRleDogcGxhdGZvcm0vVGhlbWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHBsYXRmb3JtL1RoZW1lLmNwcAkocmV2aXNpb24gMzc3NjEpCisrKyBwbGF0Zm9y
bS9UaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1ib29sIFRoZW1lOjpjb250cm9sU3VwcG9ydHNCb3JkZXIoQ29udHJvbFBh
cnQgcGFydCkgY29uc3QKK0xlbmd0aEJveCBUaGVtZTo6Y29udHJvbEJvcmRlcihDb250cm9sUGFy
dCBwYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpv
b21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVz
aEJ1dHRvblBhcnQ6CkBAIC0zNiwyMiArMzYsMjIgQEAgYm9vbCBUaGVtZTo6Y29udHJvbFN1cHBv
cnRzQm9yZGVyKENvbnRybwogICAgICAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKICAgICAgICAg
Y2FzZSBDaGVja2JveFBhcnQ6CiAgICAgICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIExlbmd0aEJveCgwKTsKICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHpv
b21lZEJveDsKICAgICB9CiB9CiAKLWJvb2wgVGhlbWU6OmNvbnRyb2xTdXBwb3J0c1BhZGRpbmco
Q29udHJvbFBhcnQgcGFydCkgY29uc3QKK0xlbmd0aEJveCBUaGVtZTo6Y29udHJvbFBhZGRpbmco
Q29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94
LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkgewogICAgICAg
ICBjYXNlIE1lbnVsaXN0UGFydDoKICAgICAgICAgY2FzZSBNZW51bGlzdEJ1dHRvblBhcnQ6CiAg
ICAgICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgogICAgICAgICBjYXNlIFJhZGlvUGFydDoKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBMZW5ndGhCb3goMCk7CiAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybiB6b29tZWRCb3g7CiAgICAgfQogfQogCkluZGV4OiBwbGF0Zm9ybS9UaGVtZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHBsYXRmb3JtL1RoZW1lLmgJKHJldmlzaW9uIDM3NzYxKQorKysgcGxhdGZvcm0v
VGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNvbG9y
LmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJM
ZW5ndGhCb3guaCIKICNpbmNsdWRlICJMZW5ndGhTaXplLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKICNpbmNsdWRlICJUaGVtZVR5cGVzLmgiCkBAIC03OSwxMSArODAsMjIgQEAgcHVi
bGljOgogCiAgICAgLy8gTWV0aG9kcyB1c2VkIHRvIGFkanVzdCB0aGUgUmVuZGVyU3R5bGVzIG9m
IGNvbnRyb2xzLgogICAgIAorICAgIC8vIFRoZSBmb250IGRlc2NyaXB0aW9uIHJlc3VsdCBzaG91
bGQgaGF2ZSBhIHpvb21lZCBmb250IHNpemUuCisgICAgdmlydHVhbCBGb250RGVzY3JpcHRpb24g
Y29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHpvb21GYWN0
b3IpIGNvbnN0IHsgcmV0dXJuIGZvbnQuZm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICAKICAgICAv
LyBUaGUgc2l6ZSBoZXJlIGlzIGluIHpvb21lZCBjb29yZGluYXRlcyBhbHJlYWR5LiAgSWYgYSBu
ZXcgc2l6ZSBpcyByZXR1cm5lZCwgaXQgYWxzbyBuZWVkcyB0byBiZSBpbiB6b29tZWQgY29vcmRp
bmF0ZXMuCiAgICAgdmlydHVhbCBMZW5ndGhTaXplIGNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBj
b25zdCBGb250JiwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgem9vbUZhY3Rv
cikgY29uc3QgeyByZXR1cm4gem9vbWVkU2l6ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBjb250cm9s
U3VwcG9ydHNCb3JkZXIoQ29udHJvbFBhcnQpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBjb250
cm9sU3VwcG9ydHNQYWRkaW5nKENvbnRyb2xQYXJ0KSBjb25zdDsKICAgICAKKyAgICAvLyBSZXR1
cm5zIHRoZSBtaW5pbXVtIHNpemUgZm9yIGEgY29udHJvbCBpbiB6b29tZWQgY29vcmRpbmF0ZXMu
ICAKKyAgICB2aXJ0dWFsIExlbmd0aFNpemUgbWluQ29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNv
bnN0IEZvbnQmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdCB7IHJldHVybiBMZW5ndGhTaXplKExl
bmd0aCgwLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCkpOyB9CisgICAgCisgICAgLy8gQWxsb3dz
IHRoZSB0aGVtZSB0byBtb2RpZnkgdGhlIGV4aXN0aW5nIHBhZGRpbmcvYm9yZGVyLgorICAgIHZp
cnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Jiwg
Y29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAg
IHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQm
LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7Cisg
ICAgCisgICAgLy8gV2hldGhlciBvciBub3Qgd2hpdGVzcGFjZTogcHJlIHNob3VsZCBiZSBmb3Jj
ZWQgb24gYWx3YXlzLgorICAgIHZpcnR1YWwgYm9vbCBjb250cm9sUmVxdWlyZXNQcmVXaGl0ZVNw
YWNlKENvbnRyb2xQYXJ0KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgLy8gTWV0aG9k
IGZvciBwYWludGluZyBhIGNvbnRyb2wuICBUaGUgcmVjdCBpcyBpbiB6b29tZWQgY29vcmRpbmF0
ZXMuCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzLCBH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFj
dG9yLCBTY3JvbGxWaWV3KikgY29uc3QgeyB9OwogCkluZGV4OiBwbGF0Zm9ybS9tYWMvVGhlbWVN
YWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAkocmV2aXNpb24gMzc3
NjEpCisrKyBwbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCAr
MzcsMTYgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb25B
ZGp1c3RtZW50KENvbnRyb2xQYXJ0KSBjb25zdDsKIAotICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBj
b250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aFNpemUmLCBm
bG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZvbnREZXNjcmlwdGlvbiBjb250
cm9sRm9udChDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0
OwogICAgIAorICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZShDb250cm9sUGFydCwg
Y29uc3QgRm9udCYsIGNvbnN0IExlbmd0aFNpemUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsK
KyAgICB2aXJ0dWFsIExlbmd0aFNpemUgbWluQ29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0
IEZvbnQmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKworICAgIHZpcnR1YWwgTGVuZ3RoQm94
IGNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94
JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVuZ3Ro
Qm94IGNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhC
b3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJv
b2wgY29udHJvbFJlcXVpcmVzUHJlV2hpdGVTcGFjZShDb250cm9sUGFydCBwYXJ0KSBjb25zdCB7
IHJldHVybiBwYXJ0ID09IFB1c2hCdXR0b25QYXJ0OyB9CisKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IElu
dFJlY3QmLCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KikgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIGluZmxhdGVDb250cm9sUGFpbnRSZWN0KENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVz
LCBJbnRSZWN0JiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CiB9OwpJbmRleDogcGxhdGZvcm0v
bWFjL1RoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQko
cmV2aXNpb24gMzc3NjEpCisrKyBwbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDcgKzI3LDkgQEAKICNpbXBvcnQgIlRoZW1lTWFjLmgiCiAKICNpbXBvcnQgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCisjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNl
LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTE1Nyw3ICsxNTksNyBAQCBzdGF0aWMg
Y29uc3QgaW50KiBjaGVja2JveE1hcmdpbnMoTlNDb250CiAgICAgcmV0dXJuIG1hcmdpbnNbY29u
dHJvbFNpemVdOwogfQogCi1zdGF0aWMgTGVuZ3RoU2l6ZSBjaGVja2JveFNpemUoQ29udHJvbFBh
cnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwg
ZmxvYXQgem9vbUZhY3RvcikKK3N0YXRpYyBMZW5ndGhTaXplIGNoZWNrYm94U2l6ZShjb25zdCBG
b250JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9y
KQogewogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwg
dGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCiAgICAgaWYgKCF6b29tZWRTaXplLndpZHRoKCku
aXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhem9vbWVkU2l6ZS5oZWlnaHQoKS5pc0ludHJpbnNpY09y
QXV0bygpKQpAQCAtMjM0LDcgKzIzNiw3IEBAIHN0YXRpYyBjb25zdCBpbnQqIHJhZGlvTWFyZ2lu
cyhOU0NvbnRyb2wKICAgICByZXR1cm4gbWFyZ2luc1tjb250cm9sU2l6ZV07CiB9CiAKLXN0YXRp
YyBMZW5ndGhTaXplIHJhZGlvU2l6ZShDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250
LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQorc3RhdGlj
IExlbmd0aFNpemUgcmFkaW9TaXplKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUm
IHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IpCiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFu
ZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4K
ICAgICBpZiAoIXpvb21lZFNpemUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICF6b29t
ZWRTaXplLmhlaWdodCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCkBAIC0yOTAsNiArMjkyLDEwOCBA
QCBzdGF0aWMgdm9pZCBwYWludFJhZGlvKENvbnRyb2xTdGF0ZXMgc3RhCiAgICAgY29udGV4dC0+
cmVzdG9yZSgpOwogfQogCisvLyBCdXR0b25zCisKK3N0YXRpYyBjb25zdCBJbnRTaXplKiBidXR0
b25TaXplcygpCit7CisgICAgc3RhdGljIGNvbnN0IEludFNpemUgc2l6ZXNbM10gPSB7IEludFNp
emUoMCwgMjEpLCBJbnRTaXplKDAsIDE4KSwgSW50U2l6ZSgwLCAxNSkgfTsKKyAgICByZXR1cm4g
c2l6ZXM7Cit9CisKK3N0YXRpYyBjb25zdCBpbnQqIGJ1dHRvbk1hcmdpbnMoTlNDb250cm9sU2l6
ZSBjb250cm9sU2l6ZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IG1hcmdpbnNbM11bNF0gPQor
ICAgIHsKKyAgICAgICAgeyA0LCA2LCA3LCA2IH0sCisgICAgICAgIHsgNCwgNSwgNiwgNSB9LAor
ICAgICAgICB7IDAsIDEsIDEsIDEgfSwKKyAgICB9OworICAgIHJldHVybiBtYXJnaW5zW2NvbnRy
b2xTaXplXTsKK30KKworc3RhdGljIE5TQnV0dG9uQ2VsbCogYnV0dG9uKENvbnRyb2xQYXJ0IHBh
cnQsIENvbnRyb2xTdGF0ZXMgc3RhdGVzLCBjb25zdCBJbnRSZWN0JiB6b29tZWRSZWN0LCBmbG9h
dCB6b29tRmFjdG9yKQoreworICAgIHN0YXRpYyBOU0J1dHRvbkNlbGwqIGJ1dHRvbkNlbGw7Cisg
ICAgc3RhdGljIGJvb2wgZGVmYXVsdEJ1dHRvbjsKKyAgICBpZiAoIWJ1dHRvbkNlbGwpIHsKKyAg
ICAgICAgYnV0dG9uQ2VsbCA9IFtbTlNCdXR0b25DZWxsIGFsbG9jXSBpbml0XTsKKyAgICAgICAg
W2J1dHRvbkNlbGwgc2V0VGl0bGU6bmlsXTsKKyAgICAgICAgW2J1dHRvbkNlbGwgc2V0QnV0dG9u
VHlwZTpOU01vbWVudGFyeVB1c2hJbkJ1dHRvbl07CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBj
b250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSByZWN0YW5nbGUgd2UncmUgcGFpbnRpbmcgaW50by4K
KyAgICBpZiAocGFydCA9PSBTcXVhcmVCdXR0b25QYXJ0IHx8CisgICAgICAgIHpvb21lZFJlY3Qu
aGVpZ2h0KCkgPiBidXR0b25TaXplcygpW05TUmVndWxhckNvbnRyb2xTaXplXS5oZWlnaHQoKSAq
IHpvb21GYWN0b3IpIHsKKyAgICAgICAgLy8gVXNlIHRoZSBzcXVhcmUgYnV0dG9uCisgICAgICAg
IGlmIChbYnV0dG9uQ2VsbCBiZXplbFN0eWxlXSAhPSBOU1NoYWRvd2xlc3NTcXVhcmVCZXplbFN0
eWxlKQorICAgICAgICAgICAgW2J1dHRvbkNlbGwgc2V0QmV6ZWxTdHlsZTpOU1NoYWRvd2xlc3NT
cXVhcmVCZXplbFN0eWxlXTsKKyAgICB9IGVsc2UgaWYgKFtidXR0b25DZWxsIGJlemVsU3R5bGVd
ICE9IE5TUm91bmRlZEJlemVsU3R5bGUpCisgICAgICAgIFtidXR0b25DZWxsIHNldEJlemVsU3R5
bGU6TlNSb3VuZGVkQmV6ZWxTdHlsZV07CisKKyAgICBzZXRDb250cm9sU2l6ZShidXR0b25DZWxs
LCBidXR0b25TaXplcygpLCB6b29tZWRSZWN0LnNpemUoKSwgem9vbUZhY3Rvcik7CisKKyAgICBp
ZiAoZGVmYXVsdEJ1dHRvbiAhPSAoc3RhdGVzICYgRGVmYXVsdFN0YXRlKSkgeworICAgICAgICBk
ZWZhdWx0QnV0dG9uID0gIWRlZmF1bHRCdXR0b247CisgICAgICAgIFtidXR0b25DZWxsIHNldEtl
eUVxdWl2YWxlbnQ6KGRlZmF1bHRCdXR0b24gPyBAIlxyIiA6IEAiIildOworICAgIH0KKworICAg
IC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KKyAgICB1cGRhdGVT
dGF0ZXMoYnV0dG9uQ2VsbCwgc3RhdGVzKTsKKyAgICAKKyAgICByZXR1cm4gYnV0dG9uQ2VsbDsK
K30KKworc3RhdGljIHZvaWQgcGFpbnRCdXR0b24oQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0
YXRlcyBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgem9v
bWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldykKK3sKKyAg
ICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgbmVlZGVkIGZvciB0aGUgY29udHJv
bCBhbmQgcHJlcGFyZSB0aGUgY2VsbCBmb3IgcGFpbnRpbmcuCisgICAgTlNCdXR0b25DZWxsKiBi
dXR0b25DZWxsID0gYnV0dG9uKHBhcnQsIHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3Rvcik7
CisgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChjb250ZXh0KTsK
KworICAgIGNvbnRleHQtPnNhdmUoKTsKKworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUg
PSBbYnV0dG9uQ2VsbCBjb250cm9sU2l6ZV07CisgICAgSW50U2l6ZSB6b29tZWRTaXplID0gYnV0
dG9uU2l6ZXMoKVtjb250cm9sU2l6ZV07CisgICAgem9vbWVkU2l6ZS5zZXRXaWR0aCh6b29tZWRS
ZWN0LndpZHRoKCkpOworICAgIHpvb21lZFNpemUuc2V0SGVpZ2h0KHpvb21lZFNpemUuaGVpZ2h0
KCkgKiB6b29tRmFjdG9yKTsKKyAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHpvb21lZFJlY3Q7
CisgICAgaWYgKFtidXR0b25DZWxsIGJlemVsU3R5bGVdID09IE5TUm91bmRlZEJlemVsU3R5bGUp
IHsKKyAgICAgICAgLy8gQ2VudGVyIHRoZSBidXR0b24gd2l0aGluIHRoZSBhdmFpbGFibGUgc3Bh
Y2UuCisgICAgICAgIGlmIChpbmZsYXRlZFJlY3QuaGVpZ2h0KCkgPiB6b29tZWRTaXplLmhlaWdo
dCgpKSB7CisgICAgICAgICAgICBpbmZsYXRlZFJlY3Quc2V0WShpbmZsYXRlZFJlY3QueSgpICsg
KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAtIHpvb21lZFNpemUuaGVpZ2h0KCkpIC8gMik7CisgICAg
ICAgICAgICBpbmZsYXRlZFJlY3Quc2V0SGVpZ2h0KHpvb21lZFNpemUuaGVpZ2h0KCkpOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gTm93IGluZmxhdGUgaXQgdG8gYWNjb3VudCBmb3IgdGhlIHNo
YWRvdy4KKyAgICAgICAgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0ZVJlY3QoaW5mbGF0ZWRSZWN0LCB6
b29tZWRTaXplLCBidXR0b25NYXJnaW5zKGNvbnRyb2xTaXplKSwgem9vbUZhY3Rvcik7CisKKyAg
ICAgICAgaWYgKHpvb21GYWN0b3IgIT0gMS4wZikgeworICAgICAgICAgICAgaW5mbGF0ZWRSZWN0
LnNldFdpZHRoKGluZmxhdGVkUmVjdC53aWR0aCgpIC8gem9vbUZhY3Rvcik7CisgICAgICAgICAg
ICBpbmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21GYWN0
b3IpOworICAgICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKGluZmxhdGVkUmVjdC54KCksIGlu
ZmxhdGVkUmVjdC55KCkpOworICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpv
b21GYWN0b3IsIHpvb21GYWN0b3IpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgt
aW5mbGF0ZWRSZWN0LngoKSwgLWluZmxhdGVkUmVjdC55KCkpOworICAgICAgICB9CisgICAgfSAK
KworICAgIE5TVmlldyAqdmlldyA9IHNjcm9sbFZpZXctPmRvY3VtZW50VmlldygpOworICAgIE5T
V2luZG93ICp3aW5kb3cgPSBbdmlldyB3aW5kb3ddOworICAgIE5TQnV0dG9uQ2VsbCAqcHJldmlv
dXNEZWZhdWx0QnV0dG9uQ2VsbCA9IFt3aW5kb3cgZGVmYXVsdEJ1dHRvbkNlbGxdOworCisgICAg
aWYgKChzdGF0ZXMgJiBEZWZhdWx0U3RhdGUpICYmIFt3aW5kb3cgaXNLZXlXaW5kb3ddKSB7Cisg
ICAgICAgIFt3aW5kb3cgc2V0RGVmYXVsdEJ1dHRvbkNlbGw6YnV0dG9uQ2VsbF07CisgICAgICAg
IHdrQWR2YW5jZURlZmF1bHRCdXR0b25QdWxzZUFuaW1hdGlvbihidXR0b25DZWxsKTsKKyAgICB9
IGVsc2UgaWYgKFtwcmV2aW91c0RlZmF1bHRCdXR0b25DZWxsIGlzRXF1YWw6YnV0dG9uQ2VsbF0p
CisgICAgICAgIFt3aW5kb3cgc2V0RGVmYXVsdEJ1dHRvbkNlbGw6bmlsXTsKKworICAgIFtidXR0
b25DZWxsIGRyYXdXaXRoRnJhbWU6TlNSZWN0KGluZmxhdGVkUmVjdCkgaW5WaWV3OnZpZXddOwor
ICAgIFtidXR0b25DZWxsIHNldENvbnRyb2xWaWV3Om5pbF07CisKKyAgICBpZiAoIVtwcmV2aW91
c0RlZmF1bHRCdXR0b25DZWxsIGlzRXF1YWw6YnV0dG9uQ2VsbF0pCisgICAgICAgIFt3aW5kb3cg
c2V0RGVmYXVsdEJ1dHRvbkNlbGw6cHJldmlvdXNEZWZhdWx0QnV0dG9uQ2VsbF07CisKKyAgICBj
b250ZXh0LT5yZXN0b3JlKCk7Cit9CisKIC8vIFRoZW1lIG92ZXJyaWRlcwogCiBpbnQgVGhlbWVN
YWM6OmJhc2VsaW5lUG9zaXRpb25BZGp1c3RtZW50KENvbnRyb2xQYXJ0IHBhcnQpIGNvbnN0CkBA
IC0yOTksMTggKzQwMyw4MiBAQCBpbnQgVGhlbWVNYWM6OmJhc2VsaW5lUG9zaXRpb25BZGp1c3Rt
ZW50CiAgICAgcmV0dXJuIFRoZW1lOjpiYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudChwYXJ0KTsK
IH0KIAorRm9udERlc2NyaXB0aW9uIFRoZW1lTWFjOjpjb250cm9sRm9udChDb250cm9sUGFydCBw
YXJ0LCBjb25zdCBGb250JiBmb250LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAoreworICAgIHN3
aXRjaCAocGFydCkgeworICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OiB7CisgICAgICAgICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOworICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseSk7CisKKyAg
ICAgICAgICAgIE5TRm9udCogbnNGb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0Zv
bnQgc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpjb250cm9sU2l6ZUZvckZvbnQoZm9udCld
XTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShb
bnNGb250IGZhbWlseU5hbWVdKTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21w
dXRlZFNpemUoW25zRm9udCBwb2ludFNpemVdICogem9vbUZhY3Rvcik7CisgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShbbnNGb250IHBvaW50U2l6ZV0gKiB6b29t
RmFjdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBmb250RGVzY3JpcHRpb247CisgICAgICAgIH0K
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBUaGVtZTo6Y29udHJvbEZvbnQo
cGFydCwgZm9udCwgem9vbUZhY3Rvcik7CisgICAgfQorfQorCiBMZW5ndGhTaXplIFRoZW1lTWFj
Ojpjb250cm9sU2l6ZShDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBM
ZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAogewogICAgIHN3
aXRjaCAocGFydCkgewogICAgICAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgICAgIHJl
dHVybiBjaGVja2JveFNpemUocGFydCwgZm9udCwgem9vbWVkU2l6ZSwgem9vbUZhY3Rvcik7Cisg
ICAgICAgICAgICByZXR1cm4gY2hlY2tib3hTaXplKGZvbnQsIHpvb21lZFNpemUsIHpvb21GYWN0
b3IpOwogICAgICAgICBjYXNlIFJhZGlvUGFydDoKLSAgICAgICAgICAgIHJldHVybiByYWRpb1Np
emUocGFydCwgZm9udCwgem9vbWVkU2l6ZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICByZXR1
cm4gcmFkaW9TaXplKGZvbnQsIHpvb21lZFNpemUsIHpvb21GYWN0b3IpOworICAgICAgICBjYXNl
IFB1c2hCdXR0b25QYXJ0OgorICAgICAgICAgICAgLy8gSGVpZ2h0IGlzIHJlc2V0IHRvIGF1dG8g
c28gdGhhdCBzcGVjaWZpZWQgaGVpZ2h0cyBjYW4gYmUgaWdub3JlZC4KKyAgICAgICAgICAgIHJl
dHVybiBzaXplRnJvbUZvbnQoZm9udCwgTGVuZ3RoU2l6ZSh6b29tZWRTaXplLndpZHRoKCksIExl
bmd0aCgpKSwgem9vbUZhY3RvciwgYnV0dG9uU2l6ZXMoKSk7CiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICByZXR1cm4gem9vbWVkU2l6ZTsKICAgICB9CiB9CiAKK0xlbmd0aFNpemUgVGhl
bWVNYWM6Om1pbkNvbnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQs
IGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgICAg
IGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoK
KyAgICAgICAgY2FzZSBCdXR0b25QYXJ0OgorICAgICAgICAgICAgcmV0dXJuIExlbmd0aFNpemUo
TGVuZ3RoKDAsIEZpeGVkKSwgTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oMTUgKiB6b29tRmFjdG9y
KSwgRml4ZWQpKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBUaGVtZTo6
bWluQ29udHJvbFNpemUocGFydCwgZm9udCwgem9vbUZhY3Rvcik7CisgICAgfQorfQorCitMZW5n
dGhCb3ggVGhlbWVNYWM6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNv
bnN0Cit7CisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFy
dDoKKyAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBCdXR0b25Q
YXJ0OiB7CisgICAgICAgICAgICByZXR1cm4gTGVuZ3RoQm94KDAsIHpvb21lZEJveC5yaWdodCgp
LnZhbHVlKCksIDAsIHpvb21lZEJveC5sZWZ0KCkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBUaGVtZTo6Y29udHJvbEJvcmRlcihwYXJ0
LCBmb250LCB6b29tZWRCb3gsIHpvb21GYWN0b3IpOworICAgIH0KK30KKworTGVuZ3RoQm94IFRo
ZW1lTWFjOjpjb250cm9sUGFkZGluZyhDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250
LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDogeworICAg
ICAgICAgICAgLy8gSnVzdCB1c2UgOHB4LiAgQXBwS2l0IHdhbnRzIHRvIHVzZSAxMXB4IGZvciBt
aW5pIGJ1dHRvbnMsIGJ1dCB0aGF0IHBhZGRpbmcgaXMganVzdCB0b28gbGFyZ2UKKyAgICAgICAg
ICAgIC8vIGZvciByZWFsLXdvcmxkIFdlYiBzaXRlcyAoY3JlYXRpbmcgYSBodWdlIG5lY2Vzc2Fy
eSBtaW5pbXVtIHdpZHRoIGZvciBidXR0b25zIHdob3NlIHNwYWNlIGlzCisgICAgICAgICAgICAv
LyBieSBkZWZpbml0aW9uIGNvbnN0cmFpbmVkLCBzaW5jZSB3ZSBzZWxlY3QgbWluaSBvbmx5IGZv
ciBzbWFsbCBjcmFtcGVkIGVudmlyb25tZW50cy4KKyAgICAgICAgICAgIC8vIFRoaXMgYWxzbyBn
dWFyYW50ZWVzIHRoZSBIVE1MIDxidXR0b24+IHdpbGwgbWF0Y2ggb3VyIHJlbmRlcmluZyBieSBk
ZWZhdWx0LCBzaW5jZSB3ZSdyZSB1c2luZyBhIGNvbnNpc3RlbnQKKyAgICAgICAgICAgIC8vIHBh
ZGRpbmcuCisgICAgICAgICAgICBjb25zdCBpbnQgcGFkZGluZyA9IDggKiB6b29tRmFjdG9yOwor
ICAgICAgICAgICAgcmV0dXJuIExlbmd0aEJveCgwLCBwYWRkaW5nLCAwLCBwYWRkaW5nKTsKKyAg
ICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFRoZW1lOjpjb250
cm9sUGFkZGluZyhwYXJ0LCBmb250LCB6b29tZWRCb3gsIHpvb21GYWN0b3IpOworICAgIH0KK30K
Kwogdm9pZCBUaGVtZU1hYzo6aW5mbGF0ZUNvbnRyb2xQYWludFJlY3QoQ29udHJvbFBhcnQgcGFy
dCwgQ29udHJvbFN0YXRlcyBzdGF0ZXMsIEludFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21G
YWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CkBAIC0zMzYsNiArNTA0LDIxIEBA
IHZvaWQgVGhlbWVNYWM6OmluZmxhdGVDb250cm9sUGFpbnRSZWN0KEMKICAgICAgICAgICAgIHpv
b21lZFJlY3QgPSBpbmZsYXRlUmVjdCh6b29tZWRSZWN0LCB6b29tZWRTaXplLCByYWRpb01hcmdp
bnMoY29udHJvbFNpemUpLCB6b29tRmFjdG9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CisgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2UgRGVmYXVsdEJ1
dHRvblBhcnQ6CisgICAgICAgIGNhc2UgQnV0dG9uUGFydDogeworICAgICAgICAgICAgTlNCdXR0
b25DZWxsKiBjZWxsID0gYnV0dG9uKHBhcnQsIHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3Rv
cik7CisgICAgICAgICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gW2NlbGwgY29udHJv
bFNpemVdOworCisgICAgICAgICAgICAvLyBXZSBpbmZsYXRlIHRoZSByZWN0IGFzIG5lZWRlZCB0
byBhY2NvdW50IGZvciB0aGUgQXF1YSBidXR0b24ncyBzaGFkb3cuCisgICAgICAgICAgICBpZiAo
W2NlbGwgYmV6ZWxTdHlsZV0gPT0gTlNSb3VuZGVkQmV6ZWxTdHlsZSkgeworICAgICAgICAgICAg
ICAgIEludFNpemUgem9vbWVkU2l6ZSA9IGJ1dHRvblNpemVzKClbY29udHJvbFNpemVdOworICAg
ICAgICAgICAgICAgIHpvb21lZFNpemUuc2V0SGVpZ2h0KHpvb21lZFNpemUuaGVpZ2h0KCkgKiB6
b29tRmFjdG9yKTsKKyAgICAgICAgICAgICAgICB6b29tZWRTaXplLnNldFdpZHRoKHpvb21lZFJl
Y3Qud2lkdGgoKSk7CisgICAgICAgICAgICAgICAgem9vbWVkUmVjdCA9IGluZmxhdGVSZWN0KHpv
b21lZFJlY3QsIHpvb21lZFNpemUsIGJ1dHRvbk1hcmdpbnMoY29udHJvbFNpemUpLCB6b29tRmFj
dG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC0zNTAsNiArNTMzLDEy
IEBAIHZvaWQgVGhlbWVNYWM6OnBhaW50KENvbnRyb2xQYXJ0IHBhcnQsIEMKICAgICAgICAgY2Fz
ZSBSYWRpb1BhcnQ6CiAgICAgICAgICAgICBwYWludFJhZGlvKHN0YXRlcywgY29udGV4dCwgem9v
bWVkUmVjdCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldyk7CiAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFy
dDoKKyAgICAgICAgY2FzZSBCdXR0b25QYXJ0OgorICAgICAgICBjYXNlIFNxdWFyZUJ1dHRvblBh
cnQ6CisgICAgICAgICAgICBwYWludEJ1dHRvbihwYXJ0LCBzdGF0ZXMsIGNvbnRleHQsIHpvb21l
ZFJlY3QsIHpvb21GYWN0b3IsIHNjcm9sbFZpZXcpOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiByZW5kZXJpbmcv
UmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJ
KHJldmlzaW9uIDM3NzYxKQorKysgcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgorI2luY2x1
ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgpAQCAtNjIsOSArNjMs
MTAgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoQ1NTU3R5bGVTZQogICAgICAgICBz
dHlsZS0+c2V0RGlzcGxheShCTE9DSyk7CiAKICAgICBpZiAoVUFIYXNBcHBlYXJhbmNlICYmIHRo
ZW1lKCktPmlzQ29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNrZ3Jv
dW5kQ29sb3IpKSB7Ci0gICAgICAgIGlmIChwYXJ0ID09IE1lbnVsaXN0UGFydCkKKyAgICAgICAg
aWYgKHBhcnQgPT0gTWVudWxpc3RQYXJ0KSB7CiAgICAgICAgICAgICBzdHlsZS0+c2V0QXBwZWFy
YW5jZShNZW51bGlzdEJ1dHRvblBhcnQpOwotICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXJ0
ID0gTWVudWxpc3RCdXR0b25QYXJ0OworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHN0eWxl
LT5zZXRBcHBlYXJhbmNlKE5vQ29udHJvbFBhcnQpOwogICAgIH0KIApAQCAtNzUsMTkgKzc3LDgx
IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKENTU1N0eWxlU2UKICAgICBzdHlsZS0+
c2V0Qm94U2hhZG93KDApOwogICAgIAogI2lmIFVTRShORVdfVEhFTUUpCi0gICAgaWYgKHBhcnQg
PT0gQ2hlY2tib3hQYXJ0IHx8IHBhcnQgPT0gUmFkaW9QYXJ0KSB7Ci0gICAgICAgIGlmICghbV90
aGVtZS0+Y29udHJvbFN1cHBvcnRzQm9yZGVyKHBhcnQpKQotICAgICAgICAgICAgc3R5bGUtPnJl
c2V0Qm9yZGVyKCk7Ci0gICAgICAgIGlmICghbV90aGVtZS0+Y29udHJvbFN1cHBvcnRzUGFkZGlu
ZyhwYXJ0KSkKLSAgICAgICAgICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBzd2l0Y2gg
KHBhcnQpIHsKKyAgICAgICAgY2FzZSBDaGVja2JveFBhcnQ6CisgICAgICAgIGNhc2UgUmFkaW9Q
YXJ0OgorICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgorICAgICAgICBjYXNlIFNxdWFyZUJ1
dHRvblBhcnQ6CisgICAgICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2Ug
QnV0dG9uUGFydDogeworICAgICAgICAgICAgLy8gQm9yZGVyCisgICAgICAgICAgICBMZW5ndGhC
b3ggYm9yZGVyQm94KHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBzdHlsZS0+Ym9yZGVyUmlnaHRX
aWR0aCgpLCBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwgc3R5bGUtPmJvcmRlckxlZnRXaWR0
aCgpKTsKKyAgICAgICAgICAgIGJvcmRlckJveCA9IG1fdGhlbWUtPmNvbnRyb2xCb3JkZXIocGFy
dCwgc3R5bGUtPmZvbnQoKSwgYm9yZGVyQm94LCBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAg
ICAgICAgICAgIGlmIChib3JkZXJCb3gudG9wKCkudmFsdWUoKSAhPSBzdHlsZS0+Ym9yZGVyVG9w
V2lkdGgoKSkgeworICAgICAgICAgICAgICAgIGlmICghYm9yZGVyQm94LnRvcCgpLnZhbHVlKCkp
CisgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5yZXNldEJvcmRlclRvcCgpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldEJvcmRlclRvcFdpZHRo
KGJvcmRlckJveC50b3AoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChib3JkZXJCb3gucmlnaHQoKS52YWx1ZSgpICE9IHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIWJvcmRlckJveC5yaWdodCgpLnZhbHVlKCkpCisgICAg
ICAgICAgICAgICAgICAgIHN0eWxlLT5yZXNldEJvcmRlclJpZ2h0KCk7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0Qm9yZGVyUmlnaHRXaWR0aChi
b3JkZXJCb3gucmlnaHQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChib3JkZXJCb3guYm90dG9tKCkudmFsdWUoKSAhPSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgo
KSkgeworICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRCb3JkZXJCb3R0b21XaWR0aChib3JkZXJC
b3guYm90dG9tKCkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFib3JkZXJCb3guYm90
dG9tKCkudmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyQm90
dG9tKCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdHlsZS0+
c2V0Qm9yZGVyQm90dG9tV2lkdGgoYm9yZGVyQm94LmJvdHRvbSgpLnZhbHVlKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGJvcmRlckJveC5sZWZ0KCkudmFsdWUoKSAhPSBzdHls
ZS0+Ym9yZGVyTGVmdFdpZHRoKCkpIHsKKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0Qm9yZGVy
TGVmdFdpZHRoKGJvcmRlckJveC5sZWZ0KCkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgaWYg
KCFib3JkZXJCb3gubGVmdCgpLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5y
ZXNldEJvcmRlckxlZnQoKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHN0eWxlLT5zZXRCb3JkZXJMZWZ0V2lkdGgoYm9yZGVyQm94LmxlZnQoKS52YWx1ZSgpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUGFkZGluZworICAgICAgICAgICAgTGVu
Z3RoQm94IHBhZGRpbmdCb3ggPSBtX3RoZW1lLT5jb250cm9sUGFkZGluZyhwYXJ0LCBzdHlsZS0+
Zm9udCgpLCBzdHlsZS0+cGFkZGluZ0JveCgpLCBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAg
ICAgICAgICAgIGlmIChwYWRkaW5nQm94ICE9IHN0eWxlLT5wYWRkaW5nQm94KCkpCisgICAgICAg
ICAgICAgICAgc3R5bGUtPnNldFBhZGRpbmdCb3gocGFkZGluZ0JveCk7CisKKyAgICAgICAgICAg
IC8vIFdoaXRlc3BhY2UKKyAgICAgICAgICAgIGlmIChtX3RoZW1lLT5jb250cm9sUmVxdWlyZXNQ
cmVXaGl0ZVNwYWNlKHBhcnQpKQorICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNl
KFBSRSk7CiAgICAgICAgICAgICAKLSAgICAgICAgLy8gVGhlIHdpZHRoIGFuZCBoZWlnaHQgaGVy
ZSBhcmUgYWZmZWN0ZWQgYnkgdGhlIHpvb20uCi0gICAgICAgIC8vIEZJWE1FOiBDaGVjayBpcyBm
bGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4LXdpZHRoIGludG8gYWNj
b3VudC4KLSAgICAgICAgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZSA9IG1fdGhlbWUtPmNvbnRyb2xT
aXplKHBhcnQsIHN0eWxlLT5mb250KCksIExlbmd0aFNpemUoc3R5bGUtPndpZHRoKCksIHN0eWxl
LT5oZWlnaHQoKSksIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOwotICAgICAgICBpZiAoY29udHJv
bFNpemUud2lkdGgoKSAhPSBzdHlsZS0+d2lkdGgoKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRX
aWR0aChjb250cm9sU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgaWYgKGNvbnRyb2xTaXplLmhlaWdo
dCgpICE9IHN0eWxlLT5oZWlnaHQoKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoY29u
dHJvbFNpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgLy8gV2lkdGggLyBIZWlnaHQKKyAgICAg
ICAgICAgIC8vIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IGhlcmUgYXJlIGFmZmVjdGVkIGJ5IHRoZSB6
b29tLgorICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIGlzIGZsYXdlZCwgc2luY2UgaXQgZG9l
c24ndCB0YWtlIG1pbi13aWR0aC9tYXgtd2lkdGggaW50byBhY2NvdW50LgorICAgICAgICAgICAg
TGVuZ3RoU2l6ZSBjb250cm9sU2l6ZSA9IG1fdGhlbWUtPmNvbnRyb2xTaXplKHBhcnQsIHN0eWxl
LT5mb250KCksIExlbmd0aFNpemUoc3R5bGUtPndpZHRoKCksIHN0eWxlLT5oZWlnaHQoKSksIHN0
eWxlLT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICAgICAgaWYgKGNvbnRyb2xTaXplLndpZHRo
KCkgIT0gc3R5bGUtPndpZHRoKCkpCisgICAgICAgICAgICAgICAgc3R5bGUtPnNldFdpZHRoKGNv
bnRyb2xTaXplLndpZHRoKCkpOworICAgICAgICAgICAgaWYgKGNvbnRyb2xTaXplLmhlaWdodCgp
ICE9IHN0eWxlLT5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KGNv
bnRyb2xTaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE1p
bi1XaWR0aCAvIE1pbi1IZWlnaHQKKyAgICAgICAgICAgIExlbmd0aFNpemUgbWluQ29udHJvbFNp
emUgPSBtX3RoZW1lLT5taW5Db250cm9sU2l6ZShwYXJ0LCBzdHlsZS0+Zm9udCgpLCBzdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgICAgIGlmIChtaW5Db250cm9sU2l6ZS53aWR0aCgp
ICE9IHN0eWxlLT5taW5XaWR0aCgpKQorICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRNaW5XaWR0
aChtaW5Db250cm9sU2l6ZS53aWR0aCgpKTsKKyAgICAgICAgICAgIGlmIChtaW5Db250cm9sU2l6
ZS5oZWlnaHQoKSAhPSBzdHlsZS0+bWluSGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgc3R5bGUt
PnNldE1pbkhlaWdodChtaW5Db250cm9sU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBGb250CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gY29udHJv
bEZvbnQgPSBtX3RoZW1lLT5jb250cm9sRm9udChwYXJ0LCBzdHlsZS0+Zm9udCgpLCBzdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgICAgIGlmIChjb250cm9sRm9udCAhPSBzdHlsZS0+
Zm9udCgpLmZvbnREZXNjcmlwdGlvbigpKSB7CisgICAgICAgICAgICAgICAgLy8gUmVzZXQgb3Vy
IGxpbmUtaGVpZ2h0CisgICAgICAgICAgICAgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVy
U3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIC8vIE5vdyB1cGRhdGUgb3VyIGZvbnQuCisgICAgICAgICAgICAgICAgaWYgKHN0eWxl
LT5zZXRGb250RGVzY3JpcHRpb24oY29udHJvbEZvbnQpKQorICAgICAgICAgICAgICAgICAgICBz
dHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogI2VuZGlmCiAKQEAgLTk4LDEy
ICsxNjIsMTIgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoQ1NTU3R5bGVTZQogICAg
ICAgICAgICAgcmV0dXJuIGFkanVzdENoZWNrYm94U3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsK
ICAgICAgICAgY2FzZSBSYWRpb1BhcnQ6CiAgICAgICAgICAgICByZXR1cm4gYWRqdXN0UmFkaW9T
dHlsZShzZWxlY3Rvciwgc3R5bGUsIGUpOwotI2VuZGlmCiAgICAgICAgIGNhc2UgUHVzaEJ1dHRv
blBhcnQ6CiAgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBEZWZh
dWx0QnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBCdXR0b25QYXJ0OgogICAgICAgICAgICAgcmV0
dXJuIGFkanVzdEJ1dHRvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7CisjZW5kaWYKICAgICAg
ICAgY2FzZSBUZXh0RmllbGRQYXJ0OgogICAgICAgICAgICAgcmV0dXJuIGFkanVzdFRleHRGaWVs
ZFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7CiAgICAgICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgpA
QCAtMTU2LDkgKzIyMCwxNyBAQCBib29sIFJlbmRlclRoZW1lOjpwYWludChSZW5kZXJPYmplY3Qq
IG8sCiAgICAgQ29udHJvbFBhcnQgcGFydCA9IG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKIAog
I2lmIFVTRShORVdfVEhFTUUpCi0gICAgaWYgKHBhcnQgPT0gQ2hlY2tib3hQYXJ0IHx8IHBhcnQg
PT0gUmFkaW9QYXJ0KSB7Ci0gICAgICAgIG1fdGhlbWUtPnBhaW50KHBhcnQsIGNvbnRyb2xTdGF0
ZXNGb3JSZW5kZXJlcihvKSwgY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHQqPihwYWludEluZm8u
Y29udGV4dCksIHIsIG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSwgby0+dmlldygpLT5mcmFt
ZVZpZXcoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAg
ICAgICAgY2FzZSBDaGVja2JveFBhcnQ6CisgICAgICAgIGNhc2UgUmFkaW9QYXJ0OgorICAgICAg
ICBjYXNlIFB1c2hCdXR0b25QYXJ0OgorICAgICAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6Cisg
ICAgICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2UgQnV0dG9uUGFydDoK
KyAgICAgICAgICAgIG1fdGhlbWUtPnBhaW50KHBhcnQsIGNvbnRyb2xTdGF0ZXNGb3JSZW5kZXJl
cihvKSwgY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHQqPihwYWludEluZm8uY29udGV4dCksIHIs
IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSwgby0+dmlldygpLT5mcmFtZVZpZXcoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBi
cmVhazsKICAgICB9CiAjZW5kaWYKIApAQCAtMTY5LDEyICsyNDEsMTIgQEAgYm9vbCBSZW5kZXJU
aGVtZTo6cGFpbnQoUmVuZGVyT2JqZWN0KiBvLAogICAgICAgICAgICAgcmV0dXJuIHBhaW50Q2hl
Y2tib3gobywgcGFpbnRJbmZvLCByKTsKICAgICAgICAgY2FzZSBSYWRpb1BhcnQ6CiAgICAgICAg
ICAgICByZXR1cm4gcGFpbnRSYWRpbyhvLCBwYWludEluZm8sIHIpOwotI2VuZGlmCiAgICAgICAg
IGNhc2UgUHVzaEJ1dHRvblBhcnQ6CiAgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKICAg
ICAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBCdXR0b25QYXJ0Ogog
ICAgICAgICAgICAgcmV0dXJuIHBhaW50QnV0dG9uKG8sIHBhaW50SW5mbywgcik7CisjZW5kaWYK
ICAgICAgICAgY2FzZSBNZW51bGlzdFBhcnQ6CiAgICAgICAgICAgICByZXR1cm4gcGFpbnRNZW51
TGlzdChvLCBwYWludEluZm8sIHIpOwogICAgICAgICBjYXNlIFNsaWRlckhvcml6b250YWxQYXJ0
OgpAQCAtNDM1LDcgKzUwNyw3IEBAIENvbnRyb2xTdGF0ZXMgUmVuZGVyVGhlbWU6OmNvbnRyb2xT
dGF0ZXMKICAgICAgICAgcmVzdWx0IHw9IENoZWNrZWRTdGF0ZTsKICAgICBpZiAoaXNSZWFkT25s
eUNvbnRyb2wobykpCiAgICAgICAgIHJlc3VsdCB8PSBSZWFkT25seVN0YXRlOwotICAgIGlmIChp
c0RlZmF1bHQobykpCisgICAgaWYgKGlzRGVmYXVsdChvKSAmJiBvLT5kb2N1bWVudCgpLT5wYWdl
KCktPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpKQogICAgICAgICByZXN1bHQgfD0gRGVm
YXVsdFN0YXRlOwogICAgIGlmICghaXNBY3RpdmUobykpCiAgICAgICAgIHJlc3VsdCB8PSBXaW5k
b3dJbmFjdGl2ZVN0YXRlOwpAQCAtNTIyLDkgKzU5NCw2IEBAIGJvb2wgUmVuZGVyVGhlbWU6Omlz
RGVmYXVsdChjb25zdCBSZW5kZXIKICAgICBpZiAoIXNldHRpbmdzIHx8ICFzZXR0aW5ncy0+aW5B
cHBsaWNhdGlvbkNocm9tZU1vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAg
IGlmICghby0+c3R5bGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAogICAgIHJldHVy
biBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gRGVmYXVsdEJ1dHRvblBhcnQ7CiB9CiAKQEAg
LTU2Miw3ICs2MzEsNiBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RSYWRpb1N0eWxlKENTU1N0
CiAKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwogfQotI2VuZGlmCiAKIHZvaWQgUmVuZGVy
VGhlbWU6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CkBAIC01NzAsNiArNjM4LDcgQEAg
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0QnV0dG9uU3R5bGUoQ1NTUwogICAgIC8vIGF0IGFsbCBi
eSBkZWZhdWx0LiAgV2Ugd2lsbCBzdGlsbCBhbGxvdyB0aGUgdGhlbWUgYSBjcmFjayBhdCBzZXR0
aW5nIHVwIGEgZGVzaXJlZCB2ZXJ0aWNhbCBzaXplLgogICAgIHNldEJ1dHRvblNpemUoc3R5bGUp
OwogfQorI2VuZGlmCiAKIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFRleHRGaWVsZFN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUp
IGNvbnN0CiB7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkocmV2aXNpb24gMzc3NjEpCisrKyByZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDExICsxNDgsMTEgQEAgcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSYWRpb1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRp
byhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShS
ZW5kZXJTdHlsZSopIGNvbnN0IHsgfQotI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9
CiAgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqKSBjb25zdCB7IH0K
KyNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
LmgJKHJldmlzaW9uIDM3NzYxKQorKysgcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc2LDExICs3Niw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENvbG9yIHN5
c3RlbUNvbG9yKGludCBjc3NWYWx1ZUlkKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIC8vIE1l
dGhvZHMgZm9yIGVhY2ggYXBwZWFyYW5jZSB2YWx1ZS4KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgV2ViQ29yZTo6RWxl
bWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3Qq
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwotCiAgICAgdmly
dHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RU
ZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7CiAKQEAgLTE0MSwxMSArMTM2LDYgQEAgcHJpdmF0ZToKIAogICAgIC8vIEhlbHBlcnMg
Zm9yIGFkanVzdGluZyBhcHBlYXJhbmNlIGFuZCBmb3IgcGFpbnRpbmcKIAotICAgIHZvaWQgc2V0
QnV0dG9uUGFkZGluZ0Zyb21Db250cm9sU2l6ZShSZW5kZXJTdHlsZSosIE5TQ29udHJvbFNpemUp
IGNvbnN0OwotICAgIGNvbnN0IEludFNpemUqIGJ1dHRvblNpemVzKCkgY29uc3Q7Ci0gICAgY29u
c3QgaW50KiBidXR0b25NYXJnaW5zKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRCdXR0b25DZWxsU3Rh
dGUoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UmVjdCYpOwotCiAgICAgdm9pZCBzZXRQ
b3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7
CiAgICAgY29uc3QgSW50U2l6ZSogcG9wdXBCdXR0b25TaXplcygpIGNvbnN0OwogICAgIGNvbnN0
IGludCogcG9wdXBCdXR0b25NYXJnaW5zKCkgY29uc3Q7CkBAIC0xNTksNyArMTQ5LDYgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHNldFNlYXJjaENlbGxTdGF0ZShSZW5kZXJPYmplY3QqLCBjb25zdCBJ
bnRSZWN0Jik7CiAgICAgdm9pZCBzZXRTZWFyY2hGaWVsZFNpemUoUmVuZGVyU3R5bGUqKSBjb25z
dDsKICAgICAKLSAgICBOU0J1dHRvbkNlbGwqIGJ1dHRvbigpIGNvbnN0OwogICAgIE5TUG9wVXBC
dXR0b25DZWxsKiBwb3B1cEJ1dHRvbigpIGNvbnN0OwogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBz
ZWFyY2goKSBjb25zdDsKICAgICBOU01lbnUqIHNlYXJjaE1lbnVUZW1wbGF0ZSgpIGNvbnN0OwpA
QCAtMTY3LDcgKzE1Niw2IEBAIHByaXZhdGU6CiAgICAgTlNTbGlkZXJDZWxsKiBzbGlkZXJUaHVt
YlZlcnRpY2FsKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNC
dXR0b25DZWxsPiBtX2J1dHRvbjsKICAgICBtdXRhYmxlIFJldGFpblB0cjxOU1BvcFVwQnV0dG9u
Q2VsbD4gbV9wb3B1cEJ1dHRvbjsKICAgICBtdXRhYmxlIFJldGFpblB0cjxOU1NlYXJjaEZpZWxk
Q2VsbD4gbV9zZWFyY2g7CiAgICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNNZW51PiBtX3NlYXJjaE1l
bnVUZW1wbGF0ZTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDM3NzYxKQorKysgcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsNDAgKzQyNCwy
OCBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RSZXBhaW50UmVjdChjCiAgICAgQ29udHJv
bFBhcnQgcGFydCA9IG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKICAgICAKICNpZiBVU0UoTkVX
X1RIRU1FKQotICAgIGlmIChwYXJ0ID09IENoZWNrYm94UGFydCB8fCBwYXJ0ID09IFJhZGlvUGFy
dCkKLSAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjphZGp1c3RSZXBhaW50UmVjdChvLCByKTsK
LSNlbmRpZgotCi0gICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpOwotCi0gICAgc3dpdGNoIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkpIHsKKyAgICBzd2l0
Y2ggKHBhcnQpIHsKKyAgICAgICAgY2FzZSBDaGVja2JveFBhcnQ6CisgICAgICAgIGNhc2UgUmFk
aW9QYXJ0OgogICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgorICAgICAgICBjYXNlIFNxdWFy
ZUJ1dHRvblBhcnQ6CiAgICAgICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6Ci0gICAgICAgIGNh
c2UgQnV0dG9uUGFydDogewotICAgICAgICAgICAgLy8gU2luY2Ugd2UgcXVlcnkgdGhlIHByb3Rv
dHlwZSBjZWxsLCB3ZSBuZWVkIHRvIHVwZGF0ZSBpdHMgc3RhdGUgdG8gbWF0Y2guCi0gICAgICAg
ICAgICBzZXRCdXR0b25DZWxsU3RhdGUobywgcik7Ci0KLSAgICAgICAgICAgIC8vIFdlIGluZmxh
dGUgdGhlIHJlY3QgYXMgbmVlZGVkIHRvIGFjY291bnQgZm9yIHBhZGRpbmcgaW5jbHVkZWQgaW4g
dGhlIGNlbGwgdG8gYWNjb21tb2RhdGUgdGhlIGNoZWNrYm94Ci0gICAgICAgICAgICAvLyBzaGFk
b3ciIGFuZCB0aGUgY2hlY2suICBXZSBkb24ndCBjb25zaWRlciB0aGlzIHBhcnQgb2YgdGhlIGJv
dW5kcyBvZiB0aGUgY29udHJvbCBpbiBXZWJLaXQuCi0gICAgICAgICAgICBpZiAoW2J1dHRvbigp
IGJlemVsU3R5bGVdID09IE5TUm91bmRlZEJlemVsU3R5bGUpIHsKLSAgICAgICAgICAgICAgICBJ
bnRTaXplIHNpemUgPSBidXR0b25TaXplcygpW1tidXR0b24oKSBjb250cm9sU2l6ZV1dOwotICAg
ICAgICAgICAgICAgIHNpemUuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwot
ICAgICAgICAgICAgICAgIHNpemUuc2V0V2lkdGgoci53aWR0aCgpKTsKLSAgICAgICAgICAgICAg
ICByID0gaW5mbGF0ZVJlY3Qociwgc2l6ZSwgYnV0dG9uTWFyZ2lucygpLCB6b29tTGV2ZWwpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBNZW51bGlzdFBhcnQ6IHsKLSAgICAgICAgICAgIHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKG8s
IHIpOwotICAgICAgICAgICAgSW50U2l6ZSBzaXplID0gcG9wdXBCdXR0b25TaXplcygpW1twb3B1
cEJ1dHRvbigpIGNvbnRyb2xTaXplXV07Ci0gICAgICAgICAgICBzaXplLnNldEhlaWdodChzaXpl
LmhlaWdodCgpICogem9vbUxldmVsKTsKLSAgICAgICAgICAgIHNpemUuc2V0V2lkdGgoci53aWR0
aCgpKTsKLSAgICAgICAgICAgIHIgPSBpbmZsYXRlUmVjdChyLCBzaXplLCBwb3B1cEJ1dHRvbk1h
cmdpbnMoKSwgem9vbUxldmVsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAg
ICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICAgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YWRq
dXN0UmVwYWludFJlY3Qobywgcik7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVh
azsKICAgICB9CisjZW5kaWYKKworICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKTsKKworICAgIGlmIChwYXJ0ID09IE1lbnVsaXN0UGFydCkgeworICAgICAg
ICBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShvLCByKTsKKyAgICAgICAgSW50U2l6ZSBzaXplID0g
cG9wdXBCdXR0b25TaXplcygpW1twb3B1cEJ1dHRvbigpIGNvbnRyb2xTaXplXV07CisgICAgICAg
IHNpemUuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOworICAgICAgICBzaXpl
LnNldFdpZHRoKHIud2lkdGgoKSk7CisgICAgICAgIHIgPSBpbmZsYXRlUmVjdChyLCBzaXplLCBw
b3B1cEJ1dHRvbk1hcmdpbnMoKSwgem9vbUxldmVsKTsKKyAgICB9CiB9CiAKIEludFJlY3QgUmVu
ZGVyVGhlbWVNYWM6OmluZmxhdGVSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEludFNpemUm
IHNpemUsIGNvbnN0IGludCogbWFyZ2lucywgZmxvYXQgem9vbUxldmVsKSBjb25zdApAQCAtNjE3
LDE3NiArNjA1LDYgQEAgTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNpegog
ICAgIHJldHVybiBOU01pbmlDb250cm9sU2l6ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6
c2V0QnV0dG9uUGFkZGluZ0Zyb21Db250cm9sU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29u
dHJvbFNpemUgc2l6ZSkgY29uc3QKLXsKLSAgICAvLyBKdXN0IHVzZSA4cHguICBBcHBLaXQgd2Fu
dHMgdG8gdXNlIDExcHggZm9yIG1pbmkgYnV0dG9ucywgYnV0IHRoYXQgcGFkZGluZyBpcyBqdXN0
IHRvbyBsYXJnZQotICAgIC8vIGZvciByZWFsLXdvcmxkIFdlYiBzaXRlcyAoY3JlYXRpbmcgYSBo
dWdlIG5lY2Vzc2FyeSBtaW5pbXVtIHdpZHRoIGZvciBidXR0b25zIHdob3NlIHNwYWNlIGlzCi0g
ICAgLy8gYnkgZGVmaW5pdGlvbiBjb25zdHJhaW5lZCwgc2luY2Ugd2Ugc2VsZWN0IG1pbmkgb25s
eSBmb3Igc21hbGwgY3JhbXBlZCBlbnZpcm9ubWVudHMuCi0gICAgLy8gVGhpcyBhbHNvIGd1YXJh
bnRlZXMgdGhlIEhUTUw0IDxidXR0b24+IHdpbGwgbWF0Y2ggb3VyIHJlbmRlcmluZyBieSBkZWZh
dWx0LCBzaW5jZSB3ZSdyZSB1c2luZyBhIGNvbnNpc3RlbnQKLSAgICAvLyBwYWRkaW5nLgotICAg
IGNvbnN0IGludCBwYWRkaW5nID0gOCAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgc3R5
bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5z
ZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBh
ZGRpbmdUb3AoTGVuZ3RoKDAsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20o
TGVuZ3RoKDAsIEZpeGVkKSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdEJ1dHRv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgLy8gVGhlcmUgYXJlIHRocmVlIGFwcGVhcmFuY2UgY29u
c3RhbnRzIGZvciBidXR0b25zLgotICAgIC8vICgxKSBQdXNoLWJ1dHRvbiBpcyB0aGUgY29uc3Rh
bnQgZm9yIHRoZSBkZWZhdWx0IEFxdWEgc3lzdGVtIGJ1dHRvbi4gIFB1c2ggYnV0dG9ucyB3aWxs
IG5vdCBzY2FsZSB2ZXJ0aWNhbGx5IGFuZCB3aWxsIG5vdCBhbGxvdwotICAgIC8vIGN1c3RvbSBm
b250cyBvciBjb2xvcnMuICA8aW5wdXQ+cyB1c2UgdGhpcyBjb25zdGFudC4gIFRoaXMgYnV0dG9u
IHdpbGwgYWxsb3cgY3VzdG9tIGNvbG9ycyBhbmQgZm9udCB3ZWlnaHRzL3ZhcmlhbnRzIGJ1dCB3
b24ndAotICAgIC8vIHNjYWxlIHZlcnRpY2FsbHkuCi0gICAgLy8gKDIpIHNxdWFyZS1idXR0b24g
aXMgdGhlIGNvbnN0YW50IGZvciB0aGUgc3F1YXJlIGJ1dHRvbi4gIFRoaXMgYnV0dG9uIHdpbGwg
YWxsb3cgY3VzdG9tIGZvbnRzIGFuZCBjb2xvcnMgYW5kIHdpbGwgc2NhbGUgdmVydGljYWxseS4K
LSAgICAvLyAoMykgQnV0dG9uIGlzIHRoZSBjb25zdGFudCB0aGF0IG1lYW5zICJwaWNrIHRoZSBi
ZXN0IGJ1dHRvbiBhcyBhcHByb3ByaWF0ZS4iICA8YnV0dG9uPnMgdXNlIHRoaXMgY29uc3RhbnQu
ICBUaGlzIGJ1dHRvbiB3aWxsCi0gICAgLy8gYWxzbyBzY2FsZSB2ZXJ0aWNhbGx5IGFuZCBhbGxv
dyBjdXN0b20gZm9udHMgYW5kIGNvbG9ycy4gIEl0IHdpbGwgYXR0ZW1wdCB0byB1c2UgQXF1YSBp
ZiBwb3NzaWJsZSBhbmQgd2lsbCBtYWtlIHRoaXMgZGV0ZXJtaW5hdGlvbgotICAgIC8vIHNvbGVs
eSBvbiB0aGUgcmVjdGFuZ2xlIG9mIHRoZSBjb250cm9sLgotCi0gICAgLy8gRGV0ZXJtaW5lIG91
ciBjb250cm9sIHNpemUgYmFzZWQgb2ZmIG91ciBmb250LgotICAgIE5TQ29udHJvbFNpemUgY29u
dHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpOwotCi0gICAgaWYgKHN0eWxlLT5h
cHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQpIHsKLSAgICAgICAgLy8gRGl0Y2ggdGhlIGJv
cmRlci4KLSAgICAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0KLSAgICAgICAgLy8gSGVpZ2h0
IGlzIGxvY2tlZCB0byBhdXRvLgotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRv
KSk7Ci0KLSAgICAgICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgICAgICBz
dHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOwotCi0gICAgICAgIC8vIFNldCB0aGUgYnV0dG9uJ3Mg
dmVydGljYWwgc2l6ZS4KLSAgICAgICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7Ci0KLSAgICAgICAg
Ly8gQWRkIGluIHRoZSBwYWRkaW5nIHRoYXQgd2UnZCBsaWtlIHRvIHVzZS4KLSAgICAgICAgc2V0
QnV0dG9uUGFkZGluZ0Zyb21Db250cm9sU2l6ZShzdHlsZSwgY29udHJvbFNpemUpOwotCi0gICAg
ICAgIC8vIE91ciBmb250IGlzIGxvY2tlZCB0byB0aGUgYXBwcm9wcmlhdGUgc3lzdGVtIGZvbnQg
c2l6ZSBmb3IgdGhlIGNvbnRyb2wuICBUbyBjbGFyaWZ5LCB3ZSBmaXJzdCB1c2UgdGhlIENTUy1z
cGVjaWZpZWQgZm9udCB0byBmaWd1cmUgb3V0Ci0gICAgICAgIC8vIGEgcmVhc29uYWJsZSBjb250
cm9sIHNpemUsIGJ1dCBvbmNlIHRoYXQgY29udHJvbCBzaXplIGlzIGRldGVybWluZWQsIHdlIHRo
cm93IHRoYXQgZm9udCBhd2F5IGFuZCB1c2UgdGhlIGFwcHJvcHJpYXRlCi0gICAgICAgIC8vIHN5
c3RlbSBmb250IGZvciB0aGUgY29udHJvbCBzaXplIGluc3RlYWQuCi0gICAgICAgIHNldEZvbnRG
cm9tQ29udHJvbFNpemUoc2VsZWN0b3IsIHN0eWxlLCBjb250cm9sU2l6ZSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgLy8gU2V0IGEgbWluLWhlaWdodCBzbyB0aGF0IHdlIGNhbid0IGdldCBzbWFs
bGVyIHRoYW4gdGhlIG1pbmkgYnV0dG9uLgotICAgICAgICBzdHlsZS0+c2V0TWluSGVpZ2h0KExl
bmd0aChzdGF0aWNfY2FzdDxpbnQ+KDE1ICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSksIEZpeGVk
KSk7Ci0KLSAgICAgICAgLy8gUmVzZXQgdGhlIHRvcCBhbmQgYm90dG9tIGJvcmRlcnMuCi0gICAg
ICAgIHN0eWxlLT5yZXNldEJvcmRlclRvcCgpOwotICAgICAgICBzdHlsZS0+cmVzZXRCb3JkZXJC
b3R0b20oKTsKLSAgICB9Ci0KLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwotfQotCi1jb25z
dCBJbnRTaXplKiBSZW5kZXJUaGVtZU1hYzo6YnV0dG9uU2l6ZXMoKSBjb25zdAotewotICAgIHN0
YXRpYyBjb25zdCBJbnRTaXplIHNpemVzWzNdID0geyBJbnRTaXplKDAsIDIxKSwgSW50U2l6ZSgw
LCAxOCksIEludFNpemUoMCwgMTUpIH07Ci0gICAgcmV0dXJuIHNpemVzOwotfQotCi1jb25zdCBp
bnQqIFJlbmRlclRoZW1lTWFjOjpidXR0b25NYXJnaW5zKCkgY29uc3QKLXsKLSAgICBzdGF0aWMg
Y29uc3QgaW50IG1hcmdpbnNbM11bNF0gPQotICAgIHsKLSAgICAgICAgeyA0LCA2LCA3LCA2IH0s
Ci0gICAgICAgIHsgNCwgNSwgNiwgNSB9LAotICAgICAgICB7IDAsIDEsIDEsIDEgfSwKLSAgICB9
OwotICAgIHJldHVybiBtYXJnaW5zW1tidXR0b24oKSBjb250cm9sU2l6ZV1dOwotfQotCi12b2lk
IFJlbmRlclRoZW1lTWFjOjpzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
LXsKLSAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRo
ZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRy
aW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBVc2UgdGhlIGZvbnQgc2l6ZSB0byBkZXRlcm1pbmUgdGhlIGludHJpbnNp
YyB3aWR0aCBvZiB0aGUgY29udHJvbC4KLSAgICBzZXRTaXplRnJvbUZvbnQoc3R5bGUsIGJ1dHRv
blNpemVzKCkpOwotfQotCi12b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRCdXR0b25DZWxsU3RhdGUo
Y29uc3QgUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIE5TQnV0dG9u
Q2VsbCogYnV0dG9uID0gdGhpcy0+YnV0dG9uKCk7Ci0KLSAgICAvLyBTZXQgdGhlIGNvbnRyb2wg
c2l6ZSBiYXNlZCBvZmYgdGhlIHJlY3RhbmdsZSB3ZSdyZSBwYWludGluZyBpbnRvLgotICAgIGlm
IChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU3F1YXJlQnV0dG9uUGFydCB8fAotICAgICAg
ICByLmhlaWdodCgpID4gYnV0dG9uU2l6ZXMoKVtOU1JlZ3VsYXJDb250cm9sU2l6ZV0uaGVpZ2h0
KCkgKiBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpIHsKLSAgICAgICAgLy8gVXNlIHRoZSBz
cXVhcmUgYnV0dG9uCi0gICAgICAgIGlmIChbYnV0dG9uIGJlemVsU3R5bGVdICE9IE5TU2hhZG93
bGVzc1NxdWFyZUJlemVsU3R5bGUpCi0gICAgICAgICAgICBbYnV0dG9uIHNldEJlemVsU3R5bGU6
TlNTaGFkb3dsZXNzU3F1YXJlQmV6ZWxTdHlsZV07Ci0gICAgfSBlbHNlIGlmIChbYnV0dG9uIGJl
emVsU3R5bGVdICE9IE5TUm91bmRlZEJlemVsU3R5bGUpCi0gICAgICAgIFtidXR0b24gc2V0QmV6
ZWxTdHlsZTpOU1JvdW5kZWRCZXplbFN0eWxlXTsKLQotICAgIHNldENvbnRyb2xTaXplKGJ1dHRv
biwgYnV0dG9uU2l6ZXMoKSwgci5zaXplKCksIG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7
Ci0KLSAgICBOU1dpbmRvdyAqd2luZG93ID0gW28tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3Vt
ZW50VmlldygpIHdpbmRvd107Ci0gICAgQk9PTCBpc0RlZmF1bHRCdXR0b24gPSAoaXNEZWZhdWx0
KG8pICYmIFt3aW5kb3cgaXNLZXlXaW5kb3ddKTsKLSAgICBbYnV0dG9uIHNldEtleUVxdWl2YWxl
bnQ6KGlzRGVmYXVsdEJ1dHRvbiA/IEAiXHIiIDogQCIiKV07Ci0KLSAgICAvLyBVcGRhdGUgdGhl
IHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCi0gICAgdXBkYXRlQ2hlY2tlZFN0YXRlKGJ1
dHRvbiwgbyk7Ci0gICAgdXBkYXRlRW5hYmxlZFN0YXRlKGJ1dHRvbiwgbyk7Ci0gICAgdXBkYXRl
UHJlc3NlZFN0YXRlKGJ1dHRvbiwgbyk7Ci0gICAgdXBkYXRlRm9jdXNlZFN0YXRlKGJ1dHRvbiwg
byk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKLXsKLSAgICBOU0J1dHRvbkNlbGwqIGJ1dHRvbiA9IHRoaXMtPmJ1dHRvbigpOwotICAg
IExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRl
eHQpOwotCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG5lZWRlZCBmb3Ig
dGhlIGNvbnRyb2wgYW5kIHByZXBhcmUgdGhlIGNlbGwgZm9yIHBhaW50aW5nLgotICAgIHNldEJ1
dHRvbkNlbGxTdGF0ZShvLCByKTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0K
LSAgICAvLyBXZSBpbmZsYXRlIHRoZSByZWN0IGFzIG5lZWRlZCB0byBhY2NvdW50IGZvciBwYWRk
aW5nIGluY2x1ZGVkIGluIHRoZSBjZWxsIHRvIGFjY29tbW9kYXRlIHRoZSBidXR0b24KLSAgICAv
LyBzaGFkb3cuICBXZSBkb24ndCBjb25zaWRlciB0aGlzIHBhcnQgb2YgdGhlIGJvdW5kcyBvZiB0
aGUgY29udHJvbCBpbiBXZWJLaXQuCi0gICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpOwotICAgIEludFNpemUgc2l6ZSA9IGJ1dHRvblNpemVzKClbW2J1dHRv
biBjb250cm9sU2l6ZV1dOwotICAgIHNpemUuc2V0V2lkdGgoci53aWR0aCgpKTsKLSAgICBzaXpl
LnNldEhlaWdodChzaXplLmhlaWdodCgpICogem9vbUxldmVsKTsKLSAgICBJbnRSZWN0IGluZmxh
dGVkUmVjdCA9IHI7Ci0gICAgaWYgKFtidXR0b24gYmV6ZWxTdHlsZV0gPT0gTlNSb3VuZGVkQmV6
ZWxTdHlsZSkgewotICAgICAgICAvLyBDZW50ZXIgdGhlIGJ1dHRvbiB3aXRoaW4gdGhlIGF2YWls
YWJsZSBzcGFjZS4KLSAgICAgICAgaWYgKGluZmxhdGVkUmVjdC5oZWlnaHQoKSA+IHNpemUuaGVp
Z2h0KCkpIHsKLSAgICAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRZKGluZmxhdGVkUmVjdC55KCkg
KyAoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC0gc2l6ZS5oZWlnaHQoKSkgLyAyKTsKLSAgICAgICAg
ICAgIGluZmxhdGVkUmVjdC5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBOb3cgaW5mbGF0ZSBpdCB0byBhY2NvdW50IGZvciB0aGUgc2hhZG93LgotICAg
ICAgICBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlUmVjdChpbmZsYXRlZFJlY3QsIHNpemUsIGJ1dHRv
bk1hcmdpbnMoKSwgem9vbUxldmVsKTsKLQotICAgICAgICBpZiAoem9vbUxldmVsICE9IDEuMGYp
IHsKLSAgICAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgo
KSAvIHpvb21MZXZlbCk7Ci0gICAgICAgICAgICBpbmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGluZmxh
dGVkUmVjdC5oZWlnaHQoKSAvIHpvb21MZXZlbCk7Ci0gICAgICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+dHJhbnNsYXRlKGluZmxhdGVkUmVjdC54KCksIGluZmxhdGVkUmVjdC55KCkpOwotICAg
ICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpv
b21MZXZlbCkpOwotICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtaW5m
bGF0ZWRSZWN0LngoKSwgLWluZmxhdGVkUmVjdC55KCkpOwotICAgICAgICB9Ci0gICAgfSAKLQot
ICAgIE5TVmlldyAqdmlldyA9IG8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3VtZW50Vmlldygp
OwotICAgIE5TV2luZG93ICp3aW5kb3cgPSBbdmlldyB3aW5kb3ddOwotICAgIE5TQnV0dG9uQ2Vs
bCAqcHJldmlvdXNEZWZhdWx0QnV0dG9uQ2VsbCA9IFt3aW5kb3cgZGVmYXVsdEJ1dHRvbkNlbGxd
OwotCi0gICAgaWYgKGlzRGVmYXVsdChvKSAmJiBbd2luZG93IGlzS2V5V2luZG93XSkgewotICAg
ICAgICBbd2luZG93IHNldERlZmF1bHRCdXR0b25DZWxsOmJ1dHRvbl07Ci0gICAgICAgIHdrQWR2
YW5jZURlZmF1bHRCdXR0b25QdWxzZUFuaW1hdGlvbihidXR0b24pOwotICAgIH0gZWxzZSBpZiAo
W3ByZXZpb3VzRGVmYXVsdEJ1dHRvbkNlbGwgaXNFcXVhbDpidXR0b25dKQotICAgICAgICBbd2lu
ZG93IHNldERlZmF1bHRCdXR0b25DZWxsOm5pbF07Ci0KLSAgICBbYnV0dG9uIGRyYXdXaXRoRnJh
bWU6TlNSZWN0KGluZmxhdGVkUmVjdCkgaW5WaWV3OnZpZXddOwotICAgIFtidXR0b24gc2V0Q29u
dHJvbFZpZXc6bmlsXTsKLQotICAgIGlmICghW3ByZXZpb3VzRGVmYXVsdEJ1dHRvbkNlbGwgaXNF
cXVhbDpidXR0b25dKQotICAgICAgICBbd2luZG93IHNldERlZmF1bHRCdXR0b25DZWxsOnByZXZp
b3VzRGVmYXVsdEJ1dHRvbkNlbGxdOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUo
KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRU
ZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIExvY2FsQ3VycmVudEdyYXBoaWNz
Q29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwpAQCAtMTA2NSw2ICs4ODMs
MTIgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgIHJldHVy
biBmYWxzZTsKIH0KIAorc3RhdGljIGNvbnN0IEludFNpemUqIG1lbnVMaXN0QnV0dG9uU2l6ZXMo
KQoreworICAgIHN0YXRpYyBjb25zdCBJbnRTaXplIHNpemVzWzNdID0geyBJbnRTaXplKDAsIDIx
KSwgSW50U2l6ZSgwLCAxOCksIEludFNpemUoMCwgMTUpIH07CisgICAgcmV0dXJuIHNpemVzOwor
fQorCiB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7
CiAgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHls
ZSk7CkBAIC0xMDgzLDcgKzkwNyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVM
aXN0U3R5bGUKICAgICBzdHlsZS0+c2V0Q29sb3IoZS0+aXNFbmFibGVkKCkgPyBzdGF0aWNfY2Fz
dDxSR0JBMzI+KENvbG9yOjpibGFjaykgOiBDb2xvcjo6ZGFya0dyYXkpOwogCiAgICAgLy8gU2V0
IHRoZSBidXR0b24ncyB2ZXJ0aWNhbCBzaXplLgotICAgIHNldEJ1dHRvblNpemUoc3R5bGUpOwor
ICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwgbWVudUxpc3RCdXR0b25TaXplcygpKTsKIAogICAg
IC8vIE91ciBmb250IGlzIGxvY2tlZCB0byB0aGUgYXBwcm9wcmlhdGUgc3lzdGVtIGZvbnQgc2l6
ZSBmb3IgdGhlIGNvbnRyb2wuICBUbyBjbGFyaWZ5LCB3ZSBmaXJzdCB1c2UgdGhlIENTUy1zcGVj
aWZpZWQgZm9udCB0byBmaWd1cmUgb3V0CiAgICAgLy8gYSByZWFzb25hYmxlIGNvbnRyb2wgc2l6
ZSwgYnV0IG9uY2UgdGhhdCBjb250cm9sIHNpemUgaXMgZGV0ZXJtaW5lZCwgd2UgdGhyb3cgdGhh
dCBmb250IGF3YXkgYW5kIHVzZSB0aGUgYXBwcm9wcmlhdGUKQEAgLTE2MzAsMTcgKzE0NTQsNiBA
QCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhU2xpZGVyVGh1CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1OU0J1dHRvbkNlbGwqIFJlbmRlclRoZW1lTWFjOjpidXR0b24oKSBjb25zdAot
ewotICAgIGlmICghbV9idXR0b24pIHsKLSAgICAgICAgbV9idXR0b24uYWRvcHROUyhbW05TQnV0
dG9uQ2VsbCBhbGxvY10gaW5pdF0pOwotICAgICAgICBbbV9idXR0b24uZ2V0KCkgc2V0VGl0bGU6
bmlsXTsKLSAgICAgICAgW21fYnV0dG9uLmdldCgpIHNldEJ1dHRvblR5cGU6TlNNb21lbnRhcnlQ
dXNoSW5CdXR0b25dOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbV9idXR0b24uZ2V0KCk7Ci19
Ci0KIE5TUG9wVXBCdXR0b25DZWxsKiBSZW5kZXJUaGVtZU1hYzo6cG9wdXBCdXR0b24oKSBjb25z
dAogewogICAgIGlmICghbV9wb3B1cEJ1dHRvbikgewpJbmRleDogcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJ
KHJldmlzaW9uIDM3NzYxKQorKysgcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU0Myw2ICs1NDMsNyBAQCBwdWJsaWM6CiAgICAgTGVuZ3RoIG1hcmdpbkxl
ZnQoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+bWFyZ2luLmxlZnQoKTsgfQogICAgIExlbmd0
aCBtYXJnaW5SaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5tYXJnaW4ucmlnaHQoKTsg
fQogCisgICAgTGVuZ3RoQm94IHBhZGRpbmdCb3goKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+
cGFkZGluZzsgfQogICAgIExlbmd0aCBwYWRkaW5nVG9wKCkgY29uc3QgeyByZXR1cm4gc3Vycm91
bmQtPnBhZGRpbmcudG9wKCk7IH0KICAgICBMZW5ndGggcGFkZGluZ0JvdHRvbSgpIGNvbnN0IHsg
cmV0dXJuIHN1cnJvdW5kLT5wYWRkaW5nLmJvdHRvbSgpOyB9CiAgICAgTGVuZ3RoIHBhZGRpbmdM
ZWZ0KCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPnBhZGRpbmcubGVmdCgpOyB9CkBAIC04Mjcs
NiArODI4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TWFyZ2luUmlnaHQoTGVuZ3RoIHYpIHsg
U0VUX1ZBUihzdXJyb3VuZCwgbWFyZ2luLm1fcmlnaHQsIHYpIH0KIAogICAgIHZvaWQgcmVzZXRQ
YWRkaW5nKCkgeyBTRVRfVkFSKHN1cnJvdW5kLCBwYWRkaW5nLCBMZW5ndGhCb3goQXV0bykpIH0K
KyAgICB2b2lkIHNldFBhZGRpbmdCb3goY29uc3QgTGVuZ3RoQm94JiBiKSB7IFNFVF9WQVIoc3Vy
cm91bmQsIHBhZGRpbmcsIGIpIH0KICAgICB2b2lkIHNldFBhZGRpbmdUb3AoTGVuZ3RoIHYpIHsg
U0VUX1ZBUihzdXJyb3VuZCwgcGFkZGluZy5tX3RvcCwgdikgfQogICAgIHZvaWQgc2V0UGFkZGlu
Z0JvdHRvbShMZW5ndGggdikgeyBTRVRfVkFSKHN1cnJvdW5kLCBwYWRkaW5nLm1fYm90dG9tLCB2
KSB9CiAgICAgdm9pZCBzZXRQYWRkaW5nTGVmdChMZW5ndGggdikgeyBTRVRfVkFSKHN1cnJvdW5k
LCBwYWRkaW5nLm1fbGVmdCwgdikgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24571</attachid>
            <date>2008-10-22 14:09:40 -0700</date>
            <delta_ts>2008-10-22 14:38:34 -0700</delta_ts>
            <desc>Patch #2</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>42869</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM3Nzg2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMDgtMTAt
MjIgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc3NQorCisgICAgICAgIENvbnZlcnQgYnV0
dG9ucyBvdmVyIHRvIHVzZSB0aGUgbmV3IFRoZW1lIEFQSSBvbiBPUyBYLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoQm94
Lmg6CisgICAgICAgIChXZWJDb3JlOjpMZW5ndGhCb3g6Okxlbmd0aEJveCk6CisgICAgICAgICog
cGxhdGZvcm0vVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OmNvbnRyb2xCb3Jk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OmNvbnRyb2xQYWRkaW5nKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9UaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OmNvbnRyb2xGb250
KToKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lOjpjb250cm9sU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUaGVtZTo6bWluQ29udHJvbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OmNv
bnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UaGVt
ZU1hYy5oOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVNYWM6OmNvbnRyb2xSZXF1aXJlc1ByZVdo
aXRlU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UaGVtZU1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OmNoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpyYWRpb1NpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6YnV0dG9uU2l6ZXMpOgorICAgICAgICAoV2ViQ29yZTo6YnV0dG9u
TWFyZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpidXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6
cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVNYWM6OmNvbnRyb2xGb250KToK
KyAgICAgICAgKFdlYkNvcmU6OlRoZW1lTWFjOjpjb250cm9sU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUaGVtZU1hYzo6bWluQ29udHJvbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVN
YWM6OmNvbnRyb2xCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVNYWM6OmNvbnRyb2xQ
YWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lTWFjOjppbmZsYXRlQ29udHJvbFBhaW50
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZU1hYzo6cGFpbnQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6
YWRqdXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpjb250cm9sU3RhdGVzRm9yUmVuZGVyZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzRGVmYXVsdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0UmFkaW9TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2V0UmFkaW9T
aXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0UmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6bWVudUxpc3RCdXR0
b25TaXplcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxp
c3RTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6cGFkZGluZ0JveCk6CisgICAgICAgIChXZWJD
b3JlOjpJbmhlcml0ZWRGbGFnczo6c2V0UGFkZGluZ0JveCk6CisKIDIwMDgtMTAtMjIgIENocmlz
IE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUg
SHlhdHQKSW5kZXg6IHBsYXRmb3JtL0xlbmd0aEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3Jt
L0xlbmd0aEJveC5oCShyZXZpc2lvbiAzNzc2MSkKKysrIHBsYXRmb3JtL0xlbmd0aEJveC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCwyMiBAQCBzdHJ1Y3QgTGVuZ3RoQm94IHsKICAgICB7
CiAgICAgfQogCisgICAgTGVuZ3RoQm94KGludCB2KQorICAgICAgICA6IG1fbGVmdChMZW5ndGgo
diwgRml4ZWQpKQorICAgICAgICAsIG1fcmlnaHQoTGVuZ3RoKHYsIEZpeGVkKSkKKyAgICAgICAg
LCBtX3RvcChMZW5ndGgodiwgRml4ZWQpKQorICAgICAgICAsIG1fYm90dG9tKExlbmd0aCh2LCBG
aXhlZCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBMZW5ndGhCb3goaW50IHQsIGludCByLCBp
bnQgYiwgaW50IGwpCisgICAgICAgIDogbV9sZWZ0KExlbmd0aChsLCBGaXhlZCkpCisgICAgICAg
ICwgbV9yaWdodChMZW5ndGgociwgRml4ZWQpKQorICAgICAgICAsIG1fdG9wKExlbmd0aCh0LCBG
aXhlZCkpCisgICAgICAgICwgbV9ib3R0b20oTGVuZ3RoKGIsIEZpeGVkKSkKKyAgICB7CisgICAg
fQorCiAgICAgTGVuZ3RoIGxlZnQoKSBjb25zdCB7IHJldHVybiBtX2xlZnQ7IH0KICAgICBMZW5n
dGggcmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0OyB9CiAgICAgTGVuZ3RoIHRvcCgpIGNv
bnN0IHsgcmV0dXJuIG1fdG9wOyB9CkluZGV4OiBwbGF0Zm9ybS9UaGVtZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcGxhdGZvcm0vVGhlbWUuY3BwCShyZXZpc2lvbiAzNzc2MSkKKysrIHBsYXRmb3JtL1Ro
ZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWJvb2wgVGhlbWU6OmNvbnRyb2xTdXBwb3J0c0JvcmRlcihDb250cm9sUGFydCBw
YXJ0KSBjb25zdAorTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBh
cnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZh
Y3RvcikgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBQdXNoQnV0
dG9uUGFydDoKQEAgLTM2LDIyICszNiwyMiBAQCBib29sIFRoZW1lOjpjb250cm9sU3VwcG9ydHNC
b3JkZXIoQ29udHJvCiAgICAgICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgogICAgICAgICBjYXNl
IENoZWNrYm94UGFydDoKICAgICAgICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gTGVuZ3RoQm94KDApOwogICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gem9vbWVk
Qm94OwogICAgIH0KIH0KIAotYm9vbCBUaGVtZTo6Y29udHJvbFN1cHBvcnRzUGFkZGluZyhDb250
cm9sUGFydCBwYXJ0KSBjb25zdAorTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sUGFkZGluZyhDb250
cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZs
b2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNh
c2UgTWVudWxpc3RQYXJ0OgogICAgICAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKICAgICAg
ICAgY2FzZSBDaGVja2JveFBhcnQ6CiAgICAgICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIExlbmd0aEJveCgwKTsKICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJu
IHpvb21lZEJveDsKICAgICB9CiB9CiAKSW5kZXg6IHBsYXRmb3JtL1RoZW1lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcGxhdGZvcm0vVGhlbWUuaAkocmV2aXNpb24gMzc3NjEpCisrKyBwbGF0Zm9ybS9UaGVt
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIK
ICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkxlbmd0
aEJveC5oIgogI2luY2x1ZGUgIkxlbmd0aFNpemUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgIlRoZW1lVHlwZXMuaCIKQEAgLTc5LDExICs4MCwyMiBAQCBwdWJsaWM6
CiAKICAgICAvLyBNZXRob2RzIHVzZWQgdG8gYWRqdXN0IHRoZSBSZW5kZXJTdHlsZXMgb2YgY29u
dHJvbHMuCiAgICAgCisgICAgLy8gVGhlIGZvbnQgZGVzY3JpcHRpb24gcmVzdWx0IHNob3VsZCBo
YXZlIGEgem9vbWVkIGZvbnQgc2l6ZS4KKyAgICB2aXJ0dWFsIEZvbnREZXNjcmlwdGlvbiBjb250
cm9sRm9udChDb250cm9sUGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgem9vbUZhY3Rvcikg
Y29uc3QgeyByZXR1cm4gZm9udC5mb250RGVzY3JpcHRpb24oKTsgfQorICAgIAogICAgIC8vIFRo
ZSBzaXplIGhlcmUgaXMgaW4gem9vbWVkIGNvb3JkaW5hdGVzIGFscmVhZHkuICBJZiBhIG5ldyBz
aXplIGlzIHJldHVybmVkLCBpdCBhbHNvIG5lZWRzIHRvIGJlIGluIHpvb21lZCBjb29yZGluYXRl
cy4KICAgICB2aXJ0dWFsIExlbmd0aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0
IEZvbnQmLCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKSBj
b25zdCB7IHJldHVybiB6b29tZWRTaXplOyB9Ci0gICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBw
b3J0c0JvcmRlcihDb250cm9sUGFydCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGNvbnRyb2xT
dXBwb3J0c1BhZGRpbmcoQ29udHJvbFBhcnQpIGNvbnN0OwogICAgIAorICAgIC8vIFJldHVybnMg
dGhlIG1pbmltdW0gc2l6ZSBmb3IgYSBjb250cm9sIGluIHpvb21lZCBjb29yZGluYXRlcy4gIAor
ICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5Db250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3Qg
Rm9udCYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0IHsgcmV0dXJuIExlbmd0aFNpemUoTGVuZ3Ro
KDAsIEZpeGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSk7IH0KKyAgICAKKyAgICAvLyBBbGxvd3MgdGhl
IHRoZW1lIHRvIG1vZGlmeSB0aGUgZXhpc3RpbmcgcGFkZGluZy9ib3JkZXIuCisgICAgdmlydHVh
bCBMZW5ndGhCb3ggY29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25z
dCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmly
dHVhbCBMZW5ndGhCb3ggY29udHJvbEJvcmRlcihDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGNv
bnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICAK
KyAgICAvLyBXaGV0aGVyIG9yIG5vdCB3aGl0ZXNwYWNlOiBwcmUgc2hvdWxkIGJlIGZvcmNlZCBv
biBhbHdheXMuCisgICAgdmlydHVhbCBib29sIGNvbnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2Uo
Q29udHJvbFBhcnQpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKICAgICAvLyBNZXRob2QgZm9y
IHBhaW50aW5nIGEgY29udHJvbC4gIFRoZSByZWN0IGlzIGluIHpvb21lZCBjb29yZGluYXRlcy4K
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMsIEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3Is
IFNjcm9sbFZpZXcqKSBjb25zdCB7IH07CiAKSW5kZXg6IHBsYXRmb3JtL21hYy9UaGVtZU1hYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL21hYy9UaGVtZU1hYy5oCShyZXZpc2lvbiAzNzc2MSkK
KysrIHBsYXRmb3JtL21hYy9UaGVtZU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICszNywx
NiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbkFkanVz
dG1lbnQoQ29udHJvbFBhcnQpIGNvbnN0OwogCi0gICAgdmlydHVhbCBMZW5ndGhTaXplIGNvbnRy
b2xTaXplKENvbnRyb2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoU2l6ZSYsIGZsb2F0
IHpvb21GYWN0b3IpIGNvbnN0OworICAgIHZpcnR1YWwgRm9udERlc2NyaXB0aW9uIGNvbnRyb2xG
b250KENvbnRyb2xQYXJ0LCBjb25zdCBGb250JiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CiAg
ICAgCisgICAgdmlydHVhbCBMZW5ndGhTaXplIGNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25z
dCBGb250JiwgY29uc3QgTGVuZ3RoU2l6ZSYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAg
IHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5Db250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9u
dCYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworCisgICAgdmlydHVhbCBMZW5ndGhCb3ggY29u
dHJvbFBhZGRpbmcoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpv
b21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhCb3gg
Y29udHJvbEJvcmRlcihDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYg
em9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBj
b250cm9sUmVxdWlyZXNQcmVXaGl0ZVNwYWNlKENvbnRyb2xQYXJ0IHBhcnQpIGNvbnN0IHsgcmV0
dXJuIHBhcnQgPT0gUHVzaEJ1dHRvblBhcnQ7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBwYWludChD
b250cm9sUGFydCwgQ29udHJvbFN0YXRlcywgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVj
dCYsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqKSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgaW5mbGF0ZUNvbnRyb2xQYWludFJlY3QoQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMsIElu
dFJlY3QmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKIH07CkluZGV4OiBwbGF0Zm9ybS9tYWMv
VGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCShyZXZp
c2lvbiAzNzc2MSkKKysrIHBsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTAgKzI3LDE0IEBACiAjaW1wb3J0ICJUaGVtZU1hYy5oIgogCiAjaW1wb3J0ICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIkxvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIgog
I2ltcG9ydCAiU2Nyb2xsVmlldy5oIgorI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5o
IgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCisvLyBGSVhNRTogRGVmYXVsdCBidXR0b25zIHJl
YWxseSBzaG91bGQgYmUgbW9yZSBsaWtlIHB1c2ggYnV0dG9ucyBhbmQgbm90IGxpa2UgYnV0dG9u
cy4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBlbnVtIHsKQEAgLTE1Nyw3ICsxNjEsNyBAQCBz
dGF0aWMgY29uc3QgaW50KiBjaGVja2JveE1hcmdpbnMoTlNDb250CiAgICAgcmV0dXJuIG1hcmdp
bnNbY29udHJvbFNpemVdOwogfQogCi1zdGF0aWMgTGVuZ3RoU2l6ZSBjaGVja2JveFNpemUoQ29u
dHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVk
U2l6ZSwgZmxvYXQgem9vbUZhY3RvcikKK3N0YXRpYyBMZW5ndGhTaXplIGNoZWNrYm94U2l6ZShj
b25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29t
RmFjdG9yKQogewogICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNp
ZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCiAgICAgaWYgKCF6b29tZWRTaXplLndp
ZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhem9vbWVkU2l6ZS5oZWlnaHQoKS5pc0ludHJp
bnNpY09yQXV0bygpKQpAQCAtMjM0LDcgKzIzOCw3IEBAIHN0YXRpYyBjb25zdCBpbnQqIHJhZGlv
TWFyZ2lucyhOU0NvbnRyb2wKICAgICByZXR1cm4gbWFyZ2luc1tjb250cm9sU2l6ZV07CiB9CiAK
LXN0YXRpYyBMZW5ndGhTaXplIHJhZGlvU2l6ZShDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250
JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQor
c3RhdGljIExlbmd0aFNpemUgcmFkaW9TaXplKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0
aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IpCiB7CiAgICAgLy8gSWYgdGhlIHdp
ZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0
byBkby4KICAgICBpZiAoIXpvb21lZFNpemUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYm
ICF6b29tZWRTaXplLmhlaWdodCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCkBAIC0yOTAsNiArMjk0
LDEwOCBAQCBzdGF0aWMgdm9pZCBwYWludFJhZGlvKENvbnRyb2xTdGF0ZXMgc3RhCiAgICAgY29u
dGV4dC0+cmVzdG9yZSgpOwogfQogCisvLyBCdXR0b25zCisKKy8vIEJ1dHRvbnMgcmVhbGx5IG9u
bHkgY29uc3RyYWluIGhlaWdodC4gIFRoZXkgcmVzcGVjdCB3aWR0aC4KK3N0YXRpYyBjb25zdCBJ
bnRTaXplKiBidXR0b25TaXplcygpCit7CisgICAgc3RhdGljIGNvbnN0IEludFNpemUgc2l6ZXNb
M10gPSB7IEludFNpemUoMCwgMjEpLCBJbnRTaXplKDAsIDE4KSwgSW50U2l6ZSgwLCAxNSkgfTsK
KyAgICByZXR1cm4gc2l6ZXM7Cit9CisKK3N0YXRpYyBjb25zdCBpbnQqIGJ1dHRvbk1hcmdpbnMo
TlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IG1hcmdp
bnNbM11bNF0gPQorICAgIHsKKyAgICAgICAgeyA0LCA2LCA3LCA2IH0sCisgICAgICAgIHsgNCwg
NSwgNiwgNSB9LAorICAgICAgICB7IDAsIDEsIDEsIDEgfSwKKyAgICB9OworICAgIHJldHVybiBt
YXJnaW5zW2NvbnRyb2xTaXplXTsKK30KKworc3RhdGljIE5TQnV0dG9uQ2VsbCogYnV0dG9uKENv
bnRyb2xQYXJ0IHBhcnQsIENvbnRyb2xTdGF0ZXMgc3RhdGVzLCBjb25zdCBJbnRSZWN0JiB6b29t
ZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yKQoreworICAgIHN0YXRpYyBOU0J1dHRvbkNlbGwgKmJ1
dHRvbkNlbGw7CisgICAgc3RhdGljIGJvb2wgZGVmYXVsdEJ1dHRvbjsKKyAgICBpZiAoIWJ1dHRv
bkNlbGwpIHsKKyAgICAgICAgYnV0dG9uQ2VsbCA9IFtbTlNCdXR0b25DZWxsIGFsbG9jXSBpbml0
XTsKKyAgICAgICAgW2J1dHRvbkNlbGwgc2V0VGl0bGU6bmlsXTsKKyAgICAgICAgW2J1dHRvbkNl
bGwgc2V0QnV0dG9uVHlwZTpOU01vbWVudGFyeVB1c2hJbkJ1dHRvbl07CisgICAgfQorCisgICAg
Ly8gU2V0IHRoZSBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSByZWN0YW5nbGUgd2UncmUgcGFp
bnRpbmcgaW50by4KKyAgICBpZiAocGFydCA9PSBTcXVhcmVCdXR0b25QYXJ0IHx8IHpvb21lZFJl
Y3QuaGVpZ2h0KCkgPiBidXR0b25TaXplcygpW05TUmVndWxhckNvbnRyb2xTaXplXS5oZWlnaHQo
KSAqIHpvb21GYWN0b3IpIHsKKyAgICAgICAgLy8gVXNlIHRoZSBzcXVhcmUgYnV0dG9uCisgICAg
ICAgIGlmIChbYnV0dG9uQ2VsbCBiZXplbFN0eWxlXSAhPSBOU1NoYWRvd2xlc3NTcXVhcmVCZXpl
bFN0eWxlKQorICAgICAgICAgICAgW2J1dHRvbkNlbGwgc2V0QmV6ZWxTdHlsZTpOU1NoYWRvd2xl
c3NTcXVhcmVCZXplbFN0eWxlXTsKKyAgICB9IGVsc2UgaWYgKFtidXR0b25DZWxsIGJlemVsU3R5
bGVdICE9IE5TUm91bmRlZEJlemVsU3R5bGUpCisgICAgICAgIFtidXR0b25DZWxsIHNldEJlemVs
U3R5bGU6TlNSb3VuZGVkQmV6ZWxTdHlsZV07CisKKyAgICBzZXRDb250cm9sU2l6ZShidXR0b25D
ZWxsLCBidXR0b25TaXplcygpLCB6b29tZWRSZWN0LnNpemUoKSwgem9vbUZhY3Rvcik7CisKKyAg
ICBpZiAoZGVmYXVsdEJ1dHRvbiAhPSAoc3RhdGVzICYgRGVmYXVsdFN0YXRlKSkgeworICAgICAg
ICBkZWZhdWx0QnV0dG9uID0gIWRlZmF1bHRCdXR0b247CisgICAgICAgIFtidXR0b25DZWxsIHNl
dEtleUVxdWl2YWxlbnQ6KGRlZmF1bHRCdXR0b24gPyBAIlxyIiA6IEAiIildOworICAgIH0KKwor
ICAgIC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KKyAgICB1cGRh
dGVTdGF0ZXMoYnV0dG9uQ2VsbCwgc3RhdGVzKTsKKyAgICAKKyAgICByZXR1cm4gYnV0dG9uQ2Vs
bDsKK30KKworc3RhdGljIHZvaWQgcGFpbnRCdXR0b24oQ29udHJvbFBhcnQgcGFydCwgQ29udHJv
bFN0YXRlcyBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYg
em9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldykKK3sK
KyAgICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgbmVlZGVkIGZvciB0aGUgY29u
dHJvbCBhbmQgcHJlcGFyZSB0aGUgY2VsbCBmb3IgcGFpbnRpbmcuCisgICAgTlNCdXR0b25DZWxs
ICpidXR0b25DZWxsID0gYnV0dG9uKHBhcnQsIHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3Rv
cik7CisgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChjb250ZXh0
KTsKKworICAgIGNvbnRleHQtPnNhdmUoKTsKKworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNp
emUgPSBbYnV0dG9uQ2VsbCBjb250cm9sU2l6ZV07CisgICAgSW50U2l6ZSB6b29tZWRTaXplID0g
YnV0dG9uU2l6ZXMoKVtjb250cm9sU2l6ZV07CisgICAgem9vbWVkU2l6ZS5zZXRXaWR0aCh6b29t
ZWRSZWN0LndpZHRoKCkpOyAvLyBCdXR0b25zIGRvbid0IGV2ZXIgY29uc3RyYWluIHdpZHRoLCBz
byB0aGUgem9vbWVkIHdpZHRoIGNhbiBqdXN0IGJlIGhvbm9yZWQuCisgICAgem9vbWVkU2l6ZS5z
ZXRIZWlnaHQoem9vbWVkU2l6ZS5oZWlnaHQoKSAqIHpvb21GYWN0b3IpOworICAgIEludFJlY3Qg
aW5mbGF0ZWRSZWN0ID0gem9vbWVkUmVjdDsKKyAgICBpZiAoW2J1dHRvbkNlbGwgYmV6ZWxTdHls
ZV0gPT0gTlNSb3VuZGVkQmV6ZWxTdHlsZSkgeworICAgICAgICAvLyBDZW50ZXIgdGhlIGJ1dHRv
biB3aXRoaW4gdGhlIGF2YWlsYWJsZSBzcGFjZS4KKyAgICAgICAgaWYgKGluZmxhdGVkUmVjdC5o
ZWlnaHQoKSA+IHpvb21lZFNpemUuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIGluZmxhdGVkUmVj
dC5zZXRZKGluZmxhdGVkUmVjdC55KCkgKyAoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC0gem9vbWVk
U2l6ZS5oZWlnaHQoKSkgLyAyKTsKKyAgICAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWlnaHQo
em9vbWVkU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3cgaW5mbGF0
ZSBpdCB0byBhY2NvdW50IGZvciB0aGUgc2hhZG93LgorICAgICAgICBpbmZsYXRlZFJlY3QgPSBp
bmZsYXRlUmVjdChpbmZsYXRlZFJlY3QsIHpvb21lZFNpemUsIGJ1dHRvbk1hcmdpbnMoY29udHJv
bFNpemUpLCB6b29tRmFjdG9yKTsKKworICAgICAgICBpZiAoem9vbUZhY3RvciAhPSAxLjBmKSB7
CisgICAgICAgICAgICBpbmZsYXRlZFJlY3Quc2V0V2lkdGgoaW5mbGF0ZWRSZWN0LndpZHRoKCkg
LyB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWlnaHQoaW5mbGF0
ZWRSZWN0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7CisgICAgICAgICAgICBjb250ZXh0LT50cmFu
c2xhdGUoaW5mbGF0ZWRSZWN0LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSk7CisgICAgICAgICAgICBj
b250ZXh0LT5zY2FsZShGbG9hdFNpemUoem9vbUZhY3Rvciwgem9vbUZhY3RvcikpOworICAgICAg
ICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5mbGF0ZWRSZWN0
LnkoKSk7CisgICAgICAgIH0KKyAgICB9IAorCisgICAgTlNWaWV3ICp2aWV3ID0gc2Nyb2xsVmll
dy0+ZG9jdW1lbnRWaWV3KCk7CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFt2aWV3IHdpbmRvd107
CisgICAgTlNCdXR0b25DZWxsICpwcmV2aW91c0RlZmF1bHRCdXR0b25DZWxsID0gW3dpbmRvdyBk
ZWZhdWx0QnV0dG9uQ2VsbF07CisKKyAgICBpZiAoKHN0YXRlcyAmIERlZmF1bHRTdGF0ZSkgJiYg
W3dpbmRvdyBpc0tleVdpbmRvd10pIHsKKyAgICAgICAgW3dpbmRvdyBzZXREZWZhdWx0QnV0dG9u
Q2VsbDpidXR0b25DZWxsXTsKKyAgICAgICAgd2tBZHZhbmNlRGVmYXVsdEJ1dHRvblB1bHNlQW5p
bWF0aW9uKGJ1dHRvbkNlbGwpOworICAgIH0gZWxzZSBpZiAoW3ByZXZpb3VzRGVmYXVsdEJ1dHRv
bkNlbGwgaXNFcXVhbDpidXR0b25DZWxsXSkKKyAgICAgICAgW3dpbmRvdyBzZXREZWZhdWx0QnV0
dG9uQ2VsbDpuaWxdOworCisgICAgW2J1dHRvbkNlbGwgZHJhd1dpdGhGcmFtZTpOU1JlY3QoaW5m
bGF0ZWRSZWN0KSBpblZpZXc6dmlld107CisgICAgW2J1dHRvbkNlbGwgc2V0Q29udHJvbFZpZXc6
bmlsXTsKKworICAgIGlmICghW3ByZXZpb3VzRGVmYXVsdEJ1dHRvbkNlbGwgaXNFcXVhbDpidXR0
b25DZWxsXSkKKyAgICAgICAgW3dpbmRvdyBzZXREZWZhdWx0QnV0dG9uQ2VsbDpwcmV2aW91c0Rl
ZmF1bHRCdXR0b25DZWxsXTsKKworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKK30KKwogLy8gVGhl
bWUgb3ZlcnJpZGVzCiAKIGludCBUaGVtZU1hYzo6YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQo
Q29udHJvbFBhcnQgcGFydCkgY29uc3QKQEAgLTI5OSwyNSArNDA1LDg4IEBAIGludCBUaGVtZU1h
Yzo6YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQKICAgICByZXR1cm4gVGhlbWU6OmJhc2VsaW5l
UG9zaXRpb25BZGp1c3RtZW50KHBhcnQpOwogfQogCitGb250RGVzY3JpcHRpb24gVGhlbWVNYWM6
OmNvbnRyb2xGb250KENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHpv
b21GYWN0b3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgICAgIGNhc2UgUHVz
aEJ1dHRvblBhcnQ6IHsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b247CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7
CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3Jp
cHRpb246OlNlcmlmRmFtaWx5KTsKKworICAgICAgICAgICAgTlNGb250KiBuc0ZvbnQgPSBbTlNG
b250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXpl
OmNvbnRyb2xTaXplRm9yRm9udChmb250KV1dOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KFtuc0ZvbnQgZmFtaWx5TmFtZV0pOworICAgICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShbbnNGb250IHBvaW50U2l6ZV0gKiB6
b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXpl
KFtuc0ZvbnQgcG9pbnRTaXplXSAqIHpvb21GYWN0b3IpOworICAgICAgICAgICAgcmV0dXJuIGZv
bnREZXNjcmlwdGlvbjsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIFRoZW1lOjpjb250cm9sRm9udChwYXJ0LCBmb250LCB6b29tRmFjdG9yKTsKKyAgICB9
Cit9CisKIExlbmd0aFNpemUgVGhlbWVNYWM6OmNvbnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQs
IGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpv
b21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgQ2hl
Y2tib3hQYXJ0OgotICAgICAgICAgICAgcmV0dXJuIGNoZWNrYm94U2l6ZShwYXJ0LCBmb250LCB6
b29tZWRTaXplLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBjaGVja2JveFNpemUo
Zm9udCwgem9vbWVkU2l6ZSwgem9vbUZhY3Rvcik7CiAgICAgICAgIGNhc2UgUmFkaW9QYXJ0Ogot
ICAgICAgICAgICAgcmV0dXJuIHJhZGlvU2l6ZShwYXJ0LCBmb250LCB6b29tZWRTaXplLCB6b29t
RmFjdG9yKTsKKyAgICAgICAgICAgIHJldHVybiByYWRpb1NpemUoZm9udCwgem9vbWVkU2l6ZSwg
em9vbUZhY3Rvcik7CisgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgICAgICAgICAv
LyBIZWlnaHQgaXMgcmVzZXQgdG8gYXV0byBzbyB0aGF0IHNwZWNpZmllZCBoZWlnaHRzIGNhbiBi
ZSBpZ25vcmVkLgorICAgICAgICAgICAgcmV0dXJuIHNpemVGcm9tRm9udChmb250LCBMZW5ndGhT
aXplKHpvb21lZFNpemUud2lkdGgoKSwgTGVuZ3RoKCkpLCB6b29tRmFjdG9yLCBidXR0b25TaXpl
cygpKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiB6b29tZWRTaXplOwog
ICAgIH0KIH0KIAorTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6bWluQ29udHJvbFNpemUoQ29udHJvbFBh
cnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKHBhcnQpIHsKKyAgICAgICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgorICAgICAg
ICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgorICAgICAgICBjYXNlIEJ1dHRvblBhcnQ6CisgICAg
ICAgICAgICByZXR1cm4gTGVuZ3RoU2l6ZShMZW5ndGgoMCwgRml4ZWQpLCBMZW5ndGgoc3RhdGlj
X2Nhc3Q8aW50PigxNSAqIHpvb21GYWN0b3IpLCBGaXhlZCkpOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIFRoZW1lOjptaW5Db250cm9sU2l6ZShwYXJ0LCBmb250LCB6b29t
RmFjdG9yKTsKKyAgICB9Cit9CisKK0xlbmd0aEJveCBUaGVtZU1hYzo6Y29udHJvbEJvcmRlcihD
b250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhCb3gmIHpvb21l
ZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAg
ICAgICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgorICAgICAgICBjYXNlIERlZmF1bHRCdXR0b25Q
YXJ0OgorICAgICAgICBjYXNlIEJ1dHRvblBhcnQ6CisgICAgICAgICAgICByZXR1cm4gTGVuZ3Ro
Qm94KDAsIHpvb21lZEJveC5yaWdodCgpLnZhbHVlKCksIDAsIHpvb21lZEJveC5sZWZ0KCkudmFs
dWUoKSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gVGhlbWU6OmNvbnRy
b2xCb3JkZXIocGFydCwgZm9udCwgem9vbWVkQm94LCB6b29tRmFjdG9yKTsKKyAgICB9Cit9CisK
K0xlbmd0aEJveCBUaGVtZU1hYzo6Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFydCwgY29u
c3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0
b3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgICAgIGNhc2UgUHVzaEJ1dHRv
blBhcnQ6IHsKKyAgICAgICAgICAgIC8vIEp1c3QgdXNlIDhweC4gIEFwcEtpdCB3YW50cyB0byB1
c2UgMTFweCBmb3IgbWluaSBidXR0b25zLCBidXQgdGhhdCBwYWRkaW5nIGlzIGp1c3QgdG9vIGxh
cmdlCisgICAgICAgICAgICAvLyBmb3IgcmVhbC13b3JsZCBXZWIgc2l0ZXMgKGNyZWF0aW5nIGEg
aHVnZSBuZWNlc3NhcnkgbWluaW11bSB3aWR0aCBmb3IgYnV0dG9ucyB3aG9zZSBzcGFjZSBpcwor
ICAgICAgICAgICAgLy8gYnkgZGVmaW5pdGlvbiBjb25zdHJhaW5lZCwgc2luY2Ugd2Ugc2VsZWN0
IG1pbmkgb25seSBmb3Igc21hbGwgY3JhbXBlZCBlbnZpcm9ubWVudHMuCisgICAgICAgICAgICAv
LyBUaGlzIGFsc28gZ3VhcmFudGVlcyB0aGUgSFRNTCA8YnV0dG9uPiB3aWxsIG1hdGNoIG91ciBy
ZW5kZXJpbmcgYnkgZGVmYXVsdCwgc2luY2Ugd2UncmUgdXNpbmcgYSBjb25zaXN0ZW50CisgICAg
ICAgICAgICAvLyBwYWRkaW5nLgorICAgICAgICAgICAgY29uc3QgaW50IHBhZGRpbmcgPSA4ICog
em9vbUZhY3RvcjsKKyAgICAgICAgICAgIHJldHVybiBMZW5ndGhCb3goMCwgcGFkZGluZywgMCwg
cGFkZGluZyk7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBUaGVtZTo6Y29udHJvbFBhZGRpbmcocGFydCwgZm9udCwgem9vbWVkQm94LCB6b29tRmFjdG9y
KTsKKyAgICB9Cit9CisKIHZvaWQgVGhlbWVNYWM6OmluZmxhdGVDb250cm9sUGFpbnRSZWN0KENv
bnRyb2xQYXJ0IHBhcnQsIENvbnRyb2xTdGF0ZXMgc3RhdGVzLCBJbnRSZWN0JiB6b29tZWRSZWN0
LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkgewogICAgICAg
ICBjYXNlIENoZWNrYm94UGFydDogewogICAgICAgICAgICAgLy8gV2UgaW5mbGF0ZSB0aGUgcmVj
dCBhcyBuZWVkZWQgdG8gYWNjb3VudCBmb3IgcGFkZGluZyBpbmNsdWRlZCBpbiB0aGUgY2VsbCB0
byBhY2NvbW1vZGF0ZSB0aGUgY2hlY2tib3gKICAgICAgICAgICAgIC8vIHNoYWRvdyIgYW5kIHRo
ZSBjaGVjay4gIFdlIGRvbid0IGNvbnNpZGVyIHRoaXMgcGFydCBvZiB0aGUgYm91bmRzIG9mIHRo
ZSBjb250cm9sIGluIFdlYktpdC4KLSAgICAgICAgICAgIE5TQ2VsbCogY2VsbCA9IGNoZWNrYm94
KHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBOU0NlbGwgKmNl
bGwgPSBjaGVja2JveChzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IpOwogICAgICAgICAg
ICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IFtjZWxsIGNvbnRyb2xTaXplXTsKICAgICAg
ICAgICAgIEludFNpemUgem9vbWVkU2l6ZSA9IGNoZWNrYm94U2l6ZXMoKVtjb250cm9sU2l6ZV07
CiAgICAgICAgICAgICB6b29tZWRTaXplLnNldEhlaWdodCh6b29tZWRTaXplLmhlaWdodCgpICog
em9vbUZhY3Rvcik7CkBAIC0zMjgsNyArNDk3LDcgQEAgdm9pZCBUaGVtZU1hYzo6aW5mbGF0ZUNv
bnRyb2xQYWludFJlY3QoQwogICAgICAgICBjYXNlIFJhZGlvUGFydDogewogICAgICAgICAgICAg
Ly8gV2UgaW5mbGF0ZSB0aGUgcmVjdCBhcyBuZWVkZWQgdG8gYWNjb3VudCBmb3IgcGFkZGluZyBp
bmNsdWRlZCBpbiB0aGUgY2VsbCB0byBhY2NvbW1vZGF0ZSB0aGUgcmFkaW8gYnV0dG9uCiAgICAg
ICAgICAgICAvLyBzaGFkb3ciLiAgV2UgZG9uJ3QgY29uc2lkZXIgdGhpcyBwYXJ0IG9mIHRoZSBi
b3VuZHMgb2YgdGhlIGNvbnRyb2wgaW4gV2ViS2l0LgotICAgICAgICAgICAgTlNDZWxsKiBjZWxs
ID0gcmFkaW8oc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIE5T
Q2VsbCAqY2VsbCA9IHJhZGlvKHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3Rvcik7CiAgICAg
ICAgICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gW2NlbGwgY29udHJvbFNpemVdOwog
ICAgICAgICAgICAgSW50U2l6ZSB6b29tZWRTaXplID0gcmFkaW9TaXplcygpW2NvbnRyb2xTaXpl
XTsKICAgICAgICAgICAgIHpvb21lZFNpemUuc2V0SGVpZ2h0KHpvb21lZFNpemUuaGVpZ2h0KCkg
KiB6b29tRmFjdG9yKTsKQEAgLTMzNiw2ICs1MDUsMjEgQEAgdm9pZCBUaGVtZU1hYzo6aW5mbGF0
ZUNvbnRyb2xQYWludFJlY3QoQwogICAgICAgICAgICAgem9vbWVkUmVjdCA9IGluZmxhdGVSZWN0
KHpvb21lZFJlY3QsIHpvb21lZFNpemUsIHJhZGlvTWFyZ2lucyhjb250cm9sU2l6ZSksIHpvb21G
YWN0b3IpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBQdXNo
QnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKKyAgICAgICAgY2Fz
ZSBCdXR0b25QYXJ0OiB7CisgICAgICAgICAgICBOU0J1dHRvbkNlbGwgKmNlbGwgPSBidXR0b24o
cGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIE5TQ29u
dHJvbFNpemUgY29udHJvbFNpemUgPSBbY2VsbCBjb250cm9sU2l6ZV07CisKKyAgICAgICAgICAg
IC8vIFdlIGluZmxhdGUgdGhlIHJlY3QgYXMgbmVlZGVkIHRvIGFjY291bnQgZm9yIHRoZSBBcXVh
IGJ1dHRvbidzIHNoYWRvdy4KKyAgICAgICAgICAgIGlmIChbY2VsbCBiZXplbFN0eWxlXSA9PSBO
U1JvdW5kZWRCZXplbFN0eWxlKSB7CisgICAgICAgICAgICAgICAgSW50U2l6ZSB6b29tZWRTaXpl
ID0gYnV0dG9uU2l6ZXMoKVtjb250cm9sU2l6ZV07CisgICAgICAgICAgICAgICAgem9vbWVkU2l6
ZS5zZXRIZWlnaHQoem9vbWVkU2l6ZS5oZWlnaHQoKSAqIHpvb21GYWN0b3IpOworICAgICAgICAg
ICAgICAgIHpvb21lZFNpemUuc2V0V2lkdGgoem9vbWVkUmVjdC53aWR0aCgpKTsgLy8gQnV0dG9u
cyBkb24ndCBldmVyIGNvbnN0cmFpbiB3aWR0aCwgc28gdGhlIHpvb21lZCB3aWR0aCBjYW4ganVz
dCBiZSBob25vcmVkLgorICAgICAgICAgICAgICAgIHpvb21lZFJlY3QgPSBpbmZsYXRlUmVjdCh6
b29tZWRSZWN0LCB6b29tZWRTaXplLCBidXR0b25NYXJnaW5zKGNvbnRyb2xTaXplKSwgem9vbUZh
Y3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzUwLDYgKzUzNCwx
MiBAQCB2b2lkIFRoZW1lTWFjOjpwYWludChDb250cm9sUGFydCBwYXJ0LCBDCiAgICAgICAgIGNh
c2UgUmFkaW9QYXJ0OgogICAgICAgICAgICAgcGFpbnRSYWRpbyhzdGF0ZXMsIGNvbnRleHQsIHpv
b21lZFJlY3QsIHpvb21GYWN0b3IsIHNjcm9sbFZpZXcpOwogICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBh
cnQ6CisgICAgICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBTcXVhcmVCdXR0b25Q
YXJ0OgorICAgICAgICAgICAgcGFpbnRCdXR0b24ocGFydCwgc3RhdGVzLCBjb250ZXh0LCB6b29t
ZWRSZWN0LCB6b29tRmFjdG9yLCBzY3JvbGxWaWV3KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3Bw
CShyZXZpc2lvbiAzNzc2MSkKKysrIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNs
dWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKQEAgLTYyLDkgKzYz
LDEwIEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFN0eWxlKENTU1N0eWxlU2UKICAgICAgICAg
c3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwogCiAgICAgaWYgKFVBSGFzQXBwZWFyYW5jZSAmJiB0
aGVtZSgpLT5pc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgYmFja2dyb3VuZCwgYmFja2dy
b3VuZENvbG9yKSkgewotICAgICAgICBpZiAocGFydCA9PSBNZW51bGlzdFBhcnQpCisgICAgICAg
IGlmIChwYXJ0ID09IE1lbnVsaXN0UGFydCkgewogICAgICAgICAgICAgc3R5bGUtPnNldEFwcGVh
cmFuY2UoTWVudWxpc3RCdXR0b25QYXJ0KTsKLSAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFy
dCA9IE1lbnVsaXN0QnV0dG9uUGFydDsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBzdHls
ZS0+c2V0QXBwZWFyYW5jZShOb0NvbnRyb2xQYXJ0KTsKICAgICB9CiAKQEAgLTc1LDE5ICs3Nyw4
MSBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHlsZShDU1NTdHlsZVNlCiAgICAgc3R5bGUt
PnNldEJveFNoYWRvdygwKTsKICAgICAKICNpZiBVU0UoTkVXX1RIRU1FKQotICAgIGlmIChwYXJ0
ID09IENoZWNrYm94UGFydCB8fCBwYXJ0ID09IFJhZGlvUGFydCkgewotICAgICAgICBpZiAoIW1f
dGhlbWUtPmNvbnRyb2xTdXBwb3J0c0JvcmRlcihwYXJ0KSkKLSAgICAgICAgICAgIHN0eWxlLT5y
ZXNldEJvcmRlcigpOwotICAgICAgICBpZiAoIW1fdGhlbWUtPmNvbnRyb2xTdXBwb3J0c1BhZGRp
bmcocGFydCkpCi0gICAgICAgICAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7CisgICAgc3dpdGNo
IChwYXJ0KSB7CisgICAgICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgorICAgICAgICBjYXNlIFJhZGlv
UGFydDoKKyAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBTcXVhcmVC
dXR0b25QYXJ0OgorICAgICAgICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgorICAgICAgICBjYXNl
IEJ1dHRvblBhcnQ6IHsKKyAgICAgICAgICAgIC8vIEJvcmRlcgorICAgICAgICAgICAgTGVuZ3Ro
Qm94IGJvcmRlckJveChzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwgc3R5bGUtPmJvcmRlclJpZ2h0
V2lkdGgoKSwgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIHN0eWxlLT5ib3JkZXJMZWZ0V2lk
dGgoKSk7CisgICAgICAgICAgICBib3JkZXJCb3ggPSBtX3RoZW1lLT5jb250cm9sQm9yZGVyKHBh
cnQsIHN0eWxlLT5mb250KCksIGJvcmRlckJveCwgc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7Cisg
ICAgICAgICAgICBpZiAoYm9yZGVyQm94LnRvcCgpLnZhbHVlKCkgIT0gc3R5bGUtPmJvcmRlclRv
cFdpZHRoKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYm9yZGVyQm94LnRvcCgpLnZhbHVlKCkp
CisgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRCb3JkZXJUb3BXaWR0aChib3JkZXJCb3gu
dG9wKCkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBzdHlsZS0+cmVzZXRCb3JkZXJUb3AoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChib3JkZXJCb3gucmlnaHQoKS52YWx1ZSgpICE9IHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYm9yZGVyQm94LnJpZ2h0KCkudmFsdWUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgc3R5bGUtPnNldEJvcmRlclJpZ2h0V2lkdGgoYm9yZGVyQm94LnJpZ2h0
KCkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBz
dHlsZS0+cmVzZXRCb3JkZXJSaWdodCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGJvcmRlckJveC5ib3R0b20oKS52YWx1ZSgpICE9IHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgp
KSB7CisgICAgICAgICAgICAgICAgc3R5bGUtPnNldEJvcmRlckJvdHRvbVdpZHRoKGJvcmRlckJv
eC5ib3R0b20oKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoYm9yZGVyQm94LmJvdHRv
bSgpLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRCb3JkZXJCb3R0b21X
aWR0aChib3JkZXJCb3guYm90dG9tKCkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBzdHlsZS0+cmVzZXRCb3JkZXJCb3R0b20oKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChib3JkZXJCb3gubGVmdCgpLnZhbHVlKCkgIT0gc3R5bGUt
PmJvcmRlckxlZnRXaWR0aCgpKSB7CisgICAgICAgICAgICAgICAgc3R5bGUtPnNldEJvcmRlckxl
ZnRXaWR0aChib3JkZXJCb3gubGVmdCgpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGlmIChi
b3JkZXJCb3gubGVmdCgpLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRC
b3JkZXJMZWZ0V2lkdGgoYm9yZGVyQm94LmxlZnQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5yZXNldEJvcmRlckxlZnQoKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUGFkZGluZworICAgICAgICAgICAgTGVuZ3Ro
Qm94IHBhZGRpbmdCb3ggPSBtX3RoZW1lLT5jb250cm9sUGFkZGluZyhwYXJ0LCBzdHlsZS0+Zm9u
dCgpLCBzdHlsZS0+cGFkZGluZ0JveCgpLCBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAg
ICAgICAgIGlmIChwYWRkaW5nQm94ICE9IHN0eWxlLT5wYWRkaW5nQm94KCkpCisgICAgICAgICAg
ICAgICAgc3R5bGUtPnNldFBhZGRpbmdCb3gocGFkZGluZ0JveCk7CisKKyAgICAgICAgICAgIC8v
IFdoaXRlc3BhY2UKKyAgICAgICAgICAgIGlmIChtX3RoZW1lLT5jb250cm9sUmVxdWlyZXNQcmVX
aGl0ZVNwYWNlKHBhcnQpKQorICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBS
RSk7CiAgICAgICAgICAgICAKLSAgICAgICAgLy8gVGhlIHdpZHRoIGFuZCBoZWlnaHQgaGVyZSBh
cmUgYWZmZWN0ZWQgYnkgdGhlIHpvb20uCi0gICAgICAgIC8vIEZJWE1FOiBDaGVjayBpcyBmbGF3
ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4LXdpZHRoIGludG8gYWNjb3Vu
dC4KLSAgICAgICAgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZSA9IG1fdGhlbWUtPmNvbnRyb2xTaXpl
KHBhcnQsIHN0eWxlLT5mb250KCksIExlbmd0aFNpemUoc3R5bGUtPndpZHRoKCksIHN0eWxlLT5o
ZWlnaHQoKSksIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOwotICAgICAgICBpZiAoY29udHJvbFNp
emUud2lkdGgoKSAhPSBzdHlsZS0+d2lkdGgoKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRXaWR0
aChjb250cm9sU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgaWYgKGNvbnRyb2xTaXplLmhlaWdodCgp
ICE9IHN0eWxlLT5oZWlnaHQoKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoY29udHJv
bFNpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgLy8gV2lkdGggLyBIZWlnaHQKKyAgICAgICAg
ICAgIC8vIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IGhlcmUgYXJlIGFmZmVjdGVkIGJ5IHRoZSB6b29t
LgorICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIGlzIGZsYXdlZCwgc2luY2UgaXQgZG9lc24n
dCB0YWtlIG1pbi13aWR0aC9tYXgtd2lkdGggaW50byBhY2NvdW50LgorICAgICAgICAgICAgTGVu
Z3RoU2l6ZSBjb250cm9sU2l6ZSA9IG1fdGhlbWUtPmNvbnRyb2xTaXplKHBhcnQsIHN0eWxlLT5m
b250KCksIExlbmd0aFNpemUoc3R5bGUtPndpZHRoKCksIHN0eWxlLT5oZWlnaHQoKSksIHN0eWxl
LT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICAgICAgaWYgKGNvbnRyb2xTaXplLndpZHRoKCkg
IT0gc3R5bGUtPndpZHRoKCkpCisgICAgICAgICAgICAgICAgc3R5bGUtPnNldFdpZHRoKGNvbnRy
b2xTaXplLndpZHRoKCkpOworICAgICAgICAgICAgaWYgKGNvbnRyb2xTaXplLmhlaWdodCgpICE9
IHN0eWxlLT5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KGNvbnRy
b2xTaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE1pbi1X
aWR0aCAvIE1pbi1IZWlnaHQKKyAgICAgICAgICAgIExlbmd0aFNpemUgbWluQ29udHJvbFNpemUg
PSBtX3RoZW1lLT5taW5Db250cm9sU2l6ZShwYXJ0LCBzdHlsZS0+Zm9udCgpLCBzdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgICAgIGlmIChtaW5Db250cm9sU2l6ZS53aWR0aCgpICE9
IHN0eWxlLT5taW5XaWR0aCgpKQorICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRNaW5XaWR0aCht
aW5Db250cm9sU2l6ZS53aWR0aCgpKTsKKyAgICAgICAgICAgIGlmIChtaW5Db250cm9sU2l6ZS5o
ZWlnaHQoKSAhPSBzdHlsZS0+bWluSGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgc3R5bGUtPnNl
dE1pbkhlaWdodChtaW5Db250cm9sU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBGb250CisgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gY29udHJvbEZv
bnQgPSBtX3RoZW1lLT5jb250cm9sRm9udChwYXJ0LCBzdHlsZS0+Zm9udCgpLCBzdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgICAgIGlmIChjb250cm9sRm9udCAhPSBzdHlsZS0+Zm9u
dCgpLmZvbnREZXNjcmlwdGlvbigpKSB7CisgICAgICAgICAgICAgICAgLy8gUmVzZXQgb3VyIGxp
bmUtaGVpZ2h0CisgICAgICAgICAgICAgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5
bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIC8vIE5vdyB1cGRhdGUgb3VyIGZvbnQuCisgICAgICAgICAgICAgICAgaWYgKHN0eWxlLT5z
ZXRGb250RGVzY3JpcHRpb24oY29udHJvbEZvbnQpKQorICAgICAgICAgICAgICAgICAgICBzdHls
ZS0+Zm9udCgpLnVwZGF0ZSgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogI2VuZGlmCiAKQEAgLTk4LDEyICsx
NjIsMTIgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoQ1NTU3R5bGVTZQogICAgICAg
ICAgICAgcmV0dXJuIGFkanVzdENoZWNrYm94U3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKICAg
ICAgICAgY2FzZSBSYWRpb1BhcnQ6CiAgICAgICAgICAgICByZXR1cm4gYWRqdXN0UmFkaW9TdHls
ZShzZWxlY3Rvciwgc3R5bGUsIGUpOwotI2VuZGlmCiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBh
cnQ6CiAgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBEZWZhdWx0
QnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBCdXR0b25QYXJ0OgogICAgICAgICAgICAgcmV0dXJu
IGFkanVzdEJ1dHRvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7CisjZW5kaWYKICAgICAgICAg
Y2FzZSBUZXh0RmllbGRQYXJ0OgogICAgICAgICAgICAgcmV0dXJuIGFkanVzdFRleHRGaWVsZFN0
eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7CiAgICAgICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgpAQCAt
MTU2LDkgKzIyMCwxNyBAQCBib29sIFJlbmRlclRoZW1lOjpwYWludChSZW5kZXJPYmplY3QqIG8s
CiAgICAgQ29udHJvbFBhcnQgcGFydCA9IG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKIAogI2lm
IFVTRShORVdfVEhFTUUpCi0gICAgaWYgKHBhcnQgPT0gQ2hlY2tib3hQYXJ0IHx8IHBhcnQgPT0g
UmFkaW9QYXJ0KSB7Ci0gICAgICAgIG1fdGhlbWUtPnBhaW50KHBhcnQsIGNvbnRyb2xTdGF0ZXNG
b3JSZW5kZXJlcihvKSwgY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHQqPihwYWludEluZm8uY29u
dGV4dCksIHIsIG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSwgby0+dmlldygpLT5mcmFtZVZp
ZXcoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAgICAg
ICAgY2FzZSBDaGVja2JveFBhcnQ6CisgICAgICAgIGNhc2UgUmFkaW9QYXJ0OgorICAgICAgICBj
YXNlIFB1c2hCdXR0b25QYXJ0OgorICAgICAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6CisgICAg
ICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2UgQnV0dG9uUGFydDoKKyAg
ICAgICAgICAgIG1fdGhlbWUtPnBhaW50KHBhcnQsIGNvbnRyb2xTdGF0ZXNGb3JSZW5kZXJlcihv
KSwgY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHQqPihwYWludEluZm8uY29udGV4dCksIHIsIG8t
PnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSwgby0+dmlldygpLT5mcmFtZVZpZXcoKSk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVh
azsKICAgICB9CiAjZW5kaWYKIApAQCAtMTY5LDEyICsyNDEsMTIgQEAgYm9vbCBSZW5kZXJUaGVt
ZTo6cGFpbnQoUmVuZGVyT2JqZWN0KiBvLAogICAgICAgICAgICAgcmV0dXJuIHBhaW50Q2hlY2ti
b3gobywgcGFpbnRJbmZvLCByKTsKICAgICAgICAgY2FzZSBSYWRpb1BhcnQ6CiAgICAgICAgICAg
ICByZXR1cm4gcGFpbnRSYWRpbyhvLCBwYWludEluZm8sIHIpOwotI2VuZGlmCiAgICAgICAgIGNh
c2UgUHVzaEJ1dHRvblBhcnQ6CiAgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKICAgICAg
ICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBCdXR0b25QYXJ0OgogICAg
ICAgICAgICAgcmV0dXJuIHBhaW50QnV0dG9uKG8sIHBhaW50SW5mbywgcik7CisjZW5kaWYKICAg
ICAgICAgY2FzZSBNZW51bGlzdFBhcnQ6CiAgICAgICAgICAgICByZXR1cm4gcGFpbnRNZW51TGlz
dChvLCBwYWludEluZm8sIHIpOwogICAgICAgICBjYXNlIFNsaWRlckhvcml6b250YWxQYXJ0OgpA
QCAtNTIyLDkgKzU5NCw2IEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzRGVmYXVsdChjb25zdCBSZW5k
ZXIKICAgICBpZiAoIXNldHRpbmdzIHx8ICFzZXR0aW5ncy0+aW5BcHBsaWNhdGlvbkNocm9tZU1v
ZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghby0+c3R5bGUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAogICAgIHJldHVybiBvLT5zdHlsZSgpLT5hcHBl
YXJhbmNlKCkgPT0gRGVmYXVsdEJ1dHRvblBhcnQ7CiB9CiAKQEAgLTU2Miw3ICs2MzEsNiBAQCB2
b2lkIFJlbmRlclRoZW1lOjphZGp1c3RSYWRpb1N0eWxlKENTU1N0CiAKICAgICBzdHlsZS0+c2V0
Qm94U2hhZG93KDApOwogfQotI2VuZGlmCiAKIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdEJ1dHRv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGUpIGNvbnN0CiB7CkBAIC01NzAsNiArNjM4LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6
YWRqdXN0QnV0dG9uU3R5bGUoQ1NTUwogICAgIC8vIGF0IGFsbCBieSBkZWZhdWx0LiAgV2Ugd2ls
bCBzdGlsbCBhbGxvdyB0aGUgdGhlbWUgYSBjcmFjayBhdCBzZXR0aW5nIHVwIGEgZGVzaXJlZCB2
ZXJ0aWNhbCBzaXplLgogICAgIHNldEJ1dHRvblNpemUoc3R5bGUpOwogfQorI2VuZGlmCiAKIHZv
aWQgUmVuZGVyVGhlbWU6OmFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNl
bGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CkluZGV4OiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGhl
bWUuaAkocmV2aXNpb24gMzc3NjEpCisrKyByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ4LDExICsxNDgsMTEgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RSYWRpb1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0
cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0
IHsgfQotI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lk
IHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqKSBjb25zdCB7IH0KKyNlbmRpZgogCiAgICAgdmly
dHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgJKHJldmlzaW9uIDM3NzYx
KQorKysgcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDEx
ICs3Niw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9yKGludCBjc3NW
YWx1ZUlkKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIC8vIE1ldGhvZHMgZm9yIGVhY2ggYXBw
ZWFyYW5jZSB2YWx1ZS4KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0
dG9uU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwotCiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4
dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKQEAgLTE0MSwx
MSArMTM2LDYgQEAgcHJpdmF0ZToKIAogICAgIC8vIEhlbHBlcnMgZm9yIGFkanVzdGluZyBhcHBl
YXJhbmNlIGFuZCBmb3IgcGFpbnRpbmcKIAotICAgIHZvaWQgc2V0QnV0dG9uUGFkZGluZ0Zyb21D
b250cm9sU2l6ZShSZW5kZXJTdHlsZSosIE5TQ29udHJvbFNpemUpIGNvbnN0OwotICAgIGNvbnN0
IEludFNpemUqIGJ1dHRvblNpemVzKCkgY29uc3Q7Ci0gICAgY29uc3QgaW50KiBidXR0b25NYXJn
aW5zKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRCdXR0b25DZWxsU3RhdGUoY29uc3QgUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgSW50UmVjdCYpOwotCiAgICAgdm9pZCBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0
ZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgY29uc3QgSW50U2l6
ZSogcG9wdXBCdXR0b25TaXplcygpIGNvbnN0OwogICAgIGNvbnN0IGludCogcG9wdXBCdXR0b25N
YXJnaW5zKCkgY29uc3Q7CkBAIC0xNTksNyArMTQ5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNl
dFNlYXJjaENlbGxTdGF0ZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdm9p
ZCBzZXRTZWFyY2hGaWVsZFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKICAgICAKLSAgICBOU0J1
dHRvbkNlbGwqIGJ1dHRvbigpIGNvbnN0OwogICAgIE5TUG9wVXBCdXR0b25DZWxsKiBwb3B1cEJ1
dHRvbigpIGNvbnN0OwogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2goKSBjb25zdDsKICAg
ICBOU01lbnUqIHNlYXJjaE1lbnVUZW1wbGF0ZSgpIGNvbnN0OwpAQCAtMTY3LDcgKzE1Niw2IEBA
IHByaXZhdGU6CiAgICAgTlNTbGlkZXJDZWxsKiBzbGlkZXJUaHVtYlZlcnRpY2FsKCkgY29uc3Q7
CiAKIHByaXZhdGU6Ci0gICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNCdXR0b25DZWxsPiBtX2J1dHRv
bjsKICAgICBtdXRhYmxlIFJldGFpblB0cjxOU1BvcFVwQnV0dG9uQ2VsbD4gbV9wb3B1cEJ1dHRv
bjsKICAgICBtdXRhYmxlIFJldGFpblB0cjxOU1NlYXJjaEZpZWxkQ2VsbD4gbV9zZWFyY2g7CiAg
ICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNNZW51PiBtX3NlYXJjaE1lbnVUZW1wbGF0ZTsKSW5kZXg6
IHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDM3NzYxKQorKysgcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsNDAgKzQyNCwyOCBAQCB2b2lkIFJlbmRlclRo
ZW1lTWFjOjphZGp1c3RSZXBhaW50UmVjdChjCiAgICAgQ29udHJvbFBhcnQgcGFydCA9IG8tPnN0
eWxlKCktPmFwcGVhcmFuY2UoKTsKICAgICAKICNpZiBVU0UoTkVXX1RIRU1FKQotICAgIGlmIChw
YXJ0ID09IENoZWNrYm94UGFydCB8fCBwYXJ0ID09IFJhZGlvUGFydCkKLSAgICAgICAgcmV0dXJu
IFJlbmRlclRoZW1lOjphZGp1c3RSZXBhaW50UmVjdChvLCByKTsKLSNlbmRpZgotCi0gICAgZmxv
YXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotCi0gICAgc3dpdGNo
IChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkpIHsKKyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAgICAg
ICAgY2FzZSBDaGVja2JveFBhcnQ6CisgICAgICAgIGNhc2UgUmFkaW9QYXJ0OgogICAgICAgICBj
YXNlIFB1c2hCdXR0b25QYXJ0OgorICAgICAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6CiAgICAg
ICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6Ci0gICAgICAgIGNhc2UgQnV0dG9uUGFydDogewot
ICAgICAgICAgICAgLy8gU2luY2Ugd2UgcXVlcnkgdGhlIHByb3RvdHlwZSBjZWxsLCB3ZSBuZWVk
IHRvIHVwZGF0ZSBpdHMgc3RhdGUgdG8gbWF0Y2guCi0gICAgICAgICAgICBzZXRCdXR0b25DZWxs
U3RhdGUobywgcik7Ci0KLSAgICAgICAgICAgIC8vIFdlIGluZmxhdGUgdGhlIHJlY3QgYXMgbmVl
ZGVkIHRvIGFjY291bnQgZm9yIHBhZGRpbmcgaW5jbHVkZWQgaW4gdGhlIGNlbGwgdG8gYWNjb21t
b2RhdGUgdGhlIGNoZWNrYm94Ci0gICAgICAgICAgICAvLyBzaGFkb3ciIGFuZCB0aGUgY2hlY2su
ICBXZSBkb24ndCBjb25zaWRlciB0aGlzIHBhcnQgb2YgdGhlIGJvdW5kcyBvZiB0aGUgY29udHJv
bCBpbiBXZWJLaXQuCi0gICAgICAgICAgICBpZiAoW2J1dHRvbigpIGJlemVsU3R5bGVdID09IE5T
Um91bmRlZEJlemVsU3R5bGUpIHsKLSAgICAgICAgICAgICAgICBJbnRTaXplIHNpemUgPSBidXR0
b25TaXplcygpW1tidXR0b24oKSBjb250cm9sU2l6ZV1dOwotICAgICAgICAgICAgICAgIHNpemUu
c2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwotICAgICAgICAgICAgICAgIHNp
emUuc2V0V2lkdGgoci53aWR0aCgpKTsKLSAgICAgICAgICAgICAgICByID0gaW5mbGF0ZVJlY3Qo
ciwgc2l6ZSwgYnV0dG9uTWFyZ2lucygpLCB6b29tTGV2ZWwpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBNZW51bGlzdFBhcnQ6IHsK
LSAgICAgICAgICAgIHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKG8sIHIpOwotICAgICAgICAgICAg
SW50U2l6ZSBzaXplID0gcG9wdXBCdXR0b25TaXplcygpW1twb3B1cEJ1dHRvbigpIGNvbnRyb2xT
aXplXV07Ci0gICAgICAgICAgICBzaXplLnNldEhlaWdodChzaXplLmhlaWdodCgpICogem9vbUxl
dmVsKTsKLSAgICAgICAgICAgIHNpemUuc2V0V2lkdGgoci53aWR0aCgpKTsKLSAgICAgICAgICAg
IHIgPSBpbmZsYXRlUmVjdChyLCBzaXplLCBwb3B1cEJ1dHRvbk1hcmdpbnMoKSwgem9vbUxldmVs
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGNhc2UgQnV0dG9uUGFy
dDoKKyAgICAgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YWRqdXN0UmVwYWludFJlY3Qobywg
cik7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICB9CisjZW5kaWYK
KworICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKwor
ICAgIGlmIChwYXJ0ID09IE1lbnVsaXN0UGFydCkgeworICAgICAgICBzZXRQb3B1cEJ1dHRvbkNl
bGxTdGF0ZShvLCByKTsKKyAgICAgICAgSW50U2l6ZSBzaXplID0gcG9wdXBCdXR0b25TaXplcygp
W1twb3B1cEJ1dHRvbigpIGNvbnRyb2xTaXplXV07CisgICAgICAgIHNpemUuc2V0SGVpZ2h0KHNp
emUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOworICAgICAgICBzaXplLnNldFdpZHRoKHIud2lkdGgo
KSk7CisgICAgICAgIHIgPSBpbmZsYXRlUmVjdChyLCBzaXplLCBwb3B1cEJ1dHRvbk1hcmdpbnMo
KSwgem9vbUxldmVsKTsKKyAgICB9CiB9CiAKIEludFJlY3QgUmVuZGVyVGhlbWVNYWM6OmluZmxh
dGVSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IGludCog
bWFyZ2lucywgZmxvYXQgem9vbUxldmVsKSBjb25zdApAQCAtNjE3LDE3NiArNjA1LDYgQEAgTlND
b250cm9sU2l6ZSBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNpegogICAgIHJldHVybiBOU01pbmlD
b250cm9sU2l6ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0QnV0dG9uUGFkZGluZ0Zy
b21Db250cm9sU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29udHJvbFNpemUgc2l6ZSkgY29u
c3QKLXsKLSAgICAvLyBKdXN0IHVzZSA4cHguICBBcHBLaXQgd2FudHMgdG8gdXNlIDExcHggZm9y
IG1pbmkgYnV0dG9ucywgYnV0IHRoYXQgcGFkZGluZyBpcyBqdXN0IHRvbyBsYXJnZQotICAgIC8v
IGZvciByZWFsLXdvcmxkIFdlYiBzaXRlcyAoY3JlYXRpbmcgYSBodWdlIG5lY2Vzc2FyeSBtaW5p
bXVtIHdpZHRoIGZvciBidXR0b25zIHdob3NlIHNwYWNlIGlzCi0gICAgLy8gYnkgZGVmaW5pdGlv
biBjb25zdHJhaW5lZCwgc2luY2Ugd2Ugc2VsZWN0IG1pbmkgb25seSBmb3Igc21hbGwgY3JhbXBl
ZCBlbnZpcm9ubWVudHMuCi0gICAgLy8gVGhpcyBhbHNvIGd1YXJhbnRlZXMgdGhlIEhUTUw0IDxi
dXR0b24+IHdpbGwgbWF0Y2ggb3VyIHJlbmRlcmluZyBieSBkZWZhdWx0LCBzaW5jZSB3ZSdyZSB1
c2luZyBhIGNvbnNpc3RlbnQKLSAgICAvLyBwYWRkaW5nLgotICAgIGNvbnN0IGludCBwYWRkaW5n
ID0gOCAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0
KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVu
Z3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKDAs
IEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDAsIEZpeGVkKSk7
Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Ci17
Ci0gICAgLy8gVGhlcmUgYXJlIHRocmVlIGFwcGVhcmFuY2UgY29uc3RhbnRzIGZvciBidXR0b25z
LgotICAgIC8vICgxKSBQdXNoLWJ1dHRvbiBpcyB0aGUgY29uc3RhbnQgZm9yIHRoZSBkZWZhdWx0
IEFxdWEgc3lzdGVtIGJ1dHRvbi4gIFB1c2ggYnV0dG9ucyB3aWxsIG5vdCBzY2FsZSB2ZXJ0aWNh
bGx5IGFuZCB3aWxsIG5vdCBhbGxvdwotICAgIC8vIGN1c3RvbSBmb250cyBvciBjb2xvcnMuICA8
aW5wdXQ+cyB1c2UgdGhpcyBjb25zdGFudC4gIFRoaXMgYnV0dG9uIHdpbGwgYWxsb3cgY3VzdG9t
IGNvbG9ycyBhbmQgZm9udCB3ZWlnaHRzL3ZhcmlhbnRzIGJ1dCB3b24ndAotICAgIC8vIHNjYWxl
IHZlcnRpY2FsbHkuCi0gICAgLy8gKDIpIHNxdWFyZS1idXR0b24gaXMgdGhlIGNvbnN0YW50IGZv
ciB0aGUgc3F1YXJlIGJ1dHRvbi4gIFRoaXMgYnV0dG9uIHdpbGwgYWxsb3cgY3VzdG9tIGZvbnRz
IGFuZCBjb2xvcnMgYW5kIHdpbGwgc2NhbGUgdmVydGljYWxseS4KLSAgICAvLyAoMykgQnV0dG9u
IGlzIHRoZSBjb25zdGFudCB0aGF0IG1lYW5zICJwaWNrIHRoZSBiZXN0IGJ1dHRvbiBhcyBhcHBy
b3ByaWF0ZS4iICA8YnV0dG9uPnMgdXNlIHRoaXMgY29uc3RhbnQuICBUaGlzIGJ1dHRvbiB3aWxs
Ci0gICAgLy8gYWxzbyBzY2FsZSB2ZXJ0aWNhbGx5IGFuZCBhbGxvdyBjdXN0b20gZm9udHMgYW5k
IGNvbG9ycy4gIEl0IHdpbGwgYXR0ZW1wdCB0byB1c2UgQXF1YSBpZiBwb3NzaWJsZSBhbmQgd2ls
bCBtYWtlIHRoaXMgZGV0ZXJtaW5hdGlvbgotICAgIC8vIHNvbGVseSBvbiB0aGUgcmVjdGFuZ2xl
IG9mIHRoZSBjb250cm9sLgotCi0gICAgLy8gRGV0ZXJtaW5lIG91ciBjb250cm9sIHNpemUgYmFz
ZWQgb2ZmIG91ciBmb250LgotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9s
U2l6ZUZvckZvbnQoc3R5bGUpOwotCi0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVz
aEJ1dHRvblBhcnQpIHsKLSAgICAgICAgLy8gRGl0Y2ggdGhlIGJvcmRlci4KLSAgICAgICAgc3R5
bGUtPnJlc2V0Qm9yZGVyKCk7Ci0KLSAgICAgICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0byBhdXRv
LgotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7Ci0KLSAgICAgICAgLy8g
V2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgICAgICBzdHlsZS0+c2V0V2hpdGVTcGFj
ZShQUkUpOwotCi0gICAgICAgIC8vIFNldCB0aGUgYnV0dG9uJ3MgdmVydGljYWwgc2l6ZS4KLSAg
ICAgICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7Ci0KLSAgICAgICAgLy8gQWRkIGluIHRoZSBwYWRk
aW5nIHRoYXQgd2UnZCBsaWtlIHRvIHVzZS4KLSAgICAgICAgc2V0QnV0dG9uUGFkZGluZ0Zyb21D
b250cm9sU2l6ZShzdHlsZSwgY29udHJvbFNpemUpOwotCi0gICAgICAgIC8vIE91ciBmb250IGlz
IGxvY2tlZCB0byB0aGUgYXBwcm9wcmlhdGUgc3lzdGVtIGZvbnQgc2l6ZSBmb3IgdGhlIGNvbnRy
b2wuICBUbyBjbGFyaWZ5LCB3ZSBmaXJzdCB1c2UgdGhlIENTUy1zcGVjaWZpZWQgZm9udCB0byBm
aWd1cmUgb3V0Ci0gICAgICAgIC8vIGEgcmVhc29uYWJsZSBjb250cm9sIHNpemUsIGJ1dCBvbmNl
IHRoYXQgY29udHJvbCBzaXplIGlzIGRldGVybWluZWQsIHdlIHRocm93IHRoYXQgZm9udCBhd2F5
IGFuZCB1c2UgdGhlIGFwcHJvcHJpYXRlCi0gICAgICAgIC8vIHN5c3RlbSBmb250IGZvciB0aGUg
Y29udHJvbCBzaXplIGluc3RlYWQuCi0gICAgICAgIHNldEZvbnRGcm9tQ29udHJvbFNpemUoc2Vs
ZWN0b3IsIHN0eWxlLCBjb250cm9sU2l6ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gU2V0
IGEgbWluLWhlaWdodCBzbyB0aGF0IHdlIGNhbid0IGdldCBzbWFsbGVyIHRoYW4gdGhlIG1pbmkg
YnV0dG9uLgotICAgICAgICBzdHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0aChzdGF0aWNfY2FzdDxp
bnQ+KDE1ICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSksIEZpeGVkKSk7Ci0KLSAgICAgICAgLy8g
UmVzZXQgdGhlIHRvcCBhbmQgYm90dG9tIGJvcmRlcnMuCi0gICAgICAgIHN0eWxlLT5yZXNldEJv
cmRlclRvcCgpOwotICAgICAgICBzdHlsZS0+cmVzZXRCb3JkZXJCb3R0b20oKTsKLSAgICB9Ci0K
LSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwotfQotCi1jb25zdCBJbnRTaXplKiBSZW5kZXJU
aGVtZU1hYzo6YnV0dG9uU2l6ZXMoKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCBJbnRTaXpl
IHNpemVzWzNdID0geyBJbnRTaXplKDAsIDIxKSwgSW50U2l6ZSgwLCAxOCksIEludFNpemUoMCwg
MTUpIH07Ci0gICAgcmV0dXJuIHNpemVzOwotfQotCi1jb25zdCBpbnQqIFJlbmRlclRoZW1lTWFj
OjpidXR0b25NYXJnaW5zKCkgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IG1hcmdpbnNb
M11bNF0gPQotICAgIHsKLSAgICAgICAgeyA0LCA2LCA3LCA2IH0sCi0gICAgICAgIHsgNCwgNSwg
NiwgNSB9LAotICAgICAgICB7IDAsIDEsIDEsIDEgfSwKLSAgICB9OwotICAgIHJldHVybiBtYXJn
aW5zW1tidXR0b24oKSBjb250cm9sU2l6ZV1dOwotfQotCi12b2lkIFJlbmRlclRoZW1lTWFjOjpz
ZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICAvLyBJZiB0aGUg
d2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5n
IHRvIGRvLgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAh
c3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBVc2Ug
dGhlIGZvbnQgc2l6ZSB0byBkZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgY29u
dHJvbC4KLSAgICBzZXRTaXplRnJvbUZvbnQoc3R5bGUsIGJ1dHRvblNpemVzKCkpOwotfQotCi12
b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRCdXR0b25DZWxsU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIE5TQnV0dG9uQ2VsbCogYnV0dG9uID0gdGhp
cy0+YnV0dG9uKCk7Ci0KLSAgICAvLyBTZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhl
IHJlY3RhbmdsZSB3ZSdyZSBwYWludGluZyBpbnRvLgotICAgIGlmIChvLT5zdHlsZSgpLT5hcHBl
YXJhbmNlKCkgPT0gU3F1YXJlQnV0dG9uUGFydCB8fAotICAgICAgICByLmhlaWdodCgpID4gYnV0
dG9uU2l6ZXMoKVtOU1JlZ3VsYXJDb250cm9sU2l6ZV0uaGVpZ2h0KCkgKiBvLT5zdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCkpIHsKLSAgICAgICAgLy8gVXNlIHRoZSBzcXVhcmUgYnV0dG9uCi0gICAg
ICAgIGlmIChbYnV0dG9uIGJlemVsU3R5bGVdICE9IE5TU2hhZG93bGVzc1NxdWFyZUJlemVsU3R5
bGUpCi0gICAgICAgICAgICBbYnV0dG9uIHNldEJlemVsU3R5bGU6TlNTaGFkb3dsZXNzU3F1YXJl
QmV6ZWxTdHlsZV07Ci0gICAgfSBlbHNlIGlmIChbYnV0dG9uIGJlemVsU3R5bGVdICE9IE5TUm91
bmRlZEJlemVsU3R5bGUpCi0gICAgICAgIFtidXR0b24gc2V0QmV6ZWxTdHlsZTpOU1JvdW5kZWRC
ZXplbFN0eWxlXTsKLQotICAgIHNldENvbnRyb2xTaXplKGJ1dHRvbiwgYnV0dG9uU2l6ZXMoKSwg
ci5zaXplKCksIG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7Ci0KLSAgICBOU1dpbmRvdyAq
d2luZG93ID0gW28tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3VtZW50VmlldygpIHdpbmRvd107
Ci0gICAgQk9PTCBpc0RlZmF1bHRCdXR0b24gPSAoaXNEZWZhdWx0KG8pICYmIFt3aW5kb3cgaXNL
ZXlXaW5kb3ddKTsKLSAgICBbYnV0dG9uIHNldEtleUVxdWl2YWxlbnQ6KGlzRGVmYXVsdEJ1dHRv
biA/IEAiXHIiIDogQCIiKV07Ci0KLSAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdl
IHJlc3BvbmQgdG8uCi0gICAgdXBkYXRlQ2hlY2tlZFN0YXRlKGJ1dHRvbiwgbyk7Ci0gICAgdXBk
YXRlRW5hYmxlZFN0YXRlKGJ1dHRvbiwgbyk7Ci0gICAgdXBkYXRlUHJlc3NlZFN0YXRlKGJ1dHRv
biwgbyk7Ci0gICAgdXBkYXRlRm9jdXNlZFN0YXRlKGJ1dHRvbiwgbyk7Ci19Ci0KLWJvb2wgUmVu
ZGVyVGhlbWVNYWM6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBOU0J1
dHRvbkNlbGwqIGJ1dHRvbiA9IHRoaXMtPmJ1dHRvbigpOwotICAgIExvY2FsQ3VycmVudEdyYXBo
aWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotCi0gICAgLy8gRGV0
ZXJtaW5lIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG5lZWRlZCBmb3IgdGhlIGNvbnRyb2wgYW5kIHBy
ZXBhcmUgdGhlIGNlbGwgZm9yIHBhaW50aW5nLgotICAgIHNldEJ1dHRvbkNlbGxTdGF0ZShvLCBy
KTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0KLSAgICAvLyBXZSBpbmZsYXRl
IHRoZSByZWN0IGFzIG5lZWRlZCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGluY2x1ZGVkIGluIHRo
ZSBjZWxsIHRvIGFjY29tbW9kYXRlIHRoZSBidXR0b24KLSAgICAvLyBzaGFkb3cuICBXZSBkb24n
dCBjb25zaWRlciB0aGlzIHBhcnQgb2YgdGhlIGJvdW5kcyBvZiB0aGUgY29udHJvbCBpbiBXZWJL
aXQuCi0gICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwot
ICAgIEludFNpemUgc2l6ZSA9IGJ1dHRvblNpemVzKClbW2J1dHRvbiBjb250cm9sU2l6ZV1dOwot
ICAgIHNpemUuc2V0V2lkdGgoci53aWR0aCgpKTsKLSAgICBzaXplLnNldEhlaWdodChzaXplLmhl
aWdodCgpICogem9vbUxldmVsKTsKLSAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHI7Ci0gICAg
aWYgKFtidXR0b24gYmV6ZWxTdHlsZV0gPT0gTlNSb3VuZGVkQmV6ZWxTdHlsZSkgewotICAgICAg
ICAvLyBDZW50ZXIgdGhlIGJ1dHRvbiB3aXRoaW4gdGhlIGF2YWlsYWJsZSBzcGFjZS4KLSAgICAg
ICAgaWYgKGluZmxhdGVkUmVjdC5oZWlnaHQoKSA+IHNpemUuaGVpZ2h0KCkpIHsKLSAgICAgICAg
ICAgIGluZmxhdGVkUmVjdC5zZXRZKGluZmxhdGVkUmVjdC55KCkgKyAoaW5mbGF0ZWRSZWN0Lmhl
aWdodCgpIC0gc2l6ZS5oZWlnaHQoKSkgLyAyKTsKLSAgICAgICAgICAgIGluZmxhdGVkUmVjdC5z
ZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBOb3cgaW5m
bGF0ZSBpdCB0byBhY2NvdW50IGZvciB0aGUgc2hhZG93LgotICAgICAgICBpbmZsYXRlZFJlY3Qg
PSBpbmZsYXRlUmVjdChpbmZsYXRlZFJlY3QsIHNpemUsIGJ1dHRvbk1hcmdpbnMoKSwgem9vbUxl
dmVsKTsKLQotICAgICAgICBpZiAoem9vbUxldmVsICE9IDEuMGYpIHsKLSAgICAgICAgICAgIGlu
ZmxhdGVkUmVjdC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7Ci0g
ICAgICAgICAgICBpbmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAv
IHpvb21MZXZlbCk7Ci0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKGlu
ZmxhdGVkUmVjdC54KCksIGluZmxhdGVkUmVjdC55KCkpOwotICAgICAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOwotICAgICAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRSZWN0LngoKSwgLWlu
ZmxhdGVkUmVjdC55KCkpOwotICAgICAgICB9Ci0gICAgfSAKLQotICAgIE5TVmlldyAqdmlldyA9
IG8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3VtZW50VmlldygpOwotICAgIE5TV2luZG93ICp3
aW5kb3cgPSBbdmlldyB3aW5kb3ddOwotICAgIE5TQnV0dG9uQ2VsbCAqcHJldmlvdXNEZWZhdWx0
QnV0dG9uQ2VsbCA9IFt3aW5kb3cgZGVmYXVsdEJ1dHRvbkNlbGxdOwotCi0gICAgaWYgKGlzRGVm
YXVsdChvKSAmJiBbd2luZG93IGlzS2V5V2luZG93XSkgewotICAgICAgICBbd2luZG93IHNldERl
ZmF1bHRCdXR0b25DZWxsOmJ1dHRvbl07Ci0gICAgICAgIHdrQWR2YW5jZURlZmF1bHRCdXR0b25Q
dWxzZUFuaW1hdGlvbihidXR0b24pOwotICAgIH0gZWxzZSBpZiAoW3ByZXZpb3VzRGVmYXVsdEJ1
dHRvbkNlbGwgaXNFcXVhbDpidXR0b25dKQotICAgICAgICBbd2luZG93IHNldERlZmF1bHRCdXR0
b25DZWxsOm5pbF07Ci0KLSAgICBbYnV0dG9uIGRyYXdXaXRoRnJhbWU6TlNSZWN0KGluZmxhdGVk
UmVjdCkgaW5WaWV3OnZpZXddOwotICAgIFtidXR0b24gc2V0Q29udHJvbFZpZXc6bmlsXTsKLQot
ICAgIGlmICghW3ByZXZpb3VzRGVmYXVsdEJ1dHRvbkNlbGwgaXNFcXVhbDpidXR0b25dKQotICAg
ICAgICBbd2luZG93IHNldERlZmF1bHRCdXR0b25DZWxsOnByZXZpb3VzRGVmYXVsdEJ1dHRvbkNl
bGxdOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByKQogewogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRl
eHQocGFpbnRJbmZvLmNvbnRleHQpOwpAQCAtMTA2NSw2ICs4ODMsMTIgQEAgYm9vbCBSZW5kZXJU
aGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAorc3Rh
dGljIGNvbnN0IEludFNpemUqIG1lbnVMaXN0QnV0dG9uU2l6ZXMoKQoreworICAgIHN0YXRpYyBj
b25zdCBJbnRTaXplIHNpemVzWzNdID0geyBJbnRTaXplKDAsIDIxKSwgSW50U2l6ZSgwLCAxOCks
IEludFNpemUoMCwgMTUpIH07CisgICAgcmV0dXJuIHNpemVzOworfQorCiB2b2lkIFJlbmRlclRo
ZW1lTWFjOjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0CiB7CiAgICAgTlNDb250cm9sU2l6
ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSk7CkBAIC0xMDgzLDcgKzkw
Nyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUKICAgICBzdHls
ZS0+c2V0Q29sb3IoZS0+aXNFbmFibGVkKCkgPyBzdGF0aWNfY2FzdDxSR0JBMzI+KENvbG9yOjpi
bGFjaykgOiBDb2xvcjo6ZGFya0dyYXkpOwogCiAgICAgLy8gU2V0IHRoZSBidXR0b24ncyB2ZXJ0
aWNhbCBzaXplLgotICAgIHNldEJ1dHRvblNpemUoc3R5bGUpOworICAgIHNldFNpemVGcm9tRm9u
dChzdHlsZSwgbWVudUxpc3RCdXR0b25TaXplcygpKTsKIAogICAgIC8vIE91ciBmb250IGlzIGxv
Y2tlZCB0byB0aGUgYXBwcm9wcmlhdGUgc3lzdGVtIGZvbnQgc2l6ZSBmb3IgdGhlIGNvbnRyb2wu
ICBUbyBjbGFyaWZ5LCB3ZSBmaXJzdCB1c2UgdGhlIENTUy1zcGVjaWZpZWQgZm9udCB0byBmaWd1
cmUgb3V0CiAgICAgLy8gYSByZWFzb25hYmxlIGNvbnRyb2wgc2l6ZSwgYnV0IG9uY2UgdGhhdCBj
b250cm9sIHNpemUgaXMgZGV0ZXJtaW5lZCwgd2UgdGhyb3cgdGhhdCBmb250IGF3YXkgYW5kIHVz
ZSB0aGUgYXBwcm9wcmlhdGUKQEAgLTE2MzAsMTcgKzE0NTQsNiBAQCBib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludE1lZGlhU2xpZGVyVGh1CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1OU0J1dHRv
bkNlbGwqIFJlbmRlclRoZW1lTWFjOjpidXR0b24oKSBjb25zdAotewotICAgIGlmICghbV9idXR0
b24pIHsKLSAgICAgICAgbV9idXR0b24uYWRvcHROUyhbW05TQnV0dG9uQ2VsbCBhbGxvY10gaW5p
dF0pOwotICAgICAgICBbbV9idXR0b24uZ2V0KCkgc2V0VGl0bGU6bmlsXTsKLSAgICAgICAgW21f
YnV0dG9uLmdldCgpIHNldEJ1dHRvblR5cGU6TlNNb21lbnRhcnlQdXNoSW5CdXR0b25dOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gbV9idXR0b24uZ2V0KCk7Ci19Ci0KIE5TUG9wVXBCdXR0b25D
ZWxsKiBSZW5kZXJUaGVtZU1hYzo6cG9wdXBCdXR0b24oKSBjb25zdAogewogICAgIGlmICghbV9w
b3B1cEJ1dHRvbikgewpJbmRleDogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDM3NzYxKQor
KysgcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0Myw2
ICs1NDMsNyBAQCBwdWJsaWM6CiAgICAgTGVuZ3RoIG1hcmdpbkxlZnQoKSBjb25zdCB7IHJldHVy
biBzdXJyb3VuZC0+bWFyZ2luLmxlZnQoKTsgfQogICAgIExlbmd0aCBtYXJnaW5SaWdodCgpIGNv
bnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5tYXJnaW4ucmlnaHQoKTsgfQogCisgICAgTGVuZ3RoQm94
IHBhZGRpbmdCb3goKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+cGFkZGluZzsgfQogICAgIExl
bmd0aCBwYWRkaW5nVG9wKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPnBhZGRpbmcudG9wKCk7
IH0KICAgICBMZW5ndGggcGFkZGluZ0JvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5w
YWRkaW5nLmJvdHRvbSgpOyB9CiAgICAgTGVuZ3RoIHBhZGRpbmdMZWZ0KCkgY29uc3QgeyByZXR1
cm4gc3Vycm91bmQtPnBhZGRpbmcubGVmdCgpOyB9CkBAIC04MjcsNiArODI4LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0TWFyZ2luUmlnaHQoTGVuZ3RoIHYpIHsgU0VUX1ZBUihzdXJyb3VuZCwg
bWFyZ2luLm1fcmlnaHQsIHYpIH0KIAogICAgIHZvaWQgcmVzZXRQYWRkaW5nKCkgeyBTRVRfVkFS
KHN1cnJvdW5kLCBwYWRkaW5nLCBMZW5ndGhCb3goQXV0bykpIH0KKyAgICB2b2lkIHNldFBhZGRp
bmdCb3goY29uc3QgTGVuZ3RoQm94JiBiKSB7IFNFVF9WQVIoc3Vycm91bmQsIHBhZGRpbmcsIGIp
IH0KICAgICB2b2lkIHNldFBhZGRpbmdUb3AoTGVuZ3RoIHYpIHsgU0VUX1ZBUihzdXJyb3VuZCwg
cGFkZGluZy5tX3RvcCwgdikgfQogICAgIHZvaWQgc2V0UGFkZGluZ0JvdHRvbShMZW5ndGggdikg
eyBTRVRfVkFSKHN1cnJvdW5kLCBwYWRkaW5nLm1fYm90dG9tLCB2KSB9CiAgICAgdm9pZCBzZXRQ
YWRkaW5nTGVmdChMZW5ndGggdikgeyBTRVRfVkFSKHN1cnJvdW5kLCBwYWRkaW5nLm1fbGVmdCwg
dikgfQo=
</data>
<flag name="review"
          id="11203"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24573</attachid>
            <date>2008-10-22 14:38:34 -0700</date>
            <delta_ts>2008-10-22 14:41:16 -0700</delta_ts>
            <desc>Patch #3</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>42838</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM3Nzg5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMDgtMTAt
MjIgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTc3NQorCisgICAgICAgIENvbnZlcnQgYnV0
dG9ucyBvdmVyIHRvIHVzZSB0aGUgbmV3IFRoZW1lIEFQSSBvbiBPUyBYLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoQm94
Lmg6CisgICAgICAgIChXZWJDb3JlOjpMZW5ndGhCb3g6Okxlbmd0aEJveCk6CisgICAgICAgICog
cGxhdGZvcm0vVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OmNvbnRyb2xCb3Jk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OmNvbnRyb2xQYWRkaW5nKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9UaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OmNvbnRyb2xGb250
KToKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lOjpjb250cm9sU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUaGVtZTo6bWluQ29udHJvbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OmNv
bnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UaGVt
ZU1hYy5oOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVNYWM6OmNvbnRyb2xSZXF1aXJlc1ByZVdo
aXRlU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UaGVtZU1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OmNoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpyYWRpb1NpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6YnV0dG9uU2l6ZXMpOgorICAgICAgICAoV2ViQ29yZTo6YnV0dG9u
TWFyZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpidXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6
cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVNYWM6OmNvbnRyb2xGb250KToK
KyAgICAgICAgKFdlYkNvcmU6OlRoZW1lTWFjOjpjb250cm9sU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUaGVtZU1hYzo6bWluQ29udHJvbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVN
YWM6OmNvbnRyb2xCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVNYWM6OmNvbnRyb2xQ
YWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lTWFjOjppbmZsYXRlQ29udHJvbFBhaW50
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZU1hYzo6cGFpbnQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6
YWRqdXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpjb250cm9sU3RhdGVzRm9yUmVuZGVyZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzRGVmYXVsdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0UmFkaW9TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2V0UmFkaW9T
aXplKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0UmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6bWVudUxpc3RCdXR0
b25TaXplcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxp
c3RTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6cGFkZGluZ0JveCk6CisgICAgICAgIChXZWJD
b3JlOjpJbmhlcml0ZWRGbGFnczo6c2V0UGFkZGluZ0JveCk6CisKIDIwMDgtMTAtMjIgIENocmlz
IE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUg
SHlhdHQKSW5kZXg6IHBsYXRmb3JtL0xlbmd0aEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3Jt
L0xlbmd0aEJveC5oCShyZXZpc2lvbiAzNzc4OSkKKysrIHBsYXRmb3JtL0xlbmd0aEJveC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCwyMiBAQCBzdHJ1Y3QgTGVuZ3RoQm94IHsKICAgICB7
CiAgICAgfQogCisgICAgTGVuZ3RoQm94KGludCB2KQorICAgICAgICA6IG1fbGVmdChMZW5ndGgo
diwgRml4ZWQpKQorICAgICAgICAsIG1fcmlnaHQoTGVuZ3RoKHYsIEZpeGVkKSkKKyAgICAgICAg
LCBtX3RvcChMZW5ndGgodiwgRml4ZWQpKQorICAgICAgICAsIG1fYm90dG9tKExlbmd0aCh2LCBG
aXhlZCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBMZW5ndGhCb3goaW50IHQsIGludCByLCBp
bnQgYiwgaW50IGwpCisgICAgICAgIDogbV9sZWZ0KExlbmd0aChsLCBGaXhlZCkpCisgICAgICAg
ICwgbV9yaWdodChMZW5ndGgociwgRml4ZWQpKQorICAgICAgICAsIG1fdG9wKExlbmd0aCh0LCBG
aXhlZCkpCisgICAgICAgICwgbV9ib3R0b20oTGVuZ3RoKGIsIEZpeGVkKSkKKyAgICB7CisgICAg
fQorCiAgICAgTGVuZ3RoIGxlZnQoKSBjb25zdCB7IHJldHVybiBtX2xlZnQ7IH0KICAgICBMZW5n
dGggcmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0OyB9CiAgICAgTGVuZ3RoIHRvcCgpIGNv
bnN0IHsgcmV0dXJuIG1fdG9wOyB9CkluZGV4OiBwbGF0Zm9ybS9UaGVtZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcGxhdGZvcm0vVGhlbWUuY3BwCShyZXZpc2lvbiAzNzc4OSkKKysrIHBsYXRmb3JtL1Ro
ZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWJvb2wgVGhlbWU6OmNvbnRyb2xTdXBwb3J0c0JvcmRlcihDb250cm9sUGFydCBw
YXJ0KSBjb25zdAorTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBh
cnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZh
Y3RvcikgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBQdXNoQnV0
dG9uUGFydDoKQEAgLTM2LDIyICszNiwyMiBAQCBib29sIFRoZW1lOjpjb250cm9sU3VwcG9ydHNC
b3JkZXIoQ29udHJvCiAgICAgICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgogICAgICAgICBjYXNl
IENoZWNrYm94UGFydDoKICAgICAgICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gTGVuZ3RoQm94KDApOwogICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gem9vbWVk
Qm94OwogICAgIH0KIH0KIAotYm9vbCBUaGVtZTo6Y29udHJvbFN1cHBvcnRzUGFkZGluZyhDb250
cm9sUGFydCBwYXJ0KSBjb25zdAorTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sUGFkZGluZyhDb250
cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZs
b2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNh
c2UgTWVudWxpc3RQYXJ0OgogICAgICAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKICAgICAg
ICAgY2FzZSBDaGVja2JveFBhcnQ6CiAgICAgICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIExlbmd0aEJveCgwKTsKICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJu
IHpvb21lZEJveDsKICAgICB9CiB9CiAKSW5kZXg6IHBsYXRmb3JtL1RoZW1lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcGxhdGZvcm0vVGhlbWUuaAkocmV2aXNpb24gMzc3ODkpCisrKyBwbGF0Zm9ybS9UaGVt
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIK
ICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkxlbmd0
aEJveC5oIgogI2luY2x1ZGUgIkxlbmd0aFNpemUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgIlRoZW1lVHlwZXMuaCIKQEAgLTc5LDExICs4MCwyMiBAQCBwdWJsaWM6
CiAKICAgICAvLyBNZXRob2RzIHVzZWQgdG8gYWRqdXN0IHRoZSBSZW5kZXJTdHlsZXMgb2YgY29u
dHJvbHMuCiAgICAgCisgICAgLy8gVGhlIGZvbnQgZGVzY3JpcHRpb24gcmVzdWx0IHNob3VsZCBo
YXZlIGEgem9vbWVkIGZvbnQgc2l6ZS4KKyAgICB2aXJ0dWFsIEZvbnREZXNjcmlwdGlvbiBjb250
cm9sRm9udChDb250cm9sUGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgem9vbUZhY3Rvcikg
Y29uc3QgeyByZXR1cm4gZm9udC5mb250RGVzY3JpcHRpb24oKTsgfQorICAgIAogICAgIC8vIFRo
ZSBzaXplIGhlcmUgaXMgaW4gem9vbWVkIGNvb3JkaW5hdGVzIGFscmVhZHkuICBJZiBhIG5ldyBz
aXplIGlzIHJldHVybmVkLCBpdCBhbHNvIG5lZWRzIHRvIGJlIGluIHpvb21lZCBjb29yZGluYXRl
cy4KICAgICB2aXJ0dWFsIExlbmd0aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0
IEZvbnQmLCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKSBj
b25zdCB7IHJldHVybiB6b29tZWRTaXplOyB9Ci0gICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBw
b3J0c0JvcmRlcihDb250cm9sUGFydCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGNvbnRyb2xT
dXBwb3J0c1BhZGRpbmcoQ29udHJvbFBhcnQpIGNvbnN0OwogICAgIAorICAgIC8vIFJldHVybnMg
dGhlIG1pbmltdW0gc2l6ZSBmb3IgYSBjb250cm9sIGluIHpvb21lZCBjb29yZGluYXRlcy4gIAor
ICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNv
bnN0IEZvbnQmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdCB7IHJldHVybiBMZW5ndGhTaXplKExl
bmd0aCgwLCBGaXhlZCksIExlbmd0aCgwLCBGaXhlZCkpOyB9CisgICAgCisgICAgLy8gQWxsb3dz
IHRoZSB0aGVtZSB0byBtb2RpZnkgdGhlIGV4aXN0aW5nIHBhZGRpbmcvYm9yZGVyLgorICAgIHZp
cnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Jiwg
Y29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAg
IHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQm
LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7Cisg
ICAgCisgICAgLy8gV2hldGhlciBvciBub3Qgd2hpdGVzcGFjZTogcHJlIHNob3VsZCBiZSBmb3Jj
ZWQgb24gYWx3YXlzLgorICAgIHZpcnR1YWwgYm9vbCBjb250cm9sUmVxdWlyZXNQcmVXaGl0ZVNw
YWNlKENvbnRyb2xQYXJ0KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgLy8gTWV0aG9k
IGZvciBwYWludGluZyBhIGNvbnRyb2wuICBUaGUgcmVjdCBpcyBpbiB6b29tZWQgY29vcmRpbmF0
ZXMuCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzLCBH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFj
dG9yLCBTY3JvbGxWaWV3KikgY29uc3QgeyB9OwogCkluZGV4OiBwbGF0Zm9ybS9tYWMvVGhlbWVN
YWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAkocmV2aXNpb24gMzc3
ODkpCisrKyBwbGF0Zm9ybS9tYWMvVGhlbWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCAr
MzcsMTYgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb25B
ZGp1c3RtZW50KENvbnRyb2xQYXJ0KSBjb25zdDsKIAotICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBj
b250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aFNpemUmLCBm
bG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZvbnREZXNjcmlwdGlvbiBjb250
cm9sRm9udChDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0
OwogICAgIAorICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZShDb250cm9sUGFydCwg
Y29uc3QgRm9udCYsIGNvbnN0IExlbmd0aFNpemUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsK
KyAgICB2aXJ0dWFsIExlbmd0aFNpemUgbWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBj
b25zdCBGb250JiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIExlbmd0
aEJveCBjb250cm9sUGFkZGluZyhDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0
aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIExl
bmd0aEJveCBjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVu
Z3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworCisgICAgdmlydHVh
bCBib29sIGNvbnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29udHJvbFBhcnQgcGFydCkgY29u
c3QgeyByZXR1cm4gcGFydCA9PSBQdXNoQnV0dG9uUGFydDsgfQorCiAgICAgdmlydHVhbCB2b2lk
IHBhaW50KENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzLCBHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBJbnRSZWN0JiwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyopIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBpbmZsYXRlQ29udHJvbFBhaW50UmVjdChDb250cm9sUGFydCwgQ29udHJvbFN0
YXRlcywgSW50UmVjdCYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OwogfTsKSW5kZXg6IHBsYXRm
b3JtL21hYy9UaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9tYWMvVGhlbWVNYWMu
bW0JKHJldmlzaW9uIDM3Nzg5KQorKysgcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0yNywxMCArMjcsMTQgQEAKICNpbXBvcnQgIlRoZW1lTWFjLmgiCiAKICNpbXBv
cnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiTG9jYWxDdXJyZW50R3JhcGhpY3NDb250
ZXh0LmgiCiAjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCisjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50
ZXJmYWNlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKKy8vIEZJWE1FOiBEZWZhdWx0IGJ1
dHRvbnMgcmVhbGx5IHNob3VsZCBiZSBtb3JlIGxpa2UgcHVzaCBidXR0b25zIGFuZCBub3QgbGlr
ZSBidXR0b25zLgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVudW0gewpAQCAtMTU3LDcgKzE2
MSw3IEBAIHN0YXRpYyBjb25zdCBpbnQqIGNoZWNrYm94TWFyZ2lucyhOU0NvbnQKICAgICByZXR1
cm4gbWFyZ2luc1tjb250cm9sU2l6ZV07CiB9CiAKLXN0YXRpYyBMZW5ndGhTaXplIGNoZWNrYm94
U2l6ZShDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhTaXpl
JiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQorc3RhdGljIExlbmd0aFNpemUgY2hlY2ti
b3hTaXplKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZs
b2F0IHpvb21GYWN0b3IpCiB7CiAgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJv
dGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KICAgICBpZiAoIXpvb21l
ZFNpemUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICF6b29tZWRTaXplLmhlaWdodCgp
LmlzSW50cmluc2ljT3JBdXRvKCkpCkBAIC0yMzQsNyArMjM4LDcgQEAgc3RhdGljIGNvbnN0IGlu
dCogcmFkaW9NYXJnaW5zKE5TQ29udHJvbAogICAgIHJldHVybiBtYXJnaW5zW2NvbnRyb2xTaXpl
XTsKIH0KIAotc3RhdGljIExlbmd0aFNpemUgcmFkaW9TaXplKENvbnRyb2xQYXJ0IHBhcnQsIGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpvb21G
YWN0b3IpCitzdGF0aWMgTGVuZ3RoU2l6ZSByYWRpb1NpemUoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgem9vbUZhY3RvcikKIHsKICAgICAvLyBJ
ZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBu
b3RoaW5nIHRvIGRvLgogICAgIGlmICghem9vbWVkU2l6ZS53aWR0aCgpLmlzSW50cmluc2ljT3JB
dXRvKCkgJiYgIXpvb21lZFNpemUuaGVpZ2h0KCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKQEAgLTI5
MCw2ICsyOTQsMTA0IEBAIHN0YXRpYyB2b2lkIHBhaW50UmFkaW8oQ29udHJvbFN0YXRlcyBzdGEK
ICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKKy8vIEJ1dHRvbnMKKworLy8gQnV0dG9ucyBy
ZWFsbHkgb25seSBjb25zdHJhaW4gaGVpZ2h0LiAgVGhleSByZXNwZWN0IHdpZHRoLgorc3RhdGlj
IGNvbnN0IEludFNpemUqIGJ1dHRvblNpemVzKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgSW50U2l6
ZSBzaXplc1szXSA9IHsgSW50U2l6ZSgwLCAyMSksIEludFNpemUoMCwgMTgpLCBJbnRTaXplKDAs
IDE1KSB9OworICAgIHJldHVybiBzaXplczsKK30KKworc3RhdGljIGNvbnN0IGludCogYnV0dG9u
TWFyZ2lucyhOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplKQoreworICAgIHN0YXRpYyBjb25zdCBp
bnQgbWFyZ2luc1szXVs0XSA9CisgICAgeworICAgICAgICB7IDQsIDYsIDcsIDYgfSwKKyAgICAg
ICAgeyA0LCA1LCA2LCA1IH0sCisgICAgICAgIHsgMCwgMSwgMSwgMSB9LAorICAgIH07CisgICAg
cmV0dXJuIG1hcmdpbnNbY29udHJvbFNpemVdOworfQorCitzdGF0aWMgTlNCdXR0b25DZWxsKiBi
dXR0b24oQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyBzdGF0ZXMsIGNvbnN0IEludFJl
Y3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IpCit7CisgICAgc3RhdGljIE5TQnV0dG9u
Q2VsbCAqYnV0dG9uQ2VsbDsKKyAgICBzdGF0aWMgYm9vbCBkZWZhdWx0QnV0dG9uOworICAgIGlm
ICghYnV0dG9uQ2VsbCkgeworICAgICAgICBidXR0b25DZWxsID0gW1tOU0J1dHRvbkNlbGwgYWxs
b2NdIGluaXRdOworICAgICAgICBbYnV0dG9uQ2VsbCBzZXRUaXRsZTpuaWxdOworICAgICAgICBb
YnV0dG9uQ2VsbCBzZXRCdXR0b25UeXBlOk5TTW9tZW50YXJ5UHVzaEluQnV0dG9uXTsKKyAgICB9
CisKKyAgICAvLyBTZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIHJlY3RhbmdsZSB3
ZSdyZSBwYWludGluZyBpbnRvLgorICAgIGlmIChwYXJ0ID09IFNxdWFyZUJ1dHRvblBhcnQgfHwg
em9vbWVkUmVjdC5oZWlnaHQoKSA+IGJ1dHRvblNpemVzKClbTlNSZWd1bGFyQ29udHJvbFNpemVd
LmhlaWdodCgpICogem9vbUZhY3RvcikgeworICAgICAgICAvLyBVc2UgdGhlIHNxdWFyZSBidXR0
b24KKyAgICAgICAgaWYgKFtidXR0b25DZWxsIGJlemVsU3R5bGVdICE9IE5TU2hhZG93bGVzc1Nx
dWFyZUJlemVsU3R5bGUpCisgICAgICAgICAgICBbYnV0dG9uQ2VsbCBzZXRCZXplbFN0eWxlOk5T
U2hhZG93bGVzc1NxdWFyZUJlemVsU3R5bGVdOworICAgIH0gZWxzZSBpZiAoW2J1dHRvbkNlbGwg
YmV6ZWxTdHlsZV0gIT0gTlNSb3VuZGVkQmV6ZWxTdHlsZSkKKyAgICAgICAgW2J1dHRvbkNlbGwg
c2V0QmV6ZWxTdHlsZTpOU1JvdW5kZWRCZXplbFN0eWxlXTsKKworICAgIHNldENvbnRyb2xTaXpl
KGJ1dHRvbkNlbGwsIGJ1dHRvblNpemVzKCksIHpvb21lZFJlY3Quc2l6ZSgpLCB6b29tRmFjdG9y
KTsKKworICAgIGlmIChkZWZhdWx0QnV0dG9uICE9IChzdGF0ZXMgJiBEZWZhdWx0U3RhdGUpKSB7
CisgICAgICAgIGRlZmF1bHRCdXR0b24gPSAhZGVmYXVsdEJ1dHRvbjsKKyAgICAgICAgW2J1dHRv
bkNlbGwgc2V0S2V5RXF1aXZhbGVudDooZGVmYXVsdEJ1dHRvbiA/IEAiXHIiIDogQCIiKV07Cisg
ICAgfQorCisgICAgLy8gVXBkYXRlIHRoZSB2YXJpb3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgor
ICAgIHVwZGF0ZVN0YXRlcyhidXR0b25DZWxsLCBzdGF0ZXMpOworICAgIAorICAgIHJldHVybiBi
dXR0b25DZWxsOworfQorCitzdGF0aWMgdm9pZCBwYWludEJ1dHRvbihDb250cm9sUGFydCBwYXJ0
LCBDb250cm9sU3RhdGVzIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KiBzY3JvbGxW
aWV3KQoreworICAgIC8vIERldGVybWluZSB0aGUgd2lkdGggYW5kIGhlaWdodCBuZWVkZWQgZm9y
IHRoZSBjb250cm9sIGFuZCBwcmVwYXJlIHRoZSBjZWxsIGZvciBwYWludGluZy4KKyAgICBOU0J1
dHRvbkNlbGwgKmJ1dHRvbkNlbGwgPSBidXR0b24ocGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6
b29tRmFjdG9yKTsKKyAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0
KGNvbnRleHQpOworCisgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IFtidXR0b25DZWxs
IGNvbnRyb2xTaXplXTsKKyAgICBJbnRTaXplIHpvb21lZFNpemUgPSBidXR0b25TaXplcygpW2Nv
bnRyb2xTaXplXTsKKyAgICB6b29tZWRTaXplLnNldFdpZHRoKHpvb21lZFJlY3Qud2lkdGgoKSk7
IC8vIEJ1dHRvbnMgZG9uJ3QgZXZlciBjb25zdHJhaW4gd2lkdGgsIHNvIHRoZSB6b29tZWQgd2lk
dGggY2FuIGp1c3QgYmUgaG9ub3JlZC4KKyAgICB6b29tZWRTaXplLnNldEhlaWdodCh6b29tZWRT
aXplLmhlaWdodCgpICogem9vbUZhY3Rvcik7CisgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSB6
b29tZWRSZWN0OworICAgIGlmIChbYnV0dG9uQ2VsbCBiZXplbFN0eWxlXSA9PSBOU1JvdW5kZWRC
ZXplbFN0eWxlKSB7CisgICAgICAgIC8vIENlbnRlciB0aGUgYnV0dG9uIHdpdGhpbiB0aGUgYXZh
aWxhYmxlIHNwYWNlLgorICAgICAgICBpZiAoaW5mbGF0ZWRSZWN0LmhlaWdodCgpID4gem9vbWVk
U2l6ZS5oZWlnaHQoKSkgeworICAgICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFkoaW5mbGF0ZWRS
ZWN0LnkoKSArIChpbmZsYXRlZFJlY3QuaGVpZ2h0KCkgLSB6b29tZWRTaXplLmhlaWdodCgpKSAv
IDIpOworICAgICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldEhlaWdodCh6b29tZWRTaXplLmhlaWdo
dCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyBpbmZsYXRlIGl0IHRvIGFjY291bnQg
Zm9yIHRoZSBzaGFkb3cuCisgICAgICAgIGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KGluZmxh
dGVkUmVjdCwgem9vbWVkU2l6ZSwgYnV0dG9uTWFyZ2lucyhjb250cm9sU2l6ZSksIHpvb21GYWN0
b3IpOworCisgICAgICAgIGlmICh6b29tRmFjdG9yICE9IDEuMGYpIHsKKyAgICAgICAgICAgIGlu
ZmxhdGVkUmVjdC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21GYWN0b3IpOwor
ICAgICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldEhlaWdodChpbmZsYXRlZFJlY3QuaGVpZ2h0KCkg
LyB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShpbmZsYXRlZFJl
Y3QueCgpLCBpbmZsYXRlZFJlY3QueSgpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEZs
b2F0U2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CisgICAgICAgICAgICBjb250ZXh0LT50
cmFuc2xhdGUoLWluZmxhdGVkUmVjdC54KCksIC1pbmZsYXRlZFJlY3QueSgpKTsKKyAgICAgICAg
fQorICAgIH0gCisKKyAgICBOU1ZpZXcgKnZpZXcgPSBzY3JvbGxWaWV3LT5kb2N1bWVudFZpZXco
KTsKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gW3ZpZXcgd2luZG93XTsKKyAgICBOU0J1dHRvbkNl
bGwgKnByZXZpb3VzRGVmYXVsdEJ1dHRvbkNlbGwgPSBbd2luZG93IGRlZmF1bHRCdXR0b25DZWxs
XTsKKworICAgIGlmICgoc3RhdGVzICYgRGVmYXVsdFN0YXRlKSAmJiBbd2luZG93IGlzS2V5V2lu
ZG93XSkgeworICAgICAgICBbd2luZG93IHNldERlZmF1bHRCdXR0b25DZWxsOmJ1dHRvbkNlbGxd
OworICAgICAgICB3a0FkdmFuY2VEZWZhdWx0QnV0dG9uUHVsc2VBbmltYXRpb24oYnV0dG9uQ2Vs
bCk7CisgICAgfSBlbHNlIGlmIChbcHJldmlvdXNEZWZhdWx0QnV0dG9uQ2VsbCBpc0VxdWFsOmJ1
dHRvbkNlbGxdKQorICAgICAgICBbd2luZG93IHNldERlZmF1bHRCdXR0b25DZWxsOm5pbF07CisK
KyAgICBbYnV0dG9uQ2VsbCBkcmF3V2l0aEZyYW1lOk5TUmVjdChpbmZsYXRlZFJlY3QpIGluVmll
dzp2aWV3XTsKKyAgICBbYnV0dG9uQ2VsbCBzZXRDb250cm9sVmlldzpuaWxdOworCisgICAgaWYg
KCFbcHJldmlvdXNEZWZhdWx0QnV0dG9uQ2VsbCBpc0VxdWFsOmJ1dHRvbkNlbGxdKQorICAgICAg
ICBbd2luZG93IHNldERlZmF1bHRCdXR0b25DZWxsOnByZXZpb3VzRGVmYXVsdEJ1dHRvbkNlbGxd
OworfQorCiAvLyBUaGVtZSBvdmVycmlkZXMKIAogaW50IFRoZW1lTWFjOjpiYXNlbGluZVBvc2l0
aW9uQWRqdXN0bWVudChDb250cm9sUGFydCBwYXJ0KSBjb25zdApAQCAtMjk5LDI1ICs0MDEsODgg
QEAgaW50IFRoZW1lTWFjOjpiYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudAogICAgIHJldHVybiBU
aGVtZTo6YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQocGFydCk7CiB9CiAKK0ZvbnREZXNjcmlw
dGlvbiBUaGVtZU1hYzo6Y29udHJvbEZvbnQoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYg
Zm9udCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAg
ICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDogeworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9u
IGZvbnREZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29s
dXRlU2l6ZSh0cnVlKTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFt
aWx5KEZvbnREZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHkpOworCisgICAgICAgICAgICBOU0ZvbnQq
IG5zRm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXpl
Rm9yQ29udHJvbFNpemU6Y29udHJvbFNpemVGb3JGb250KGZvbnQpXV07CisgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoW25zRm9udCBmYW1pbHlOYW1l
XSk7CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFtuc0ZvbnQg
cG9pbnRTaXplXSAqIHpvb21GYWN0b3IpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dFNwZWNpZmllZFNpemUoW25zRm9udCBwb2ludFNpemVdICogem9vbUZhY3Rvcik7CisgICAgICAg
ICAgICByZXR1cm4gZm9udERlc2NyaXB0aW9uOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gVGhlbWU6OmNvbnRyb2xGb250KHBhcnQsIGZvbnQsIHpvb21G
YWN0b3IpOworICAgIH0KK30KKwogTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6Y29udHJvbFNpemUoQ29u
dHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVk
U2l6ZSwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAg
ICAgICAgY2FzZSBDaGVja2JveFBhcnQ6Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tib3hTaXpl
KHBhcnQsIGZvbnQsIHpvb21lZFNpemUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgcmV0dXJu
IGNoZWNrYm94U2l6ZShmb250LCB6b29tZWRTaXplLCB6b29tRmFjdG9yKTsKICAgICAgICAgY2Fz
ZSBSYWRpb1BhcnQ6Ci0gICAgICAgICAgICByZXR1cm4gcmFkaW9TaXplKHBhcnQsIGZvbnQsIHpv
b21lZFNpemUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgcmV0dXJuIHJhZGlvU2l6ZShmb250
LCB6b29tZWRTaXplLCB6b29tRmFjdG9yKTsKKyAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoK
KyAgICAgICAgICAgIC8vIEhlaWdodCBpcyByZXNldCB0byBhdXRvIHNvIHRoYXQgc3BlY2lmaWVk
IGhlaWdodHMgY2FuIGJlIGlnbm9yZWQuCisgICAgICAgICAgICByZXR1cm4gc2l6ZUZyb21Gb250
KGZvbnQsIExlbmd0aFNpemUoem9vbWVkU2l6ZS53aWR0aCgpLCBMZW5ndGgoKSksIHpvb21GYWN0
b3IsIGJ1dHRvblNpemVzKCkpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJu
IHpvb21lZFNpemU7CiAgICAgfQogfQogCitMZW5ndGhTaXplIFRoZW1lTWFjOjptaW5pbXVtQ29u
dHJvbFNpemUoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgem9vbUZh
Y3RvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAgICAgICAgY2FzZSBTcXVhcmVC
dXR0b25QYXJ0OgorICAgICAgICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgorICAgICAgICBjYXNl
IEJ1dHRvblBhcnQ6CisgICAgICAgICAgICByZXR1cm4gTGVuZ3RoU2l6ZShMZW5ndGgoMCwgRml4
ZWQpLCBMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PigxNSAqIHpvb21GYWN0b3IpLCBGaXhlZCkpOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFRoZW1lOjptaW5pbXVtQ29udHJv
bFNpemUocGFydCwgZm9udCwgem9vbUZhY3Rvcik7CisgICAgfQorfQorCitMZW5ndGhCb3ggVGhl
bWVNYWM6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoIChwYXJ0KSB7CisgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKKyAgICAg
ICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBCdXR0b25QYXJ0OgorICAg
ICAgICAgICAgcmV0dXJuIExlbmd0aEJveCgwLCB6b29tZWRCb3gucmlnaHQoKS52YWx1ZSgpLCAw
LCB6b29tZWRCb3gubGVmdCgpLnZhbHVlKCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIFRoZW1lOjpjb250cm9sQm9yZGVyKHBhcnQsIGZvbnQsIHpvb21lZEJveCwgem9v
bUZhY3Rvcik7CisgICAgfQorfQorCitMZW5ndGhCb3ggVGhlbWVNYWM6OmNvbnRyb2xQYWRkaW5n
KENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aEJveCYgem9v
bWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAoreworICAgIHN3aXRjaCAocGFydCkgewor
ICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OiB7CisgICAgICAgICAgICAvLyBKdXN0IHVzZSA4
cHguICBBcHBLaXQgd2FudHMgdG8gdXNlIDExcHggZm9yIG1pbmkgYnV0dG9ucywgYnV0IHRoYXQg
cGFkZGluZyBpcyBqdXN0IHRvbyBsYXJnZQorICAgICAgICAgICAgLy8gZm9yIHJlYWwtd29ybGQg
V2ViIHNpdGVzIChjcmVhdGluZyBhIGh1Z2UgbmVjZXNzYXJ5IG1pbmltdW0gd2lkdGggZm9yIGJ1
dHRvbnMgd2hvc2Ugc3BhY2UgaXMKKyAgICAgICAgICAgIC8vIGJ5IGRlZmluaXRpb24gY29uc3Ry
YWluZWQsIHNpbmNlIHdlIHNlbGVjdCBtaW5pIG9ubHkgZm9yIHNtYWxsIGNyYW1wZWQgZW52aXJv
bm1lbnRzLgorICAgICAgICAgICAgLy8gVGhpcyBhbHNvIGd1YXJhbnRlZXMgdGhlIEhUTUwgPGJ1
dHRvbj4gd2lsbCBtYXRjaCBvdXIgcmVuZGVyaW5nIGJ5IGRlZmF1bHQsIHNpbmNlIHdlJ3JlIHVz
aW5nIGEgY29uc2lzdGVudAorICAgICAgICAgICAgLy8gcGFkZGluZy4KKyAgICAgICAgICAgIGNv
bnN0IGludCBwYWRkaW5nID0gOCAqIHpvb21GYWN0b3I7CisgICAgICAgICAgICByZXR1cm4gTGVu
Z3RoQm94KDAsIHBhZGRpbmcsIDAsIHBhZGRpbmcpOworICAgICAgICB9CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gVGhlbWU6OmNvbnRyb2xQYWRkaW5nKHBhcnQsIGZvbnQs
IHpvb21lZEJveCwgem9vbUZhY3Rvcik7CisgICAgfQorfQorCiB2b2lkIFRoZW1lTWFjOjppbmZs
YXRlQ29udHJvbFBhaW50UmVjdChDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzIHN0YXRl
cywgSW50UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKIHsKICAgICBz
d2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBDaGVja2JveFBhcnQ6IHsKICAgICAgICAgICAg
IC8vIFdlIGluZmxhdGUgdGhlIHJlY3QgYXMgbmVlZGVkIHRvIGFjY291bnQgZm9yIHBhZGRpbmcg
aW5jbHVkZWQgaW4gdGhlIGNlbGwgdG8gYWNjb21tb2RhdGUgdGhlIGNoZWNrYm94CiAgICAgICAg
ICAgICAvLyBzaGFkb3ciIGFuZCB0aGUgY2hlY2suICBXZSBkb24ndCBjb25zaWRlciB0aGlzIHBh
cnQgb2YgdGhlIGJvdW5kcyBvZiB0aGUgY29udHJvbCBpbiBXZWJLaXQuCi0gICAgICAgICAgICBO
U0NlbGwqIGNlbGwgPSBjaGVja2JveChzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IpOwor
ICAgICAgICAgICAgTlNDZWxsICpjZWxsID0gY2hlY2tib3goc3RhdGVzLCB6b29tZWRSZWN0LCB6
b29tRmFjdG9yKTsKICAgICAgICAgICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBbY2Vs
bCBjb250cm9sU2l6ZV07CiAgICAgICAgICAgICBJbnRTaXplIHpvb21lZFNpemUgPSBjaGVja2Jv
eFNpemVzKClbY29udHJvbFNpemVdOwogICAgICAgICAgICAgem9vbWVkU2l6ZS5zZXRIZWlnaHQo
em9vbWVkU2l6ZS5oZWlnaHQoKSAqIHpvb21GYWN0b3IpOwpAQCAtMzI4LDcgKzQ5Myw3IEBAIHZv
aWQgVGhlbWVNYWM6OmluZmxhdGVDb250cm9sUGFpbnRSZWN0KEMKICAgICAgICAgY2FzZSBSYWRp
b1BhcnQ6IHsKICAgICAgICAgICAgIC8vIFdlIGluZmxhdGUgdGhlIHJlY3QgYXMgbmVlZGVkIHRv
IGFjY291bnQgZm9yIHBhZGRpbmcgaW5jbHVkZWQgaW4gdGhlIGNlbGwgdG8gYWNjb21tb2RhdGUg
dGhlIHJhZGlvIGJ1dHRvbgogICAgICAgICAgICAgLy8gc2hhZG93Ii4gIFdlIGRvbid0IGNvbnNp
ZGVyIHRoaXMgcGFydCBvZiB0aGUgYm91bmRzIG9mIHRoZSBjb250cm9sIGluIFdlYktpdC4KLSAg
ICAgICAgICAgIE5TQ2VsbCogY2VsbCA9IHJhZGlvKHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZh
Y3Rvcik7CisgICAgICAgICAgICBOU0NlbGwgKmNlbGwgPSByYWRpbyhzdGF0ZXMsIHpvb21lZFJl
Y3QsIHpvb21GYWN0b3IpOwogICAgICAgICAgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9
IFtjZWxsIGNvbnRyb2xTaXplXTsKICAgICAgICAgICAgIEludFNpemUgem9vbWVkU2l6ZSA9IHJh
ZGlvU2l6ZXMoKVtjb250cm9sU2l6ZV07CiAgICAgICAgICAgICB6b29tZWRTaXplLnNldEhlaWdo
dCh6b29tZWRTaXplLmhlaWdodCgpICogem9vbUZhY3Rvcik7CkBAIC0zMzYsNiArNTAxLDIxIEBA
IHZvaWQgVGhlbWVNYWM6OmluZmxhdGVDb250cm9sUGFpbnRSZWN0KEMKICAgICAgICAgICAgIHpv
b21lZFJlY3QgPSBpbmZsYXRlUmVjdCh6b29tZWRSZWN0LCB6b29tZWRTaXplLCByYWRpb01hcmdp
bnMoY29udHJvbFNpemUpLCB6b29tRmFjdG9yKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CisgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2UgRGVmYXVsdEJ1
dHRvblBhcnQ6CisgICAgICAgIGNhc2UgQnV0dG9uUGFydDogeworICAgICAgICAgICAgTlNCdXR0
b25DZWxsICpjZWxsID0gYnV0dG9uKHBhcnQsIHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3Rv
cik7CisgICAgICAgICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gW2NlbGwgY29udHJv
bFNpemVdOworCisgICAgICAgICAgICAvLyBXZSBpbmZsYXRlIHRoZSByZWN0IGFzIG5lZWRlZCB0
byBhY2NvdW50IGZvciB0aGUgQXF1YSBidXR0b24ncyBzaGFkb3cuCisgICAgICAgICAgICBpZiAo
W2NlbGwgYmV6ZWxTdHlsZV0gPT0gTlNSb3VuZGVkQmV6ZWxTdHlsZSkgeworICAgICAgICAgICAg
ICAgIEludFNpemUgem9vbWVkU2l6ZSA9IGJ1dHRvblNpemVzKClbY29udHJvbFNpemVdOworICAg
ICAgICAgICAgICAgIHpvb21lZFNpemUuc2V0SGVpZ2h0KHpvb21lZFNpemUuaGVpZ2h0KCkgKiB6
b29tRmFjdG9yKTsKKyAgICAgICAgICAgICAgICB6b29tZWRTaXplLnNldFdpZHRoKHpvb21lZFJl
Y3Qud2lkdGgoKSk7IC8vIEJ1dHRvbnMgZG9uJ3QgZXZlciBjb25zdHJhaW4gd2lkdGgsIHNvIHRo
ZSB6b29tZWQgd2lkdGggY2FuIGp1c3QgYmUgaG9ub3JlZC4KKyAgICAgICAgICAgICAgICB6b29t
ZWRSZWN0ID0gaW5mbGF0ZVJlY3Qoem9vbWVkUmVjdCwgem9vbWVkU2l6ZSwgYnV0dG9uTWFyZ2lu
cyhjb250cm9sU2l6ZSksIHpvb21GYWN0b3IpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTM1MCw2ICs1MzAsMTIgQEAgdm9pZCBUaGVtZU1hYzo6cGFpbnQoQ29udHJvbFBh
cnQgcGFydCwgQwogICAgICAgICBjYXNlIFJhZGlvUGFydDoKICAgICAgICAgICAgIHBhaW50UmFk
aW8oc3RhdGVzLCBjb250ZXh0LCB6b29tZWRSZWN0LCB6b29tRmFjdG9yLCBzY3JvbGxWaWV3KTsK
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgorICAgICAg
ICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgorICAgICAgICBjYXNlIEJ1dHRvblBhcnQ6CisgICAg
ICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKKyAgICAgICAgICAgIHBhaW50QnV0dG9uKHBhcnQs
IHN0YXRlcywgY29udGV4dCwgem9vbWVkUmVjdCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldyk7Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwog
ICAgIH0KSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gMzc3ODkpCisrKyByZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAi
Q1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRm9j
dXNDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCkBAIC02Miw5ICs2MywxMCBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RTdHls
ZShDU1NTdHlsZVNlCiAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKIAogICAgIGlm
IChVQUhhc0FwcGVhcmFuY2UgJiYgdGhlbWUoKS0+aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3Jk
ZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcikpIHsKLSAgICAgICAgaWYgKHBhcnQgPT0g
TWVudWxpc3RQYXJ0KQorICAgICAgICBpZiAocGFydCA9PSBNZW51bGlzdFBhcnQpIHsKICAgICAg
ICAgICAgIHN0eWxlLT5zZXRBcHBlYXJhbmNlKE1lbnVsaXN0QnV0dG9uUGFydCk7Ci0gICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHBhcnQgPSBNZW51bGlzdEJ1dHRvblBhcnQ7CisgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgc3R5bGUtPnNldEFwcGVhcmFuY2UoTm9Db250cm9sUGFydCk7CiAg
ICAgfQogCkBAIC03NSwxOSArNzcsODEgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUo
Q1NTU3R5bGVTZQogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7CiAgICAgCiAjaWYgVVNFKE5F
V19USEVNRSkKLSAgICBpZiAocGFydCA9PSBDaGVja2JveFBhcnQgfHwgcGFydCA9PSBSYWRpb1Bh
cnQpIHsKLSAgICAgICAgaWYgKCFtX3RoZW1lLT5jb250cm9sU3VwcG9ydHNCb3JkZXIocGFydCkp
Ci0gICAgICAgICAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLSAgICAgICAgaWYgKCFtX3RoZW1l
LT5jb250cm9sU3VwcG9ydHNQYWRkaW5nKHBhcnQpKQotICAgICAgICAgICAgc3R5bGUtPnJlc2V0
UGFkZGluZygpOworICAgIHN3aXRjaCAocGFydCkgeworICAgICAgICBjYXNlIENoZWNrYm94UGFy
dDoKKyAgICAgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6
CisgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBEZWZhdWx0QnV0
dG9uUGFydDoKKyAgICAgICAgY2FzZSBCdXR0b25QYXJ0OiB7CisgICAgICAgICAgICAvLyBCb3Jk
ZXIKKyAgICAgICAgICAgIExlbmd0aEJveCBib3JkZXJCb3goc3R5bGUtPmJvcmRlclRvcFdpZHRo
KCksIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgp
LCBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpOworICAgICAgICAgICAgYm9yZGVyQm94ID0gbV90
aGVtZS0+Y29udHJvbEJvcmRlcihwYXJ0LCBzdHlsZS0+Zm9udCgpLCBib3JkZXJCb3gsIHN0eWxl
LT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICAgICAgaWYgKGJvcmRlckJveC50b3AoKS52YWx1
ZSgpICE9IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJv
cmRlckJveC50b3AoKS52YWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0Qm9y
ZGVyVG9wV2lkdGgoYm9yZGVyQm94LnRvcCgpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyVG9wKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoYm9yZGVyQm94LnJpZ2h0KCkudmFsdWUoKSAhPSBzdHls
ZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJvcmRlckJveC5y
aWdodCgpLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRCb3JkZXJSaWdo
dFdpZHRoKGJvcmRlckJveC5yaWdodCgpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyUmlnaHQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChib3JkZXJCb3guYm90dG9tKCkudmFsdWUoKSAhPSBzdHls
ZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSkgeworICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRCb3Jk
ZXJCb3R0b21XaWR0aChib3JkZXJCb3guYm90dG9tKCkudmFsdWUoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKGJvcmRlckJveC5ib3R0b20oKS52YWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICBz
dHlsZS0+c2V0Qm9yZGVyQm90dG9tV2lkdGgoYm9yZGVyQm94LmJvdHRvbSgpLnZhbHVlKCkpOwor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnJlc2V0Qm9y
ZGVyQm90dG9tKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYm9yZGVyQm94Lmxl
ZnQoKS52YWx1ZSgpICE9IHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSkgeworICAgICAgICAgICAg
ICAgIHN0eWxlLT5zZXRCb3JkZXJMZWZ0V2lkdGgoYm9yZGVyQm94LmxlZnQoKS52YWx1ZSgpKTsK
KyAgICAgICAgICAgICAgICBpZiAoYm9yZGVyQm94LmxlZnQoKS52YWx1ZSgpKQorICAgICAgICAg
ICAgICAgICAgICBzdHlsZS0+c2V0Qm9yZGVyTGVmdFdpZHRoKGJvcmRlckJveC5sZWZ0KCkudmFs
dWUoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdHlsZS0+
cmVzZXRCb3JkZXJMZWZ0KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFBhZGRp
bmcKKyAgICAgICAgICAgIExlbmd0aEJveCBwYWRkaW5nQm94ID0gbV90aGVtZS0+Y29udHJvbFBh
ZGRpbmcocGFydCwgc3R5bGUtPmZvbnQoKSwgc3R5bGUtPnBhZGRpbmdCb3goKSwgc3R5bGUtPmVm
ZmVjdGl2ZVpvb20oKSk7CisgICAgICAgICAgICBpZiAocGFkZGluZ0JveCAhPSBzdHlsZS0+cGFk
ZGluZ0JveCgpKQorICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRQYWRkaW5nQm94KHBhZGRpbmdC
b3gpOworCisgICAgICAgICAgICAvLyBXaGl0ZXNwYWNlCisgICAgICAgICAgICBpZiAobV90aGVt
ZS0+Y29udHJvbFJlcXVpcmVzUHJlV2hpdGVTcGFjZShwYXJ0KSkKKyAgICAgICAgICAgICAgICBz
dHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOwogICAgICAgICAgICAgCi0gICAgICAgIC8vIFRoZSB3
aWR0aCBhbmQgaGVpZ2h0IGhlcmUgYXJlIGFmZmVjdGVkIGJ5IHRoZSB6b29tLgotICAgICAgICAv
LyBGSVhNRTogQ2hlY2sgaXMgZmxhd2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWluLXdpZHRo
L21heC13aWR0aCBpbnRvIGFjY291bnQuCi0gICAgICAgIExlbmd0aFNpemUgY29udHJvbFNpemUg
PSBtX3RoZW1lLT5jb250cm9sU2l6ZShwYXJ0LCBzdHlsZS0+Zm9udCgpLCBMZW5ndGhTaXplKHN0
eWxlLT53aWR0aCgpLCBzdHlsZS0+aGVpZ2h0KCkpLCBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsK
LSAgICAgICAgaWYgKGNvbnRyb2xTaXplLndpZHRoKCkgIT0gc3R5bGUtPndpZHRoKCkpCi0gICAg
ICAgICAgICBzdHlsZS0+c2V0V2lkdGgoY29udHJvbFNpemUud2lkdGgoKSk7Ci0gICAgICAgIGlm
IChjb250cm9sU2l6ZS5oZWlnaHQoKSAhPSBzdHlsZS0+aGVpZ2h0KCkpCi0gICAgICAgICAgICBz
dHlsZS0+c2V0SGVpZ2h0KGNvbnRyb2xTaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIC8vIFdp
ZHRoIC8gSGVpZ2h0CisgICAgICAgICAgICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBoZXJlIGFy
ZSBhZmZlY3RlZCBieSB0aGUgem9vbS4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVjayBpcyBm
bGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4LXdpZHRoIGludG8gYWNj
b3VudC4KKyAgICAgICAgICAgIExlbmd0aFNpemUgY29udHJvbFNpemUgPSBtX3RoZW1lLT5jb250
cm9sU2l6ZShwYXJ0LCBzdHlsZS0+Zm9udCgpLCBMZW5ndGhTaXplKHN0eWxlLT53aWR0aCgpLCBz
dHlsZS0+aGVpZ2h0KCkpLCBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgICAgIGlm
IChjb250cm9sU2l6ZS53aWR0aCgpICE9IHN0eWxlLT53aWR0aCgpKQorICAgICAgICAgICAgICAg
IHN0eWxlLT5zZXRXaWR0aChjb250cm9sU2l6ZS53aWR0aCgpKTsKKyAgICAgICAgICAgIGlmIChj
b250cm9sU2l6ZS5oZWlnaHQoKSAhPSBzdHlsZS0+aGVpZ2h0KCkpCisgICAgICAgICAgICAgICAg
c3R5bGUtPnNldEhlaWdodChjb250cm9sU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBNaW4tV2lkdGggLyBNaW4tSGVpZ2h0CisgICAgICAgICAgICBMZW5n
dGhTaXplIG1pbkNvbnRyb2xTaXplID0gbV90aGVtZS0+bWluaW11bUNvbnRyb2xTaXplKHBhcnQs
IHN0eWxlLT5mb250KCksIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICAgICAgaWYg
KG1pbkNvbnRyb2xTaXplLndpZHRoKCkgIT0gc3R5bGUtPm1pbldpZHRoKCkpCisgICAgICAgICAg
ICAgICAgc3R5bGUtPnNldE1pbldpZHRoKG1pbkNvbnRyb2xTaXplLndpZHRoKCkpOworICAgICAg
ICAgICAgaWYgKG1pbkNvbnRyb2xTaXplLmhlaWdodCgpICE9IHN0eWxlLT5taW5IZWlnaHQoKSkK
KyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0TWluSGVpZ2h0KG1pbkNvbnRyb2xTaXplLmhlaWdo
dCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZvbnQKKyAgICAgICAgICAg
IEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udCA9IG1fdGhlbWUtPmNvbnRyb2xGb250KHBhcnQs
IHN0eWxlLT5mb250KCksIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICAgICAgaWYg
KGNvbnRyb2xGb250ICE9IHN0eWxlLT5mb250KCkuZm9udERlc2NyaXB0aW9uKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBSZXNldCBvdXIgbGluZS1oZWlnaHQKKyAgICAgICAgICAgICAgICBzdHls
ZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gTm93IHVwZGF0ZSBvdXIgZm9udC4KKyAg
ICAgICAgICAgICAgICBpZiAoc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihjb250cm9sRm9udCkp
CisgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5mb250KCkudXBkYXRlKDApOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKICAg
ICB9CiAjZW5kaWYKIApAQCAtOTgsMTIgKzE2MiwxMiBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1
c3RTdHlsZShDU1NTdHlsZVNlCiAgICAgICAgICAgICByZXR1cm4gYWRqdXN0Q2hlY2tib3hTdHls
ZShzZWxlY3Rvciwgc3R5bGUsIGUpOwogICAgICAgICBjYXNlIFJhZGlvUGFydDoKICAgICAgICAg
ICAgIHJldHVybiBhZGp1c3RSYWRpb1N0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7Ci0jZW5kaWYK
ICAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBTcXVhcmVCdXR0b25Q
YXJ0OgogICAgICAgICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgogICAgICAgICBjYXNlIEJ1dHRv
blBhcnQ6CiAgICAgICAgICAgICByZXR1cm4gYWRqdXN0QnV0dG9uU3R5bGUoc2VsZWN0b3IsIHN0
eWxlLCBlKTsKKyNlbmRpZgogICAgICAgICBjYXNlIFRleHRGaWVsZFBhcnQ6CiAgICAgICAgICAg
ICByZXR1cm4gYWRqdXN0VGV4dEZpZWxkU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKICAgICAg
ICAgY2FzZSBUZXh0QXJlYVBhcnQ6CkBAIC0xNTYsOSArMjIwLDE3IEBAIGJvb2wgUmVuZGVyVGhl
bWU6OnBhaW50KFJlbmRlck9iamVjdCogbywKICAgICBDb250cm9sUGFydCBwYXJ0ID0gby0+c3R5
bGUoKS0+YXBwZWFyYW5jZSgpOwogCiAjaWYgVVNFKE5FV19USEVNRSkKLSAgICBpZiAocGFydCA9
PSBDaGVja2JveFBhcnQgfHwgcGFydCA9PSBSYWRpb1BhcnQpIHsKLSAgICAgICAgbV90aGVtZS0+
cGFpbnQocGFydCwgY29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKG8pLCBjb25zdF9jYXN0PEdyYXBo
aWNzQ29udGV4dCo+KHBhaW50SW5mby5jb250ZXh0KSwgciwgby0+c3R5bGUoKS0+ZWZmZWN0aXZl
Wm9vbSgpLCBvLT52aWV3KCktPmZyYW1lVmlldygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHN3aXRjaCAocGFydCkgeworICAgICAgICBjYXNlIENoZWNrYm94UGFydDoKKyAgICAgICAg
Y2FzZSBSYWRpb1BhcnQ6CisgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgICAgIGNh
c2UgU3F1YXJlQnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKKyAg
ICAgICAgY2FzZSBCdXR0b25QYXJ0OgorICAgICAgICAgICAgbV90aGVtZS0+cGFpbnQocGFydCwg
Y29udHJvbFN0YXRlc0ZvclJlbmRlcmVyKG8pLCBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dCo+
KHBhaW50SW5mby5jb250ZXh0KSwgciwgby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpLCBvLT52
aWV3KCktPmZyYW1lVmlldygpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICNlbmRpZgogCkBAIC0xNjksMTIg
KzI0MSwxMiBAQCBib29sIFJlbmRlclRoZW1lOjpwYWludChSZW5kZXJPYmplY3QqIG8sCiAgICAg
ICAgICAgICByZXR1cm4gcGFpbnRDaGVja2JveChvLCBwYWludEluZm8sIHIpOwogICAgICAgICBj
YXNlIFJhZGlvUGFydDoKICAgICAgICAgICAgIHJldHVybiBwYWludFJhZGlvKG8sIHBhaW50SW5m
bywgcik7Ci0jZW5kaWYKICAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKICAgICAgICAgY2Fz
ZSBTcXVhcmVCdXR0b25QYXJ0OgogICAgICAgICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgogICAg
ICAgICBjYXNlIEJ1dHRvblBhcnQ6CiAgICAgICAgICAgICByZXR1cm4gcGFpbnRCdXR0b24obywg
cGFpbnRJbmZvLCByKTsKKyNlbmRpZgogICAgICAgICBjYXNlIE1lbnVsaXN0UGFydDoKICAgICAg
ICAgICAgIHJldHVybiBwYWludE1lbnVMaXN0KG8sIHBhaW50SW5mbywgcik7CiAgICAgICAgIGNh
c2UgU2xpZGVySG9yaXpvbnRhbFBhcnQ6CkBAIC01MjIsOSArNTk0LDYgQEAgYm9vbCBSZW5kZXJU
aGVtZTo6aXNEZWZhdWx0KGNvbnN0IFJlbmRlcgogICAgIGlmICghc2V0dGluZ3MgfHwgIXNldHRp
bmdzLT5pbkFwcGxpY2F0aW9uQ2hyb21lTW9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCi0gICAgaWYgKCFvLT5zdHlsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCiAg
ICAgcmV0dXJuIG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBEZWZhdWx0QnV0dG9uUGFydDsK
IH0KIApAQCAtNTYyLDcgKzYzMSw2IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFJhZGlvU3R5
bGUoQ1NTU3QKIAogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7CiB9Ci0jZW5kaWYKIAogdm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0
b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKIHsKQEAgLTU3MCw2ICs2
MzgsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RCdXR0b25TdHlsZShDU1NTCiAgICAgLy8g
YXQgYWxsIGJ5IGRlZmF1bHQuICBXZSB3aWxsIHN0aWxsIGFsbG93IHRoZSB0aGVtZSBhIGNyYWNr
IGF0IHNldHRpbmcgdXAgYSBkZXNpcmVkIHZlcnRpY2FsIHNpemUuCiAgICAgc2V0QnV0dG9uU2l6
ZShzdHlsZSk7CiB9CisjZW5kaWYKIAogdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0VGV4dEZpZWxk
U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCogZSkgY29uc3QKIHsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oCShyZXZpc2lvbiAzNzc4OSkKKysrIHJlbmRl
cmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsMTEgKzE0OCwxMSBAQCBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFJhZGlvU3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBw
YWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFk
aW9TaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9Ci0jZW5kaWYKIAogICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJu
IHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSopIGNv
bnN0IHsgfQorI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUo
Q1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVy
VGhlbWVNYWMuaAkocmV2aXNpb24gMzc3ODkpCisrKyByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
aAkod29ya2luZyBjb3B5KQpAQCAtNzYsMTEgKzc2LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Q29sb3Igc3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0g
ICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJhbmNlIHZhbHVlLgotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBXZWJD
b3JlOjpFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0K
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lk
IGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKIApAQCAtMTQxLDExICsxMzYsNiBAQCBwcml2YXRlOgogCiAgICAgLy8g
SGVscGVycyBmb3IgYWRqdXN0aW5nIGFwcGVhcmFuY2UgYW5kIGZvciBwYWludGluZwogCi0gICAg
dm9pZCBzZXRCdXR0b25QYWRkaW5nRnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlKiwgTlNDb250
cm9sU2l6ZSkgY29uc3Q7Ci0gICAgY29uc3QgSW50U2l6ZSogYnV0dG9uU2l6ZXMoKSBjb25zdDsK
LSAgICBjb25zdCBpbnQqIGJ1dHRvbk1hcmdpbnMoKSBjb25zdDsKLSAgICB2b2lkIHNldEJ1dHRv
bkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7Ci0KICAgICB2
b2lkIHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IElu
dFJlY3QmKTsKICAgICBjb25zdCBJbnRTaXplKiBwb3B1cEJ1dHRvblNpemVzKCkgY29uc3Q7CiAg
ICAgY29uc3QgaW50KiBwb3B1cEJ1dHRvbk1hcmdpbnMoKSBjb25zdDsKQEAgLTE1OSw3ICsxNDks
NiBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0U2VhcmNoQ2VsbFN0YXRlKFJlbmRlck9iamVjdCos
IGNvbnN0IEludFJlY3QmKTsKICAgICB2b2lkIHNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHls
ZSopIGNvbnN0OwogICAgIAotICAgIE5TQnV0dG9uQ2VsbCogYnV0dG9uKCkgY29uc3Q7CiAgICAg
TlNQb3BVcEJ1dHRvbkNlbGwqIHBvcHVwQnV0dG9uKCkgY29uc3Q7CiAgICAgTlNTZWFyY2hGaWVs
ZENlbGwqIHNlYXJjaCgpIGNvbnN0OwogICAgIE5TTWVudSogc2VhcmNoTWVudVRlbXBsYXRlKCkg
Y29uc3Q7CkBAIC0xNjcsNyArMTU2LDYgQEAgcHJpdmF0ZToKICAgICBOU1NsaWRlckNlbGwqIHNs
aWRlclRodW1iVmVydGljYWwoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBtdXRhYmxlIFJldGFp
blB0cjxOU0J1dHRvbkNlbGw+IG1fYnV0dG9uOwogICAgIG11dGFibGUgUmV0YWluUHRyPE5TUG9w
VXBCdXR0b25DZWxsPiBtX3BvcHVwQnV0dG9uOwogICAgIG11dGFibGUgUmV0YWluUHRyPE5TU2Vh
cmNoRmllbGRDZWxsPiBtX3NlYXJjaDsKICAgICBtdXRhYmxlIFJldGFpblB0cjxOU01lbnU+IG1f
c2VhcmNoTWVudVRlbXBsYXRlOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMzc3ODkp
CisrKyByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyNCw0
MCArNDI0LDI4IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFJlcGFpbnRSZWN0KGMKICAg
ICBDb250cm9sUGFydCBwYXJ0ID0gby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOwogICAgIAogI2lm
IFVTRShORVdfVEhFTUUpCi0gICAgaWYgKHBhcnQgPT0gQ2hlY2tib3hQYXJ0IHx8IHBhcnQgPT0g
UmFkaW9QYXJ0KQotICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmFkanVzdFJlcGFpbnRSZWN0
KG8sIHIpOwotI2VuZGlmCi0KLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZl
Y3RpdmVab29tKCk7Ci0KLSAgICBzd2l0Y2ggKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSkgewor
ICAgIHN3aXRjaCAocGFydCkgeworICAgICAgICBjYXNlIENoZWNrYm94UGFydDoKKyAgICAgICAg
Y2FzZSBSYWRpb1BhcnQ6CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgICAgIGNh
c2UgU3F1YXJlQnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKLSAg
ICAgICAgY2FzZSBCdXR0b25QYXJ0OiB7Ci0gICAgICAgICAgICAvLyBTaW5jZSB3ZSBxdWVyeSB0
aGUgcHJvdG90eXBlIGNlbGwsIHdlIG5lZWQgdG8gdXBkYXRlIGl0cyBzdGF0ZSB0byBtYXRjaC4K
LSAgICAgICAgICAgIHNldEJ1dHRvbkNlbGxTdGF0ZShvLCByKTsKLQotICAgICAgICAgICAgLy8g
V2UgaW5mbGF0ZSB0aGUgcmVjdCBhcyBuZWVkZWQgdG8gYWNjb3VudCBmb3IgcGFkZGluZyBpbmNs
dWRlZCBpbiB0aGUgY2VsbCB0byBhY2NvbW1vZGF0ZSB0aGUgY2hlY2tib3gKLSAgICAgICAgICAg
IC8vIHNoYWRvdyIgYW5kIHRoZSBjaGVjay4gIFdlIGRvbid0IGNvbnNpZGVyIHRoaXMgcGFydCBv
ZiB0aGUgYm91bmRzIG9mIHRoZSBjb250cm9sIGluIFdlYktpdC4KLSAgICAgICAgICAgIGlmIChb
YnV0dG9uKCkgYmV6ZWxTdHlsZV0gPT0gTlNSb3VuZGVkQmV6ZWxTdHlsZSkgewotICAgICAgICAg
ICAgICAgIEludFNpemUgc2l6ZSA9IGJ1dHRvblNpemVzKClbW2J1dHRvbigpIGNvbnRyb2xTaXpl
XV07Ci0gICAgICAgICAgICAgICAgc2l6ZS5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSAqIHpvb21M
ZXZlbCk7Ci0gICAgICAgICAgICAgICAgc2l6ZS5zZXRXaWR0aChyLndpZHRoKCkpOwotICAgICAg
ICAgICAgICAgIHIgPSBpbmZsYXRlUmVjdChyLCBzaXplLCBidXR0b25NYXJnaW5zKCksIHpvb21M
ZXZlbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIE1lbnVsaXN0UGFydDogewotICAgICAgICAgICAgc2V0UG9wdXBCdXR0b25DZWxs
U3RhdGUobywgcik7Ci0gICAgICAgICAgICBJbnRTaXplIHNpemUgPSBwb3B1cEJ1dHRvblNpemVz
KClbW3BvcHVwQnV0dG9uKCkgY29udHJvbFNpemVdXTsKLSAgICAgICAgICAgIHNpemUuc2V0SGVp
Z2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwotICAgICAgICAgICAgc2l6ZS5zZXRXaWR0
aChyLndpZHRoKCkpOwotICAgICAgICAgICAgciA9IGluZmxhdGVSZWN0KHIsIHNpemUsIHBvcHVw
QnV0dG9uTWFyZ2lucygpLCB6b29tTGV2ZWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KKyAgICAgICAgY2FzZSBCdXR0b25QYXJ0OgorICAgICAgICAgICAgcmV0dXJuIFJlbmRlclRo
ZW1lOjphZGp1c3RSZXBhaW50UmVjdChvLCByKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIGJyZWFrOwogICAgIH0KKyNlbmRpZgorCisgICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5
bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOworCisgICAgaWYgKHBhcnQgPT0gTWVudWxpc3RQYXJ0KSB7
CisgICAgICAgIHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKG8sIHIpOworICAgICAgICBJbnRTaXpl
IHNpemUgPSBwb3B1cEJ1dHRvblNpemVzKClbW3BvcHVwQnV0dG9uKCkgY29udHJvbFNpemVdXTsK
KyAgICAgICAgc2l6ZS5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSAqIHpvb21MZXZlbCk7CisgICAg
ICAgIHNpemUuc2V0V2lkdGgoci53aWR0aCgpKTsKKyAgICAgICAgciA9IGluZmxhdGVSZWN0KHIs
IHNpemUsIHBvcHVwQnV0dG9uTWFyZ2lucygpLCB6b29tTGV2ZWwpOworICAgIH0KIH0KIAogSW50
UmVjdCBSZW5kZXJUaGVtZU1hYzo6aW5mbGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgciwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgY29uc3QgaW50KiBtYXJnaW5zLCBmbG9hdCB6b29tTGV2ZWwpIGNvbnN0
CkBAIC02MTcsMTc2ICs2MDUsNiBAQCBOU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250
cm9sU2l6CiAgICAgcmV0dXJuIE5TTWluaUNvbnRyb2xTaXplOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lTWFjOjpzZXRCdXR0b25QYWRkaW5nRnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlKiBzdHls
ZSwgTlNDb250cm9sU2l6ZSBzaXplKSBjb25zdAotewotICAgIC8vIEp1c3QgdXNlIDhweC4gIEFw
cEtpdCB3YW50cyB0byB1c2UgMTFweCBmb3IgbWluaSBidXR0b25zLCBidXQgdGhhdCBwYWRkaW5n
IGlzIGp1c3QgdG9vIGxhcmdlCi0gICAgLy8gZm9yIHJlYWwtd29ybGQgV2ViIHNpdGVzIChjcmVh
dGluZyBhIGh1Z2UgbmVjZXNzYXJ5IG1pbmltdW0gd2lkdGggZm9yIGJ1dHRvbnMgd2hvc2Ugc3Bh
Y2UgaXMKLSAgICAvLyBieSBkZWZpbml0aW9uIGNvbnN0cmFpbmVkLCBzaW5jZSB3ZSBzZWxlY3Qg
bWluaSBvbmx5IGZvciBzbWFsbCBjcmFtcGVkIGVudmlyb25tZW50cy4KLSAgICAvLyBUaGlzIGFs
c28gZ3VhcmFudGVlcyB0aGUgSFRNTDQgPGJ1dHRvbj4gd2lsbCBtYXRjaCBvdXIgcmVuZGVyaW5n
IGJ5IGRlZmF1bHQsIHNpbmNlIHdlJ3JlIHVzaW5nIGEgY29uc2lzdGVudAotICAgIC8vIHBhZGRp
bmcuCi0gICAgY29uc3QgaW50IHBhZGRpbmcgPSA4ICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsK
LSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAg
c3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHls
ZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgoMCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGlu
Z0JvdHRvbShMZW5ndGgoMCwgRml4ZWQpKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCogZSkgY29uc3QKLXsKLSAgICAvLyBUaGVyZSBhcmUgdGhyZWUgYXBwZWFy
YW5jZSBjb25zdGFudHMgZm9yIGJ1dHRvbnMuCi0gICAgLy8gKDEpIFB1c2gtYnV0dG9uIGlzIHRo
ZSBjb25zdGFudCBmb3IgdGhlIGRlZmF1bHQgQXF1YSBzeXN0ZW0gYnV0dG9uLiAgUHVzaCBidXR0
b25zIHdpbGwgbm90IHNjYWxlIHZlcnRpY2FsbHkgYW5kIHdpbGwgbm90IGFsbG93Ci0gICAgLy8g
Y3VzdG9tIGZvbnRzIG9yIGNvbG9ycy4gIDxpbnB1dD5zIHVzZSB0aGlzIGNvbnN0YW50LiAgVGhp
cyBidXR0b24gd2lsbCBhbGxvdyBjdXN0b20gY29sb3JzIGFuZCBmb250IHdlaWdodHMvdmFyaWFu
dHMgYnV0IHdvbid0Ci0gICAgLy8gc2NhbGUgdmVydGljYWxseS4KLSAgICAvLyAoMikgc3F1YXJl
LWJ1dHRvbiBpcyB0aGUgY29uc3RhbnQgZm9yIHRoZSBzcXVhcmUgYnV0dG9uLiAgVGhpcyBidXR0
b24gd2lsbCBhbGxvdyBjdXN0b20gZm9udHMgYW5kIGNvbG9ycyBhbmQgd2lsbCBzY2FsZSB2ZXJ0
aWNhbGx5LgotICAgIC8vICgzKSBCdXR0b24gaXMgdGhlIGNvbnN0YW50IHRoYXQgbWVhbnMgInBp
Y2sgdGhlIGJlc3QgYnV0dG9uIGFzIGFwcHJvcHJpYXRlLiIgIDxidXR0b24+cyB1c2UgdGhpcyBj
b25zdGFudC4gIFRoaXMgYnV0dG9uIHdpbGwKLSAgICAvLyBhbHNvIHNjYWxlIHZlcnRpY2FsbHkg
YW5kIGFsbG93IGN1c3RvbSBmb250cyBhbmQgY29sb3JzLiAgSXQgd2lsbCBhdHRlbXB0IHRvIHVz
ZSBBcXVhIGlmIHBvc3NpYmxlIGFuZCB3aWxsIG1ha2UgdGhpcyBkZXRlcm1pbmF0aW9uCi0gICAg
Ly8gc29sZWx5IG9uIHRoZSByZWN0YW5nbGUgb2YgdGhlIGNvbnRyb2wuCi0KLSAgICAvLyBEZXRl
cm1pbmUgb3VyIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgb3VyIGZvbnQuCi0gICAgTlNDb250cm9s
U2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSk7Ci0KLSAgICBpZiAo
c3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCkgewotICAgICAgICAvLyBEaXRj
aCB0aGUgYm9yZGVyLgotICAgICAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLQotICAgICAgICAv
LyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVu
Z3RoKEF1dG8pKTsKLQotICAgICAgICAvLyBXaGl0ZS1zcGFjZSBpcyBsb2NrZWQgdG8gcHJlCi0g
ICAgICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7Ci0KLSAgICAgICAgLy8gU2V0IHRoZSBi
dXR0b24ncyB2ZXJ0aWNhbCBzaXplLgotICAgICAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKLQot
ICAgICAgICAvLyBBZGQgaW4gdGhlIHBhZGRpbmcgdGhhdCB3ZSdkIGxpa2UgdG8gdXNlLgotICAg
ICAgICBzZXRCdXR0b25QYWRkaW5nRnJvbUNvbnRyb2xTaXplKHN0eWxlLCBjb250cm9sU2l6ZSk7
Ci0KLSAgICAgICAgLy8gT3VyIGZvbnQgaXMgbG9ja2VkIHRvIHRoZSBhcHByb3ByaWF0ZSBzeXN0
ZW0gZm9udCBzaXplIGZvciB0aGUgY29udHJvbC4gIFRvIGNsYXJpZnksIHdlIGZpcnN0IHVzZSB0
aGUgQ1NTLXNwZWNpZmllZCBmb250IHRvIGZpZ3VyZSBvdXQKLSAgICAgICAgLy8gYSByZWFzb25h
YmxlIGNvbnRyb2wgc2l6ZSwgYnV0IG9uY2UgdGhhdCBjb250cm9sIHNpemUgaXMgZGV0ZXJtaW5l
ZCwgd2UgdGhyb3cgdGhhdCBmb250IGF3YXkgYW5kIHVzZSB0aGUgYXBwcm9wcmlhdGUKLSAgICAg
ICAgLy8gc3lzdGVtIGZvbnQgZm9yIHRoZSBjb250cm9sIHNpemUgaW5zdGVhZC4KLSAgICAgICAg
c2V0Rm9udEZyb21Db250cm9sU2l6ZShzZWxlY3Rvciwgc3R5bGUsIGNvbnRyb2xTaXplKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICAvLyBTZXQgYSBtaW4taGVpZ2h0IHNvIHRoYXQgd2UgY2FuJ3Qg
Z2V0IHNtYWxsZXIgdGhhbiB0aGUgbWluaSBidXR0b24uCi0gICAgICAgIHN0eWxlLT5zZXRNaW5I
ZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oMTUgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgp
KSwgRml4ZWQpKTsKLQotICAgICAgICAvLyBSZXNldCB0aGUgdG9wIGFuZCBib3R0b20gYm9yZGVy
cy4KLSAgICAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyVG9wKCk7Ci0gICAgICAgIHN0eWxlLT5yZXNl
dEJvcmRlckJvdHRvbSgpOwotICAgIH0KLQotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7Ci19
Ci0KLWNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lTWFjOjpidXR0b25TaXplcygpIGNvbnN0Ci17
Ci0gICAgc3RhdGljIGNvbnN0IEludFNpemUgc2l6ZXNbM10gPSB7IEludFNpemUoMCwgMjEpLCBJ
bnRTaXplKDAsIDE4KSwgSW50U2l6ZSgwLCAxNSkgfTsKLSAgICByZXR1cm4gc2l6ZXM7Ci19Ci0K
LWNvbnN0IGludCogUmVuZGVyVGhlbWVNYWM6OmJ1dHRvbk1hcmdpbnMoKSBjb25zdAotewotICAg
IHN0YXRpYyBjb25zdCBpbnQgbWFyZ2luc1szXVs0XSA9Ci0gICAgewotICAgICAgICB7IDQsIDYs
IDcsIDYgfSwKLSAgICAgICAgeyA0LCA1LCA2LCA1IH0sCi0gICAgICAgIHsgMCwgMSwgMSwgMSB9
LAotICAgIH07Ci0gICAgcmV0dXJuIG1hcmdpbnNbW2J1dHRvbigpIGNvbnRyb2xTaXplXV07Ci19
Ci0KLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAotewotICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNp
ZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKCFzdHlsZS0+d2lkdGgo
KS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVybWluZSB0aGUg
aW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgotICAgIHNldFNpemVGcm9tRm9udChzdHls
ZSwgYnV0dG9uU2l6ZXMoKSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldEJ1dHRvbkNl
bGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAg
TlNCdXR0b25DZWxsKiBidXR0b24gPSB0aGlzLT5idXR0b24oKTsKLQotICAgIC8vIFNldCB0aGUg
Y29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgcmVjdGFuZ2xlIHdlJ3JlIHBhaW50aW5nIGludG8u
Ci0gICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTcXVhcmVCdXR0b25QYXJ0IHx8
Ci0gICAgICAgIHIuaGVpZ2h0KCkgPiBidXR0b25TaXplcygpW05TUmVndWxhckNvbnRyb2xTaXpl
XS5oZWlnaHQoKSAqIG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAgICAvLyBV
c2UgdGhlIHNxdWFyZSBidXR0b24KLSAgICAgICAgaWYgKFtidXR0b24gYmV6ZWxTdHlsZV0gIT0g
TlNTaGFkb3dsZXNzU3F1YXJlQmV6ZWxTdHlsZSkKLSAgICAgICAgICAgIFtidXR0b24gc2V0QmV6
ZWxTdHlsZTpOU1NoYWRvd2xlc3NTcXVhcmVCZXplbFN0eWxlXTsKLSAgICB9IGVsc2UgaWYgKFti
dXR0b24gYmV6ZWxTdHlsZV0gIT0gTlNSb3VuZGVkQmV6ZWxTdHlsZSkKLSAgICAgICAgW2J1dHRv
biBzZXRCZXplbFN0eWxlOk5TUm91bmRlZEJlemVsU3R5bGVdOwotCi0gICAgc2V0Q29udHJvbFNp
emUoYnV0dG9uLCBidXR0b25TaXplcygpLCByLnNpemUoKSwgby0+c3R5bGUoKS0+ZWZmZWN0aXZl
Wm9vbSgpKTsKLQotICAgIE5TV2luZG93ICp3aW5kb3cgPSBbby0+dmlldygpLT5mcmFtZVZpZXco
KS0+ZG9jdW1lbnRWaWV3KCkgd2luZG93XTsKLSAgICBCT09MIGlzRGVmYXVsdEJ1dHRvbiA9IChp
c0RlZmF1bHQobykgJiYgW3dpbmRvdyBpc0tleVdpbmRvd10pOwotICAgIFtidXR0b24gc2V0S2V5
RXF1aXZhbGVudDooaXNEZWZhdWx0QnV0dG9uID8gQCJcciIgOiBAIiIpXTsKLQotICAgIC8vIFVw
ZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KLSAgICB1cGRhdGVDaGVja2Vk
U3RhdGUoYnV0dG9uLCBvKTsKLSAgICB1cGRhdGVFbmFibGVkU3RhdGUoYnV0dG9uLCBvKTsKLSAg
ICB1cGRhdGVQcmVzc2VkU3RhdGUoYnV0dG9uLCBvKTsKLSAgICB1cGRhdGVGb2N1c2VkU3RhdGUo
YnV0dG9uLCBvKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRCdXR0b24oUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByKQotewotICAgIE5TQnV0dG9uQ2VsbCogYnV0dG9uID0gdGhpcy0+YnV0dG9u
KCk7Ci0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludElu
Zm8uY29udGV4dCk7Ci0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgbmVl
ZGVkIGZvciB0aGUgY29udHJvbCBhbmQgcHJlcGFyZSB0aGUgY2VsbCBmb3IgcGFpbnRpbmcuCi0g
ICAgc2V0QnV0dG9uQ2VsbFN0YXRlKG8sIHIpOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNh
dmUoKTsKLQotICAgIC8vIFdlIGluZmxhdGUgdGhlIHJlY3QgYXMgbmVlZGVkIHRvIGFjY291bnQg
Zm9yIHBhZGRpbmcgaW5jbHVkZWQgaW4gdGhlIGNlbGwgdG8gYWNjb21tb2RhdGUgdGhlIGJ1dHRv
bgotICAgIC8vIHNoYWRvdy4gIFdlIGRvbid0IGNvbnNpZGVyIHRoaXMgcGFydCBvZiB0aGUgYm91
bmRzIG9mIHRoZSBjb250cm9sIGluIFdlYktpdC4KLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5z
dHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgSW50U2l6ZSBzaXplID0gYnV0dG9uU2l6ZXMo
KVtbYnV0dG9uIGNvbnRyb2xTaXplXV07Ci0gICAgc2l6ZS5zZXRXaWR0aChyLndpZHRoKCkpOwot
ICAgIHNpemUuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwotICAgIEludFJl
Y3QgaW5mbGF0ZWRSZWN0ID0gcjsKLSAgICBpZiAoW2J1dHRvbiBiZXplbFN0eWxlXSA9PSBOU1Jv
dW5kZWRCZXplbFN0eWxlKSB7Ci0gICAgICAgIC8vIENlbnRlciB0aGUgYnV0dG9uIHdpdGhpbiB0
aGUgYXZhaWxhYmxlIHNwYWNlLgotICAgICAgICBpZiAoaW5mbGF0ZWRSZWN0LmhlaWdodCgpID4g
c2l6ZS5oZWlnaHQoKSkgewotICAgICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFkoaW5mbGF0ZWRS
ZWN0LnkoKSArIChpbmZsYXRlZFJlY3QuaGVpZ2h0KCkgLSBzaXplLmhlaWdodCgpKSAvIDIpOwot
ICAgICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldEhlaWdodChzaXplLmhlaWdodCgpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIE5vdyBpbmZsYXRlIGl0IHRvIGFjY291bnQgZm9yIHRoZSBzaGFk
b3cuCi0gICAgICAgIGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwgc2l6
ZSwgYnV0dG9uTWFyZ2lucygpLCB6b29tTGV2ZWwpOwotCi0gICAgICAgIGlmICh6b29tTGV2ZWwg
IT0gMS4wZikgewotICAgICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFdpZHRoKGluZmxhdGVkUmVj
dC53aWR0aCgpIC8gem9vbUxldmVsKTsKLSAgICAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWln
aHQoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKLSAgICAgICAgICAgIHBhaW50
SW5mby5jb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0LngoKSwgaW5mbGF0ZWRSZWN0Lnko
KSk7Ci0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21M
ZXZlbCwgem9vbUxldmVsKSk7Ci0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNs
YXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5mbGF0ZWRSZWN0LnkoKSk7Ci0gICAgICAgIH0KLSAg
ICB9IAotCi0gICAgTlNWaWV3ICp2aWV3ID0gby0+dmlldygpLT5mcmFtZVZpZXcoKS0+ZG9jdW1l
bnRWaWV3KCk7Ci0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFt2aWV3IHdpbmRvd107Ci0gICAgTlNC
dXR0b25DZWxsICpwcmV2aW91c0RlZmF1bHRCdXR0b25DZWxsID0gW3dpbmRvdyBkZWZhdWx0QnV0
dG9uQ2VsbF07Ci0KLSAgICBpZiAoaXNEZWZhdWx0KG8pICYmIFt3aW5kb3cgaXNLZXlXaW5kb3dd
KSB7Ci0gICAgICAgIFt3aW5kb3cgc2V0RGVmYXVsdEJ1dHRvbkNlbGw6YnV0dG9uXTsKLSAgICAg
ICAgd2tBZHZhbmNlRGVmYXVsdEJ1dHRvblB1bHNlQW5pbWF0aW9uKGJ1dHRvbik7Ci0gICAgfSBl
bHNlIGlmIChbcHJldmlvdXNEZWZhdWx0QnV0dG9uQ2VsbCBpc0VxdWFsOmJ1dHRvbl0pCi0gICAg
ICAgIFt3aW5kb3cgc2V0RGVmYXVsdEJ1dHRvbkNlbGw6bmlsXTsKLQotICAgIFtidXR0b24gZHJh
d1dpdGhGcmFtZTpOU1JlY3QoaW5mbGF0ZWRSZWN0KSBpblZpZXc6dmlld107Ci0gICAgW2J1dHRv
biBzZXRDb250cm9sVmlldzpuaWxdOwotCi0gICAgaWYgKCFbcHJldmlvdXNEZWZhdWx0QnV0dG9u
Q2VsbCBpc0VxdWFsOmJ1dHRvbl0pCi0gICAgICAgIFt3aW5kb3cgc2V0RGVmYXVsdEJ1dHRvbkNl
bGw6cHJldmlvdXNEZWZhdWx0QnV0dG9uQ2VsbF07Ci0KLSAgICBwYWludEluZm8uY29udGV4dC0+
cmVzdG9yZSgpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgTG9jYWxDdXJyZW50
R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7CkBAIC0xMDY1
LDYgKzg4MywxMiBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgY29uc3QgSW50U2l6ZSogbWVudUxpc3RCdXR0
b25TaXplcygpCit7CisgICAgc3RhdGljIGNvbnN0IEludFNpemUgc2l6ZXNbM10gPSB7IEludFNp
emUoMCwgMjEpLCBJbnRTaXplKDAsIDE4KSwgSW50U2l6ZSgwLCAxNSkgfTsKKyAgICByZXR1cm4g
c2l6ZXM7Cit9CisKIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NT
U3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkg
Y29uc3QKIHsKICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JG
b250KHN0eWxlKTsKQEAgLTEwODMsNyArOTA3LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0TWVudUxpc3RTdHlsZQogICAgIHN0eWxlLT5zZXRDb2xvcihlLT5pc0VuYWJsZWQoKSA/IHN0
YXRpY19jYXN0PFJHQkEzMj4oQ29sb3I6OmJsYWNrKSA6IENvbG9yOjpkYXJrR3JheSk7CiAKICAg
ICAvLyBTZXQgdGhlIGJ1dHRvbidzIHZlcnRpY2FsIHNpemUuCi0gICAgc2V0QnV0dG9uU2l6ZShz
dHlsZSk7CisgICAgc2V0U2l6ZUZyb21Gb250KHN0eWxlLCBtZW51TGlzdEJ1dHRvblNpemVzKCkp
OwogCiAgICAgLy8gT3VyIGZvbnQgaXMgbG9ja2VkIHRvIHRoZSBhcHByb3ByaWF0ZSBzeXN0ZW0g
Zm9udCBzaXplIGZvciB0aGUgY29udHJvbC4gIFRvIGNsYXJpZnksIHdlIGZpcnN0IHVzZSB0aGUg
Q1NTLXNwZWNpZmllZCBmb250IHRvIGZpZ3VyZSBvdXQKICAgICAvLyBhIHJlYXNvbmFibGUgY29u
dHJvbCBzaXplLCBidXQgb25jZSB0aGF0IGNvbnRyb2wgc2l6ZSBpcyBkZXRlcm1pbmVkLCB3ZSB0
aHJvdyB0aGF0IGZvbnQgYXdheSBhbmQgdXNlIHRoZSBhcHByb3ByaWF0ZQpAQCAtMTYzMCwxNyAr
MTQ1NCw2IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFTbGlkZXJUaHUKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU5TQnV0dG9uQ2VsbCogUmVuZGVyVGhlbWVNYWM6OmJ1dHRvbigp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX2J1dHRvbikgewotICAgICAgICBtX2J1dHRvbi5hZG9wdE5T
KFtbTlNCdXR0b25DZWxsIGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIFttX2J1dHRvbi5nZXQoKSBz
ZXRUaXRsZTpuaWxdOwotICAgICAgICBbbV9idXR0b24uZ2V0KCkgc2V0QnV0dG9uVHlwZTpOU01v
bWVudGFyeVB1c2hJbkJ1dHRvbl07Ci0gICAgfQotICAgIAotICAgIHJldHVybiBtX2J1dHRvbi5n
ZXQoKTsKLX0KLQogTlNQb3BVcEJ1dHRvbkNlbGwqIFJlbmRlclRoZW1lTWFjOjpwb3B1cEJ1dHRv
bigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BvcHVwQnV0dG9uKSB7CkluZGV4OiByZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuaAkocmV2aXNpb24gMzc3ODkpCisrKyByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNTQzLDYgKzU0Myw3IEBAIHB1YmxpYzoKICAgICBMZW5ndGgg
bWFyZ2luTGVmdCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5tYXJnaW4ubGVmdCgpOyB9CiAg
ICAgTGVuZ3RoIG1hcmdpblJpZ2h0KCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPm1hcmdpbi5y
aWdodCgpOyB9CiAKKyAgICBMZW5ndGhCb3ggcGFkZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIHN1
cnJvdW5kLT5wYWRkaW5nOyB9CiAgICAgTGVuZ3RoIHBhZGRpbmdUb3AoKSBjb25zdCB7IHJldHVy
biBzdXJyb3VuZC0+cGFkZGluZy50b3AoKTsgfQogICAgIExlbmd0aCBwYWRkaW5nQm90dG9tKCkg
Y29uc3QgeyByZXR1cm4gc3Vycm91bmQtPnBhZGRpbmcuYm90dG9tKCk7IH0KICAgICBMZW5ndGgg
cGFkZGluZ0xlZnQoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+cGFkZGluZy5sZWZ0KCk7IH0K
QEAgLTgyNyw2ICs4MjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNYXJnaW5SaWdodChMZW5n
dGggdikgeyBTRVRfVkFSKHN1cnJvdW5kLCBtYXJnaW4ubV9yaWdodCwgdikgfQogCiAgICAgdm9p
ZCByZXNldFBhZGRpbmcoKSB7IFNFVF9WQVIoc3Vycm91bmQsIHBhZGRpbmcsIExlbmd0aEJveChB
dXRvKSkgfQorICAgIHZvaWQgc2V0UGFkZGluZ0JveChjb25zdCBMZW5ndGhCb3gmIGIpIHsgU0VU
X1ZBUihzdXJyb3VuZCwgcGFkZGluZywgYikgfQogICAgIHZvaWQgc2V0UGFkZGluZ1RvcChMZW5n
dGggdikgeyBTRVRfVkFSKHN1cnJvdW5kLCBwYWRkaW5nLm1fdG9wLCB2KSB9CiAgICAgdm9pZCBz
ZXRQYWRkaW5nQm90dG9tKExlbmd0aCB2KSB7IFNFVF9WQVIoc3Vycm91bmQsIHBhZGRpbmcubV9i
b3R0b20sIHYpIH0KICAgICB2b2lkIHNldFBhZGRpbmdMZWZ0KExlbmd0aCB2KSB7IFNFVF9WQVIo
c3Vycm91bmQsIHBhZGRpbmcubV9sZWZ0LCB2KSB9Cg==
</data>
<flag name="review"
          id="11205"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>