<?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>162712</bug_id>
          
          <creation_ts>2016-09-28 19:30:30 -0700</creation_ts>
          <short_desc>[Win][Direct2D] Add D2D Font handling code</short_desc>
          <delta_ts>2016-09-29 11:47:41 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>161817</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pvollan</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1234667</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-28 19:30:30 -0700</bug_when>
    <thetext>This patch adds Direct2D/DirectWrite implementations of the Font routines currently handled by Cairo or CoreGraphics on Windows. These exist in parallel to the existing libraries.

This patch simply adds the new files. It does not incorporate them into the build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234679</commentid>
    <comment_count>1</comment_count>
      <attachid>290168</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-28 20:15:44 -0700</bug_when>
    <thetext>Created attachment 290168
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234680</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-28 20:18:23 -0700</bug_when>
    <thetext>Attachment 290168 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/win/FontDirect2D.cpp:34:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234687</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-28 20:34:49 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 290168 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/WebCore/platform/graphics/win/FontDirect2D.cpp:34:  Found
&gt; header this file implements after other header. Should be: config.h, primary
&gt; header, blank line, and then alphabetically sorted.  [build/include_order]
&gt; [4]
&gt; Total errors found: 1 in 11 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

check-webkit-style is confused because &apos;FontDirect2D.cpp&apos; should probably be called &apos;FontCascadeDirect2D.cpp&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234690</commentid>
    <comment_count>4</comment_count>
      <attachid>290172</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-28 20:37:15 -0700</bug_when>
    <thetext>Created attachment 290172
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234703</commentid>
    <comment_count>5</comment_count>
      <attachid>290172</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-28 21:39:29 -0700</bug_when>
    <thetext>Comment on attachment 290172
Patch

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

These new files aren&apos;t added to PlatformWin.cmake.  They should probably be added so we can at least see if they compile, unless they&apos;re so incomplete that they don&apos;t link.

&gt; Source/WebCore/platform/graphics/win/FontCascadeDirect2D.cpp:47
&gt; +const int syntheticObliqueAngle = 14;

14 degrees?  Where did this come from?

&gt; Source/WebCore/platform/graphics/win/FontCascadeDirect2D.cpp:56
&gt; +    case Antialiased: {

Scope doesn&apos;t look needed here.

&gt; Source/WebCore/platform/graphics/win/FontCascadeDirect2D.cpp:84
&gt; +    D2D1_MATRIX_3X2_F matrix;
&gt; +    context-&gt;GetTransform(&amp;matrix);

Can this fail, leaving matrix uninitialized?  The other context functions look like they might be able to fail, too.

&gt; Source/WebCore/platform/graphics/win/FontPlatformDataDirect2D.cpp:56
&gt; +    , m_orientation(Horizontal)

This should use c++ style initialization in the header
m_ orientation { Horizontal }

&gt; Source/WebCore/platform/graphics/win/FontPlatformDataDirect2D.cpp:61
&gt; +    , m_isColorBitmapFont(false)

ditto

&gt; Source/WebCore/platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp:55
&gt; +    UChar localeName[256] = { };
&gt; +    int localeLength = GetUserDefaultLocaleName(reinterpret_cast&lt;LPWSTR&gt;(&amp;localeName), 255);

LOCALE_NAME_MAX_LENGTH

&gt; Source/WebCore/platform/graphics/win/SimpleFontDataDirect2D.cpp:182
&gt; +    RELEASE_ASSERT(font);

fontFace?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234715</commentid>
    <comment_count>6</comment_count>
      <attachid>290172</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-28 22:25:27 -0700</bug_when>
    <thetext>Comment on attachment 290172
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/FontCascadeDirect2D.cpp:47
&gt;&gt; +const int syntheticObliqueAngle = 14;
&gt; 
&gt; 14 degrees?  Where did this come from?

It&apos;s the value from FontCGWin.cpp. I&apos;ll combine them.

&gt;&gt; Source/WebCore/platform/graphics/win/FontCascadeDirect2D.cpp:56
&gt;&gt; +    case Antialiased: {
&gt; 
&gt; Scope doesn&apos;t look needed here.

OK.

&gt;&gt; Source/WebCore/platform/graphics/win/FontCascadeDirect2D.cpp:84
&gt;&gt; +    context-&gt;GetTransform(&amp;matrix);
&gt; 
&gt; Can this fail, leaving matrix uninitialized?  The other context functions look like they might be able to fail, too.

GetTransform/SetTransform don&apos;t return error state, so I don&apos;t think so.

Likewise the D2D1::Matrix3x2F::Skew(..) (and related) functions just return matrix values. There is no error state, since they are probably just performing simple calculations.

&gt;&gt; Source/WebCore/platform/graphics/win/FontPlatformDataDirect2D.cpp:56
&gt;&gt; +    , m_orientation(Horizontal)
&gt; 
&gt; This should use c++ style initialization in the header
&gt; m_ orientation { Horizontal }

Will fix.

&gt;&gt; Source/WebCore/platform/graphics/win/FontPlatformDataDirect2D.cpp:61
&gt;&gt; +    , m_isColorBitmapFont(false)
&gt; 
&gt; ditto

ditto.

&gt;&gt; Source/WebCore/platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp:55
&gt;&gt; +    int localeLength = GetUserDefaultLocaleName(reinterpret_cast&lt;LPWSTR&gt;(&amp;localeName), 255);
&gt; 
&gt; LOCALE_NAME_MAX_LENGTH

Whoops!

&gt;&gt; Source/WebCore/platform/graphics/win/SimpleFontDataDirect2D.cpp:182
&gt;&gt; +    RELEASE_ASSERT(font);
&gt; 
&gt; fontFace?

Whoops! Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234720</commentid>
    <comment_count>7</comment_count>
      <attachid>290180</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-28 22:31:04 -0700</bug_when>
    <thetext>Created attachment 290180
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234721</commentid>
    <comment_count>8</comment_count>
      <attachid>290180</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-28 22:46:08 -0700</bug_when>
    <thetext>Comment on attachment 290180
Patch

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

&gt; Source/WebCore/platform/graphics/win/FontPlatformDataDirect2D.cpp:7
&gt; + * modify it under the terms of the GNU Library General Public
&gt; + * License as published by the Free Software Foundation; eithe
&gt; + * version 2 of the License, or (at your option) any later version.

This looks like the wrong license.

&gt; Source/WebCore/platform/graphics/win/SimpleFontDataDirect2D.cpp:15
&gt; + * 3.  Neither the name of Apple Inc. (&quot;Apple&quot;) nor the names of
&gt; + *     its contributors may be used to endorse or promote products derived
&gt; + *     from this software without specific prior written permission. 

I think the newest license has 2 clauses here.

&gt; Source/WebCore/platform/graphics/win/SimpleFontDataDirect2D.cpp:226
&gt; +    RELEASE_ASSERT(SUCCEEDED(hr));

There is heavy use of RELEASE_ASSERT in this patch.  Do we really want to crash in all these cases?

&gt; Source/WebCore/platform/graphics/win/TextAnalyzerHelper.cpp:118
&gt; +    return S_OK;

Do we really want to return S_OK for all these unimplemented functions?

&gt; Source/WebCore/platform/graphics/win/TextAnalyzerHelper.h:62
&gt; +    DWRITE_SCRIPT_ANALYSIS m_analysis;

Should this also have an initializer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234722</commentid>
    <comment_count>9</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-28 22:48:33 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 290172 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=290172&amp;action=review
&gt; 
&gt; These new files aren&apos;t added to PlatformWin.cmake.  They should probably be
&gt; added so we can at least see if they compile, unless they&apos;re so incomplete
&gt; that they don&apos;t link.

Let&apos;s talk tomorrow. These won&apos;t compile without new GraphicsContext code, so not much point building this yet.

I have a follow-up patch where we can get things building, but it&apos;s going to be an either/or build with the Windows CoreGraphics or WinCairo builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234723</commentid>
    <comment_count>10</comment_count>
      <attachid>290180</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-28 23:10:55 -0700</bug_when>
    <thetext>Comment on attachment 290180
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/FontPlatformDataDirect2D.cpp:7
&gt;&gt; + * version 2 of the License, or (at your option) any later version.
&gt; 
&gt; This looks like the wrong license.

Ok. I&apos;ll revise that.

&gt;&gt; Source/WebCore/platform/graphics/win/SimpleFontDataDirect2D.cpp:226
&gt;&gt; +    RELEASE_ASSERT(SUCCEEDED(hr));
&gt; 
&gt; There is heavy use of RELEASE_ASSERT in this patch.  Do we really want to crash in all these cases?

I think it&apos;s warranted for now. This code isn&apos;t being built or used by anyone but me, and I would like to know immediately if one of these fails. We can back off on this once we get tests running.

&gt;&gt; Source/WebCore/platform/graphics/win/TextAnalyzerHelper.cpp:118
&gt;&gt; +    return S_OK;
&gt; 
&gt; Do we really want to return S_OK for all these unimplemented functions?

They aren&apos;t even called in the analyze scripts case I&apos;m using. I&apos;ll switch to E_UNIMPL or whatever that flag is.

&gt;&gt; Source/WebCore/platform/graphics/win/TextAnalyzerHelper.h:62
&gt;&gt; +    DWRITE_SCRIPT_ANALYSIS m_analysis;
&gt; 
&gt; Should this also have an initializer?

I&apos;ll add one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234811</commentid>
    <comment_count>11</comment_count>
      <attachid>290205</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-29 09:13:31 -0700</bug_when>
    <thetext>Created attachment 290205
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234828</commentid>
    <comment_count>12</comment_count>
      <attachid>290205</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-29 10:04:29 -0700</bug_when>
    <thetext>Comment on attachment 290205
Patch

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

r=me once these comments are addressed.

&gt; Source/WebCore/platform/graphics/win/FontCascadeDirect2D.cpp:97
&gt; +    for (unsigned i = 0; i &lt; numGlyphs; ++i) {
&gt; +        auto advance = glyphBuffer.advances(i + from);
&gt; +        if (!advance)
&gt; +            continue;

This seems like it could go out of bounds if we didn&apos;t properly check numGlyphs.  It&apos;s definitely outside the scope of this patch, but using iterators would be safer.

&gt; Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp:44
&gt;  using namespace std;

Could we get rid of this, too?

&gt; Source/WebCore/platform/graphics/win/FontPlatformDataDirect2D.cpp:37
&gt; +using namespace std::min;

This isn&apos;t used.  And std::min isn&apos;t a namespace.

&gt; Source/WebCore/platform/graphics/win/FontPlatformDataDirect2D.cpp:55
&gt; +        m_isSystemFont = !wcscmp(faceName, L&quot;Lucida Grande&quot;);

I see this is done a few other places, but do we really want to hard code in the name of the system font?

&gt; Source/WebCore/platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp:2
&gt; + * Copyright (C) 2006 Apple Inc.  All rights reserved.

2016 here and in many other headers.

&gt; Source/WebCore/platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp:54
&gt; +    localeName[localeLength] = 0;

I prefer &apos;\0&apos; to indicate the type.

&gt; Source/WebCore/platform/graphics/win/SimpleFontDataDirect2D.cpp:50
&gt; +using namespace std;

can we not?

&gt; Source/WebCore/platform/graphics/win/TextAnalyzerHelper.cpp:40
&gt; +    m_analysis = { };

Why isn&apos;t this with the others?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234845</commentid>
    <comment_count>13</comment_count>
      <attachid>290205</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-29 10:25:25 -0700</bug_when>
    <thetext>Comment on attachment 290205
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/FontCascadeDirect2D.cpp:97
&gt;&gt; +            continue;
&gt; 
&gt; This seems like it could go out of bounds if we didn&apos;t properly check numGlyphs.  It&apos;s definitely outside the scope of this patch, but using iterators would be safer.

I&apos;ll add a check that &apos;i+from&apos; is not greater than the size of the advances member.

This is probably needed in FontCG as well, but I&apos;ll do that as a separate patch.

&gt;&gt; Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp:44
&gt;&gt;  using namespace std;
&gt; 
&gt; Could we get rid of this, too?

Done.

&gt;&gt; Source/WebCore/platform/graphics/win/FontPlatformDataDirect2D.cpp:37
&gt;&gt; +using namespace std::min;
&gt; 
&gt; This isn&apos;t used.  And std::min isn&apos;t a namespace.

Done.

&gt;&gt; Source/WebCore/platform/graphics/win/FontPlatformDataDirect2D.cpp:55
&gt;&gt; +        m_isSystemFont = !wcscmp(faceName, L&quot;Lucida Grande&quot;);
&gt; 
&gt; I see this is done a few other places, but do we really want to hard code in the name of the system font?

Especially when system font on Vista and newer (I think) is &quot;Segoe UI&quot;. This should probably be done with some kind of system check, and probably in FontPlatformDataWin.cpp and shared across the Windows ports.

I&apos;ll do a separate bug for that.

&gt;&gt; Source/WebCore/platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp:2
&gt;&gt; + * Copyright (C) 2006 Apple Inc.  All rights reserved.
&gt; 
&gt; 2016 here and in many other headers.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp:54
&gt;&gt; +    localeName[localeLength] = 0;
&gt; 
&gt; I prefer &apos;\0&apos; to indicate the type.

OK!

&gt;&gt; Source/WebCore/platform/graphics/win/SimpleFontDataDirect2D.cpp:50
&gt;&gt; +using namespace std;
&gt; 
&gt; can we not?

Sure!

&gt;&gt; Source/WebCore/platform/graphics/win/TextAnalyzerHelper.cpp:40
&gt;&gt; +    m_analysis = { };
&gt; 
&gt; Why isn&apos;t this with the others?

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234849</commentid>
    <comment_count>14</comment_count>
      <attachid>290216</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-29 10:43:23 -0700</bug_when>
    <thetext>Created attachment 290216
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234852</commentid>
    <comment_count>15</comment_count>
      <attachid>290216</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-09-29 10:44:30 -0700</bug_when>
    <thetext>Comment on attachment 290216
Patch for landing

Re-adding r+ from Alex&apos;s review. New patch for landing to make sure the bots are happy before committing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234889</commentid>
    <comment_count>16</comment_count>
      <attachid>290216</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-29 11:47:36 -0700</bug_when>
    <thetext>Comment on attachment 290216
Patch for landing

Clearing flags on attachment: 290216

Committed r206597: &lt;http://trac.webkit.org/changeset/206597&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234890</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-29 11:47:41 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290168</attachid>
            <date>2016-09-28 20:15:44 -0700</date>
            <delta_ts>2016-09-28 20:37:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162712-20160928201243.patch</filename>
            <type>text/plain</type>
            <size>39630</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE2LTA5LTI4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBB
ZGQgRDJEIEZvbnQgaGFuZGxpbmcgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNzEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBsYW5kcyBhIHNldCBvZiBuZXcgZmlsZXMgdGhh
dCBpbXBsZW1lbnQgCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHVudGlsIGNvbXBsZXRlIGJhY2tl
bmQgbGFuZHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKTogQWRkIGNhc2UgZm9yIERpcmVjdDJELgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhKTogRml4IHdoaXRlc3BhY2UuCisgICAgICAgIChXZWJDb3JlOjpGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKTogQWRkIERpcmVjdDJEIGNhc2UuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnREaXJlY3QyRC5jcHA6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhRGlyZWN0MkQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJl
ZU5vZGVEaXJlY3QyRC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9TaW1wbGVGb250RGF0YURpcmVjdDJELmNwcDogQWRkZWQuCisKIDIwMTYtMDktMjggIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBMb2cgY29uc29sZSBtZXNzYWdl
cyB3aGVuIHRoZSBhbmNob3IgZG93bmxvYWQgYXR0cmlidXRlIGlzIGlnbm9yZWQKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDIwNjUyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNTcsNiArNTcsMTEgQEAKICNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKICNlbmRpZgog
CisjaWYgVVNFKERJUkVDVDJEKQoraW50ZXJmYWNlIElEV3JpdGVGYWN0b3J5OworaW50ZXJmYWNl
IElEV3JpdGVHZGlJbnRlcm9wOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgR2x5cGhQYWdlOwpAQCAtMTQzLDcgKzE0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9hZGp1
c3RlZFNwYWNlV2lkdGggPSBzcGFjZVdpZHRoOwogICAgIH0KIAotI2lmIFVTRShDRykgfHwgVVNF
KENBSVJPKQorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKSB8fCBVU0UoQ0FJUk8pCiAgICAg
ZmxvYXQgc3ludGhldGljQm9sZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9s
ZE9mZnNldDsgfQogI2VuZGlmCiAKQEAgLTE5OCw2ICsyMDMsMTEgQEAgcHVibGljOgogICAgIHN0
YXRpYyBmbG9hdCBhc2NlbnRDb25zaWRlcmluZ01hY0FzY2VudEhhY2soY29uc3QgV0NIQVIqLCBm
bG9hdCBhc2NlbnQsIGZsb2F0IGRlc2NlbnQpOwogI2VuZGlmCiAKKyNpZiBVU0UoRElSRUNUMkQp
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEV3JpdGVGYWN0b3J5KiBzeXN0ZW1EV3JpdGVG
YWN0b3J5KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEV3JpdGVHZGlJbnRlcm9wKiBz
eXN0ZW1EV3JpdGVHZGlJbnRlcm9wKCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBGb250KGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzQ3VzdG9tRm9udCA9IGZhbHNlLCBib29sIGlz
TG9hZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2sgPSBmYWxzZSk7
CiAKQEAgLTI2Nyw3ICsyNzcsNyBAQCBwcml2YXRlOgogCiAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8RGVyaXZlZEZvbnRzPiBtX2Rlcml2ZWRGb250RGF0YTsKIAotI2lmIFVTRShDRykgfHwg
VVNFKENBSVJPKQorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKSB8fCBVU0UoQ0FJUk8pCiAg
ICAgZmxvYXQgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OwogI2VuZGlmCiAKQEAgLTMzOCw3ICszNDgs
NyBAQCBBTFdBWVNfSU5MSU5FIGZsb2F0IEZvbnQ6OndpZHRoRm9yR2x5cGgoCiAKICNpZiBFTkFC
TEUoT1BFTlRZUEVfVkVSVElDQUwpCiAgICAgaWYgKG1fdmVydGljYWxEYXRhKSB7Ci0jaWYgVVNF
KENHKSB8fCBVU0UoQ0FJUk8pCisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpIHx8IFVTRShD
QUlSTykKICAgICAgICAgd2lkdGggPSBtX3ZlcnRpY2FsRGF0YS0+YWR2YW5jZUhlaWdodCh0aGlz
LCBnbHlwaCkgKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7CiAjZWxzZQogICAgICAgICB3aWR0aCA9
IG1fdmVydGljYWxEYXRhLT5hZHZhbmNlSGVpZ2h0KHRoaXMsIGdseXBoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgJ
KHJldmlzaW9uIDIwNjUyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRQbGF0Zm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1
ZGUgIlRleHRGbGFncy5oIgogCiAjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgIkNPTVB0ci5o
IgogI2luY2x1ZGUgIlNoYXJlZEdESU9iamVjdC5oIgogI2VuZGlmCiAKQEAgLTY1LDYgKzY2LDgg
QEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVEZvbnQqIENURm9udFJlZgogI2lmIFBMQVRGT1JN
KFdJTikKICNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgogdHlwZWRlZiBzdHJ1Y3QgSEZP
TlRfXyogSEZPTlQ7CitpbnRlcmZhY2UgSURXcml0ZUZvbnQ7CitpbnRlcmZhY2UgSURXcml0ZUZv
bnRGYWNlOwogI2VuZGlmCiAKIApAQCAtMTAzLDYgKzEwNiw4IEBAIHB1YmxpYzoKIAogI2lmIFVT
RShDRykKICAgICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4sIENHRm9udFJlZiwg
ZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIGJv
b2wgdXNlR0RJKTsKKyNlbGlmIFVTRShESVJFQ1QyRCkKKyAgICBGb250UGxhdGZvcm1EYXRhKEdE
SU9iamVjdDxIRk9OVD4sIElEV3JpdGVGb250KiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNC
b2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJKTsKICNlbGlmIFVTRShDQUlS
TykKICAgICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4sIGNhaXJvX2ZvbnRfZmFj
ZV90KiwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYyk7CiAjZW5kaWYKQEAgLTEz
Nyw2ICsxNDIsMTEgQEAgcHVibGljOgogICAgIENHRm9udFJlZiBjZ0ZvbnQoKSBjb25zdCB7IHJl
dHVybiBtX2NnRm9udC5nZXQoKTsgfQogI2VuZGlmCiAKKyNpZiBVU0UoRElSRUNUMkQpCisgICAg
SURXcml0ZUZvbnQqIGR3Rm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZHdGb250LmdldCgpOyB9Cisg
ICAgSURXcml0ZUZvbnRGYWNlKiBkd0ZvbnRGYWNlKCkgY29uc3QgeyByZXR1cm4gbV9kd0ZvbnRG
YWNlLmdldCgpOyB9CisjZW5kaWYKKwogICAgIGJvb2wgaXNGaXhlZFBpdGNoKCkgY29uc3Q7CiAg
ICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIGJvb2wgc3ludGhl
dGljQm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9sZDsgfQpAQCAtMjQxLDYgKzI1
MSwxMCBAQCBwcml2YXRlOgogI2lmIFVTRShDRykgJiYgKFBMQVRGT1JNKFdJTikgfHwgKFBMQVRG
T1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTIwMCkgfHwg
KFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDAw
MDApKQogICAgIFJldGFpblB0cjxDR0ZvbnRSZWY+IG1fY2dGb250OwogI2VuZGlmCisjaWYgVVNF
KERJUkVDVDJEKQorICAgIENPTVB0cjxJRFdyaXRlRm9udD4gbV9kd0ZvbnQ7CisgICAgQ09NUHRy
PElEV3JpdGVGb250RmFjZT4gbV9kd0ZvbnRGYWNlOworI2VuZGlmCiAjaWYgVVNFKENBSVJPKQog
ICAgIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90PiBtX3NjYWxlZEZvbnQ7CiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q2FjaGVXaW4uY3BwCShyZXZpc2lvbiAyMDY1MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiAr
NDcsMTAgQEAKICNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50
ZXJmYWNlLmg+CiAjZW5kaWYKIAorI2lmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRlIDxkd3JpdGUu
aD4KKyNlbmRpZgorCiB1c2luZyBzdGQ6Om1pbjsKIAogbmFtZXNwYWNlIFdlYkNvcmUKQEAgLTU0
OSw2ICs1NTMsNyBAQCBzdGF0aWMgaW50IENBTExCQUNLIHRyYWl0c0luRmFtaWx5RW51bVByCiAg
ICAgcHJvY0RhdGEtPm1fdHJhaXRzTWFza3MuYWRkKHRyYWl0c01hc2spOwogICAgIHJldHVybiAx
OwogfQorCiBWZWN0b3I8Rm9udFRyYWl0c01hc2s+IEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1p
bHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQogewogICAgIEhXbmREQyBoZGMoMCk7
CkBAIC01OTksNiArNjA0LDggQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZv
bnRDYQogCiAjaWYgVVNFKENHKQogICAgIGJvb2wgZm9udENyZWF0aW9uRmFpbGVkID0gIXJlc3Vs
dC0+Y2dGb250KCk7CisjZWxpZiBVU0UoRElSRUNUMkQpCisgICAgYm9vbCBmb250Q3JlYXRpb25G
YWlsZWQgPSAhcmVzdWx0LT5kd0ZvbnQoKTsKICNlbGlmIFVTRShDQUlSTykKICAgICBib29sIGZv
bnRDcmVhdGlvbkZhaWxlZCA9ICFyZXN1bHQtPnNjYWxlZEZvbnQoKTsKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAkocmV2aXNpb24gMjA2NTI5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMiArMjUsMjAgQEAKICNpbmNsdWRlICJGb250UGxhdGZv
cm1EYXRhLmgiCiAjaW5jbHVkZSAiT3BlblR5cGVVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vy
dmljZXMuaD4KLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50
ZXJmYWNlLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgogI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2JqZWN0Lmg+CiAKKyNpZiBVU0UoQ0cp
CisjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Cisj
aW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgor
I2VuZGlmCisKKyNpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUg
PGR3cml0ZS5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKQEAgLTM4LDcgKzQ2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIEZvbnRDdXN0
b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKIHsKICAgICBpZiAobV9m
b250UmVmZXJlbmNlKQotICAgICAgICAgICAgUmVtb3ZlRm9udE1lbVJlc291cmNlRXgobV9mb250
UmVmZXJlbmNlKTsKKyAgICAgICAgUmVtb3ZlRm9udE1lbVJlc291cmNlRXgobV9mb250UmVmZXJl
bmNlKTsKIH0KIAogRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBib29s
IGJvbGQsIGJvb2wgaXRhbGljKQpAQCAtNjgsOCArNzYsMTUgQEAgRm9udFBsYXRmb3JtRGF0YSBG
b250Q3VzdG9tUGxhdGZvcm1EYXRhOgogCiAgICAgYXV0byBoZm9udCA9IGFkb3B0R0RJT2JqZWN0
KDo6Q3JlYXRlRm9udEluZGlyZWN0KCZsb2dGb250KSk7CiAKKyNpZiBVU0UoQ0cpCiAgICAgUmV0
YWluUHRyPENHRm9udFJlZj4gY2dGb250ID0gYWRvcHRDRihDR0ZvbnRDcmVhdGVXaXRoUGxhdGZv
cm1Gb250KCZsb2dGb250KSk7CiAgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoV1RGTW92ZSho
Zm9udCksIGNnRm9udC5nZXQoKSwgc2l6ZSwgYm9sZCwgaXRhbGljLCByZW5kZXJpbmdNb2RlID09
IEZvbnRSZW5kZXJpbmdNb2RlOjpBbHRlcm5hdGUpOworI2Vsc2UKKyAgICBDT01QdHI8SURXcml0
ZUZvbnQ+IGR3Rm9udDsKKyAgICBIUkVTVUxUIGhyID0gRm9udDo6c3lzdGVtRFdyaXRlR2RpSW50
ZXJvcCgpLT5DcmVhdGVGb250RnJvbUxPR0ZPTlQoJmxvZ0ZvbnQsICZkd0ZvbnQpOworICAgIFJF
TEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRh
KFdURk1vdmUoaGZvbnQpLCBkd0ZvbnQuZ2V0KCksIHNpemUsIGJvbGQsIGl0YWxpYywgcmVuZGVy
aW5nTW9kZSA9PSBGb250UmVuZGVyaW5nTW9kZTo6QWx0ZXJuYXRlKTsKKyNlbmRpZgogfQogCiAv
LyBDcmVhdGVzIGEgdW5pcXVlIGFuZCB1bnByZWRpY3RhYmxlIGZvbnQgbmFtZSwgaW4gb3JkZXIg
dG8gYXZvaWQgY29sbGlzaW9ucyBhbmQgdG8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250RGlyZWN0MkQuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250RGlyZWN0MkQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKKworI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgorI2luY2x1ZGUgIkNPTVB0ci5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lv
bi5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZURpcmVjdDJELmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlVuaXNj
cmliZUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCisjaW5j
bHVkZSA8ZDJkMS5oPgorI2luY2x1ZGUgPGR3cml0ZS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgaW50IHN5bnRoZXRpY09ibGlx
dWVBbmdsZSA9IDE0OworCit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsCisgICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkK
K3sKKyAgICBhdXRvIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7
CisgICAgYm9vbCBzaG91bGRVc2VGb250U21vb3RoaW5nID0gV2ViQ29yZVNob3VsZFVzZUZvbnRT
bW9vdGhpbmcoKTsKKworICAgIHN3aXRjaCAoc21vb3RoaW5nTW9kZSkgeworICAgIGNhc2UgQW50
aWFsaWFzZWQ6IHsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh0
cnVlKTsKKyAgICAgICAgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IGZhbHNlOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBTdWJwaXhlbEFudGlhbGlhc2VkOiB7CisgICAgICAgIGdy
YXBoaWNzQ29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7CisgICAgICAgIHNob3VsZFVz
ZUZvbnRTbW9vdGhpbmcgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBO
b1Ntb290aGluZzogeworICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFz
KGZhbHNlKTsKKyAgICAgICAgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IGZhbHNlOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBdXRvU21vb3RoaW5nOiB7CisgICAgICAgIC8vIEZv
ciB0aGUgQXV0b1Ntb290aCBjYXNlLCBkb24ndCBkbyBhbnl0aGluZyEgS2VlcCB0aGUgZGVmYXVs
dCBzZXR0aW5ncy4KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7CisKKyAgICBncmFwaGljc0Nv
bnRleHQuc2F2ZSgpOworCisgICAgRDJEMV9NQVRSSVhfM1gyX0YgbWF0cml4OworICAgIGNvbnRl
eHQtPkdldFRyYW5zZm9ybSgmbWF0cml4KTsKKworICAgIGlmIChwbGF0Zm9ybURhdGEuc3ludGhl
dGljT2JsaXF1ZSgpKSB7CisgICAgICAgIHN0YXRpYyBmbG9hdCBza2V3ID0gLXRhbmYoc3ludGhl
dGljT2JsaXF1ZUFuZ2xlICogcGlGbG9hdCAvIDE4MC4wZik7CisgICAgICAgIGF1dG8gc2tld01h
dHJpeCA9IEQyRDE6Ok1hdHJpeDN4MkY6OlNrZXcoc2tldywgMCk7CisgICAgICAgIGNvbnRleHQt
PlNldFRyYW5zZm9ybShtYXRyaXggKiBza2V3TWF0cml4KTsKKyAgICB9CisKKyAgICAvLyBVbmlz
Y3JpYmUgZ2l2ZXMgdXMgb2Zmc2V0cyB0byBoZWxwIHJlZmluZSB0aGUgcG9zaXRpb25pbmcgb2Yg
Y29tYmluaW5nIGdseXBocy4KKyAgICBGbG9hdFNpemUgdHJhbnNsYXRpb24gPSBnbHlwaEJ1ZmZl
ci5vZmZzZXRBdChmcm9tKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKHBsYXRmb3JtRGF0YS5kd0Zv
bnQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKSk7CisK
KyAgICBWZWN0b3I8RkxPQVQ+IGhvcml6b250YWxBZHZhbmNlcyhudW1HbHlwaHMpOworICAgIFZl
Y3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiBvZmZzZXRBZHZhbmNlcyhudW1HbHlwaHMpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICBhdXRv
IGFkdmFuY2UgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhpICsgZnJvbSk7CisgICAgICAgIGlmICgh
YWR2YW5jZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGhvcml6b250YWxBZHZh
bmNlc1tpXSA9IGFkdmFuY2UtPndpZHRoKCk7CisgICAgICAgIG9mZnNldEFkdmFuY2VzW2ldLmFk
dmFuY2VPZmZzZXQgPSBhZHZhbmNlLT53aWR0aCgpOworICAgICAgICBvZmZzZXRBZHZhbmNlc1tp
XS5hc2NlbmRlck9mZnNldCA9IGFkdmFuY2UtPmhlaWdodCgpOworICAgIH0KKworICAgIERXUklU
RV9HTFlQSF9SVU4gZ2x5cGhSdW47CisgICAgZ2x5cGhSdW4uZm9udEZhY2UgPSBwbGF0Zm9ybURh
dGEuZHdGb250RmFjZSgpOworICAgIGdseXBoUnVuLmZvbnRFbVNpemUgPSBwbGF0Zm9ybURhdGEu
c2l6ZSgpOworICAgIGdseXBoUnVuLmdseXBoQ291bnQgPSBudW1HbHlwaHM7CisgICAgZ2x5cGhS
dW4uZ2x5cGhJbmRpY2VzID0gZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pOworICAgIGdseXBoUnVu
LmdseXBoQWR2YW5jZXMgPSBob3Jpem9udGFsQWR2YW5jZXMuZGF0YSgpOworICAgIGdseXBoUnVu
LmdseXBoT2Zmc2V0cyA9IG51bGxwdHI7CisgICAgZ2x5cGhSdW4uaXNTaWRld2F5cyA9IHBsYXRm
b3JtRGF0YS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsOworICAgIGdseXBoUnVuLmJpZGlMZXZl
bCA9IDA7CisKKyAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OworICAgIGZsb2F0IHNoYWRvd0Js
dXI7CisgICAgQ29sb3Igc2hhZG93Q29sb3I7CisgICAgZ3JhcGhpY3NDb250ZXh0LmdldFNoYWRv
dyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKworICAgIGJvb2wgaGFz
U2ltcGxlU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHRN
b2RlRmlsbCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIgJiYgKCFncmFw
aGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBncmFwaGljc0NvbnRleHQu
Z2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7CisgICAgaWYgKGhh
c1NpbXBsZVNoYWRvdykgeworICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2
ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJw
aXhlbCBhbnRpYWxpYXNpbmcuCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNoYWRvdygp
OworICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQuZmlsbENvbG9yKCk7
CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvcihzaGFkb3dDb2xvci5yZWQoKSwgc2hhZG93
Q29sb3IuZ3JlZW4oKSwgc2hhZG93Q29sb3IuYmx1ZSgpLCBzaGFkb3dDb2xvci5hbHBoYSgpICog
ZmlsbENvbG9yLmFscGhhKCkgLyAyNTUpOworICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBv
aW50LngoKSArIHRyYW5zbGF0aW9uLndpZHRoKCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKKyAg
ICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZl
bid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2
ZS4KKyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyB0cmFuc2xhdGlvbi5o
ZWlnaHQoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7CisKKyAgICAgICAgQ09NUHRyPElEMkQxU29s
aWRDb2xvckJydXNoPiBzaGFkb3dCcnVzaDsKKyAgICAgICAgaWYgKCFTVUNDRUVERUQoY29udGV4
dC0+Q3JlYXRlU29saWRDb2xvckJydXNoKGdyYXBoaWNzQ29udGV4dC5jb2xvcldpdGhHbG9iYWxB
bHBoYShzaGFkb3dGaWxsQ29sb3IpLCAmc2hhZG93QnJ1c2gpKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihzaGFkb3dU
ZXh0WCwgc2hhZG93VGV4dFkpLCAmZ2x5cGhSdW4sIHNoYWRvd0JydXNoLmdldCgpKTsKKyAgICAg
ICAgaWYgKGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpKQorICAgICAgICAgICAgY29udGV4dC0+
RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50MkYoc2hhZG93VGV4dFggKyBmb250LnN5bnRoZXRpY0Jv
bGRPZmZzZXQoKSwgc2hhZG93VGV4dFkpLCAmZ2x5cGhSdW4sIHNoYWRvd0JydXNoLmdldCgpKTsK
KyAgICB9CisKKyAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihwb2ludC54
KCkgKyB0cmFuc2xhdGlvbi53aWR0aCgpLCBwb2ludC55KCkgKyB0cmFuc2xhdGlvbi5oZWlnaHQo
KSksICZnbHlwaFJ1biwgZ3JhcGhpY3NDb250ZXh0LnNvbGlkRmlsbEJydXNoKCkpOworICAgIGlm
IChmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSkKKyAgICAgICAgY29udGV4dC0+RHJhd0dseXBo
UnVuKEQyRDE6OlBvaW50MkYocG9pbnQueCgpICsgdHJhbnNsYXRpb24ud2lkdGgoKSArIGZvbnQu
c3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkgKyB0cmFuc2xhdGlvbi5oZWlnaHQoKSks
ICZnbHlwaFJ1biwgZ3JhcGhpY3NDb250ZXh0LnNvbGlkRmlsbEJydXNoKCkpOworCisgICAgaWYg
KGhhc1NpbXBsZVNoYWRvdykKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhzaGFk
b3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKworICAgIGdyYXBoaWNzQ29udGV4
dC5yZXN0b3JlKCk7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YURpcmVjdDJELmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0
YURpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisKKyNp
ZiBVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJTaGFyZWRHRElPYmplY3QuaCIKKyNpbmNsdWRlIDxkMmQxLmg+CisjaW5jbHVkZSA8ZHdyaXRl
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOjptaW47
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9y
bURhdGFJbml0KEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIEhEQyBoZGMsIFdDSEFSKiBmYWNlTmFt
ZSkKK3sKKyAgICBMT0dGT05UIGxvZ2ZvbnQ7CisgICAgR2V0T2JqZWN0KGZvbnQsIHNpemVvZihs
b2dmb250KSwgJmxvZ2ZvbnQpOworCisgICAgSFJFU1VMVCBociA9IEZvbnQ6OnN5c3RlbURXcml0
ZUdkaUludGVyb3AoKS0+Q3JlYXRlRm9udEZyb21MT0dGT05UKCZsb2dmb250LCAmbV9kd0ZvbnQp
OworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaHIgPSBt
X2R3Rm9udC0+Q3JlYXRlRm9udEZhY2UoJm1fZHdGb250RmFjZSk7CisgICAgaWYgKCFTVUNDRUVE
RUQoaHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdXNlR0RJKQorICAgICAgICBt
X2lzU3lzdGVtRm9udCA9ICF3Y3NjbXAoZmFjZU5hbWUsIEwiTHVjaWRhIEdyYW5kZSIpOworfQor
CitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4gaGZv
bnQsIElEV3JpdGVGb250KiBmb250LCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1
ZSwgYm9vbCB1c2VHREkpCisgICAgOiBtX3N5bnRoZXRpY0JvbGQoYm9sZCkKKyAgICAsIG1fc3lu
dGhldGljT2JsaXF1ZShvYmxpcXVlKQorICAgICwgbV9vcmllbnRhdGlvbihIb3Jpem9udGFsKQor
ICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX3dpZHRoVmFyaWFudChSZWd1bGFyV2lkdGgpCisg
ICAgLCBtX2ZvbnQoU2hhcmVkR0RJT2JqZWN0PEhGT05UPjo6Y3JlYXRlKFdURk1vdmUoaGZvbnQp
KSkKKyAgICAsIG1fZHdGb250KGZvbnQpCisgICAgLCBtX2lzQ29sb3JCaXRtYXBGb250KGZhbHNl
KQorICAgICwgbV91c2VHREkodXNlR0RJKQoreworICAgIEhSRVNVTFQgaHIgPSBtX2R3Rm9udC0+
Q3JlYXRlRm9udEZhY2UoJm1fZHdGb250RmFjZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VF
REVEKGhyKSk7Cit9CisKK3N0YXRpYyBib29sIGZvbnRzQXJlRXF1YWwoSURXcml0ZUZvbnQqIGEs
IElEV3JpdGVGb250KiBiKQoreworICAgIGlmICghYSAmJiAhYikKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoYSA9PSBiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgo
IWEgJiYgYikgfHwgKGEgJiYgIWIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
YS0+R2V0V2VpZ2h0KCkgIT0gYi0+R2V0V2VpZ2h0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChhLT5HZXRTdHlsZSgpICE9IGItPkdldFN0eWxlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChhLT5HZXRTdHJldGNoKCkgIT0gYi0+R2V0U3RyZXRjaCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBEV1JJVEVfRk9OVF9NRVRSSUNTIGFNZXRyaWNz
LCBiTWV0cmljczsKKyAgICBhLT5HZXRNZXRyaWNzKCZhTWV0cmljcyk7CisgICAgYi0+R2V0TWV0
cmljcygmYk1ldHJpY3MpOworCisgICAgaWYgKChhTWV0cmljcy5kZXNpZ25Vbml0c1BlckVtICE9
IGJNZXRyaWNzLmRlc2lnblVuaXRzUGVyRW0pCisgICAgICAgIHx8IChhTWV0cmljcy5hc2NlbnQg
IT0gYk1ldHJpY3MuYXNjZW50KQorICAgICAgICB8fCAoYU1ldHJpY3MuZGVzY2VudCAhPSBiTWV0
cmljcy5hc2NlbnQpCisgICAgICAgIHx8IChhTWV0cmljcy5saW5lR2FwICE9IGJNZXRyaWNzLmxp
bmVHYXApCisgICAgICAgIHx8IChhTWV0cmljcy5jYXBIZWlnaHQgIT0gYk1ldHJpY3MuY2FwSGVp
Z2h0KQorICAgICAgICB8fCAoYU1ldHJpY3MueEhlaWdodCAhPSBiTWV0cmljcy54SGVpZ2h0KQor
ICAgICAgICB8fCAoYU1ldHJpY3MudW5kZXJsaW5lUG9zaXRpb24gIT0gYk1ldHJpY3MudW5kZXJs
aW5lUG9zaXRpb24pCisgICAgICAgIHx8IChhTWV0cmljcy51bmRlcmxpbmVUaGlja25lc3MgIT0g
Yk1ldHJpY3MudW5kZXJsaW5lVGhpY2tuZXNzKQorICAgICAgICB8fCAoYU1ldHJpY3Muc3RyaWtl
dGhyb3VnaFBvc2l0aW9uICE9IGJNZXRyaWNzLnN0cmlrZXRocm91Z2hQb3NpdGlvbikKKyAgICAg
ICAgfHwgKGFNZXRyaWNzLnN0cmlrZXRocm91Z2hUaGlja25lc3MgIT0gYk1ldHJpY3Muc3RyaWtl
dGhyb3VnaFRoaWNrbmVzcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbChjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250ID09IG90
aGVyLm1fZm9udAorICAgICAgICAmJiBtX3VzZUdESSA9PSBvdGhlci5tX3VzZUdESQorICAgICAg
ICAmJiBmb250c0FyZUVxdWFsKG1fZHdGb250LmdldCgpLCBvdGhlci5tX2R3Rm9udC5nZXQoKSk7
Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR2x5cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKKworI2lmIFVTRShE
SVJFQ1QyRCkKKworI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJUZXh0QW5hbHlzaXNIZWxw
ZXIuaCIKKyNpbmNsdWRlIDxkd3JpdGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29s
IEdseXBoUGFnZTo6ZmlsbChVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpCit7
CisgICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgY29uc3QgRm9udCYgZm9udCA9IHRoaXMtPmZvbnQoKTsKKyAgICBib29s
IGhhdmVHbHlwaHMgPSBmYWxzZTsKKworICAgIENPTVB0cjxJRFdyaXRlVGV4dEFuYWx5emVyPiBh
bmFseXplcjsKKyAgICBIUkVTVUxUIGhyID0gRm9udDo6c3lzdGVtRFdyaXRlRmFjdG9yeSgpLT5D
cmVhdGVUZXh0QW5hbHl6ZXIoJmFuYWx5emVyKTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVE
RUQoaHIpKTsKKworICAgIGF1dG8mIGZvbnRQbGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3JtRGF0
YSgpOworCisgICAgVUNoYXIgbG9jYWxlTmFtZVsyNTZdID0geyB9OworICAgIGludCBsb2NhbGVM
ZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUocmVpbnRlcnByZXRfY2FzdDxMUFdTVFI+
KCZsb2NhbGVOYW1lKSwgMjU1KTsKKyAgICBSRUxFQVNFX0FTU0VSVChsb2NhbGVMZW5ndGggPD0g
MjU1KTsKKyAgICBsb2NhbGVOYW1lW2xvY2FsZUxlbmd0aF0gPSAwOworCisgICAgVGV4dEFuYWx5
emVySGVscGVyIGhlbHBlcihsb2NhbGVOYW1lLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCk7CisKKyAg
ICBociA9IGFuYWx5emVyLT5BbmFseXplU2NyaXB0KCZoZWxwZXIsIDAsIGJ1ZmZlckxlbmd0aCwg
JmhlbHBlcik7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICB1bnNp
Z25lZCByZXR1cm5lZENvdW50ID0gMDsKKyAgICBHbHlwaCBsb2NhbEdseXBoQnVmZmVyW0dseXBo
UGFnZTo6c2l6ZV07CisgICAgR2x5cGggY2x1c3Rlck1hcFtHbHlwaFBhZ2U6OnNpemVdOworICAg
IFZlY3RvcjxEV1JJVEVfU0hBUElOR19URVhUX1BST1BFUlRJRVM+IHRleHRQcm9wZXJ0aWVzKEds
eXBoUGFnZTo6c2l6ZSk7CisgICAgVmVjdG9yPERXUklURV9TSEFQSU5HX0dMWVBIX1BST1BFUlRJ
RVM+IGdseXBoUHJvcGVydGllcyhHbHlwaFBhZ2U6OnNpemUpOworCisgICAgaHIgPSBhbmFseXpl
ci0+R2V0R2x5cGhzKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250UGxhdGZvcm1EYXRhLmR3Rm9u
dEZhY2UoKSwgZm9udFBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsLCBmYWxz
ZSwKKyAgICAgICAgJmhlbHBlci5tX2FuYWx5c2lzLCBudWxscHRyLCBudWxscHRyLCBudWxscHRy
LCBudWxscHRyLCAwLCBHbHlwaFBhZ2U6OnNpemUsIGNsdXN0ZXJNYXAsIHRleHRQcm9wZXJ0aWVz
LmRhdGEoKSwKKyAgICAgICAgbG9jYWxHbHlwaEJ1ZmZlciwgZ2x5cGhQcm9wZXJ0aWVzLmRhdGEo
KSwgJnJldHVybmVkQ291bnQpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7Cisg
ICAgICAgIEdseXBoIGdseXBoID0gbG9jYWxHbHlwaEJ1ZmZlcltpXTsKKyAgICAgICAgaWYgKCFn
bHlwaCkKKyAgICAgICAgICAgIHNldEdseXBoRm9ySW5kZXgoaSwgMCk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCBnbHlwaCk7CisgICAgICAgICAgICBo
YXZlR2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBoYXZlR2x5
cGhzOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVjdDJELmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
U2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250LmgiCisKKyNpZiBVU0UoRElSRUNUMkQp
CisKKyNpbmNsdWRlICJDb3JlVGV4dFNQSVdpbi5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2lu
Y2x1ZGUgIkdseXBoUGFnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkhXbmREQy5oIgorI2luY2x1ZGUgPGNvbXV0aWwuaD4KKyNpbmNsdWRlIDxkd3JpdGUuaD4K
KyNpbmNsdWRlIDxtbGFuZy5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNsdWRl
IDx1bmljb2RlL3Vub3JtLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3Bh
Y2Ugc3RkOworCitJRFdyaXRlRmFjdG9yeSogRm9udDo6c3lzdGVtRFdyaXRlRmFjdG9yeSgpCit7
CisgICAgc3RhdGljIElEV3JpdGVGYWN0b3J5KiBkaXJlY3RXcml0ZUZhY3RvcnkgPSBudWxscHRy
OworICAgIGlmICghZGlyZWN0V3JpdGVGYWN0b3J5KSB7CisgICAgICAgIEhSRVNVTFQgaHIgPSBE
V3JpdGVDcmVhdGVGYWN0b3J5KERXUklURV9GQUNUT1JZX1RZUEVfU0hBUkVELCBfX3V1aWRvZihk
aXJlY3RXcml0ZUZhY3RvcnkpLCByZWludGVycHJldF9jYXN0PElVbmtub3duKio+KCZkaXJlY3RX
cml0ZUZhY3RvcnkpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGRpcmVjdFdyaXRlRmFjdG9yeTsKK30KKworSURXcml0ZUdkaUlu
dGVyb3AqIEZvbnQ6OnN5c3RlbURXcml0ZUdkaUludGVyb3AoKQoreworICAgIHN0YXRpYyBJRFdy
aXRlR2RpSW50ZXJvcCogZGlyZWN0V3JpdGVHZGlJbnRlcm9wID0gbnVsbHB0cjsKKyAgICBpZiAo
IWRpcmVjdFdyaXRlR2RpSW50ZXJvcCkgeworICAgICAgICBIUkVTVUxUIGhyID0gc3lzdGVtRFdy
aXRlRmFjdG9yeSgpLT5HZXRHZGlJbnRlcm9wKCZkaXJlY3RXcml0ZUdkaUludGVyb3ApOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZGlyZWN0V3JpdGVHZGlJbnRlcm9wOworfQorCitzdGF0aWMgVmVjdG9yPFdDSEFSPiBnZXRGYWNl
TmFtZShJRFdyaXRlRm9udCogZm9udCkKK3sKKyAgICBpZiAoIWZvbnQpCisgICAgICAgIHJldHVy
biBWZWN0b3I8V0NIQVI+KCk7CisKKyAgICBDT01QdHI8SURXcml0ZUxvY2FsaXplZFN0cmluZ3M+
IGxvY2FsaXplZEZhY2VOYW1lczsKKyAgICBIUkVTVUxUIGhyID0gZm9udC0+R2V0RmFjZU5hbWVz
KCZsb2NhbGl6ZWRGYWNlTmFtZXMpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OworCisgICAgVUlOVDMyIGxvY2FsZUluZGV4ID0gMDsKKyAgICBCT09MIGV4aXN0cyA9IGZhbHNl
OworCisgICAgd2NoYXJfdCBsb2NhbGVOYW1lW0xPQ0FMRV9OQU1FX01BWF9MRU5HVEhdOworICAg
IGludCBsb2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUobG9jYWxlTmFtZSwg
TE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7CisgICAgaWYgKGxvY2FsZUxlbmd0aCkKKyAgICAgICAg
aHIgPSBsb2NhbGl6ZWRGYWNlTmFtZXMtPkZpbmRMb2NhbGVOYW1lKGxvY2FsZU5hbWUsICZsb2Nh
bGVJbmRleCwgJmV4aXN0cyk7CisKKyAgICBpZiAoIWV4aXN0cyB8fCAhU1VDQ0VFREVEKGhyKSkK
KyAgICAgICAgaHIgPSBsb2NhbGl6ZWRGYWNlTmFtZXMtPkZpbmRMb2NhbGVOYW1lKEwiZW4tdXMi
LCAmbG9jYWxlSW5kZXgsICZleGlzdHMpOworCisgICAgaWYgKCFleGlzdHMgfHwgIVNVQ0NFRURF
RChocikpCisgICAgICAgIGxvY2FsZUluZGV4ID0gMDsKKworICAgIFVJTlQzMiBmYWNlTmFtZUxl
bmd0aCA9IDA7CisgICAgaHIgPSBsb2NhbGl6ZWRGYWNlTmFtZXMtPkdldFN0cmluZ0xlbmd0aChs
b2NhbGVJbmRleCwgJmZhY2VOYW1lTGVuZ3RoKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisg
ICAgICAgIHJldHVybiBWZWN0b3I8V0NIQVI+KCk7CisKKyAgICBWZWN0b3I8V0NIQVI+IGZhY2VO
YW1lKGZhY2VOYW1lTGVuZ3RoICsgMSk7CisgICAgaHIgPSBsb2NhbGl6ZWRGYWNlTmFtZXMtPkdl
dFN0cmluZyhsb2NhbGVJbmRleCwgZmFjZU5hbWUuZGF0YSgpLCBmYWNlTmFtZS5zaXplKCkpOwor
CisgICAgcmV0dXJuIGZhY2VOYW1lOworfQorCit2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCit7
CisgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9s
ZCgpID8gMS4wZiA6IDAuZjsKKyAgICBtX3NjcmlwdENhY2hlID0gMDsKKyAgICBtX3NjcmlwdEZv
bnRQcm9wZXJ0aWVzID0gMDsKKworICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKKyAg
ICAgICAgcmV0dXJuIGluaXRHRElGb250KCk7CisKKyAgICBmbG9hdCBwb2ludFNpemUgPSBtX3Bs
YXRmb3JtRGF0YS5zaXplKCk7CisKKyAgICBhdXRvIGZvbnQgPSBtX3BsYXRmb3JtRGF0YS5kd0Zv
bnQoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChmb250KTsKKworICAgIGF1dG8gZm9udEZhY2UgPSBt
X3BsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoZm9udEZhY2Up
OworCisgICAgRFdSSVRFX0ZPTlRfTUVUUklDUyBmb250TWV0cmljczsKKyAgICBmb250LT5HZXRN
ZXRyaWNzKCZmb250TWV0cmljcyk7CisKKyAgICBpbnQgaUFzY2VudCA9IGZvbnRNZXRyaWNzLmFz
Y2VudDsKKyAgICBpbnQgaURlc2NlbnQgPSBmb250TWV0cmljcy5kZXNjZW50OworICAgIGludCBp
TGluZUdhcCA9IGZvbnRNZXRyaWNzLmxpbmVHYXA7CisgICAgaW50IGlDYXBIZWlnaHQgPSBmb250
TWV0cmljcy5jYXBIZWlnaHQ7CisKKyAgICB1bnNpZ25lZCB1bml0c1BlckVtID0gZm9udE1ldHJp
Y3MuZGVzaWduVW5pdHNQZXJFbTsKKyAgICBmbG9hdCBmQXNjZW50ID0gc2NhbGVFbVRvVW5pdHMo
aUFzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgZmxvYXQgZkRlc2NlbnQgPSBz
Y2FsZUVtVG9Vbml0cyhpRGVzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgZmxv
YXQgZkNhcEhlaWdodCA9IHNjYWxlRW1Ub1VuaXRzKGlDYXBIZWlnaHQsIHVuaXRzUGVyRW0pICog
cG9pbnRTaXplOworICAgIGZsb2F0IGZMaW5lR2FwID0gc2NhbGVFbVRvVW5pdHMoaUxpbmVHYXAs
IHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworCisgICAgaWYgKCFpc0N1c3RvbUZvbnQoKSkgewor
ICAgICAgICBWZWN0b3I8V0NIQVI+IGZhY2VOYW1lID0gZ2V0RmFjZU5hbWUoZm9udCk7CisgICAg
ICAgIGZBc2NlbnQgPSBhc2NlbnRDb25zaWRlcmluZ01hY0FzY2VudEhhY2soZmFjZU5hbWUuZGF0
YSgpLCBmQXNjZW50LCBmRGVzY2VudCk7CisgICAgfQorCisgICAgbV9mb250TWV0cmljcy5zZXRB
c2NlbnQoZkFzY2VudCk7CisgICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50KGZEZXNjZW50KTsK
KyAgICBtX2ZvbnRNZXRyaWNzLnNldENhcEhlaWdodChmQ2FwSGVpZ2h0KTsKKyAgICBtX2ZvbnRN
ZXRyaWNzLnNldExpbmVHYXAoZkxpbmVHYXApOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNw
YWNpbmcobHJvdW5kZihmQXNjZW50KSArIGxyb3VuZGYoZkRlc2NlbnQpICsgbHJvdW5kZihmTGlu
ZUdhcCkpOworCisgICAgR2x5cGggeEdseXBoID0gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCd4Jyku
Z2x5cGg7CisKKyAgICBpZiAoeEdseXBoKSB7CisgICAgICAgIC8vIE1lYXN1cmUgdGhlIGFjdHVh
bCBjaGFyYWN0ZXIgIngiLCBzaW5jZSBpdCdzIHBvc3NpYmxlIGZvciBpdCB0byBleHRlbmQgYmVs
b3cgdGhlIGJhc2VsaW5lLCBhbmQgd2UgbmVlZCB0aGUKKyAgICAgICAgLy8gcmVwb3J0ZWQgeC1o
ZWlnaHQgdG8gb25seSBpbmNsdWRlIHRoZSBwb3J0aW9uIG9mIHRoZSBnbHlwaCB0aGF0IGlzIGFi
b3ZlIHRoZSBiYXNlbGluZS4KKyAgICAgICAgVmVjdG9yPERXUklURV9HTFlQSF9NRVRSSUNTPiBn
bHlwaE1ldHJpY3MoMSk7CisgICAgICAgIEhSRVNVTFQgaHIgPSBmb250RmFjZS0+R2V0RGVzaWdu
R2x5cGhNZXRyaWNzKCZ4R2x5cGgsIDEsIGdseXBoTWV0cmljcy5kYXRhKCksIG1fcGxhdGZvcm1E
YXRhLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChT
VUNDRUVERUQoaHIpKTsKKyAgICAgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHNjYWxlRW1U
b1VuaXRzKGdseXBoTWV0cmljcy5maXJzdCgpLnZlcnRpY2FsT3JpZ2luWSwgdW5pdHNQZXJFbSkg
KiBwb2ludFNpemUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGludCBpWEhlaWdodCA9IGZvbnRN
ZXRyaWNzLnhIZWlnaHQ7CisgICAgICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodChzY2FsZUVt
VG9Vbml0cyhpWEhlaWdodCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOworICAgIH0KKworICAg
IG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKK30KKworRmxvYXRSZWN0
IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAg
aWYgKCFwbGF0Zm9ybURhdGEoKS5zaXplKCkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsK
KworICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKKyAgICAgICAgcmV0dXJuIGJvdW5k
c0ZvckdESUdseXBoKGdseXBoKTsKKworICAgIGF1dG8gZm9udCA9IG1fcGxhdGZvcm1EYXRhLmR3
Rm9udCgpOworICAgIFJFTEVBU0VfQVNTRVJUKGZvbnQpOworCisgICAgYXV0byBmb250RmFjZSA9
IG1fcGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChmb250KTsK
KworICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICBib29s
IHZlcnRpY2FsID0gbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbDsKKwor
ICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfTUVUUklDUz4gZ2x5cGhNZXRyaWNzKDEpOworICAgIEhS
RVNVTFQgaHIgPSBmb250RmFjZS0+R2V0RGVzaWduR2x5cGhNZXRyaWNzKCZnbHlwaCwgMSwgZ2x5
cGhNZXRyaWNzLmRhdGEoKSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNh
bCk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBjb25zdCBhdXRv
JiBtZXRyaWNzID0gZ2x5cGhNZXRyaWNzLmZpcnN0KCk7CisKKyAgICB1bnNpZ25lZCB1bml0c1Bl
ckVtID0gbV9mb250TWV0cmljcy51bml0c1BlckVtKCk7CisKKyAgICBGbG9hdFBvaW50IG9yaWdp
bihzY2FsZUVtVG9Vbml0cyhtZXRyaWNzLmxlZnRTaWRlQmVhcmluZywgdW5pdHNQZXJFbSkgKiBw
b2ludFNpemUsIHNjYWxlRW1Ub1VuaXRzKG1ldHJpY3MudmVydGljYWxPcmlnaW5ZLCB1bml0c1Bl
ckVtKSAqIHBvaW50U2l6ZSk7CisgICAgRmxvYXRTaXplIHNpemUoc2NhbGVFbVRvVW5pdHMobWV0
cmljcy5hZHZhbmNlV2lkdGggLSBtZXRyaWNzLmxlZnRTaWRlQmVhcmluZyAtIG1ldHJpY3Mucmln
aHRTaWRlQmVhcmluZywgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUsCisgICAgICAgIHNjYWxlRW1U
b1VuaXRzKG1ldHJpY3MuYWR2YW5jZUhlaWdodCAtIG1ldHJpY3MudG9wU2lkZUJlYXJpbmcgLSBt
ZXRyaWNzLmJvdHRvbVNpZGVCZWFyaW5nLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisKKyAg
ICBGbG9hdFJlY3QgYm91bmRpbmdCb3gob3JpZ2luLCBzaXplKTsKKyAgICBpZiAobV9zeW50aGV0
aWNCb2xkT2Zmc2V0KQorICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0aChib3VuZGluZ0JveC53
aWR0aCgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKKworICAgIHJldHVybiBib3VuZGluZ0Jv
eDsKK30KKworZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBj
b25zdAoreworICAgIGlmICghcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKKyAgICAgICAgcmV0dXJuIHdp
ZHRoRm9yR0RJR2x5cGgoZ2x5cGgpOworCisgICAgQVNTRVJUKGdseXBoKTsKKworICAgIGF1dG8g
Zm9udCA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9udCgpOworICAgIFJFTEVBU0VfQVNTRVJUKGZvbnQp
OworCisgICAgYXV0byBmb250RmFjZSA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChmb250RmFjZSk7CisKKyAgICBib29sIGlzVmVydGljYWwgPSBtX3Bs
YXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsOworCisgICAgVmVjdG9yPERXUklU
RV9HTFlQSF9NRVRSSUNTPiBnbHlwaE1ldHJpY3MoMSk7CisgICAgSFJFU1VMVCBociA9IGZvbnRG
YWNlLT5HZXREZXNpZ25HbHlwaE1ldHJpY3MoJmdseXBoLCAxLCBnbHlwaE1ldHJpY3MuZGF0YSgp
LCBpc1ZlcnRpY2FsKTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAg
IGNvbnN0IGF1dG8mIG1ldHJpY3MgPSBnbHlwaE1ldHJpY3MuZmlyc3QoKTsKKyAgICBpbnQgd2lk
dGhJbkVtID0gbWV0cmljcy5hZHZhbmNlV2lkdGg7CisKKyAgICBmbG9hdCBwb2ludFNpemUgPSBt
X3BsYXRmb3JtRGF0YS5zaXplKCk7CisgICAgdW5zaWduZWQgdW5pdHNQZXJFbSA9IG1fZm9udE1l
dHJpY3MudW5pdHNQZXJFbSgpOworICAgIGZsb2F0IHdpZHRoID0gc2NhbGVFbVRvVW5pdHMod2lk
dGhJbkVtLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKworICAgIHJldHVybiB3aWR0aCArIG1f
c3ludGhldGljQm9sZE9mZnNldDsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJI
ZWxwZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0QW5hbHl6ZXJIZWxwZXIuaCIKKwor
I2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgPGR3cml0ZS5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0hSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpRdWVyeUludGVyZmFjZShfSW5f
IFJFRklJRCByaWlkLCBfQ09NX091dHB0cl8gdm9pZCoqIHBwdk9iamVjdCkKK3sKKyAgICBpZiAo
IXBwdk9iamVjdCkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAqcHB2T2JqZWN0ID0g
bnVsbHB0cjsKKyAgICBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlkb2YoSURXcml0ZVRleHRB
bmFseXNpc1NpbmspKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElEV3JpdGVU
ZXh0QW5hbHlzaXNTaW5rKj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwg
X191dWlkb2YoSURXcml0ZVRleHRBbmFseXNpc1NvdXJjZSkpKQorICAgICAgICAqcHB2T2JqZWN0
ID0gc3RhdGljX2Nhc3Q8SURXcml0ZVRleHRBbmFseXNpc1NpbmsqPih0aGlzKTsKKyAgICBlbHNl
CisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICBBZGRSZWYoKTsKKyAgICByZXR1cm4gU19P
SzsKK30KKworVUxPTkcgVGV4dEFuYWx5emVySGVscGVyOjpBZGRSZWYoKQoreworICAgIHJldHVy
biArK21fcmVmQ291bnQ7Cit9CisKK1VMT05HIFRleHRBbmFseXplckhlbHBlcjo6UmVsZWFzZSgp
Cit7CisgICAgVUxPTkcgbmV3UmVmID0gLS1tX3JlZkNvdW50OworICAgIGlmICghbmV3UmVmKQor
ICAgICAgICBkZWxldGUodGhpcyk7CisKKyAgICByZXR1cm4gbmV3UmVmOworfQorCitIUkVTVUxU
IFRleHRBbmFseXplckhlbHBlcjo6R2V0VGV4dEF0UG9zaXRpb24oVUlOVDMyIHRleHRQb3NpdGlv
biwgY29uc3QgV0NIQVIqKiB0ZXh0U3RyaW5nLCBVSU5UMzIqIHRleHRMZW5ndGgpCit7CisgICAg
aWYgKCF0ZXh0U3RyaW5nIHx8ICF0ZXh0TGVuZ3RoKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVS
OworCisgICAgaWYgKHRleHRQb3NpdGlvbiA+PSBtX2J1ZmZlckxlbmd0aCkgeworICAgICAgICAq
dGV4dFN0cmluZyA9IG51bGxwdHI7CisgICAgICAgICp0ZXh0TGVuZ3RoID0gMDsKKyAgICAgICAg
cmV0dXJuIFNfT0s7CisgICAgfQorCisgICAgKnRleHRTdHJpbmcgPSAmbV9idWZmZXJbdGV4dFBv
c2l0aW9uXTsKKyAgICAqdGV4dExlbmd0aCA9IG1fYnVmZmVyTGVuZ3RoIC0gdGV4dFBvc2l0aW9u
OworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpH
ZXRUZXh0QmVmb3JlUG9zaXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgY29uc3QgV0NIQVIqKiB0
ZXh0U3RyaW5nLCBVSU5UMzIqIHRleHRMZW5ndGgpCit7CisgICAgaWYgKCF0ZXh0U3RyaW5nIHx8
ICF0ZXh0TGVuZ3RoKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgaWYgKCF0ZXh0
UG9zaXRpb24gfHwgdGV4dFBvc2l0aW9uID4gbV9idWZmZXJMZW5ndGgpIHsKKyAgICAgICAgKnRl
eHRTdHJpbmcgPSBudWxscHRyOworICAgICAgICAqdGV4dExlbmd0aCA9IDA7CisgICAgICAgIHJl
dHVybiBTX09LOworICAgIH0KKworICAgICp0ZXh0U3RyaW5nID0gJm1fYnVmZmVyWzBdOworICAg
ICp0ZXh0TGVuZ3RoID0gdGV4dFBvc2l0aW9uOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hS
RVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpHZXRMb2NhbGVOYW1lKFVJTlQzMiB0ZXh0UG9zaXRp
b24sIFVJTlQzMiogdGV4dExlbmd0aCwgY29uc3QgV0NIQVIqKiBsb2NhbGVOYW1lKQoreworICAg
ICpsb2NhbGVOYW1lID0gbV9sb2NhbGVOYW1lOworICAgICp0ZXh0TGVuZ3RoID0gbV9idWZmZXJM
ZW5ndGggLSB0ZXh0UG9zaXRpb247CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBU
ZXh0QW5hbHl6ZXJIZWxwZXI6OkdldE51bWJlclN1YnN0aXR1dGlvbihVSU5UMzIgdGV4dFBvc2l0
aW9uLCBVSU5UMzIqIHRleHRMZW5ndGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qKiBudW1i
ZXJTdWJzdGl0dXRpb24pCit7CisgICAgKnRleHRMZW5ndGggPSBtX2J1ZmZlckxlbmd0aCAtIHRl
eHRQb3NpdGlvbjsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBUZXh0QW5hbHl6ZXJI
ZWxwZXI6OlNldExpbmVCcmVha3BvaW50cyhVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4
dExlbmd0aCwgY29uc3QgRFdSSVRFX0xJTkVfQlJFQUtQT0lOVCopCit7CisgICAgcmV0dXJuIFNf
T0s7Cit9CisKK0hSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpTZXRTY3JpcHRBbmFseXNpcyhV
SU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgY29uc3QgRFdSSVRFX1NDUklQ
VF9BTkFMWVNJUyogYW5hbHlzaXMpCit7CisgICAgbV9hbmFseXNpcyA9ICphbmFseXNpczsKKwor
ICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6U2V0Qmlk
aUxldmVsKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBVSU5UOCBleHBs
aWNpdExldmVsLCBVSU5UOCByZXNvbHZlZExldmVsKQoreworICAgIHJldHVybiBTX09LOworfQor
CitIUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6U2V0TnVtYmVyU3Vic3RpdHV0aW9uKFVJTlQz
MiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBJRFdyaXRlTnVtYmVyU3Vic3RpdHV0
aW9uKikKK3sKKyAgICByZXR1cm4gU19PSzsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5
emVySGVscGVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFRleHRBbmFseXpl
ckhlbHBlciA6IHB1YmxpYyBJRFdyaXRlVGV4dEFuYWx5c2lzU2luaywgSURXcml0ZVRleHRBbmFs
eXNpc1NvdXJjZSB7CisgICAgQW5hbHl6ZXJIZWxwZXIoVUNoYXIqIGxvY2FsZU5hbWUsIFVDaGFy
KiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKKyAgICAgICAgOiBtX2xvY2FsZU5hbWUo
bG9jYWxlTmFtZSkKKyAgICAgICAgLCBtX2J1ZmZlcihidWZmZXIpCisgICAgICAgICwgbV9idWZm
ZXJMZW5ndGgoYnVmZmVyTGVuZ3RoKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBJVW5rbm93bgor
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShfSW5f
IFJFRklJRCwgX0NPTV9PdXRwdHJfIHZvaWQqKik7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRI
T0RDQUxMVFlQRSBBZGRSZWYoKTsKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBF
IFJlbGVhc2UoKTsKKworICAgIC8vIElEV3JpdGVUZXh0QW5hbHlzaXNTb3VyY2UgCisgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldFRleHRBdFBvc2l0aW9uKFVJTlQzMiB0
ZXh0UG9zaXRpb24sIGNvbnN0IFdDSEFSKiogdGV4dFN0cmluZywgVUlOVDMyKiB0ZXh0TGVuZ3Ro
KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0VGV4dEJlZm9yZVBv
c2l0aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIGNvbnN0IFdDSEFSKiogdGV4dFN0cmluZywgVUlO
VDMyKiB0ZXh0TGVuZ3RoKTsKKyAgICB2aXJ0dWFsIERXUklURV9SRUFESU5HX0RJUkVDVElPTiBT
VERNRVRIT0RDQUxMVFlQRSBHZXRQYXJhZ3JhcGhSZWFkaW5nRGlyZWN0aW9uKCkgeyByZXR1cm4g
RFdSSVRFX1JFQURJTkdfRElSRUNUSU9OX0xFRlRfVE9fUklHSFQ7IH0KKyAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0TG9jYWxlTmFtZShVSU5UMzIgdGV4dFBvc2l0aW9u
LCBVSU5UMzIqIHRleHRMZW5ndGgsIGNvbnN0IFdDSEFSKiogbG9jYWxlTmFtZSk7CisgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldE51bWJlclN1YnN0aXR1dGlvbihVSU5U
MzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIqIHRleHRMZW5ndGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0
dXRpb24qKik7CisKKyAgICAvLyBJRFdyaXRlVGV4dEFuYWx5c2lzU2luaworICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRMaW5lQnJlYWtwb2ludHMoVUlOVDMyIHRleHRQ
b3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIGNvbnN0IERXUklURV9MSU5FX0JSRUFLUE9JTlQq
KTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0U2NyaXB0QW5hbHlz
aXMoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIGNvbnN0IERXUklURV9T
Q1JJUFRfQU5BTFlTSVMqKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
U2V0QmlkaUxldmVsKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBVSU5U
OCBleHBsaWNpdExldmVsLCBVSU5UOCByZXNvbHZlZExldmVsKTsKKyAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0TnVtYmVyU3Vic3RpdHV0aW9uKFVJTlQzMiB0ZXh0UG9z
aXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBJRFdyaXRlTnVtYmVyU3Vic3RpdHV0aW9uKik7CisK
KyAgICBVQ2hhciogbV9sb2NhbGVOYW1lIHsgbnVsbHB0ciB9OworICAgIFVDaGFyKiBtX2J1ZmZl
ciB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX2J1ZmZlckxlbmd0aCB7IDAgfTsKKyAgICBE
V1JJVEVfU0NSSVBUX0FOQUxZU0lTIG1fYW5hbHlzaXM7CisgICAgVUxPTkcgbV9yZWZDb3VudCB7
IDAgfTsKK307CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290172</attachid>
            <date>2016-09-28 20:37:15 -0700</date>
            <delta_ts>2016-09-28 22:31:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162712-20160928203414.patch</filename>
            <type>text/plain</type>
            <size>39658</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjU3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE2LTA5LTI4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBB
ZGQgRDJEIEZvbnQgaGFuZGxpbmcgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNzEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBsYW5kcyBhIHNldCBvZiBuZXcgZmlsZXMgdGhh
dCBpbXBsZW1lbnQgCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHVudGlsIGNvbXBsZXRlIGJhY2tl
bmQgbGFuZHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKTogQWRkIGNhc2UgZm9yIERpcmVjdDJELgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9y
bURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZv
bnRDdXN0b21QbGF0Zm9ybURhdGEpOiBGaXggd2hpdGVzcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOiBBZGQgRGlyZWN0MkQg
Y2FzZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YURp
cmVjdDJELmNwcDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBo
UGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHA6IEFkZGVkLgorCiAyMDE2LTA5LTI4
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTG9nIGNvbnNvbGUg
bWVzc2FnZXMgd2hlbiB0aGUgYW5jaG9yIGRvd25sb2FkIGF0dHJpYnV0ZSBpcyBpZ25vcmVkCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiAyMDY1
MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDYgKzU3LDExIEBACiAjaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgiCiAj
ZW5kaWYKIAorI2lmIFVTRShESVJFQ1QyRCkKK2ludGVyZmFjZSBJRFdyaXRlRmFjdG9yeTsKK2lu
dGVyZmFjZSBJRFdyaXRlR2RpSW50ZXJvcDsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEdseXBoUGFnZTsKQEAgLTE0Myw3ICsxNDgsNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fYWRqdXN0ZWRTcGFjZVdpZHRoID0gc3BhY2VXaWR0aDsKICAgICB9CiAKLSNpZiBVU0UoQ0cp
IHx8IFVTRShDQUlSTykKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkgfHwgVVNFKENBSVJP
KQogICAgIGZsb2F0IHN5bnRoZXRpY0JvbGRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRo
ZXRpY0JvbGRPZmZzZXQ7IH0KICNlbmRpZgogCkBAIC0xOTgsNiArMjAzLDExIEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgZmxvYXQgYXNjZW50Q29uc2lkZXJpbmdNYWNBc2NlbnRIYWNrKGNvbnN0IFdD
SEFSKiwgZmxvYXQgYXNjZW50LCBmbG9hdCBkZXNjZW50KTsKICNlbmRpZgogCisjaWYgVVNFKERJ
UkVDVDJEKQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJRFdyaXRlRmFjdG9yeSogc3lzdGVt
RFdyaXRlRmFjdG9yeSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJRFdyaXRlR2RpSW50
ZXJvcCogc3lzdGVtRFdyaXRlR2RpSW50ZXJvcCgpOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAg
Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwg
Ym9vbCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0g
ZmFsc2UpOwogCkBAIC0yNjcsNyArMjc3LDcgQEAgcHJpdmF0ZToKIAogICAgIG11dGFibGUgc3Rk
Ojp1bmlxdWVfcHRyPERlcml2ZWRGb250cz4gbV9kZXJpdmVkRm9udERhdGE7CiAKLSNpZiBVU0Uo
Q0cpIHx8IFVTRShDQUlSTykKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkgfHwgVVNFKENB
SVJPKQogICAgIGZsb2F0IG1fc3ludGhldGljQm9sZE9mZnNldDsKICNlbmRpZgogCkBAIC0zMzgs
NyArMzQ4LDcgQEAgQUxXQVlTX0lOTElORSBmbG9hdCBGb250Ojp3aWR0aEZvckdseXBoKAogCiAj
aWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQogICAgIGlmIChtX3ZlcnRpY2FsRGF0YSkgewot
I2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKSB8
fCBVU0UoQ0FJUk8pCiAgICAgICAgIHdpZHRoID0gbV92ZXJ0aWNhbERhdGEtPmFkdmFuY2VIZWln
aHQodGhpcywgZ2x5cGgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OwogI2Vsc2UKICAgICAgICAg
d2lkdGggPSBtX3ZlcnRpY2FsRGF0YS0+YWR2YW5jZUhlaWdodCh0aGlzLCBnbHlwaCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3Jt
RGF0YS5oCShyZXZpc2lvbiAyMDY1MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250UGxhdGZvcm1EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKIAogI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJD
T01QdHIuaCIKICNpbmNsdWRlICJTaGFyZWRHRElPYmplY3QuaCIKICNlbmRpZgogCkBAIC02NSw2
ICs2Niw4IEBAIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ1RGb250KiBDVEZvbnRSZWYKICNpZiBQ
TEFURk9STShXSU4pCiAjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KIHR5cGVkZWYgc3Ry
dWN0IEhGT05UX18qIEhGT05UOworaW50ZXJmYWNlIElEV3JpdGVGb250OworaW50ZXJmYWNlIElE
V3JpdGVGb250RmFjZTsKICNlbmRpZgogCiAKQEAgLTEwMyw2ICsxMDYsOCBAQCBwdWJsaWM6CiAK
ICNpZiBVU0UoQ0cpCiAgICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+LCBDR0Zv
bnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxp
cXVlLCBib29sIHVzZUdESSk7CisjZWxpZiBVU0UoRElSRUNUMkQpCisgICAgRm9udFBsYXRmb3Jt
RGF0YShHRElPYmplY3Q8SEZPTlQ+LCBJRFdyaXRlRm9udCosIGZsb2F0IHNpemUsIGJvb2wgc3lu
dGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7CiAjZWxpZiBV
U0UoQ0FJUk8pCiAgICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+LCBjYWlyb19m
b250X2ZhY2VfdCosIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpOwogI2VuZGlm
CkBAIC0xMzcsNiArMTQyLDExIEBAIHB1YmxpYzoKICAgICBDR0ZvbnRSZWYgY2dGb250KCkgY29u
c3QgeyByZXR1cm4gbV9jZ0ZvbnQuZ2V0KCk7IH0KICNlbmRpZgogCisjaWYgVVNFKERJUkVDVDJE
KQorICAgIElEV3JpdGVGb250KiBkd0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX2R3Rm9udC5nZXQo
KTsgfQorICAgIElEV3JpdGVGb250RmFjZSogZHdGb250RmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZHdGb250RmFjZS5nZXQoKTsgfQorI2VuZGlmCisKICAgICBib29sIGlzRml4ZWRQaXRjaCgpIGNv
bnN0OwogICAgIGZsb2F0IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KICAgICBib29s
IHN5bnRoZXRpY0JvbGQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY0JvbGQ7IH0KQEAgLTI0
MSw2ICsyNTEsMTAgQEAgcHJpdmF0ZToKICNpZiBVU0UoQ0cpICYmIChQTEFURk9STShXSU4pIHx8
IChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEy
MDApIHx8IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVE
IDwgMTAwMDAwKSkKICAgICBSZXRhaW5QdHI8Q0dGb250UmVmPiBtX2NnRm9udDsKICNlbmRpZgor
I2lmIFVTRShESVJFQ1QyRCkKKyAgICBDT01QdHI8SURXcml0ZUZvbnQ+IG1fZHdGb250OworICAg
IENPTVB0cjxJRFdyaXRlRm9udEZhY2U+IG1fZHdGb250RmFjZTsKKyNlbmRpZgogI2lmIFVTRShD
QUlSTykKICAgICBSZWZQdHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4gbV9zY2FsZWRGb250OwogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hl
V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhY2hlV2luLmNwcAkocmV2aXNpb24gMjA2NTI5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDYgKzQ3LDEwIEBACiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5
c3RlbUludGVyZmFjZS5oPgogI2VuZGlmCiAKKyNpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSA8
ZHdyaXRlLmg+CisjZW5kaWYKKwogdXNpbmcgc3RkOjptaW47CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
CkBAIC01NDksNiArNTUzLDcgQEAgc3RhdGljIGludCBDQUxMQkFDSyB0cmFpdHNJbkZhbWlseUVu
dW1QcgogICAgIHByb2NEYXRhLT5tX3RyYWl0c01hc2tzLmFkZCh0cmFpdHNNYXNrKTsKICAgICBy
ZXR1cm4gMTsKIH0KKwogVmVjdG9yPEZvbnRUcmFpdHNNYXNrPiBGb250Q2FjaGU6OmdldFRyYWl0
c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAgICBIV25kREMg
aGRjKDApOwpAQCAtNTk5LDYgKzYwNCw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1E
YXRhPiBGb250Q2EKIAogI2lmIFVTRShDRykKICAgICBib29sIGZvbnRDcmVhdGlvbkZhaWxlZCA9
ICFyZXN1bHQtPmNnRm9udCgpOworI2VsaWYgVVNFKERJUkVDVDJEKQorICAgIGJvb2wgZm9udENy
ZWF0aW9uRmFpbGVkID0gIXJlc3VsdC0+ZHdGb250KCk7CiAjZWxpZiBVU0UoQ0FJUk8pCiAgICAg
Ym9vbCBmb250Q3JlYXRpb25GYWlsZWQgPSAhcmVzdWx0LT5zY2FsZWRGb250KCk7CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURp
cmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udENh
c2NhZGUuaCIKKworI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgorI2luY2x1ZGUgIkNPTVB0ci5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgor
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZURpcmVjdDJELmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlVuaXNjcmliZUNv
bnRyb2xsZXIuaCIKKyNpbmNsdWRlICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCisjaW5jbHVkZSA8
ZDJkMS5oPgorI2luY2x1ZGUgPGR3cml0ZS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgaW50IHN5bnRoZXRpY09ibGlxdWVBbmds
ZSA9IDE0OworCit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5
cGhCdWZmZXIsCisgICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAg
ICBhdXRvIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAg
Ym9vbCBzaG91bGRVc2VGb250U21vb3RoaW5nID0gV2ViQ29yZVNob3VsZFVzZUZvbnRTbW9vdGhp
bmcoKTsKKworICAgIHN3aXRjaCAoc21vb3RoaW5nTW9kZSkgeworICAgIGNhc2UgQW50aWFsaWFz
ZWQ6IHsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh0cnVlKTsK
KyAgICAgICAgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IGZhbHNlOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBTdWJwaXhlbEFudGlhbGlhc2VkOiB7CisgICAgICAgIGdyYXBoaWNz
Q29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7CisgICAgICAgIHNob3VsZFVzZUZvbnRT
bW9vdGhpbmcgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBOb1Ntb290
aGluZzogeworICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKGZhbHNl
KTsKKyAgICAgICAgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IGZhbHNlOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBBdXRvU21vb3RoaW5nOiB7CisgICAgICAgIC8vIEZvciB0aGUg
QXV0b1Ntb290aCBjYXNlLCBkb24ndCBkbyBhbnl0aGluZyEgS2VlcCB0aGUgZGVmYXVsdCBzZXR0
aW5ncy4KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBs
YXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7CisKKyAgICBncmFwaGljc0NvbnRleHQu
c2F2ZSgpOworCisgICAgRDJEMV9NQVRSSVhfM1gyX0YgbWF0cml4OworICAgIGNvbnRleHQtPkdl
dFRyYW5zZm9ybSgmbWF0cml4KTsKKworICAgIGlmIChwbGF0Zm9ybURhdGEuc3ludGhldGljT2Js
aXF1ZSgpKSB7CisgICAgICAgIHN0YXRpYyBmbG9hdCBza2V3ID0gLXRhbmYoc3ludGhldGljT2Js
aXF1ZUFuZ2xlICogcGlGbG9hdCAvIDE4MC4wZik7CisgICAgICAgIGF1dG8gc2tld01hdHJpeCA9
IEQyRDE6Ok1hdHJpeDN4MkY6OlNrZXcoc2tldywgMCk7CisgICAgICAgIGNvbnRleHQtPlNldFRy
YW5zZm9ybShtYXRyaXggKiBza2V3TWF0cml4KTsKKyAgICB9CisKKyAgICAvLyBVbmlzY3JpYmUg
Z2l2ZXMgdXMgb2Zmc2V0cyB0byBoZWxwIHJlZmluZSB0aGUgcG9zaXRpb25pbmcgb2YgY29tYmlu
aW5nIGdseXBocy4KKyAgICBGbG9hdFNpemUgdHJhbnNsYXRpb24gPSBnbHlwaEJ1ZmZlci5vZmZz
ZXRBdChmcm9tKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKHBsYXRmb3JtRGF0YS5kd0ZvbnQoKSk7
CisgICAgUkVMRUFTRV9BU1NFUlQocGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKSk7CisKKyAgICBW
ZWN0b3I8RkxPQVQ+IGhvcml6b250YWxBZHZhbmNlcyhudW1HbHlwaHMpOworICAgIFZlY3RvcjxE
V1JJVEVfR0xZUEhfT0ZGU0VUPiBvZmZzZXRBZHZhbmNlcyhudW1HbHlwaHMpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICBhdXRvIGFkdmFu
Y2UgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhpICsgZnJvbSk7CisgICAgICAgIGlmICghYWR2YW5j
ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGhvcml6b250YWxBZHZhbmNlc1tp
XSA9IGFkdmFuY2UtPndpZHRoKCk7CisgICAgICAgIG9mZnNldEFkdmFuY2VzW2ldLmFkdmFuY2VP
ZmZzZXQgPSBhZHZhbmNlLT53aWR0aCgpOworICAgICAgICBvZmZzZXRBZHZhbmNlc1tpXS5hc2Nl
bmRlck9mZnNldCA9IGFkdmFuY2UtPmhlaWdodCgpOworICAgIH0KKworICAgIERXUklURV9HTFlQ
SF9SVU4gZ2x5cGhSdW47CisgICAgZ2x5cGhSdW4uZm9udEZhY2UgPSBwbGF0Zm9ybURhdGEuZHdG
b250RmFjZSgpOworICAgIGdseXBoUnVuLmZvbnRFbVNpemUgPSBwbGF0Zm9ybURhdGEuc2l6ZSgp
OworICAgIGdseXBoUnVuLmdseXBoQ291bnQgPSBudW1HbHlwaHM7CisgICAgZ2x5cGhSdW4uZ2x5
cGhJbmRpY2VzID0gZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pOworICAgIGdseXBoUnVuLmdseXBo
QWR2YW5jZXMgPSBob3Jpem9udGFsQWR2YW5jZXMuZGF0YSgpOworICAgIGdseXBoUnVuLmdseXBo
T2Zmc2V0cyA9IG51bGxwdHI7CisgICAgZ2x5cGhSdW4uaXNTaWRld2F5cyA9IHBsYXRmb3JtRGF0
YS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsOworICAgIGdseXBoUnVuLmJpZGlMZXZlbCA9IDA7
CisKKyAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OworICAgIGZsb2F0IHNoYWRvd0JsdXI7Cisg
ICAgQ29sb3Igc2hhZG93Q29sb3I7CisgICAgZ3JhcGhpY3NDb250ZXh0LmdldFNoYWRvdyhzaGFk
b3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKworICAgIGJvb2wgaGFzU2ltcGxl
U2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHRNb2RlRmls
bCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIgJiYgKCFncmFwaGljc0Nv
bnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBncmFwaGljc0NvbnRleHQuZ2V0Q1RN
KCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7CisgICAgaWYgKGhhc1NpbXBs
ZVNoYWRvdykgeworICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5z
dGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBh
bnRpYWxpYXNpbmcuCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNoYWRvdygpOworICAg
ICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQuZmlsbENvbG9yKCk7CisgICAg
ICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvcihzaGFkb3dDb2xvci5yZWQoKSwgc2hhZG93Q29sb3Iu
Z3JlZW4oKSwgc2hhZG93Q29sb3IuYmx1ZSgpLCBzaGFkb3dDb2xvci5hbHBoYSgpICogZmlsbENv
bG9yLmFscGhhKCkgLyAyNTUpOworICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50Lngo
KSArIHRyYW5zbGF0aW9uLndpZHRoKCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKKyAgICAgICAg
Ly8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFw
cGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KKyAg
ICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyB0cmFuc2xhdGlvbi5oZWlnaHQo
KSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7CisKKyAgICAgICAgQ09NUHRyPElEMkQxU29saWRDb2xv
ckJydXNoPiBzaGFkb3dCcnVzaDsKKyAgICAgICAgaWYgKCFTVUNDRUVERUQoY29udGV4dC0+Q3Jl
YXRlU29saWRDb2xvckJydXNoKGdyYXBoaWNzQ29udGV4dC5jb2xvcldpdGhHbG9iYWxBbHBoYShz
aGFkb3dGaWxsQ29sb3IpLCAmc2hhZG93QnJ1c2gpKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihzaGFkb3dUZXh0WCwg
c2hhZG93VGV4dFkpLCAmZ2x5cGhSdW4sIHNoYWRvd0JydXNoLmdldCgpKTsKKyAgICAgICAgaWYg
KGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpKQorICAgICAgICAgICAgY29udGV4dC0+RHJhd0ds
eXBoUnVuKEQyRDE6OlBvaW50MkYoc2hhZG93VGV4dFggKyBmb250LnN5bnRoZXRpY0JvbGRPZmZz
ZXQoKSwgc2hhZG93VGV4dFkpLCAmZ2x5cGhSdW4sIHNoYWRvd0JydXNoLmdldCgpKTsKKyAgICB9
CisKKyAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihwb2ludC54KCkgKyB0
cmFuc2xhdGlvbi53aWR0aCgpLCBwb2ludC55KCkgKyB0cmFuc2xhdGlvbi5oZWlnaHQoKSksICZn
bHlwaFJ1biwgZ3JhcGhpY3NDb250ZXh0LnNvbGlkRmlsbEJydXNoKCkpOworICAgIGlmIChmb250
LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSkKKyAgICAgICAgY29udGV4dC0+RHJhd0dseXBoUnVuKEQy
RDE6OlBvaW50MkYocG9pbnQueCgpICsgdHJhbnNsYXRpb24ud2lkdGgoKSArIGZvbnQuc3ludGhl
dGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkgKyB0cmFuc2xhdGlvbi5oZWlnaHQoKSksICZnbHlw
aFJ1biwgZ3JhcGhpY3NDb250ZXh0LnNvbGlkRmlsbEJydXNoKCkpOworCisgICAgaWYgKGhhc1Np
bXBsZVNoYWRvdykKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZz
ZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKworICAgIGdyYXBoaWNzQ29udGV4dC5yZXN0
b3JlKCk7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEu
Y3BwCShyZXZpc2lvbiAyMDY1MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEy
ICsyNSwyMCBAQAogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJPcGVu
VHlwZVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgPEFw
cGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2luY2x1ZGUgPFdlYktp
dFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CiAjaW5jbHVkZSA8d3Rm
L3dpbi9HRElPYmplY3QuaD4KIAorI2lmIFVTRShDRykKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNl
cnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRl
cmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjZW5kaWYKKworI2lmIFVTRShESVJFQ1Qy
RCkKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSA8ZHdyaXRlLmg+CisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMzgsNyArNDYsNyBA
QCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRDdXN0
b21QbGF0Zm9ybURhdGEoKQogewogICAgIGlmIChtX2ZvbnRSZWZlcmVuY2UpCi0gICAgICAgICAg
ICBSZW1vdmVGb250TWVtUmVzb3VyY2VFeChtX2ZvbnRSZWZlcmVuY2UpOworICAgICAgICBSZW1v
dmVGb250TWVtUmVzb3VyY2VFeChtX2ZvbnRSZWZlcmVuY2UpOwogfQogCiBGb250UGxhdGZvcm1E
YXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCkBAIC02
OCw4ICs3NiwxNSBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6CiAK
ICAgICBhdXRvIGhmb250ID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVGb250SW5kaXJlY3QoJmxv
Z0ZvbnQpKTsKIAorI2lmIFVTRShDRykKICAgICBSZXRhaW5QdHI8Q0dGb250UmVmPiBjZ0ZvbnQg
PSBhZG9wdENGKENHRm9udENyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQoJmxvZ0ZvbnQpKTsKICAgICBy
ZXR1cm4gRm9udFBsYXRmb3JtRGF0YShXVEZNb3ZlKGhmb250KSwgY2dGb250LmdldCgpLCBzaXpl
LCBib2xkLCBpdGFsaWMsIHJlbmRlcmluZ01vZGUgPT0gRm9udFJlbmRlcmluZ01vZGU6OkFsdGVy
bmF0ZSk7CisjZWxzZQorICAgIENPTVB0cjxJRFdyaXRlRm9udD4gZHdGb250OworICAgIEhSRVNV
TFQgaHIgPSBGb250OjpzeXN0ZW1EV3JpdGVHZGlJbnRlcm9wKCktPkNyZWF0ZUZvbnRGcm9tTE9H
Rk9OVCgmbG9nRm9udCwgJmR3Rm9udCk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7CisgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoV1RGTW92ZShoZm9udCksIGR3Rm9udC5n
ZXQoKSwgc2l6ZSwgYm9sZCwgaXRhbGljLCByZW5kZXJpbmdNb2RlID09IEZvbnRSZW5kZXJpbmdN
b2RlOjpBbHRlcm5hdGUpOworI2VuZGlmCiB9CiAKIC8vIENyZWF0ZXMgYSB1bmlxdWUgYW5kIHVu
cHJlZGljdGFibGUgZm9udCBuYW1lLCBpbiBvcmRlciB0byBhdm9pZCBjb2xsaXNpb25zIGFuZCB0
bwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9y
bURhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFE
aXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZQorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorCisjaWYgVVNFKERJUkVDVDJEKQorCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiU2hhcmVkR0RJT2JqZWN0LmgiCisjaW5jbHVk
ZSA8ZDJkMS5oPgorI2luY2x1ZGUgPGR3cml0ZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KwordXNpbmcgbmFtZXNwYWNlIHN0ZDo6bWluOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Zv
aWQgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdChIRk9OVCBmb250LCBmbG9hdCBz
aXplLCBIREMgaGRjLCBXQ0hBUiogZmFjZU5hbWUpCit7CisgICAgTE9HRk9OVCBsb2dmb250Owor
ICAgIEdldE9iamVjdChmb250LCBzaXplb2YobG9nZm9udCksICZsb2dmb250KTsKKworICAgIEhS
RVNVTFQgaHIgPSBGb250OjpzeXN0ZW1EV3JpdGVHZGlJbnRlcm9wKCktPkNyZWF0ZUZvbnRGcm9t
TE9HRk9OVCgmbG9nZm9udCwgJm1fZHdGb250KTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisg
ICAgICAgIHJldHVybjsKKworICAgIGhyID0gbV9kd0ZvbnQtPkNyZWF0ZUZvbnRGYWNlKCZtX2R3
Rm9udEZhY2UpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFtX3VzZUdESSkKKyAgICAgICAgbV9pc1N5c3RlbUZvbnQgPSAhd2NzY21wKGZhY2VO
YW1lLCBMIkx1Y2lkYSBHcmFuZGUiKTsKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRm
b3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGhmb250LCBJRFdyaXRlRm9udCogZm9udCwgZmxvYXQg
c2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQorICAgIDogbV9zeW50
aGV0aWNCb2xkKGJvbGQpCisgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKKyAgICAs
IG1fb3JpZW50YXRpb24oSG9yaXpvbnRhbCkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV93
aWR0aFZhcmlhbnQoUmVndWxhcldpZHRoKQorICAgICwgbV9mb250KFNoYXJlZEdESU9iamVjdDxI
Rk9OVD46OmNyZWF0ZShXVEZNb3ZlKGhmb250KSkpCisgICAgLCBtX2R3Rm9udChmb250KQorICAg
ICwgbV9pc0NvbG9yQml0bWFwRm9udChmYWxzZSkKKyAgICAsIG1fdXNlR0RJKHVzZUdESSkKK3sK
KyAgICBIUkVTVUxUIGhyID0gbV9kd0ZvbnQtPkNyZWF0ZUZvbnRGYWNlKCZtX2R3Rm9udEZhY2Up
OworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworfQorCitzdGF0aWMgYm9vbCBm
b250c0FyZUVxdWFsKElEV3JpdGVGb250KiBhLCBJRFdyaXRlRm9udCogYikKK3sKKyAgICBpZiAo
IWEgJiYgIWIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGEgPT0gYikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoKCFhICYmIGIpIHx8IChhICYmICFiKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGEtPkdldFdlaWdodCgpICE9IGItPkdldFdlaWdo
dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYS0+R2V0U3R5bGUoKSAhPSBi
LT5HZXRTdHlsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYS0+R2V0U3Ry
ZXRjaCgpICE9IGItPkdldFN0cmV0Y2goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
RFdSSVRFX0ZPTlRfTUVUUklDUyBhTWV0cmljcywgYk1ldHJpY3M7CisgICAgYS0+R2V0TWV0cmlj
cygmYU1ldHJpY3MpOworICAgIGItPkdldE1ldHJpY3MoJmJNZXRyaWNzKTsKKworICAgIGlmICgo
YU1ldHJpY3MuZGVzaWduVW5pdHNQZXJFbSAhPSBiTWV0cmljcy5kZXNpZ25Vbml0c1BlckVtKQor
ICAgICAgICB8fCAoYU1ldHJpY3MuYXNjZW50ICE9IGJNZXRyaWNzLmFzY2VudCkKKyAgICAgICAg
fHwgKGFNZXRyaWNzLmRlc2NlbnQgIT0gYk1ldHJpY3MuYXNjZW50KQorICAgICAgICB8fCAoYU1l
dHJpY3MubGluZUdhcCAhPSBiTWV0cmljcy5saW5lR2FwKQorICAgICAgICB8fCAoYU1ldHJpY3Mu
Y2FwSGVpZ2h0ICE9IGJNZXRyaWNzLmNhcEhlaWdodCkKKyAgICAgICAgfHwgKGFNZXRyaWNzLnhI
ZWlnaHQgIT0gYk1ldHJpY3MueEhlaWdodCkKKyAgICAgICAgfHwgKGFNZXRyaWNzLnVuZGVybGlu
ZVBvc2l0aW9uICE9IGJNZXRyaWNzLnVuZGVybGluZVBvc2l0aW9uKQorICAgICAgICB8fCAoYU1l
dHJpY3MudW5kZXJsaW5lVGhpY2tuZXNzICE9IGJNZXRyaWNzLnVuZGVybGluZVRoaWNrbmVzcykK
KyAgICAgICAgfHwgKGFNZXRyaWNzLnN0cmlrZXRocm91Z2hQb3NpdGlvbiAhPSBiTWV0cmljcy5z
dHJpa2V0aHJvdWdoUG9zaXRpb24pCisgICAgICAgIHx8IChhTWV0cmljcy5zdHJpa2V0aHJvdWdo
VGhpY2tuZXNzICE9IGJNZXRyaWNzLnN0cmlrZXRocm91Z2hUaGlja25lc3MpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGb250UGxhdGZvcm1E
YXRhOjpwbGF0Zm9ybUlzRXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fZm9udCA9PSBvdGhlci5tX2ZvbnQKKyAgICAgICAgJiYgbV91c2VH
REkgPT0gb3RoZXIubV91c2VHREkKKyAgICAgICAgJiYgZm9udHNBcmVFcXVhbChtX2R3Rm9udC5n
ZXQoKSwgb3RoZXIubV9kd0ZvbnQuZ2V0KCkpOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0
MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAK
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiR2x5cGhQYWdlLmgiCisKKyNpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJGb250Lmgi
CisjaW5jbHVkZSAiVGV4dEFuYWx5c2lzSGVscGVyLmgiCisjaW5jbHVkZSA8ZHdyaXRlLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZl
ciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKQoreworICAgIGlmIChidWZmZXJMZW5ndGggPiBHbHlw
aFBhZ2U6OnNpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IEZvbnQmIGZv
bnQgPSB0aGlzLT5mb250KCk7CisgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7CisKKyAgICBD
T01QdHI8SURXcml0ZVRleHRBbmFseXplcj4gYW5hbHl6ZXI7CisgICAgSFJFU1VMVCBociA9IEZv
bnQ6OnN5c3RlbURXcml0ZUZhY3RvcnkoKS0+Q3JlYXRlVGV4dEFuYWx5emVyKCZhbmFseXplcik7
CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBhdXRvJiBmb250UGxh
dGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKKworICAgIFVDaGFyIGxvY2FsZU5hbWVb
MjU2XSA9IHsgfTsKKyAgICBpbnQgbG9jYWxlTGVuZ3RoID0gR2V0VXNlckRlZmF1bHRMb2NhbGVO
YW1lKHJlaW50ZXJwcmV0X2Nhc3Q8TFBXU1RSPigmbG9jYWxlTmFtZSksIDI1NSk7CisgICAgUkVM
RUFTRV9BU1NFUlQobG9jYWxlTGVuZ3RoIDw9IDI1NSk7CisgICAgbG9jYWxlTmFtZVtsb2NhbGVM
ZW5ndGhdID0gMDsKKworICAgIFRleHRBbmFseXplckhlbHBlciBoZWxwZXIobG9jYWxlTmFtZSwg
YnVmZmVyLCBidWZmZXJMZW5ndGgpOworCisgICAgaHIgPSBhbmFseXplci0+QW5hbHl6ZVNjcmlw
dCgmaGVscGVyLCAwLCBidWZmZXJMZW5ndGgsICZoZWxwZXIpOworICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOworCisgICAgdW5zaWduZWQgcmV0dXJuZWRDb3VudCA9IDA7CisgICAg
R2x5cGggbG9jYWxHbHlwaEJ1ZmZlcltHbHlwaFBhZ2U6OnNpemVdOworICAgIEdseXBoIGNsdXN0
ZXJNYXBbR2x5cGhQYWdlOjpzaXplXTsKKyAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfVEVYVF9Q
Uk9QRVJUSUVTPiB0ZXh0UHJvcGVydGllcyhHbHlwaFBhZ2U6OnNpemUpOworICAgIFZlY3RvcjxE
V1JJVEVfU0hBUElOR19HTFlQSF9QUk9QRVJUSUVTPiBnbHlwaFByb3BlcnRpZXMoR2x5cGhQYWdl
OjpzaXplKTsKKworICAgIGhyID0gYW5hbHl6ZXItPkdldEdseXBocyhidWZmZXIsIGJ1ZmZlckxl
bmd0aCwgZm9udFBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCksIGZvbnRQbGF0Zm9ybURhdGEub3Jp
ZW50YXRpb24oKSA9PSBWZXJ0aWNhbCwgZmFsc2UsCisgICAgICAgICZoZWxwZXIubV9hbmFseXNp
cywgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgMCwgR2x5cGhQYWdlOjpzaXpl
LCBjbHVzdGVyTWFwLCB0ZXh0UHJvcGVydGllcy5kYXRhKCksCisgICAgICAgIGxvY2FsR2x5cGhC
dWZmZXIsIGdseXBoUHJvcGVydGllcy5kYXRhKCksICZyZXR1cm5lZENvdW50KTsKKyAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBHbHlwaFBhZ2U6OnNpemU7IGkrKykgeworICAgICAgICBHbHlwaCBnbHlwaCA9IGxvY2FsR2x5
cGhCdWZmZXJbaV07CisgICAgICAgIGlmICghZ2x5cGgpCisgICAgICAgICAgICBzZXRHbHlwaEZv
ckluZGV4KGksIDApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNldEdseXBoRm9ySW5k
ZXgoaSwgZ2x5cGgpOworICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gaGF2ZUdseXBoczsKK30KKworfQorCisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YURpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Rm9udC5oIgorCisjaWYgVVNFKERJUkVDVDJEKQorCisjaW5jbHVkZSAiQ29yZVRleHRTUElXaW4u
aCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNs
dWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIV25kREMuaCIKKyNpbmNsdWRlIDxjb211
dGlsLmg+CisjaW5jbHVkZSA8ZHdyaXRlLmg+CisjaW5jbHVkZSA8bWxhbmcuaD4KKyNpbmNsdWRl
IDx1bmljb2RlL3VjaGFyLmg+CisjaW5jbHVkZSA8dW5pY29kZS91bm9ybS5oPgorI2luY2x1ZGUg
PHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworSURXcml0ZUZhY3RvcnkqIEZv
bnQ6OnN5c3RlbURXcml0ZUZhY3RvcnkoKQoreworICAgIHN0YXRpYyBJRFdyaXRlRmFjdG9yeSog
ZGlyZWN0V3JpdGVGYWN0b3J5ID0gbnVsbHB0cjsKKyAgICBpZiAoIWRpcmVjdFdyaXRlRmFjdG9y
eSkgeworICAgICAgICBIUkVTVUxUIGhyID0gRFdyaXRlQ3JlYXRlRmFjdG9yeShEV1JJVEVfRkFD
VE9SWV9UWVBFX1NIQVJFRCwgX191dWlkb2YoZGlyZWN0V3JpdGVGYWN0b3J5KSwgcmVpbnRlcnBy
ZXRfY2FzdDxJVW5rbm93bioqPigmZGlyZWN0V3JpdGVGYWN0b3J5KSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIH0KKworICAgIHJldHVybiBkaXJlY3RXcml0
ZUZhY3Rvcnk7Cit9CisKK0lEV3JpdGVHZGlJbnRlcm9wKiBGb250OjpzeXN0ZW1EV3JpdGVHZGlJ
bnRlcm9wKCkKK3sKKyAgICBzdGF0aWMgSURXcml0ZUdkaUludGVyb3AqIGRpcmVjdFdyaXRlR2Rp
SW50ZXJvcCA9IG51bGxwdHI7CisgICAgaWYgKCFkaXJlY3RXcml0ZUdkaUludGVyb3ApIHsKKyAg
ICAgICAgSFJFU1VMVCBociA9IHN5c3RlbURXcml0ZUZhY3RvcnkoKS0+R2V0R2RpSW50ZXJvcCgm
ZGlyZWN0V3JpdGVHZGlJbnRlcm9wKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CisgICAgfQorCisgICAgcmV0dXJuIGRpcmVjdFdyaXRlR2RpSW50ZXJvcDsKK30KKwor
c3RhdGljIFZlY3RvcjxXQ0hBUj4gZ2V0RmFjZU5hbWUoSURXcml0ZUZvbnQqIGZvbnQpCit7Cisg
ICAgaWYgKCFmb250KQorICAgICAgICByZXR1cm4gVmVjdG9yPFdDSEFSPigpOworCisgICAgQ09N
UHRyPElEV3JpdGVMb2NhbGl6ZWRTdHJpbmdzPiBsb2NhbGl6ZWRGYWNlTmFtZXM7CisgICAgSFJF
U1VMVCBociA9IGZvbnQtPkdldEZhY2VOYW1lcygmbG9jYWxpemVkRmFjZU5hbWVzKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIFVJTlQzMiBsb2NhbGVJbmRleCA9
IDA7CisgICAgQk9PTCBleGlzdHMgPSBmYWxzZTsKKworICAgIHdjaGFyX3QgbG9jYWxlTmFtZVtM
T0NBTEVfTkFNRV9NQVhfTEVOR1RIXTsKKyAgICBpbnQgbG9jYWxlTGVuZ3RoID0gR2V0VXNlckRl
ZmF1bHRMb2NhbGVOYW1lKGxvY2FsZU5hbWUsIExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOworICAg
IGlmIChsb2NhbGVMZW5ndGgpCisgICAgICAgIGhyID0gbG9jYWxpemVkRmFjZU5hbWVzLT5GaW5k
TG9jYWxlTmFtZShsb2NhbGVOYW1lLCAmbG9jYWxlSW5kZXgsICZleGlzdHMpOworCisgICAgaWYg
KCFleGlzdHMgfHwgIVNVQ0NFRURFRChocikpCisgICAgICAgIGhyID0gbG9jYWxpemVkRmFjZU5h
bWVzLT5GaW5kTG9jYWxlTmFtZShMImVuLXVzIiwgJmxvY2FsZUluZGV4LCAmZXhpc3RzKTsKKwor
ICAgIGlmICghZXhpc3RzIHx8ICFTVUNDRUVERUQoaHIpKQorICAgICAgICBsb2NhbGVJbmRleCA9
IDA7CisKKyAgICBVSU5UMzIgZmFjZU5hbWVMZW5ndGggPSAwOworICAgIGhyID0gbG9jYWxpemVk
RmFjZU5hbWVzLT5HZXRTdHJpbmdMZW5ndGgobG9jYWxlSW5kZXgsICZmYWNlTmFtZUxlbmd0aCk7
CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gVmVjdG9yPFdDSEFSPigp
OworCisgICAgVmVjdG9yPFdDSEFSPiBmYWNlTmFtZShmYWNlTmFtZUxlbmd0aCArIDEpOworICAg
IGhyID0gbG9jYWxpemVkRmFjZU5hbWVzLT5HZXRTdHJpbmcobG9jYWxlSW5kZXgsIGZhY2VOYW1l
LmRhdGEoKSwgZmFjZU5hbWUuc2l6ZSgpKTsKKworICAgIHJldHVybiBmYWNlTmFtZTsKK30KKwor
dm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQoreworICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9
IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7CisgICAgbV9zY3Jp
cHRDYWNoZSA9IDA7CisgICAgbV9zY3JpcHRGb250UHJvcGVydGllcyA9IDA7CisKKyAgICBpZiAo
bV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpCisgICAgICAgIHJldHVybiBpbml0R0RJRm9udCgpOwor
CisgICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOworCisgICAgYXV0
byBmb250ID0gbV9wbGF0Zm9ybURhdGEuZHdGb250KCk7CisgICAgUkVMRUFTRV9BU1NFUlQoZm9u
dCk7CisKKyAgICBhdXRvIGZvbnRGYWNlID0gbV9wbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKGZvbnRGYWNlKTsKKworICAgIERXUklURV9GT05UX01FVFJJQ1Mg
Zm9udE1ldHJpY3M7CisgICAgZm9udC0+R2V0TWV0cmljcygmZm9udE1ldHJpY3MpOworCisgICAg
aW50IGlBc2NlbnQgPSBmb250TWV0cmljcy5hc2NlbnQ7CisgICAgaW50IGlEZXNjZW50ID0gZm9u
dE1ldHJpY3MuZGVzY2VudDsKKyAgICBpbnQgaUxpbmVHYXAgPSBmb250TWV0cmljcy5saW5lR2Fw
OworICAgIGludCBpQ2FwSGVpZ2h0ID0gZm9udE1ldHJpY3MuY2FwSGVpZ2h0OworCisgICAgdW5z
aWduZWQgdW5pdHNQZXJFbSA9IGZvbnRNZXRyaWNzLmRlc2lnblVuaXRzUGVyRW07CisgICAgZmxv
YXQgZkFzY2VudCA9IHNjYWxlRW1Ub1VuaXRzKGlBc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRT
aXplOworICAgIGZsb2F0IGZEZXNjZW50ID0gc2NhbGVFbVRvVW5pdHMoaURlc2NlbnQsIHVuaXRz
UGVyRW0pICogcG9pbnRTaXplOworICAgIGZsb2F0IGZDYXBIZWlnaHQgPSBzY2FsZUVtVG9Vbml0
cyhpQ2FwSGVpZ2h0LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKyAgICBmbG9hdCBmTGluZUdh
cCA9IHNjYWxlRW1Ub1VuaXRzKGlMaW5lR2FwLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKwor
ICAgIGlmICghaXNDdXN0b21Gb250KCkpIHsKKyAgICAgICAgVmVjdG9yPFdDSEFSPiBmYWNlTmFt
ZSA9IGdldEZhY2VOYW1lKGZvbnQpOworICAgICAgICBmQXNjZW50ID0gYXNjZW50Q29uc2lkZXJp
bmdNYWNBc2NlbnRIYWNrKGZhY2VOYW1lLmRhdGEoKSwgZkFzY2VudCwgZkRlc2NlbnQpOworICAg
IH0KKworICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KGZBc2NlbnQpOworICAgIG1fZm9udE1l
dHJpY3Muc2V0RGVzY2VudChmRGVzY2VudCk7CisgICAgbV9mb250TWV0cmljcy5zZXRDYXBIZWln
aHQoZkNhcEhlaWdodCk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGZMaW5lR2FwKTsK
KyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxyb3VuZGYoZkFzY2VudCkgKyBscm91
bmRmKGZEZXNjZW50KSArIGxyb3VuZGYoZkxpbmVHYXApKTsKKworICAgIEdseXBoIHhHbHlwaCA9
IGdseXBoRGF0YUZvckNoYXJhY3RlcigneCcpLmdseXBoOworCisgICAgaWYgKHhHbHlwaCkgewor
ICAgICAgICAvLyBNZWFzdXJlIHRoZSBhY3R1YWwgY2hhcmFjdGVyICJ4Iiwgc2luY2UgaXQncyBw
b3NzaWJsZSBmb3IgaXQgdG8gZXh0ZW5kIGJlbG93IHRoZSBiYXNlbGluZSwgYW5kIHdlIG5lZWQg
dGhlCisgICAgICAgIC8vIHJlcG9ydGVkIHgtaGVpZ2h0IHRvIG9ubHkgaW5jbHVkZSB0aGUgcG9y
dGlvbiBvZiB0aGUgZ2x5cGggdGhhdCBpcyBhYm92ZSB0aGUgYmFzZWxpbmUuCisgICAgICAgIFZl
Y3RvcjxEV1JJVEVfR0xZUEhfTUVUUklDUz4gZ2x5cGhNZXRyaWNzKDEpOworICAgICAgICBIUkVT
VUxUIGhyID0gZm9udEZhY2UtPkdldERlc2lnbkdseXBoTWV0cmljcygmeEdseXBoLCAxLCBnbHlw
aE1ldHJpY3MuZGF0YSgpLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IFZlcnRpY2Fs
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgICAgIG1fZm9u
dE1ldHJpY3Muc2V0WEhlaWdodChzY2FsZUVtVG9Vbml0cyhnbHlwaE1ldHJpY3MuZmlyc3QoKS52
ZXJ0aWNhbE9yaWdpblksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpbnQgaVhIZWlnaHQgPSBmb250TWV0cmljcy54SGVpZ2h0OworICAgICAgICBtX2Zv
bnRNZXRyaWNzLnNldFhIZWlnaHQoc2NhbGVFbVRvVW5pdHMoaVhIZWlnaHQsIHVuaXRzUGVyRW0p
ICogcG9pbnRTaXplKTsKKyAgICB9CisKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0o
dW5pdHNQZXJFbSk7Cit9CisKK0Zsb2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBo
KEdseXBoIGdseXBoKSBjb25zdAoreworICAgIGlmICghcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBpZiAobV9wbGF0Zm9ybURhdGEudXNl
R0RJKCkpCisgICAgICAgIHJldHVybiBib3VuZHNGb3JHRElHbHlwaChnbHlwaCk7CisKKyAgICBh
dXRvIGZvbnQgPSBtX3BsYXRmb3JtRGF0YS5kd0ZvbnQoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChm
b250KTsKKworICAgIGF1dG8gZm9udEZhY2UgPSBtX3BsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCk7
CisgICAgUkVMRUFTRV9BU1NFUlQoZm9udCk7CisKKyAgICBmbG9hdCBwb2ludFNpemUgPSBtX3Bs
YXRmb3JtRGF0YS5zaXplKCk7CisgICAgYm9vbCB2ZXJ0aWNhbCA9IG1fcGxhdGZvcm1EYXRhLm9y
aWVudGF0aW9uKCkgPT0gVmVydGljYWw7CisKKyAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX01FVFJJ
Q1M+IGdseXBoTWV0cmljcygxKTsKKyAgICBIUkVTVUxUIGhyID0gZm9udEZhY2UtPkdldERlc2ln
bkdseXBoTWV0cmljcygmZ2x5cGgsIDEsIGdseXBoTWV0cmljcy5kYXRhKCksIG1fcGxhdGZvcm1E
YXRhLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NF
RURFRChocikpOworCisgICAgY29uc3QgYXV0byYgbWV0cmljcyA9IGdseXBoTWV0cmljcy5maXJz
dCgpOworCisgICAgdW5zaWduZWQgdW5pdHNQZXJFbSA9IG1fZm9udE1ldHJpY3MudW5pdHNQZXJF
bSgpOworCisgICAgRmxvYXRQb2ludCBvcmlnaW4oc2NhbGVFbVRvVW5pdHMobWV0cmljcy5sZWZ0
U2lkZUJlYXJpbmcsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplLCBzY2FsZUVtVG9Vbml0cyhtZXRy
aWNzLnZlcnRpY2FsT3JpZ2luWSwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOworICAgIEZsb2F0
U2l6ZSBzaXplKHNjYWxlRW1Ub1VuaXRzKG1ldHJpY3MuYWR2YW5jZVdpZHRoIC0gbWV0cmljcy5s
ZWZ0U2lkZUJlYXJpbmcgLSBtZXRyaWNzLnJpZ2h0U2lkZUJlYXJpbmcsIHVuaXRzUGVyRW0pICog
cG9pbnRTaXplLAorICAgICAgICBzY2FsZUVtVG9Vbml0cyhtZXRyaWNzLmFkdmFuY2VIZWlnaHQg
LSBtZXRyaWNzLnRvcFNpZGVCZWFyaW5nIC0gbWV0cmljcy5ib3R0b21TaWRlQmVhcmluZywgdW5p
dHNQZXJFbSkgKiBwb2ludFNpemUpOworCisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94KG9yaWdp
biwgc2l6ZSk7CisgICAgaWYgKG1fc3ludGhldGljQm9sZE9mZnNldCkKKyAgICAgICAgYm91bmRp
bmdCb3guc2V0V2lkdGgoYm91bmRpbmdCb3gud2lkdGgoKSArIG1fc3ludGhldGljQm9sZE9mZnNl
dCk7CisKKyAgICByZXR1cm4gYm91bmRpbmdCb3g7Cit9CisKK2Zsb2F0IEZvbnQ6OnBsYXRmb3Jt
V2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBpZiAoIXBsYXRmb3JtRGF0
YSgpLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobV9wbGF0Zm9ybURhdGEu
dXNlR0RJKCkpCisgICAgICAgIHJldHVybiB3aWR0aEZvckdESUdseXBoKGdseXBoKTsKKworICAg
IEFTU0VSVChnbHlwaCk7CisKKyAgICBhdXRvIGZvbnQgPSBtX3BsYXRmb3JtRGF0YS5kd0ZvbnQo
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChmb250KTsKKworICAgIGF1dG8gZm9udEZhY2UgPSBtX3Bs
YXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoZm9udEZhY2UpOwor
CisgICAgYm9vbCBpc1ZlcnRpY2FsID0gbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbDsKKworICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfTUVUUklDUz4gZ2x5cGhNZXRyaWNz
KDEpOworICAgIEhSRVNVTFQgaHIgPSBmb250RmFjZS0+R2V0RGVzaWduR2x5cGhNZXRyaWNzKCZn
bHlwaCwgMSwgZ2x5cGhNZXRyaWNzLmRhdGEoKSwgaXNWZXJ0aWNhbCk7CisgICAgUkVMRUFTRV9B
U1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBjb25zdCBhdXRvJiBtZXRyaWNzID0gZ2x5cGhN
ZXRyaWNzLmZpcnN0KCk7CisgICAgaW50IHdpZHRoSW5FbSA9IG1ldHJpY3MuYWR2YW5jZVdpZHRo
OworCisgICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOworICAgIHVu
c2lnbmVkIHVuaXRzUGVyRW0gPSBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKTsKKyAgICBmbG9h
dCB3aWR0aCA9IHNjYWxlRW1Ub1VuaXRzKHdpZHRoSW5FbSwgdW5pdHNQZXJFbSkgKiBwb2ludFNp
emU7CisKKyAgICByZXR1cm4gd2lkdGggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7Cit9CisKK30K
KworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4
dEFuYWx5emVySGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAK
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVGV4dEFuYWx5emVySGVscGVyLmgiCisKKyNpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRl
IDxkd3JpdGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitIUkVTVUxUIFRleHRBbmFseXpl
ckhlbHBlcjo6UXVlcnlJbnRlcmZhY2UoX0luXyBSRUZJSUQgcmlpZCwgX0NPTV9PdXRwdHJfIHZv
aWQqKiBwcHZPYmplY3QpCit7CisgICAgaWYgKCFwcHZPYmplY3QpCisgICAgICAgIHJldHVybiBF
X1BPSU5URVI7CisgICAgKnBwdk9iamVjdCA9IG51bGxwdHI7CisgICAgaWYgKElzRXF1YWxHVUlE
KHJpaWQsIF9fdXVpZG9mKElEV3JpdGVUZXh0QW5hbHlzaXNTaW5rKSkpCisgICAgICAgICpwcHZP
YmplY3QgPSBzdGF0aWNfY2FzdDxJRFdyaXRlVGV4dEFuYWx5c2lzU2luayo+KHRoaXMpOworICAg
IGVsc2UgaWYgKElzRXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKElEV3JpdGVUZXh0QW5hbHlzaXNT
b3VyY2UpKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElEV3JpdGVUZXh0QW5h
bHlzaXNTaW5rKj4odGhpcyk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisg
ICAgQWRkUmVmKCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1VMT05HIFRleHRBbmFseXplckhl
bHBlcjo6QWRkUmVmKCkKK3sKKyAgICByZXR1cm4gKyttX3JlZkNvdW50OworfQorCitVTE9ORyBU
ZXh0QW5hbHl6ZXJIZWxwZXI6OlJlbGVhc2UoKQoreworICAgIFVMT05HIG5ld1JlZiA9IC0tbV9y
ZWZDb3VudDsKKyAgICBpZiAoIW5ld1JlZikKKyAgICAgICAgZGVsZXRlKHRoaXMpOworCisgICAg
cmV0dXJuIG5ld1JlZjsKK30KKworSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6OkdldFRleHRB
dFBvc2l0aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIGNvbnN0IFdDSEFSKiogdGV4dFN0cmluZywg
VUlOVDMyKiB0ZXh0TGVuZ3RoKQoreworICAgIGlmICghdGV4dFN0cmluZyB8fCAhdGV4dExlbmd0
aCkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIGlmICh0ZXh0UG9zaXRpb24gPj0g
bV9idWZmZXJMZW5ndGgpIHsKKyAgICAgICAgKnRleHRTdHJpbmcgPSBudWxscHRyOworICAgICAg
ICAqdGV4dExlbmd0aCA9IDA7CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKworICAgICp0
ZXh0U3RyaW5nID0gJm1fYnVmZmVyW3RleHRQb3NpdGlvbl07CisgICAgKnRleHRMZW5ndGggPSBt
X2J1ZmZlckxlbmd0aCAtIHRleHRQb3NpdGlvbjsKKworICAgIHJldHVybiBTX09LOworfQorCitI
UkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6R2V0VGV4dEJlZm9yZVBvc2l0aW9uKFVJTlQzMiB0
ZXh0UG9zaXRpb24sIGNvbnN0IFdDSEFSKiogdGV4dFN0cmluZywgVUlOVDMyKiB0ZXh0TGVuZ3Ro
KQoreworICAgIGlmICghdGV4dFN0cmluZyB8fCAhdGV4dExlbmd0aCkKKyAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKKworICAgIGlmICghdGV4dFBvc2l0aW9uIHx8IHRleHRQb3NpdGlvbiA+IG1f
YnVmZmVyTGVuZ3RoKSB7CisgICAgICAgICp0ZXh0U3RyaW5nID0gbnVsbHB0cjsKKyAgICAgICAg
KnRleHRMZW5ndGggPSAwOworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICAqdGV4
dFN0cmluZyA9ICZtX2J1ZmZlclswXTsKKyAgICAqdGV4dExlbmd0aCA9IHRleHRQb3NpdGlvbjsK
KworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6R2V0
TG9jYWxlTmFtZShVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIqIHRleHRMZW5ndGgsIGNvbnN0
IFdDSEFSKiogbG9jYWxlTmFtZSkKK3sKKyAgICAqbG9jYWxlTmFtZSA9IG1fbG9jYWxlTmFtZTsK
KyAgICAqdGV4dExlbmd0aCA9IG1fYnVmZmVyTGVuZ3RoIC0gdGV4dFBvc2l0aW9uOworCisgICAg
cmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpHZXROdW1iZXJT
dWJzdGl0dXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyKiB0ZXh0TGVuZ3RoLCBJRFdy
aXRlTnVtYmVyU3Vic3RpdHV0aW9uKiogbnVtYmVyU3Vic3RpdHV0aW9uKQoreworICAgICp0ZXh0
TGVuZ3RoID0gbV9idWZmZXJMZW5ndGggLSB0ZXh0UG9zaXRpb247CisgICAgcmV0dXJuIFNfT0s7
Cit9CisKK0hSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpTZXRMaW5lQnJlYWtwb2ludHMoVUlO
VDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIGNvbnN0IERXUklURV9MSU5FX0JS
RUFLUE9JTlQqKQoreworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIFRleHRBbmFseXpl
ckhlbHBlcjo6U2V0U2NyaXB0QW5hbHlzaXMoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRl
eHRMZW5ndGgsIGNvbnN0IERXUklURV9TQ1JJUFRfQU5BTFlTSVMqIGFuYWx5c2lzKQoreworICAg
IG1fYW5hbHlzaXMgPSAqYW5hbHlzaXM7CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VM
VCBUZXh0QW5hbHl6ZXJIZWxwZXI6OlNldEJpZGlMZXZlbChVSU5UMzIgdGV4dFBvc2l0aW9uLCBV
SU5UMzIgdGV4dExlbmd0aCwgVUlOVDggZXhwbGljaXRMZXZlbCwgVUlOVDggcmVzb2x2ZWRMZXZl
bCkKK3sKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6
OlNldE51bWJlclN1YnN0aXR1dGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExl
bmd0aCwgSURXcml0ZU51bWJlclN1YnN0aXR1dGlvbiopCit7CisgICAgcmV0dXJuIFNfT0s7Cit9
CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vVGV4dEFuYWx5emVySGVscGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBlci5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0cnVjdCBUZXh0QW5hbHl6ZXJIZWxwZXIgOiBwdWJsaWMgSURXcml0ZVRleHRB
bmFseXNpc1NpbmssIElEV3JpdGVUZXh0QW5hbHlzaXNTb3VyY2UgeworICAgIEFuYWx5emVySGVs
cGVyKFVDaGFyKiBsb2NhbGVOYW1lLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5n
dGgpCisgICAgICAgIDogbV9sb2NhbGVOYW1lKGxvY2FsZU5hbWUpCisgICAgICAgICwgbV9idWZm
ZXIoYnVmZmVyKQorICAgICAgICAsIG1fYnVmZmVyTGVuZ3RoKGJ1ZmZlckxlbmd0aCkKKyAgICB7
CisgICAgfQorCisgICAgLy8gSVVua25vd24KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoX0luXyBSRUZJSUQsIF9DT01fT3V0cHRyXyB2b2lkKiop
OworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKCk7CisgICAgdmly
dHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlKCk7CisKKyAgICAvLyBJRFdyaXRl
VGV4dEFuYWx5c2lzU291cmNlIAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBHZXRUZXh0QXRQb3NpdGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBjb25zdCBXQ0hBUioqIHRl
eHRTdHJpbmcsIFVJTlQzMiogdGV4dExlbmd0aCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIEdldFRleHRCZWZvcmVQb3NpdGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBj
b25zdCBXQ0hBUioqIHRleHRTdHJpbmcsIFVJTlQzMiogdGV4dExlbmd0aCk7CisgICAgdmlydHVh
bCBEV1JJVEVfUkVBRElOR19ESVJFQ1RJT04gU1RETUVUSE9EQ0FMTFRZUEUgR2V0UGFyYWdyYXBo
UmVhZGluZ0RpcmVjdGlvbigpIHsgcmV0dXJuIERXUklURV9SRUFESU5HX0RJUkVDVElPTl9MRUZU
X1RPX1JJR0hUOyB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldExv
Y2FsZU5hbWUoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyKiB0ZXh0TGVuZ3RoLCBjb25zdCBX
Q0hBUioqIGxvY2FsZU5hbWUpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBHZXROdW1iZXJTdWJzdGl0dXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyKiB0ZXh0
TGVuZ3RoLCBJRFdyaXRlTnVtYmVyU3Vic3RpdHV0aW9uKiopOworCisgICAgLy8gSURXcml0ZVRl
eHRBbmFseXNpc1NpbmsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0
TGluZUJyZWFrcG9pbnRzKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBj
b25zdCBEV1JJVEVfTElORV9CUkVBS1BPSU5UKik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIFNldFNjcmlwdEFuYWx5c2lzKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQz
MiB0ZXh0TGVuZ3RoLCBjb25zdCBEV1JJVEVfU0NSSVBUX0FOQUxZU0lTKik7CisgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldEJpZGlMZXZlbChVSU5UMzIgdGV4dFBvc2l0
aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgVUlOVDggZXhwbGljaXRMZXZlbCwgVUlOVDggcmVzb2x2
ZWRMZXZlbCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldE51bWJl
clN1YnN0aXR1dGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgSURX
cml0ZU51bWJlclN1YnN0aXR1dGlvbiopOworCisgICAgVUNoYXIqIG1fbG9jYWxlTmFtZSB7IG51
bGxwdHIgfTsKKyAgICBVQ2hhciogbV9idWZmZXIgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQg
bV9idWZmZXJMZW5ndGggeyAwIH07CisgICAgRFdSSVRFX1NDUklQVF9BTkFMWVNJUyBtX2FuYWx5
c2lzOworICAgIFVMT05HIG1fcmVmQ291bnQgeyAwIH07Cit9OworCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290180</attachid>
            <date>2016-09-28 22:31:04 -0700</date>
            <delta_ts>2016-09-29 09:13:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162712-20160928222802.patch</filename>
            <type>text/plain</type>
            <size>45777</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjU3NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE2LTA5LTI4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBB
ZGQgRDJEIEZvbnQgaGFuZGxpbmcgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNzEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBsYW5kcyBhIHNldCBvZiBuZXcgZmlsZXMgdGhh
dCBpbXBsZW1lbnQgCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHVudGlsIGNvbXBsZXRlIGJhY2tl
bmQgbGFuZHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYXNjYWRlOjpzeW50aGV0aWNPYmxpcXVlQW5nbGUpOiBBZGRlZCBoZWxwZXIgZnVuY3Rpb24u
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6ZHdGb250KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpkd0ZvbnRGYWNlKTogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKTogVXNlIGhlbHBlciBmdW5jdGlvbi4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEpOiBBZGQgY2FzZSBmb3IgRGlyZWN0MkQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9u
dEN1c3RvbVBsYXRmb3JtRGF0YSk6IEZpeCB3aGl0ZXNwYWNlLgorICAgICAgICAoV2ViQ29yZTo6
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YSk6IEFkZCBEaXJlY3QyRCBj
YXNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YSk6IENsZWFuIHVwIEMrKyBpbml0aWFsaXplcnMuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKTogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHA6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEp
OiBDbGVhbiB1cCBDKysgaW5pdGlhbGl6ZXJzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBlci5o
OiBBZGRlZC4KKwogMjAxNi0wOS0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIERyb3AgZmlyc3QgJ3N0YXRlJyBwYXJhbWV0ZXIgdG8gSlNET01XaW5kb3c6OnRv
V3JhcHBlZCgpIC8gSlNFdmVudFRhcmdldDo6dG9XcmFwcGVkKCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDIwNjU3NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiAr
NTcsMTEgQEAKICNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKICNlbmRpZgogCisjaWYgVVNF
KERJUkVDVDJEKQoraW50ZXJmYWNlIElEV3JpdGVGYWN0b3J5OworaW50ZXJmYWNlIElEV3JpdGVH
ZGlJbnRlcm9wOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR2x5cGhQ
YWdlOwpAQCAtMTQzLDcgKzE0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9hZGp1c3RlZFNwYWNl
V2lkdGggPSBzcGFjZVdpZHRoOwogICAgIH0KIAotI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQor
I2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKSB8fCBVU0UoQ0FJUk8pCiAgICAgZmxvYXQgc3lu
dGhldGljQm9sZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9sZE9mZnNldDsg
fQogI2VuZGlmCiAKQEAgLTE5OCw2ICsyMDMsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyBmbG9h
dCBhc2NlbnRDb25zaWRlcmluZ01hY0FzY2VudEhhY2soY29uc3QgV0NIQVIqLCBmbG9hdCBhc2Nl
bnQsIGZsb2F0IGRlc2NlbnQpOwogI2VuZGlmCiAKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIElEV3JpdGVGYWN0b3J5KiBzeXN0ZW1EV3JpdGVGYWN0b3J5KCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEV3JpdGVHZGlJbnRlcm9wKiBzeXN0ZW1EV3Jp
dGVHZGlJbnRlcm9wKCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBGb250KGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmLCBib29sIGlzQ3VzdG9tRm9udCA9IGZhbHNlLCBib29sIGlzTG9hZGluZyA9
IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2sgPSBmYWxzZSk7CiAKQEAgLTI2
Nyw3ICsyNzcsNyBAQCBwcml2YXRlOgogCiAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8RGVy
aXZlZEZvbnRzPiBtX2Rlcml2ZWRGb250RGF0YTsKIAotI2lmIFVTRShDRykgfHwgVVNFKENBSVJP
KQorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKSB8fCBVU0UoQ0FJUk8pCiAgICAgZmxvYXQg
bV9zeW50aGV0aWNCb2xkT2Zmc2V0OwogI2VuZGlmCiAKQEAgLTMzOCw3ICszNDgsNyBAQCBBTFdB
WVNfSU5MSU5FIGZsb2F0IEZvbnQ6OndpZHRoRm9yR2x5cGgoCiAKICNpZiBFTkFCTEUoT1BFTlRZ
UEVfVkVSVElDQUwpCiAgICAgaWYgKG1fdmVydGljYWxEYXRhKSB7Ci0jaWYgVVNFKENHKSB8fCBV
U0UoQ0FJUk8pCisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpIHx8IFVTRShDQUlSTykKICAg
ICAgICAgd2lkdGggPSBtX3ZlcnRpY2FsRGF0YS0+YWR2YW5jZUhlaWdodCh0aGlzLCBnbHlwaCkg
KyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7CiAjZWxzZQogICAgICAgICB3aWR0aCA9IG1fdmVydGlj
YWxEYXRhLT5hZHZhbmNlSGVpZ2h0KHRoaXMsIGdseXBoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAkocmV2aXNpb24gMjA2NTc2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVl
bGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3LCAyMDEwLCAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNiwgMjAwNywgMjAxMCwgMjAxMS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTMyMCw2ICszMjAsOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
YWR2YW5jZWRUZXh0UmVuZGVyaW5nTW9kZSgpOwogICAgIH0KIAorICAgIHN0YXRpYyBpbnQgc3lu
dGhldGljT2JsaXF1ZUFuZ2xlKCkgeyByZXR1cm4gMTQ7IH0KKwogICAgIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24gbV9mb250RGVzY3JpcHRpb247CiAgICAgbXV0YWJsZSBSZWZQdHI8Rm9udENhc2Nh
ZGVGb250cz4gbV9mb250czsKICAgICBXZWFrUHRyRmFjdG9yeTxGb250Q2FzY2FkZT4gbV93ZWFr
UHRyRmFjdG9yeTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQ
bGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250UGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDIwNjU3NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogCiAjaWYgUExBVEZPUk0o
V0lOKQorI2luY2x1ZGUgIkNPTVB0ci5oIgogI2luY2x1ZGUgIlNoYXJlZEdESU9iamVjdC5oIgog
I2VuZGlmCiAKQEAgLTY1LDYgKzY2LDggQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVEZvbnQq
IENURm9udFJlZgogI2lmIFBMQVRGT1JNKFdJTikKICNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVj
dC5oPgogdHlwZWRlZiBzdHJ1Y3QgSEZPTlRfXyogSEZPTlQ7CitpbnRlcmZhY2UgSURXcml0ZUZv
bnQ7CitpbnRlcmZhY2UgSURXcml0ZUZvbnRGYWNlOwogI2VuZGlmCiAKIApAQCAtMTAzLDYgKzEw
Niw4IEBAIHB1YmxpYzoKIAogI2lmIFVTRShDRykKICAgICBGb250UGxhdGZvcm1EYXRhKEdESU9i
amVjdDxIRk9OVD4sIENHRm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBi
b29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJKTsKKyNlbGlmIFVTRShESVJFQ1QyRCkK
KyAgICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4sIElEV3JpdGVGb250KiwgZmxv
YXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wg
dXNlR0RJKTsKICNlbGlmIFVTRShDQUlSTykKICAgICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVj
dDxIRk9OVD4sIGNhaXJvX2ZvbnRfZmFjZV90KiwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29s
IGl0YWxpYyk7CiAjZW5kaWYKQEAgLTEzNyw2ICsxNDIsMTEgQEAgcHVibGljOgogICAgIENHRm9u
dFJlZiBjZ0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX2NnRm9udC5nZXQoKTsgfQogI2VuZGlmCiAK
KyNpZiBVU0UoRElSRUNUMkQpCisgICAgSURXcml0ZUZvbnQqIGR3Rm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1fZHdGb250LmdldCgpOyB9CisgICAgSURXcml0ZUZvbnRGYWNlKiBkd0ZvbnRGYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9kd0ZvbnRGYWNlLmdldCgpOyB9CisjZW5kaWYKKwogICAgIGJvb2wg
aXNGaXhlZFBpdGNoKCkgY29uc3Q7CiAgICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQogICAgIGJvb2wgc3ludGhldGljQm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhl
dGljQm9sZDsgfQpAQCAtMjQxLDYgKzI1MSwxMCBAQCBwcml2YXRlOgogI2lmIFVTRShDRykgJiYg
KFBMQVRGT1JNKFdJTikgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA8IDEwMTIwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPCAxMDAwMDApKQogICAgIFJldGFpblB0cjxDR0ZvbnRSZWY+IG1f
Y2dGb250OwogI2VuZGlmCisjaWYgVVNFKERJUkVDVDJEKQorICAgIENPTVB0cjxJRFdyaXRlRm9u
dD4gbV9kd0ZvbnQ7CisgICAgQ09NUHRyPElEV3JpdGVGb250RmFjZT4gbV9kd0ZvbnRGYWNlOwor
I2VuZGlmCiAjaWYgVVNFKENBSVJPKQogICAgIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90PiBt
X3NjYWxlZEZvbnQ7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQkocmV2aXNpb24g
MjA2NTc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
c2NhZGVDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsNiBAQCBTT0ZUX0xJTktf
RlJBTUVXT1JLKFVJS2l0KQogU09GVF9MSU5LKFVJS2l0LCBfVUlLaXRHZXRUZXh0RWZmZWN0c0Nh
dGFsb2csIENVSUNhdGFsb2cgKiwgKHZvaWQpLCAoKSkKICNlbmRpZgogCi0jZGVmaW5lIFNZTlRI
RVRJQ19PQkxJUVVFX0FOR0xFIDE0Ci0KICNpZmRlZiBfX0xQNjRfXwogI2RlZmluZSBVUmVmQ29u
IHZvaWQqCiAjZWxzZQpAQCAtMjQ0LDcgKzI0Miw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdH
bHlwaHMoR3JhcGhpY3NDb24KICAgICBtYXRyaXguYiA9IC1tYXRyaXguYjsKICAgICBtYXRyaXgu
ZCA9IC1tYXRyaXguZDsKICAgICBpZiAocGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSkg
ewotICAgICAgICBzdGF0aWMgZmxvYXQgb2JsaXF1ZVNrZXcgPSB0YW5mKFNZTlRIRVRJQ19PQkxJ
UVVFX0FOR0xFICogcGlGbG9hdCAvIDE4MCk7CisgICAgICAgIHN0YXRpYyBmbG9hdCBvYmxpcXVl
U2tldyA9IHRhbmYoc3ludGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBwaUZsb2F0IC8gMTgwKTsKICAg
ICAgICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKQogICAgICAg
ICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0FmZmluZVRy
YW5zZm9ybU1ha2UoMSwgb2JsaXF1ZVNrZXcsIDAsIDEsIDAsIDApKTsKICAgICAgICAgZWxzZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
R1dpbi5jcHAJKHJldmlzaW9uIDIwNjU3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgaW50IHN5bnRoZXRpY09ibGlxdWVBbmds
ZSA9IDE0OwotCiBzdGF0aWMgaW5saW5lIENHRmxvYXQgdG9DR0Zsb2F0KEZJWEVEIGYpCiB7CiAg
ICAgcmV0dXJuIGYudmFsdWUgKyBmLmZyYWN0IC8gQ0dGbG9hdCg2NTUzNi4wKTsKQEAgLTE2OCw3
ICsxNjYsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29uCiAgICAg
bWF0cml4LmQgPSAtbWF0cml4LmQ7CiAKICAgICBpZiAocGxhdGZvcm1EYXRhLnN5bnRoZXRpY09i
bGlxdWUoKSkgewotICAgICAgICBzdGF0aWMgZmxvYXQgc2tldyA9IC10YW5mKHN5bnRoZXRpY09i
bGlxdWVBbmdsZSAqIHBpRmxvYXQgLyAxODAuMGYpOworICAgICAgICBzdGF0aWMgZmxvYXQgc2tl
dyA9IC10YW5mKHN5bnRoZXRpY09ibGlxdWVBbmdsZSgpICogcGlGbG9hdCAvIDE4MC4wZik7CiAg
ICAgICAgIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVU
cmFuc2Zvcm1NYWtlKDEsIDAsIHNrZXcsIDEsIDAsIDApKTsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4u
Y3BwCShyZXZpc2lvbiAyMDY1NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udENhY2hlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsMTAgQEAK
ICNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+
CiAjZW5kaWYKIAorI2lmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRlIDxkd3JpdGUuaD4KKyNlbmRp
ZgorCiB1c2luZyBzdGQ6Om1pbjsKIAogbmFtZXNwYWNlIFdlYkNvcmUKQEAgLTU0OSw2ICs1NTMs
NyBAQCBzdGF0aWMgaW50IENBTExCQUNLIHRyYWl0c0luRmFtaWx5RW51bVByCiAgICAgcHJvY0Rh
dGEtPm1fdHJhaXRzTWFza3MuYWRkKHRyYWl0c01hc2spOwogICAgIHJldHVybiAxOwogfQorCiBW
ZWN0b3I8Rm9udFRyYWl0c01hc2s+IEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3Qg
QXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQogewogICAgIEhXbmREQyBoZGMoMCk7CkBAIC01OTks
NiArNjA0LDggQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYQogCiAj
aWYgVVNFKENHKQogICAgIGJvb2wgZm9udENyZWF0aW9uRmFpbGVkID0gIXJlc3VsdC0+Y2dGb250
KCk7CisjZWxpZiBVU0UoRElSRUNUMkQpCisgICAgYm9vbCBmb250Q3JlYXRpb25GYWlsZWQgPSAh
cmVzdWx0LT5kd0ZvbnQoKTsKICNlbGlmIFVTRShDQUlSTykKICAgICBib29sIGZvbnRDcmVhdGlv
bkZhaWxlZCA9ICFyZXN1bHQtPnNjYWxlZEZvbnQoKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2Fk
ZURpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorCisjaWYg
VVNFKERJUkVDVDJEKQorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAi
Q09NUHRyLmgiCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiRm9udC5o
IgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaCIKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgIldlYkNvcmVUZXh0UmVuZGVyZXIuaCIKKyNpbmNsdWRlIDxkMmQxLmg+CisjaW5jbHVk
ZSA8ZHdyaXRlLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5
cGhCdWZmZXIsCisgICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAg
ICBhdXRvIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAg
Ym9vbCBzaG91bGRVc2VGb250U21vb3RoaW5nID0gV2ViQ29yZVNob3VsZFVzZUZvbnRTbW9vdGhp
bmcoKTsKKworICAgIHN3aXRjaCAoc21vb3RoaW5nTW9kZSkgeworICAgIGNhc2UgQW50aWFsaWFz
ZWQ6CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7Cisg
ICAgICAgIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTdWJwaXhlbEFudGlhbGlhc2VkOgorICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0
U2hvdWxkQW50aWFsaWFzKHRydWUpOworICAgICAgICBzaG91bGRVc2VGb250U21vb3RoaW5nID0g
dHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb1Ntb290aGluZzoKKyAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyhmYWxzZSk7CisgICAgICAgIHNob3VsZFVz
ZUZvbnRTbW9vdGhpbmcgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdXRvU21v
b3RoaW5nOgorICAgICAgICAvLyBGb3IgdGhlIEF1dG9TbW9vdGggY2FzZSwgZG9uJ3QgZG8gYW55
dGhpbmchIEtlZXAgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7CisK
KyAgICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOworCisgICAgRDJEMV9NQVRSSVhfM1gyX0YgbWF0
cml4OworICAgIGNvbnRleHQtPkdldFRyYW5zZm9ybSgmbWF0cml4KTsKKworICAgIGlmIChwbGF0
Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKSB7CisgICAgICAgIHN0YXRpYyBmbG9hdCBza2V3
ID0gLXRhbmYoc3ludGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBwaUZsb2F0IC8gMTgwLjBmKTsKKyAg
ICAgICAgYXV0byBza2V3TWF0cml4ID0gRDJEMTo6TWF0cml4M3gyRjo6U2tldyhza2V3LCAwKTsK
KyAgICAgICAgY29udGV4dC0+U2V0VHJhbnNmb3JtKG1hdHJpeCAqIHNrZXdNYXRyaXgpOworICAg
IH0KKworICAgIC8vIFVuaXNjcmliZSBnaXZlcyB1cyBvZmZzZXRzIHRvIGhlbHAgcmVmaW5lIHRo
ZSBwb3NpdGlvbmluZyBvZiBjb21iaW5pbmcgZ2x5cGhzLgorICAgIEZsb2F0U2l6ZSB0cmFuc2xh
dGlvbiA9IGdseXBoQnVmZmVyLm9mZnNldEF0KGZyb20pOworCisgICAgUkVMRUFTRV9BU1NFUlQo
cGxhdGZvcm1EYXRhLmR3Rm9udCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChwbGF0Zm9ybURhdGEu
ZHdGb250RmFjZSgpKTsKKworICAgIFZlY3RvcjxGTE9BVD4gaG9yaXpvbnRhbEFkdmFuY2VzKG51
bUdseXBocyk7CisgICAgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+IG9mZnNldEFkdmFuY2Vz
KG51bUdseXBocyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgKytp
KSB7CisgICAgICAgIGF1dG8gYWR2YW5jZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VzKGkgKyBmcm9t
KTsKKyAgICAgICAgaWYgKCFhZHZhbmNlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgaG9yaXpvbnRhbEFkdmFuY2VzW2ldID0gYWR2YW5jZS0+d2lkdGgoKTsKKyAgICAgICAgb2Zm
c2V0QWR2YW5jZXNbaV0uYWR2YW5jZU9mZnNldCA9IGFkdmFuY2UtPndpZHRoKCk7CisgICAgICAg
IG9mZnNldEFkdmFuY2VzW2ldLmFzY2VuZGVyT2Zmc2V0ID0gYWR2YW5jZS0+aGVpZ2h0KCk7Cisg
ICAgfQorCisgICAgRFdSSVRFX0dMWVBIX1JVTiBnbHlwaFJ1bjsKKyAgICBnbHlwaFJ1bi5mb250
RmFjZSA9IHBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCk7CisgICAgZ2x5cGhSdW4uZm9udEVtU2l6
ZSA9IHBsYXRmb3JtRGF0YS5zaXplKCk7CisgICAgZ2x5cGhSdW4uZ2x5cGhDb3VudCA9IG51bUds
eXBoczsKKyAgICBnbHlwaFJ1bi5nbHlwaEluZGljZXMgPSBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJv
bSk7CisgICAgZ2x5cGhSdW4uZ2x5cGhBZHZhbmNlcyA9IGhvcml6b250YWxBZHZhbmNlcy5kYXRh
KCk7CisgICAgZ2x5cGhSdW4uZ2x5cGhPZmZzZXRzID0gbnVsbHB0cjsKKyAgICBnbHlwaFJ1bi5p
c1NpZGV3YXlzID0gcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWw7CisgICAg
Z2x5cGhSdW4uYmlkaUxldmVsID0gMDsKKworICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Cisg
ICAgZmxvYXQgc2hhZG93Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAgICBncmFwaGlj
c0NvbnRleHQuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3Ip
OworCisgICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBncmFwaGljc0NvbnRleHQudGV4dERyYXdp
bmdNb2RlKCkgPT0gVGV4dE1vZGVGaWxsICYmIHNoYWRvd0NvbG9yLmlzVmFsaWQoKSAmJiAhc2hh
ZG93Qmx1ciAmJiAoIWdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8
IGdyYXBoaWNzQ29udGV4dC5nZXRDVE0oKS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBl
ZCgpKTsKKyAgICBpZiAoaGFzU2ltcGxlU2hhZG93KSB7CisgICAgICAgIC8vIFBhaW50IHNpbXBs
ZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8g
YXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KKyAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LmNsZWFyU2hhZG93KCk7CisgICAgICAgIENvbG9yIGZpbGxDb2xvciA9IGdyYXBoaWNzQ29u
dGV4dC5maWxsQ29sb3IoKTsKKyAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yKHNoYWRvd0Nv
bG9yLnJlZCgpLCBzaGFkb3dDb2xvci5ncmVlbigpLCBzaGFkb3dDb2xvci5ibHVlKCksIHNoYWRv
d0NvbG9yLmFscGhhKCkgKiBmaWxsQ29sb3IuYWxwaGEoKSAvIDI1NSk7CisgICAgICAgIGZsb2F0
IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgdHJhbnNsYXRpb24ud2lkdGgoKSArIHNoYWRvd09m
ZnNldC53aWR0aCgpOworICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zv
cm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBz
byBkb3duIGlzIG5lZ2F0aXZlLgorICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50Lnko
KSArIHRyYW5zbGF0aW9uLmhlaWdodCgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpICogKGdyYXBo
aWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKKworICAgICAg
ICBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IHNoYWRvd0JydXNoOworICAgICAgICBpZiAo
IVNVQ0NFRURFRChjb250ZXh0LT5DcmVhdGVTb2xpZENvbG9yQnJ1c2goZ3JhcGhpY3NDb250ZXh0
LmNvbG9yV2l0aEdsb2JhbEFscGhhKHNoYWRvd0ZpbGxDb2xvciksICZzaGFkb3dCcnVzaCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQx
OjpQb2ludDJGKHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksICZnbHlwaFJ1biwgc2hhZG93QnJ1
c2guZ2V0KCkpOworICAgICAgICBpZiAoZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCkpCisgICAg
ICAgICAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihzaGFkb3dUZXh0WCAr
IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBzaGFkb3dUZXh0WSksICZnbHlwaFJ1biwgc2hh
ZG93QnJ1c2guZ2V0KCkpOworICAgIH0KKworICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQx
OjpQb2ludDJGKHBvaW50LngoKSArIHRyYW5zbGF0aW9uLndpZHRoKCksIHBvaW50LnkoKSArIHRy
YW5zbGF0aW9uLmhlaWdodCgpKSwgJmdseXBoUnVuLCBncmFwaGljc0NvbnRleHQuc29saWRGaWxs
QnJ1c2goKSk7CisgICAgaWYgKGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpKQorICAgICAgICBj
b250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihwb2ludC54KCkgKyB0cmFuc2xhdGlv
bi53aWR0aCgpICsgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSArIHRyYW5z
bGF0aW9uLmhlaWdodCgpKSwgJmdseXBoUnVuLCBncmFwaGljc0NvbnRleHQuc29saWRGaWxsQnJ1
c2goKSk7CisKKyAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQorICAgICAgICBncmFwaGljc0NvbnRl
eHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworCisg
ICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHJldmlzaW9uIDIwNjU3NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDIwIEBACiAjaW5jbHVkZSAiRm9udFBsYXRmb3Jt
RGF0YS5oIgogI2luY2x1ZGUgIk9wZW5UeXBlVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCi0jaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZp
Y2VzLmg+Ci0jaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVy
ZmFjZS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9C
YXNlNjQuaD4KICNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgogCisjaWYgVVNFKENHKQor
I2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2lu
Y2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNl
bmRpZgorCisjaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlIDxk
d3JpdGUuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CkBAIC0zOCw3ICs0Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpCiB7CiAgICAgaWYgKG1fZm9u
dFJlZmVyZW5jZSkKLSAgICAgICAgICAgIFJlbW92ZUZvbnRNZW1SZXNvdXJjZUV4KG1fZm9udFJl
ZmVyZW5jZSk7CisgICAgICAgIFJlbW92ZUZvbnRNZW1SZXNvdXJjZUV4KG1fZm9udFJlZmVyZW5j
ZSk7CiB9CiAKIEZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBi
b2xkLCBib29sIGl0YWxpYykKQEAgLTY4LDggKzc2LDE1IEBAIEZvbnRQbGF0Zm9ybURhdGEgRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YToKIAogICAgIGF1dG8gaGZvbnQgPSBhZG9wdEdESU9iamVjdCg6
OkNyZWF0ZUZvbnRJbmRpcmVjdCgmbG9nRm9udCkpOwogCisjaWYgVVNFKENHKQogICAgIFJldGFp
blB0cjxDR0ZvbnRSZWY+IGNnRm9udCA9IGFkb3B0Q0YoQ0dGb250Q3JlYXRlV2l0aFBsYXRmb3Jt
Rm9udCgmbG9nRm9udCkpOwogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKFdURk1vdmUoaGZv
bnQpLCBjZ0ZvbnQuZ2V0KCksIHNpemUsIGJvbGQsIGl0YWxpYywgcmVuZGVyaW5nTW9kZSA9PSBG
b250UmVuZGVyaW5nTW9kZTo6QWx0ZXJuYXRlKTsKKyNlbHNlCisgICAgQ09NUHRyPElEV3JpdGVG
b250PiBkd0ZvbnQ7CisgICAgSFJFU1VMVCBociA9IEZvbnQ6OnN5c3RlbURXcml0ZUdkaUludGVy
b3AoKS0+Q3JlYXRlRm9udEZyb21MT0dGT05UKCZsb2dGb250LCAmZHdGb250KTsKKyAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShX
VEZNb3ZlKGhmb250KSwgZHdGb250LmdldCgpLCBzaXplLCBib2xkLCBpdGFsaWMsIHJlbmRlcmlu
Z01vZGUgPT0gRm9udFJlbmRlcmluZ01vZGU6OkFsdGVybmF0ZSk7CisjZW5kaWYKIH0KIAogLy8g
Q3JlYXRlcyBhIHVuaXF1ZSBhbmQgdW5wcmVkaWN0YWJsZSBmb250IG5hbWUsIGluIG9yZGVyIHRv
IGF2b2lkIGNvbGxpc2lvbnMgYW5kIHRvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNw
cAkocmV2aXNpb24gMjA2NTc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxMiAr
MTIwLDkgQEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KAogRm9udFBs
YXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGhmb250LCBDR0Zv
bnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNl
R0RJKQogICAgIDogbV9zeW50aGV0aWNCb2xkKGJvbGQpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlx
dWUob2JsaXF1ZSkKLSAgICAsIG1fb3JpZW50YXRpb24oSG9yaXpvbnRhbCkKICAgICAsIG1fc2l6
ZShzaXplKQotICAgICwgbV93aWR0aFZhcmlhbnQoUmVndWxhcldpZHRoKQogICAgICwgbV9mb250
KFNoYXJlZEdESU9iamVjdDxIRk9OVD46OmNyZWF0ZShXVEZNb3ZlKGhmb250KSkpCiAgICAgLCBt
X2NnRm9udChmb250KQotICAgICwgbV9pc0NvbG9yQml0bWFwRm9udChmYWxzZSkKICAgICAsIG1f
dXNlR0RJKHVzZUdESSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4u
Y3BwCShyZXZpc2lvbiAyMDY1NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIs
MTIgKzYyLDcgQEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KAogRm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGZvbnQsIGNh
aXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9i
bGlxdWUpCiAgICAgOiBtX2ZvbnQoU2hhcmVkR0RJT2JqZWN0PEhGT05UPjo6Y3JlYXRlKFdURk1v
dmUoZm9udCkpKQogICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBtX29yaWVudGF0aW9uKEhvcml6
b250YWwpCi0gICAgLCBtX3dpZHRoVmFyaWFudChSZWd1bGFyV2lkdGgpCi0gICAgLCBtX2lzQ29s
b3JCaXRtYXBGb250KGZhbHNlKQotICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCiAgICAgLCBt
X3N5bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKLSAgICAsIG1fdXNlR0RJKGZhbHNlKQogewogICAg
IGNhaXJvX21hdHJpeF90IGZvbnRNYXRyaXg7CiAgICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUo
JmZvbnRNYXRyaXgsIHNpemUsIHNpemUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJl
Y3QyRC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZQorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorCisjaWYgVVNF
KERJUkVDVDJEKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiU2hh
cmVkR0RJT2JqZWN0LmgiCisjaW5jbHVkZSA8ZDJkMS5oPgorI2luY2x1ZGUgPGR3cml0ZS5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDo6bWluOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRh
SW5pdChIRk9OVCBmb250LCBmbG9hdCBzaXplLCBIREMgaGRjLCBXQ0hBUiogZmFjZU5hbWUpCit7
CisgICAgTE9HRk9OVCBsb2dmb250OworICAgIEdldE9iamVjdChmb250LCBzaXplb2YobG9nZm9u
dCksICZsb2dmb250KTsKKworICAgIEhSRVNVTFQgaHIgPSBGb250OjpzeXN0ZW1EV3JpdGVHZGlJ
bnRlcm9wKCktPkNyZWF0ZUZvbnRGcm9tTE9HRk9OVCgmbG9nZm9udCwgJm1fZHdGb250KTsKKyAg
ICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybjsKKworICAgIGhyID0gbV9kd0Zv
bnQtPkNyZWF0ZUZvbnRGYWNlKCZtX2R3Rm9udEZhY2UpOworICAgIGlmICghU1VDQ0VFREVEKGhy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VzZUdESSkKKyAgICAgICAgbV9pc1N5
c3RlbUZvbnQgPSAhd2NzY21wKGZhY2VOYW1lLCBMIkx1Y2lkYSBHcmFuZGUiKTsKK30KKworRm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGhmb250LCBJ
RFdyaXRlRm9udCogZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJv
b2wgdXNlR0RJKQorICAgIDogbV9zeW50aGV0aWNCb2xkKGJvbGQpCisgICAgLCBtX3N5bnRoZXRp
Y09ibGlxdWUob2JsaXF1ZSkKKyAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9mb250KFNoYXJl
ZEdESU9iamVjdDxIRk9OVD46OmNyZWF0ZShXVEZNb3ZlKGhmb250KSkpCisgICAgLCBtX2R3Rm9u
dChmb250KQorICAgICwgbV91c2VHREkodXNlR0RJKQoreworICAgIEhSRVNVTFQgaHIgPSBtX2R3
Rm9udC0+Q3JlYXRlRm9udEZhY2UoJm1fZHdGb250RmFjZSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
U1VDQ0VFREVEKGhyKSk7Cit9CisKK3N0YXRpYyBib29sIGZvbnRzQXJlRXF1YWwoSURXcml0ZUZv
bnQqIGEsIElEV3JpdGVGb250KiBiKQoreworICAgIGlmICghYSAmJiAhYikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoYSA9PSBiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmICgoIWEgJiYgYikgfHwgKGEgJiYgIWIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoYS0+R2V0V2VpZ2h0KCkgIT0gYi0+R2V0V2VpZ2h0KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChhLT5HZXRTdHlsZSgpICE9IGItPkdldFN0eWxlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChhLT5HZXRTdHJldGNoKCkgIT0gYi0+R2V0U3RyZXRj
aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBEV1JJVEVfRk9OVF9NRVRSSUNTIGFN
ZXRyaWNzLCBiTWV0cmljczsKKyAgICBhLT5HZXRNZXRyaWNzKCZhTWV0cmljcyk7CisgICAgYi0+
R2V0TWV0cmljcygmYk1ldHJpY3MpOworCisgICAgaWYgKChhTWV0cmljcy5kZXNpZ25Vbml0c1Bl
ckVtICE9IGJNZXRyaWNzLmRlc2lnblVuaXRzUGVyRW0pCisgICAgICAgIHx8IChhTWV0cmljcy5h
c2NlbnQgIT0gYk1ldHJpY3MuYXNjZW50KQorICAgICAgICB8fCAoYU1ldHJpY3MuZGVzY2VudCAh
PSBiTWV0cmljcy5hc2NlbnQpCisgICAgICAgIHx8IChhTWV0cmljcy5saW5lR2FwICE9IGJNZXRy
aWNzLmxpbmVHYXApCisgICAgICAgIHx8IChhTWV0cmljcy5jYXBIZWlnaHQgIT0gYk1ldHJpY3Mu
Y2FwSGVpZ2h0KQorICAgICAgICB8fCAoYU1ldHJpY3MueEhlaWdodCAhPSBiTWV0cmljcy54SGVp
Z2h0KQorICAgICAgICB8fCAoYU1ldHJpY3MudW5kZXJsaW5lUG9zaXRpb24gIT0gYk1ldHJpY3Mu
dW5kZXJsaW5lUG9zaXRpb24pCisgICAgICAgIHx8IChhTWV0cmljcy51bmRlcmxpbmVUaGlja25l
c3MgIT0gYk1ldHJpY3MudW5kZXJsaW5lVGhpY2tuZXNzKQorICAgICAgICB8fCAoYU1ldHJpY3Mu
c3RyaWtldGhyb3VnaFBvc2l0aW9uICE9IGJNZXRyaWNzLnN0cmlrZXRocm91Z2hQb3NpdGlvbikK
KyAgICAgICAgfHwgKGFNZXRyaWNzLnN0cmlrZXRocm91Z2hUaGlja25lc3MgIT0gYk1ldHJpY3Mu
c3RyaWtldGhyb3VnaFRoaWNrbmVzcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbChj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250
ID09IG90aGVyLm1fZm9udAorICAgICAgICAmJiBtX3VzZUdESSA9PSBvdGhlci5tX3VzZUdESQor
ICAgICAgICAmJiBmb250c0FyZUVxdWFsKG1fZHdGb250LmdldCgpLCBvdGhlci5tX2R3Rm9udC5n
ZXQoKSk7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwCShy
ZXZpc2lvbiAyMDY1NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDkgKzQwLDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShH
RElPYmplY3Q8SEZPTlQ+IGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVl
LCBib29sIHVzZUdESSkKICAgICA6IG1fZm9udChTaGFyZWRHRElPYmplY3Q8SEZPTlQ+OjpjcmVh
dGUoV1RGTW92ZShmb250KSkpCiAgICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fb3JpZW50YXRp
b24oSG9yaXpvbnRhbCkKLSAgICAsIG1fd2lkdGhWYXJpYW50KFJlZ3VsYXJXaWR0aCkKLSAgICAs
IG1faXNDb2xvckJpdG1hcEZvbnQoZmFsc2UpCiAgICAgLCBtX3N5bnRoZXRpY0JvbGQoYm9sZCkK
ICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShvYmxpcXVlKQogICAgICwgbV91c2VHREkodXNlR0RJ
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRy
ZWVOb2RlRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5v
ZGVEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCisKKyNpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNs
dWRlICJGb250LmgiCisjaW5jbHVkZSAiVGV4dEFuYWx5c2lzSGVscGVyLmgiCisjaW5jbHVkZSA8
ZHdyaXRlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBHbHlwaFBhZ2U6OmZpbGwo
VUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKQoreworICAgIGlmIChidWZmZXJM
ZW5ndGggPiBHbHlwaFBhZ2U6OnNpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNv
bnN0IEZvbnQmIGZvbnQgPSB0aGlzLT5mb250KCk7CisgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFs
c2U7CisKKyAgICBDT01QdHI8SURXcml0ZVRleHRBbmFseXplcj4gYW5hbHl6ZXI7CisgICAgSFJF
U1VMVCBociA9IEZvbnQ6OnN5c3RlbURXcml0ZUZhY3RvcnkoKS0+Q3JlYXRlVGV4dEFuYWx5emVy
KCZhbmFseXplcik7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBh
dXRvJiBmb250UGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKKworICAgIFVDaGFy
IGxvY2FsZU5hbWVbTE9DQUxFX05BTUVfTUFYX0xFTkdUSCArIDFdID0geyB9OworICAgIGludCBs
b2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUocmVpbnRlcnByZXRfY2FzdDxM
UFdTVFI+KCZsb2NhbGVOYW1lKSwgTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7CisgICAgUkVMRUFT
RV9BU1NFUlQobG9jYWxlTGVuZ3RoIDw9IExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOworICAgIGxv
Y2FsZU5hbWVbbG9jYWxlTGVuZ3RoXSA9IDA7CisKKyAgICBUZXh0QW5hbHl6ZXJIZWxwZXIgaGVs
cGVyKGxvY2FsZU5hbWUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoKTsKKworICAgIGhyID0gYW5hbHl6
ZXItPkFuYWx5emVTY3JpcHQoJmhlbHBlciwgMCwgYnVmZmVyTGVuZ3RoLCAmaGVscGVyKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIHVuc2lnbmVkIHJldHVybmVk
Q291bnQgPSAwOworICAgIEdseXBoIGxvY2FsR2x5cGhCdWZmZXJbR2x5cGhQYWdlOjpzaXplXTsK
KyAgICBHbHlwaCBjbHVzdGVyTWFwW0dseXBoUGFnZTo6c2l6ZV07CisgICAgVmVjdG9yPERXUklU
RV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUz4gdGV4dFByb3BlcnRpZXMoR2x5cGhQYWdlOjpzaXpl
KTsKKyAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfR0xZUEhfUFJPUEVSVElFUz4gZ2x5cGhQcm9w
ZXJ0aWVzKEdseXBoUGFnZTo6c2l6ZSk7CisKKyAgICBociA9IGFuYWx5emVyLT5HZXRHbHlwaHMo
YnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnRQbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpLCBmb250
UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwsIGZhbHNlLAorICAgICAgICAm
aGVscGVyLm1fYW5hbHlzaXMsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIDAs
IEdseXBoUGFnZTo6c2l6ZSwgY2x1c3Rlck1hcCwgdGV4dFByb3BlcnRpZXMuZGF0YSgpLAorICAg
ICAgICBsb2NhbEdseXBoQnVmZmVyLCBnbHlwaFByb3BlcnRpZXMuZGF0YSgpLCAmcmV0dXJuZWRD
b3VudCk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKKyAgICAgICAgR2x5cGgg
Z2x5cGggPSBsb2NhbEdseXBoQnVmZmVyW2ldOworICAgICAgICBpZiAoIWdseXBoKQorICAgICAg
ICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCAwKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBzZXRHbHlwaEZvckluZGV4KGksIGdseXBoKTsKKyAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGhhdmVHbHlwaHM7Cit9CisKK30K
KworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2lt
cGxlRm9udERhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0
YURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKworI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUg
IkNvcmVUZXh0U1BJV2luLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9u
dENhY2hlLmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiR2x5cGhQ
YWdlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFduZERDLmgi
CisjaW5jbHVkZSA8Y29tdXRpbC5oPgorI2luY2x1ZGUgPGR3cml0ZS5oPgorI2luY2x1ZGUgPG1s
YW5nLmg+CisjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdW5v
cm0uaD4KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK0lE
V3JpdGVGYWN0b3J5KiBGb250OjpzeXN0ZW1EV3JpdGVGYWN0b3J5KCkKK3sKKyAgICBzdGF0aWMg
SURXcml0ZUZhY3RvcnkqIGRpcmVjdFdyaXRlRmFjdG9yeSA9IG51bGxwdHI7CisgICAgaWYgKCFk
aXJlY3RXcml0ZUZhY3RvcnkpIHsKKyAgICAgICAgSFJFU1VMVCBociA9IERXcml0ZUNyZWF0ZUZh
Y3RvcnkoRFdSSVRFX0ZBQ1RPUllfVFlQRV9TSEFSRUQsIF9fdXVpZG9mKGRpcmVjdFdyaXRlRmFj
dG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8SVVua25vd24qKj4oJmRpcmVjdFdyaXRlRmFjdG9yeSkp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZGlyZWN0V3JpdGVGYWN0b3J5OworfQorCitJRFdyaXRlR2RpSW50ZXJvcCogRm9udDo6
c3lzdGVtRFdyaXRlR2RpSW50ZXJvcCgpCit7CisgICAgc3RhdGljIElEV3JpdGVHZGlJbnRlcm9w
KiBkaXJlY3RXcml0ZUdkaUludGVyb3AgPSBudWxscHRyOworICAgIGlmICghZGlyZWN0V3JpdGVH
ZGlJbnRlcm9wKSB7CisgICAgICAgIEhSRVNVTFQgaHIgPSBzeXN0ZW1EV3JpdGVGYWN0b3J5KCkt
PkdldEdkaUludGVyb3AoJmRpcmVjdFdyaXRlR2RpSW50ZXJvcCk7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIH0KKworICAgIHJldHVybiBkaXJlY3RXcml0ZUdk
aUludGVyb3A7Cit9CisKK3N0YXRpYyBWZWN0b3I8V0NIQVI+IGdldEZhY2VOYW1lKElEV3JpdGVG
b250KiBmb250KQoreworICAgIGlmICghZm9udCkKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxXQ0hB
Uj4oKTsKKworICAgIENPTVB0cjxJRFdyaXRlTG9jYWxpemVkU3RyaW5ncz4gbG9jYWxpemVkRmFj
ZU5hbWVzOworICAgIEhSRVNVTFQgaHIgPSBmb250LT5HZXRGYWNlTmFtZXMoJmxvY2FsaXplZEZh
Y2VOYW1lcyk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBVSU5U
MzIgbG9jYWxlSW5kZXggPSAwOworICAgIEJPT0wgZXhpc3RzID0gZmFsc2U7CisKKyAgICB3Y2hh
cl90IGxvY2FsZU5hbWVbTE9DQUxFX05BTUVfTUFYX0xFTkdUSF07CisgICAgaW50IGxvY2FsZUxl
bmd0aCA9IEdldFVzZXJEZWZhdWx0TG9jYWxlTmFtZShsb2NhbGVOYW1lLCBMT0NBTEVfTkFNRV9N
QVhfTEVOR1RIKTsKKyAgICBpZiAobG9jYWxlTGVuZ3RoKQorICAgICAgICBociA9IGxvY2FsaXpl
ZEZhY2VOYW1lcy0+RmluZExvY2FsZU5hbWUobG9jYWxlTmFtZSwgJmxvY2FsZUluZGV4LCAmZXhp
c3RzKTsKKworICAgIGlmICghZXhpc3RzIHx8ICFTVUNDRUVERUQoaHIpKQorICAgICAgICBociA9
IGxvY2FsaXplZEZhY2VOYW1lcy0+RmluZExvY2FsZU5hbWUoTCJlbi11cyIsICZsb2NhbGVJbmRl
eCwgJmV4aXN0cyk7CisKKyAgICBpZiAoIWV4aXN0cyB8fCAhU1VDQ0VFREVEKGhyKSkKKyAgICAg
ICAgbG9jYWxlSW5kZXggPSAwOworCisgICAgVUlOVDMyIGZhY2VOYW1lTGVuZ3RoID0gMDsKKyAg
ICBociA9IGxvY2FsaXplZEZhY2VOYW1lcy0+R2V0U3RyaW5nTGVuZ3RoKGxvY2FsZUluZGV4LCAm
ZmFjZU5hbWVMZW5ndGgpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJu
IFZlY3RvcjxXQ0hBUj4oKTsKKworICAgIFZlY3RvcjxXQ0hBUj4gZmFjZU5hbWUoZmFjZU5hbWVM
ZW5ndGggKyAxKTsKKyAgICBociA9IGxvY2FsaXplZEZhY2VOYW1lcy0+R2V0U3RyaW5nKGxvY2Fs
ZUluZGV4LCBmYWNlTmFtZS5kYXRhKCksIGZhY2VOYW1lLnNpemUoKSk7CisKKyAgICByZXR1cm4g
ZmFjZU5hbWU7Cit9CisKK3ZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBtX3N5bnRo
ZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyAxLjBmIDog
MC5mOworICAgIG1fc2NyaXB0Q2FjaGUgPSAwOworICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMg
PSAwOworCisgICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKQorICAgICAgICByZXR1cm4g
aW5pdEdESUZvbnQoKTsKKworICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNp
emUoKTsKKworICAgIGF1dG8gZm9udCA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9udCgpOworICAgIFJF
TEVBU0VfQVNTRVJUKGZvbnQpOworCisgICAgYXV0byBmb250RmFjZSA9IG1fcGxhdGZvcm1EYXRh
LmR3Rm9udEZhY2UoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChmb250RmFjZSk7CisKKyAgICBEV1JJ
VEVfRk9OVF9NRVRSSUNTIGZvbnRNZXRyaWNzOworICAgIGZvbnQtPkdldE1ldHJpY3MoJmZvbnRN
ZXRyaWNzKTsKKworICAgIGludCBpQXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50OworICAgIGlu
dCBpRGVzY2VudCA9IGZvbnRNZXRyaWNzLmRlc2NlbnQ7CisgICAgaW50IGlMaW5lR2FwID0gZm9u
dE1ldHJpY3MubGluZUdhcDsKKyAgICBpbnQgaUNhcEhlaWdodCA9IGZvbnRNZXRyaWNzLmNhcEhl
aWdodDsKKworICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0gPSBmb250TWV0cmljcy5kZXNpZ25Vbml0
c1BlckVtOworICAgIGZsb2F0IGZBc2NlbnQgPSBzY2FsZUVtVG9Vbml0cyhpQXNjZW50LCB1bml0
c1BlckVtKSAqIHBvaW50U2l6ZTsKKyAgICBmbG9hdCBmRGVzY2VudCA9IHNjYWxlRW1Ub1VuaXRz
KGlEZXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKyAgICBmbG9hdCBmQ2FwSGVpZ2h0
ID0gc2NhbGVFbVRvVW5pdHMoaUNhcEhlaWdodCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Cisg
ICAgZmxvYXQgZkxpbmVHYXAgPSBzY2FsZUVtVG9Vbml0cyhpTGluZUdhcCwgdW5pdHNQZXJFbSkg
KiBwb2ludFNpemU7CisKKyAgICBpZiAoIWlzQ3VzdG9tRm9udCgpKSB7CisgICAgICAgIFZlY3Rv
cjxXQ0hBUj4gZmFjZU5hbWUgPSBnZXRGYWNlTmFtZShmb250KTsKKyAgICAgICAgZkFzY2VudCA9
IGFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhmYWNlTmFtZS5kYXRhKCksIGZBc2NlbnQs
IGZEZXNjZW50KTsKKyAgICB9CisKKyAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChmQXNjZW50
KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZkRlc2NlbnQpOworICAgIG1fZm9udE1l
dHJpY3Muc2V0Q2FwSGVpZ2h0KGZDYXBIZWlnaHQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGlu
ZUdhcChmTGluZUdhcCk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhscm91bmRm
KGZBc2NlbnQpICsgbHJvdW5kZihmRGVzY2VudCkgKyBscm91bmRmKGZMaW5lR2FwKSk7CisKKyAg
ICBHbHlwaCB4R2x5cGggPSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ3gnKS5nbHlwaDsKKworICAg
IGlmICh4R2x5cGgpIHsKKyAgICAgICAgLy8gTWVhc3VyZSB0aGUgYWN0dWFsIGNoYXJhY3RlciAi
eCIsIHNpbmNlIGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGV4dGVuZCBiZWxvdyB0aGUgYmFzZWxp
bmUsIGFuZCB3ZSBuZWVkIHRoZQorICAgICAgICAvLyByZXBvcnRlZCB4LWhlaWdodCB0byBvbmx5
IGluY2x1ZGUgdGhlIHBvcnRpb24gb2YgdGhlIGdseXBoIHRoYXQgaXMgYWJvdmUgdGhlIGJhc2Vs
aW5lLgorICAgICAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX01FVFJJQ1M+IGdseXBoTWV0cmljcygx
KTsKKyAgICAgICAgSFJFU1VMVCBociA9IGZvbnRGYWNlLT5HZXREZXNpZ25HbHlwaE1ldHJpY3Mo
JnhHbHlwaCwgMSwgZ2x5cGhNZXRyaWNzLmRhdGEoKSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRp
b24oKSA9PSBWZXJ0aWNhbCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OworICAgICAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoc2NhbGVFbVRvVW5pdHMoZ2x5cGhN
ZXRyaWNzLmZpcnN0KCkudmVydGljYWxPcmlnaW5ZLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IGlYSGVpZ2h0ID0gZm9udE1ldHJpY3MueEhlaWdo
dDsKKyAgICAgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHNjYWxlRW1Ub1VuaXRzKGlYSGVp
Z2h0LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisgICAgfQorCisgICAgbV9mb250TWV0cmlj
cy5zZXRVbml0c1BlckVtKHVuaXRzUGVyRW0pOworfQorCitGbG9hdFJlY3QgRm9udDo6cGxhdGZv
cm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBpZiAoIXBsYXRmb3Jt
RGF0YSgpLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgaWYgKG1f
cGxhdGZvcm1EYXRhLnVzZUdESSgpKQorICAgICAgICByZXR1cm4gYm91bmRzRm9yR0RJR2x5cGgo
Z2x5cGgpOworCisgICAgYXV0byBmb250ID0gbV9wbGF0Zm9ybURhdGEuZHdGb250KCk7CisgICAg
UkVMRUFTRV9BU1NFUlQoZm9udCk7CisKKyAgICBhdXRvIGZvbnRGYWNlID0gbV9wbGF0Zm9ybURh
dGEuZHdGb250RmFjZSgpOworICAgIFJFTEVBU0VfQVNTRVJUKGZvbnRGYWNlKTsKKworICAgIGZs
b2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICBib29sIHZlcnRpY2Fs
ID0gbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbDsKKworICAgIFZlY3Rv
cjxEV1JJVEVfR0xZUEhfTUVUUklDUz4gZ2x5cGhNZXRyaWNzKDEpOworICAgIEhSRVNVTFQgaHIg
PSBmb250RmFjZS0+R2V0RGVzaWduR2x5cGhNZXRyaWNzKCZnbHlwaCwgMSwgZ2x5cGhNZXRyaWNz
LmRhdGEoKSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCk7CisgICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBjb25zdCBhdXRvJiBtZXRyaWNz
ID0gZ2x5cGhNZXRyaWNzLmZpcnN0KCk7CisKKyAgICB1bnNpZ25lZCB1bml0c1BlckVtID0gbV9m
b250TWV0cmljcy51bml0c1BlckVtKCk7CisKKyAgICBGbG9hdFBvaW50IG9yaWdpbihzY2FsZUVt
VG9Vbml0cyhtZXRyaWNzLmxlZnRTaWRlQmVhcmluZywgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUs
IHNjYWxlRW1Ub1VuaXRzKG1ldHJpY3MudmVydGljYWxPcmlnaW5ZLCB1bml0c1BlckVtKSAqIHBv
aW50U2l6ZSk7CisgICAgRmxvYXRTaXplIHNpemUoc2NhbGVFbVRvVW5pdHMobWV0cmljcy5hZHZh
bmNlV2lkdGggLSBtZXRyaWNzLmxlZnRTaWRlQmVhcmluZyAtIG1ldHJpY3MucmlnaHRTaWRlQmVh
cmluZywgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUsCisgICAgICAgIHNjYWxlRW1Ub1VuaXRzKG1l
dHJpY3MuYWR2YW5jZUhlaWdodCAtIG1ldHJpY3MudG9wU2lkZUJlYXJpbmcgLSBtZXRyaWNzLmJv
dHRvbVNpZGVCZWFyaW5nLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisKKyAgICBGbG9hdFJl
Y3QgYm91bmRpbmdCb3gob3JpZ2luLCBzaXplKTsKKyAgICBpZiAobV9zeW50aGV0aWNCb2xkT2Zm
c2V0KQorICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0aChib3VuZGluZ0JveC53aWR0aCgpICsg
bV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKKworICAgIHJldHVybiBib3VuZGluZ0JveDsKK30KKwor
ZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAorewor
ICAgIGlmICghcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9yR0RJ
R2x5cGgoZ2x5cGgpOworCisgICAgQVNTRVJUKGdseXBoKTsKKworICAgIGF1dG8gZm9udCA9IG1f
cGxhdGZvcm1EYXRhLmR3Rm9udCgpOworICAgIFJFTEVBU0VfQVNTRVJUKGZvbnQpOworCisgICAg
YXV0byBmb250RmFjZSA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChmb250RmFjZSk7CisKKyAgICBib29sIGlzVmVydGljYWwgPSBtX3BsYXRmb3JtRGF0
YS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsOworCisgICAgVmVjdG9yPERXUklURV9HTFlQSF9N
RVRSSUNTPiBnbHlwaE1ldHJpY3MoMSk7CisgICAgSFJFU1VMVCBociA9IGZvbnRGYWNlLT5HZXRE
ZXNpZ25HbHlwaE1ldHJpY3MoJmdseXBoLCAxLCBnbHlwaE1ldHJpY3MuZGF0YSgpLCBpc1ZlcnRp
Y2FsKTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIGNvbnN0IGF1
dG8mIG1ldHJpY3MgPSBnbHlwaE1ldHJpY3MuZmlyc3QoKTsKKyAgICBpbnQgd2lkdGhJbkVtID0g
bWV0cmljcy5hZHZhbmNlV2lkdGg7CisKKyAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3Jt
RGF0YS5zaXplKCk7CisgICAgdW5zaWduZWQgdW5pdHNQZXJFbSA9IG1fZm9udE1ldHJpY3MudW5p
dHNQZXJFbSgpOworICAgIGZsb2F0IHdpZHRoID0gc2NhbGVFbVRvVW5pdHMod2lkdGhJbkVtLCB1
bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKworICAgIHJldHVybiB3aWR0aCArIG1fc3ludGhldGlj
Qm9sZE9mZnNldDsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3Bw
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9U
ZXh0QW5hbHl6ZXJIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0QW5hbHl6ZXJIZWxwZXIuaCIKKworI2lmIFVTRShE
SVJFQ1QyRCkKKworI2luY2x1ZGUgPGR3cml0ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0hSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpRdWVyeUludGVyZmFjZShfSW5fIFJFRklJRCBy
aWlkLCBfQ09NX091dHB0cl8gdm9pZCoqIHBwdk9iamVjdCkKK3sKKyAgICBpZiAoIXBwdk9iamVj
dCkKKyAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKyAgICAqcHB2T2JqZWN0ID0gbnVsbHB0cjsK
KyAgICBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlkb2YoSURXcml0ZVRleHRBbmFseXNpc1Np
bmspKSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElEV3JpdGVUZXh0QW5hbHlz
aXNTaW5rKj4odGhpcyk7CisgICAgZWxzZSBpZiAoSXNFcXVhbEdVSUQocmlpZCwgX191dWlkb2Yo
SURXcml0ZVRleHRBbmFseXNpc1NvdXJjZSkpKQorICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8SURXcml0ZVRleHRBbmFseXNpc1NpbmsqPih0aGlzKTsKKyAgICBlbHNlCisgICAgICAg
IHJldHVybiBFX0ZBSUw7CisKKyAgICBBZGRSZWYoKTsKKyAgICByZXR1cm4gU19PSzsKK30KKwor
VUxPTkcgVGV4dEFuYWx5emVySGVscGVyOjpBZGRSZWYoKQoreworICAgIHJldHVybiArK21fcmVm
Q291bnQ7Cit9CisKK1VMT05HIFRleHRBbmFseXplckhlbHBlcjo6UmVsZWFzZSgpCit7CisgICAg
VUxPTkcgbmV3UmVmID0gLS1tX3JlZkNvdW50OworICAgIGlmICghbmV3UmVmKQorICAgICAgICBk
ZWxldGUodGhpcyk7CisKKyAgICByZXR1cm4gbmV3UmVmOworfQorCitIUkVTVUxUIFRleHRBbmFs
eXplckhlbHBlcjo6R2V0VGV4dEF0UG9zaXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgY29uc3Qg
V0NIQVIqKiB0ZXh0U3RyaW5nLCBVSU5UMzIqIHRleHRMZW5ndGgpCit7CisgICAgaWYgKCF0ZXh0
U3RyaW5nIHx8ICF0ZXh0TGVuZ3RoKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAg
aWYgKHRleHRQb3NpdGlvbiA+PSBtX2J1ZmZlckxlbmd0aCkgeworICAgICAgICAqdGV4dFN0cmlu
ZyA9IG51bGxwdHI7CisgICAgICAgICp0ZXh0TGVuZ3RoID0gMDsKKyAgICAgICAgcmV0dXJuIFNf
T0s7CisgICAgfQorCisgICAgKnRleHRTdHJpbmcgPSAmbV9idWZmZXJbdGV4dFBvc2l0aW9uXTsK
KyAgICAqdGV4dExlbmd0aCA9IG1fYnVmZmVyTGVuZ3RoIC0gdGV4dFBvc2l0aW9uOworCisgICAg
cmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpHZXRUZXh0QmVm
b3JlUG9zaXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgY29uc3QgV0NIQVIqKiB0ZXh0U3RyaW5n
LCBVSU5UMzIqIHRleHRMZW5ndGgpCit7CisgICAgaWYgKCF0ZXh0U3RyaW5nIHx8ICF0ZXh0TGVu
Z3RoKQorICAgICAgICByZXR1cm4gRV9QT0lOVEVSOworCisgICAgaWYgKCF0ZXh0UG9zaXRpb24g
fHwgdGV4dFBvc2l0aW9uID4gbV9idWZmZXJMZW5ndGgpIHsKKyAgICAgICAgKnRleHRTdHJpbmcg
PSBudWxscHRyOworICAgICAgICAqdGV4dExlbmd0aCA9IDA7CisgICAgICAgIHJldHVybiBTX09L
OworICAgIH0KKworICAgICp0ZXh0U3RyaW5nID0gJm1fYnVmZmVyWzBdOworICAgICp0ZXh0TGVu
Z3RoID0gdGV4dFBvc2l0aW9uOworCisgICAgcmV0dXJuIFNfT0s7Cit9CisKK0hSRVNVTFQgVGV4
dEFuYWx5emVySGVscGVyOjpHZXRMb2NhbGVOYW1lKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQz
MiogdGV4dExlbmd0aCwgY29uc3QgV0NIQVIqKiBsb2NhbGVOYW1lKQoreworICAgICpsb2NhbGVO
YW1lID0gbV9sb2NhbGVOYW1lOworICAgICp0ZXh0TGVuZ3RoID0gbV9idWZmZXJMZW5ndGggLSB0
ZXh0UG9zaXRpb247CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBUZXh0QW5hbHl6
ZXJIZWxwZXI6OkdldE51bWJlclN1YnN0aXR1dGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5U
MzIqIHRleHRMZW5ndGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qKiBudW1iZXJTdWJzdGl0
dXRpb24pCit7CisgICAgKnRleHRMZW5ndGggPSBtX2J1ZmZlckxlbmd0aCAtIHRleHRQb3NpdGlv
bjsKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6OlNl
dExpbmVCcmVha3BvaW50cyhVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwg
Y29uc3QgRFdSSVRFX0xJTkVfQlJFQUtQT0lOVCopCit7CisgICAgcmV0dXJuIFNfT0s7Cit9CisK
K0hSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpTZXRTY3JpcHRBbmFseXNpcyhVSU5UMzIgdGV4
dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgY29uc3QgRFdSSVRFX1NDUklQVF9BTkFMWVNJ
UyogYW5hbHlzaXMpCit7CisgICAgbV9hbmFseXNpcyA9ICphbmFseXNpczsKKworICAgIHJldHVy
biBTX09LOworfQorCitIUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6U2V0QmlkaUxldmVsKFVJ
TlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBVSU5UOCBleHBsaWNpdExldmVs
LCBVSU5UOCByZXNvbHZlZExldmVsKQoreworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxU
IFRleHRBbmFseXplckhlbHBlcjo6U2V0TnVtYmVyU3Vic3RpdHV0aW9uKFVJTlQzMiB0ZXh0UG9z
aXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBJRFdyaXRlTnVtYmVyU3Vic3RpdHV0aW9uKikKK3sK
KyAgICByZXR1cm4gU19PSzsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVy
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1RleHRBbmFseXplckhlbHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFRleHRBbmFseXplckhlbHBlciA6
IHB1YmxpYyBJRFdyaXRlVGV4dEFuYWx5c2lzU2luaywgSURXcml0ZVRleHRBbmFseXNpc1NvdXJj
ZSB7CisgICAgQW5hbHl6ZXJIZWxwZXIoVUNoYXIqIGxvY2FsZU5hbWUsIFVDaGFyKiBidWZmZXIs
IHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKKyAgICAgICAgOiBtX2xvY2FsZU5hbWUobG9jYWxlTmFt
ZSkKKyAgICAgICAgLCBtX2J1ZmZlcihidWZmZXIpCisgICAgICAgICwgbV9idWZmZXJMZW5ndGgo
YnVmZmVyTGVuZ3RoKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBJVW5rbm93bgorICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShfSW5fIFJFRklJRCwg
X0NPTV9PdXRwdHJfIHZvaWQqKik7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQ
RSBBZGRSZWYoKTsKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2Uo
KTsKKworICAgIC8vIElEV3JpdGVUZXh0QW5hbHlzaXNTb3VyY2UgCisgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIEdldFRleHRBdFBvc2l0aW9uKFVJTlQzMiB0ZXh0UG9zaXRp
b24sIGNvbnN0IFdDSEFSKiogdGV4dFN0cmluZywgVUlOVDMyKiB0ZXh0TGVuZ3RoKTsKKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0VGV4dEJlZm9yZVBvc2l0aW9uKFVJ
TlQzMiB0ZXh0UG9zaXRpb24sIGNvbnN0IFdDSEFSKiogdGV4dFN0cmluZywgVUlOVDMyKiB0ZXh0
TGVuZ3RoKTsKKyAgICB2aXJ0dWFsIERXUklURV9SRUFESU5HX0RJUkVDVElPTiBTVERNRVRIT0RD
QUxMVFlQRSBHZXRQYXJhZ3JhcGhSZWFkaW5nRGlyZWN0aW9uKCkgeyByZXR1cm4gRFdSSVRFX1JF
QURJTkdfRElSRUNUSU9OX0xFRlRfVE9fUklHSFQ7IH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgR2V0TG9jYWxlTmFtZShVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIq
IHRleHRMZW5ndGgsIGNvbnN0IFdDSEFSKiogbG9jYWxlTmFtZSk7CisgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIEdldE51bWJlclN1YnN0aXR1dGlvbihVSU5UMzIgdGV4dFBv
c2l0aW9uLCBVSU5UMzIqIHRleHRMZW5ndGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qKik7
CisKKyAgICAvLyBJRFdyaXRlVGV4dEFuYWx5c2lzU2luaworICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBTZXRMaW5lQnJlYWtwb2ludHMoVUlOVDMyIHRleHRQb3NpdGlvbiwg
VUlOVDMyIHRleHRMZW5ndGgsIGNvbnN0IERXUklURV9MSU5FX0JSRUFLUE9JTlQqKTsKKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0U2NyaXB0QW5hbHlzaXMoVUlOVDMy
IHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIGNvbnN0IERXUklURV9TQ1JJUFRfQU5B
TFlTSVMqKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0QmlkaUxl
dmVsKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBVSU5UOCBleHBsaWNp
dExldmVsLCBVSU5UOCByZXNvbHZlZExldmVsKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgU2V0TnVtYmVyU3Vic3RpdHV0aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJ
TlQzMiB0ZXh0TGVuZ3RoLCBJRFdyaXRlTnVtYmVyU3Vic3RpdHV0aW9uKik7CisKKyAgICBVQ2hh
ciogbV9sb2NhbGVOYW1lIHsgbnVsbHB0ciB9OworICAgIFVDaGFyKiBtX2J1ZmZlciB7IG51bGxw
dHIgfTsKKyAgICB1bnNpZ25lZCBtX2J1ZmZlckxlbmd0aCB7IDAgfTsKKyAgICBEV1JJVEVfU0NS
SVBUX0FOQUxZU0lTIG1fYW5hbHlzaXM7CisgICAgVUxPTkcgbV9yZWZDb3VudCB7IDAgfTsKK307
CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290205</attachid>
            <date>2016-09-29 09:13:31 -0700</date>
            <delta_ts>2016-09-29 10:43:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162712-20160929091031.patch</filename>
            <type>text/plain</type>
            <size>45499</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjU3NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE2LTA5LTI4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBB
ZGQgRDJEIEZvbnQgaGFuZGxpbmcgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNzEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBsYW5kcyBhIHNldCBvZiBuZXcgZmlsZXMgdGhh
dCBpbXBsZW1lbnQgCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHVudGlsIGNvbXBsZXRlIGJhY2tl
bmQgbGFuZHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYXNjYWRlOjpzeW50aGV0aWNPYmxpcXVlQW5nbGUpOiBBZGRlZCBoZWxwZXIgZnVuY3Rpb24u
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6ZHdGb250KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpkd0ZvbnRGYWNlKTogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKTogVXNlIGhlbHBlciBmdW5jdGlvbi4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKTogRGl0dG8uCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEpOiBBZGQgY2FzZSBmb3IgRGlyZWN0MkQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9u
dEN1c3RvbVBsYXRmb3JtRGF0YSk6IEZpeCB3aGl0ZXNwYWNlLgorICAgICAgICAoV2ViQ29yZTo6
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YSk6IEFkZCBEaXJlY3QyRCBj
YXNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dX
aW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YSk6IENsZWFuIHVwIEMrKyBpbml0aWFsaXplcnMuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKTogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHA6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEp
OiBDbGVhbiB1cCBDKysgaW5pdGlhbGl6ZXJzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HbHlwaFBhZ2VUcmVlTm9kZURpcmVjdDJELmNwcDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmNwcDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBlci5o
OiBBZGRlZC4KKwogMjAxNi0wOS0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIERyb3AgZmlyc3QgJ3N0YXRlJyBwYXJhbWV0ZXIgdG8gSlNET01XaW5kb3c6OnRv
V3JhcHBlZCgpIC8gSlNFdmVudFRhcmdldDo6dG9XcmFwcGVkKCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDIwNjU3NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiAr
NTcsMTEgQEAKICNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKICNlbmRpZgogCisjaWYgVVNF
KERJUkVDVDJEKQoraW50ZXJmYWNlIElEV3JpdGVGYWN0b3J5OworaW50ZXJmYWNlIElEV3JpdGVH
ZGlJbnRlcm9wOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR2x5cGhQ
YWdlOwpAQCAtMTQzLDcgKzE0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9hZGp1c3RlZFNwYWNl
V2lkdGggPSBzcGFjZVdpZHRoOwogICAgIH0KIAotI2lmIFVTRShDRykgfHwgVVNFKENBSVJPKQor
I2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKSB8fCBVU0UoQ0FJUk8pCiAgICAgZmxvYXQgc3lu
dGhldGljQm9sZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9sZE9mZnNldDsg
fQogI2VuZGlmCiAKQEAgLTE5OCw2ICsyMDMsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyBmbG9h
dCBhc2NlbnRDb25zaWRlcmluZ01hY0FzY2VudEhhY2soY29uc3QgV0NIQVIqLCBmbG9hdCBhc2Nl
bnQsIGZsb2F0IGRlc2NlbnQpOwogI2VuZGlmCiAKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIElEV3JpdGVGYWN0b3J5KiBzeXN0ZW1EV3JpdGVGYWN0b3J5KCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEV3JpdGVHZGlJbnRlcm9wKiBzeXN0ZW1EV3Jp
dGVHZGlJbnRlcm9wKCk7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBGb250KGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmLCBib29sIGlzQ3VzdG9tRm9udCA9IGZhbHNlLCBib29sIGlzTG9hZGluZyA9
IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2sgPSBmYWxzZSk7CiAKQEAgLTI2
Nyw3ICsyNzcsNyBAQCBwcml2YXRlOgogCiAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8RGVy
aXZlZEZvbnRzPiBtX2Rlcml2ZWRGb250RGF0YTsKIAotI2lmIFVTRShDRykgfHwgVVNFKENBSVJP
KQorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKSB8fCBVU0UoQ0FJUk8pCiAgICAgZmxvYXQg
bV9zeW50aGV0aWNCb2xkT2Zmc2V0OwogI2VuZGlmCiAKQEAgLTMzOCw3ICszNDgsNyBAQCBBTFdB
WVNfSU5MSU5FIGZsb2F0IEZvbnQ6OndpZHRoRm9yR2x5cGgoCiAKICNpZiBFTkFCTEUoT1BFTlRZ
UEVfVkVSVElDQUwpCiAgICAgaWYgKG1fdmVydGljYWxEYXRhKSB7Ci0jaWYgVVNFKENHKSB8fCBV
U0UoQ0FJUk8pCisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpIHx8IFVTRShDQUlSTykKICAg
ICAgICAgd2lkdGggPSBtX3ZlcnRpY2FsRGF0YS0+YWR2YW5jZUhlaWdodCh0aGlzLCBnbHlwaCkg
KyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7CiAjZWxzZQogICAgICAgICB3aWR0aCA9IG1fdmVydGlj
YWxEYXRhLT5hZHZhbmNlSGVpZ2h0KHRoaXMsIGdseXBoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAkocmV2aXNpb24gMjA2NTc2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVl
bGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA3LCAyMDEwLCAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNiwgMjAwNywgMjAxMCwgMjAxMS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTMyMCw2ICszMjAsOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
YWR2YW5jZWRUZXh0UmVuZGVyaW5nTW9kZSgpOwogICAgIH0KIAorICAgIHN0YXRpYyBpbnQgc3lu
dGhldGljT2JsaXF1ZUFuZ2xlKCkgeyByZXR1cm4gMTQ7IH0KKwogICAgIEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24gbV9mb250RGVzY3JpcHRpb247CiAgICAgbXV0YWJsZSBSZWZQdHI8Rm9udENhc2Nh
ZGVGb250cz4gbV9mb250czsKICAgICBXZWFrUHRyRmFjdG9yeTxGb250Q2FzY2FkZT4gbV93ZWFr
UHRyRmFjdG9yeTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQ
bGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250UGxhdGZvcm1EYXRhLmgJKHJldmlzaW9uIDIwNjU3NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogCiAjaWYgUExBVEZPUk0o
V0lOKQorI2luY2x1ZGUgIkNPTVB0ci5oIgogI2luY2x1ZGUgIlNoYXJlZEdESU9iamVjdC5oIgog
I2VuZGlmCiAKQEAgLTY1LDYgKzY2LDggQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVEZvbnQq
IENURm9udFJlZgogI2lmIFBMQVRGT1JNKFdJTikKICNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVj
dC5oPgogdHlwZWRlZiBzdHJ1Y3QgSEZPTlRfXyogSEZPTlQ7CitpbnRlcmZhY2UgSURXcml0ZUZv
bnQ7CitpbnRlcmZhY2UgSURXcml0ZUZvbnRGYWNlOwogI2VuZGlmCiAKIApAQCAtMTAzLDYgKzEw
Niw4IEBAIHB1YmxpYzoKIAogI2lmIFVTRShDRykKICAgICBGb250UGxhdGZvcm1EYXRhKEdESU9i
amVjdDxIRk9OVD4sIENHRm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBi
b29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJKTsKKyNlbGlmIFVTRShESVJFQ1QyRCkK
KyAgICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4sIElEV3JpdGVGb250KiwgZmxv
YXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wg
dXNlR0RJKTsKICNlbGlmIFVTRShDQUlSTykKICAgICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVj
dDxIRk9OVD4sIGNhaXJvX2ZvbnRfZmFjZV90KiwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29s
IGl0YWxpYyk7CiAjZW5kaWYKQEAgLTEzNyw2ICsxNDIsMTEgQEAgcHVibGljOgogICAgIENHRm9u
dFJlZiBjZ0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX2NnRm9udC5nZXQoKTsgfQogI2VuZGlmCiAK
KyNpZiBVU0UoRElSRUNUMkQpCisgICAgSURXcml0ZUZvbnQqIGR3Rm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1fZHdGb250LmdldCgpOyB9CisgICAgSURXcml0ZUZvbnRGYWNlKiBkd0ZvbnRGYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9kd0ZvbnRGYWNlLmdldCgpOyB9CisjZW5kaWYKKwogICAgIGJvb2wg
aXNGaXhlZFBpdGNoKCkgY29uc3Q7CiAgICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQogICAgIGJvb2wgc3ludGhldGljQm9sZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhl
dGljQm9sZDsgfQpAQCAtMjQxLDYgKzI1MSwxMCBAQCBwcml2YXRlOgogI2lmIFVTRShDRykgJiYg
KFBMQVRGT1JNKFdJTikgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA8IDEwMTIwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPCAxMDAwMDApKQogICAgIFJldGFpblB0cjxDR0ZvbnRSZWY+IG1f
Y2dGb250OwogI2VuZGlmCisjaWYgVVNFKERJUkVDVDJEKQorICAgIENPTVB0cjxJRFdyaXRlRm9u
dD4gbV9kd0ZvbnQ7CisgICAgQ09NUHRyPElEV3JpdGVGb250RmFjZT4gbV9kd0ZvbnRGYWNlOwor
I2VuZGlmCiAjaWYgVVNFKENBSVJPKQogICAgIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90PiBt
X3NjYWxlZEZvbnQ7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQkocmV2aXNpb24g
MjA2NTc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
c2NhZGVDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsNiBAQCBTT0ZUX0xJTktf
RlJBTUVXT1JLKFVJS2l0KQogU09GVF9MSU5LKFVJS2l0LCBfVUlLaXRHZXRUZXh0RWZmZWN0c0Nh
dGFsb2csIENVSUNhdGFsb2cgKiwgKHZvaWQpLCAoKSkKICNlbmRpZgogCi0jZGVmaW5lIFNZTlRI
RVRJQ19PQkxJUVVFX0FOR0xFIDE0Ci0KICNpZmRlZiBfX0xQNjRfXwogI2RlZmluZSBVUmVmQ29u
IHZvaWQqCiAjZWxzZQpAQCAtMjQ0LDcgKzI0Miw3IEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdH
bHlwaHMoR3JhcGhpY3NDb24KICAgICBtYXRyaXguYiA9IC1tYXRyaXguYjsKICAgICBtYXRyaXgu
ZCA9IC1tYXRyaXguZDsKICAgICBpZiAocGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSkg
ewotICAgICAgICBzdGF0aWMgZmxvYXQgb2JsaXF1ZVNrZXcgPSB0YW5mKFNZTlRIRVRJQ19PQkxJ
UVVFX0FOR0xFICogcGlGbG9hdCAvIDE4MCk7CisgICAgICAgIHN0YXRpYyBmbG9hdCBvYmxpcXVl
U2tldyA9IHRhbmYoc3ludGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBwaUZsb2F0IC8gMTgwKTsKICAg
ICAgICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsKQogICAgICAg
ICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0FmZmluZVRy
YW5zZm9ybU1ha2UoMSwgb2JsaXF1ZVNrZXcsIDAsIDEsIDAsIDApKTsKICAgICAgICAgZWxzZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
R1dpbi5jcHAJKHJldmlzaW9uIDIwNjU3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgaW50IHN5bnRoZXRpY09ibGlxdWVBbmds
ZSA9IDE0OwotCiBzdGF0aWMgaW5saW5lIENHRmxvYXQgdG9DR0Zsb2F0KEZJWEVEIGYpCiB7CiAg
ICAgcmV0dXJuIGYudmFsdWUgKyBmLmZyYWN0IC8gQ0dGbG9hdCg2NTUzNi4wKTsKQEAgLTE2OCw3
ICsxNjYsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29uCiAgICAg
bWF0cml4LmQgPSAtbWF0cml4LmQ7CiAKICAgICBpZiAocGxhdGZvcm1EYXRhLnN5bnRoZXRpY09i
bGlxdWUoKSkgewotICAgICAgICBzdGF0aWMgZmxvYXQgc2tldyA9IC10YW5mKHN5bnRoZXRpY09i
bGlxdWVBbmdsZSAqIHBpRmxvYXQgLyAxODAuMGYpOworICAgICAgICBzdGF0aWMgZmxvYXQgc2tl
dyA9IC10YW5mKHN5bnRoZXRpY09ibGlxdWVBbmdsZSgpICogcGlGbG9hdCAvIDE4MC4wZik7CiAg
ICAgICAgIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVU
cmFuc2Zvcm1NYWtlKDEsIDAsIHNrZXcsIDEsIDAsIDApKTsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4u
Y3BwCShyZXZpc2lvbiAyMDY1NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udENhY2hlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsMTAgQEAK
ICNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+
CiAjZW5kaWYKIAorI2lmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRlIDxkd3JpdGUuaD4KKyNlbmRp
ZgorCiB1c2luZyBzdGQ6Om1pbjsKIAogbmFtZXNwYWNlIFdlYkNvcmUKQEAgLTU0OSw2ICs1NTMs
NyBAQCBzdGF0aWMgaW50IENBTExCQUNLIHRyYWl0c0luRmFtaWx5RW51bVByCiAgICAgcHJvY0Rh
dGEtPm1fdHJhaXRzTWFza3MuYWRkKHRyYWl0c01hc2spOwogICAgIHJldHVybiAxOwogfQorCiBW
ZWN0b3I8Rm9udFRyYWl0c01hc2s+IEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3Qg
QXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQogewogICAgIEhXbmREQyBoZGMoMCk7CkBAIC01OTks
NiArNjA0LDggQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IEZvbnRDYQogCiAj
aWYgVVNFKENHKQogICAgIGJvb2wgZm9udENyZWF0aW9uRmFpbGVkID0gIXJlc3VsdC0+Y2dGb250
KCk7CisjZWxpZiBVU0UoRElSRUNUMkQpCisgICAgYm9vbCBmb250Q3JlYXRpb25GYWlsZWQgPSAh
cmVzdWx0LT5kd0ZvbnQoKTsKICNlbGlmIFVTRShDQUlSTykKICAgICBib29sIGZvbnRDcmVhdGlv
bkZhaWxlZCA9ICFyZXN1bHQtPnNjYWxlZEZvbnQoKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2Fk
ZURpcmVjdDJELmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorCisjaWYg
VVNFKERJUkVDVDJEKQorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAi
Q09NUHRyLmgiCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiRm9udC5o
IgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaCIKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgIldlYkNvcmVUZXh0UmVuZGVyZXIuaCIKKyNpbmNsdWRlIDxkMmQxLmg+CisjaW5jbHVk
ZSA8ZHdyaXRlLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5
cGhCdWZmZXIsCisgICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3sKKyAg
ICBhdXRvIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAg
Ym9vbCBzaG91bGRVc2VGb250U21vb3RoaW5nID0gV2ViQ29yZVNob3VsZFVzZUZvbnRTbW9vdGhp
bmcoKTsKKworICAgIHN3aXRjaCAoc21vb3RoaW5nTW9kZSkgeworICAgIGNhc2UgQW50aWFsaWFz
ZWQ6CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7Cisg
ICAgICAgIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTdWJwaXhlbEFudGlhbGlhc2VkOgorICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0
U2hvdWxkQW50aWFsaWFzKHRydWUpOworICAgICAgICBzaG91bGRVc2VGb250U21vb3RoaW5nID0g
dHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb1Ntb290aGluZzoKKyAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyhmYWxzZSk7CisgICAgICAgIHNob3VsZFVz
ZUZvbnRTbW9vdGhpbmcgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdXRvU21v
b3RoaW5nOgorICAgICAgICAvLyBGb3IgdGhlIEF1dG9TbW9vdGggY2FzZSwgZG9uJ3QgZG8gYW55
dGhpbmchIEtlZXAgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7CisK
KyAgICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOworCisgICAgRDJEMV9NQVRSSVhfM1gyX0YgbWF0
cml4OworICAgIGNvbnRleHQtPkdldFRyYW5zZm9ybSgmbWF0cml4KTsKKworICAgIGlmIChwbGF0
Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKSB7CisgICAgICAgIHN0YXRpYyBmbG9hdCBza2V3
ID0gLXRhbmYoc3ludGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBwaUZsb2F0IC8gMTgwLjBmKTsKKyAg
ICAgICAgYXV0byBza2V3TWF0cml4ID0gRDJEMTo6TWF0cml4M3gyRjo6U2tldyhza2V3LCAwKTsK
KyAgICAgICAgY29udGV4dC0+U2V0VHJhbnNmb3JtKG1hdHJpeCAqIHNrZXdNYXRyaXgpOworICAg
IH0KKworICAgIC8vIFVuaXNjcmliZSBnaXZlcyB1cyBvZmZzZXRzIHRvIGhlbHAgcmVmaW5lIHRo
ZSBwb3NpdGlvbmluZyBvZiBjb21iaW5pbmcgZ2x5cGhzLgorICAgIEZsb2F0U2l6ZSB0cmFuc2xh
dGlvbiA9IGdseXBoQnVmZmVyLm9mZnNldEF0KGZyb20pOworCisgICAgUkVMRUFTRV9BU1NFUlQo
cGxhdGZvcm1EYXRhLmR3Rm9udCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChwbGF0Zm9ybURhdGEu
ZHdGb250RmFjZSgpKTsKKworICAgIFZlY3RvcjxGTE9BVD4gaG9yaXpvbnRhbEFkdmFuY2VzKG51
bUdseXBocyk7CisgICAgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+IG9mZnNldEFkdmFuY2Vz
KG51bUdseXBocyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgKytp
KSB7CisgICAgICAgIGF1dG8gYWR2YW5jZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VzKGkgKyBmcm9t
KTsKKyAgICAgICAgaWYgKCFhZHZhbmNlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgaG9yaXpvbnRhbEFkdmFuY2VzW2ldID0gYWR2YW5jZS0+d2lkdGgoKTsKKyAgICAgICAgb2Zm
c2V0QWR2YW5jZXNbaV0uYWR2YW5jZU9mZnNldCA9IGFkdmFuY2UtPndpZHRoKCk7CisgICAgICAg
IG9mZnNldEFkdmFuY2VzW2ldLmFzY2VuZGVyT2Zmc2V0ID0gYWR2YW5jZS0+aGVpZ2h0KCk7Cisg
ICAgfQorCisgICAgRFdSSVRFX0dMWVBIX1JVTiBnbHlwaFJ1bjsKKyAgICBnbHlwaFJ1bi5mb250
RmFjZSA9IHBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCk7CisgICAgZ2x5cGhSdW4uZm9udEVtU2l6
ZSA9IHBsYXRmb3JtRGF0YS5zaXplKCk7CisgICAgZ2x5cGhSdW4uZ2x5cGhDb3VudCA9IG51bUds
eXBoczsKKyAgICBnbHlwaFJ1bi5nbHlwaEluZGljZXMgPSBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJv
bSk7CisgICAgZ2x5cGhSdW4uZ2x5cGhBZHZhbmNlcyA9IGhvcml6b250YWxBZHZhbmNlcy5kYXRh
KCk7CisgICAgZ2x5cGhSdW4uZ2x5cGhPZmZzZXRzID0gbnVsbHB0cjsKKyAgICBnbHlwaFJ1bi5p
c1NpZGV3YXlzID0gcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWw7CisgICAg
Z2x5cGhSdW4uYmlkaUxldmVsID0gMDsKKworICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Cisg
ICAgZmxvYXQgc2hhZG93Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAgICBncmFwaGlj
c0NvbnRleHQuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3Ip
OworCisgICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBncmFwaGljc0NvbnRleHQudGV4dERyYXdp
bmdNb2RlKCkgPT0gVGV4dE1vZGVGaWxsICYmIHNoYWRvd0NvbG9yLmlzVmFsaWQoKSAmJiAhc2hh
ZG93Qmx1ciAmJiAoIWdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8
IGdyYXBoaWNzQ29udGV4dC5nZXRDVE0oKS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBl
ZCgpKTsKKyAgICBpZiAoaGFzU2ltcGxlU2hhZG93KSB7CisgICAgICAgIC8vIFBhaW50IHNpbXBs
ZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8g
YXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KKyAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LmNsZWFyU2hhZG93KCk7CisgICAgICAgIENvbG9yIGZpbGxDb2xvciA9IGdyYXBoaWNzQ29u
dGV4dC5maWxsQ29sb3IoKTsKKyAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yKHNoYWRvd0Nv
bG9yLnJlZCgpLCBzaGFkb3dDb2xvci5ncmVlbigpLCBzaGFkb3dDb2xvci5ibHVlKCksIHNoYWRv
d0NvbG9yLmFscGhhKCkgKiBmaWxsQ29sb3IuYWxwaGEoKSAvIDI1NSk7CisgICAgICAgIGZsb2F0
IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgdHJhbnNsYXRpb24ud2lkdGgoKSArIHNoYWRvd09m
ZnNldC53aWR0aCgpOworICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zv
cm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBz
byBkb3duIGlzIG5lZ2F0aXZlLgorICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50Lnko
KSArIHRyYW5zbGF0aW9uLmhlaWdodCgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpICogKGdyYXBo
aWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKKworICAgICAg
ICBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+IHNoYWRvd0JydXNoOworICAgICAgICBpZiAo
IVNVQ0NFRURFRChjb250ZXh0LT5DcmVhdGVTb2xpZENvbG9yQnJ1c2goZ3JhcGhpY3NDb250ZXh0
LmNvbG9yV2l0aEdsb2JhbEFscGhhKHNoYWRvd0ZpbGxDb2xvciksICZzaGFkb3dCcnVzaCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQx
OjpQb2ludDJGKHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksICZnbHlwaFJ1biwgc2hhZG93QnJ1
c2guZ2V0KCkpOworICAgICAgICBpZiAoZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCkpCisgICAg
ICAgICAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihzaGFkb3dUZXh0WCAr
IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBzaGFkb3dUZXh0WSksICZnbHlwaFJ1biwgc2hh
ZG93QnJ1c2guZ2V0KCkpOworICAgIH0KKworICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQx
OjpQb2ludDJGKHBvaW50LngoKSArIHRyYW5zbGF0aW9uLndpZHRoKCksIHBvaW50LnkoKSArIHRy
YW5zbGF0aW9uLmhlaWdodCgpKSwgJmdseXBoUnVuLCBncmFwaGljc0NvbnRleHQuc29saWRGaWxs
QnJ1c2goKSk7CisgICAgaWYgKGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpKQorICAgICAgICBj
b250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihwb2ludC54KCkgKyB0cmFuc2xhdGlv
bi53aWR0aCgpICsgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSArIHRyYW5z
bGF0aW9uLmhlaWdodCgpKSwgJmdseXBoUnVuLCBncmFwaGljc0NvbnRleHQuc29saWRGaWxsQnJ1
c2goKSk7CisKKyAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQorICAgICAgICBncmFwaGljc0NvbnRl
eHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworCisg
ICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHJldmlzaW9uIDIwNjU3NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUsMTIgKzI1LDIwIEBACiAjaW5jbHVkZSAiRm9udFBsYXRmb3Jt
RGF0YS5oIgogI2luY2x1ZGUgIk9wZW5UeXBlVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCi0jaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZp
Y2VzLmg+Ci0jaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVy
ZmFjZS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9C
YXNlNjQuaD4KICNpbmNsdWRlIDx3dGYvd2luL0dESU9iamVjdC5oPgogCisjaWYgVVNFKENHKQor
I2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2lu
Y2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNl
bmRpZgorCisjaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlIDxk
d3JpdGUuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CkBAIC0zOCw3ICs0Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpCiB7CiAgICAgaWYgKG1fZm9u
dFJlZmVyZW5jZSkKLSAgICAgICAgICAgIFJlbW92ZUZvbnRNZW1SZXNvdXJjZUV4KG1fZm9udFJl
ZmVyZW5jZSk7CisgICAgICAgIFJlbW92ZUZvbnRNZW1SZXNvdXJjZUV4KG1fZm9udFJlZmVyZW5j
ZSk7CiB9CiAKIEZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgYm9vbCBi
b2xkLCBib29sIGl0YWxpYykKQEAgLTY4LDggKzc2LDE1IEBAIEZvbnRQbGF0Zm9ybURhdGEgRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YToKIAogICAgIGF1dG8gaGZvbnQgPSBhZG9wdEdESU9iamVjdCg6
OkNyZWF0ZUZvbnRJbmRpcmVjdCgmbG9nRm9udCkpOwogCisjaWYgVVNFKENHKQogICAgIFJldGFp
blB0cjxDR0ZvbnRSZWY+IGNnRm9udCA9IGFkb3B0Q0YoQ0dGb250Q3JlYXRlV2l0aFBsYXRmb3Jt
Rm9udCgmbG9nRm9udCkpOwogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKFdURk1vdmUoaGZv
bnQpLCBjZ0ZvbnQuZ2V0KCksIHNpemUsIGJvbGQsIGl0YWxpYywgcmVuZGVyaW5nTW9kZSA9PSBG
b250UmVuZGVyaW5nTW9kZTo6QWx0ZXJuYXRlKTsKKyNlbHNlCisgICAgQ09NUHRyPElEV3JpdGVG
b250PiBkd0ZvbnQ7CisgICAgSFJFU1VMVCBociA9IEZvbnQ6OnN5c3RlbURXcml0ZUdkaUludGVy
b3AoKS0+Q3JlYXRlRm9udEZyb21MT0dGT05UKCZsb2dGb250LCAmZHdGb250KTsKKyAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShX
VEZNb3ZlKGhmb250KSwgZHdGb250LmdldCgpLCBzaXplLCBib2xkLCBpdGFsaWMsIHJlbmRlcmlu
Z01vZGUgPT0gRm9udFJlbmRlcmluZ01vZGU6OkFsdGVybmF0ZSk7CisjZW5kaWYKIH0KIAogLy8g
Q3JlYXRlcyBhIHVuaXF1ZSBhbmQgdW5wcmVkaWN0YWJsZSBmb250IG5hbWUsIGluIG9yZGVyIHRv
IGF2b2lkIGNvbGxpc2lvbnMgYW5kIHRvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNw
cAkocmV2aXNpb24gMjA2NTc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxMiAr
MTIwLDkgQEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KAogRm9udFBs
YXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGhmb250LCBDR0Zv
bnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNl
R0RJKQogICAgIDogbV9zeW50aGV0aWNCb2xkKGJvbGQpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlx
dWUob2JsaXF1ZSkKLSAgICAsIG1fb3JpZW50YXRpb24oSG9yaXpvbnRhbCkKICAgICAsIG1fc2l6
ZShzaXplKQotICAgICwgbV93aWR0aFZhcmlhbnQoUmVndWxhcldpZHRoKQogICAgICwgbV9mb250
KFNoYXJlZEdESU9iamVjdDxIRk9OVD46OmNyZWF0ZShXVEZNb3ZlKGhmb250KSkpCiAgICAgLCBt
X2NnRm9udChmb250KQotICAgICwgbV9pc0NvbG9yQml0bWFwRm9udChmYWxzZSkKICAgICAsIG1f
dXNlR0RJKHVzZUdESSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ2Fpcm9XaW4u
Y3BwCShyZXZpc2lvbiAyMDY1NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIs
MTIgKzYyLDcgQEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KAogRm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGZvbnQsIGNh
aXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9i
bGlxdWUpCiAgICAgOiBtX2ZvbnQoU2hhcmVkR0RJT2JqZWN0PEhGT05UPjo6Y3JlYXRlKFdURk1v
dmUoZm9udCkpKQogICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBtX29yaWVudGF0aW9uKEhvcml6
b250YWwpCi0gICAgLCBtX3dpZHRoVmFyaWFudChSZWd1bGFyV2lkdGgpCi0gICAgLCBtX2lzQ29s
b3JCaXRtYXBGb250KGZhbHNlKQotICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCiAgICAgLCBt
X3N5bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKLSAgICAsIG1fdXNlR0RJKGZhbHNlKQogewogICAg
IGNhaXJvX21hdHJpeF90IGZvbnRNYXRyaXg7CiAgICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUo
JmZvbnRNYXRyaXgsIHNpemUsIHNpemUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJl
Y3QyRC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisK
KyNpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJTaGFyZWRHRElPYmplY3QuaCIKKyNpbmNsdWRlIDxkMmQxLmg+CisjaW5jbHVkZSA8ZHdy
aXRlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOjpt
aW47CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0
Zm9ybURhdGFJbml0KEhGT05UIGZvbnQsIGZsb2F0IHNpemUsIEhEQyBoZGMsIFdDSEFSKiBmYWNl
TmFtZSkKK3sKKyAgICBMT0dGT05UIGxvZ2ZvbnQ7CisgICAgR2V0T2JqZWN0KGZvbnQsIHNpemVv
Zihsb2dmb250KSwgJmxvZ2ZvbnQpOworCisgICAgSFJFU1VMVCBociA9IEZvbnQ6OnN5c3RlbURX
cml0ZUdkaUludGVyb3AoKS0+Q3JlYXRlRm9udEZyb21MT0dGT05UKCZsb2dmb250LCAmbV9kd0Zv
bnQpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaHIg
PSBtX2R3Rm9udC0+Q3JlYXRlRm9udEZhY2UoJm1fZHdGb250RmFjZSk7CisgICAgaWYgKCFTVUND
RUVERUQoaHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdXNlR0RJKQorICAgICAg
ICBtX2lzU3lzdGVtRm9udCA9ICF3Y3NjbXAoZmFjZU5hbWUsIEwiTHVjaWRhIEdyYW5kZSIpOwor
fQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4g
aGZvbnQsIElEV3JpdGVGb250KiBmb250LCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2Js
aXF1ZSwgYm9vbCB1c2VHREkpCisgICAgOiBtX3N5bnRoZXRpY0JvbGQoYm9sZCkKKyAgICAsIG1f
c3ludGhldGljT2JsaXF1ZShvYmxpcXVlKQorICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX2Zv
bnQoU2hhcmVkR0RJT2JqZWN0PEhGT05UPjo6Y3JlYXRlKFdURk1vdmUoaGZvbnQpKSkKKyAgICAs
IG1fZHdGb250KGZvbnQpCisgICAgLCBtX3VzZUdESSh1c2VHREkpCit7CisgICAgSFJFU1VMVCBo
ciA9IG1fZHdGb250LT5DcmVhdGVGb250RmFjZSgmbV9kd0ZvbnRGYWNlKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKK30KKworc3RhdGljIGJvb2wgZm9udHNBcmVFcXVhbChJ
RFdyaXRlRm9udCogYSwgSURXcml0ZUZvbnQqIGIpCit7CisgICAgaWYgKCFhICYmICFiKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChhID09IGIpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKCghYSAmJiBiKSB8fCAoYSAmJiAhYikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChhLT5HZXRXZWlnaHQoKSAhPSBiLT5HZXRXZWlnaHQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKGEtPkdldFN0eWxlKCkgIT0gYi0+R2V0U3R5bGUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGEtPkdldFN0cmV0Y2goKSAhPSBiLT5H
ZXRTdHJldGNoKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIERXUklURV9GT05UX01F
VFJJQ1MgYU1ldHJpY3MsIGJNZXRyaWNzOworICAgIGEtPkdldE1ldHJpY3MoJmFNZXRyaWNzKTsK
KyAgICBiLT5HZXRNZXRyaWNzKCZiTWV0cmljcyk7CisKKyAgICBpZiAoKGFNZXRyaWNzLmRlc2ln
blVuaXRzUGVyRW0gIT0gYk1ldHJpY3MuZGVzaWduVW5pdHNQZXJFbSkKKyAgICAgICAgfHwgKGFN
ZXRyaWNzLmFzY2VudCAhPSBiTWV0cmljcy5hc2NlbnQpCisgICAgICAgIHx8IChhTWV0cmljcy5k
ZXNjZW50ICE9IGJNZXRyaWNzLmFzY2VudCkKKyAgICAgICAgfHwgKGFNZXRyaWNzLmxpbmVHYXAg
IT0gYk1ldHJpY3MubGluZUdhcCkKKyAgICAgICAgfHwgKGFNZXRyaWNzLmNhcEhlaWdodCAhPSBi
TWV0cmljcy5jYXBIZWlnaHQpCisgICAgICAgIHx8IChhTWV0cmljcy54SGVpZ2h0ICE9IGJNZXRy
aWNzLnhIZWlnaHQpCisgICAgICAgIHx8IChhTWV0cmljcy51bmRlcmxpbmVQb3NpdGlvbiAhPSBi
TWV0cmljcy51bmRlcmxpbmVQb3NpdGlvbikKKyAgICAgICAgfHwgKGFNZXRyaWNzLnVuZGVybGlu
ZVRoaWNrbmVzcyAhPSBiTWV0cmljcy51bmRlcmxpbmVUaGlja25lc3MpCisgICAgICAgIHx8IChh
TWV0cmljcy5zdHJpa2V0aHJvdWdoUG9zaXRpb24gIT0gYk1ldHJpY3Muc3RyaWtldGhyb3VnaFBv
c2l0aW9uKQorICAgICAgICB8fCAoYU1ldHJpY3Muc3RyaWtldGhyb3VnaFRoaWNrbmVzcyAhPSBi
TWV0cmljcy5zdHJpa2V0aHJvdWdoVGhpY2tuZXNzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1J
c0VxdWFsKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAoreworICAgIHJldHVy
biBtX2ZvbnQgPT0gb3RoZXIubV9mb250CisgICAgICAgICYmIG1fdXNlR0RJID09IG90aGVyLm1f
dXNlR0RJCisgICAgICAgICYmIGZvbnRzQXJlRXF1YWwobV9kd0ZvbnQuZ2V0KCksIG90aGVyLm1f
ZHdGb250LmdldCgpKTsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdp
bi5jcHAJKHJldmlzaW9uIDIwNjU3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsOSAr
NDAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKEdESU9iamVjdDxIRk9OVD4gZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29s
IG9ibGlxdWUsIGJvb2wgdXNlR0RJKQogICAgIDogbV9mb250KFNoYXJlZEdESU9iamVjdDxIRk9O
VD46OmNyZWF0ZShXVEZNb3ZlKGZvbnQpKSkKICAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9v
cmllbnRhdGlvbihIb3Jpem9udGFsKQotICAgICwgbV93aWR0aFZhcmlhbnQoUmVndWxhcldpZHRo
KQotICAgICwgbV9pc0NvbG9yQml0bWFwRm9udChmYWxzZSkKICAgICAsIG1fc3ludGhldGljQm9s
ZChib2xkKQogICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUpCiAgICAgLCBtX3VzZUdE
SSh1c2VHREkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5
cGhQYWdlVHJlZU5vZGVEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBh
Z2VUcmVlTm9kZURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCisKKyNpZiBVU0UoRElSRUNUMkQpCisK
KyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiVGV4dEFuYWx5c2lzSGVscGVyLmgiCisjaW5j
bHVkZSA8ZHdyaXRlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBHbHlwaFBhZ2U6
OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKQoreworICAgIGlmIChi
dWZmZXJMZW5ndGggPiBHbHlwaFBhZ2U6OnNpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGNvbnN0IEZvbnQmIGZvbnQgPSB0aGlzLT5mb250KCk7CisgICAgYm9vbCBoYXZlR2x5cGhz
ID0gZmFsc2U7CisKKyAgICBDT01QdHI8SURXcml0ZVRleHRBbmFseXplcj4gYW5hbHl6ZXI7Cisg
ICAgSFJFU1VMVCBociA9IEZvbnQ6OnN5c3RlbURXcml0ZUZhY3RvcnkoKS0+Q3JlYXRlVGV4dEFu
YWx5emVyKCZhbmFseXplcik7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisK
KyAgICBhdXRvJiBmb250UGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKKworICAg
IFVDaGFyIGxvY2FsZU5hbWVbTE9DQUxFX05BTUVfTUFYX0xFTkdUSCArIDFdID0geyB9OworICAg
IGludCBsb2NhbGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUocmVpbnRlcnByZXRf
Y2FzdDxMUFdTVFI+KCZsb2NhbGVOYW1lKSwgTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7CisgICAg
UkVMRUFTRV9BU1NFUlQobG9jYWxlTGVuZ3RoIDw9IExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOwor
ICAgIGxvY2FsZU5hbWVbbG9jYWxlTGVuZ3RoXSA9IDA7CisKKyAgICBUZXh0QW5hbHl6ZXJIZWxw
ZXIgaGVscGVyKGxvY2FsZU5hbWUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoKTsKKworICAgIGhyID0g
YW5hbHl6ZXItPkFuYWx5emVTY3JpcHQoJmhlbHBlciwgMCwgYnVmZmVyTGVuZ3RoLCAmaGVscGVy
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIHVuc2lnbmVkIHJl
dHVybmVkQ291bnQgPSAwOworICAgIEdseXBoIGxvY2FsR2x5cGhCdWZmZXJbR2x5cGhQYWdlOjpz
aXplXTsKKyAgICBHbHlwaCBjbHVzdGVyTWFwW0dseXBoUGFnZTo6c2l6ZV07CisgICAgVmVjdG9y
PERXUklURV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUz4gdGV4dFByb3BlcnRpZXMoR2x5cGhQYWdl
OjpzaXplKTsKKyAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfR0xZUEhfUFJPUEVSVElFUz4gZ2x5
cGhQcm9wZXJ0aWVzKEdseXBoUGFnZTo6c2l6ZSk7CisKKyAgICBociA9IGFuYWx5emVyLT5HZXRH
bHlwaHMoYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnRQbGF0Zm9ybURhdGEuZHdGb250RmFjZSgp
LCBmb250UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwsIGZhbHNlLAorICAg
ICAgICAmaGVscGVyLm1fYW5hbHlzaXMsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxw
dHIsIDAsIEdseXBoUGFnZTo6c2l6ZSwgY2x1c3Rlck1hcCwgdGV4dFByb3BlcnRpZXMuZGF0YSgp
LAorICAgICAgICBsb2NhbEdseXBoQnVmZmVyLCBnbHlwaFByb3BlcnRpZXMuZGF0YSgpLCAmcmV0
dXJuZWRDb3VudCk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKKyAgICAgICAg
R2x5cGggZ2x5cGggPSBsb2NhbEdseXBoQnVmZmVyW2ldOworICAgICAgICBpZiAoIWdseXBoKQor
ICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCAwKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBzZXRHbHlwaEZvckluZGV4KGksIGdseXBoKTsKKyAgICAgICAgICAgIGhhdmVHbHlw
aHMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGhhdmVHbHlwaHM7Cit9
CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVG
b250RGF0YURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKworI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1
ZGUgIkNvcmVUZXh0U1BJV2luLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
Rm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiR2x5
cGhQYWdlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFduZERD
LmgiCisjaW5jbHVkZSA8Y29tdXRpbC5oPgorI2luY2x1ZGUgPGR3cml0ZS5oPgorI2luY2x1ZGUg
PG1sYW5nLmg+CisjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgorI2luY2x1ZGUgPHVuaWNvZGUv
dW5vcm0uaD4KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisK
K0lEV3JpdGVGYWN0b3J5KiBGb250OjpzeXN0ZW1EV3JpdGVGYWN0b3J5KCkKK3sKKyAgICBzdGF0
aWMgSURXcml0ZUZhY3RvcnkqIGRpcmVjdFdyaXRlRmFjdG9yeSA9IG51bGxwdHI7CisgICAgaWYg
KCFkaXJlY3RXcml0ZUZhY3RvcnkpIHsKKyAgICAgICAgSFJFU1VMVCBociA9IERXcml0ZUNyZWF0
ZUZhY3RvcnkoRFdSSVRFX0ZBQ1RPUllfVFlQRV9TSEFSRUQsIF9fdXVpZG9mKGRpcmVjdFdyaXRl
RmFjdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8SVVua25vd24qKj4oJmRpcmVjdFdyaXRlRmFjdG9y
eSkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZGlyZWN0V3JpdGVGYWN0b3J5OworfQorCitJRFdyaXRlR2RpSW50ZXJvcCogRm9u
dDo6c3lzdGVtRFdyaXRlR2RpSW50ZXJvcCgpCit7CisgICAgc3RhdGljIElEV3JpdGVHZGlJbnRl
cm9wKiBkaXJlY3RXcml0ZUdkaUludGVyb3AgPSBudWxscHRyOworICAgIGlmICghZGlyZWN0V3Jp
dGVHZGlJbnRlcm9wKSB7CisgICAgICAgIEhSRVNVTFQgaHIgPSBzeXN0ZW1EV3JpdGVGYWN0b3J5
KCktPkdldEdkaUludGVyb3AoJmRpcmVjdFdyaXRlR2RpSW50ZXJvcCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIH0KKworICAgIHJldHVybiBkaXJlY3RXcml0
ZUdkaUludGVyb3A7Cit9CisKK3N0YXRpYyBWZWN0b3I8V0NIQVI+IGdldEZhY2VOYW1lKElEV3Jp
dGVGb250KiBmb250KQoreworICAgIGlmICghZm9udCkKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxX
Q0hBUj4oKTsKKworICAgIENPTVB0cjxJRFdyaXRlTG9jYWxpemVkU3RyaW5ncz4gbG9jYWxpemVk
RmFjZU5hbWVzOworICAgIEhSRVNVTFQgaHIgPSBmb250LT5HZXRGYWNlTmFtZXMoJmxvY2FsaXpl
ZEZhY2VOYW1lcyk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBV
SU5UMzIgbG9jYWxlSW5kZXggPSAwOworICAgIEJPT0wgZXhpc3RzID0gZmFsc2U7CisKKyAgICB3
Y2hhcl90IGxvY2FsZU5hbWVbTE9DQUxFX05BTUVfTUFYX0xFTkdUSF07CisgICAgaW50IGxvY2Fs
ZUxlbmd0aCA9IEdldFVzZXJEZWZhdWx0TG9jYWxlTmFtZShsb2NhbGVOYW1lLCBMT0NBTEVfTkFN
RV9NQVhfTEVOR1RIKTsKKyAgICBpZiAobG9jYWxlTGVuZ3RoKQorICAgICAgICBociA9IGxvY2Fs
aXplZEZhY2VOYW1lcy0+RmluZExvY2FsZU5hbWUobG9jYWxlTmFtZSwgJmxvY2FsZUluZGV4LCAm
ZXhpc3RzKTsKKworICAgIGlmICghZXhpc3RzIHx8ICFTVUNDRUVERUQoaHIpKQorICAgICAgICBo
ciA9IGxvY2FsaXplZEZhY2VOYW1lcy0+RmluZExvY2FsZU5hbWUoTCJlbi11cyIsICZsb2NhbGVJ
bmRleCwgJmV4aXN0cyk7CisKKyAgICBpZiAoIWV4aXN0cyB8fCAhU1VDQ0VFREVEKGhyKSkKKyAg
ICAgICAgbG9jYWxlSW5kZXggPSAwOworCisgICAgVUlOVDMyIGZhY2VOYW1lTGVuZ3RoID0gMDsK
KyAgICBociA9IGxvY2FsaXplZEZhY2VOYW1lcy0+R2V0U3RyaW5nTGVuZ3RoKGxvY2FsZUluZGV4
LCAmZmFjZU5hbWVMZW5ndGgpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0
dXJuIFZlY3RvcjxXQ0hBUj4oKTsKKworICAgIFZlY3RvcjxXQ0hBUj4gZmFjZU5hbWUoZmFjZU5h
bWVMZW5ndGggKyAxKTsKKyAgICBociA9IGxvY2FsaXplZEZhY2VOYW1lcy0+R2V0U3RyaW5nKGxv
Y2FsZUluZGV4LCBmYWNlTmFtZS5kYXRhKCksIGZhY2VOYW1lLnNpemUoKSk7CisKKyAgICByZXR1
cm4gZmFjZU5hbWU7Cit9CisKK3ZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBtX3N5
bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyAxLjBm
IDogMC5mOworICAgIG1fc2NyaXB0Q2FjaGUgPSAwOworICAgIG1fc2NyaXB0Rm9udFByb3BlcnRp
ZXMgPSAwOworCisgICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKQorICAgICAgICByZXR1
cm4gaW5pdEdESUZvbnQoKTsKKworICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRh
LnNpemUoKTsKKworICAgIGF1dG8gZm9udCA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9udCgpOworICAg
IFJFTEVBU0VfQVNTRVJUKGZvbnQpOworCisgICAgYXV0byBmb250RmFjZSA9IG1fcGxhdGZvcm1E
YXRhLmR3Rm9udEZhY2UoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChmb250RmFjZSk7CisKKyAgICBE
V1JJVEVfRk9OVF9NRVRSSUNTIGZvbnRNZXRyaWNzOworICAgIGZvbnQtPkdldE1ldHJpY3MoJmZv
bnRNZXRyaWNzKTsKKworICAgIGludCBpQXNjZW50ID0gZm9udE1ldHJpY3MuYXNjZW50OworICAg
IGludCBpRGVzY2VudCA9IGZvbnRNZXRyaWNzLmRlc2NlbnQ7CisgICAgaW50IGlMaW5lR2FwID0g
Zm9udE1ldHJpY3MubGluZUdhcDsKKyAgICBpbnQgaUNhcEhlaWdodCA9IGZvbnRNZXRyaWNzLmNh
cEhlaWdodDsKKworICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0gPSBmb250TWV0cmljcy5kZXNpZ25V
bml0c1BlckVtOworICAgIGZsb2F0IGZBc2NlbnQgPSBzY2FsZUVtVG9Vbml0cyhpQXNjZW50LCB1
bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKyAgICBmbG9hdCBmRGVzY2VudCA9IHNjYWxlRW1Ub1Vu
aXRzKGlEZXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKyAgICBmbG9hdCBmQ2FwSGVp
Z2h0ID0gc2NhbGVFbVRvVW5pdHMoaUNhcEhlaWdodCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7
CisgICAgZmxvYXQgZkxpbmVHYXAgPSBzY2FsZUVtVG9Vbml0cyhpTGluZUdhcCwgdW5pdHNQZXJF
bSkgKiBwb2ludFNpemU7CisKKyAgICBpZiAoIWlzQ3VzdG9tRm9udCgpKSB7CisgICAgICAgIFZl
Y3RvcjxXQ0hBUj4gZmFjZU5hbWUgPSBnZXRGYWNlTmFtZShmb250KTsKKyAgICAgICAgZkFzY2Vu
dCA9IGFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhmYWNlTmFtZS5kYXRhKCksIGZBc2Nl
bnQsIGZEZXNjZW50KTsKKyAgICB9CisKKyAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChmQXNj
ZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZkRlc2NlbnQpOworICAgIG1fZm9u
dE1ldHJpY3Muc2V0Q2FwSGVpZ2h0KGZDYXBIZWlnaHQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0
TGluZUdhcChmTGluZUdhcCk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhscm91
bmRmKGZBc2NlbnQpICsgbHJvdW5kZihmRGVzY2VudCkgKyBscm91bmRmKGZMaW5lR2FwKSk7CisK
KyAgICBHbHlwaCB4R2x5cGggPSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ3gnKS5nbHlwaDsKKwor
ICAgIGlmICh4R2x5cGgpIHsKKyAgICAgICAgLy8gTWVhc3VyZSB0aGUgYWN0dWFsIGNoYXJhY3Rl
ciAieCIsIHNpbmNlIGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGV4dGVuZCBiZWxvdyB0aGUgYmFz
ZWxpbmUsIGFuZCB3ZSBuZWVkIHRoZQorICAgICAgICAvLyByZXBvcnRlZCB4LWhlaWdodCB0byBv
bmx5IGluY2x1ZGUgdGhlIHBvcnRpb24gb2YgdGhlIGdseXBoIHRoYXQgaXMgYWJvdmUgdGhlIGJh
c2VsaW5lLgorICAgICAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX01FVFJJQ1M+IGdseXBoTWV0cmlj
cygxKTsKKyAgICAgICAgSFJFU1VMVCBociA9IGZvbnRGYWNlLT5HZXREZXNpZ25HbHlwaE1ldHJp
Y3MoJnhHbHlwaCwgMSwgZ2x5cGhNZXRyaWNzLmRhdGEoKSwgbV9wbGF0Zm9ybURhdGEub3JpZW50
YXRpb24oKSA9PSBWZXJ0aWNhbCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOworICAgICAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoc2NhbGVFbVRvVW5pdHMoZ2x5
cGhNZXRyaWNzLmZpcnN0KCkudmVydGljYWxPcmlnaW5ZLCB1bml0c1BlckVtKSAqIHBvaW50U2l6
ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IGlYSGVpZ2h0ID0gZm9udE1ldHJpY3MueEhl
aWdodDsKKyAgICAgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHNjYWxlRW1Ub1VuaXRzKGlY
SGVpZ2h0LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisgICAgfQorCisgICAgbV9mb250TWV0
cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVyRW0pOworfQorCitGbG9hdFJlY3QgRm9udDo6cGxh
dGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBpZiAoIXBsYXRm
b3JtRGF0YSgpLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgaWYg
KG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKQorICAgICAgICByZXR1cm4gYm91bmRzRm9yR0RJR2x5
cGgoZ2x5cGgpOworCisgICAgYXV0byBmb250ID0gbV9wbGF0Zm9ybURhdGEuZHdGb250KCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoZm9udCk7CisKKyAgICBhdXRvIGZvbnRGYWNlID0gbV9wbGF0Zm9y
bURhdGEuZHdGb250RmFjZSgpOworICAgIFJFTEVBU0VfQVNTRVJUKGZvbnRGYWNlKTsKKworICAg
IGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICBib29sIHZlcnRp
Y2FsID0gbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbDsKKworICAgIFZl
Y3RvcjxEV1JJVEVfR0xZUEhfTUVUUklDUz4gZ2x5cGhNZXRyaWNzKDEpOworICAgIEhSRVNVTFQg
aHIgPSBmb250RmFjZS0+R2V0RGVzaWduR2x5cGhNZXRyaWNzKCZnbHlwaCwgMSwgZ2x5cGhNZXRy
aWNzLmRhdGEoKSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBjb25zdCBhdXRvJiBtZXRy
aWNzID0gZ2x5cGhNZXRyaWNzLmZpcnN0KCk7CisKKyAgICB1bnNpZ25lZCB1bml0c1BlckVtID0g
bV9mb250TWV0cmljcy51bml0c1BlckVtKCk7CisKKyAgICBGbG9hdFBvaW50IG9yaWdpbihzY2Fs
ZUVtVG9Vbml0cyhtZXRyaWNzLmxlZnRTaWRlQmVhcmluZywgdW5pdHNQZXJFbSkgKiBwb2ludFNp
emUsIHNjYWxlRW1Ub1VuaXRzKG1ldHJpY3MudmVydGljYWxPcmlnaW5ZLCB1bml0c1BlckVtKSAq
IHBvaW50U2l6ZSk7CisgICAgRmxvYXRTaXplIHNpemUoc2NhbGVFbVRvVW5pdHMobWV0cmljcy5h
ZHZhbmNlV2lkdGggLSBtZXRyaWNzLmxlZnRTaWRlQmVhcmluZyAtIG1ldHJpY3MucmlnaHRTaWRl
QmVhcmluZywgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUsCisgICAgICAgIHNjYWxlRW1Ub1VuaXRz
KG1ldHJpY3MuYWR2YW5jZUhlaWdodCAtIG1ldHJpY3MudG9wU2lkZUJlYXJpbmcgLSBtZXRyaWNz
LmJvdHRvbVNpZGVCZWFyaW5nLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisKKyAgICBGbG9h
dFJlY3QgYm91bmRpbmdCb3gob3JpZ2luLCBzaXplKTsKKyAgICBpZiAobV9zeW50aGV0aWNCb2xk
T2Zmc2V0KQorICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0aChib3VuZGluZ0JveC53aWR0aCgp
ICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKKworICAgIHJldHVybiBib3VuZGluZ0JveDsKK30K
KworZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAor
eworICAgIGlmICghcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9y
R0RJR2x5cGgoZ2x5cGgpOworCisgICAgQVNTRVJUKGdseXBoKTsKKworICAgIGF1dG8gZm9udCA9
IG1fcGxhdGZvcm1EYXRhLmR3Rm9udCgpOworICAgIFJFTEVBU0VfQVNTRVJUKGZvbnQpOworCisg
ICAgYXV0byBmb250RmFjZSA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKTsKKyAgICBSRUxF
QVNFX0FTU0VSVChmb250RmFjZSk7CisKKyAgICBib29sIGlzVmVydGljYWwgPSBtX3BsYXRmb3Jt
RGF0YS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsOworCisgICAgVmVjdG9yPERXUklURV9HTFlQ
SF9NRVRSSUNTPiBnbHlwaE1ldHJpY3MoMSk7CisgICAgSFJFU1VMVCBociA9IGZvbnRGYWNlLT5H
ZXREZXNpZ25HbHlwaE1ldHJpY3MoJmdseXBoLCAxLCBnbHlwaE1ldHJpY3MuZGF0YSgpLCBpc1Zl
cnRpY2FsKTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIGNvbnN0
IGF1dG8mIG1ldHJpY3MgPSBnbHlwaE1ldHJpY3MuZmlyc3QoKTsKKyAgICBpbnQgd2lkdGhJbkVt
ID0gbWV0cmljcy5hZHZhbmNlV2lkdGg7CisKKyAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRm
b3JtRGF0YS5zaXplKCk7CisgICAgdW5zaWduZWQgdW5pdHNQZXJFbSA9IG1fZm9udE1ldHJpY3Mu
dW5pdHNQZXJFbSgpOworICAgIGZsb2F0IHdpZHRoID0gc2NhbGVFbVRvVW5pdHMod2lkdGhJbkVt
LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKworICAgIHJldHVybiB3aWR0aCArIG1fc3ludGhl
dGljQm9sZE9mZnNldDsKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dEFuYWx5emVySGVscGVyLmgiCisKKyNpZiBVU0Uo
RElSRUNUMkQpCisKKyNpbmNsdWRlIDxkd3JpdGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitUZXh0QW5hbHl6ZXJIZWxwZXI6OlRleHRBbmFseXplckhlbHBlcihVQ2hhciogbG9jYWxlTmFt
ZSwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKQorICAgIDogbV9sb2NhbGVO
YW1lKGxvY2FsZU5hbWUpCisgICAgLCBtX2J1ZmZlcihidWZmZXIpCisgICAgLCBtX2J1ZmZlckxl
bmd0aChidWZmZXJMZW5ndGgpCit7CisgICAgbV9hbmFseXNpcyA9IHsgfTsKK30KKworSFJFU1VM
VCBUZXh0QW5hbHl6ZXJIZWxwZXI6OlF1ZXJ5SW50ZXJmYWNlKF9Jbl8gUkVGSUlEIHJpaWQsIF9D
T01fT3V0cHRyXyB2b2lkKiogcHB2T2JqZWN0KQoreworICAgIGlmICghcHB2T2JqZWN0KQorICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOworICAgICpwcHZPYmplY3QgPSBudWxscHRyOworICAgIGlm
IChJc0VxdWFsR1VJRChyaWlkLCBfX3V1aWRvZihJRFdyaXRlVGV4dEFuYWx5c2lzU2luaykpKQor
ICAgICAgICAqcHB2T2JqZWN0ID0gc3RhdGljX2Nhc3Q8SURXcml0ZVRleHRBbmFseXNpc1Npbmsq
Pih0aGlzKTsKKyAgICBlbHNlIGlmIChJc0VxdWFsR1VJRChyaWlkLCBfX3V1aWRvZihJRFdyaXRl
VGV4dEFuYWx5c2lzU291cmNlKSkpCisgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJ
RFdyaXRlVGV4dEFuYWx5c2lzU2luayo+KHRoaXMpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJu
IEVfRkFJTDsKKworICAgIEFkZFJlZigpOworICAgIHJldHVybiBTX09LOworfQorCitVTE9ORyBU
ZXh0QW5hbHl6ZXJIZWxwZXI6OkFkZFJlZigpCit7CisgICAgcmV0dXJuICsrbV9yZWZDb3VudDsK
K30KKworVUxPTkcgVGV4dEFuYWx5emVySGVscGVyOjpSZWxlYXNlKCkKK3sKKyAgICBVTE9ORyBu
ZXdSZWYgPSAtLW1fcmVmQ291bnQ7CisgICAgaWYgKCFuZXdSZWYpCisgICAgICAgIGRlbGV0ZSh0
aGlzKTsKKworICAgIHJldHVybiBuZXdSZWY7Cit9CisKK0hSRVNVTFQgVGV4dEFuYWx5emVySGVs
cGVyOjpHZXRUZXh0QXRQb3NpdGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBjb25zdCBXQ0hBUioq
IHRleHRTdHJpbmcsIFVJTlQzMiogdGV4dExlbmd0aCkKK3sKKyAgICBpZiAoIXRleHRTdHJpbmcg
fHwgIXRleHRMZW5ndGgpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBpZiAodGV4
dFBvc2l0aW9uID49IG1fYnVmZmVyTGVuZ3RoKSB7CisgICAgICAgICp0ZXh0U3RyaW5nID0gbnVs
bHB0cjsKKyAgICAgICAgKnRleHRMZW5ndGggPSAwOworICAgICAgICByZXR1cm4gU19PSzsKKyAg
ICB9CisKKyAgICAqdGV4dFN0cmluZyA9ICZtX2J1ZmZlclt0ZXh0UG9zaXRpb25dOworICAgICp0
ZXh0TGVuZ3RoID0gbV9idWZmZXJMZW5ndGggLSB0ZXh0UG9zaXRpb247CisKKyAgICByZXR1cm4g
U19PSzsKK30KKworSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6OkdldFRleHRCZWZvcmVQb3Np
dGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBjb25zdCBXQ0hBUioqIHRleHRTdHJpbmcsIFVJTlQz
MiogdGV4dExlbmd0aCkKK3sKKyAgICBpZiAoIXRleHRTdHJpbmcgfHwgIXRleHRMZW5ndGgpCisg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICBpZiAoIXRleHRQb3NpdGlvbiB8fCB0ZXh0
UG9zaXRpb24gPiBtX2J1ZmZlckxlbmd0aCkgeworICAgICAgICAqdGV4dFN0cmluZyA9IG51bGxw
dHI7CisgICAgICAgICp0ZXh0TGVuZ3RoID0gMDsKKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAg
fQorCisgICAgKnRleHRTdHJpbmcgPSAmbV9idWZmZXJbMF07CisgICAgKnRleHRMZW5ndGggPSB0
ZXh0UG9zaXRpb247CisKKyAgICByZXR1cm4gU19PSzsKK30KKworSFJFU1VMVCBUZXh0QW5hbHl6
ZXJIZWxwZXI6OkdldExvY2FsZU5hbWUoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyKiB0ZXh0
TGVuZ3RoLCBjb25zdCBXQ0hBUioqIGxvY2FsZU5hbWUpCit7CisgICAgKmxvY2FsZU5hbWUgPSBt
X2xvY2FsZU5hbWU7CisgICAgKnRleHRMZW5ndGggPSBtX2J1ZmZlckxlbmd0aCAtIHRleHRQb3Np
dGlvbjsKKworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxUIFRleHRBbmFseXplckhlbHBl
cjo6R2V0TnVtYmVyU3Vic3RpdHV0aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiogdGV4
dExlbmd0aCwgSURXcml0ZU51bWJlclN1YnN0aXR1dGlvbioqIG51bWJlclN1YnN0aXR1dGlvbikK
K3sKKyAgICAqdGV4dExlbmd0aCA9IG1fYnVmZmVyTGVuZ3RoIC0gdGV4dFBvc2l0aW9uOworICAg
IHJldHVybiBTX09LOworfQorCitIUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6U2V0TGluZUJy
ZWFrcG9pbnRzKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBjb25zdCBE
V1JJVEVfTElORV9CUkVBS1BPSU5UKikKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitI
UkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6U2V0U2NyaXB0QW5hbHlzaXMoVUlOVDMyIHRleHRQ
b3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIGNvbnN0IERXUklURV9TQ1JJUFRfQU5BTFlTSVMq
IGFuYWx5c2lzKQoreworICAgIG1fYW5hbHlzaXMgPSAqYW5hbHlzaXM7CisKKyAgICByZXR1cm4g
U19PSzsKK30KKworSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6OlNldEJpZGlMZXZlbChVSU5U
MzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgVUlOVDggZXhwbGljaXRMZXZlbCwg
VUlOVDggcmVzb2x2ZWRMZXZlbCkKK3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCitIUkVT
VUxUIFRleHRBbmFseXplckhlbHBlcjo6U2V0TnVtYmVyU3Vic3RpdHV0aW9uKFVJTlQzMiB0ZXh0
UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBJRFdyaXRlTnVtYmVyU3Vic3RpdHV0aW9uKikK
K3sKKyAgICByZXR1cm4gRV9OT1RJTVBMOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6
ZXJIZWxwZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3By
YWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IFRleHRBbmFseXplckhl
bHBlciA6IHB1YmxpYyBJRFdyaXRlVGV4dEFuYWx5c2lzU2luaywgSURXcml0ZVRleHRBbmFseXNp
c1NvdXJjZSB7CisgICAgVGV4dEFuYWx5emVySGVscGVyKFVDaGFyKiBsb2NhbGVOYW1lLCBVQ2hh
ciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpOworCisgICAgLy8gSVVua25vd24KKyAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRlcmZhY2UoX0luXyBS
RUZJSUQsIF9DT01fT3V0cHRyXyB2b2lkKiopOworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9E
Q0FMTFRZUEUgQWRkUmVmKCk7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBS
ZWxlYXNlKCk7CisKKyAgICAvLyBJRFdyaXRlVGV4dEFuYWx5c2lzU291cmNlIAorICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRUZXh0QXRQb3NpdGlvbihVSU5UMzIgdGV4
dFBvc2l0aW9uLCBjb25zdCBXQ0hBUioqIHRleHRTdHJpbmcsIFVJTlQzMiogdGV4dExlbmd0aCk7
CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldFRleHRCZWZvcmVQb3Np
dGlvbihVSU5UMzIgdGV4dFBvc2l0aW9uLCBjb25zdCBXQ0hBUioqIHRleHRTdHJpbmcsIFVJTlQz
MiogdGV4dExlbmd0aCk7CisgICAgdmlydHVhbCBEV1JJVEVfUkVBRElOR19ESVJFQ1RJT04gU1RE
TUVUSE9EQ0FMTFRZUEUgR2V0UGFyYWdyYXBoUmVhZGluZ0RpcmVjdGlvbigpIHsgcmV0dXJuIERX
UklURV9SRUFESU5HX0RJUkVDVElPTl9MRUZUX1RPX1JJR0hUOyB9CisgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIEdldExvY2FsZU5hbWUoVUlOVDMyIHRleHRQb3NpdGlvbiwg
VUlOVDMyKiB0ZXh0TGVuZ3RoLCBjb25zdCBXQ0hBUioqIGxvY2FsZU5hbWUpOworICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXROdW1iZXJTdWJzdGl0dXRpb24oVUlOVDMy
IHRleHRQb3NpdGlvbiwgVUlOVDMyKiB0ZXh0TGVuZ3RoLCBJRFdyaXRlTnVtYmVyU3Vic3RpdHV0
aW9uKiopOworCisgICAgLy8gSURXcml0ZVRleHRBbmFseXNpc1NpbmsKKyAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0TGluZUJyZWFrcG9pbnRzKFVJTlQzMiB0ZXh0UG9z
aXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBjb25zdCBEV1JJVEVfTElORV9CUkVBS1BPSU5UKik7
CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldFNjcmlwdEFuYWx5c2lz
KFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiB0ZXh0TGVuZ3RoLCBjb25zdCBEV1JJVEVfU0NS
SVBUX0FOQUxZU0lTKik7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNl
dEJpZGlMZXZlbChVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgVUlOVDgg
ZXhwbGljaXRMZXZlbCwgVUlOVDggcmVzb2x2ZWRMZXZlbCk7CisgICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFNldE51bWJlclN1YnN0aXR1dGlvbihVSU5UMzIgdGV4dFBvc2l0
aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgSURXcml0ZU51bWJlclN1YnN0aXR1dGlvbiopOworCisg
ICAgVUNoYXIqIG1fbG9jYWxlTmFtZSB7IG51bGxwdHIgfTsKKyAgICBVQ2hhciogbV9idWZmZXIg
eyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9idWZmZXJMZW5ndGggeyAwIH07CisgICAgRFdS
SVRFX1NDUklQVF9BTkFMWVNJUyBtX2FuYWx5c2lzOworICAgIFVMT05HIG1fcmVmQ291bnQgeyAw
IH07Cit9OworCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290216</attachid>
            <date>2016-09-29 10:43:23 -0700</date>
            <delta_ts>2016-09-29 11:47:36 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-162712-20160929104023.patch</filename>
            <type>text/plain</type>
            <size>51378</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjU3NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE2LTA5LTI4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dW0RpcmVjdDJEXSBB
ZGQgRDJEIEZvbnQgaGFuZGxpbmcgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNzEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBsYW5kcyBhIHNldCBvZiBuZXcgZmlsZXMgdGhh
dCBpbXBsZW1lbnQgCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHVudGlsIGNvbXBsZXRlIGJhY2tl
bmQgbGFuZHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYXNjYWRlOjpzeW50aGV0aWNPYmxpcXVlQW5nbGUpOiBBZGRlZCBoZWxwZXIgZnVuY3Rpb24u
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6ZHdGb250KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpkd0ZvbnRGYWNlKTogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGU6OmRyYXdHbHlwaHMpOiBVc2UgaGVscGVyIGZ1bmN0aW9uLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGU6OmRyYXdHbHlwaHMpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhY2hlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y3JlYXRl
Rm9udFBsYXRmb3JtRGF0YSk6IEFkZCBjYXNlIGZvciBEaXJlY3QyRC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHA6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhKTogRml4IHdoaXRlc3BhY2UuCisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxh
dGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKTogQWRkIERpcmVjdDJEIGNhc2UuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKTogQ2xlYW4g
dXAgQysrIGluaXRpYWxpemVycy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9y
bURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udFBsYXRmb3JtRGF0YURpcmVjdDJELmNwcDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6IENsZWFuIHVwIEMr
KyBpbml0aWFsaXplcnMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFn
ZVRyZWVOb2RlRGlyZWN0MkQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vU2ltcGxlRm9udERhdGFEaXJlY3QyRC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmg6IEFkZGVkLgorCiAy
MDE2LTA5LTI4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRHJv
cCBmaXJzdCAnc3RhdGUnIHBhcmFtZXRlciB0byBKU0RPTVdpbmRvdzo6dG9XcmFwcGVkKCkgLyBK
U0V2ZW50VGFyZ2V0Ojp0b1dyYXBwZWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuaAkocmV2aXNpb24gMjA2NTc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9uLgog
ICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAxMCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTAsIDIw
MTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAwOCBUb3JjaCBNb2JpbGUsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC01Nyw2ICs1Nywx
MSBAQAogI2luY2x1ZGUgIkNvcmVHcmFwaGljc1NQSS5oIgogI2VuZGlmCiAKKyNpZiBVU0UoRElS
RUNUMkQpCitpbnRlcmZhY2UgSURXcml0ZUZhY3Rvcnk7CitpbnRlcmZhY2UgSURXcml0ZUdkaUlu
dGVyb3A7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHbHlwaFBhZ2U7
CkBAIC0xNDMsNyArMTQ4LDcgQEAgcHVibGljOgogICAgICAgICBtX2FkanVzdGVkU3BhY2VXaWR0
aCA9IHNwYWNlV2lkdGg7CiAgICAgfQogCi0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCisjaWYg
VVNFKENHKSB8fCBVU0UoRElSRUNUMkQpIHx8IFVTRShDQUlSTykKICAgICBmbG9hdCBzeW50aGV0
aWNCb2xkT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zeW50aGV0aWNCb2xkT2Zmc2V0OyB9CiAj
ZW5kaWYKIApAQCAtMTk4LDYgKzIwMywxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGZsb2F0IGFz
Y2VudENvbnNpZGVyaW5nTWFjQXNjZW50SGFjayhjb25zdCBXQ0hBUiosIGZsb2F0IGFzY2VudCwg
ZmxvYXQgZGVzY2VudCk7CiAjZW5kaWYKIAorI2lmIFVTRShESVJFQ1QyRCkKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgSURXcml0ZUZhY3RvcnkqIHN5c3RlbURXcml0ZUZhY3RvcnkoKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSURXcml0ZUdkaUludGVyb3AqIHN5c3RlbURXcml0ZUdk
aUludGVyb3AoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIEZvbnQoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYsIGJvb2wgaXNDdXN0b21Gb250ID0gZmFsc2UsIGJvb2wgaXNMb2FkaW5nID0gZmFs
c2UsIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayA9IGZhbHNlKTsKIApAQCAtMjY3LDcg
KzI3Nyw3IEBAIHByaXZhdGU6CiAKICAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxEZXJpdmVk
Rm9udHM+IG1fZGVyaXZlZEZvbnREYXRhOwogCi0jaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCisj
aWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpIHx8IFVTRShDQUlSTykKICAgICBmbG9hdCBtX3N5
bnRoZXRpY0JvbGRPZmZzZXQ7CiAjZW5kaWYKIApAQCAtMzM4LDcgKzM0OCw3IEBAIEFMV0FZU19J
TkxJTkUgZmxvYXQgRm9udDo6d2lkdGhGb3JHbHlwaCgKIAogI2lmIEVOQUJMRShPUEVOVFlQRV9W
RVJUSUNBTCkKICAgICBpZiAobV92ZXJ0aWNhbERhdGEpIHsKLSNpZiBVU0UoQ0cpIHx8IFVTRShD
QUlSTykKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkgfHwgVVNFKENBSVJPKQogICAgICAg
ICB3aWR0aCA9IG1fdmVydGljYWxEYXRhLT5hZHZhbmNlSGVpZ2h0KHRoaXMsIGdseXBoKSArIG1f
c3ludGhldGljQm9sZE9mZnNldDsKICNlbHNlCiAgICAgICAgIHdpZHRoID0gbV92ZXJ0aWNhbERh
dGEtPmFkdmFuY2VIZWlnaHQodGhpcywgZ2x5cGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCShyZXZpc2lvbiAyMDY1NzYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVy
QGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcsIDIwMTAsIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA2LCAyMDA3LCAyMDEwLCAyMDExLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgpAQCAtMzIwLDYgKzMyMCw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBhZHZh
bmNlZFRleHRSZW5kZXJpbmdNb2RlKCk7CiAgICAgfQogCisgICAgc3RhdGljIGludCBzeW50aGV0
aWNPYmxpcXVlQW5nbGUoKSB7IHJldHVybiAxNDsgfQorCiAgICAgRm9udENhc2NhZGVEZXNjcmlw
dGlvbiBtX2ZvbnREZXNjcmlwdGlvbjsKICAgICBtdXRhYmxlIFJlZlB0cjxGb250Q2FzY2FkZUZv
bnRzPiBtX2ZvbnRzOwogICAgIFdlYWtQdHJGYWN0b3J5PEZvbnRDYXNjYWRlPiBtX3dlYWtQdHJG
YWN0b3J5OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRm
b3JtRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRQbGF0Zm9ybURhdGEuaAkocmV2aXNpb24gMjA2NTc2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMCwg
MjAxMyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTAs
IDIwMTMtMjAxNiBBcHBsZSBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1l
bCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5z
IFBldGVyIEZyZXl0aGVyCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBD
ZW50ZXIgVVNBLCBJbmMuCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgi
CiAKICNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAiQ09NUHRyLmgiCiAjaW5jbHVkZSAiU2hh
cmVkR0RJT2JqZWN0LmgiCiAjZW5kaWYKIApAQCAtNjUsNiArNjYsOCBAQCB0eXBlZGVmIGNvbnN0
IHN0cnVjdCBfX0NURm9udCogQ1RGb250UmVmCiAjaWYgUExBVEZPUk0oV0lOKQogI2luY2x1ZGUg
PHd0Zi93aW4vR0RJT2JqZWN0Lmg+CiB0eXBlZGVmIHN0cnVjdCBIRk9OVF9fKiBIRk9OVDsKK2lu
dGVyZmFjZSBJRFdyaXRlRm9udDsKK2ludGVyZmFjZSBJRFdyaXRlRm9udEZhY2U7CiAjZW5kaWYK
IAogCkBAIC0xMDMsNiArMTA2LDggQEAgcHVibGljOgogCiAjaWYgVVNFKENHKQogICAgIEZvbnRQ
bGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiwgQ0dGb250UmVmLCBmbG9hdCBzaXplLCBib29s
IHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgYm9vbCB1c2VHREkpOworI2Vs
aWYgVVNFKERJUkVDVDJEKQorICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiwg
SURXcml0ZUZvbnQqLCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhl
dGljT2JsaXF1ZSwgYm9vbCB1c2VHREkpOwogI2VsaWYgVVNFKENBSVJPKQogICAgIEZvbnRQbGF0
Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiwgY2Fpcm9fZm9udF9mYWNlX3QqLCBmbG9hdCBzaXpl
LCBib29sIGJvbGQsIGJvb2wgaXRhbGljKTsKICNlbmRpZgpAQCAtMTM3LDYgKzE0MiwxMSBAQCBw
dWJsaWM6CiAgICAgQ0dGb250UmVmIGNnRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fY2dGb250Lmdl
dCgpOyB9CiAjZW5kaWYKIAorI2lmIFVTRShESVJFQ1QyRCkKKyAgICBJRFdyaXRlRm9udCogZHdG
b250KCkgY29uc3QgeyByZXR1cm4gbV9kd0ZvbnQuZ2V0KCk7IH0KKyAgICBJRFdyaXRlRm9udEZh
Y2UqIGR3Rm9udEZhY2UoKSBjb25zdCB7IHJldHVybiBtX2R3Rm9udEZhY2UuZ2V0KCk7IH0KKyNl
bmRpZgorCiAgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKICAgICBmbG9hdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgYm9vbCBzeW50aGV0aWNCb2xkKCkgY29uc3Qg
eyByZXR1cm4gbV9zeW50aGV0aWNCb2xkOyB9CkBAIC0yNDEsNiArMjUxLDEwIEBAIHByaXZhdGU6
CiAjaWYgVVNFKENHKSAmJiAoUExBVEZPUk0oV0lOKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxMjAwKSB8fCAoUExBVEZPUk0oSU9TKSAm
JiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMDAwMCkpCiAgICAgUmV0YWlu
UHRyPENHRm9udFJlZj4gbV9jZ0ZvbnQ7CiAjZW5kaWYKKyNpZiBVU0UoRElSRUNUMkQpCisgICAg
Q09NUHRyPElEV3JpdGVGb250PiBtX2R3Rm9udDsKKyAgICBDT01QdHI8SURXcml0ZUZvbnRGYWNl
PiBtX2R3Rm9udEZhY2U7CisjZW5kaWYKICNpZiBVU0UoQ0FJUk8pCiAgICAgUmVmUHRyPGNhaXJv
X3NjYWxlZF9mb250X3Q+IG1fc2NhbGVkRm9udDsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCShyZXZpc2lvbiAyMDY1NzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
OSwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDksIDIwMTEsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVG9yY2ggTW9iaWxlIEluYy4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTk2LDYgKzk2LDcgQEAgcHVibGljOgogICAgIEdseXBoQnVmZmVyQWR2YW5jZSog
YWR2YW5jZXModW5zaWduZWQgZnJvbSkgeyByZXR1cm4gbV9hZHZhbmNlcy5kYXRhKCkgKyBmcm9t
OyB9CiAgICAgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzKHVuc2lnbmVkIGZyb20pIGNv
bnN0IHsgcmV0dXJuIG1fZ2x5cGhzLmRhdGEoKSArIGZyb207IH0KICAgICBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqIGFkdmFuY2VzKHVuc2lnbmVkIGZyb20pIGNvbnN0IHsgcmV0dXJuIG1fYWR2
YW5jZXMuZGF0YSgpICsgZnJvbTsgfQorICAgIHNpemVfdCBhZHZhbmNlc0NvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9hZHZhbmNlcy5zaXplKCk7IH0KIAogICAgIGNvbnN0IEZvbnQqIGZvbnRBdCh1
bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9mb250W2luZGV4XTsgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnRDYXNjYWRlQ29jb2EubW0JKHJldmlzaW9uIDIwNjU3NikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0JKHdvcmtpbmcgY29weSkK
QEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9A
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MCwgMjAxMSBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYtMjAxMSwgMjAx
NiBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTUwLDggKzUwLDYgQEAgU09GVF9M
SU5LX0ZSQU1FV09SSyhVSUtpdCkKIFNPRlRfTElOSyhVSUtpdCwgX1VJS2l0R2V0VGV4dEVmZmVj
dHNDYXRhbG9nLCBDVUlDYXRhbG9nICosICh2b2lkKSwgKCkpCiAjZW5kaWYKIAotI2RlZmluZSBT
WU5USEVUSUNfT0JMSVFVRV9BTkdMRSAxNAotCiAjaWZkZWYgX19MUDY0X18KICNkZWZpbmUgVVJl
ZkNvbiB2b2lkKgogI2Vsc2UKQEAgLTI0NCw3ICsyNDIsNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpk
cmF3R2x5cGhzKEdyYXBoaWNzQ29uCiAgICAgbWF0cml4LmIgPSAtbWF0cml4LmI7CiAgICAgbWF0
cml4LmQgPSAtbWF0cml4LmQ7CiAgICAgaWYgKHBsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVl
KCkpIHsKLSAgICAgICAgc3RhdGljIGZsb2F0IG9ibGlxdWVTa2V3ID0gdGFuZihTWU5USEVUSUNf
T0JMSVFVRV9BTkdMRSAqIHBpRmxvYXQgLyAxODApOworICAgICAgICBzdGF0aWMgZmxvYXQgb2Js
aXF1ZVNrZXcgPSB0YW5mKHN5bnRoZXRpY09ibGlxdWVBbmdsZSgpICogcGlGbG9hdCAvIDE4MCk7
CiAgICAgICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCkKICAg
ICAgICAgICAgIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZp
bmVUcmFuc2Zvcm1NYWtlKDEsIG9ibGlxdWVTa2V3LCAwLCAxLCAwLCAwKSk7CiAgICAgICAgIGVs
c2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q0dXaW4uY3BwCShyZXZpc2lvbiAyMDY1NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTMgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5
LCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDggKzQwLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jb25zdCBpbnQgc3ludGhldGljT2JsaXF1ZUFuZ2xlID0gMTQ7Ci0KIHN0YXRpYyBp
bmxpbmUgQ0dGbG9hdCB0b0NHRmxvYXQoRklYRUQgZikKIHsKICAgICByZXR1cm4gZi52YWx1ZSAr
IGYuZnJhY3QgLyBDR0Zsb2F0KDY1NTM2LjApOwpAQCAtMTY4LDcgKzE2Niw3IEBAIHZvaWQgRm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb24KICAgICBtYXRyaXguZCA9IC1tYXRyaXgu
ZDsKIAogICAgIGlmIChwbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKSB7Ci0gICAgICAg
IHN0YXRpYyBmbG9hdCBza2V3ID0gLXRhbmYoc3ludGhldGljT2JsaXF1ZUFuZ2xlICogcGlGbG9h
dCAvIDE4MC4wZik7CisgICAgICAgIHN0YXRpYyBmbG9hdCBza2V3ID0gLXRhbmYoc3ludGhldGlj
T2JsaXF1ZUFuZ2xlKCkgKiBwaUZsb2F0IC8gMTgwLjBmKTsKICAgICAgICAgbWF0cml4ID0gQ0dB
ZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0FmZmluZVRyYW5zZm9ybU1ha2UoMSwgMCwg
c2tldywgMSwgMCwgMCkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAJKHJldmlzaW9uIDIwNjU3
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCwgMjAxMy0yMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCwgMjAxMy0yMDE0IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3
LDYgKzQ3LDEwIEBACiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3Rl
bUludGVyZmFjZS5oPgogI2VuZGlmCiAKKyNpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSA8ZHdy
aXRlLmg+CisjZW5kaWYKKwogdXNpbmcgc3RkOjptaW47CiAKIG5hbWVzcGFjZSBXZWJDb3JlCkBA
IC01NDksNiArNTUzLDcgQEAgc3RhdGljIGludCBDQUxMQkFDSyB0cmFpdHNJbkZhbWlseUVudW1Q
cgogICAgIHByb2NEYXRhLT5tX3RyYWl0c01hc2tzLmFkZCh0cmFpdHNNYXNrKTsKICAgICByZXR1
cm4gMTsKIH0KKwogVmVjdG9yPEZvbnRUcmFpdHNNYXNrPiBGb250Q2FjaGU6OmdldFRyYWl0c0lu
RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAgICBIV25kREMgaGRj
KDApOwpAQCAtNTk5LDYgKzYwNCw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRh
PiBGb250Q2EKIAogI2lmIFVTRShDRykKICAgICBib29sIGZvbnRDcmVhdGlvbkZhaWxlZCA9ICFy
ZXN1bHQtPmNnRm9udCgpOworI2VsaWYgVVNFKERJUkVDVDJEKQorICAgIGJvb2wgZm9udENyZWF0
aW9uRmFpbGVkID0gIXJlc3VsdC0+ZHdGb250KCk7CiAjZWxpZiBVU0UoQ0FJUk8pCiAgICAgYm9v
bCBmb250Q3JlYXRpb25GYWlsZWQgPSAhcmVzdWx0LT5zY2FsZWRGb250KCk7CiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKKworI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5o
IgorI2luY2x1ZGUgIkNPTVB0ci5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2lu
Y2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURp
cmVjdDJELmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlVuaXNjcmliZUNvbnRy
b2xsZXIuaCIKKyNpbmNsdWRlICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCisjaW5jbHVkZSA8ZDJk
MS5oPgorI2luY2x1ZGUgPGR3cml0ZS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyLAorICAgIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGlu
Z01vZGUpCit7CisgICAgYXV0byBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29u
dGV4dCgpOworICAgIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IFdlYkNvcmVTaG91bGRV
c2VGb250U21vb3RoaW5nKCk7CisKKyAgICBzd2l0Y2ggKHNtb290aGluZ01vZGUpIHsKKyAgICBj
YXNlIEFudGlhbGlhc2VkOgorICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hvdWxkQW50aWFs
aWFzKHRydWUpOworICAgICAgICBzaG91bGRVc2VGb250U21vb3RoaW5nID0gZmFsc2U7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgU3VicGl4ZWxBbnRpYWxpYXNlZDoKKyAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh0cnVlKTsKKyAgICAgICAgc2hvdWxkVXNlRm9u
dFNtb290aGluZyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm9TbW9vdGhpbmc6
CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOworICAg
ICAgICBzaG91bGRVc2VGb250U21vb3RoaW5nID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQXV0b1Ntb290aGluZzoKKyAgICAgICAgLy8gRm9yIHRoZSBBdXRvU21vb3RoIGNhc2Us
IGRvbid0IGRvIGFueXRoaW5nISBLZWVwIHRoZSBkZWZhdWx0IHNldHRpbmdzLgorICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CisKKyAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LnBsYXRm
b3JtRGF0YSgpOworCisgICAgZ3JhcGhpY3NDb250ZXh0LnNhdmUoKTsKKworICAgIEQyRDFfTUFU
UklYXzNYMl9GIG1hdHJpeDsKKyAgICBjb250ZXh0LT5HZXRUcmFuc2Zvcm0oJm1hdHJpeCk7CisK
KyAgICBpZiAocGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSkgeworICAgICAgICBzdGF0
aWMgZmxvYXQgc2tldyA9IC10YW5mKHN5bnRoZXRpY09ibGlxdWVBbmdsZSgpICogcGlGbG9hdCAv
IDE4MC4wZik7CisgICAgICAgIGF1dG8gc2tld01hdHJpeCA9IEQyRDE6Ok1hdHJpeDN4MkY6OlNr
ZXcoc2tldywgMCk7CisgICAgICAgIGNvbnRleHQtPlNldFRyYW5zZm9ybShtYXRyaXggKiBza2V3
TWF0cml4KTsKKyAgICB9CisKKyAgICAvLyBVbmlzY3JpYmUgZ2l2ZXMgdXMgb2Zmc2V0cyB0byBo
ZWxwIHJlZmluZSB0aGUgcG9zaXRpb25pbmcgb2YgY29tYmluaW5nIGdseXBocy4KKyAgICBGbG9h
dFNpemUgdHJhbnNsYXRpb24gPSBnbHlwaEJ1ZmZlci5vZmZzZXRBdChmcm9tKTsKKworICAgIFJF
TEVBU0VfQVNTRVJUKHBsYXRmb3JtRGF0YS5kd0ZvbnQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
cGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKSk7CisKKyAgICBWZWN0b3I8RkxPQVQ+IGhvcml6b250
YWxBZHZhbmNlcyhudW1HbHlwaHMpOworICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiBv
ZmZzZXRBZHZhbmNlcyhudW1HbHlwaHMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1HbHlwaHM7ICsraSkgeworICAgICAgICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2
YW5jZXNDb3VudCgpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYXV0byBhZHZhbmNl
ID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoaSArIGZyb20pOworICAgICAgICBpZiAoIWFkdmFuY2Up
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBob3Jpem9udGFsQWR2YW5jZXNbaV0g
PSBhZHZhbmNlLT53aWR0aCgpOworICAgICAgICBvZmZzZXRBZHZhbmNlc1tpXS5hZHZhbmNlT2Zm
c2V0ID0gYWR2YW5jZS0+d2lkdGgoKTsKKyAgICAgICAgb2Zmc2V0QWR2YW5jZXNbaV0uYXNjZW5k
ZXJPZmZzZXQgPSBhZHZhbmNlLT5oZWlnaHQoKTsKKyAgICB9CisKKyAgICBEV1JJVEVfR0xZUEhf
UlVOIGdseXBoUnVuOworICAgIGdseXBoUnVuLmZvbnRGYWNlID0gcGxhdGZvcm1EYXRhLmR3Rm9u
dEZhY2UoKTsKKyAgICBnbHlwaFJ1bi5mb250RW1TaXplID0gcGxhdGZvcm1EYXRhLnNpemUoKTsK
KyAgICBnbHlwaFJ1bi5nbHlwaENvdW50ID0gbnVtR2x5cGhzOworICAgIGdseXBoUnVuLmdseXBo
SW5kaWNlcyA9IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKTsKKyAgICBnbHlwaFJ1bi5nbHlwaEFk
dmFuY2VzID0gaG9yaXpvbnRhbEFkdmFuY2VzLmRhdGEoKTsKKyAgICBnbHlwaFJ1bi5nbHlwaE9m
ZnNldHMgPSBudWxscHRyOworICAgIGdseXBoUnVuLmlzU2lkZXdheXMgPSBwbGF0Zm9ybURhdGEu
b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbDsKKyAgICBnbHlwaFJ1bi5iaWRpTGV2ZWwgPSAwOwor
CisgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKKyAgICBmbG9hdCBzaGFkb3dCbHVyOworICAg
IENvbG9yIHNoYWRvd0NvbG9yOworICAgIGdyYXBoaWNzQ29udGV4dC5nZXRTaGFkb3coc2hhZG93
T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7CisKKyAgICBib29sIGhhc1NpbXBsZVNo
YWRvdyA9IGdyYXBoaWNzQ29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0TW9kZUZpbGwg
JiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFkb3dCbHVyICYmICghZ3JhcGhpY3NDb250
ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgZ3JhcGhpY3NDb250ZXh0LmdldENUTSgp
LmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOworICAgIGlmIChoYXNTaW1wbGVT
aGFkb3cpIHsKKyAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3Rl
YWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50
aWFsaWFzaW5nLgorICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJTaGFkb3coKTsKKyAgICAg
ICAgQ29sb3IgZmlsbENvbG9yID0gZ3JhcGhpY3NDb250ZXh0LmZpbGxDb2xvcigpOworICAgICAg
ICBDb2xvciBzaGFkb3dGaWxsQ29sb3Ioc2hhZG93Q29sb3IucmVkKCksIHNoYWRvd0NvbG9yLmdy
ZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSwgc2hhZG93Q29sb3IuYWxwaGEoKSAqIGZpbGxDb2xv
ci5hbHBoYSgpIC8gMjU1KTsKKyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkg
KyB0cmFuc2xhdGlvbi53aWR0aCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7CisgICAgICAgIC8v
IElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBs
aWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUuCisgICAg
ICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgdHJhbnNsYXRpb24uaGVpZ2h0KCkg
KyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKCkgPyAtMSA6IDEpOworCisgICAgICAgIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JC
cnVzaD4gc2hhZG93QnJ1c2g7CisgICAgICAgIGlmICghU1VDQ0VFREVEKGNvbnRleHQtPkNyZWF0
ZVNvbGlkQ29sb3JCcnVzaChncmFwaGljc0NvbnRleHQuY29sb3JXaXRoR2xvYmFsQWxwaGEoc2hh
ZG93RmlsbENvbG9yKSwgJnNoYWRvd0JydXNoKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgY29udGV4dC0+RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50MkYoc2hhZG93VGV4dFgsIHNo
YWRvd1RleHRZKSwgJmdseXBoUnVuLCBzaGFkb3dCcnVzaC5nZXQoKSk7CisgICAgICAgIGlmIChm
b250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSkKKyAgICAgICAgICAgIGNvbnRleHQtPkRyYXdHbHlw
aFJ1bihEMkQxOjpQb2ludDJGKHNoYWRvd1RleHRYICsgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0
KCksIHNoYWRvd1RleHRZKSwgJmdseXBoUnVuLCBzaGFkb3dCcnVzaC5nZXQoKSk7CisgICAgfQor
CisgICAgY29udGV4dC0+RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50MkYocG9pbnQueCgpICsgdHJh
bnNsYXRpb24ud2lkdGgoKSwgcG9pbnQueSgpICsgdHJhbnNsYXRpb24uaGVpZ2h0KCkpLCAmZ2x5
cGhSdW4sIGdyYXBoaWNzQ29udGV4dC5zb2xpZEZpbGxCcnVzaCgpKTsKKyAgICBpZiAoZm9udC5z
eW50aGV0aWNCb2xkT2Zmc2V0KCkpCisgICAgICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQx
OjpQb2ludDJGKHBvaW50LngoKSArIHRyYW5zbGF0aW9uLndpZHRoKCkgKyBmb250LnN5bnRoZXRp
Y0JvbGRPZmZzZXQoKSwgcG9pbnQueSgpICsgdHJhbnNsYXRpb24uaGVpZ2h0KCkpLCAmZ2x5cGhS
dW4sIGdyYXBoaWNzQ29udGV4dC5zb2xpZEZpbGxCcnVzaCgpKTsKKworICAgIGlmIChoYXNTaW1w
bGVTaGFkb3cpCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0
LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7CisKKyAgICBncmFwaGljc0NvbnRleHQucmVzdG9y
ZSgpOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNw
cAkocmV2aXNpb24gMjA2NTc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAx
MCwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI1LDIwICsyNSwyNiBAQAogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEu
aCIKICNpbmNsdWRlICJPcGVuVHlwZVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZl
ci5oIgotI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5o
PgotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2Uu
aD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0
Lmg+CiAjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3QuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUg
eworI2lmIFVTRShDRykKKyNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9u
U2VydmljZXMuaD4KKyNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVt
SW50ZXJmYWNlLmg+CisjZW5kaWYKKworI2lmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRlICJGb250
LmgiCisjaW5jbHVkZSA8ZHdyaXRlLmg+CisjZW5kaWYKIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
K25hbWVzcGFjZSBXZWJDb3JlIHsKIAogRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRDdXN0
b21QbGF0Zm9ybURhdGEoKQogewogICAgIGlmIChtX2ZvbnRSZWZlcmVuY2UpCi0gICAgICAgICAg
ICBSZW1vdmVGb250TWVtUmVzb3VyY2VFeChtX2ZvbnRSZWZlcmVuY2UpOworICAgICAgICBSZW1v
dmVGb250TWVtUmVzb3VyY2VFeChtX2ZvbnRSZWZlcmVuY2UpOwogfQogCiBGb250UGxhdGZvcm1E
YXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCkBAIC02
OCw4ICs3NCwxNSBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6CiAK
ICAgICBhdXRvIGhmb250ID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVGb250SW5kaXJlY3QoJmxv
Z0ZvbnQpKTsKIAorI2lmIFVTRShDRykKICAgICBSZXRhaW5QdHI8Q0dGb250UmVmPiBjZ0ZvbnQg
PSBhZG9wdENGKENHRm9udENyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQoJmxvZ0ZvbnQpKTsKICAgICBy
ZXR1cm4gRm9udFBsYXRmb3JtRGF0YShXVEZNb3ZlKGhmb250KSwgY2dGb250LmdldCgpLCBzaXpl
LCBib2xkLCBpdGFsaWMsIHJlbmRlcmluZ01vZGUgPT0gRm9udFJlbmRlcmluZ01vZGU6OkFsdGVy
bmF0ZSk7CisjZWxzZQorICAgIENPTVB0cjxJRFdyaXRlRm9udD4gZHdGb250OworICAgIEhSRVNV
TFQgaHIgPSBGb250OjpzeXN0ZW1EV3JpdGVHZGlJbnRlcm9wKCktPkNyZWF0ZUZvbnRGcm9tTE9H
Rk9OVCgmbG9nRm9udCwgJmR3Rm9udCk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7CisgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoV1RGTW92ZShoZm9udCksIGR3Rm9udC5n
ZXQoKSwgc2l6ZSwgYm9sZCwgaXRhbGljLCByZW5kZXJpbmdNb2RlID09IEZvbnRSZW5kZXJpbmdN
b2RlOjpBbHRlcm5hdGUpOworI2VuZGlmCiB9CiAKIC8vIENyZWF0ZXMgYSB1bmlxdWUgYW5kIHVu
cHJlZGljdGFibGUgZm9udCBuYW1lLCBpbiBvcmRlciB0byBhdm9pZCBjb2xsaXNpb25zIGFuZCB0
bwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oCShyZXZpc2lvbiAyMDY1NzYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAwOCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhQ2Fpcm8u
Y3BwCShyZXZpc2lvbiAyMDY1NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTMgQXBwbGUg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDgsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAkocmV2
aXNpb24gMjA2NTc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAg
KiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4g
SXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgogICogRm9udE1h
Yy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIw
MDksIDIwMTYgQXBwbGUgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMjAsMTIgKzEyMCw5
IEBAIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdCgKIEZvbnRQbGF0Zm9y
bURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiBoZm9udCwgQ0dGb250UmVm
IGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBib29sIHVzZUdESSkK
ICAgICA6IG1fc3ludGhldGljQm9sZChib2xkKQogICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKG9i
bGlxdWUpCi0gICAgLCBtX29yaWVudGF0aW9uKEhvcml6b250YWwpCiAgICAgLCBtX3NpemUoc2l6
ZSkKLSAgICAsIG1fd2lkdGhWYXJpYW50KFJlZ3VsYXJXaWR0aCkKICAgICAsIG1fZm9udChTaGFy
ZWRHRElPYmplY3Q8SEZPTlQ+OjpjcmVhdGUoV1RGTW92ZShoZm9udCkpKQogICAgICwgbV9jZ0Zv
bnQoZm9udCkKLSAgICAsIG1faXNDb2xvckJpdG1hcEZvbnQoZmFsc2UpCiAgICAgLCBtX3VzZUdE
SSh1c2VHREkpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNhaXJvV2luLmNwcAko
cmV2aXNpb24gMjA2NTc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRQbGF0Zm9ybURhdGFDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3
IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRh
dGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgYW55b25lIG90aGVyIHRoYW4KICAq
IEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5jcHAuCiAgKgotICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0y
MDA4LCAyMDE2IEFwcGxlIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIKICAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAxMCwgMjAxMSBCcmVudCBGdWxnaGFtCiAgKgpAQCAtNjIs
MTIgKzYyLDcgQEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KAogRm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGZvbnQsIGNh
aXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9i
bGlxdWUpCiAgICAgOiBtX2ZvbnQoU2hhcmVkR0RJT2JqZWN0PEhGT05UPjo6Y3JlYXRlKFdURk1v
dmUoZm9udCkpKQogICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBtX29yaWVudGF0aW9uKEhvcml6
b250YWwpCi0gICAgLCBtX3dpZHRoVmFyaWFudChSZWd1bGFyV2lkdGgpCi0gICAgLCBtX2lzQ29s
b3JCaXRtYXBGb250KGZhbHNlKQotICAgICwgbV9zeW50aGV0aWNCb2xkKGJvbGQpCiAgICAgLCBt
X3N5bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKLSAgICAsIG1fdXNlR0RJKGZhbHNlKQogewogICAg
IGNhaXJvX21hdHJpeF90IGZvbnRNYXRyaXg7CiAgICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUo
JmZvbnRNYXRyaXgsIHNpemUsIHNpemUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJl
Y3QyRC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisK
KyNpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJTaGFyZWRHRElPYmplY3QuaCIKKyNpbmNsdWRlIDxkMmQxLmg+CisjaW5jbHVkZSA8ZHdy
aXRlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3ZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdChIRk9OVCBmb250LCBmbG9h
dCBzaXplLCBIREMgaGRjLCBXQ0hBUiogZmFjZU5hbWUpCit7CisgICAgTE9HRk9OVCBsb2dmb250
OworICAgIEdldE9iamVjdChmb250LCBzaXplb2YobG9nZm9udCksICZsb2dmb250KTsKKworICAg
IEhSRVNVTFQgaHIgPSBGb250OjpzeXN0ZW1EV3JpdGVHZGlJbnRlcm9wKCktPkNyZWF0ZUZvbnRG
cm9tTE9HRk9OVCgmbG9nZm9udCwgJm1fZHdGb250KTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikp
CisgICAgICAgIHJldHVybjsKKworICAgIGhyID0gbV9kd0ZvbnQtPkNyZWF0ZUZvbnRGYWNlKCZt
X2R3Rm9udEZhY2UpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX3VzZUdESSkKKyAgICAgICAgbV9pc1N5c3RlbUZvbnQgPSAhd2NzY21wKGZh
Y2VOYW1lLCBMIkx1Y2lkYSBHcmFuZGUiKTsKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBs
YXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGhmb250LCBJRFdyaXRlRm9udCogZm9udCwgZmxv
YXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQorICAgIDogbV9z
eW50aGV0aWNCb2xkKGJvbGQpCisgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKKyAg
ICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9mb250KFNoYXJlZEdESU9iamVjdDxIRk9OVD46OmNy
ZWF0ZShXVEZNb3ZlKGhmb250KSkpCisgICAgLCBtX2R3Rm9udChmb250KQorICAgICwgbV91c2VH
REkodXNlR0RJKQoreworICAgIEhSRVNVTFQgaHIgPSBtX2R3Rm9udC0+Q3JlYXRlRm9udEZhY2Uo
Jm1fZHdGb250RmFjZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Cit9CisK
K3N0YXRpYyBib29sIGZvbnRzQXJlRXF1YWwoSURXcml0ZUZvbnQqIGEsIElEV3JpdGVGb250KiBi
KQoreworICAgIGlmICghYSAmJiAhYikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
YSA9PSBiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgoIWEgJiYgYikgfHwgKGEg
JiYgIWIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYS0+R2V0V2VpZ2h0KCkg
IT0gYi0+R2V0V2VpZ2h0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhLT5H
ZXRTdHlsZSgpICE9IGItPkdldFN0eWxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmIChhLT5HZXRTdHJldGNoKCkgIT0gYi0+R2V0U3RyZXRjaCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBEV1JJVEVfRk9OVF9NRVRSSUNTIGFNZXRyaWNzLCBiTWV0cmljczsKKyAg
ICBhLT5HZXRNZXRyaWNzKCZhTWV0cmljcyk7CisgICAgYi0+R2V0TWV0cmljcygmYk1ldHJpY3Mp
OworCisgICAgaWYgKChhTWV0cmljcy5kZXNpZ25Vbml0c1BlckVtICE9IGJNZXRyaWNzLmRlc2ln
blVuaXRzUGVyRW0pCisgICAgICAgIHx8IChhTWV0cmljcy5hc2NlbnQgIT0gYk1ldHJpY3MuYXNj
ZW50KQorICAgICAgICB8fCAoYU1ldHJpY3MuZGVzY2VudCAhPSBiTWV0cmljcy5hc2NlbnQpCisg
ICAgICAgIHx8IChhTWV0cmljcy5saW5lR2FwICE9IGJNZXRyaWNzLmxpbmVHYXApCisgICAgICAg
IHx8IChhTWV0cmljcy5jYXBIZWlnaHQgIT0gYk1ldHJpY3MuY2FwSGVpZ2h0KQorICAgICAgICB8
fCAoYU1ldHJpY3MueEhlaWdodCAhPSBiTWV0cmljcy54SGVpZ2h0KQorICAgICAgICB8fCAoYU1l
dHJpY3MudW5kZXJsaW5lUG9zaXRpb24gIT0gYk1ldHJpY3MudW5kZXJsaW5lUG9zaXRpb24pCisg
ICAgICAgIHx8IChhTWV0cmljcy51bmRlcmxpbmVUaGlja25lc3MgIT0gYk1ldHJpY3MudW5kZXJs
aW5lVGhpY2tuZXNzKQorICAgICAgICB8fCAoYU1ldHJpY3Muc3RyaWtldGhyb3VnaFBvc2l0aW9u
ICE9IGJNZXRyaWNzLnN0cmlrZXRocm91Z2hQb3NpdGlvbikKKyAgICAgICAgfHwgKGFNZXRyaWNz
LnN0cmlrZXRocm91Z2hUaGlja25lc3MgIT0gYk1ldHJpY3Muc3RyaWtldGhyb3VnaFRoaWNrbmVz
cykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250ID09IG90aGVyLm1fZm9udAorICAg
ICAgICAmJiBtX3VzZUdESSA9PSBvdGhlci5tX3VzZUdESQorICAgICAgICAmJiBmb250c0FyZUVx
dWFsKG1fZHdGb250LmdldCgpLCBvdGhlci5tX2R3Rm9udC5nZXQoKSk7Cit9CisKK30KKworI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRm
b3JtRGF0YVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwCShyZXZpc2lvbiAyMDY1NzYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5j
bHVkZWQgYnkgYW55b25lIG90aGVyIHRoYW4KICAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBh
bmQgRm9udC5jcHAuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4LCAyMDE2IEFwcGxlIEluYy4KICAqIENv
cHlyaWdodCAoQykgMjAwOCBCcmVudCBGdWxnaGFtCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNDAsOSArNDAs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1E
YXRhKEdESU9iamVjdDxIRk9OVD4gZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9i
bGlxdWUsIGJvb2wgdXNlR0RJKQogICAgIDogbV9mb250KFNoYXJlZEdESU9iamVjdDxIRk9OVD46
OmNyZWF0ZShXVEZNb3ZlKGZvbnQpKSkKICAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9vcmll
bnRhdGlvbihIb3Jpem9udGFsKQotICAgICwgbV93aWR0aFZhcmlhbnQoUmVndWxhcldpZHRoKQot
ICAgICwgbV9pc0NvbG9yQml0bWFwRm9udChmYWxzZSkKICAgICAsIG1fc3ludGhldGljQm9sZChi
b2xkKQogICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUpCiAgICAgLCBtX3VzZUdESSh1
c2VHREkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRXaW4uY3BwCShyZXZpc2lvbiAyMDY1NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCwgMjAxNiBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJl
ZU5vZGVEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlRGlyZWN0MkQuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9k
ZURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCisKKyNpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRl
ICJGb250LmgiCisjaW5jbHVkZSAiVGV4dEFuYWx5c2lzSGVscGVyLmgiCisjaW5jbHVkZSA8ZHdy
aXRlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNo
YXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKQoreworICAgIGlmIChidWZmZXJMZW5n
dGggPiBHbHlwaFBhZ2U6OnNpemUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0
IEZvbnQmIGZvbnQgPSB0aGlzLT5mb250KCk7CisgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7
CisKKyAgICBDT01QdHI8SURXcml0ZVRleHRBbmFseXplcj4gYW5hbHl6ZXI7CisgICAgSFJFU1VM
VCBociA9IEZvbnQ6OnN5c3RlbURXcml0ZUZhY3RvcnkoKS0+Q3JlYXRlVGV4dEFuYWx5emVyKCZh
bmFseXplcik7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBhdXRv
JiBmb250UGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKKworICAgIFVDaGFyIGxv
Y2FsZU5hbWVbTE9DQUxFX05BTUVfTUFYX0xFTkdUSCArIDFdID0geyB9OworICAgIGludCBsb2Nh
bGVMZW5ndGggPSBHZXRVc2VyRGVmYXVsdExvY2FsZU5hbWUocmVpbnRlcnByZXRfY2FzdDxMUFdT
VFI+KCZsb2NhbGVOYW1lKSwgTE9DQUxFX05BTUVfTUFYX0xFTkdUSCk7CisgICAgUkVMRUFTRV9B
U1NFUlQobG9jYWxlTGVuZ3RoIDw9IExPQ0FMRV9OQU1FX01BWF9MRU5HVEgpOworICAgIGxvY2Fs
ZU5hbWVbbG9jYWxlTGVuZ3RoXSA9ICdcMCc7CisKKyAgICBUZXh0QW5hbHl6ZXJIZWxwZXIgaGVs
cGVyKGxvY2FsZU5hbWUsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoKTsKKworICAgIGhyID0gYW5hbHl6
ZXItPkFuYWx5emVTY3JpcHQoJmhlbHBlciwgMCwgYnVmZmVyTGVuZ3RoLCAmaGVscGVyKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIHVuc2lnbmVkIHJldHVybmVk
Q291bnQgPSAwOworICAgIEdseXBoIGxvY2FsR2x5cGhCdWZmZXJbR2x5cGhQYWdlOjpzaXplXTsK
KyAgICBHbHlwaCBjbHVzdGVyTWFwW0dseXBoUGFnZTo6c2l6ZV07CisgICAgVmVjdG9yPERXUklU
RV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUz4gdGV4dFByb3BlcnRpZXMoR2x5cGhQYWdlOjpzaXpl
KTsKKyAgICBWZWN0b3I8RFdSSVRFX1NIQVBJTkdfR0xZUEhfUFJPUEVSVElFUz4gZ2x5cGhQcm9w
ZXJ0aWVzKEdseXBoUGFnZTo6c2l6ZSk7CisKKyAgICBociA9IGFuYWx5emVyLT5HZXRHbHlwaHMo
YnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnRQbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpLCBmb250
UGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwsIGZhbHNlLAorICAgICAgICAm
aGVscGVyLm1fYW5hbHlzaXMsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIDAs
IEdseXBoUGFnZTo6c2l6ZSwgY2x1c3Rlck1hcCwgdGV4dFByb3BlcnRpZXMuZGF0YSgpLAorICAg
ICAgICBsb2NhbEdseXBoQnVmZmVyLCBnbHlwaFByb3BlcnRpZXMuZGF0YSgpLCAmcmV0dXJuZWRD
b3VudCk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKKyAgICAgICAgR2x5cGgg
Z2x5cGggPSBsb2NhbEdseXBoQnVmZmVyW2ldOworICAgICAgICBpZiAoIWdseXBoKQorICAgICAg
ICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCAwKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBzZXRHbHlwaEZvckluZGV4KGksIGdseXBoKTsKKyAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGhhdmVHbHlwaHM7Cit9CisKK30K
KworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2lt
cGxlRm9udERhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhRGlyZWN0MkQuY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0
YURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkZvbnQuaCIKKworI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkNv
cmVUZXh0U1BJV2luLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udENh
Y2hlLmgiCisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdl
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFduZERDLmgiCisj
aW5jbHVkZSA8Y29tdXRpbC5oPgorI2luY2x1ZGUgPGR3cml0ZS5oPgorI2luY2x1ZGUgPG1sYW5n
Lmg+CisjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdW5vcm0u
aD4KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lEV3JpdGVGYWN0b3J5KiBGb250OjpzeXN0ZW1E
V3JpdGVGYWN0b3J5KCkKK3sKKyAgICBzdGF0aWMgSURXcml0ZUZhY3RvcnkqIGRpcmVjdFdyaXRl
RmFjdG9yeSA9IG51bGxwdHI7CisgICAgaWYgKCFkaXJlY3RXcml0ZUZhY3RvcnkpIHsKKyAgICAg
ICAgSFJFU1VMVCBociA9IERXcml0ZUNyZWF0ZUZhY3RvcnkoRFdSSVRFX0ZBQ1RPUllfVFlQRV9T
SEFSRUQsIF9fdXVpZG9mKGRpcmVjdFdyaXRlRmFjdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8SVVu
a25vd24qKj4oJmRpcmVjdFdyaXRlRmFjdG9yeSkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChT
VUNDRUVERUQoaHIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlyZWN0V3JpdGVGYWN0b3J5Owor
fQorCitJRFdyaXRlR2RpSW50ZXJvcCogRm9udDo6c3lzdGVtRFdyaXRlR2RpSW50ZXJvcCgpCit7
CisgICAgc3RhdGljIElEV3JpdGVHZGlJbnRlcm9wKiBkaXJlY3RXcml0ZUdkaUludGVyb3AgPSBu
dWxscHRyOworICAgIGlmICghZGlyZWN0V3JpdGVHZGlJbnRlcm9wKSB7CisgICAgICAgIEhSRVNV
TFQgaHIgPSBzeXN0ZW1EV3JpdGVGYWN0b3J5KCktPkdldEdkaUludGVyb3AoJmRpcmVjdFdyaXRl
R2RpSW50ZXJvcCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworICAg
IH0KKworICAgIHJldHVybiBkaXJlY3RXcml0ZUdkaUludGVyb3A7Cit9CisKK3N0YXRpYyBWZWN0
b3I8V0NIQVI+IGdldEZhY2VOYW1lKElEV3JpdGVGb250KiBmb250KQoreworICAgIGlmICghZm9u
dCkKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxXQ0hBUj4oKTsKKworICAgIENPTVB0cjxJRFdyaXRl
TG9jYWxpemVkU3RyaW5ncz4gbG9jYWxpemVkRmFjZU5hbWVzOworICAgIEhSRVNVTFQgaHIgPSBm
b250LT5HZXRGYWNlTmFtZXMoJmxvY2FsaXplZEZhY2VOYW1lcyk7CisgICAgUkVMRUFTRV9BU1NF
UlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBVSU5UMzIgbG9jYWxlSW5kZXggPSAwOworICAgIEJP
T0wgZXhpc3RzID0gZmFsc2U7CisKKyAgICB3Y2hhcl90IGxvY2FsZU5hbWVbTE9DQUxFX05BTUVf
TUFYX0xFTkdUSF07CisgICAgaW50IGxvY2FsZUxlbmd0aCA9IEdldFVzZXJEZWZhdWx0TG9jYWxl
TmFtZShsb2NhbGVOYW1lLCBMT0NBTEVfTkFNRV9NQVhfTEVOR1RIKTsKKyAgICBpZiAobG9jYWxl
TGVuZ3RoKQorICAgICAgICBociA9IGxvY2FsaXplZEZhY2VOYW1lcy0+RmluZExvY2FsZU5hbWUo
bG9jYWxlTmFtZSwgJmxvY2FsZUluZGV4LCAmZXhpc3RzKTsKKworICAgIGlmICghZXhpc3RzIHx8
ICFTVUNDRUVERUQoaHIpKQorICAgICAgICBociA9IGxvY2FsaXplZEZhY2VOYW1lcy0+RmluZExv
Y2FsZU5hbWUoTCJlbi11cyIsICZsb2NhbGVJbmRleCwgJmV4aXN0cyk7CisKKyAgICBpZiAoIWV4
aXN0cyB8fCAhU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgbG9jYWxlSW5kZXggPSAwOworCisgICAg
VUlOVDMyIGZhY2VOYW1lTGVuZ3RoID0gMDsKKyAgICBociA9IGxvY2FsaXplZEZhY2VOYW1lcy0+
R2V0U3RyaW5nTGVuZ3RoKGxvY2FsZUluZGV4LCAmZmFjZU5hbWVMZW5ndGgpOworICAgIGlmICgh
U1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxXQ0hBUj4oKTsKKworICAgIFZl
Y3RvcjxXQ0hBUj4gZmFjZU5hbWUoZmFjZU5hbWVMZW5ndGggKyAxKTsKKyAgICBociA9IGxvY2Fs
aXplZEZhY2VOYW1lcy0+R2V0U3RyaW5nKGxvY2FsZUluZGV4LCBmYWNlTmFtZS5kYXRhKCksIGZh
Y2VOYW1lLnNpemUoKSk7CisKKyAgICByZXR1cm4gZmFjZU5hbWU7Cit9CisKK3ZvaWQgRm9udDo6
cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3Jt
RGF0YS5zeW50aGV0aWNCb2xkKCkgPyAxLjBmIDogMC5mOworICAgIG1fc2NyaXB0Q2FjaGUgPSAw
OworICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMgPSAwOworCisgICAgaWYgKG1fcGxhdGZvcm1E
YXRhLnVzZUdESSgpKQorICAgICAgICByZXR1cm4gaW5pdEdESUZvbnQoKTsKKworICAgIGZsb2F0
IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKworICAgIGF1dG8gZm9udCA9IG1f
cGxhdGZvcm1EYXRhLmR3Rm9udCgpOworICAgIFJFTEVBU0VfQVNTRVJUKGZvbnQpOworCisgICAg
YXV0byBmb250RmFjZSA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9udEZhY2UoKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChmb250RmFjZSk7CisKKyAgICBEV1JJVEVfRk9OVF9NRVRSSUNTIGZvbnRNZXRyaWNz
OworICAgIGZvbnQtPkdldE1ldHJpY3MoJmZvbnRNZXRyaWNzKTsKKworICAgIGludCBpQXNjZW50
ID0gZm9udE1ldHJpY3MuYXNjZW50OworICAgIGludCBpRGVzY2VudCA9IGZvbnRNZXRyaWNzLmRl
c2NlbnQ7CisgICAgaW50IGlMaW5lR2FwID0gZm9udE1ldHJpY3MubGluZUdhcDsKKyAgICBpbnQg
aUNhcEhlaWdodCA9IGZvbnRNZXRyaWNzLmNhcEhlaWdodDsKKworICAgIHVuc2lnbmVkIHVuaXRz
UGVyRW0gPSBmb250TWV0cmljcy5kZXNpZ25Vbml0c1BlckVtOworICAgIGZsb2F0IGZBc2NlbnQg
PSBzY2FsZUVtVG9Vbml0cyhpQXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKyAgICBm
bG9hdCBmRGVzY2VudCA9IHNjYWxlRW1Ub1VuaXRzKGlEZXNjZW50LCB1bml0c1BlckVtKSAqIHBv
aW50U2l6ZTsKKyAgICBmbG9hdCBmQ2FwSGVpZ2h0ID0gc2NhbGVFbVRvVW5pdHMoaUNhcEhlaWdo
dCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgZmxvYXQgZkxpbmVHYXAgPSBzY2FsZUVt
VG9Vbml0cyhpTGluZUdhcCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisKKyAgICBpZiAoIWlz
Q3VzdG9tRm9udCgpKSB7CisgICAgICAgIFZlY3RvcjxXQ0hBUj4gZmFjZU5hbWUgPSBnZXRGYWNl
TmFtZShmb250KTsKKyAgICAgICAgZkFzY2VudCA9IGFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50
SGFjayhmYWNlTmFtZS5kYXRhKCksIGZBc2NlbnQsIGZEZXNjZW50KTsKKyAgICB9CisKKyAgICBt
X2ZvbnRNZXRyaWNzLnNldEFzY2VudChmQXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldERl
c2NlbnQoZkRlc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVpZ2h0KGZDYXBIZWln
aHQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChmTGluZUdhcCk7CisgICAgbV9mb250
TWV0cmljcy5zZXRMaW5lU3BhY2luZyhscm91bmRmKGZBc2NlbnQpICsgbHJvdW5kZihmRGVzY2Vu
dCkgKyBscm91bmRmKGZMaW5lR2FwKSk7CisKKyAgICBHbHlwaCB4R2x5cGggPSBnbHlwaERhdGFG
b3JDaGFyYWN0ZXIoJ3gnKS5nbHlwaDsKKworICAgIGlmICh4R2x5cGgpIHsKKyAgICAgICAgLy8g
TWVhc3VyZSB0aGUgYWN0dWFsIGNoYXJhY3RlciAieCIsIHNpbmNlIGl0J3MgcG9zc2libGUgZm9y
IGl0IHRvIGV4dGVuZCBiZWxvdyB0aGUgYmFzZWxpbmUsIGFuZCB3ZSBuZWVkIHRoZQorICAgICAg
ICAvLyByZXBvcnRlZCB4LWhlaWdodCB0byBvbmx5IGluY2x1ZGUgdGhlIHBvcnRpb24gb2YgdGhl
IGdseXBoIHRoYXQgaXMgYWJvdmUgdGhlIGJhc2VsaW5lLgorICAgICAgICBWZWN0b3I8RFdSSVRF
X0dMWVBIX01FVFJJQ1M+IGdseXBoTWV0cmljcygxKTsKKyAgICAgICAgSFJFU1VMVCBociA9IGZv
bnRGYWNlLT5HZXREZXNpZ25HbHlwaE1ldHJpY3MoJnhHbHlwaCwgMSwgZ2x5cGhNZXRyaWNzLmRh
dGEoKSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgICAgICBtX2ZvbnRNZXRyaWNzLnNl
dFhIZWlnaHQoc2NhbGVFbVRvVW5pdHMoZ2x5cGhNZXRyaWNzLmZpcnN0KCkudmVydGljYWxPcmln
aW5ZLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50
IGlYSGVpZ2h0ID0gZm9udE1ldHJpY3MueEhlaWdodDsKKyAgICAgICAgbV9mb250TWV0cmljcy5z
ZXRYSGVpZ2h0KHNjYWxlRW1Ub1VuaXRzKGlYSGVpZ2h0LCB1bml0c1BlckVtKSAqIHBvaW50U2l6
ZSk7CisgICAgfQorCisgICAgbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVyRW0p
OworfQorCitGbG9hdFJlY3QgRm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3QKK3sKKyAgICBpZiAoIXBsYXRmb3JtRGF0YSgpLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuIEZsb2F0UmVjdCgpOworCisgICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKQorICAg
ICAgICByZXR1cm4gYm91bmRzRm9yR0RJR2x5cGgoZ2x5cGgpOworCisgICAgYXV0byBmb250ID0g
bV9wbGF0Zm9ybURhdGEuZHdGb250KCk7CisgICAgUkVMRUFTRV9BU1NFUlQoZm9udCk7CisKKyAg
ICBhdXRvIGZvbnRGYWNlID0gbV9wbGF0Zm9ybURhdGEuZHdGb250RmFjZSgpOworICAgIFJFTEVB
U0VfQVNTRVJUKGZvbnRGYWNlKTsKKworICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1E
YXRhLnNpemUoKTsKKyAgICBib29sIHZlcnRpY2FsID0gbV9wbGF0Zm9ybURhdGEub3JpZW50YXRp
b24oKSA9PSBWZXJ0aWNhbDsKKworICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfTUVUUklDUz4gZ2x5
cGhNZXRyaWNzKDEpOworICAgIEhSRVNVTFQgaHIgPSBmb250RmFjZS0+R2V0RGVzaWduR2x5cGhN
ZXRyaWNzKCZnbHlwaCwgMSwgZ2x5cGhNZXRyaWNzLmRhdGEoKSwgbV9wbGF0Zm9ybURhdGEub3Jp
ZW50YXRpb24oKSA9PSBWZXJ0aWNhbCk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7CisKKyAgICBjb25zdCBhdXRvJiBtZXRyaWNzID0gZ2x5cGhNZXRyaWNzLmZpcnN0KCk7CisK
KyAgICB1bnNpZ25lZCB1bml0c1BlckVtID0gbV9mb250TWV0cmljcy51bml0c1BlckVtKCk7CisK
KyAgICBGbG9hdFBvaW50IG9yaWdpbihzY2FsZUVtVG9Vbml0cyhtZXRyaWNzLmxlZnRTaWRlQmVh
cmluZywgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUsIHNjYWxlRW1Ub1VuaXRzKG1ldHJpY3MudmVy
dGljYWxPcmlnaW5ZLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7CisgICAgRmxvYXRTaXplIHNp
emUoc2NhbGVFbVRvVW5pdHMobWV0cmljcy5hZHZhbmNlV2lkdGggLSBtZXRyaWNzLmxlZnRTaWRl
QmVhcmluZyAtIG1ldHJpY3MucmlnaHRTaWRlQmVhcmluZywgdW5pdHNQZXJFbSkgKiBwb2ludFNp
emUsCisgICAgICAgIHNjYWxlRW1Ub1VuaXRzKG1ldHJpY3MuYWR2YW5jZUhlaWdodCAtIG1ldHJp
Y3MudG9wU2lkZUJlYXJpbmcgLSBtZXRyaWNzLmJvdHRvbVNpZGVCZWFyaW5nLCB1bml0c1BlckVt
KSAqIHBvaW50U2l6ZSk7CisKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3gob3JpZ2luLCBzaXpl
KTsKKyAgICBpZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0KQorICAgICAgICBib3VuZGluZ0JveC5z
ZXRXaWR0aChib3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKKwor
ICAgIHJldHVybiBib3VuZGluZ0JveDsKK30KKworZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZv
ckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAgIGlmICghcGxhdGZvcm1EYXRhKCkuc2l6
ZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREko
KSkKKyAgICAgICAgcmV0dXJuIHdpZHRoRm9yR0RJR2x5cGgoZ2x5cGgpOworCisgICAgQVNTRVJU
KGdseXBoKTsKKworICAgIGF1dG8gZm9udCA9IG1fcGxhdGZvcm1EYXRhLmR3Rm9udCgpOworICAg
IFJFTEVBU0VfQVNTRVJUKGZvbnQpOworCisgICAgYXV0byBmb250RmFjZSA9IG1fcGxhdGZvcm1E
YXRhLmR3Rm9udEZhY2UoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChmb250RmFjZSk7CisKKyAgICBi
b29sIGlzVmVydGljYWwgPSBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IFZlcnRpY2Fs
OworCisgICAgVmVjdG9yPERXUklURV9HTFlQSF9NRVRSSUNTPiBnbHlwaE1ldHJpY3MoMSk7Cisg
ICAgSFJFU1VMVCBociA9IGZvbnRGYWNlLT5HZXREZXNpZ25HbHlwaE1ldHJpY3MoJmdseXBoLCAx
LCBnbHlwaE1ldHJpY3MuZGF0YSgpLCBpc1ZlcnRpY2FsKTsKKyAgICBSRUxFQVNFX0FTU0VSVChT
VUNDRUVERUQoaHIpKTsKKworICAgIGNvbnN0IGF1dG8mIG1ldHJpY3MgPSBnbHlwaE1ldHJpY3Mu
Zmlyc3QoKTsKKyAgICBpbnQgd2lkdGhJbkVtID0gbWV0cmljcy5hZHZhbmNlV2lkdGg7CisKKyAg
ICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7CisgICAgdW5zaWduZWQg
dW5pdHNQZXJFbSA9IG1fZm9udE1ldHJpY3MudW5pdHNQZXJFbSgpOworICAgIGZsb2F0IHdpZHRo
ID0gc2NhbGVFbVRvVW5pdHMod2lkdGhJbkVtLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKwor
ICAgIHJldHVybiB3aWR0aCArIG1fc3ludGhldGljQm9sZE9mZnNldDsKK30KKworfQorCisjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6
ZXJIZWxwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6ZXJIZWxwZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dEFu
YWx5emVySGVscGVyLmgiCisKKyNpZiBVU0UoRElSRUNUMkQpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworVGV4dEFuYWx5emVySGVscGVyOjpUZXh0QW5hbHl6ZXJIZWxwZXIoV0NIQVIqIGxvY2Fs
ZU5hbWUsIFdDSEFSKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKKyAgICA6IG1fbG9j
YWxlTmFtZShsb2NhbGVOYW1lKQorICAgICwgbV9idWZmZXIoYnVmZmVyKQorICAgICwgbV9idWZm
ZXJMZW5ndGgoYnVmZmVyTGVuZ3RoKQoreworfQorCitIUkVTVUxUIFRleHRBbmFseXplckhlbHBl
cjo6UXVlcnlJbnRlcmZhY2UoX0luXyBSRUZJSUQgcmlpZCwgX0NPTV9PdXRwdHJfIHZvaWQqKiBw
cHZPYmplY3QpCit7CisgICAgaWYgKCFwcHZPYmplY3QpCisgICAgICAgIHJldHVybiBFX1BPSU5U
RVI7CisgICAgKnBwdk9iamVjdCA9IG51bGxwdHI7CisgICAgaWYgKElzRXF1YWxHVUlEKHJpaWQs
IF9fdXVpZG9mKElEV3JpdGVUZXh0QW5hbHlzaXNTaW5rKSkpCisgICAgICAgICpwcHZPYmplY3Qg
PSBzdGF0aWNfY2FzdDxJRFdyaXRlVGV4dEFuYWx5c2lzU2luayo+KHRoaXMpOworICAgIGVsc2Ug
aWYgKElzRXF1YWxHVUlEKHJpaWQsIF9fdXVpZG9mKElEV3JpdGVUZXh0QW5hbHlzaXNTb3VyY2Up
KSkKKyAgICAgICAgKnBwdk9iamVjdCA9IHN0YXRpY19jYXN0PElEV3JpdGVUZXh0QW5hbHlzaXNT
aW5rKj4odGhpcyk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgQWRk
UmVmKCk7CisgICAgcmV0dXJuIFNfT0s7Cit9CisKK1VMT05HIFRleHRBbmFseXplckhlbHBlcjo6
QWRkUmVmKCkKK3sKKyAgICByZXR1cm4gKyttX3JlZkNvdW50OworfQorCitVTE9ORyBUZXh0QW5h
bHl6ZXJIZWxwZXI6OlJlbGVhc2UoKQoreworICAgIFVMT05HIG5ld1JlZiA9IC0tbV9yZWZDb3Vu
dDsKKyAgICBpZiAoIW5ld1JlZikKKyAgICAgICAgZGVsZXRlKHRoaXMpOworCisgICAgcmV0dXJu
IG5ld1JlZjsKK30KKworSFJFU1VMVCBUZXh0QW5hbHl6ZXJIZWxwZXI6OkdldFRleHRBdFBvc2l0
aW9uKFVJTlQzMiB0ZXh0UG9zaXRpb24sIGNvbnN0IFdDSEFSKiogdGV4dFN0cmluZywgVUlOVDMy
KiB0ZXh0TGVuZ3RoKQoreworICAgIGlmICghdGV4dFN0cmluZyB8fCAhdGV4dExlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKKworICAgIGlmICh0ZXh0UG9zaXRpb24gPj0gbV9idWZm
ZXJMZW5ndGgpIHsKKyAgICAgICAgKnRleHRTdHJpbmcgPSBudWxscHRyOworICAgICAgICAqdGV4
dExlbmd0aCA9IDA7CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKworICAgICp0ZXh0U3Ry
aW5nID0gJm1fYnVmZmVyW3RleHRQb3NpdGlvbl07CisgICAgKnRleHRMZW5ndGggPSBtX2J1ZmZl
ckxlbmd0aCAtIHRleHRQb3NpdGlvbjsKKworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxU
IFRleHRBbmFseXplckhlbHBlcjo6R2V0VGV4dEJlZm9yZVBvc2l0aW9uKFVJTlQzMiB0ZXh0UG9z
aXRpb24sIGNvbnN0IFdDSEFSKiogdGV4dFN0cmluZywgVUlOVDMyKiB0ZXh0TGVuZ3RoKQorewor
ICAgIGlmICghdGV4dFN0cmluZyB8fCAhdGV4dExlbmd0aCkKKyAgICAgICAgcmV0dXJuIEVfUE9J
TlRFUjsKKworICAgIGlmICghdGV4dFBvc2l0aW9uIHx8IHRleHRQb3NpdGlvbiA+IG1fYnVmZmVy
TGVuZ3RoKSB7CisgICAgICAgICp0ZXh0U3RyaW5nID0gbnVsbHB0cjsKKyAgICAgICAgKnRleHRM
ZW5ndGggPSAwOworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9CisKKyAgICAqdGV4dFN0cmlu
ZyA9ICZtX2J1ZmZlclswXTsKKyAgICAqdGV4dExlbmd0aCA9IHRleHRQb3NpdGlvbjsKKworICAg
IHJldHVybiBTX09LOworfQorCitIUkVTVUxUIFRleHRBbmFseXplckhlbHBlcjo6R2V0TG9jYWxl
TmFtZShVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIqIHRleHRMZW5ndGgsIGNvbnN0IFdDSEFS
KiogbG9jYWxlTmFtZSkKK3sKKyAgICAqbG9jYWxlTmFtZSA9IG1fbG9jYWxlTmFtZTsKKyAgICAq
dGV4dExlbmd0aCA9IG1fYnVmZmVyTGVuZ3RoIC0gdGV4dFBvc2l0aW9uOworCisgICAgcmV0dXJu
IFNfT0s7Cit9CisKK0hSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpHZXROdW1iZXJTdWJzdGl0
dXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyKiB0ZXh0TGVuZ3RoLCBJRFdyaXRlTnVt
YmVyU3Vic3RpdHV0aW9uKiogbnVtYmVyU3Vic3RpdHV0aW9uKQoreworICAgICp0ZXh0TGVuZ3Ro
ID0gbV9idWZmZXJMZW5ndGggLSB0ZXh0UG9zaXRpb247CisgICAgcmV0dXJuIFNfT0s7Cit9CisK
K0hSRVNVTFQgVGV4dEFuYWx5emVySGVscGVyOjpTZXRMaW5lQnJlYWtwb2ludHMoVUlOVDMyIHRl
eHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIGNvbnN0IERXUklURV9MSU5FX0JSRUFLUE9J
TlQqKQoreworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgVGV4dEFuYWx5emVy
SGVscGVyOjpTZXRTY3JpcHRBbmFseXNpcyhVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4
dExlbmd0aCwgY29uc3QgRFdSSVRFX1NDUklQVF9BTkFMWVNJUyogYW5hbHlzaXMpCit7CisgICAg
bV9hbmFseXNpcyA9ICphbmFseXNpczsKKworICAgIHJldHVybiBTX09LOworfQorCitIUkVTVUxU
IFRleHRBbmFseXplckhlbHBlcjo6U2V0QmlkaUxldmVsKFVJTlQzMiB0ZXh0UG9zaXRpb24sIFVJ
TlQzMiB0ZXh0TGVuZ3RoLCBVSU5UOCBleHBsaWNpdExldmVsLCBVSU5UOCByZXNvbHZlZExldmVs
KQoreworICAgIHJldHVybiBFX05PVElNUEw7Cit9CisKK0hSRVNVTFQgVGV4dEFuYWx5emVySGVs
cGVyOjpTZXROdW1iZXJTdWJzdGl0dXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRl
eHRMZW5ndGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qKQoreworICAgIHJldHVybiBFX05P
VElNUEw7Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vVGV4dEFuYWx5emVySGVscGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1RleHRBbmFseXplckhlbHBlci5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9UZXh0QW5hbHl6
ZXJIZWxwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPGR3cml0ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBUZXh0QW5hbHl6
ZXJIZWxwZXIgOiBwdWJsaWMgSURXcml0ZVRleHRBbmFseXNpc1NpbmssIElEV3JpdGVUZXh0QW5h
bHlzaXNTb3VyY2UgeworICAgIFRleHRBbmFseXplckhlbHBlcihXQ0hBUiogbG9jYWxlTmFtZSwg
V0NIQVIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKTsKKworICAgIC8vIElVbmtub3du
CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKF9J
bl8gUkVGSUlELCBfQ09NX091dHB0cl8gdm9pZCoqKTsKKyAgICB2aXJ0dWFsIFVMT05HIFNURE1F
VEhPRENBTExUWVBFIEFkZFJlZigpOworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZ
UEUgUmVsZWFzZSgpOworCisgICAgLy8gSURXcml0ZVRleHRBbmFseXNpc1NvdXJjZSAKKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0VGV4dEF0UG9zaXRpb24oVUlOVDMy
IHRleHRQb3NpdGlvbiwgY29uc3QgV0NIQVIqKiB0ZXh0U3RyaW5nLCBVSU5UMzIqIHRleHRMZW5n
dGgpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRUZXh0QmVmb3Jl
UG9zaXRpb24oVUlOVDMyIHRleHRQb3NpdGlvbiwgY29uc3QgV0NIQVIqKiB0ZXh0U3RyaW5nLCBV
SU5UMzIqIHRleHRMZW5ndGgpOworICAgIHZpcnR1YWwgRFdSSVRFX1JFQURJTkdfRElSRUNUSU9O
IFNURE1FVEhPRENBTExUWVBFIEdldFBhcmFncmFwaFJlYWRpbmdEaXJlY3Rpb24oKSB7IHJldHVy
biBEV1JJVEVfUkVBRElOR19ESVJFQ1RJT05fTEVGVF9UT19SSUdIVDsgfQorICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRMb2NhbGVOYW1lKFVJTlQzMiB0ZXh0UG9zaXRp
b24sIFVJTlQzMiogdGV4dExlbmd0aCwgY29uc3QgV0NIQVIqKiBsb2NhbGVOYW1lKTsKKyAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0TnVtYmVyU3Vic3RpdHV0aW9uKFVJ
TlQzMiB0ZXh0UG9zaXRpb24sIFVJTlQzMiogdGV4dExlbmd0aCwgSURXcml0ZU51bWJlclN1YnN0
aXR1dGlvbioqKTsKKworICAgIC8vIElEV3JpdGVUZXh0QW5hbHlzaXNTaW5rCisgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNldExpbmVCcmVha3BvaW50cyhVSU5UMzIgdGV4
dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgY29uc3QgRFdSSVRFX0xJTkVfQlJFQUtQT0lO
VCopOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXRTY3JpcHRBbmFs
eXNpcyhVSU5UMzIgdGV4dFBvc2l0aW9uLCBVSU5UMzIgdGV4dExlbmd0aCwgY29uc3QgRFdSSVRF
X1NDUklQVF9BTkFMWVNJUyopOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBTZXRCaWRpTGV2ZWwoVUlOVDMyIHRleHRQb3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIFVJ
TlQ4IGV4cGxpY2l0TGV2ZWwsIFVJTlQ4IHJlc29sdmVkTGV2ZWwpOworICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTZXROdW1iZXJTdWJzdGl0dXRpb24oVUlOVDMyIHRleHRQ
b3NpdGlvbiwgVUlOVDMyIHRleHRMZW5ndGgsIElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qKTsK
KworICAgIFdDSEFSKiBtX2xvY2FsZU5hbWUgeyBudWxscHRyIH07CisgICAgV0NIQVIqIG1fYnVm
ZmVyIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fYnVmZmVyTGVuZ3RoIHsgMCB9OworICAg
IERXUklURV9TQ1JJUFRfQU5BTFlTSVMgbV9hbmFseXNpcyB7IH07CisgICAgVUxPTkcgbV9yZWZD
b3VudCB7IDAgfTsKK307CisKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>