<?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>226159</bug_id>
          
          <creation_ts>2021-05-23 16:24:04 -0700</creation_ts>
          <short_desc>prevent GPU process from rendering sbix glyphs</short_desc>
          <delta_ts>2021-05-26 23:43:04 -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 Local 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron McCormack (:heycam)">heycam</reporter>
          <assigned_to name="Cameron McCormack (:heycam)">heycam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1762978</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-23 16:24:04 -0700</bug_when>
    <thetext>When GPUP canvas is enabled, the display list recorder handles sbix glyphs by recording drawImage calls.  This means that during display list replay, we should not have any sbix glyphs in a DrawGlyphs display list item.  Let&apos;s check that this is indeed the case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762979</commentid>
    <comment_count>1</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-23 16:24:58 -0700</bug_when>
    <thetext>&lt;rdar://77231959&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762984</commentid>
    <comment_count>2</comment_count>
      <attachid>429489</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-23 17:17:17 -0700</bug_when>
    <thetext>Created attachment 429489
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762988</commentid>
    <comment_count>3</comment_count>
      <attachid>429491</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-23 17:46:20 -0700</bug_when>
    <thetext>Created attachment 429491
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762993</commentid>
    <comment_count>4</comment_count>
      <attachid>429491</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-23 18:41:34 -0700</bug_when>
    <thetext>Comment on attachment 429491
Patch

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

&gt; Source/WebCore/ChangeLog:13
&gt; +        item. This patch checks for such glyphs (like we already do for SVG
&gt; +        glyphs) and returns early if they&apos;re found.

Maybe some day we can find a way to turn this into an allow list style mechanism rather than a deny list one. It’s a better security design to have a list of what is safe to use rather than a list of reasons glyphs are unsafe.

&gt; Source/WebCore/ChangeLog:24
&gt; +        assertion to avoid unnecessarily crashing teh GPUP, and instead return

Typo: &quot;teh&quot;

&gt; Source/WebCore/platform/graphics/coretext/FontCascadeCoreText.cpp:193
&gt; +    if (isInGPUProcess() &amp;&amp; font.hasAnyComplexColorFormatGlyphs(glyphs, numGlyphs)) {

A shame we have to do so much work just to check if it’s safe to use each glyph. A little bit scary from a performance point of view. I wonder if there’s a way to do this in future that is more efficient, perhaps with some help from CoreText?

&gt; Source/WebCore/platform/graphics/coretext/FontCascadeCoreText.cpp:194
&gt; +        ASSERT_NOT_REACHED();

The old code did RELEASE_ASSERT, so intentionally crashed in when encountering an unexpected font/glyph combination. The new code instead quietly does nothing in production builds. Was the old behavior better or is the new behavior better?

&gt; Source/WebCore/platform/graphics/coretext/FontCoreText.cpp:820
&gt; +    if (m_hasNoComplexColorFormatGlyphs)
&gt; +        return false;
&gt; +
&gt; +    if (!m_glyphsWithComplexColorFormat) {

This is probably one of the best ways to organize this for relative simplicity. But it’s sort of funny to use Optional and also use a bitfield. Optional stores a boolean in a way that’s not very space-efficient. And the bitfield in turn trades in cleaner coding idioms (like initializing in the class definition) for greater efficiency.

If possible I would slightly prefer a representation where there are no invalid states. The logical equivalent of a Variant with one value that says &quot;don&apos;t know&quot;, another that says &quot;no complex glyphs&quot;, and a third state that indicates &quot;here is the BitVector&quot;. Not really suggesting we change anything. But this one does have the state where there is a bit vector, but m_hasNoComplexColorFormatGlyphs is true; a state we will never get into of course.

Would be nice to break out the one-time code for computing m_glyphsWithComplexColorFormat into its own function. For one thing it could go into a separate FontCocoa.mm file. And could make the logic of the function here easier to read. I understand that by having in this function we can do a &quot;m_hasNoComplexColorFormatGlyphs = true, return false&quot; right in the middle of it, but I think the separation of concerns would still be a plus.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762998</commentid>
    <comment_count>5</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-23 19:44:12 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #4)
&gt; &gt; Source/WebCore/platform/graphics/coretext/FontCascadeCoreText.cpp:193
&gt; &gt; +    if (isInGPUProcess() &amp;&amp; font.hasAnyComplexColorFormatGlyphs(glyphs, numGlyphs)) {
&gt; 
&gt; A shame we have to do so much work just to check if it’s safe to use each
&gt; glyph. A little bit scary from a performance point of view. I wonder if
&gt; there’s a way to do this in future that is more efficient, perhaps with some
&gt; help from CoreText?

Yes, one option would be to have some API to tell CoreText &quot;here are the allowed glyph formats&quot;, and rely on it checking that state for each glyph that is drawn.

Though it is only done for fonts that have SVG or sbix glyphs in them.  After the first drawGlyphs call, when the BitVector is initialized, it devolves to a loop and a bitcheck for each glyph ID in the array.  My intuition is that compared with the amount of work that goes into the actual drawing of the glyphs, this is small.  (OK yes, never trust intuition when it comes to performance. :-))

&gt; &gt; Source/WebCore/platform/graphics/coretext/FontCascadeCoreText.cpp:194
&gt; &gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; The old code did RELEASE_ASSERT, so intentionally crashed in when
&gt; encountering an unexpected font/glyph combination. The new code instead
&gt; quietly does nothing in production builds. Was the old behavior better or is
&gt; the new behavior better?

Advice I received was that the new behavior is preferred so that, if an attacker did find a way to include disallowed glyph types in the display list items, that it would not allow them to DoS the browser by killing the GPU process.

&gt; &gt; Source/WebCore/platform/graphics/coretext/FontCoreText.cpp:820
&gt; &gt; +    if (m_hasNoComplexColorFormatGlyphs)
&gt; &gt; +        return false;
&gt; &gt; +
&gt; &gt; +    if (!m_glyphsWithComplexColorFormat) {
&gt; 
&gt; This is probably one of the best ways to organize this for relative
&gt; simplicity. But it’s sort of funny to use Optional and also use a bitfield.
&gt; Optional stores a boolean in a way that’s not very space-efficient. And the
&gt; bitfield in turn trades in cleaner coding idioms (like initializing in the
&gt; class definition) for greater efficiency.
&gt; 
&gt; If possible I would slightly prefer a representation where there are no
&gt; invalid states. The logical equivalent of a Variant with one value that says
&gt; &quot;don&apos;t know&quot;, another that says &quot;no complex glyphs&quot;, and a third state that
&gt; indicates &quot;here is the BitVector&quot;. Not really suggesting we change anything.
&gt; But this one does have the state where there is a bit vector, but
&gt; m_hasNoComplexColorFormatGlyphs is true; a state we will never get into of
&gt; course.

I guess Variant is not quite what we want, in that while you could mint some enum types to represent the two &quot;no BitVector&quot; states, it&apos;s not as ergonomic as you&apos;d like:

  enum ComplexColorGlyphsState { Unknown, None };
  Variant&lt;ComplexColorGlyphsState, BitVector&gt; m_glyphsWithComplexColorFormat;

or:

  enum ComplexColorGlyphsUnknown { State };
  enum ComplexColorGlyphsNone { State };
  Variant&lt;ComplexColorGlyphsUnknown, ComplexColorGlyphsNone, BitVector&gt; m_glyphs...;

Really I&apos;m working around the fact that BitVector doesn&apos;t record whether all its bits are empty.  It has an isEmpty() which works slowly by counting bits, when it&apos;s spilled its inline storage.

(BitVector has some constructors for values to represent &quot;empty&quot; and &quot;deleted&quot;, for hash table usage.  These aren&apos;t real BitVector values, and calling most member functions of a BitVector in this state would crash.  So we could use the &quot;empty&quot; value here to saving having the separate state which records whether the BitVector is empty.  But it feels slightly hacky.)

(Option could be taught to use these hash traits to save space too, when there&apos;s a distinct &quot;empty&quot; value that could be used instead of a separate boolean.)

&gt; Would be nice to break out the one-time code for computing
&gt; m_glyphsWithComplexColorFormat into its own function. For one thing it could
&gt; go into a separate FontCocoa.mm file. And could make the logic of the
&gt; function here easier to read. I understand that by having in this function
&gt; we can do a &quot;m_hasNoComplexColorFormatGlyphs = true, return false&quot; right in
&gt; the middle of it, but I think the separation of concerns would still be a
&gt; plus.

I&apos;ll look into doing that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762999</commentid>
    <comment_count>6</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-23 19:50:17 -0700</bug_when>
    <thetext>And Optional&lt;Optional&lt;BitVector&gt;&gt; prevents being able to represent impossible states, at the cost of more storage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763007</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-23 21:04:10 -0700</bug_when>
    <thetext>(In reply to Cameron McCormack (:heycam) from comment #6)
&gt; And Optional&lt;Optional&lt;BitVector&gt;&gt; prevents being able to represent
&gt; impossible states, at the cost of more storage.

And to be fair, also at the cost of more subtlety and confusion. We end up using Optional&lt;Optional&gt; when decoding optionals, and I think it’s pretty confusing. The various hasValue checks look so similar. Like x.hasValue and x-&gt;hasValue meaning totally different things, although I suppose !x and !*x are less easily confusable.

Because of issues like these, Sam Weinig has discouraged us from using Optional&lt;bool&gt;.

The search for something clear, straightforward, and unambiguous continues, I suppose. I think what you chose for this patch is fine, and it would also be nice to strive for better and reflect even after landing it.

The fact that BitVector doesn’t record when all its bits are empty makes sense to me when you think of it as a packed implementation of a vector of booleans. One would not expect a vector to keep track of whether all its values are false any more than a vector of integers keeps track of whether all its values are 0.

But I totally agree that we could make something like that for purposes like this one. The abstraction of a vector that knows how to not allocate any storage at all when it’s all false and that also can efficiently answer the &quot;are these all false&quot; question makes a lot of sense, and a lazily-computed one of those, using Optional, might be great for this use. In fact no reason we can’t just create that, built on top of BitVector. So maybe that’s the way to go to make an incremental improvement?

I often encourage people to make these classes &quot;in place&quot; at first, sharing the header with the class that uses them, then move them to WTF when the urge to use them elsewhere arises.

Anyway, really don’t want to slow you down; this patch is already excellent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763016</commentid>
    <comment_count>8</comment_count>
      <attachid>429491</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-05-23 22:01:16 -0700</bug_when>
    <thetext>Comment on attachment 429491
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/coretext/FontCoreText.cpp:820
&gt;&gt; +    if (!m_glyphsWithComplexColorFormat) {
&gt; 
&gt; This is probably one of the best ways to organize this for relative simplicity. But it’s sort of funny to use Optional and also use a bitfield. Optional stores a boolean in a way that’s not very space-efficient. And the bitfield in turn trades in cleaner coding idioms (like initializing in the class definition) for greater efficiency.
&gt; 
&gt; If possible I would slightly prefer a representation where there are no invalid states. The logical equivalent of a Variant with one value that says &quot;don&apos;t know&quot;, another that says &quot;no complex glyphs&quot;, and a third state that indicates &quot;here is the BitVector&quot;. Not really suggesting we change anything. But this one does have the state where there is a bit vector, but m_hasNoComplexColorFormatGlyphs is true; a state we will never get into of course.
&gt; 
&gt; Would be nice to break out the one-time code for computing m_glyphsWithComplexColorFormat into its own function. For one thing it could go into a separate FontCocoa.mm file. And could make the logic of the function here easier to read. I understand that by having in this function we can do a &quot;m_hasNoComplexColorFormatGlyphs = true, return false&quot; right in the middle of it, but I think the separation of concerns would still be a plus.

I was actually going to say this, but it looks like Darin got here first :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763018</commentid>
    <comment_count>9</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-23 22:05:58 -0700</bug_when>
    <thetext>I&apos;ve split that function out (patch up in a bit), and it reads better now.  Thanks for the suggestion.  But I&apos;ll leave it in FontCoreText.cpp since it looks like all other similar &quot;CoreText but not Windows&quot; code is in this file, and I&apos;d like to keep this new function near the function that uses it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763037</commentid>
    <comment_count>10</comment_count>
      <attachid>429505</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-23 23:21:26 -0700</bug_when>
    <thetext>Created attachment 429505
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763178</commentid>
    <comment_count>11</comment_count>
      <attachid>429505</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-05-24 10:22:19 -0700</bug_when>
    <thetext>Comment on attachment 429505
Patch

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

&gt; Source/WebCore/platform/graphics/coretext/FontCoreText.cpp:811
&gt; +    unsigned glyphCount = CTFontGetGlyphCount(getCTFont());

CTFontGetGlyphCount returns a CFIndex (and it&apos;s possible it might return -1 in some error case). It think you should use CFIndex here.

&gt; Source/WebCore/platform/graphics/coretext/FontCoreText.cpp:814
&gt; +    for (unsigned glyphID = 0; glyphID &lt; glyphCount; ++glyphID) {

This goes through every glyph in the font? That sounds expensive. Did you measure how long this takes?

For short strings, wouldn&apos;t it be more efficient to check each glyph in the string, rather than building up the bit vector?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763233</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-05-24 13:40:40 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #11)
&gt; Comment on attachment 429505 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=429505&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coretext/FontCoreText.cpp:811
&gt; &gt; +    unsigned glyphCount = CTFontGetGlyphCount(getCTFont());
&gt; 
&gt; CTFontGetGlyphCount returns a CFIndex (and it&apos;s possible it might return -1
&gt; in some error case). It think you should use CFIndex here.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/coretext/FontCoreText.cpp:814
&gt; &gt; +    for (unsigned glyphID = 0; glyphID &lt; glyphCount; ++glyphID) {
&gt; 
&gt; This goes through every glyph in the font? That sounds expensive. Did you
&gt; measure how long this takes?
&gt; 
&gt; For short strings, wouldn&apos;t it be more efficient to check each glyph in the
&gt; string, rather than building up the bit vector?

Myles tells me this is probably OK. I think there are two bits of info that didn&apos;t make it into the changelog:
1. Most fonts don&apos;t have SBIX tables.
2. CTFontGetSbixImageSizeForGlyphAndContentsScale does internal caching.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763296</commentid>
    <comment_count>13</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-24 15:54:11 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #11)
&gt; This goes through every glyph in the font? That sounds expensive. Did you
&gt; measure how long this takes?

Thanks for the prompt to measure.  I think in the end is a little slow -- on Apple Color Emoji (realistically where we&apos;ll run into this) -- which has ~3,400 glyphs, the loop to initialize the BitVector takes ~24 ms.  And that&apos;s on my fast desktop machine.

I will switch to caching individual bits, rather than eagerly computing them for all glyphs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763433</commentid>
    <comment_count>14</comment_count>
      <attachid>429628</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-24 21:31:25 -0700</bug_when>
    <thetext>Created attachment 429628
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763434</commentid>
    <comment_count>15</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-24 21:32:21 -0700</bug_when>
    <thetext>I took the opportunity to prevent some of the &quot;invalid state combinations&quot; Darin mentioned too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763435</commentid>
    <comment_count>16</comment_count>
      <attachid>429629</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-24 21:40:38 -0700</bug_when>
    <thetext>Created attachment 429629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763436</commentid>
    <comment_count>17</comment_count>
      <attachid>429628</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-24 21:41:04 -0700</bug_when>
    <thetext>Comment on attachment 429628
Patch

r? for Myles to take a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763545</commentid>
    <comment_count>18</comment_count>
      <attachid>429629</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-05-25 09:53:36 -0700</bug_when>
    <thetext>Comment on attachment 429629
Patch

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

&gt; Source/WebCore/platform/graphics/Font.h:276
&gt; +        static constexpr size_t validBit(Glyph glyphID) { return static_cast&lt;size_t&gt;(glyphID) * 2; }
&gt; +        static constexpr size_t valueBit(Glyph glyphID) { return static_cast&lt;size_t&gt;(glyphID) * 2 + 1; }

&quot;valid&quot; and &quot;value&quot; are so close they make this code hard to read.

&gt; Source/WebCore/platform/graphics/Font.h:284
&gt; +        BitVector m_bits;

Maybe a comment here saying that there are 2 bits per glyph, ordered [valid, value, ...]

&gt; Source/WebCore/platform/graphics/coretext/FontCascadeCoreText.cpp:194
&gt; +        ASSERT_NOT_REACHED();

Should this be a RELEASE_ASSERT?

&gt; Source/WebCore/platform/graphics/coretext/FontCoreText.cpp:797
&gt; +    return { true, glyphCount * 2 };

Not immediately clear where the 2 comes from.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763648</commentid>
    <comment_count>19</comment_count>
      <attachid>429629</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-25 13:21:53 -0700</bug_when>
    <thetext>Comment on attachment 429629
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/Font.h:276
&gt;&gt; +        static constexpr size_t valueBit(Glyph glyphID) { return static_cast&lt;size_t&gt;(glyphID) * 2 + 1; }
&gt; 
&gt; &quot;valid&quot; and &quot;value&quot; are so close they make this code hard to read.

Possible replacement names:

bitForHasValue
bitForValue

&gt;&gt; Source/WebCore/platform/graphics/coretext/FontCascadeCoreText.cpp:194
&gt;&gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; Should this be a RELEASE_ASSERT?

I asked this when reviewing an earlier version and Cameron explained why we are making this change. People discussed and decided that we don’t this to be a way to crash the GPU Process.

&gt;&gt; Source/WebCore/platform/graphics/coretext/FontCoreText.cpp:797
&gt;&gt; +    return { true, glyphCount * 2 };
&gt; 
&gt; Not immediately clear where the 2 comes from.

Maybe the *2 belongs inside the ComplexColorFormatGlyphs constructor where it’s closer to the other *2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763649</commentid>
    <comment_count>20</comment_count>
      <attachid>429629</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-25 13:21:56 -0700</bug_when>
    <thetext>Comment on attachment 429629
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/Font.h:276
&gt;&gt; +        static constexpr size_t valueBit(Glyph glyphID) { return static_cast&lt;size_t&gt;(glyphID) * 2 + 1; }
&gt; 
&gt; &quot;valid&quot; and &quot;value&quot; are so close they make this code hard to read.

Possible replacement names:

bitForHasValue
bitForValue

&gt;&gt; Source/WebCore/platform/graphics/coretext/FontCascadeCoreText.cpp:194
&gt;&gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; Should this be a RELEASE_ASSERT?

I asked this when reviewing an earlier version and Cameron explained why we are making this change. People discussed and decided that we don’t this to be a way to crash the GPU Process.

&gt;&gt; Source/WebCore/platform/graphics/coretext/FontCoreText.cpp:797
&gt;&gt; +    return { true, glyphCount * 2 };
&gt; 
&gt; Not immediately clear where the 2 comes from.

Maybe the *2 belongs inside the ComplexColorFormatGlyphs constructor where it’s closer to the other *2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763651</commentid>
    <comment_count>21</comment_count>
      <attachid>429629</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-25 13:27:09 -0700</bug_when>
    <thetext>Comment on attachment 429629
Patch

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

&gt; Source/WebCore/platform/graphics/Font.h:266
&gt; +        static ComplexColorFormatGlyphs withNoRelevantTables();
&gt; +        static ComplexColorFormatGlyphs withRelevantTables(unsigned glyphCount);

Naming here is creative, but a bit peculiar. I am OK with it, but might prefer more straight ahead names that include the word &quot;create&quot;.

&gt; Source/WebCore/platform/graphics/coretext/FontCoreText.cpp:828
&gt; +    auto sbixTableData = adoptCF(CTFontCopyTable(platformData().ctFont(), kCTFontTableSbix, kCTFontTableOptionNoOptions));
&gt; +    if (sbixTableData)
&gt; +        return true;

Put it inside the if please?

&gt; Source/WebCore/platform/graphics/coretext/FontCoreText.cpp:839
&gt; +            CFIndex glyphCount = CTFontGetGlyphCount(getCTFont());
&gt; +            m_glyphsWithComplexColorFormat = ComplexColorFormatGlyphs::withRelevantTables(std::max(glyphCount, 0L));

Not sure that calling std::max does what we want here if the glyph count is negative. Understand the desire to not pass a negative number, but passing 0 may not be OK.

Not great to have this code depend on &quot;0L&quot; matching CFIndex. If we do want to clamp to zero, then more elegant better idiom would be to use clampTo&lt;destination-integer-type&gt;.

&gt; Source/WebCore/platform/graphics/coretext/FontCoreText.cpp:848
&gt; +    if (OTSVGTableRef svgTable = otSVGTable().table) {

I like auto for a case like this.

&gt; Source/WebCore/platform/graphics/coretext/FontCoreText.cpp:866
&gt; +    OTSVGTableRef table = otSVGTable().table;

I like auto in a place like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763688</commentid>
    <comment_count>22</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-25 14:43:42 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #18)
&gt; &gt; Source/WebCore/platform/graphics/coretext/FontCascadeCoreText.cpp:194
&gt; &gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; Should this be a RELEASE_ASSERT?

Security folks advised me to make this a debug ASSERT, so as to avoid giving Web processes a chance to DoS the browser by killing the GPU process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763695</commentid>
    <comment_count>23</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-25 14:57:01 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #21)
&gt; &gt; Source/WebCore/platform/graphics/coretext/FontCoreText.cpp:839
&gt; &gt; +            CFIndex glyphCount = CTFontGetGlyphCount(getCTFont());
&gt; &gt; +            m_glyphsWithComplexColorFormat = ComplexColorFormatGlyphs::withRelevantTables(std::max(glyphCount, 0L));
&gt; 
&gt; Not sure that calling std::max does what we want here if the glyph count is
&gt; negative. Understand the desire to not pass a negative number, but passing 0
&gt; may not be OK.

You&apos;re probably right.  Returning an error from CTFontGetGlyphCount would be an odd situation (and might not even be possible), and it&apos;d be better to consider this like the &quot;we didn&apos;t find any relevant tables&quot; situation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763708</commentid>
    <comment_count>24</comment_count>
      <attachid>429699</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-25 15:32:35 -0700</bug_when>
    <thetext>Created attachment 429699
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763844</commentid>
    <comment_count>25</comment_count>
      <attachid>429735</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-26 01:20:54 -0700</bug_when>
    <thetext>Created attachment 429735
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763971</commentid>
    <comment_count>26</comment_count>
      <attachid>429735</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-26 10:35:42 -0700</bug_when>
    <thetext>Comment on attachment 429735
Patch

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

&gt; Source/WebCore/PAL/pal/spi/cf/CoreTextSPI.h:206
&gt; +CGFloat CTFontGetSbixImageSizeForGlyphAndContentsScale(CTFontRef, const CGGlyph, CGFloat contentsScale);

Peculiar use of const here. I assume this is just how the function is declared, but that const has no effect.

&gt; Source/WebCore/platform/graphics/coretext/FontCoreText.cpp:813
&gt; +    ASSERT(!m_hasRelevantTables);

This assertion is backwards! This should only be called on a font that *does* have relevant tables. I didn’t notice that on my own; the EWS testing caught it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764072</commentid>
    <comment_count>27</comment_count>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-26 15:07:59 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #26)
&gt; &gt; Source/WebCore/PAL/pal/spi/cf/CoreTextSPI.h:206
&gt; &gt; +CGFloat CTFontGetSbixImageSizeForGlyphAndContentsScale(CTFontRef, const CGGlyph, CGFloat contentsScale);
&gt; 
&gt; Peculiar use of const here. I assume this is just how the function is
&gt; declared, but that const has no effect.

Indeed, it has no effect, but that&apos;s how it&apos;s declared in the place I&apos;m copying it from.

&gt; &gt; Source/WebCore/platform/graphics/coretext/FontCoreText.cpp:813
&gt; &gt; +    ASSERT(!m_hasRelevantTables);
&gt; 
&gt; This assertion is backwards! This should only be called on a font that
&gt; *does* have relevant tables. I didn’t notice that on my own; the EWS testing
&gt; caught it.

Will fix!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764076</commentid>
    <comment_count>28</comment_count>
      <attachid>429802</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-05-26 15:11:06 -0700</bug_when>
    <thetext>Created attachment 429802
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764235</commentid>
    <comment_count>29</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-26 23:43:00 -0700</bug_when>
    <thetext>Committed r278151 (238195@main): &lt;https://commits.webkit.org/238195@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 429802.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429489</attachid>
            <date>2021-05-23 17:17:17 -0700</date>
            <delta_ts>2021-05-23 17:54:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226159-20210524101716.patch</filename>
            <type>text/plain</type>
            <size>12079</size>
            <attacher name="Cameron McCormack (:heycam)">heycam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDViMTEzOTlhZmQ5ZDk3MzZlNThmNTBh
OWMxNWU3YWNhNGVlODMzNGMuLjljYjg3N2U0ZTU3MzViNGNmZWM4OWUyYjQ4NzI0NThjNGUyMTE5
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUtMjIgIENhbWVyb24gTWNDb3JtYWNrICA8
aGV5Y2FtQGFwcGxlLmNvbT4KKworICAgICAgICBQcmV2ZW50IHNiaXggZ2x5cGhzIGZyb20gYmVp
bmcgcmVuZGVyZWQgaW4gdGhlIEdQVSBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNTkKKyAgICAgICAgPHJkYXI6Ly83NzIzMTk1OT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Q
bGF0Zm9ybUhhdmUuaDogQWRkIEhBVkVfQ09SRV9URVhUX1NCSVhfSU1BR0VfU0laRV9GVU5DVElP
TlMuCisKIDIwMjEtMDUtMjMgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBFTkFCTEUoTUFTTV9QUk9CRSkgZmxhZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1ZGJhNWZm
ZmZjMDkyYmQwY2E4MjZlMTNhYjgwZjJkMmIyYWZjYWYxLi40MDE1ODdlZWNkODU4NDA0NWFiZWQx
ZTBlNzgxZDcwZDc1ZDlkMDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMjEtMDUt
MjIgIENhbWVyb24gTWNDb3JtYWNrICA8aGV5Y2FtQGFwcGxlLmNvbT4KKworICAgICAgICBQcmV2
ZW50IHNiaXggZ2x5cGhzIGZyb20gYmVpbmcgcmVuZGVyZWQgaW4gdGhlIEdQVSBwcm9jZXNzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNTkKKyAg
ICAgICAgPHJkYXI6Ly83NzIzMTk1OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXaGVuIEdQVVAgY2FudmFzIGlzIGVuYWJsZWQsIHRoZSBkaXNwbGF5
IGxpc3QgcmVjb3JkZXIgaGFuZGxlcyBzYml4CisgICAgICAgIGdseXBocyBieSByZWNvcmRpbmcg
ZHJhd0ltYWdlIGNhbGxzLiBUaGlzIG1lYW5zIHRoYXQgZHVyaW5nIGRpc3BsYXkgbGlzdAorICAg
ICAgICByZXBsYXksIHdlIHNob3VsZCBub3QgaGF2ZSBhbnkgc2JpeCBnbHlwaHMgaW4gYSBEcmF3
R2x5cGhzIGRpc3BsYXkgbGlzdAorICAgICAgICBpdGVtLiBUaGlzIHBhdGNoIGNoZWNrcyBmb3Ig
c3VjaCBnbHlwaHMgKGxpa2Ugd2UgYWxyZWFkeSBkbyBmb3IgU1ZHCisgICAgICAgIGdseXBocykg
YW5kIHJldHVybnMgZWFybHkgaWYgdGhleSdyZSBmb3VuZC4KKworICAgICAgICBNYW51YWxseSB0
ZXN0ZWQuIE5vIG5ldyB0ZXN0cywgc2luY2Ugd2UnZCBuZWVkIHRvIGFkZCBzb21lIHdheSBpbmpl
Y3QKKyAgICAgICAgc2JpeCBnbHlwaCBJRHMgaW50byBkaXNwbGF5IGxpc3QgaXRlbXMuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OkZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKTogQ2FsbCBuZXcgZnVuY3Rp
b24gdGhhdCBjaGVja3MgZm9yCisgICAgICAgIFNWRyBhbmQgc2JpeCBnbHlwaCBwcmVzZW5jZS4g
Q2hhbmdlIHJlbGVhc2UgYXNzZXJ0aW9uIHRvIGRlYnVnCisgICAgICAgIGFzc2VydGlvbiB0byBh
dm9pZCB1bm5lY2Vzc2FyaWx5IGNyYXNoaW5nIHRlaCBHUFVQLCBhbmQgaW5zdGVhZCByZXR1cm4K
KyAgICAgICAgZWFybHkgaW4gdGhlIHByZXNlbmNlIG9mIHRoZXNlIGdseXBocy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6b3RTVkdUYWJsZSBjb25zdCk6IEZhY3RvcmVkIHRoaXMgb3V0IG9mIGZp
bmRPVFNWR0dseXBocy4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZpbmRPVFNWR0dseXBocyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpoYXNBbnlDb21wbGV4Q29sb3JGb3JtYXRH
bHlwaHMgY29uc3QpOiBOZXcgZnVuY3Rpb24gdG8KKyAgICAgICAgY2hlY2sgaWYgYSBsaXN0IG9m
IGdseXBoIElEcyBoYXMgYW55IHRoYXQgd291bGQgYmUgaW5hcHByb3ByaWF0ZQorICAgICAgICB0
byByZW5kZXIgaW4gdGhlIEdQVSBwcm9jZXNzLiBTaW5jZSBjYWxsaW5nIHRoZSBDb3JlVGV4dCBm
dW5jdGlvbgorICAgICAgICB0aGF0IGFsbG93cyB0byBjaGVjayBpZiBhbiBzYml4IGdseXBoIGV4
aXN0cyB3b3VsZCBiZSB0b28gZXhwZW5zaXZlCisgICAgICAgIHRvIGNhbGwgZm9yIGV2ZXJ5IGRy
YXdHbHlwaHMgY2FsbCwgd2UgY2FjaGUgYSBCaXRWZWN0b3Igb2Ygc2JpeCBnbHlwaAorICAgICAg
ICBzdGF0dXMgb24gdGhlIEZvbnQgdGhlIGZpcnN0IHRpbWUgaXQncyByZXF1ZXN0ZWQuIEFuZCBz
aW5jZSB3ZSBhcmUKKyAgICAgICAgY2FjaGluZyB0aGF0IHN0YXRlLCB3ZSBtYXkgYXMgd2VsbCBh
bHNvIGNhY2hlIHRoZSBwcmVzZW5jZSBvZiBTVkcKKyAgICAgICAgZ2x5cGhzLgorCiAyMDIxLTA1
LTIzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIENoZWNr
ZWRMb2NrIGluIGV2ZW4gbW9yZSBwbGFjZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IDQ1MmM1ZGIw
YzZhMjUyYjM2ODk0ODY5MjZmOTdjZDVhYjE4MzJkMzQuLmY3ZTU0OTJkZDVlNDI1MDJjZDgzNDVi
NDY4MTc5NTEyNTAwNDQ5ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisy
MDIxLTA1LTIyICBDYW1lcm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CisKKyAgICAg
ICAgUHJldmVudCBzYml4IGdseXBocyBmcm9tIGJlaW5nIHJlbmRlcmVkIGluIHRoZSBHUFUgcHJv
Y2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2
MTU5CisgICAgICAgIDxyZGFyOi8vNzcyMzE5NTk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmg6IEFkZCBk
ZWNsYXJhdGlvbiBmb3IgYW4gU1BJIHRoYXQgbGV0cyB1cworICAgICAgICBpbmZlciB3aGV0aGVy
IGEgZ2x5cGggaGFzIGFuIHNiaXggaW1hZ2UuCisKIDIwMjEtMDUtMjEgIFdlbnNvbiBIc2llaCAg
PHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBBZG9wdCBRTEl0ZW0g
aW4gV0tJbWFnZUV4dHJhY3Rpb25QcmV2aWV3Q29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvUGxhdGZvcm1IYXZlLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaApp
bmRleCAwMmEwN2YxM2UwZGY4MTA2YjU2MGJkMTRmMDNlNTgyZmUyZGUyMmJkLi5jOWUxZTc4NTBm
Yzg0NDI0NmUwNjk0MjRkOTdmYmViMDVlYWEwMjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUhhdmUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaApAQCAt
OTc2LDMgKzk3NiwxMSBAQAogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiAhKFBMQVRGT1JNKElPUykg
JiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxNTAwMDApCiAjZGVmaW5lIEhB
VkVfU1lTVEVNX1NBTkRCT1hFU19BTExPV0lOR19URVJNSU5BVEVfV0lUSF9SRUFTT04gMQogI2Vu
ZGlmCisKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDExMDAwMCBcCisgICAgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTQwMDAwKSBcCisgICAgfHwgKFBMQVRGT1JNKFdBVENIT1Mp
ICYmIF9fV0FUQ0hfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gNzAwMDApIFwKKyAgICB8fCAo
UExBVEZPUk0oQVBQTEVUVikgJiYgX19UVl9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxNDAw
MDApIFwKKyAgICB8fCAoUExBVEZPUk0oTUFDQ0FUQUxZU1QpICYmIF9fSVBIT05FX09TX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID49IDE0MDAwMCkpCisjZGVmaW5lIEhBVkVfQ09SRV9URVhUX1NCSVhf
SU1BR0VfU0laRV9GVU5DVElPTlMgMQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9z
cGkvY2YvQ29yZVRleHRTUEkuaAppbmRleCA5YTZhOGM5OTQ3NTg1YmNiOTE4YzRiZGIyMzU5YTU5
MDljYTAzMTlmLi40OTA4NjYzOThjNGI1MDQ1NDA5NGJiYTk0ZmU4MThkYWMzZWY4Y2RhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmgKQEAgLTIwMyw1ICsy
MDMsNiBAQCBDVEZvbnREZXNjcmlwdG9yUmVmIENURm9udENyZWF0ZVBoeXNpY2FsRm9udERlc2Ny
aXB0b3JGb3JDaGFyYWN0ZXJzV2l0aExhbmd1YWdlKAogCiBib29sIENURm9udElzQXBwbGVDb2xv
ckVtb2ppKENURm9udFJlZik7CiBDVEZvbnRSZWYgQ1RGb250Q3JlYXRlRm9yQ2hhcmFjdGVycyhD
VEZvbnRSZWYgY3VycmVudEZvbnQsIGNvbnN0IFVURjE2Q2hhciAqY2hhcmFjdGVycywgQ0ZJbmRl
eCBsZW5ndGgsIENGSW5kZXggKmNvdmVyZWRMZW5ndGgpOworQ0dGbG9hdCBDVEZvbnRHZXRTYml4
SW1hZ2VTaXplRm9yR2x5cGhBbmRDb250ZW50c1NjYWxlKENURm9udFJlZiwgY29uc3QgQ0dHbHlw
aCwgQ0dGbG9hdCBjb250ZW50c1NjYWxlKTsKIAogV1RGX0VYVEVSTl9DX0VORApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAppbmRleCBmOTkxODNkN2NjYmI4NTRlNGU0
ZmJjYzU1MDlhMzAzYWIzYjUyN2ZmLi44MzIyMTNhOWJkYzY3N2E1MWFhMjVlMjFiMTdkMTgzZDM2
MDQxYzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcApAQCAt
OTIsNiArOTIsOSBAQCBGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3Jt
RGF0YSwgT3JpZ2luIG9yaWdpbiwgSW50ZXJzdGl0aWFsIGludAogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgLCBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhmYWxzZSkKICNlbmRpZgor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgICwgbV9oYXNOb0NvbXBsZXhDb2xvckZvcm1hdEdseXBo
cyhmYWxzZSkKKyNlbmRpZgogewogICAgIHBsYXRmb3JtSW5pdCgpOwogICAgIHBsYXRmb3JtR2x5
cGhJbml0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKaW5kZXggNzVm
NjQ2YmZkMGMzODVlMGE0M2JiYjYxZTY3NzJhNDgxYTA5NjZhZS4uMTZkN2U2MGUzNTJjMjcyMTg0
ZjkxMzhhMDU1YmRmYTY2MTFjYjZlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaApAQCAtMjIzLDYgKzIyMyw4IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIG51bGxv
cHQgaWYgbm9uZSBvZiB0aGUgZ2x5cGhzIGFyZSBPVC1TVkcgZ2x5cGhzLgogICAgIE9wdGlvbmFs
PEJpdFZlY3Rvcj4gZmluZE9UU1ZHR2x5cGhzKGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCB1bnNp
Z25lZCBjb3VudCkgY29uc3Q7CiAKKyAgICBib29sIGhhc0FueUNvbXBsZXhDb2xvckZvcm1hdEds
eXBocyhjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgdW5zaWduZWQgY291bnQpIGNvbnN0OworCiAj
aWYgUExBVEZPUk0oV0lOKQogICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyogc2NyaXB0Rm9udFBy
b3BlcnRpZXMoKSBjb25zdDsKICAgICBTQ1JJUFRfQ0FDSEUqIHNjcmlwdENhY2hlKCkgY29uc3Qg
eyByZXR1cm4gJm1fc2NyaXB0Q2FjaGU7IH0KQEAgLTI1Nyw2ICsyNTksOCBAQCBwcml2YXRlOgog
ICAgIGZsb2F0IHdpZHRoRm9yR0RJR2x5cGgoR2x5cGgpIGNvbnN0OwogI2VuZGlmCiAKKyAgICBj
b25zdCBQQUw6Ok9UU1ZHVGFibGUmIG90U1ZHVGFibGUoKSBjb25zdDsKKwogICAgIEZvbnRNZXRy
aWNzIG1fZm9udE1ldHJpY3M7CiAgICAgZmxvYXQgbV9tYXhDaGFyV2lkdGggeyAtMSB9OwogICAg
IGZsb2F0IG1fYXZnQ2hhcldpZHRoIHsgLTEgfTsKQEAgLTI5Nyw2ICszMDEsNyBAQCBwcml2YXRl
OgogICAgIG11dGFibGUgT3B0aW9uYWw8Qml0VmVjdG9yPiBtX2dseXBoc1N1cHBvcnRlZEJ5QWxs
U21hbGxDYXBzOwogICAgIG11dGFibGUgT3B0aW9uYWw8Qml0VmVjdG9yPiBtX2dseXBoc1N1cHBv
cnRlZEJ5UGV0aXRlQ2FwczsKICAgICBtdXRhYmxlIE9wdGlvbmFsPEJpdFZlY3Rvcj4gbV9nbHlw
aHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHM7CisgICAgbXV0YWJsZSBPcHRpb25hbDxCaXRWZWN0
b3I+IG1fZ2x5cGhzV2l0aENvbXBsZXhDb2xvckZvcm1hdDsgLy8gU1ZHIGFuZCBzYml4CiAgICAg
bXV0YWJsZSBPcHRpb25hbDxQQUw6Ok9UU1ZHVGFibGU+IG1fb3RTVkdUYWJsZTsKICNlbmRpZgog
CkBAIC0zMzQsNiArMzM5LDEwIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zaG91bGROb3RC
ZVVzZWRGb3JBcmFiaWMgOiAxOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBt
dXRhYmxlIHVuc2lnbmVkIG1faGFzTm9Db21wbGV4Q29sb3JGb3JtYXRHbHlwaHMgOiAxOworI2Vu
ZGlmCisKICAgICAvLyBBZGRpbmcgYW55IG5vbi1kZXJpdmVkIGluZm9ybWF0aW9uIHRvIEZvbnQg
bmVlZHMgYSBwYXJhbGxlbCBjaGFuZ2UgaW4gV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcC4KIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0
L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKaW5kZXggNmZmMDBiZmJkNTRhMmI4
YTE4ZWVjMDU4NDkwNzkzNTRjMDIxMmRiMC4uNzU1N2QwYWNlNDRjYmUzYzNkYTk1NzFlNmVlZThm
NmE0MDY5NjJmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKQEAgLTE5MCw5
ICsxOTAsMTIgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEcKICAgICBpZiAoIXBsYXRmb3JtRGF0
YS5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQg
PSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworICAgIGlmIChpc0luR1BVUHJvY2VzcygpICYm
IGZvbnQuaGFzQW55Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzKGdseXBocywgbnVtR2x5cGhzKSkg
eworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIFJFTEVBU0VfQVNTRVJUKCFpc0luR1BVUHJvY2VzcygpIHx8ICFmb250LmZpbmRPVFNW
R0dseXBocyhnbHlwaHMsIG51bUdseXBocykpOworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQg
PSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgYm9vbCBzaG91bGRBbnRpYWxpYXMg
PSB0cnVlOwogICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgPSB0cnVlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVUZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4
dC5jcHAKaW5kZXggZWY4NmU0YzNjMmJiYmE4NzQ2ZTI0MWU0MzUxZTc4MGU3NDMzZDMxNi4uMDYy
MjRiNDUwNWExOGY0OGRmN2I4NzlhMTZiMjI3ZGQ0MDllYzMzNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVUZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQu
Y3BwCkBAIC03NzUsMjIgKzc3NSwyNyBAQCBib29sIEZvbnQ6OmlzUHJvYmFibHlPbmx5VXNlZFRv
UmVuZGVySWNvbnMoKSBjb25zdAogICAgIH0pOwogfQogCi1PcHRpb25hbDxCaXRWZWN0b3I+IEZv
bnQ6OmZpbmRPVFNWR0dseXBocyhjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIHVuc2ln
bmVkIGNvdW50KSBjb25zdAorY29uc3QgUEFMOjpPVFNWR1RhYmxlJiBGb250OjpvdFNWR1RhYmxl
KCkgY29uc3QKIHsKLSNpZiBQTEFURk9STShDT0NPQSkKICAgICBpZiAoIW1fb3RTVkdUYWJsZSkg
ewogICAgICAgICBpZiAoYXV0byB0YWJsZURhdGEgPSBhZG9wdENGKENURm9udENvcHlUYWJsZShw
bGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwga0NURm9udFRhYmxlU1ZHLCBrQ1RGb250VGFibGVPcHRp
b25Ob09wdGlvbnMpKSkKICAgICAgICAgICAgIG1fb3RTVkdUYWJsZSA9IFBBTDo6T1RTVkdUYWJs
ZSh0YWJsZURhdGEuZ2V0KCksIGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpLCBwbGF0Zm9ybURh
dGEoKS5zaXplKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX290U1ZHVGFibGUgPSB7
eyB9fTsKICAgICB9CisgICAgcmV0dXJuIG1fb3RTVkdUYWJsZS52YWx1ZSgpOworfQogCi0gICAg
aWYgKCFQQUw6OmlzT1RTVkdGcmFtZXdvcmtBdmFpbGFibGUoKSB8fCAhbV9vdFNWR1RhYmxlLnZh
bHVlKCkudGFibGUpCitPcHRpb25hbDxCaXRWZWN0b3I+IEZvbnQ6OmZpbmRPVFNWR0dseXBocyhj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIHVuc2lnbmVkIGNvdW50KSBjb25zdAorewor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgIE9UU1ZHVGFibGVSZWYgdGFibGUgPSBvdFNWR1RhYmxl
KCkudGFibGU7CisgICAgaWYgKCF0YWJsZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIE9w
dGlvbmFsPEJpdFZlY3Rvcj4gcmVzdWx0OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChQQUw6OnNvZnRMaW5rT1RTVkdPVFNWR1RhYmxlR2V0
RG9jdW1lbnRJbmRleEZvckdseXBoKG1fb3RTVkdUYWJsZS52YWx1ZSgpLnRhYmxlLCBnbHlwaHNb
aV0pICE9IGtDRk5vdEZvdW5kKSB7CisgICAgICAgIGlmIChQQUw6OnNvZnRMaW5rT1RTVkdPVFNW
R1RhYmxlR2V0RG9jdW1lbnRJbmRleEZvckdseXBoKHRhYmxlLCBnbHlwaHNbaV0pICE9IGtDRk5v
dEZvdW5kKSB7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgICAgICByZXN1
bHQgPSBCaXRWZWN0b3IoY291bnQpOwogICAgICAgICAgICAgcmVzdWx0LnZhbHVlKCkucXVpY2tT
ZXQoaSk7CkBAIC04MDQsNCArODA5LDUzIEBAIE9wdGlvbmFsPEJpdFZlY3Rvcj4gRm9udDo6Zmlu
ZE9UU1ZHR2x5cGhzKGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgdW5zaWduCiAjZW5k
aWYKIH0KIAorYm9vbCBGb250OjpoYXNBbnlDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHMoY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCB1bnNpZ25lZCBjb3VudCkgY29uc3QKK3sKKyNpZiBQ
TEFURk9STShDT0NPQSkKKyAgICBpZiAobV9oYXNOb0NvbXBsZXhDb2xvckZvcm1hdEdseXBocykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX2dseXBoc1dpdGhDb21wbGV4Q29s
b3JGb3JtYXQpIHsKKyAgICAgICAgYm9vbCBoYXNBbnlSZWxldmFudFRhYmxlID0gZmFsc2U7Cisg
ICAgICAgIG1fZ2x5cGhzV2l0aENvbXBsZXhDb2xvckZvcm1hdCA9IEJpdFZlY3RvcigpOworCisg
ICAgICAgIE9UU1ZHVGFibGVSZWYgc3ZnVGFibGUgPSBvdFNWR1RhYmxlKCkudGFibGU7CisgICAg
ICAgIGhhc0FueVJlbGV2YW50VGFibGUgfD0gISFzdmdUYWJsZTsKKworI2lmIEhBVkUoQ09SRV9U
RVhUX1NCSVhfSU1BR0VfU0laRV9GVU5DVElPTlMpCisgICAgICAgIGF1dG8gc2JpeFRhYmxlRGF0
YSA9IGFkb3B0Q0YoQ1RGb250Q29weVRhYmxlKHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBrQ1RG
b250VGFibGVTYml4LCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKKyAgICAgICAgaGFz
QW55UmVsZXZhbnRUYWJsZSB8PSAhIXNiaXhUYWJsZURhdGE7CisjZW5kaWYKKworICAgICAgICBp
ZiAoIWhhc0FueVJlbGV2YW50VGFibGUpIHsKKyAgICAgICAgICAgIG1faGFzTm9Db21wbGV4Q29s
b3JGb3JtYXRHbHlwaHMgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgdW5zaWduZWQgZ2x5cGhDb3VudCA9IENURm9udEdldEdseXBoQ291bnQo
Z2V0Q1RGb250KCkpOworICAgICAgICBtX2dseXBoc1dpdGhDb21wbGV4Q29sb3JGb3JtYXQudmFs
dWUoKS5lbnN1cmVTaXplKGdseXBoQ291bnQpOworCisgICAgICAgIGZvciAodW5zaWduZWQgZ2x5
cGhJRCA9IDA7IGdseXBoSUQgPCBnbHlwaENvdW50OyArK2dseXBoSUQpIHsKKyAgICAgICAgICAg
IGJvb2wgaXNDb21wbGV4Q29sb3JGb3JtYXRHbHlwaCA9IHN2Z1RhYmxlICYmIFBBTDo6c29mdExp
bmtPVFNWR09UU1ZHVGFibGVHZXREb2N1bWVudEluZGV4Rm9yR2x5cGgoc3ZnVGFibGUsIGdseXBo
c1tnbHlwaElEXSkgIT0ga0NGTm90Rm91bmQ7CisjaWYgSEFWRShDT1JFX1RFWFRfU0JJWF9JTUFH
RV9TSVpFX0ZVTkNUSU9OUykKKyAgICAgICAgICAgIC8vIFRoZXJlJ3Mgbm8gZnVuY3Rpb24gdG8g
ZGlyZWN0bHkgbG9vayB1cCB0aGUgc2JpeCB0YWJsZSwgc28gdXNlIHRoZSBmYWN0IHRoYXQgdGhp
cyBvbmUgcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlIGlmZiB0aGVyZSdzIGFuIHNiaXggZW50cnku
CisgICAgICAgICAgICBpc0NvbXBsZXhDb2xvckZvcm1hdEdseXBoIHw9IHNiaXhUYWJsZURhdGEg
JiYgQ1RGb250R2V0U2JpeEltYWdlU2l6ZUZvckdseXBoQW5kQ29udGVudHNTY2FsZShnZXRDVEZv
bnQoKSwgZ2x5cGhJRCwgMCk7CisjZW5kaWYKKyAgICAgICAgICAgIGlmIChpc0NvbXBsZXhDb2xv
ckZvcm1hdEdseXBoKQorICAgICAgICAgICAgICAgIG1fZ2x5cGhzV2l0aENvbXBsZXhDb2xvckZv
cm1hdC52YWx1ZSgpLnF1aWNrU2V0KGdseXBoSUQpOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKG1fZ2x5
cGhzV2l0aENvbXBsZXhDb2xvckZvcm1hdC52YWx1ZSgpLmNvbnRhaW5zKGdseXBoc1tpXSkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oZ2x5cGhzKTsKKyAgICBVTlVTRURfUEFSQU0oY291bnQpOworICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="commit-queue"
          id="450691"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429491</attachid>
            <date>2021-05-23 17:46:20 -0700</date>
            <delta_ts>2021-05-23 23:21:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226159-20210524104618.patch</filename>
            <type>text/plain</type>
            <size>12120</size>
            <attacher name="Cameron McCormack (:heycam)">heycam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDViMTEzOTlhZmQ5ZDk3MzZlNThmNTBh
OWMxNWU3YWNhNGVlODMzNGMuLjljYjg3N2U0ZTU3MzViNGNmZWM4OWUyYjQ4NzI0NThjNGUyMTE5
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUtMjIgIENhbWVyb24gTWNDb3JtYWNrICA8
aGV5Y2FtQGFwcGxlLmNvbT4KKworICAgICAgICBQcmV2ZW50IHNiaXggZ2x5cGhzIGZyb20gYmVp
bmcgcmVuZGVyZWQgaW4gdGhlIEdQVSBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNTkKKyAgICAgICAgPHJkYXI6Ly83NzIzMTk1OT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Q
bGF0Zm9ybUhhdmUuaDogQWRkIEhBVkVfQ09SRV9URVhUX1NCSVhfSU1BR0VfU0laRV9GVU5DVElP
TlMuCisKIDIwMjEtMDUtMjMgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBFTkFCTEUoTUFTTV9QUk9CRSkgZmxhZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1ZGJhNWZm
ZmZjMDkyYmQwY2E4MjZlMTNhYjgwZjJkMmIyYWZjYWYxLi40MDE1ODdlZWNkODU4NDA0NWFiZWQx
ZTBlNzgxZDcwZDc1ZDlkMDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMjEtMDUt
MjIgIENhbWVyb24gTWNDb3JtYWNrICA8aGV5Y2FtQGFwcGxlLmNvbT4KKworICAgICAgICBQcmV2
ZW50IHNiaXggZ2x5cGhzIGZyb20gYmVpbmcgcmVuZGVyZWQgaW4gdGhlIEdQVSBwcm9jZXNzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNTkKKyAg
ICAgICAgPHJkYXI6Ly83NzIzMTk1OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXaGVuIEdQVVAgY2FudmFzIGlzIGVuYWJsZWQsIHRoZSBkaXNwbGF5
IGxpc3QgcmVjb3JkZXIgaGFuZGxlcyBzYml4CisgICAgICAgIGdseXBocyBieSByZWNvcmRpbmcg
ZHJhd0ltYWdlIGNhbGxzLiBUaGlzIG1lYW5zIHRoYXQgZHVyaW5nIGRpc3BsYXkgbGlzdAorICAg
ICAgICByZXBsYXksIHdlIHNob3VsZCBub3QgaGF2ZSBhbnkgc2JpeCBnbHlwaHMgaW4gYSBEcmF3
R2x5cGhzIGRpc3BsYXkgbGlzdAorICAgICAgICBpdGVtLiBUaGlzIHBhdGNoIGNoZWNrcyBmb3Ig
c3VjaCBnbHlwaHMgKGxpa2Ugd2UgYWxyZWFkeSBkbyBmb3IgU1ZHCisgICAgICAgIGdseXBocykg
YW5kIHJldHVybnMgZWFybHkgaWYgdGhleSdyZSBmb3VuZC4KKworICAgICAgICBNYW51YWxseSB0
ZXN0ZWQuIE5vIG5ldyB0ZXN0cywgc2luY2Ugd2UnZCBuZWVkIHRvIGFkZCBzb21lIHdheSBpbmpl
Y3QKKyAgICAgICAgc2JpeCBnbHlwaCBJRHMgaW50byBkaXNwbGF5IGxpc3QgaXRlbXMuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OkZvbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKTogQ2FsbCBuZXcgZnVuY3Rp
b24gdGhhdCBjaGVja3MgZm9yCisgICAgICAgIFNWRyBhbmQgc2JpeCBnbHlwaCBwcmVzZW5jZS4g
Q2hhbmdlIHJlbGVhc2UgYXNzZXJ0aW9uIHRvIGRlYnVnCisgICAgICAgIGFzc2VydGlvbiB0byBh
dm9pZCB1bm5lY2Vzc2FyaWx5IGNyYXNoaW5nIHRlaCBHUFVQLCBhbmQgaW5zdGVhZCByZXR1cm4K
KyAgICAgICAgZWFybHkgaW4gdGhlIHByZXNlbmNlIG9mIHRoZXNlIGdseXBocy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6b3RTVkdUYWJsZSBjb25zdCk6IEZhY3RvcmVkIHRoaXMgb3V0IG9mIGZp
bmRPVFNWR0dseXBocy4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZpbmRPVFNWR0dseXBocyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpoYXNBbnlDb21wbGV4Q29sb3JGb3JtYXRH
bHlwaHMgY29uc3QpOiBOZXcgZnVuY3Rpb24gdG8KKyAgICAgICAgY2hlY2sgaWYgYSBsaXN0IG9m
IGdseXBoIElEcyBoYXMgYW55IHRoYXQgd291bGQgYmUgaW5hcHByb3ByaWF0ZQorICAgICAgICB0
byByZW5kZXIgaW4gdGhlIEdQVSBwcm9jZXNzLiBTaW5jZSBjYWxsaW5nIHRoZSBDb3JlVGV4dCBm
dW5jdGlvbgorICAgICAgICB0aGF0IGFsbG93cyB0byBjaGVjayBpZiBhbiBzYml4IGdseXBoIGV4
aXN0cyB3b3VsZCBiZSB0b28gZXhwZW5zaXZlCisgICAgICAgIHRvIGNhbGwgZm9yIGV2ZXJ5IGRy
YXdHbHlwaHMgY2FsbCwgd2UgY2FjaGUgYSBCaXRWZWN0b3Igb2Ygc2JpeCBnbHlwaAorICAgICAg
ICBzdGF0dXMgb24gdGhlIEZvbnQgdGhlIGZpcnN0IHRpbWUgaXQncyByZXF1ZXN0ZWQuIEFuZCBz
aW5jZSB3ZSBhcmUKKyAgICAgICAgY2FjaGluZyB0aGF0IHN0YXRlLCB3ZSBtYXkgYXMgd2VsbCBh
bHNvIGNhY2hlIHRoZSBwcmVzZW5jZSBvZiBTVkcKKyAgICAgICAgZ2x5cGhzLgorCiAyMDIxLTA1
LTIzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIENoZWNr
ZWRMb2NrIGluIGV2ZW4gbW9yZSBwbGFjZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IDQ1MmM1ZGIw
YzZhMjUyYjM2ODk0ODY5MjZmOTdjZDVhYjE4MzJkMzQuLmY3ZTU0OTJkZDVlNDI1MDJjZDgzNDVi
NDY4MTc5NTEyNTAwNDQ5ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisy
MDIxLTA1LTIyICBDYW1lcm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CisKKyAgICAg
ICAgUHJldmVudCBzYml4IGdseXBocyBmcm9tIGJlaW5nIHJlbmRlcmVkIGluIHRoZSBHUFUgcHJv
Y2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2
MTU5CisgICAgICAgIDxyZGFyOi8vNzcyMzE5NTk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmg6IEFkZCBk
ZWNsYXJhdGlvbiBmb3IgYW4gU1BJIHRoYXQgbGV0cyB1cworICAgICAgICBpbmZlciB3aGV0aGVy
IGEgZ2x5cGggaGFzIGFuIHNiaXggaW1hZ2UuCisKIDIwMjEtMDUtMjEgIFdlbnNvbiBIc2llaCAg
PHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW21hY09TXSBBZG9wdCBRTEl0ZW0g
aW4gV0tJbWFnZUV4dHJhY3Rpb25QcmV2aWV3Q29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvUGxhdGZvcm1IYXZlLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaApp
bmRleCAwMmEwN2YxM2UwZGY4MTA2YjU2MGJkMTRmMDNlNTgyZmUyZGUyMmJkLi5jOWUxZTc4NTBm
Yzg0NDI0NmUwNjk0MjRkOTdmYmViMDVlYWEwMjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybUhhdmUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaApAQCAt
OTc2LDMgKzk3NiwxMSBAQAogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiAhKFBMQVRGT1JNKElPUykg
JiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxNTAwMDApCiAjZGVmaW5lIEhB
VkVfU1lTVEVNX1NBTkRCT1hFU19BTExPV0lOR19URVJNSU5BVEVfV0lUSF9SRUFTT04gMQogI2Vu
ZGlmCisKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDExMDAwMCBcCisgICAgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTQwMDAwKSBcCisgICAgfHwgKFBMQVRGT1JNKFdBVENIT1Mp
ICYmIF9fV0FUQ0hfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gNzAwMDApIFwKKyAgICB8fCAo
UExBVEZPUk0oQVBQTEVUVikgJiYgX19UVl9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxNDAw
MDApIFwKKyAgICB8fCAoUExBVEZPUk0oTUFDQ0FUQUxZU1QpICYmIF9fSVBIT05FX09TX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID49IDE0MDAwMCkpCisjZGVmaW5lIEhBVkVfQ09SRV9URVhUX1NCSVhf
SU1BR0VfU0laRV9GVU5DVElPTlMgMQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QQUwvcGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9z
cGkvY2YvQ29yZVRleHRTUEkuaAppbmRleCA5YTZhOGM5OTQ3NTg1YmNiOTE4YzRiZGIyMzU5YTU5
MDljYTAzMTlmLi40OTA4NjYzOThjNGI1MDQ1NDA5NGJiYTk0ZmU4MThkYWMzZWY4Y2RhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmgKQEAgLTIwMyw1ICsy
MDMsNiBAQCBDVEZvbnREZXNjcmlwdG9yUmVmIENURm9udENyZWF0ZVBoeXNpY2FsRm9udERlc2Ny
aXB0b3JGb3JDaGFyYWN0ZXJzV2l0aExhbmd1YWdlKAogCiBib29sIENURm9udElzQXBwbGVDb2xv
ckVtb2ppKENURm9udFJlZik7CiBDVEZvbnRSZWYgQ1RGb250Q3JlYXRlRm9yQ2hhcmFjdGVycyhD
VEZvbnRSZWYgY3VycmVudEZvbnQsIGNvbnN0IFVURjE2Q2hhciAqY2hhcmFjdGVycywgQ0ZJbmRl
eCBsZW5ndGgsIENGSW5kZXggKmNvdmVyZWRMZW5ndGgpOworQ0dGbG9hdCBDVEZvbnRHZXRTYml4
SW1hZ2VTaXplRm9yR2x5cGhBbmRDb250ZW50c1NjYWxlKENURm9udFJlZiwgY29uc3QgQ0dHbHlw
aCwgQ0dGbG9hdCBjb250ZW50c1NjYWxlKTsKIAogV1RGX0VYVEVSTl9DX0VORApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAppbmRleCBmOTkxODNkN2NjYmI4NTRlNGU0
ZmJjYzU1MDlhMzAzYWIzYjUyN2ZmLi44MzIyMTNhOWJkYzY3N2E1MWFhMjVlMjFiMTdkMTgzZDM2
MDQxYzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcApAQCAt
OTIsNiArOTIsOSBAQCBGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3Jt
RGF0YSwgT3JpZ2luIG9yaWdpbiwgSW50ZXJzdGl0aWFsIGludAogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgLCBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhmYWxzZSkKICNlbmRpZgor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgICwgbV9oYXNOb0NvbXBsZXhDb2xvckZvcm1hdEdseXBo
cyhmYWxzZSkKKyNlbmRpZgogewogICAgIHBsYXRmb3JtSW5pdCgpOwogICAgIHBsYXRmb3JtR2x5
cGhJbml0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKaW5kZXggNzVm
NjQ2YmZkMGMzODVlMGE0M2JiYjYxZTY3NzJhNDgxYTA5NjZhZS4uZTllZTMwYmRhNmQ3MDZlMmFm
MjA0ZGRhMmIzNDczOGMxZjU3NzI5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnQuaApAQCAtMjIzLDYgKzIyMyw4IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIG51bGxv
cHQgaWYgbm9uZSBvZiB0aGUgZ2x5cGhzIGFyZSBPVC1TVkcgZ2x5cGhzLgogICAgIE9wdGlvbmFs
PEJpdFZlY3Rvcj4gZmluZE9UU1ZHR2x5cGhzKGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCB1bnNp
Z25lZCBjb3VudCkgY29uc3Q7CiAKKyAgICBib29sIGhhc0FueUNvbXBsZXhDb2xvckZvcm1hdEds
eXBocyhjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgdW5zaWduZWQgY291bnQpIGNvbnN0OworCiAj
aWYgUExBVEZPUk0oV0lOKQogICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyogc2NyaXB0Rm9udFBy
b3BlcnRpZXMoKSBjb25zdDsKICAgICBTQ1JJUFRfQ0FDSEUqIHNjcmlwdENhY2hlKCkgY29uc3Qg
eyByZXR1cm4gJm1fc2NyaXB0Q2FjaGU7IH0KQEAgLTI1Nyw2ICsyNTksMTAgQEAgcHJpdmF0ZToK
ICAgICBmbG9hdCB3aWR0aEZvckdESUdseXBoKEdseXBoKSBjb25zdDsKICNlbmRpZgogCisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgY29uc3QgUEFMOjpPVFNWR1RhYmxlJiBvdFNWR1RhYmxlKCkg
Y29uc3Q7CisjZW5kaWYKKwogICAgIEZvbnRNZXRyaWNzIG1fZm9udE1ldHJpY3M7CiAgICAgZmxv
YXQgbV9tYXhDaGFyV2lkdGggeyAtMSB9OwogICAgIGZsb2F0IG1fYXZnQ2hhcldpZHRoIHsgLTEg
fTsKQEAgLTI5Nyw2ICszMDMsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgT3B0aW9uYWw8Qml0
VmVjdG9yPiBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzOwogICAgIG11dGFibGUgT3B0
aW9uYWw8Qml0VmVjdG9yPiBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwczsKICAgICBtdXRh
YmxlIE9wdGlvbmFsPEJpdFZlY3Rvcj4gbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHM7
CisgICAgbXV0YWJsZSBPcHRpb25hbDxCaXRWZWN0b3I+IG1fZ2x5cGhzV2l0aENvbXBsZXhDb2xv
ckZvcm1hdDsgLy8gU1ZHIGFuZCBzYml4CiAgICAgbXV0YWJsZSBPcHRpb25hbDxQQUw6Ok9UU1ZH
VGFibGU+IG1fb3RTVkdUYWJsZTsKICNlbmRpZgogCkBAIC0zMzQsNiArMzQxLDEwIEBAIHByaXZh
dGU6CiAgICAgdW5zaWduZWQgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMgOiAxOwogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBtdXRhYmxlIHVuc2lnbmVkIG1faGFzTm9Db21w
bGV4Q29sb3JGb3JtYXRHbHlwaHMgOiAxOworI2VuZGlmCisKICAgICAvLyBBZGRpbmcgYW55IG5v
bi1kZXJpdmVkIGluZm9ybWF0aW9uIHRvIEZvbnQgbmVlZHMgYSBwYXJhbGxlbCBjaGFuZ2UgaW4g
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcC4KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3Jl
VGV4dC5jcHAKaW5kZXggNmZmMDBiZmJkNTRhMmI4YTE4ZWVjMDU4NDkwNzkzNTRjMDIxMmRiMC4u
NzU1N2QwYWNlNDRjYmUzYzNkYTk1NzFlNmVlZThmNmE0MDY5NjJmOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9u
dENhc2NhZGVDb3JlVGV4dC5jcHAKQEAgLTE5MCw5ICsxOTAsMTIgQEAgdm9pZCBGb250Q2FzY2Fk
ZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEcKICAgICBpZiAoIXBsYXRmb3JtRGF0YS5zaXplKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
OworICAgIGlmIChpc0luR1BVUHJvY2VzcygpICYmIGZvbnQuaGFzQW55Q29tcGxleENvbG9yRm9y
bWF0R2x5cGhzKGdseXBocywgbnVtR2x5cGhzKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIFJFTEVBU0VfQVNTRVJUKCFpc0lu
R1BVUHJvY2VzcygpIHx8ICFmb250LmZpbmRPVFNWR0dseXBocyhnbHlwaHMsIG51bUdseXBocykp
OworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
OwogCiAgICAgYm9vbCBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOwogICAgIGJvb2wgc2hvdWxkU21v
b3RoRm9udHMgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29yZXRleHQvRm9udENvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAKaW5kZXggZWY4NmU0YzNjMmJiYmE4
NzQ2ZTI0MWU0MzUxZTc4MGU3NDMzZDMxNi4uNzNiZjQ2MDA2MTM3OGI0MDkxNmI1YTg4OGUxZWY5
ZTRkODc4ZDdmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29yZXRleHQvRm9udENvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwCkBAIC03NzUsMjIgKzc3NSwyOSBAQCBi
b29sIEZvbnQ6OmlzUHJvYmFibHlPbmx5VXNlZFRvUmVuZGVySWNvbnMoKSBjb25zdAogICAgIH0p
OwogfQogCi1PcHRpb25hbDxCaXRWZWN0b3I+IEZvbnQ6OmZpbmRPVFNWR0dseXBocyhjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIHVuc2lnbmVkIGNvdW50KSBjb25zdAotewogI2lmIFBM
QVRGT1JNKENPQ09BKQorY29uc3QgUEFMOjpPVFNWR1RhYmxlJiBGb250OjpvdFNWR1RhYmxlKCkg
Y29uc3QKK3sKICAgICBpZiAoIW1fb3RTVkdUYWJsZSkgewogICAgICAgICBpZiAoYXV0byB0YWJs
ZURhdGEgPSBhZG9wdENGKENURm9udENvcHlUYWJsZShwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwg
a0NURm9udFRhYmxlU1ZHLCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKSkKICAgICAgICAg
ICAgIG1fb3RTVkdUYWJsZSA9IFBBTDo6T1RTVkdUYWJsZSh0YWJsZURhdGEuZ2V0KCksIGZvbnRN
ZXRyaWNzKCkudW5pdHNQZXJFbSgpLCBwbGF0Zm9ybURhdGEoKS5zaXplKCkpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBtX290U1ZHVGFibGUgPSB7eyB9fTsKICAgICB9CisgICAgcmV0dXJu
IG1fb3RTVkdUYWJsZS52YWx1ZSgpOworfQorI2VuZGlmCiAKLSAgICBpZiAoIVBBTDo6aXNPVFNW
R0ZyYW1ld29ya0F2YWlsYWJsZSgpIHx8ICFtX290U1ZHVGFibGUudmFsdWUoKS50YWJsZSkKK09w
dGlvbmFsPEJpdFZlY3Rvcj4gRm9udDo6ZmluZE9UU1ZHR2x5cGhzKGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqIGdseXBocywgdW5zaWduZWQgY291bnQpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oQ09D
T0EpCisgICAgT1RTVkdUYWJsZVJlZiB0YWJsZSA9IG90U1ZHVGFibGUoKS50YWJsZTsKKyAgICBp
ZiAoIXRhYmxlKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgT3B0aW9uYWw8Qml0VmVjdG9y
PiByZXN1bHQ7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAg
ICAgICAgaWYgKFBBTDo6c29mdExpbmtPVFNWR09UU1ZHVGFibGVHZXREb2N1bWVudEluZGV4Rm9y
R2x5cGgobV9vdFNWR1RhYmxlLnZhbHVlKCkudGFibGUsIGdseXBoc1tpXSkgIT0ga0NGTm90Rm91
bmQpIHsKKyAgICAgICAgaWYgKFBBTDo6c29mdExpbmtPVFNWR09UU1ZHVGFibGVHZXREb2N1bWVu
dEluZGV4Rm9yR2x5cGgodGFibGUsIGdseXBoc1tpXSkgIT0ga0NGTm90Rm91bmQpIHsKICAgICAg
ICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IEJpdFZlY3Rvcihj
b3VudCk7CiAgICAgICAgICAgICByZXN1bHQudmFsdWUoKS5xdWlja1NldChpKTsKQEAgLTgwNCw0
ICs4MTEsNTMgQEAgT3B0aW9uYWw8Qml0VmVjdG9yPiBGb250OjpmaW5kT1RTVkdHbHlwaHMoY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCB1bnNpZ24KICNlbmRpZgogfQogCitib29sIEZv
bnQ6Omhhc0FueUNvbXBsZXhDb2xvckZvcm1hdEdseXBocyhjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIHVuc2lnbmVkIGNvdW50KSBjb25zdAoreworI2lmIFBMQVRGT1JNKENPQ09BKQor
ICAgIGlmIChtX2hhc05vQ29tcGxleENvbG9yRm9ybWF0R2x5cGhzKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIW1fZ2x5cGhzV2l0aENvbXBsZXhDb2xvckZvcm1hdCkgeworICAg
ICAgICBib29sIGhhc0FueVJlbGV2YW50VGFibGUgPSBmYWxzZTsKKyAgICAgICAgbV9nbHlwaHNX
aXRoQ29tcGxleENvbG9yRm9ybWF0ID0gQml0VmVjdG9yKCk7CisKKyAgICAgICAgT1RTVkdUYWJs
ZVJlZiBzdmdUYWJsZSA9IG90U1ZHVGFibGUoKS50YWJsZTsKKyAgICAgICAgaGFzQW55UmVsZXZh
bnRUYWJsZSB8PSAhIXN2Z1RhYmxlOworCisjaWYgSEFWRShDT1JFX1RFWFRfU0JJWF9JTUFHRV9T
SVpFX0ZVTkNUSU9OUykKKyAgICAgICAgYXV0byBzYml4VGFibGVEYXRhID0gYWRvcHRDRihDVEZv
bnRDb3B5VGFibGUocGxhdGZvcm1EYXRhKCkuY3RGb250KCksIGtDVEZvbnRUYWJsZVNiaXgsIGtD
VEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpOworICAgICAgICBoYXNBbnlSZWxldmFudFRhYmxl
IHw9ICEhc2JpeFRhYmxlRGF0YTsKKyNlbmRpZgorCisgICAgICAgIGlmICghaGFzQW55UmVsZXZh
bnRUYWJsZSkgeworICAgICAgICAgICAgbV9oYXNOb0NvbXBsZXhDb2xvckZvcm1hdEdseXBocyA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB1
bnNpZ25lZCBnbHlwaENvdW50ID0gQ1RGb250R2V0R2x5cGhDb3VudChnZXRDVEZvbnQoKSk7Cisg
ICAgICAgIG1fZ2x5cGhzV2l0aENvbXBsZXhDb2xvckZvcm1hdC52YWx1ZSgpLmVuc3VyZVNpemUo
Z2x5cGhDb3VudCk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBnbHlwaElEID0gMDsgZ2x5cGhJ
RCA8IGdseXBoQ291bnQ7ICsrZ2x5cGhJRCkgeworICAgICAgICAgICAgYm9vbCBpc0NvbXBsZXhD
b2xvckZvcm1hdEdseXBoID0gc3ZnVGFibGUgJiYgUEFMOjpzb2Z0TGlua09UU1ZHT1RTVkdUYWJs
ZUdldERvY3VtZW50SW5kZXhGb3JHbHlwaChzdmdUYWJsZSwgZ2x5cGhzW2dseXBoSURdKSAhPSBr
Q0ZOb3RGb3VuZDsKKyNpZiBIQVZFKENPUkVfVEVYVF9TQklYX0lNQUdFX1NJWkVfRlVOQ1RJT05T
KQorICAgICAgICAgICAgLy8gVGhlcmUncyBubyBmdW5jdGlvbiB0byBkaXJlY3RseSBsb29rIHVw
IHRoZSBzYml4IHRhYmxlLCBzbyB1c2UgdGhlIGZhY3QgdGhhdCB0aGlzIG9uZSByZXR1cm5zIGEg
bm9uLXplcm8gdmFsdWUgaWZmIHRoZXJlJ3MgYW4gc2JpeCBlbnRyeS4KKyAgICAgICAgICAgIGlz
Q29tcGxleENvbG9yRm9ybWF0R2x5cGggfD0gc2JpeFRhYmxlRGF0YSAmJiBDVEZvbnRHZXRTYml4
SW1hZ2VTaXplRm9yR2x5cGhBbmRDb250ZW50c1NjYWxlKGdldENURm9udCgpLCBnbHlwaElELCAw
KTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKGlzQ29tcGxleENvbG9yRm9ybWF0R2x5cGgpCisg
ICAgICAgICAgICAgICAgbV9nbHlwaHNXaXRoQ29tcGxleENvbG9yRm9ybWF0LnZhbHVlKCkucXVp
Y2tTZXQoZ2x5cGhJRCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBpZiAobV9nbHlwaHNXaXRoQ29tcGxleENv
bG9yRm9ybWF0LnZhbHVlKCkuY29udGFpbnMoZ2x5cGhzW2ldKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShnbHlwaHMpOworICAgIFVOVVNFRF9QQVJBTShjb3VudCk7CisgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429505</attachid>
            <date>2021-05-23 23:21:26 -0700</date>
            <delta_ts>2021-05-24 21:31:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226159-20210524162124.patch</filename>
            <type>text/plain</type>
            <size>12364</size>
            <attacher name="Cameron McCormack (:heycam)">heycam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDcwMWRhMDNjOGE4ZWNhYTBmNjllYTUw
YTBhMTVmY2QxY2ViYWMyMGYuLjQ5M2RkOWI3N2NkYTM2NTcxMWU5YTk3NTI5NmI3MzM4YTlmMTc1
YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUtMjIgIENhbWVyb24gTWNDb3JtYWNrICA8
aGV5Y2FtQGFwcGxlLmNvbT4KKworICAgICAgICBQcmV2ZW50IHNiaXggZ2x5cGhzIGZyb20gYmVp
bmcgcmVuZGVyZWQgaW4gdGhlIEdQVSBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNTkKKyAgICAgICAgPHJkYXI6Ly83NzIzMTk1OT4K
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIHd0Zi9QbGF0
Zm9ybUhhdmUuaDogQWRkIEhBVkVfQ09SRV9URVhUX1NCSVhfSU1BR0VfU0laRV9GVU5DVElPTlMu
CisKIDIwMjEtMDUtMjMgIENhbWVyb24gTWNDb3JtYWNrICA8aGV5Y2FtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBGaXggdHlwbyBpbiBPcHRpb25hbDxUJj46OnZhbHVlKCkgY29uc3QuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggNWRiYTVmZmZmYzA5MmJkMGNhODI2ZTEzYWI4MGYyZDJiMmFmY2FmMS4uYzRmNmRjZWFm
ZmViY2U1MGMxYTAxY2U3YTRmM2ViM2FlZDY5NThhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQx
IEBACisyMDIxLTA1LTIyICBDYW1lcm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CisK
KyAgICAgICAgUHJldmVudCBzYml4IGdseXBocyBmcm9tIGJlaW5nIHJlbmRlcmVkIGluIHRoZSBH
UFUgcHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI2MTU5CisgICAgICAgIDxyZGFyOi8vNzcyMzE5NTk+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgV2hlbiBHUFVQIGNhbnZhcyBpcyBlbmFibGVkLCB0
aGUgZGlzcGxheSBsaXN0IHJlY29yZGVyIGhhbmRsZXMgc2JpeAorICAgICAgICBnbHlwaHMgYnkg
cmVjb3JkaW5nIGRyYXdJbWFnZSBjYWxscy4gVGhpcyBtZWFucyB0aGF0IGR1cmluZyBkaXNwbGF5
IGxpc3QKKyAgICAgICAgcmVwbGF5LCB3ZSBzaG91bGQgbm90IGhhdmUgYW55IHNiaXggZ2x5cGhz
IGluIGEgRHJhd0dseXBocyBkaXNwbGF5IGxpc3QKKyAgICAgICAgaXRlbS4gVGhpcyBwYXRjaCBj
aGVja3MgZm9yIHN1Y2ggZ2x5cGhzIChsaWtlIHdlIGFscmVhZHkgZG8gZm9yIFNWRworICAgICAg
ICBnbHlwaHMpIGFuZCByZXR1cm5zIGVhcmx5IGlmIHRoZXkncmUgZm91bmQuCisKKyAgICAgICAg
TWFudWFsbHkgdGVzdGVkLiBObyBuZXcgdGVzdHMsIHNpbmNlIHdlJ2QgbmVlZCB0byBhZGQgc29t
ZSB3YXkgaW5qZWN0CisgICAgICAgIHNiaXggZ2x5cGggSURzIGludG8gZGlzcGxheSBsaXN0IGl0
ZW1zLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0dseXBocyk6IENhbGwg
bmV3IGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGZvcgorICAgICAgICBTVkcgYW5kIHNiaXggZ2x5cGgg
cHJlc2VuY2UuIENoYW5nZSByZWxlYXNlIGFzc2VydGlvbiB0byBkZWJ1ZworICAgICAgICBhc3Nl
cnRpb24gdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBjcmFzaGluZyB0aGUgR1BVUCwgYW5kIGluc3Rl
YWQgcmV0dXJuCisgICAgICAgIGVhcmx5IGluIHRoZSBwcmVzZW5jZSBvZiB0aGVzZSBnbHlwaHMu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVUZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om90U1ZHVGFibGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6Z2x5cGhzV2l0aENvbXBsZXhDb2xvckZvcm1hdCBjb25zdCk6IFNpbmNlIGNh
bGxpbmcgdGhlCisgICAgICAgIENvcmVUZXh0IGZ1bmN0aW9uIHRoYXQgYWxsb3dzIHVzIHRvIGNo
ZWNrIGlmIGFuIHNiaXggZ2x5cGggZXhpc3RzIHdvdWxkCisgICAgICAgIGJlIHRvbyBleHBlbnNp
dmUgdG8gY2FsbCBmb3IgZXZlcnkgZHJhd0dseXBocyBjYWxsLCB3ZSBjYWNoZSBhIEJpdFZlY3Rv
cgorICAgICAgICBvZiBzYml4IGdseXBoIHN0YXR1cyBvbiB0aGUgRm9udCB0aGUgZmlyc3QgdGlt
ZSBpdCdzIHJlcXVlc3RlZC4gQW5kCisgICAgICAgIHNpbmNlIHdlIGFyZSBjYWNoaW5nIHRoYXQg
c3RhdGUsIHdlIG1heSBhcyB3ZWxsIGFsc28gY2FjaGUgdGhlIHByZXNlbmNlCisgICAgICAgIG9m
IFNWRyBnbHlwaHMuCisgICAgICAgIChXZWJDb3JlOjpGb250OjpmaW5kT1RTVkdHbHlwaHMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6aGFzQW55Q29tcGxleENvbG9yRm9ybWF0R2x5
cGhzIGNvbnN0KTogTmV3IGZ1bmN0aW9uIHRvCisgICAgICAgIGNoZWNrIGlmIGEgbGlzdCBvZiBn
bHlwaCBJRHMgaGFzIGFueSB0aGF0IHdvdWxkIGJlIGluYXBwcm9wcmlhdGUKKyAgICAgICAgdG8g
cmVuZGVyIGluIHRoZSBHUFUgcHJvY2Vzcy4KKwogMjAyMS0wNS0yMyAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBDaGVja2VkTG9jayBpbiBldmVuIG1vcmUg
cGxhY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCA0NTJjNWRiMGM2YTI1MmIzNjg5NDg2OTI2Zjk3
Y2Q1YWIxODMyZDM0Li4yZjBjNmUxZjBmZWNmZmFkN2U0ODgwMmE0Y2U0MGIzMDUyZTI4ODk4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNS0yMiAgQ2FtZXJvbiBN
Y0Nvcm1hY2sgIDxoZXljYW1AYXBwbGUuY29tPgorCisgICAgICAgIFByZXZlbnQgc2JpeCBnbHlw
aHMgZnJvbSBiZWluZyByZW5kZXJlZCBpbiB0aGUgR1BVIHByb2Nlc3MKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjE1OQorICAgICAgICA8cmRhcjov
Lzc3MjMxOTU5PgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
ICogcGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oOiBBZGQgZGVjbGFyYXRpb24gZm9yIGFuIFNQSSB0
aGF0IGxldHMgdXMKKyAgICAgICAgaW5mZXIgd2hldGhlciBhIGdseXBoIGhhcyBhbiBzYml4IGlt
YWdlLgorCiAyMDIxLTA1LTIxICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29t
PgogCiAgICAgICAgIFttYWNPU10gQWRvcHQgUUxJdGVtIGluIFdLSW1hZ2VFeHRyYWN0aW9uUHJl
dmlld0NvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5o
IGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1IYXZlLmgKaW5kZXggMDJhMDdmMTNlMGRmODEwNmI1
NjBiZDE0ZjAzZTU4MmZlMmRlMjJiZC4uYzllMWU3ODUwZmM4NDQyNDZlMDY5NDI0ZDk3ZmJlYjA1
ZWFhMDI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1IYXZlLmgKKysrIGIv
U291cmNlL1dURi93dGYvUGxhdGZvcm1IYXZlLmgKQEAgLTk3NiwzICs5NzYsMTEgQEAKICNpZiBQ
TEFURk9STShDT0NPQSkgJiYgIShQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05f
TUlOX1JFUVVJUkVEIDwgMTUwMDAwKQogI2RlZmluZSBIQVZFX1NZU1RFTV9TQU5EQk9YRVNfQUxM
T1dJTkdfVEVSTUlOQVRFX1dJVEhfUkVBU09OIDEKICNlbmRpZgorCisjaWYgKFBMQVRGT1JNKE1B
QykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAgXAorICAgIHx8
IChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDE0
MDAwMCkgXAorICAgIHx8IChQTEFURk9STShXQVRDSE9TKSAmJiBfX1dBVENIX09TX1ZFUlNJT05f
TUlOX1JFUVVJUkVEID49IDcwMDAwKSBcCisgICAgfHwgKFBMQVRGT1JNKEFQUExFVFYpICYmIF9f
VFZfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTQwMDAwKSBcCisgICAgfHwgKFBMQVRGT1JN
KE1BQ0NBVEFMWVNUKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxNDAw
MDApKQorI2RlZmluZSBIQVZFX0NPUkVfVEVYVF9TQklYX0lNQUdFX1NJWkVfRlVOQ1RJT05TIDEK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY2YvQ29yZVRl
eHRTUEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmgKaW5k
ZXggOWE2YThjOTk0NzU4NWJjYjkxOGM0YmRiMjM1OWE1OTA5Y2EwMzE5Zi4uNDkwODY2Mzk4YzRi
NTA0NTQwOTRiYmE5NGZlODE4ZGFjM2VmOGNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9zcGkvY2YvQ29yZVRleHRTUEkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L3NwaS9jZi9Db3JlVGV4dFNQSS5oCkBAIC0yMDMsNSArMjAzLDYgQEAgQ1RGb250RGVzY3JpcHRv
clJlZiBDVEZvbnRDcmVhdGVQaHlzaWNhbEZvbnREZXNjcmlwdG9yRm9yQ2hhcmFjdGVyc1dpdGhM
YW5ndWFnZSgKIAogYm9vbCBDVEZvbnRJc0FwcGxlQ29sb3JFbW9qaShDVEZvbnRSZWYpOwogQ1RG
b250UmVmIENURm9udENyZWF0ZUZvckNoYXJhY3RlcnMoQ1RGb250UmVmIGN1cnJlbnRGb250LCBj
b25zdCBVVEYxNkNoYXIgKmNoYXJhY3RlcnMsIENGSW5kZXggbGVuZ3RoLCBDRkluZGV4ICpjb3Zl
cmVkTGVuZ3RoKTsKK0NHRmxvYXQgQ1RGb250R2V0U2JpeEltYWdlU2l6ZUZvckdseXBoQW5kQ29u
dGVudHNTY2FsZShDVEZvbnRSZWYsIGNvbnN0IENHR2x5cGgsIENHRmxvYXQgY29udGVudHNTY2Fs
ZSk7CiAKIFdURl9FWFRFUk5fQ19FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5jcHAKaW5kZXggZjk5MTgzZDdjY2JiODU0ZTRlNGZiY2M1NTA5YTMwM2FiM2I1MjdmZi4u
ODMyMjEzYTliZGM2NzdhNTFhYTI1ZTIxYjE3ZDE4M2QzNjA0MWMzZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKQEAgLTkyLDYgKzkyLDkgQEAgRm9udDo6Rm9u
dChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEsIE9yaWdpbiBvcmlnaW4sIElu
dGVyc3RpdGlhbCBpbnQKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICwgbV9zaG91bGRO
b3RCZVVzZWRGb3JBcmFiaWMoZmFsc2UpCiAjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKKyAg
ICAsIG1faGFzTm9Db21wbGV4Q29sb3JGb3JtYXRHbHlwaHMoZmFsc2UpCisjZW5kaWYKIHsKICAg
ICBwbGF0Zm9ybUluaXQoKTsKICAgICBwbGF0Zm9ybUdseXBoSW5pdCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IDc1ZjY0NmJmZDBjMzg1ZTBhNDNiYmI2MWU2
NzcyYTQ4MWEwOTY2YWUuLjEzNjc2MDMyODM2OGRlZDM2NjM0NWZkMzBmY2FiMmNjYTFlMmZjZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAgLTIyMyw2ICsyMjMs
OCBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyBudWxsb3B0IGlmIG5vbmUgb2YgdGhlIGdseXBo
cyBhcmUgT1QtU1ZHIGdseXBocy4KICAgICBPcHRpb25hbDxCaXRWZWN0b3I+IGZpbmRPVFNWR0ds
eXBocyhjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgdW5zaWduZWQgY291bnQpIGNvbnN0OwogCisg
ICAgYm9vbCBoYXNBbnlDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHMoY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCosIHVuc2lnbmVkIGNvdW50KSBjb25zdDsKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICBT
Q1JJUFRfRk9OVFBST1BFUlRJRVMqIHNjcmlwdEZvbnRQcm9wZXJ0aWVzKCkgY29uc3Q7CiAgICAg
U0NSSVBUX0NBQ0hFKiBzY3JpcHRDYWNoZSgpIGNvbnN0IHsgcmV0dXJuICZtX3NjcmlwdENhY2hl
OyB9CkBAIC0yNTcsNiArMjU5LDExIEBAIHByaXZhdGU6CiAgICAgZmxvYXQgd2lkdGhGb3JHRElH
bHlwaChHbHlwaCkgY29uc3Q7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGNv
bnN0IFBBTDo6T1RTVkdUYWJsZSYgb3RTVkdUYWJsZSgpIGNvbnN0OworICAgIGNvbnN0IEJpdFZl
Y3RvciogZ2x5cGhzV2l0aENvbXBsZXhDb2xvckZvcm1hdCgpIGNvbnN0OworI2VuZGlmCisKICAg
ICBGb250TWV0cmljcyBtX2ZvbnRNZXRyaWNzOwogICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoIHsg
LTEgfTsKICAgICBmbG9hdCBtX2F2Z0NoYXJXaWR0aCB7IC0xIH07CkBAIC0yOTcsNiArMzA0LDcg
QEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIE9wdGlvbmFsPEJpdFZlY3Rvcj4gbV9nbHlwaHNTdXBw
b3J0ZWRCeUFsbFNtYWxsQ2FwczsKICAgICBtdXRhYmxlIE9wdGlvbmFsPEJpdFZlY3Rvcj4gbV9n
bHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHM7CiAgICAgbXV0YWJsZSBPcHRpb25hbDxCaXRWZWN0
b3I+IG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzOworICAgIG11dGFibGUgT3B0aW9u
YWw8Qml0VmVjdG9yPiBtX2dseXBoc1dpdGhDb21wbGV4Q29sb3JGb3JtYXQ7IC8vIFNWRyBhbmQg
c2JpeAogICAgIG11dGFibGUgT3B0aW9uYWw8UEFMOjpPVFNWR1RhYmxlPiBtX290U1ZHVGFibGU7
CiAjZW5kaWYKIApAQCAtMzM0LDYgKzM0MiwxMCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1f
c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljIDogMTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09D
T0EpCisgICAgbXV0YWJsZSB1bnNpZ25lZCBtX2hhc05vQ29tcGxleENvbG9yRm9ybWF0R2x5cGhz
IDogMTsKKyNlbmRpZgorCiAgICAgLy8gQWRkaW5nIGFueSBub24tZGVyaXZlZCBpbmZvcm1hdGlv
biB0byBGb250IG5lZWRzIGEgcGFyYWxsZWwgY2hhbmdlIGluIFdlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAuCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCmluZGV4IDZmZjAw
YmZiZDU0YTJiOGExOGVlYzA1ODQ5MDc5MzU0YzAyMTJkYjAuLjc1NTdkMGFjZTQ0Y2JlM2MzZGE5
NTcxZTZlZWU4ZjZhNDA2OTYyZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3Bw
CkBAIC0xOTAsOSArMTkwLDEyIEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHCiAgICAgaWYgKCFw
bGF0Zm9ybURhdGEuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDR0NvbnRleHRSZWYg
Y2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBpZiAoaXNJbkdQVVBy
b2Nlc3MoKSAmJiBmb250Lmhhc0FueUNvbXBsZXhDb2xvckZvcm1hdEdseXBocyhnbHlwaHMsIG51
bUdseXBocykpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNJbkdQVVByb2Nlc3MoKSB8fCAhZm9u
dC5maW5kT1RTVkdHbHlwaHMoZ2x5cGhzLCBudW1HbHlwaHMpKTsKKyAgICBDR0NvbnRleHRSZWYg
Y2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIGJvb2wgc2hvdWxk
QW50aWFsaWFzID0gdHJ1ZTsKICAgICBib29sIHNob3VsZFNtb290aEZvbnRzID0gdHJ1ZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRD
b3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9G
b250Q29yZVRleHQuY3BwCmluZGV4IGVmODZlNGMzYzJiYmJhODc0NmUyNDFlNDM1MWU3ODBlNzQz
M2QzMTYuLmNhNzEyZTQxNDNlYjk5MmM5OWZhYTgwZThiNTUwNGIwZDcwM2Y1ODkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9u
dENvcmVUZXh0LmNwcApAQCAtNzc1LDIyICs3NzUsNjYgQEAgYm9vbCBGb250Ojppc1Byb2JhYmx5
T25seVVzZWRUb1JlbmRlckljb25zKCkgY29uc3QKICAgICB9KTsKIH0KIAotT3B0aW9uYWw8Qml0
VmVjdG9yPiBGb250OjpmaW5kT1RTVkdHbHlwaHMoY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5
cGhzLCB1bnNpZ25lZCBjb3VudCkgY29uc3QKLXsKICNpZiBQTEFURk9STShDT0NPQSkKK2NvbnN0
IFBBTDo6T1RTVkdUYWJsZSYgRm9udDo6b3RTVkdUYWJsZSgpIGNvbnN0Cit7CiAgICAgaWYgKCFt
X290U1ZHVGFibGUpIHsKICAgICAgICAgaWYgKGF1dG8gdGFibGVEYXRhID0gYWRvcHRDRihDVEZv
bnRDb3B5VGFibGUocGxhdGZvcm1EYXRhKCkuY3RGb250KCksIGtDVEZvbnRUYWJsZVNWRywga0NU
Rm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSkpCiAgICAgICAgICAgICBtX290U1ZHVGFibGUgPSBQ
QUw6Ok9UU1ZHVGFibGUodGFibGVEYXRhLmdldCgpLCBmb250TWV0cmljcygpLnVuaXRzUGVyRW0o
KSwgcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9v
dFNWR1RhYmxlID0ge3sgfX07CiAgICAgfQorICAgIHJldHVybiBtX290U1ZHVGFibGUudmFsdWUo
KTsKK30KKworY29uc3QgQml0VmVjdG9yKiBGb250OjpnbHlwaHNXaXRoQ29tcGxleENvbG9yRm9y
bWF0KCkgY29uc3QKK3sKKyAgICBpZiAobV9nbHlwaHNXaXRoQ29tcGxleENvbG9yRm9ybWF0KQor
ICAgICAgICByZXR1cm4gbV9oYXNOb0NvbXBsZXhDb2xvckZvcm1hdEdseXBocyA/IG51bGxwdHIg
OiAmbV9nbHlwaHNXaXRoQ29tcGxleENvbG9yRm9ybWF0LnZhbHVlKCk7CisKKyAgICBib29sIGhh
c0FueVJlbGV2YW50VGFibGUgPSBmYWxzZTsKKyAgICBtX2dseXBoc1dpdGhDb21wbGV4Q29sb3JG
b3JtYXQgPSBCaXRWZWN0b3IoKTsKKworICAgIE9UU1ZHVGFibGVSZWYgc3ZnVGFibGUgPSBvdFNW
R1RhYmxlKCkudGFibGU7CisgICAgaGFzQW55UmVsZXZhbnRUYWJsZSB8PSAhIXN2Z1RhYmxlOwor
CisjaWYgSEFWRShDT1JFX1RFWFRfU0JJWF9JTUFHRV9TSVpFX0ZVTkNUSU9OUykKKyAgICBhdXRv
IHNiaXhUYWJsZURhdGEgPSBhZG9wdENGKENURm9udENvcHlUYWJsZShwbGF0Zm9ybURhdGEoKS5j
dEZvbnQoKSwga0NURm9udFRhYmxlU2JpeCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7
CisgICAgaGFzQW55UmVsZXZhbnRUYWJsZSB8PSAhIXNiaXhUYWJsZURhdGE7CisjZW5kaWYKKwor
ICAgIGlmICghaGFzQW55UmVsZXZhbnRUYWJsZSkgeworICAgICAgICBtX2hhc05vQ29tcGxleENv
bG9yRm9ybWF0R2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgdW5zaWduZWQgZ2x5cGhDb3VudCA9IENURm9udEdldEdseXBoQ291bnQoZ2V0Q1RGb250
KCkpOworICAgIG1fZ2x5cGhzV2l0aENvbXBsZXhDb2xvckZvcm1hdC52YWx1ZSgpLmVuc3VyZVNp
emUoZ2x5cGhDb3VudCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGdseXBoSUQgPSAwOyBnbHlwaElE
IDwgZ2x5cGhDb3VudDsgKytnbHlwaElEKSB7CisgICAgICAgIGJvb2wgaXNDb21wbGV4Q29sb3JG
b3JtYXRHbHlwaCA9IHN2Z1RhYmxlICYmIFBBTDo6c29mdExpbmtPVFNWR09UU1ZHVGFibGVHZXRE
b2N1bWVudEluZGV4Rm9yR2x5cGgoc3ZnVGFibGUsIGdseXBoSUQpICE9IGtDRk5vdEZvdW5kOwor
I2lmIEhBVkUoQ09SRV9URVhUX1NCSVhfSU1BR0VfU0laRV9GVU5DVElPTlMpCisgICAgICAgIC8v
IFRoZXJlJ3Mgbm8gZnVuY3Rpb24gdG8gZGlyZWN0bHkgbG9vayB1cCB0aGUgc2JpeCB0YWJsZSwg
c28gdXNlIHRoZSBmYWN0IHRoYXQgdGhpcyBvbmUgcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlIGlm
ZiB0aGVyZSdzIGFuIHNiaXggZW50cnkuCisgICAgICAgIGlzQ29tcGxleENvbG9yRm9ybWF0R2x5
cGggfD0gc2JpeFRhYmxlRGF0YSAmJiBDVEZvbnRHZXRTYml4SW1hZ2VTaXplRm9yR2x5cGhBbmRD
b250ZW50c1NjYWxlKGdldENURm9udCgpLCBnbHlwaElELCAwKTsKKyNlbmRpZgorICAgICAgICBp
ZiAoaXNDb21wbGV4Q29sb3JGb3JtYXRHbHlwaCkKKyAgICAgICAgICAgIG1fZ2x5cGhzV2l0aENv
bXBsZXhDb2xvckZvcm1hdC52YWx1ZSgpLnF1aWNrU2V0KGdseXBoSUQpOworICAgIH0KKworICAg
IHJldHVybiAmbV9nbHlwaHNXaXRoQ29tcGxleENvbG9yRm9ybWF0LnZhbHVlKCk7Cit9CisjZW5k
aWYKIAotICAgIGlmICghUEFMOjppc09UU1ZHRnJhbWV3b3JrQXZhaWxhYmxlKCkgfHwgIW1fb3RT
VkdUYWJsZS52YWx1ZSgpLnRhYmxlKQorT3B0aW9uYWw8Qml0VmVjdG9yPiBGb250OjpmaW5kT1RT
VkdHbHlwaHMoY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCB1bnNpZ25lZCBjb3VudCkg
Y29uc3QKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBPVFNWR1RhYmxlUmVmIHRhYmxlID0g
b3RTVkdUYWJsZSgpLnRhYmxlOworICAgIGlmICghdGFibGUpCiAgICAgICAgIHJldHVybiB7IH07
CiAKICAgICBPcHRpb25hbDxCaXRWZWN0b3I+IHJlc3VsdDsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAoUEFMOjpzb2Z0TGlua09UU1ZHT1RT
VkdUYWJsZUdldERvY3VtZW50SW5kZXhGb3JHbHlwaChtX290U1ZHVGFibGUudmFsdWUoKS50YWJs
ZSwgZ2x5cGhzW2ldKSAhPSBrQ0ZOb3RGb3VuZCkgeworICAgICAgICBpZiAoUEFMOjpzb2Z0TGlu
a09UU1ZHT1RTVkdUYWJsZUdldERvY3VtZW50SW5kZXhGb3JHbHlwaCh0YWJsZSwgZ2x5cGhzW2ld
KSAhPSBrQ0ZOb3RGb3VuZCkgewogICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gQml0VmVjdG9yKGNvdW50KTsKICAgICAgICAgICAgIHJlc3VsdC52YWx1
ZSgpLnF1aWNrU2V0KGkpOwpAQCAtODA0LDQgKzg0OCwyMyBAQCBPcHRpb25hbDxCaXRWZWN0b3I+
IEZvbnQ6OmZpbmRPVFNWR0dseXBocyhjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIHVu
c2lnbgogI2VuZGlmCiB9CiAKK2Jvb2wgRm9udDo6aGFzQW55Q29tcGxleENvbG9yRm9ybWF0R2x5
cGhzKGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgdW5zaWduZWQgY291bnQpIGNvbnN0
Cit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgYXV0byBjb21wbGV4R2x5cGhzID0gZ2x5cGhz
V2l0aENvbXBsZXhDb2xvckZvcm1hdCgpOworICAgIGlmICghY29tcGxleEdseXBocykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKKyAgICAgICAgaWYgKGNvbXBsZXhHbHlwaHMtPmNvbnRhaW5zKGdseXBoc1tpXSkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oZ2x5cGhzKTsKKyAgICBVTlVTRURfUEFSQU0oY291bnQpOworICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429628</attachid>
            <date>2021-05-24 21:31:25 -0700</date>
            <delta_ts>2021-05-24 21:41:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226159-20210525143123.patch</filename>
            <type>text/plain</type>
            <size>13778</size>
            <attacher name="Cameron McCormack (:heycam)">heycam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDcwMWRhMDNjOGE4ZWNhYTBmNjllYTUw
YTBhMTVmY2QxY2ViYWMyMGYuLjQ5M2RkOWI3N2NkYTM2NTcxMWU5YTk3NTI5NmI3MzM4YTlmMTc1
YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUtMjIgIENhbWVyb24gTWNDb3JtYWNrICA8
aGV5Y2FtQGFwcGxlLmNvbT4KKworICAgICAgICBQcmV2ZW50IHNiaXggZ2x5cGhzIGZyb20gYmVp
bmcgcmVuZGVyZWQgaW4gdGhlIEdQVSBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNTkKKyAgICAgICAgPHJkYXI6Ly83NzIzMTk1OT4K
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIHd0Zi9QbGF0
Zm9ybUhhdmUuaDogQWRkIEhBVkVfQ09SRV9URVhUX1NCSVhfSU1BR0VfU0laRV9GVU5DVElPTlMu
CisKIDIwMjEtMDUtMjMgIENhbWVyb24gTWNDb3JtYWNrICA8aGV5Y2FtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBGaXggdHlwbyBpbiBPcHRpb25hbDxUJj46OnZhbHVlKCkgY29uc3QuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggNWRiYTVmZmZmYzA5MmJkMGNhODI2ZTEzYWI4MGYyZDJiMmFmY2FmMS4uZmFiMTBjZTZi
OTllNjc1OTc4MjYzODI0NTRiYWUwODkwZGFiYWZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4
IEBACisyMDIxLTA1LTIyICBDYW1lcm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CisK
KyAgICAgICAgUHJldmVudCBzYml4IGdseXBocyBmcm9tIGJlaW5nIHJlbmRlcmVkIGluIHRoZSBH
UFUgcHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI2MTU5CisgICAgICAgIDxyZGFyOi8vNzcyMzE5NTk+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgV2hlbiBHUFVQIGNhbnZhcyBpcyBlbmFibGVkLCB0
aGUgZGlzcGxheSBsaXN0IHJlY29yZGVyIGhhbmRsZXMgc2JpeAorICAgICAgICBnbHlwaHMgYnkg
cmVjb3JkaW5nIGRyYXdJbWFnZSBjYWxscy4gVGhpcyBtZWFucyB0aGF0IGR1cmluZyBkaXNwbGF5
IGxpc3QKKyAgICAgICAgcmVwbGF5LCB3ZSBzaG91bGQgbm90IGhhdmUgYW55IHNiaXggZ2x5cGhz
IGluIGEgRHJhd0dseXBocyBkaXNwbGF5IGxpc3QKKyAgICAgICAgaXRlbS4gVGhpcyBwYXRjaCBj
aGVja3MgZm9yIHN1Y2ggZ2x5cGhzIChsaWtlIHdlIGFscmVhZHkgZG8gZm9yIFNWRworICAgICAg
ICBnbHlwaHMpIGFuZCByZXR1cm5zIGVhcmx5IGlmIHRoZXkncmUgZm91bmQuCisKKyAgICAgICAg
TWFudWFsbHkgdGVzdGVkLiBObyBuZXcgdGVzdHMsIHNpbmNlIHdlJ2QgbmVlZCB0byBhZGQgc29t
ZSB3YXkgaW5qZWN0CisgICAgICAgIHNiaXggZ2x5cGggSURzIGludG8gZGlzcGxheSBsaXN0IGl0
ZW1zLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzOjpoYXNSZWxldmFudFRhYmxlcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM6
OnZhbGlkQml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEds
eXBoczo6dmFsdWVCaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Q29tcGxleENvbG9yRm9y
bWF0R2x5cGhzOjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOiBDYWxsIG5ldyBmdW5jdGlvbiB0aGF0IGNo
ZWNrcyBmb3IKKyAgICAgICAgU1ZHIGFuZCBzYml4IGdseXBoIHByZXNlbmNlLiBDaGFuZ2UgcmVs
ZWFzZSBhc3NlcnRpb24gdG8gZGVidWcKKyAgICAgICAgYXNzZXJ0aW9uIHRvIGF2b2lkIHVubmVj
ZXNzYXJpbHkgY3Jhc2hpbmcgdGhlIEdQVVAsIGFuZCBpbnN0ZWFkIHJldHVybgorICAgICAgICBl
YXJseSBpbiB0aGUgcHJlc2VuY2Ugb2YgdGhlc2UgZ2x5cGhzLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250OjpvdFNWR1RhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXhD
b2xvckZvcm1hdEdseXBoczo6d2l0aE5vUmVsZXZhbnRUYWJsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udDo6Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzOjp3aXRoUmVsZXZhbnRUYWJsZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzOjpoYXNWYWx1
ZUZvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpDb21wbGV4Q29sb3JGb3JtYXRH
bHlwaHM6OmdldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpDb21wbGV4Q29sb3JG
b3JtYXRHbHlwaHM6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpoYXNDb21wbGV4Q29s
b3JGb3JtYXRUYWJsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2x5cGhzV2l0
aENvbXBsZXhDb2xvckZvcm1hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpnbHlw
aEhhc0NvbXBsZXhDb2xvckZvcm1hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojpm
aW5kT1RTVkdHbHlwaHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6aGFzQW55Q29t
cGxleENvbG9yRm9ybWF0R2x5cGhzIGNvbnN0KTogTmV3IGZ1bmN0aW9uIHRvCisgICAgICAgIGNo
ZWNrIGlmIGEgbGlzdCBvZiBnbHlwaCBJRHMgaGFzIGFueSB0aGF0IHdvdWxkIGJlIGluYXBwcm9w
cmlhdGUKKyAgICAgICAgdG8gcmVuZGVyIGluIHRoZSBHUFUgcHJvY2Vzcy4gU2luY2UgY2FsbGlu
ZyB0aGUgQ29yZVRleHQgZnVuY3Rpb24gdGhhdAorICAgICAgICBhbGxvd3MgdXMgdG8gY2hlY2sg
aWYgYW4gc2JpeCBnbHlwaCBleGlzdHMgd291bGQgYmUgdG9vIGV4cGVuc2l2ZSB0bworICAgICAg
ICBjYWxsIGZvciBldmVyeSBkcmF3R2x5cGhzIGNhbGwsIHdlIGxhemlseSBjYWNoZSAoaW4gYSBC
aXRWZWN0b3IpIHRoZQorICAgICAgICBwcmVzZW5jZSBvZiBzYml4IGFuZCBTVkcgaW1hZ2VzIGZv
ciBnbHlwaCBJRHMgd2UgY2hlY2suCisKIDIwMjEtMDUtMjMgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgQ2hlY2tlZExvY2sgaW4gZXZlbiBtb3JlIHBsYWNl
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggNDUyYzVkYjBjNmEyNTJiMzY4OTQ4NjkyNmY5N2NkNWFi
MTgzMmQzNC4uMmYwYzZlMWYwZmVjZmZhZDdlNDg4MDJhNGNlNDBiMzA1MmUyODg5OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDUtMjIgIENhbWVyb24gTWNDb3Jt
YWNrICA8aGV5Y2FtQGFwcGxlLmNvbT4KKworICAgICAgICBQcmV2ZW50IHNiaXggZ2x5cGhzIGZy
b20gYmVpbmcgcmVuZGVyZWQgaW4gdGhlIEdQVSBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNTkKKyAgICAgICAgPHJkYXI6Ly83NzIz
MTk1OT4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIHBh
bC9zcGkvY2YvQ29yZVRleHRTUEkuaDogQWRkIGRlY2xhcmF0aW9uIGZvciBhbiBTUEkgdGhhdCBs
ZXRzIHVzCisgICAgICAgIGluZmVyIHdoZXRoZXIgYSBnbHlwaCBoYXMgYW4gc2JpeCBpbWFnZS4K
KwogMjAyMS0wNS0yMSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbbWFjT1NdIEFkb3B0IFFMSXRlbSBpbiBXS0ltYWdlRXh0cmFjdGlvblByZXZpZXdD
b250cm9sbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaCBiL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oCmluZGV4IDAyYTA3ZjEzZTBkZjgxMDZiNTYwYmQx
NGYwM2U1ODJmZTJkZTIyYmQuLmM5ZTFlNzg1MGZjODQ0MjQ2ZTA2OTQyNGQ5N2ZiZWIwNWVhYTAy
OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oCkBAIC05NzYsMyArOTc2LDExIEBACiAjaWYgUExBVEZP
Uk0oQ09DT0EpICYmICEoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9S
RVFVSVJFRCA8IDE1MDAwMCkKICNkZWZpbmUgSEFWRV9TWVNURU1fU0FOREJPWEVTX0FMTE9XSU5H
X1RFUk1JTkFURV9XSVRIX1JFQVNPTiAxCiAjZW5kaWYKKworI2lmIChQTEFURk9STShNQUMpICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAwIFwKKyAgICB8fCAoUExB
VEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxNDAwMDAp
IFwKKyAgICB8fCAoUExBVEZPUk0oV0FUQ0hPUykgJiYgX19XQVRDSF9PU19WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSA3MDAwMCkgXAorICAgIHx8IChQTEFURk9STShBUFBMRVRWKSAmJiBfX1RWX09T
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDE0MDAwMCkgXAorICAgIHx8IChQTEFURk9STShNQUND
QVRBTFlTVCkgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTQwMDAwKSkK
KyNkZWZpbmUgSEFWRV9DT1JFX1RFWFRfU0JJWF9JTUFHRV9TSVpFX0ZVTkNUSU9OUyAxCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NmL0NvcmVUZXh0U1BJ
LmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oCmluZGV4IDlh
NmE4Yzk5NDc1ODViY2I5MThjNGJkYjIzNTlhNTkwOWNhMDMxOWYuLjQ5MDg2NjM5OGM0YjUwNDU0
MDk0YmJhOTRmZTgxOGRhYzNlZjhjZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvc3BpL2NmL0NvcmVUZXh0U1BJLmgKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkv
Y2YvQ29yZVRleHRTUEkuaApAQCAtMjAzLDUgKzIwMyw2IEBAIENURm9udERlc2NyaXB0b3JSZWYg
Q1RGb250Q3JlYXRlUGh5c2ljYWxGb250RGVzY3JpcHRvckZvckNoYXJhY3RlcnNXaXRoTGFuZ3Vh
Z2UoCiAKIGJvb2wgQ1RGb250SXNBcHBsZUNvbG9yRW1vamkoQ1RGb250UmVmKTsKIENURm9udFJl
ZiBDVEZvbnRDcmVhdGVGb3JDaGFyYWN0ZXJzKENURm9udFJlZiBjdXJyZW50Rm9udCwgY29uc3Qg
VVRGMTZDaGFyICpjaGFyYWN0ZXJzLCBDRkluZGV4IGxlbmd0aCwgQ0ZJbmRleCAqY292ZXJlZExl
bmd0aCk7CitDR0Zsb2F0IENURm9udEdldFNiaXhJbWFnZVNpemVGb3JHbHlwaEFuZENvbnRlbnRz
U2NhbGUoQ1RGb250UmVmLCBjb25zdCBDR0dseXBoLCBDR0Zsb2F0IGNvbnRlbnRzU2NhbGUpOwog
CiBXVEZfRVhURVJOX0NfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgK
aW5kZXggNzVmNjQ2YmZkMGMzODVlMGE0M2JiYjYxZTY3NzJhNDgxYTA5NjZhZS4uMTRhZjllMTNl
MjJlYTk1Njc2ZDcxZTg4MjU4NmU1ZmQzY2YwMDM0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuaApAQCAtMjIzLDYgKzIyMyw4IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1
cm5zIG51bGxvcHQgaWYgbm9uZSBvZiB0aGUgZ2x5cGhzIGFyZSBPVC1TVkcgZ2x5cGhzLgogICAg
IE9wdGlvbmFsPEJpdFZlY3Rvcj4gZmluZE9UU1ZHR2x5cGhzKGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqLCB1bnNpZ25lZCBjb3VudCkgY29uc3Q7CiAKKyAgICBib29sIGhhc0FueUNvbXBsZXhDb2xv
ckZvcm1hdEdseXBocyhjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgdW5zaWduZWQgY291bnQpIGNv
bnN0OworCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyogc2Ny
aXB0Rm9udFByb3BlcnRpZXMoKSBjb25zdDsKICAgICBTQ1JJUFRfQ0FDSEUqIHNjcmlwdENhY2hl
KCkgY29uc3QgeyByZXR1cm4gJm1fc2NyaXB0Q2FjaGU7IH0KQEAgLTI1Nyw2ICsyNTksMzcgQEAg
cHJpdmF0ZToKICAgICBmbG9hdCB3aWR0aEZvckdESUdseXBoKEdseXBoKSBjb25zdDsKICNlbmRp
ZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgY2xhc3MgQ29tcGxleENvbG9yRm9ybWF0R2x5
cGhzIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBDb21wbGV4Q29sb3JGb3JtYXRHbHlw
aHMgd2l0aE5vUmVsZXZhbnRUYWJsZXMoKTsKKyAgICAgICAgc3RhdGljIENvbXBsZXhDb2xvckZv
cm1hdEdseXBocyB3aXRoUmVsZXZhbnRUYWJsZXModW5zaWduZWQgZ2x5cGhDb3VudCk7CisKKyAg
ICAgICAgYm9vbCBoYXNWYWx1ZUZvcihHbHlwaCkgY29uc3Q7CisgICAgICAgIGJvb2wgZ2V0KEds
eXBoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXQoR2x5cGgsIGJvb2wgdmFsdWUpOworCisgICAg
ICAgIGJvb2wgaGFzUmVsZXZhbnRUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc1JlbGV2YW50
VGFibGVzOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCB2YWxpZEJpdChHbHlwaCBnbHlwaElEKSB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KGds
eXBoSUQpICogMjsgfQorICAgICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCB2YWx1ZUJpdChH
bHlwaCBnbHlwaElEKSB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KGdseXBoSUQpICogMiAr
IDE7IH0KKworICAgICAgICBDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHMoYm9vbCBoYXNSZWxldmFu
dFRhYmxlcywgc2l6ZV90IGluaXRpYWxCaXRDb3VudCkKKyAgICAgICAgICAgIDogbV9oYXNSZWxl
dmFudFRhYmxlcyhoYXNSZWxldmFudFRhYmxlcykKKyAgICAgICAgICAgICwgbV9iaXRzKGluaXRp
YWxCaXRDb3VudCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgYm9vbCBtX2hhc1JlbGV2YW50VGFi
bGVzOworICAgICAgICBCaXRWZWN0b3IgbV9iaXRzOworICAgIH07CisKKyAgICBjb25zdCBQQUw6
Ok9UU1ZHVGFibGUmIG90U1ZHVGFibGUoKSBjb25zdDsKKyAgICBib29sIGdseXBoSGFzQ29tcGxl
eENvbG9yRm9ybWF0KEdseXBoKSBjb25zdDsKKyAgICBib29sIGhhc0NvbXBsZXhDb2xvckZvcm1h
dFRhYmxlcygpIGNvbnN0OworICAgIENvbXBsZXhDb2xvckZvcm1hdEdseXBocyYgZ2x5cGhzV2l0
aENvbXBsZXhDb2xvckZvcm1hdCgpIGNvbnN0OworI2VuZGlmCisKICAgICBGb250TWV0cmljcyBt
X2ZvbnRNZXRyaWNzOwogICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoIHsgLTEgfTsKICAgICBmbG9h
dCBtX2F2Z0NoYXJXaWR0aCB7IC0xIH07CkBAIC0yOTgsNiArMzMxLDcgQEAgcHJpdmF0ZToKICAg
ICBtdXRhYmxlIE9wdGlvbmFsPEJpdFZlY3Rvcj4gbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNh
cHM7CiAgICAgbXV0YWJsZSBPcHRpb25hbDxCaXRWZWN0b3I+IG1fZ2x5cGhzU3VwcG9ydGVkQnlB
bGxQZXRpdGVDYXBzOwogICAgIG11dGFibGUgT3B0aW9uYWw8UEFMOjpPVFNWR1RhYmxlPiBtX290
U1ZHVGFibGU7CisgICAgbXV0YWJsZSBPcHRpb25hbDxDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM+
IG1fZ2x5cGhzV2l0aENvbXBsZXhDb2xvckZvcm1hdDsgLy8gU1ZHIGFuZCBzYml4CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKFdJTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKaW5k
ZXggNmZmMDBiZmJkNTRhMmI4YTE4ZWVjMDU4NDkwNzkzNTRjMDIxMmRiMC4uNzU1N2QwYWNlNDRj
YmUzYzNkYTk1NzFlNmVlZThmNmE0MDY5NjJmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3Jl
VGV4dC5jcHAKQEAgLTE5MCw5ICsxOTAsMTIgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBo
cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEcKICAg
ICBpZiAoIXBsYXRmb3JtRGF0YS5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENHQ29u
dGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworICAgIGlmIChp
c0luR1BVUHJvY2VzcygpICYmIGZvbnQuaGFzQW55Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzKGds
eXBocywgbnVtR2x5cGhzKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIAotICAgIFJFTEVBU0VfQVNTRVJUKCFpc0luR1BVUHJvY2Vzcygp
IHx8ICFmb250LmZpbmRPVFNWR0dseXBocyhnbHlwaHMsIG51bUdseXBocykpOworICAgIENHQ29u
dGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgYm9v
bCBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOwogICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgPSB0
cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRl
eHQvRm9udENvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
cmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAKaW5kZXggZWY4NmU0YzNjMmJiYmE4NzQ2ZTI0MWU0MzUx
ZTc4MGU3NDMzZDMxNi4uY2VjMjE3ZWI0Mzg4NTJkMTdmNDA5YTA1ZTIwZTViODgwOGFlYmQ2NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9u
dENvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
dGV4dC9Gb250Q29yZVRleHQuY3BwCkBAIC03NzUsMjIgKzc3NSwxMDAgQEAgYm9vbCBGb250Ojpp
c1Byb2JhYmx5T25seVVzZWRUb1JlbmRlckljb25zKCkgY29uc3QKICAgICB9KTsKIH0KIAotT3B0
aW9uYWw8Qml0VmVjdG9yPiBGb250OjpmaW5kT1RTVkdHbHlwaHMoY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzLCB1bnNpZ25lZCBjb3VudCkgY29uc3QKLXsKICNpZiBQTEFURk9STShDT0NP
QSkKK2NvbnN0IFBBTDo6T1RTVkdUYWJsZSYgRm9udDo6b3RTVkdUYWJsZSgpIGNvbnN0Cit7CiAg
ICAgaWYgKCFtX290U1ZHVGFibGUpIHsKICAgICAgICAgaWYgKGF1dG8gdGFibGVEYXRhID0gYWRv
cHRDRihDVEZvbnRDb3B5VGFibGUocGxhdGZvcm1EYXRhKCkuY3RGb250KCksIGtDVEZvbnRUYWJs
ZVNWRywga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSkpCiAgICAgICAgICAgICBtX290U1ZH
VGFibGUgPSBQQUw6Ok9UU1ZHVGFibGUodGFibGVEYXRhLmdldCgpLCBmb250TWV0cmljcygpLnVu
aXRzUGVyRW0oKSwgcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgbV9vdFNWR1RhYmxlID0ge3sgfX07CiAgICAgfQorICAgIHJldHVybiBtX290U1ZHVGFi
bGUudmFsdWUoKTsKK30KKworRm9udDo6Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzIEZvbnQ6OkNv
bXBsZXhDb2xvckZvcm1hdEdseXBoczo6d2l0aE5vUmVsZXZhbnRUYWJsZXMoKQoreworICAgIHJl
dHVybiB7IGZhbHNlLCAwIH07Cit9CisKK0ZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEdseXBocyBG
b250OjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM6OndpdGhSZWxldmFudFRhYmxlcyh1bnNpZ25l
ZCBnbHlwaENvdW50KQoreworICAgIHJldHVybiB7IHRydWUsIGdseXBoQ291bnQgKiAyIH07Cit9
CisKK2Jvb2wgRm9udDo6Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzOjpoYXNWYWx1ZUZvcihHbHlw
aCBnbHlwaCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iaXRzLmNvbnRhaW5zKHZhbGlkQml0KGds
eXBoKSk7Cit9CisKK2Jvb2wgRm9udDo6Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzOjpnZXQoR2x5
cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc1ZhbHVlRm9yKGdseXBoKSk7CisgICAg
cmV0dXJuIG1fYml0cy5jb250YWlucyh2YWx1ZUJpdChnbHlwaCkpOworfQogCi0gICAgaWYgKCFQ
QUw6OmlzT1RTVkdGcmFtZXdvcmtBdmFpbGFibGUoKSB8fCAhbV9vdFNWR1RhYmxlLnZhbHVlKCku
dGFibGUpCit2b2lkIEZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEdseXBoczo6c2V0KEdseXBoIGds
eXBoLCBib29sIHZhbHVlKQoreworICAgIEFTU0VSVCghbV9oYXNSZWxldmFudFRhYmxlcyk7Cisg
ICAgbV9iaXRzLnNldCh2YWxpZEJpdChnbHlwaCkpOworICAgIGlmICh2YWx1ZSkKKyAgICAgICAg
bV9iaXRzLnNldCh2YWx1ZUJpdChnbHlwaCkpOworfQorCitib29sIEZvbnQ6Omhhc0NvbXBsZXhD
b2xvckZvcm1hdFRhYmxlcygpIGNvbnN0Cit7CisgICAgaWYgKG90U1ZHVGFibGUoKS50YWJsZSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyNpZiBIQVZFKENPUkVfVEVYVF9TQklYX0lNQUdFX1NJ
WkVfRlVOQ1RJT05TKQorICAgIGF1dG8gc2JpeFRhYmxlRGF0YSA9IGFkb3B0Q0YoQ1RGb250Q29w
eVRhYmxlKHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBrQ1RGb250VGFibGVTYml4LCBrQ1RGb250
VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKKyAgICBpZiAoc2JpeFRhYmxlRGF0YSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisjZW5kaWYKKworICAgIHJldHVybiBmYWxzZTsKK30KKworRm9udDo6Q29t
cGxleENvbG9yRm9ybWF0R2x5cGhzJiBGb250OjpnbHlwaHNXaXRoQ29tcGxleENvbG9yRm9ybWF0
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZ2x5cGhzV2l0aENvbXBsZXhDb2xvckZvcm1hdCkgewor
ICAgICAgICBpZiAoaGFzQ29tcGxleENvbG9yRm9ybWF0VGFibGVzKCkpIHsKKyAgICAgICAgICAg
IENGSW5kZXggZ2x5cGhDb3VudCA9IENURm9udEdldEdseXBoQ291bnQoZ2V0Q1RGb250KCkpOwor
ICAgICAgICAgICAgbV9nbHlwaHNXaXRoQ29tcGxleENvbG9yRm9ybWF0ID0gQ29tcGxleENvbG9y
Rm9ybWF0R2x5cGhzOjp3aXRoUmVsZXZhbnRUYWJsZXMoc3RkOjptYXgoZ2x5cGhDb3VudCwgMEwp
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2dseXBoc1dpdGhDb21wbGV4Q29sb3JG
b3JtYXQgPSBDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM6OndpdGhOb1JlbGV2YW50VGFibGVzKCk7
CisgICAgfQorICAgIHJldHVybiBtX2dseXBoc1dpdGhDb21wbGV4Q29sb3JGb3JtYXQudmFsdWUo
KTsKK30KKworYm9vbCBGb250OjpnbHlwaEhhc0NvbXBsZXhDb2xvckZvcm1hdChHbHlwaCBnbHlw
aElEKSBjb25zdAoreworICAgIGlmIChPVFNWR1RhYmxlUmVmIHN2Z1RhYmxlID0gb3RTVkdUYWJs
ZSgpLnRhYmxlKSB7CisgICAgICAgIGlmIChQQUw6OnNvZnRMaW5rT1RTVkdPVFNWR1RhYmxlR2V0
RG9jdW1lbnRJbmRleEZvckdseXBoKHN2Z1RhYmxlLCBnbHlwaElEKSAhPSBrQ0ZOb3RGb3VuZCkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworI2lmIEhBVkUoQ09SRV9URVhUX1NC
SVhfSU1BR0VfU0laRV9GVU5DVElPTlMpCisgICAgLy8gVGhlcmUncyBubyBmdW5jdGlvbiB0byBk
aXJlY3RseSBsb29rIHVwIHRoZSBzYml4IHRhYmxlLCBzbyB1c2UgdGhlIGZhY3QgdGhhdCB0aGlz
IG9uZSByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUgaWZmIHRoZXJlJ3MgYW4gc2JpeCBlbnRyeS4K
KyAgICBpZiAoQ1RGb250R2V0U2JpeEltYWdlU2l6ZUZvckdseXBoQW5kQ29udGVudHNTY2FsZShn
ZXRDVEZvbnQoKSwgZ2x5cGhJRCwgMCkpCisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworT3B0aW9uYWw8Qml0VmVjdG9yPiBGb250
OjpmaW5kT1RTVkdHbHlwaHMoY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCB1bnNpZ25l
ZCBjb3VudCkgY29uc3QKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBPVFNWR1RhYmxlUmVm
IHRhYmxlID0gb3RTVkdUYWJsZSgpLnRhYmxlOworICAgIGlmICghdGFibGUpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKICAgICBPcHRpb25hbDxCaXRWZWN0b3I+IHJlc3VsdDsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAoUEFMOjpzb2Z0TGlu
a09UU1ZHT1RTVkdUYWJsZUdldERvY3VtZW50SW5kZXhGb3JHbHlwaChtX290U1ZHVGFibGUudmFs
dWUoKS50YWJsZSwgZ2x5cGhzW2ldKSAhPSBrQ0ZOb3RGb3VuZCkgeworICAgICAgICBpZiAoUEFM
Ojpzb2Z0TGlua09UU1ZHT1RTVkdUYWJsZUdldERvY3VtZW50SW5kZXhGb3JHbHlwaCh0YWJsZSwg
Z2x5cGhzW2ldKSAhPSBrQ0ZOb3RGb3VuZCkgewogICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gQml0VmVjdG9yKGNvdW50KTsKICAgICAgICAgICAgIHJl
c3VsdC52YWx1ZSgpLnF1aWNrU2V0KGkpOwpAQCAtODA0LDQgKzg4MiwyNiBAQCBPcHRpb25hbDxC
aXRWZWN0b3I+IEZvbnQ6OmZpbmRPVFNWR0dseXBocyhjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMsIHVuc2lnbgogI2VuZGlmCiB9CiAKK2Jvb2wgRm9udDo6aGFzQW55Q29tcGxleENvbG9y
Rm9ybWF0R2x5cGhzKGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgdW5zaWduZWQgY291
bnQpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgYXV0byYgY29tcGxleEdseXBo
cyA9IGdseXBoc1dpdGhDb21wbGV4Q29sb3JGb3JtYXQoKTsKKyAgICBpZiAoIWNvbXBsZXhHbHlw
aHMuaGFzUmVsZXZhbnRUYWJsZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKCFjb21wbGV4
R2x5cGhzLmhhc1ZhbHVlRm9yKGdseXBoc1tpXSkpCisgICAgICAgICAgICBjb21wbGV4R2x5cGhz
LnNldChnbHlwaHNbaV0sIGdseXBoSGFzQ29tcGxleENvbG9yRm9ybWF0KGdseXBoc1tpXSkpOwor
CisgICAgICAgIGlmIChjb21wbGV4R2x5cGhzLmdldChnbHlwaHNbaV0pKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGdseXBocyk7CisgICAgVU5VU0VEX1BBUkFNKGNvdW50KTsKKyAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429629</attachid>
            <date>2021-05-24 21:40:38 -0700</date>
            <delta_ts>2021-05-25 15:32:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226159-20210525144037.patch</filename>
            <type>text/plain</type>
            <size>13812</size>
            <attacher name="Cameron McCormack (:heycam)">heycam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDcwMWRhMDNjOGE4ZWNhYTBmNjllYTUw
YTBhMTVmY2QxY2ViYWMyMGYuLjQ5M2RkOWI3N2NkYTM2NTcxMWU5YTk3NTI5NmI3MzM4YTlmMTc1
YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUtMjIgIENhbWVyb24gTWNDb3JtYWNrICA8
aGV5Y2FtQGFwcGxlLmNvbT4KKworICAgICAgICBQcmV2ZW50IHNiaXggZ2x5cGhzIGZyb20gYmVp
bmcgcmVuZGVyZWQgaW4gdGhlIEdQVSBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNTkKKyAgICAgICAgPHJkYXI6Ly83NzIzMTk1OT4K
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIHd0Zi9QbGF0
Zm9ybUhhdmUuaDogQWRkIEhBVkVfQ09SRV9URVhUX1NCSVhfSU1BR0VfU0laRV9GVU5DVElPTlMu
CisKIDIwMjEtMDUtMjMgIENhbWVyb24gTWNDb3JtYWNrICA8aGV5Y2FtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBGaXggdHlwbyBpbiBPcHRpb25hbDxUJj46OnZhbHVlKCkgY29uc3QuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggNWRiYTVmZmZmYzA5MmJkMGNhODI2ZTEzYWI4MGYyZDJiMmFmY2FmMS4uZmFiMTBjZTZi
OTllNjc1OTc4MjYzODI0NTRiYWUwODkwZGFiYWZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4
IEBACisyMDIxLTA1LTIyICBDYW1lcm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CisK
KyAgICAgICAgUHJldmVudCBzYml4IGdseXBocyBmcm9tIGJlaW5nIHJlbmRlcmVkIGluIHRoZSBH
UFUgcHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI2MTU5CisgICAgICAgIDxyZGFyOi8vNzcyMzE5NTk+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgV2hlbiBHUFVQIGNhbnZhcyBpcyBlbmFibGVkLCB0
aGUgZGlzcGxheSBsaXN0IHJlY29yZGVyIGhhbmRsZXMgc2JpeAorICAgICAgICBnbHlwaHMgYnkg
cmVjb3JkaW5nIGRyYXdJbWFnZSBjYWxscy4gVGhpcyBtZWFucyB0aGF0IGR1cmluZyBkaXNwbGF5
IGxpc3QKKyAgICAgICAgcmVwbGF5LCB3ZSBzaG91bGQgbm90IGhhdmUgYW55IHNiaXggZ2x5cGhz
IGluIGEgRHJhd0dseXBocyBkaXNwbGF5IGxpc3QKKyAgICAgICAgaXRlbS4gVGhpcyBwYXRjaCBj
aGVja3MgZm9yIHN1Y2ggZ2x5cGhzIChsaWtlIHdlIGFscmVhZHkgZG8gZm9yIFNWRworICAgICAg
ICBnbHlwaHMpIGFuZCByZXR1cm5zIGVhcmx5IGlmIHRoZXkncmUgZm91bmQuCisKKyAgICAgICAg
TWFudWFsbHkgdGVzdGVkLiBObyBuZXcgdGVzdHMsIHNpbmNlIHdlJ2QgbmVlZCB0byBhZGQgc29t
ZSB3YXkgaW5qZWN0CisgICAgICAgIHNiaXggZ2x5cGggSURzIGludG8gZGlzcGxheSBsaXN0IGl0
ZW1zLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzOjpoYXNSZWxldmFudFRhYmxlcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM6
OnZhbGlkQml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEds
eXBoczo6dmFsdWVCaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Q29tcGxleENvbG9yRm9y
bWF0R2x5cGhzOjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMpOiBDYWxsIG5ldyBmdW5jdGlvbiB0aGF0IGNo
ZWNrcyBmb3IKKyAgICAgICAgU1ZHIGFuZCBzYml4IGdseXBoIHByZXNlbmNlLiBDaGFuZ2UgcmVs
ZWFzZSBhc3NlcnRpb24gdG8gZGVidWcKKyAgICAgICAgYXNzZXJ0aW9uIHRvIGF2b2lkIHVubmVj
ZXNzYXJpbHkgY3Jhc2hpbmcgdGhlIEdQVVAsIGFuZCBpbnN0ZWFkIHJldHVybgorICAgICAgICBl
YXJseSBpbiB0aGUgcHJlc2VuY2Ugb2YgdGhlc2UgZ2x5cGhzLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250OjpvdFNWR1RhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXhD
b2xvckZvcm1hdEdseXBoczo6d2l0aE5vUmVsZXZhbnRUYWJsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udDo6Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzOjp3aXRoUmVsZXZhbnRUYWJsZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzOjpoYXNWYWx1
ZUZvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpDb21wbGV4Q29sb3JGb3JtYXRH
bHlwaHM6OmdldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpDb21wbGV4Q29sb3JG
b3JtYXRHbHlwaHM6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpoYXNDb21wbGV4Q29s
b3JGb3JtYXRUYWJsZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2x5cGhzV2l0
aENvbXBsZXhDb2xvckZvcm1hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpnbHlw
aEhhc0NvbXBsZXhDb2xvckZvcm1hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojpm
aW5kT1RTVkdHbHlwaHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6aGFzQW55Q29t
cGxleENvbG9yRm9ybWF0R2x5cGhzIGNvbnN0KTogTmV3IGZ1bmN0aW9uIHRvCisgICAgICAgIGNo
ZWNrIGlmIGEgbGlzdCBvZiBnbHlwaCBJRHMgaGFzIGFueSB0aGF0IHdvdWxkIGJlIGluYXBwcm9w
cmlhdGUKKyAgICAgICAgdG8gcmVuZGVyIGluIHRoZSBHUFUgcHJvY2Vzcy4gU2luY2UgY2FsbGlu
ZyB0aGUgQ29yZVRleHQgZnVuY3Rpb24gdGhhdAorICAgICAgICBhbGxvd3MgdXMgdG8gY2hlY2sg
aWYgYW4gc2JpeCBnbHlwaCBleGlzdHMgd291bGQgYmUgdG9vIGV4cGVuc2l2ZSB0bworICAgICAg
ICBjYWxsIGZvciBldmVyeSBkcmF3R2x5cGhzIGNhbGwsIHdlIGxhemlseSBjYWNoZSAoaW4gYSBC
aXRWZWN0b3IpIHRoZQorICAgICAgICBwcmVzZW5jZSBvZiBzYml4IGFuZCBTVkcgaW1hZ2VzIGZv
ciBnbHlwaCBJRHMgd2UgY2hlY2suCisKIDIwMjEtMDUtMjMgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgQ2hlY2tlZExvY2sgaW4gZXZlbiBtb3JlIHBsYWNl
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggNDUyYzVkYjBjNmEyNTJiMzY4OTQ4NjkyNmY5N2NkNWFi
MTgzMmQzNC4uMmYwYzZlMWYwZmVjZmZhZDdlNDg4MDJhNGNlNDBiMzA1MmUyODg5OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
QUwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDUtMjIgIENhbWVyb24gTWNDb3Jt
YWNrICA8aGV5Y2FtQGFwcGxlLmNvbT4KKworICAgICAgICBQcmV2ZW50IHNiaXggZ2x5cGhzIGZy
b20gYmVpbmcgcmVuZGVyZWQgaW4gdGhlIEdQVSBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNTkKKyAgICAgICAgPHJkYXI6Ly83NzIz
MTk1OT4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIHBh
bC9zcGkvY2YvQ29yZVRleHRTUEkuaDogQWRkIGRlY2xhcmF0aW9uIGZvciBhbiBTUEkgdGhhdCBs
ZXRzIHVzCisgICAgICAgIGluZmVyIHdoZXRoZXIgYSBnbHlwaCBoYXMgYW4gc2JpeCBpbWFnZS4K
KwogMjAyMS0wNS0yMSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbbWFjT1NdIEFkb3B0IFFMSXRlbSBpbiBXS0ltYWdlRXh0cmFjdGlvblByZXZpZXdD
b250cm9sbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaCBiL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oCmluZGV4IDAyYTA3ZjEzZTBkZjgxMDZiNTYwYmQx
NGYwM2U1ODJmZTJkZTIyYmQuLmM5ZTFlNzg1MGZjODQ0MjQ2ZTA2OTQyNGQ5N2ZiZWIwNWVhYTAy
OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oCkBAIC05NzYsMyArOTc2LDExIEBACiAjaWYgUExBVEZP
Uk0oQ09DT0EpICYmICEoUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9S
RVFVSVJFRCA8IDE1MDAwMCkKICNkZWZpbmUgSEFWRV9TWVNURU1fU0FOREJPWEVTX0FMTE9XSU5H
X1RFUk1JTkFURV9XSVRIX1JFQVNPTiAxCiAjZW5kaWYKKworI2lmIChQTEFURk9STShNQUMpICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAwIFwKKyAgICB8fCAoUExB
VEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxNDAwMDAp
IFwKKyAgICB8fCAoUExBVEZPUk0oV0FUQ0hPUykgJiYgX19XQVRDSF9PU19WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSA3MDAwMCkgXAorICAgIHx8IChQTEFURk9STShBUFBMRVRWKSAmJiBfX1RWX09T
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDE0MDAwMCkgXAorICAgIHx8IChQTEFURk9STShNQUND
QVRBTFlTVCkgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTQwMDAwKSkK
KyNkZWZpbmUgSEFWRV9DT1JFX1RFWFRfU0JJWF9JTUFHRV9TSVpFX0ZVTkNUSU9OUyAxCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NmL0NvcmVUZXh0U1BJ
LmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oCmluZGV4IDlh
NmE4Yzk5NDc1ODViY2I5MThjNGJkYjIzNTlhNTkwOWNhMDMxOWYuLjQ5MDg2NjM5OGM0YjUwNDU0
MDk0YmJhOTRmZTgxOGRhYzNlZjhjZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvc3BpL2NmL0NvcmVUZXh0U1BJLmgKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkv
Y2YvQ29yZVRleHRTUEkuaApAQCAtMjAzLDUgKzIwMyw2IEBAIENURm9udERlc2NyaXB0b3JSZWYg
Q1RGb250Q3JlYXRlUGh5c2ljYWxGb250RGVzY3JpcHRvckZvckNoYXJhY3RlcnNXaXRoTGFuZ3Vh
Z2UoCiAKIGJvb2wgQ1RGb250SXNBcHBsZUNvbG9yRW1vamkoQ1RGb250UmVmKTsKIENURm9udFJl
ZiBDVEZvbnRDcmVhdGVGb3JDaGFyYWN0ZXJzKENURm9udFJlZiBjdXJyZW50Rm9udCwgY29uc3Qg
VVRGMTZDaGFyICpjaGFyYWN0ZXJzLCBDRkluZGV4IGxlbmd0aCwgQ0ZJbmRleCAqY292ZXJlZExl
bmd0aCk7CitDR0Zsb2F0IENURm9udEdldFNiaXhJbWFnZVNpemVGb3JHbHlwaEFuZENvbnRlbnRz
U2NhbGUoQ1RGb250UmVmLCBjb25zdCBDR0dseXBoLCBDR0Zsb2F0IGNvbnRlbnRzU2NhbGUpOwog
CiBXVEZfRVhURVJOX0NfRU5ECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgK
aW5kZXggNzVmNjQ2YmZkMGMzODVlMGE0M2JiYjYxZTY3NzJhNDgxYTA5NjZhZS4uMTRhZjllMTNl
MjJlYTk1Njc2ZDcxZTg4MjU4NmU1ZmQzY2YwMDM0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuaApAQCAtMjIzLDYgKzIyMyw4IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1
cm5zIG51bGxvcHQgaWYgbm9uZSBvZiB0aGUgZ2x5cGhzIGFyZSBPVC1TVkcgZ2x5cGhzLgogICAg
IE9wdGlvbmFsPEJpdFZlY3Rvcj4gZmluZE9UU1ZHR2x5cGhzKGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqLCB1bnNpZ25lZCBjb3VudCkgY29uc3Q7CiAKKyAgICBib29sIGhhc0FueUNvbXBsZXhDb2xv
ckZvcm1hdEdseXBocyhjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgdW5zaWduZWQgY291bnQpIGNv
bnN0OworCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIFNDUklQVF9GT05UUFJPUEVSVElFUyogc2Ny
aXB0Rm9udFByb3BlcnRpZXMoKSBjb25zdDsKICAgICBTQ1JJUFRfQ0FDSEUqIHNjcmlwdENhY2hl
KCkgY29uc3QgeyByZXR1cm4gJm1fc2NyaXB0Q2FjaGU7IH0KQEAgLTI1Nyw2ICsyNTksMzcgQEAg
cHJpdmF0ZToKICAgICBmbG9hdCB3aWR0aEZvckdESUdseXBoKEdseXBoKSBjb25zdDsKICNlbmRp
ZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgY2xhc3MgQ29tcGxleENvbG9yRm9ybWF0R2x5
cGhzIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBDb21wbGV4Q29sb3JGb3JtYXRHbHlw
aHMgd2l0aE5vUmVsZXZhbnRUYWJsZXMoKTsKKyAgICAgICAgc3RhdGljIENvbXBsZXhDb2xvckZv
cm1hdEdseXBocyB3aXRoUmVsZXZhbnRUYWJsZXModW5zaWduZWQgZ2x5cGhDb3VudCk7CisKKyAg
ICAgICAgYm9vbCBoYXNWYWx1ZUZvcihHbHlwaCkgY29uc3Q7CisgICAgICAgIGJvb2wgZ2V0KEds
eXBoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXQoR2x5cGgsIGJvb2wgdmFsdWUpOworCisgICAg
ICAgIGJvb2wgaGFzUmVsZXZhbnRUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc1JlbGV2YW50
VGFibGVzOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCB2YWxpZEJpdChHbHlwaCBnbHlwaElEKSB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KGds
eXBoSUQpICogMjsgfQorICAgICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCB2YWx1ZUJpdChH
bHlwaCBnbHlwaElEKSB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KGdseXBoSUQpICogMiAr
IDE7IH0KKworICAgICAgICBDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHMoYm9vbCBoYXNSZWxldmFu
dFRhYmxlcywgc2l6ZV90IGluaXRpYWxCaXRDb3VudCkKKyAgICAgICAgICAgIDogbV9oYXNSZWxl
dmFudFRhYmxlcyhoYXNSZWxldmFudFRhYmxlcykKKyAgICAgICAgICAgICwgbV9iaXRzKGluaXRp
YWxCaXRDb3VudCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgYm9vbCBtX2hhc1JlbGV2YW50VGFi
bGVzOworICAgICAgICBCaXRWZWN0b3IgbV9iaXRzOworICAgIH07CisKKyAgICBjb25zdCBQQUw6
Ok9UU1ZHVGFibGUmIG90U1ZHVGFibGUoKSBjb25zdDsKKyAgICBib29sIGdseXBoSGFzQ29tcGxl
eENvbG9yRm9ybWF0KEdseXBoKSBjb25zdDsKKyAgICBib29sIGhhc0NvbXBsZXhDb2xvckZvcm1h
dFRhYmxlcygpIGNvbnN0OworICAgIENvbXBsZXhDb2xvckZvcm1hdEdseXBocyYgZ2x5cGhzV2l0
aENvbXBsZXhDb2xvckZvcm1hdCgpIGNvbnN0OworI2VuZGlmCisKICAgICBGb250TWV0cmljcyBt
X2ZvbnRNZXRyaWNzOwogICAgIGZsb2F0IG1fbWF4Q2hhcldpZHRoIHsgLTEgfTsKICAgICBmbG9h
dCBtX2F2Z0NoYXJXaWR0aCB7IC0xIH07CkBAIC0yOTgsNiArMzMxLDcgQEAgcHJpdmF0ZToKICAg
ICBtdXRhYmxlIE9wdGlvbmFsPEJpdFZlY3Rvcj4gbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNh
cHM7CiAgICAgbXV0YWJsZSBPcHRpb25hbDxCaXRWZWN0b3I+IG1fZ2x5cGhzU3VwcG9ydGVkQnlB
bGxQZXRpdGVDYXBzOwogICAgIG11dGFibGUgT3B0aW9uYWw8UEFMOjpPVFNWR1RhYmxlPiBtX290
U1ZHVGFibGU7CisgICAgbXV0YWJsZSBPcHRpb25hbDxDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM+
IG1fZ2x5cGhzV2l0aENvbXBsZXhDb2xvckZvcm1hdDsgLy8gU1ZHIGFuZCBzYml4CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKFdJTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKaW5k
ZXggNmZmMDBiZmJkNTRhMmI4YTE4ZWVjMDU4NDkwNzkzNTRjMDIxMmRiMC4uNzU1N2QwYWNlNDRj
YmUzYzNkYTk1NzFlNmVlZThmNmE0MDY5NjJmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENhc2NhZGVDb3Jl
VGV4dC5jcHAKQEAgLTE5MCw5ICsxOTAsMTIgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBo
cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEcKICAg
ICBpZiAoIXBsYXRmb3JtRGF0YS5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENHQ29u
dGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworICAgIGlmIChp
c0luR1BVUHJvY2VzcygpICYmIGZvbnQuaGFzQW55Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzKGds
eXBocywgbnVtR2x5cGhzKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIAotICAgIFJFTEVBU0VfQVNTRVJUKCFpc0luR1BVUHJvY2Vzcygp
IHx8ICFmb250LmZpbmRPVFNWR0dseXBocyhnbHlwaHMsIG51bUdseXBocykpOworICAgIENHQ29u
dGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgYm9v
bCBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOwogICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgPSB0
cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRl
eHQvRm9udENvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
cmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAKaW5kZXggZWY4NmU0YzNjMmJiYmE4NzQ2ZTI0MWU0MzUx
ZTc4MGU3NDMzZDMxNi4uYjJhMDc1MTc1MDRkNjNkZGFkOTU0Y2I5MDYzMjFhMTk4MTQxMjNmMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9u
dENvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
dGV4dC9Gb250Q29yZVRleHQuY3BwCkBAIC03NzUsMjIgKzc3NSwxMDEgQEAgYm9vbCBGb250Ojpp
c1Byb2JhYmx5T25seVVzZWRUb1JlbmRlckljb25zKCkgY29uc3QKICAgICB9KTsKIH0KIAotT3B0
aW9uYWw8Qml0VmVjdG9yPiBGb250OjpmaW5kT1RTVkdHbHlwaHMoY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCogZ2x5cGhzLCB1bnNpZ25lZCBjb3VudCkgY29uc3QKLXsKICNpZiBQTEFURk9STShDT0NP
QSkKK2NvbnN0IFBBTDo6T1RTVkdUYWJsZSYgRm9udDo6b3RTVkdUYWJsZSgpIGNvbnN0Cit7CiAg
ICAgaWYgKCFtX290U1ZHVGFibGUpIHsKICAgICAgICAgaWYgKGF1dG8gdGFibGVEYXRhID0gYWRv
cHRDRihDVEZvbnRDb3B5VGFibGUocGxhdGZvcm1EYXRhKCkuY3RGb250KCksIGtDVEZvbnRUYWJs
ZVNWRywga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSkpCiAgICAgICAgICAgICBtX290U1ZH
VGFibGUgPSBQQUw6Ok9UU1ZHVGFibGUodGFibGVEYXRhLmdldCgpLCBmb250TWV0cmljcygpLnVu
aXRzUGVyRW0oKSwgcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgbV9vdFNWR1RhYmxlID0ge3sgfX07CiAgICAgfQorICAgIHJldHVybiBtX290U1ZHVGFi
bGUudmFsdWUoKTsKK30KKworRm9udDo6Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzIEZvbnQ6OkNv
bXBsZXhDb2xvckZvcm1hdEdseXBoczo6d2l0aE5vUmVsZXZhbnRUYWJsZXMoKQoreworICAgIHJl
dHVybiB7IGZhbHNlLCAwIH07Cit9CisKK0ZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEdseXBocyBG
b250OjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM6OndpdGhSZWxldmFudFRhYmxlcyh1bnNpZ25l
ZCBnbHlwaENvdW50KQoreworICAgIHJldHVybiB7IHRydWUsIGdseXBoQ291bnQgKiAyIH07Cit9
CisKK2Jvb2wgRm9udDo6Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzOjpoYXNWYWx1ZUZvcihHbHlw
aCBnbHlwaCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iaXRzLmNvbnRhaW5zKHZhbGlkQml0KGds
eXBoKSk7Cit9CisKK2Jvb2wgRm9udDo6Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzOjpnZXQoR2x5
cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGhhc1ZhbHVlRm9yKGdseXBoKSk7CisgICAg
cmV0dXJuIG1fYml0cy5jb250YWlucyh2YWx1ZUJpdChnbHlwaCkpOworfQogCi0gICAgaWYgKCFQ
QUw6OmlzT1RTVkdGcmFtZXdvcmtBdmFpbGFibGUoKSB8fCAhbV9vdFNWR1RhYmxlLnZhbHVlKCku
dGFibGUpCit2b2lkIEZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEdseXBoczo6c2V0KEdseXBoIGds
eXBoLCBib29sIHZhbHVlKQoreworICAgIEFTU0VSVCghbV9oYXNSZWxldmFudFRhYmxlcyk7Cisg
ICAgQVNTRVJUKCFoYXNWYWx1ZUZvcihnbHlwaCkpOworICAgIG1fYml0cy5zZXQodmFsaWRCaXQo
Z2x5cGgpKTsKKyAgICBpZiAodmFsdWUpCisgICAgICAgIG1fYml0cy5zZXQodmFsdWVCaXQoZ2x5
cGgpKTsKK30KKworYm9vbCBGb250OjpoYXNDb21wbGV4Q29sb3JGb3JtYXRUYWJsZXMoKSBjb25z
dAoreworICAgIGlmIChvdFNWR1RhYmxlKCkudGFibGUpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisjaWYgSEFWRShDT1JFX1RFWFRfU0JJWF9JTUFHRV9TSVpFX0ZVTkNUSU9OUykKKyAgICBhdXRv
IHNiaXhUYWJsZURhdGEgPSBhZG9wdENGKENURm9udENvcHlUYWJsZShwbGF0Zm9ybURhdGEoKS5j
dEZvbnQoKSwga0NURm9udFRhYmxlU2JpeCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7
CisgICAgaWYgKHNiaXhUYWJsZURhdGEpCisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0ZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEdseXBocyYg
Rm9udDo6Z2x5cGhzV2l0aENvbXBsZXhDb2xvckZvcm1hdCgpIGNvbnN0Cit7CisgICAgaWYgKCFt
X2dseXBoc1dpdGhDb21wbGV4Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgaWYgKGhhc0NvbXBsZXhD
b2xvckZvcm1hdFRhYmxlcygpKSB7CisgICAgICAgICAgICBDRkluZGV4IGdseXBoQ291bnQgPSBD
VEZvbnRHZXRHbHlwaENvdW50KGdldENURm9udCgpKTsKKyAgICAgICAgICAgIG1fZ2x5cGhzV2l0
aENvbXBsZXhDb2xvckZvcm1hdCA9IENvbXBsZXhDb2xvckZvcm1hdEdseXBoczo6d2l0aFJlbGV2
YW50VGFibGVzKHN0ZDo6bWF4KGdseXBoQ291bnQsIDBMKSk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgbV9nbHlwaHNXaXRoQ29tcGxleENvbG9yRm9ybWF0ID0gQ29tcGxleENvbG9yRm9y
bWF0R2x5cGhzOjp3aXRoTm9SZWxldmFudFRhYmxlcygpOworICAgIH0KKyAgICByZXR1cm4gbV9n
bHlwaHNXaXRoQ29tcGxleENvbG9yRm9ybWF0LnZhbHVlKCk7Cit9CisKK2Jvb2wgRm9udDo6Z2x5
cGhIYXNDb21wbGV4Q29sb3JGb3JtYXQoR2x5cGggZ2x5cGhJRCkgY29uc3QKK3sKKyAgICBpZiAo
T1RTVkdUYWJsZVJlZiBzdmdUYWJsZSA9IG90U1ZHVGFibGUoKS50YWJsZSkgeworICAgICAgICBp
ZiAoUEFMOjpzb2Z0TGlua09UU1ZHT1RTVkdUYWJsZUdldERvY3VtZW50SW5kZXhGb3JHbHlwaChz
dmdUYWJsZSwgZ2x5cGhJRCkgIT0ga0NGTm90Rm91bmQpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyNpZiBIQVZFKENPUkVfVEVYVF9TQklYX0lNQUdFX1NJWkVfRlVOQ1RJT05T
KQorICAgIC8vIFRoZXJlJ3Mgbm8gZnVuY3Rpb24gdG8gZGlyZWN0bHkgbG9vayB1cCB0aGUgc2Jp
eCB0YWJsZSwgc28gdXNlIHRoZSBmYWN0IHRoYXQgdGhpcyBvbmUgcmV0dXJucyBhIG5vbi16ZXJv
IHZhbHVlIGlmZiB0aGVyZSdzIGFuIHNiaXggZW50cnkuCisgICAgaWYgKENURm9udEdldFNiaXhJ
bWFnZVNpemVGb3JHbHlwaEFuZENvbnRlbnRzU2NhbGUoZ2V0Q1RGb250KCksIGdseXBoSUQsIDAp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGZhbHNlOworfQor
I2VuZGlmCisKK09wdGlvbmFsPEJpdFZlY3Rvcj4gRm9udDo6ZmluZE9UU1ZHR2x5cGhzKGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgdW5zaWduZWQgY291bnQpIGNvbnN0Cit7CisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgT1RTVkdUYWJsZVJlZiB0YWJsZSA9IG90U1ZHVGFibGUoKS50
YWJsZTsKKyAgICBpZiAoIXRhYmxlKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgT3B0aW9u
YWw8Qml0VmVjdG9yPiByZXN1bHQ7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKLSAgICAgICAgaWYgKFBBTDo6c29mdExpbmtPVFNWR09UU1ZHVGFibGVHZXREb2N1
bWVudEluZGV4Rm9yR2x5cGgobV9vdFNWR1RhYmxlLnZhbHVlKCkudGFibGUsIGdseXBoc1tpXSkg
IT0ga0NGTm90Rm91bmQpIHsKKyAgICAgICAgaWYgKFBBTDo6c29mdExpbmtPVFNWR09UU1ZHVGFi
bGVHZXREb2N1bWVudEluZGV4Rm9yR2x5cGgodGFibGUsIGdseXBoc1tpXSkgIT0ga0NGTm90Rm91
bmQpIHsKICAgICAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgICAgIHJlc3VsdCA9
IEJpdFZlY3Rvcihjb3VudCk7CiAgICAgICAgICAgICByZXN1bHQudmFsdWUoKS5xdWlja1NldChp
KTsKQEAgLTgwNCw0ICs4ODMsMjYgQEAgT3B0aW9uYWw8Qml0VmVjdG9yPiBGb250OjpmaW5kT1RT
VkdHbHlwaHMoY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCB1bnNpZ24KICNlbmRpZgog
fQogCitib29sIEZvbnQ6Omhhc0FueUNvbXBsZXhDb2xvckZvcm1hdEdseXBocyhjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiBnbHlwaHMsIHVuc2lnbmVkIGNvdW50KSBjb25zdAoreworI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIGF1dG8mIGNvbXBsZXhHbHlwaHMgPSBnbHlwaHNXaXRoQ29tcGxleENv
bG9yRm9ybWF0KCk7CisgICAgaWYgKCFjb21wbGV4R2x5cGhzLmhhc1JlbGV2YW50VGFibGVzKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7CisgICAgICAgIGlmICghY29tcGxleEdseXBocy5oYXNWYWx1ZUZvcihnbHlw
aHNbaV0pKQorICAgICAgICAgICAgY29tcGxleEdseXBocy5zZXQoZ2x5cGhzW2ldLCBnbHlwaEhh
c0NvbXBsZXhDb2xvckZvcm1hdChnbHlwaHNbaV0pKTsKKworICAgICAgICBpZiAoY29tcGxleEds
eXBocy5nZXQoZ2x5cGhzW2ldKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShnbHlwaHMpOworICAgIFVO
VVNFRF9QQVJBTShjb3VudCk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429699</attachid>
            <date>2021-05-25 15:32:35 -0700</date>
            <delta_ts>2021-05-26 01:20:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226159-20210526083233.patch</filename>
            <type>text/plain</type>
            <size>14253</size>
            <attacher name="Cameron McCormack (:heycam)">heycam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDcwMWRhMDNjOGE4ZWNhYTBmNjllYTUw
YTBhMTVmY2QxY2ViYWMyMGYuLjQ5M2RkOWI3N2NkYTM2NTcxMWU5YTk3NTI5NmI3MzM4YTlmMTc1
YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUtMjIgIENhbWVyb24gTWNDb3JtYWNrICA8
aGV5Y2FtQGFwcGxlLmNvbT4KKworICAgICAgICBQcmV2ZW50IHNiaXggZ2x5cGhzIGZyb20gYmVp
bmcgcmVuZGVyZWQgaW4gdGhlIEdQVSBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNTkKKyAgICAgICAgPHJkYXI6Ly83NzIzMTk1OT4K
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIHd0Zi9QbGF0
Zm9ybUhhdmUuaDogQWRkIEhBVkVfQ09SRV9URVhUX1NCSVhfSU1BR0VfU0laRV9GVU5DVElPTlMu
CisKIDIwMjEtMDUtMjMgIENhbWVyb24gTWNDb3JtYWNrICA8aGV5Y2FtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBGaXggdHlwbyBpbiBPcHRpb25hbDxUJj46OnZhbHVlKCkgY29uc3QuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggNWRiYTVmZmZmYzA5MmJkMGNhODI2ZTEzYWI4MGYyZDJiMmFmY2FmMS4uOGNiZGU4NWVk
YjgzMGYzZDZiMzYwZjdlNWNkMWRiMjgwZGNkOTEwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5
IEBACisyMDIxLTA1LTIyICBDYW1lcm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CisK
KyAgICAgICAgUHJldmVudCBzYml4IGdseXBocyBmcm9tIGJlaW5nIHJlbmRlcmVkIGluIHRoZSBH
UFUgcHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI2MTU5CisgICAgICAgIDxyZGFyOi8vNzcyMzE5NTk+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgV2hlbiBHUFVQIGNhbnZhcyBpcyBlbmFibGVkLCB0
aGUgZGlzcGxheSBsaXN0IHJlY29yZGVyIGhhbmRsZXMgc2JpeAorICAgICAgICBnbHlwaHMgYnkg
cmVjb3JkaW5nIGRyYXdJbWFnZSBjYWxscy4gVGhpcyBtZWFucyB0aGF0IGR1cmluZyBkaXNwbGF5
IGxpc3QKKyAgICAgICAgcmVwbGF5LCB3ZSBzaG91bGQgbm90IGhhdmUgYW55IHNiaXggZ2x5cGhz
IGluIGEgRHJhd0dseXBocyBkaXNwbGF5IGxpc3QKKyAgICAgICAgaXRlbS4gVGhpcyBwYXRjaCBj
aGVja3MgZm9yIHN1Y2ggZ2x5cGhzIChsaWtlIHdlIGFscmVhZHkgZG8gZm9yIFNWRworICAgICAg
ICBnbHlwaHMpIGFuZCByZXR1cm5zIGVhcmx5IGlmIHRoZXkncmUgZm91bmQuCisKKyAgICAgICAg
TWFudWFsbHkgdGVzdGVkLiBObyBuZXcgdGVzdHMsIHNpbmNlIHdlJ2QgbmVlZCB0byBhZGQgc29t
ZSB3YXkgaW5qZWN0CisgICAgICAgIHNiaXggZ2x5cGggSURzIGludG8gZGlzcGxheSBsaXN0IGl0
ZW1zLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzOjpoYXNSZWxldmFudFRhYmxlcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM6
OmJpdEZvckluaXRpYWxpemVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXhDb2xv
ckZvcm1hdEdseXBoczo6Yml0Rm9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Q29t
cGxleENvbG9yRm9ybWF0R2x5cGhzOjpiaXRzUmVxdWlyZWRGb3JHbHlwaENvdW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEdseXBoczo6Q29tcGxleENvbG9y
Rm9ybWF0R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250
Q2FzY2FkZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3
R2x5cGhzKTogQ2FsbCBuZXcgZnVuY3Rpb24gdGhhdCBjaGVja3MgZm9yCisgICAgICAgIFNWRyBh
bmQgc2JpeCBnbHlwaCBwcmVzZW5jZS4gQ2hhbmdlIHJlbGVhc2UgYXNzZXJ0aW9uIHRvIGRlYnVn
CisgICAgICAgIGFzc2VydGlvbiB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IGNyYXNoaW5nIHRoZSBH
UFVQLCBhbmQgaW5zdGVhZCByZXR1cm4KKyAgICAgICAgZWFybHkgaW4gdGhlIHByZXNlbmNlIG9m
IHRoZXNlIGdseXBocy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250
Q29yZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b3RTVkdUYWJsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250OjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM6OmNyZWF0
ZVdpdGhOb1JlbGV2YW50VGFibGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXhD
b2xvckZvcm1hdEdseXBoczo6Y3JlYXRlV2l0aFJlbGV2YW50VGFibGVzQW5kR2x5cGhDb3VudCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250OjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM6Omhhc1Zh
bHVlRm9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXhDb2xvckZvcm1h
dEdseXBoczo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXhDb2xv
ckZvcm1hdEdseXBoczo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Omhhc0NvbXBsZXhD
b2xvckZvcm1hdFRhYmxlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpnbHlwaHNX
aXRoQ29tcGxleENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Omds
eXBoSGFzQ29tcGxleENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
OmZpbmRPVFNWR0dseXBocyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpoYXNBbnlD
b21wbGV4Q29sb3JGb3JtYXRHbHlwaHMgY29uc3QpOiBOZXcgZnVuY3Rpb24gdG8KKyAgICAgICAg
Y2hlY2sgaWYgYSBsaXN0IG9mIGdseXBoIElEcyBoYXMgYW55IHRoYXQgd291bGQgYmUgaW5hcHBy
b3ByaWF0ZQorICAgICAgICB0byByZW5kZXIgaW4gdGhlIEdQVSBwcm9jZXNzLiBTaW5jZSBjYWxs
aW5nIHRoZSBDb3JlVGV4dCBmdW5jdGlvbiB0aGF0CisgICAgICAgIGFsbG93cyB1cyB0byBjaGVj
ayBpZiBhbiBzYml4IGdseXBoIGV4aXN0cyB3b3VsZCBiZSB0b28gZXhwZW5zaXZlIHRvCisgICAg
ICAgIGNhbGwgZm9yIGV2ZXJ5IGRyYXdHbHlwaHMgY2FsbCwgd2UgbGF6aWx5IGNhY2hlIChpbiBh
IEJpdFZlY3RvcikgdGhlCisgICAgICAgIHByZXNlbmNlIG9mIHNiaXggYW5kIFNWRyBpbWFnZXMg
Zm9yIGdseXBoIElEcyB3ZSBjaGVjay4KKwogMjAyMS0wNS0yMyAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBDaGVja2VkTG9jayBpbiBldmVuIG1vcmUgcGxh
Y2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCA0NTJjNWRiMGM2YTI1MmIzNjg5NDg2OTI2Zjk3Y2Q1
YWIxODMyZDM0Li4yZjBjNmUxZjBmZWNmZmFkN2U0ODgwMmE0Y2U0MGIzMDUyZTI4ODk4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNS0yMiAgQ2FtZXJvbiBNY0Nv
cm1hY2sgIDxoZXljYW1AYXBwbGUuY29tPgorCisgICAgICAgIFByZXZlbnQgc2JpeCBnbHlwaHMg
ZnJvbSBiZWluZyByZW5kZXJlZCBpbiB0aGUgR1BVIHByb2Nlc3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjE1OQorICAgICAgICA8cmRhcjovLzc3
MjMxOTU5PgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICog
cGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oOiBBZGQgZGVjbGFyYXRpb24gZm9yIGFuIFNQSSB0aGF0
IGxldHMgdXMKKyAgICAgICAgaW5mZXIgd2hldGhlciBhIGdseXBoIGhhcyBhbiBzYml4IGltYWdl
LgorCiAyMDIxLTA1LTIxICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgog
CiAgICAgICAgIFttYWNPU10gQWRvcHQgUUxJdGVtIGluIFdLSW1hZ2VFeHRyYWN0aW9uUHJldmll
d0NvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtSGF2ZS5oIGIv
U291cmNlL1dURi93dGYvUGxhdGZvcm1IYXZlLmgKaW5kZXggMDJhMDdmMTNlMGRmODEwNmI1NjBi
ZDE0ZjAzZTU4MmZlMmRlMjJiZC4uYzllMWU3ODUwZmM4NDQyNDZlMDY5NDI0ZDk3ZmJlYjA1ZWFh
MDI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1IYXZlLmgKKysrIGIvU291
cmNlL1dURi93dGYvUGxhdGZvcm1IYXZlLmgKQEAgLTk3NiwzICs5NzYsMTEgQEAKICNpZiBQTEFU
Rk9STShDT0NPQSkgJiYgIShQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlO
X1JFUVVJUkVEIDwgMTUwMDAwKQogI2RlZmluZSBIQVZFX1NZU1RFTV9TQU5EQk9YRVNfQUxMT1dJ
TkdfVEVSTUlOQVRFX1dJVEhfUkVBU09OIDEKICNlbmRpZgorCisjaWYgKFBMQVRGT1JNKE1BQykg
JiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDAgXAorICAgIHx8IChQ
TEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDE0MDAw
MCkgXAorICAgIHx8IChQTEFURk9STShXQVRDSE9TKSAmJiBfX1dBVENIX09TX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDcwMDAwKSBcCisgICAgfHwgKFBMQVRGT1JNKEFQUExFVFYpICYmIF9fVFZf
T1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTQwMDAwKSBcCisgICAgfHwgKFBMQVRGT1JNKE1B
Q0NBVEFMWVNUKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxNDAwMDAp
KQorI2RlZmluZSBIQVZFX0NPUkVfVEVYVF9TQklYX0lNQUdFX1NJWkVfRlVOQ1RJT05TIDEKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY2YvQ29yZVRleHRT
UEkuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmgKaW5kZXgg
OWE2YThjOTk0NzU4NWJjYjkxOGM0YmRiMjM1OWE1OTA5Y2EwMzE5Zi4uNDkwODY2Mzk4YzRiNTA0
NTQwOTRiYmE5NGZlODE4ZGFjM2VmOGNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9zcGkvY2YvQ29yZVRleHRTUEkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3Nw
aS9jZi9Db3JlVGV4dFNQSS5oCkBAIC0yMDMsNSArMjAzLDYgQEAgQ1RGb250RGVzY3JpcHRvclJl
ZiBDVEZvbnRDcmVhdGVQaHlzaWNhbEZvbnREZXNjcmlwdG9yRm9yQ2hhcmFjdGVyc1dpdGhMYW5n
dWFnZSgKIAogYm9vbCBDVEZvbnRJc0FwcGxlQ29sb3JFbW9qaShDVEZvbnRSZWYpOwogQ1RGb250
UmVmIENURm9udENyZWF0ZUZvckNoYXJhY3RlcnMoQ1RGb250UmVmIGN1cnJlbnRGb250LCBjb25z
dCBVVEYxNkNoYXIgKmNoYXJhY3RlcnMsIENGSW5kZXggbGVuZ3RoLCBDRkluZGV4ICpjb3ZlcmVk
TGVuZ3RoKTsKK0NHRmxvYXQgQ1RGb250R2V0U2JpeEltYWdlU2l6ZUZvckdseXBoQW5kQ29udGVu
dHNTY2FsZShDVEZvbnRSZWYsIGNvbnN0IENHR2x5cGgsIENHRmxvYXQgY29udGVudHNTY2FsZSk7
CiAKIFdURl9FWFRFUk5fQ19FTkQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
aAppbmRleCA3NWY2NDZiZmQwYzM4NWUwYTQzYmJiNjFlNjc3MmE0ODFhMDk2NmFlLi5mMjQ5Nzdm
ZmZiMDcwZTFhYzNhZTYzZmFiZGRjYjE4NGE0NzRiOGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5oCkBAIC0yMjMsNiArMjIzLDggQEAgcHVibGljOgogICAgIC8vIFJl
dHVybnMgbnVsbG9wdCBpZiBub25lIG9mIHRoZSBnbHlwaHMgYXJlIE9ULVNWRyBnbHlwaHMuCiAg
ICAgT3B0aW9uYWw8Qml0VmVjdG9yPiBmaW5kT1RTVkdHbHlwaHMoY29uc3QgR2x5cGhCdWZmZXJH
bHlwaCosIHVuc2lnbmVkIGNvdW50KSBjb25zdDsKIAorICAgIGJvb2wgaGFzQW55Q29tcGxleENv
bG9yRm9ybWF0R2x5cGhzKGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCB1bnNpZ25lZCBjb3VudCkg
Y29uc3Q7CisKICNpZiBQTEFURk9STShXSU4pCiAgICAgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBz
Y3JpcHRGb250UHJvcGVydGllcygpIGNvbnN0OwogICAgIFNDUklQVF9DQUNIRSogc2NyaXB0Q2Fj
aGUoKSBjb25zdCB7IHJldHVybiAmbV9zY3JpcHRDYWNoZTsgfQpAQCAtMjU3LDYgKzI1OSwzOCBA
QCBwcml2YXRlOgogICAgIGZsb2F0IHdpZHRoRm9yR0RJR2x5cGgoR2x5cGgpIGNvbnN0OwogI2Vu
ZGlmCiAKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBjbGFzcyBDb21wbGV4Q29sb3JGb3JtYXRH
bHlwaHMgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIENvbXBsZXhDb2xvckZvcm1hdEds
eXBocyBjcmVhdGVXaXRoTm9SZWxldmFudFRhYmxlcygpOworICAgICAgICBzdGF0aWMgQ29tcGxl
eENvbG9yRm9ybWF0R2x5cGhzIGNyZWF0ZVdpdGhSZWxldmFudFRhYmxlc0FuZEdseXBoQ291bnQo
dW5zaWduZWQgZ2x5cGhDb3VudCk7CisKKyAgICAgICAgYm9vbCBoYXNWYWx1ZUZvcihHbHlwaCkg
Y29uc3Q7CisgICAgICAgIGJvb2wgZ2V0KEdseXBoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXQo
R2x5cGgsIGJvb2wgdmFsdWUpOworCisgICAgICAgIGJvb2wgaGFzUmVsZXZhbnRUYWJsZXMoKSBj
b25zdCB7IHJldHVybiBtX2hhc1JlbGV2YW50VGFibGVzOyB9CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBiaXRGb3JJbml0aWFsaXplZChHbHlwaCBnbHlw
aElEKSB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KGdseXBoSUQpICogMjsgfQorICAgICAg
ICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBiaXRGb3JWYWx1ZShHbHlwaCBnbHlwaElEKSB7IHJl
dHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KGdseXBoSUQpICogMiArIDE7IH0KKyAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgYml0c1JlcXVpcmVkRm9yR2x5cGhDb3VudCh1bnNpZ25lZCBn
bHlwaENvdW50KSB7IHJldHVybiBnbHlwaENvdW50ICogMjsgfQorCisgICAgICAgIENvbXBsZXhD
b2xvckZvcm1hdEdseXBocyhib29sIGhhc1JlbGV2YW50VGFibGVzLCB1bnNpZ25lZCBnbHlwaENv
dW50KQorICAgICAgICAgICAgOiBtX2hhc1JlbGV2YW50VGFibGVzKGhhc1JlbGV2YW50VGFibGVz
KQorICAgICAgICAgICAgLCBtX2JpdHMoYml0c1JlcXVpcmVkRm9yR2x5cGhDb3VudChnbHlwaENv
dW50KSkKKyAgICAgICAgeyB9CisKKyAgICAgICAgYm9vbCBtX2hhc1JlbGV2YW50VGFibGVzOwor
ICAgICAgICBCaXRWZWN0b3IgbV9iaXRzOyAvLyBwYWlycyBvZiAoaW5pdGlhbGl6ZWQsIHZhbHVl
KSBiaXRzCisgICAgfTsKKworICAgIGNvbnN0IFBBTDo6T1RTVkdUYWJsZSYgb3RTVkdUYWJsZSgp
IGNvbnN0OworICAgIGJvb2wgZ2x5cGhIYXNDb21wbGV4Q29sb3JGb3JtYXQoR2x5cGgpIGNvbnN0
OworICAgIGJvb2wgaGFzQ29tcGxleENvbG9yRm9ybWF0VGFibGVzKCkgY29uc3Q7CisgICAgQ29t
cGxleENvbG9yRm9ybWF0R2x5cGhzJiBnbHlwaHNXaXRoQ29tcGxleENvbG9yRm9ybWF0KCkgY29u
c3Q7CisjZW5kaWYKKwogICAgIEZvbnRNZXRyaWNzIG1fZm9udE1ldHJpY3M7CiAgICAgZmxvYXQg
bV9tYXhDaGFyV2lkdGggeyAtMSB9OwogICAgIGZsb2F0IG1fYXZnQ2hhcldpZHRoIHsgLTEgfTsK
QEAgLTI5OCw2ICszMzIsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgT3B0aW9uYWw8Qml0VmVj
dG9yPiBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwczsKICAgICBtdXRhYmxlIE9wdGlvbmFs
PEJpdFZlY3Rvcj4gbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHM7CiAgICAgbXV0YWJs
ZSBPcHRpb25hbDxQQUw6Ok9UU1ZHVGFibGU+IG1fb3RTVkdUYWJsZTsKKyAgICBtdXRhYmxlIE9w
dGlvbmFsPENvbXBsZXhDb2xvckZvcm1hdEdseXBocz4gbV9nbHlwaHNXaXRoQ29tcGxleENvbG9y
Rm9ybWF0OyAvLyBTVkcgYW5kIHNiaXgKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENh
c2NhZGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
dGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAppbmRleCA2ZmYwMGJmYmQ1NGEyYjhhMThlZWMw
NTg0OTA3OTM1NGMwMjEyZGIwLi43NTU3ZDBhY2U0NGNiZTNjM2RhOTU3MWU2ZWVlOGY2YTQwNjk2
MmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4
dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcApAQCAtMTkwLDkgKzE5MCwx
MiBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgIGlmICghcGxhdGZvcm1EYXRhLnNpemUo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgaWYgKGlzSW5HUFVQcm9jZXNzKCkgJiYgZm9udC5o
YXNBbnlDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHMoZ2x5cGhzLCBudW1HbHlwaHMpKSB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAg
UkVMRUFTRV9BU1NFUlQoIWlzSW5HUFVQcm9jZXNzKCkgfHwgIWZvbnQuZmluZE9UU1ZHR2x5cGhz
KGdseXBocywgbnVtR2x5cGhzKSk7CisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBib29sIHNob3VsZEFudGlhbGlhcyA9IHRydWU7
CiAgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cyA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVUZXh0LmNwcApp
bmRleCBlZjg2ZTRjM2MyYmJiYTg3NDZlMjQxZTQzNTFlNzgwZTc0MzNkMzE2Li4yNjliNzkzYjMz
MDQwMjIxNDMwY2FkOGNhYzE5MTJiMGU0NzRhNWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAKQEAg
LTc3NSwyMiArNzc1LDEwMyBAQCBib29sIEZvbnQ6OmlzUHJvYmFibHlPbmx5VXNlZFRvUmVuZGVy
SWNvbnMoKSBjb25zdAogICAgIH0pOwogfQogCi1PcHRpb25hbDxCaXRWZWN0b3I+IEZvbnQ6OmZp
bmRPVFNWR0dseXBocyhjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIHVuc2lnbmVkIGNv
dW50KSBjb25zdAotewogI2lmIFBMQVRGT1JNKENPQ09BKQorY29uc3QgUEFMOjpPVFNWR1RhYmxl
JiBGb250OjpvdFNWR1RhYmxlKCkgY29uc3QKK3sKICAgICBpZiAoIW1fb3RTVkdUYWJsZSkgewog
ICAgICAgICBpZiAoYXV0byB0YWJsZURhdGEgPSBhZG9wdENGKENURm9udENvcHlUYWJsZShwbGF0
Zm9ybURhdGEoKS5jdEZvbnQoKSwga0NURm9udFRhYmxlU1ZHLCBrQ1RGb250VGFibGVPcHRpb25O
b09wdGlvbnMpKSkKICAgICAgICAgICAgIG1fb3RTVkdUYWJsZSA9IFBBTDo6T1RTVkdUYWJsZSh0
YWJsZURhdGEuZ2V0KCksIGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpLCBwbGF0Zm9ybURhdGEo
KS5zaXplKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX290U1ZHVGFibGUgPSB7eyB9
fTsKICAgICB9CisgICAgcmV0dXJuIG1fb3RTVkdUYWJsZS52YWx1ZSgpOworfQorCitGb250OjpD
b21wbGV4Q29sb3JGb3JtYXRHbHlwaHMgRm9udDo6Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzOjpj
cmVhdGVXaXRoTm9SZWxldmFudFRhYmxlcygpCit7CisgICAgcmV0dXJuIHsgZmFsc2UsIDAgfTsK
K30KKworRm9udDo6Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzIEZvbnQ6OkNvbXBsZXhDb2xvckZv
cm1hdEdseXBoczo6Y3JlYXRlV2l0aFJlbGV2YW50VGFibGVzQW5kR2x5cGhDb3VudCh1bnNpZ25l
ZCBnbHlwaENvdW50KQoreworICAgIHJldHVybiB7IHRydWUsIGdseXBoQ291bnQgfTsKK30KKwor
Ym9vbCBGb250OjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM6Omhhc1ZhbHVlRm9yKEdseXBoIGds
eXBoKSBjb25zdAoreworICAgIHJldHVybiBtX2JpdHMuY29udGFpbnMoYml0Rm9ySW5pdGlhbGl6
ZWQoZ2x5cGgpKTsKK30KKworYm9vbCBGb250OjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM6Omdl
dChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaGFzVmFsdWVGb3IoZ2x5cGgpKTsK
KyAgICByZXR1cm4gbV9iaXRzLmNvbnRhaW5zKGJpdEZvclZhbHVlKGdseXBoKSk7Cit9CiAKLSAg
ICBpZiAoIVBBTDo6aXNPVFNWR0ZyYW1ld29ya0F2YWlsYWJsZSgpIHx8ICFtX290U1ZHVGFibGUu
dmFsdWUoKS50YWJsZSkKK3ZvaWQgRm9udDo6Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzOjpzZXQo
R2x5cGggZ2x5cGgsIGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJUKCFtX2hhc1JlbGV2YW50VGFi
bGVzKTsKKyAgICBBU1NFUlQoIWhhc1ZhbHVlRm9yKGdseXBoKSk7CisgICAgbV9iaXRzLnNldChi
aXRGb3JJbml0aWFsaXplZChnbHlwaCkpOworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgbV9iaXRz
LnNldChiaXRGb3JWYWx1ZShnbHlwaCkpOworfQorCitib29sIEZvbnQ6Omhhc0NvbXBsZXhDb2xv
ckZvcm1hdFRhYmxlcygpIGNvbnN0Cit7CisgICAgaWYgKG90U1ZHVGFibGUoKS50YWJsZSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyNpZiBIQVZFKENPUkVfVEVYVF9TQklYX0lNQUdFX1NJWkVf
RlVOQ1RJT05TKQorICAgIGlmIChhdXRvIHNiaXhUYWJsZURhdGEgPSBhZG9wdENGKENURm9udENv
cHlUYWJsZShwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwga0NURm9udFRhYmxlU2JpeCwga0NURm9u
dFRhYmxlT3B0aW9uTm9PcHRpb25zKSkpCisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0ZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEdseXBocyYg
Rm9udDo6Z2x5cGhzV2l0aENvbXBsZXhDb2xvckZvcm1hdCgpIGNvbnN0Cit7CisgICAgaWYgKCFt
X2dseXBoc1dpdGhDb21wbGV4Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgaWYgKGhhc0NvbXBsZXhD
b2xvckZvcm1hdFRhYmxlcygpKSB7CisgICAgICAgICAgICBDRkluZGV4IGdseXBoQ291bnQgPSBD
VEZvbnRHZXRHbHlwaENvdW50KGdldENURm9udCgpKTsKKyAgICAgICAgICAgIGlmIChnbHlwaENv
dW50ID49IDApIHsKKyAgICAgICAgICAgICAgICBtX2dseXBoc1dpdGhDb21wbGV4Q29sb3JGb3Jt
YXQgPSBDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM6OmNyZWF0ZVdpdGhSZWxldmFudFRhYmxlc0Fu
ZEdseXBoQ291bnQoZ2x5cGhDb3VudCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ2x5cGhz
V2l0aENvbXBsZXhDb2xvckZvcm1hdC52YWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIG1fZ2x5cGhzV2l0aENvbXBsZXhDb2xvckZvcm1hdCA9IENvbXBsZXhDb2xv
ckZvcm1hdEdseXBoczo6Y3JlYXRlV2l0aE5vUmVsZXZhbnRUYWJsZXMoKTsKKyAgICByZXR1cm4g
bV9nbHlwaHNXaXRoQ29tcGxleENvbG9yRm9ybWF0LnZhbHVlKCk7Cit9CisKK2Jvb2wgRm9udDo6
Z2x5cGhIYXNDb21wbGV4Q29sb3JGb3JtYXQoR2x5cGggZ2x5cGhJRCkgY29uc3QKK3sKKyAgICBp
ZiAoYXV0byBzdmdUYWJsZSA9IG90U1ZHVGFibGUoKS50YWJsZSkgeworICAgICAgICBpZiAoUEFM
Ojpzb2Z0TGlua09UU1ZHT1RTVkdUYWJsZUdldERvY3VtZW50SW5kZXhGb3JHbHlwaChzdmdUYWJs
ZSwgZ2x5cGhJRCkgIT0ga0NGTm90Rm91bmQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyNpZiBIQVZFKENPUkVfVEVYVF9TQklYX0lNQUdFX1NJWkVfRlVOQ1RJT05TKQorICAg
IC8vIFRoZXJlJ3Mgbm8gZnVuY3Rpb24gdG8gZGlyZWN0bHkgbG9vayB1cCB0aGUgc2JpeCB0YWJs
ZSwgc28gdXNlIHRoZSBmYWN0IHRoYXQgdGhpcyBvbmUgcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVl
IGlmZiB0aGVyZSdzIGFuIHNiaXggZW50cnkuCisgICAgaWYgKENURm9udEdldFNiaXhJbWFnZVNp
emVGb3JHbHlwaEFuZENvbnRlbnRzU2NhbGUoZ2V0Q1RGb250KCksIGdseXBoSUQsIDApKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlm
CisKK09wdGlvbmFsPEJpdFZlY3Rvcj4gRm9udDo6ZmluZE9UU1ZHR2x5cGhzKGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqIGdseXBocywgdW5zaWduZWQgY291bnQpIGNvbnN0Cit7CisjaWYgUExBVEZP
Uk0oQ09DT0EpCisgICAgYXV0byB0YWJsZSA9IG90U1ZHVGFibGUoKS50YWJsZTsKKyAgICBpZiAo
IXRhYmxlKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgT3B0aW9uYWw8Qml0VmVjdG9yPiBy
ZXN1bHQ7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgaWYgKFBBTDo6c29mdExpbmtPVFNWR09UU1ZHVGFibGVHZXREb2N1bWVudEluZGV4Rm9yR2x5
cGgobV9vdFNWR1RhYmxlLnZhbHVlKCkudGFibGUsIGdseXBoc1tpXSkgIT0ga0NGTm90Rm91bmQp
IHsKKyAgICAgICAgaWYgKFBBTDo6c29mdExpbmtPVFNWR09UU1ZHVGFibGVHZXREb2N1bWVudElu
ZGV4Rm9yR2x5cGgodGFibGUsIGdseXBoc1tpXSkgIT0ga0NGTm90Rm91bmQpIHsKICAgICAgICAg
ICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IEJpdFZlY3Rvcihjb3Vu
dCk7CiAgICAgICAgICAgICByZXN1bHQudmFsdWUoKS5xdWlja1NldChpKTsKQEAgLTgwNCw0ICs4
ODUsMjYgQEAgT3B0aW9uYWw8Qml0VmVjdG9yPiBGb250OjpmaW5kT1RTVkdHbHlwaHMoY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCB1bnNpZ24KICNlbmRpZgogfQogCitib29sIEZvbnQ6
Omhhc0FueUNvbXBsZXhDb2xvckZvcm1hdEdseXBocyhjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMsIHVuc2lnbmVkIGNvdW50KSBjb25zdAoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAg
IGF1dG8mIGNvbXBsZXhHbHlwaHMgPSBnbHlwaHNXaXRoQ29tcGxleENvbG9yRm9ybWF0KCk7Cisg
ICAgaWYgKCFjb21wbGV4R2x5cGhzLmhhc1JlbGV2YW50VGFibGVzKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Cisg
ICAgICAgIGlmICghY29tcGxleEdseXBocy5oYXNWYWx1ZUZvcihnbHlwaHNbaV0pKQorICAgICAg
ICAgICAgY29tcGxleEdseXBocy5zZXQoZ2x5cGhzW2ldLCBnbHlwaEhhc0NvbXBsZXhDb2xvckZv
cm1hdChnbHlwaHNbaV0pKTsKKworICAgICAgICBpZiAoY29tcGxleEdseXBocy5nZXQoZ2x5cGhz
W2ldKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShnbHlwaHMpOworICAgIFVOVVNFRF9QQVJBTShjb3Vu
dCk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429735</attachid>
            <date>2021-05-26 01:20:54 -0700</date>
            <delta_ts>2021-05-26 15:11:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226159-20210526182052.patch</filename>
            <type>text/plain</type>
            <size>14378</size>
            <attacher name="Cameron McCormack (:heycam)">heycam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MDc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGI1ZjJmY2FmM2YwOTdmZDY4OTA4NWVh
YmI3MmEyZjFkYTFhZDMyZjguLmQ5N2NlYWZjMWQwOWRhNDRjOGQ1YjE3ODA4ZGVmOTQ0MjJhMWFm
ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUtMjIgIENhbWVyb24gTWNDb3JtYWNrICA8
aGV5Y2FtQGFwcGxlLmNvbT4KKworICAgICAgICBQcmV2ZW50IHNiaXggZ2x5cGhzIGZyb20gYmVp
bmcgcmVuZGVyZWQgaW4gdGhlIEdQVSBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNTkKKyAgICAgICAgPHJkYXI6Ly83NzIzMTk1OT4K
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIHd0Zi9QbGF0
Zm9ybUhhdmUuaDogQWRkIEhBVkVfQ09SRV9URVhUX1NCSVhfSU1BR0VfU0laRV9GVU5DVElPTlMu
CisKIDIwMjEtMDUtMjUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBVc2UgVW5jaGVja2VkTG9jayBsZXNzIGluIEphdmFTY3JpcHRDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTUxMTI4MTNiZmFhN2M1YjVkNjM2Nzg5OTJjOGE2MTgwNDQ2ZDc4ZC4uNzIwZmNkMDhhYmIyODNl
ZTY5MDYwMWJhNTliOWMyMzBhZGEyNzdjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisy
MDIxLTA1LTIyICBDYW1lcm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CisKKyAgICAg
ICAgUHJldmVudCBzYml4IGdseXBocyBmcm9tIGJlaW5nIHJlbmRlcmVkIGluIHRoZSBHUFUgcHJv
Y2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2
MTU5CisgICAgICAgIDxyZGFyOi8vNzcyMzE5NTk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCisKKyAgICAgICAgV2hlbiBHUFVQIGNhbnZhcyBpcyBlbmFibGVkLCB0aGUgZGlz
cGxheSBsaXN0IHJlY29yZGVyIGhhbmRsZXMgc2JpeAorICAgICAgICBnbHlwaHMgYnkgcmVjb3Jk
aW5nIGRyYXdJbWFnZSBjYWxscy4gVGhpcyBtZWFucyB0aGF0IGR1cmluZyBkaXNwbGF5IGxpc3QK
KyAgICAgICAgcmVwbGF5LCB3ZSBzaG91bGQgbm90IGhhdmUgYW55IHNiaXggZ2x5cGhzIGluIGEg
RHJhd0dseXBocyBkaXNwbGF5IGxpc3QKKyAgICAgICAgaXRlbS4gVGhpcyBwYXRjaCBjaGVja3Mg
Zm9yIHN1Y2ggZ2x5cGhzIChsaWtlIHdlIGFscmVhZHkgZG8gZm9yIFNWRworICAgICAgICBnbHlw
aHMpIGFuZCByZXR1cm5zIGVhcmx5IGlmIHRoZXkncmUgZm91bmQuCisKKyAgICAgICAgTWFudWFs
bHkgdGVzdGVkLiBObyBuZXcgdGVzdHMsIHNpbmNlIHdlJ2QgbmVlZCB0byBhZGQgc29tZSB3YXkg
aW5qZWN0CisgICAgICAgIHNiaXggZ2x5cGggSURzIGludG8gZGlzcGxheSBsaXN0IGl0ZW1zLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udDo6Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzOjpoYXNSZWxldmFudFRhYmxlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250OjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM6OmJpdEZv
ckluaXRpYWxpemVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXhDb2xvckZvcm1h
dEdseXBoczo6Yml0Rm9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Q29tcGxleENv
bG9yRm9ybWF0R2x5cGhzOjpiaXRzUmVxdWlyZWRGb3JHbHlwaENvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEdseXBoczo6Q29tcGxleENvbG9yRm9ybWF0
R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2Fk
ZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhz
KTogQ2FsbCBuZXcgZnVuY3Rpb24gdGhhdCBjaGVja3MgZm9yCisgICAgICAgIFNWRyBhbmQgc2Jp
eCBnbHlwaCBwcmVzZW5jZS4gQ2hhbmdlIHJlbGVhc2UgYXNzZXJ0aW9uIHRvIGRlYnVnCisgICAg
ICAgIGFzc2VydGlvbiB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IGNyYXNoaW5nIHRoZSBHUFVQLCBh
bmQgaW5zdGVhZCByZXR1cm4KKyAgICAgICAgZWFybHkgaW4gdGhlIHByZXNlbmNlIG9mIHRoZXNl
IGdseXBocy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b3RTVkdUYWJsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM6OmNyZWF0ZVdpdGhO
b1JlbGV2YW50VGFibGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXhDb2xvckZv
cm1hdEdseXBoczo6Y3JlYXRlV2l0aFJlbGV2YW50VGFibGVzQW5kR2x5cGhDb3VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM6Omhhc1ZhbHVlRm9y
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEdseXBo
czo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXhDb2xvckZvcm1h
dEdseXBoczo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Omhhc0NvbXBsZXhDb2xvckZv
cm1hdFRhYmxlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpnbHlwaHNXaXRoQ29t
cGxleENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmdseXBoSGFz
Q29tcGxleENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZpbmRP
VFNWR0dseXBocyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpoYXNBbnlDb21wbGV4
Q29sb3JGb3JtYXRHbHlwaHMgY29uc3QpOiBOZXcgZnVuY3Rpb24gdG8KKyAgICAgICAgY2hlY2sg
aWYgYSBsaXN0IG9mIGdseXBoIElEcyBoYXMgYW55IHRoYXQgd291bGQgYmUgaW5hcHByb3ByaWF0
ZQorICAgICAgICB0byByZW5kZXIgaW4gdGhlIEdQVSBwcm9jZXNzLiBTaW5jZSBjYWxsaW5nIHRo
ZSBDb3JlVGV4dCBmdW5jdGlvbiB0aGF0CisgICAgICAgIGFsbG93cyB1cyB0byBjaGVjayBpZiBh
biBzYml4IGdseXBoIGV4aXN0cyB3b3VsZCBiZSB0b28gZXhwZW5zaXZlIHRvCisgICAgICAgIGNh
bGwgZm9yIGV2ZXJ5IGRyYXdHbHlwaHMgY2FsbCwgd2UgbGF6aWx5IGNhY2hlIChpbiBhIEJpdFZl
Y3RvcikgdGhlCisgICAgICAgIHByZXNlbmNlIG9mIHNiaXggYW5kIFNWRyBpbWFnZXMgZm9yIGds
eXBoIElEcyB3ZSBjaGVjay4KKwogMjAyMS0wNS0yNSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9y
aS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBSZW5hbWUgSW1hZ2VCdWZmZXI6OnRyYW5zZm9y
bUNvbG9yU3BhY2UgdG8gdHJhbnNmb3JtVG9Db2xvclNwYWNlLCBhbmQgaXQgc2hvdWxkIHRha2Ug
YSBzaW5nbGUgYXJndW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IGYwMGQ1NWNlYmFlYWRhZTA3
ZDJiMjg0YjA5MmEwM2VmYTM2NDdmN2IuLjQwNzA4MTI1YWJmYTNkZWVjOTVlNjhmNDZjOTNkNzVj
NzUwYmQ4ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA1LTIy
ICBDYW1lcm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUHJldmVu
dCBzYml4IGdseXBocyBmcm9tIGJlaW5nIHJlbmRlcmVkIGluIHRoZSBHUFUgcHJvY2VzcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTU5CisgICAg
ICAgIDxyZGFyOi8vNzcyMzE5NTk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CisKKyAgICAgICAgKiBwYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmg6IEFkZCBkZWNsYXJhdGlvbiBm
b3IgYW4gU1BJIHRoYXQgbGV0cyB1cworICAgICAgICBpbmZlciB3aGV0aGVyIGEgZ2x5cGggaGFz
IGFuIHNiaXggaW1hZ2UuCisKIDIwMjEtMDUtMjQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUu
Y29tPgogCiAgICAgICAgIENvbnZlcnQgRGVzdGluYXRpb25Db2xvclNwYWNlIGZyb20gYW4gZW51
bSB0byBjbGFzcyB3cmFwcGluZyBhIHBsYXRmb3JtIGNvbG9yIHNwYWNlIChDR0NvbG9yU3BhY2VS
ZWYgZm9yIENHIHBvcnRzLCBldGMuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZv
cm1IYXZlLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaAppbmRleCAyMzEzZGJmY2Iz
OTY4NzdiNjI2NWYzNDEwZGUxNzNmNzkyNTFlNThkLi40M2JmNGYwYjE3YzBlOWFjNDdiNTA3YWJl
ZmY4ZDE3ZTRkOWZmODY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaApAQCAtOTkyLDMgKzk5MiwxMSBA
QAogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiAhKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1Nf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxNTAwMDApCiAjZGVmaW5lIEhBVkVfU1lTVEVNX1NBTkRC
T1hFU19BTExPV0lOR19URVJNSU5BVEVfV0lUSF9SRUFTT04gMQogI2VuZGlmCisKKyNpZiAoUExB
VEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDAwMCBc
CisgICAgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTQwMDAwKSBcCisgICAgfHwgKFBMQVRGT1JNKFdBVENIT1MpICYmIF9fV0FUQ0hfT1Nf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gNzAwMDApIFwKKyAgICB8fCAoUExBVEZPUk0oQVBQTEVU
VikgJiYgX19UVl9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxNDAwMDApIFwKKyAgICB8fCAo
UExBVEZPUk0oTUFDQ0FUQUxZU1QpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDE0MDAwMCkpCisjZGVmaW5lIEhBVkVfQ09SRV9URVhUX1NCSVhfSU1BR0VfU0laRV9GVU5D
VElPTlMgMQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9j
Zi9Db3JlVGV4dFNQSS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY2YvQ29yZVRleHRT
UEkuaAppbmRleCA5YTZhOGM5OTQ3NTg1YmNiOTE4YzRiZGIyMzU5YTU5MDljYTAzMTlmLi40OTA4
NjYzOThjNGI1MDQ1NDA5NGJiYTk0ZmU4MThkYWMzZWY4Y2RhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmgKQEAgLTIwMyw1ICsyMDMsNiBAQCBDVEZvbnRE
ZXNjcmlwdG9yUmVmIENURm9udENyZWF0ZVBoeXNpY2FsRm9udERlc2NyaXB0b3JGb3JDaGFyYWN0
ZXJzV2l0aExhbmd1YWdlKAogCiBib29sIENURm9udElzQXBwbGVDb2xvckVtb2ppKENURm9udFJl
Zik7CiBDVEZvbnRSZWYgQ1RGb250Q3JlYXRlRm9yQ2hhcmFjdGVycyhDVEZvbnRSZWYgY3VycmVu
dEZvbnQsIGNvbnN0IFVURjE2Q2hhciAqY2hhcmFjdGVycywgQ0ZJbmRleCBsZW5ndGgsIENGSW5k
ZXggKmNvdmVyZWRMZW5ndGgpOworQ0dGbG9hdCBDVEZvbnRHZXRTYml4SW1hZ2VTaXplRm9yR2x5
cGhBbmRDb250ZW50c1NjYWxlKENURm9udFJlZiwgY29uc3QgQ0dHbHlwaCwgQ0dGbG9hdCBjb250
ZW50c1NjYWxlKTsKIAogV1RGX0VYVEVSTl9DX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5oCmluZGV4IDc1ZjY0NmJmZDBjMzg1ZTBhNDNiYmI2MWU2NzcyYTQ4MWEwOTY2
YWUuLmYyNDk3N2ZmZmIwNzBlMWFjM2FlNjNmYWJkZGNiMTg0YTQ3NGI4ZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAgLTIyMyw2ICsyMjMsOCBAQCBwdWJsaWM6
CiAgICAgLy8gUmV0dXJucyBudWxsb3B0IGlmIG5vbmUgb2YgdGhlIGdseXBocyBhcmUgT1QtU1ZH
IGdseXBocy4KICAgICBPcHRpb25hbDxCaXRWZWN0b3I+IGZpbmRPVFNWR0dseXBocyhjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiwgdW5zaWduZWQgY291bnQpIGNvbnN0OwogCisgICAgYm9vbCBoYXNB
bnlDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHMoY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIHVuc2ln
bmVkIGNvdW50KSBjb25zdDsKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICBTQ1JJUFRfRk9OVFBS
T1BFUlRJRVMqIHNjcmlwdEZvbnRQcm9wZXJ0aWVzKCkgY29uc3Q7CiAgICAgU0NSSVBUX0NBQ0hF
KiBzY3JpcHRDYWNoZSgpIGNvbnN0IHsgcmV0dXJuICZtX3NjcmlwdENhY2hlOyB9CkBAIC0yNTcs
NiArMjU5LDM4IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgd2lkdGhGb3JHRElHbHlwaChHbHlwaCkg
Y29uc3Q7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGNsYXNzIENvbXBsZXhD
b2xvckZvcm1hdEdseXBocyB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgQ29tcGxleENv
bG9yRm9ybWF0R2x5cGhzIGNyZWF0ZVdpdGhOb1JlbGV2YW50VGFibGVzKCk7CisgICAgICAgIHN0
YXRpYyBDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHMgY3JlYXRlV2l0aFJlbGV2YW50VGFibGVzQW5k
R2x5cGhDb3VudCh1bnNpZ25lZCBnbHlwaENvdW50KTsKKworICAgICAgICBib29sIGhhc1ZhbHVl
Rm9yKEdseXBoKSBjb25zdDsKKyAgICAgICAgYm9vbCBnZXQoR2x5cGgpIGNvbnN0OworICAgICAg
ICB2b2lkIHNldChHbHlwaCwgYm9vbCB2YWx1ZSk7CisKKyAgICAgICAgYm9vbCBoYXNSZWxldmFu
dFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmVsZXZhbnRUYWJsZXM7IH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGJpdEZvckluaXRpYWxpemVk
KEdseXBoIGdseXBoSUQpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oZ2x5cGhJRCkgKiAy
OyB9CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGJpdEZvclZhbHVlKEdseXBoIGds
eXBoSUQpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oZ2x5cGhJRCkgKiAyICsgMTsgfQor
ICAgICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBiaXRzUmVxdWlyZWRGb3JHbHlwaENvdW50
KHVuc2lnbmVkIGdseXBoQ291bnQpIHsgcmV0dXJuIGdseXBoQ291bnQgKiAyOyB9CisKKyAgICAg
ICAgQ29tcGxleENvbG9yRm9ybWF0R2x5cGhzKGJvb2wgaGFzUmVsZXZhbnRUYWJsZXMsIHVuc2ln
bmVkIGdseXBoQ291bnQpCisgICAgICAgICAgICA6IG1faGFzUmVsZXZhbnRUYWJsZXMoaGFzUmVs
ZXZhbnRUYWJsZXMpCisgICAgICAgICAgICAsIG1fYml0cyhiaXRzUmVxdWlyZWRGb3JHbHlwaENv
dW50KGdseXBoQ291bnQpKQorICAgICAgICB7IH0KKworICAgICAgICBib29sIG1faGFzUmVsZXZh
bnRUYWJsZXM7CisgICAgICAgIEJpdFZlY3RvciBtX2JpdHM7IC8vIHBhaXJzIG9mIChpbml0aWFs
aXplZCwgdmFsdWUpIGJpdHMKKyAgICB9OworCisgICAgY29uc3QgUEFMOjpPVFNWR1RhYmxlJiBv
dFNWR1RhYmxlKCkgY29uc3Q7CisgICAgYm9vbCBnbHlwaEhhc0NvbXBsZXhDb2xvckZvcm1hdChH
bHlwaCkgY29uc3Q7CisgICAgYm9vbCBoYXNDb21wbGV4Q29sb3JGb3JtYXRUYWJsZXMoKSBjb25z
dDsKKyAgICBDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHMmIGdseXBoc1dpdGhDb21wbGV4Q29sb3JG
b3JtYXQoKSBjb25zdDsKKyNlbmRpZgorCiAgICAgRm9udE1ldHJpY3MgbV9mb250TWV0cmljczsK
ICAgICBmbG9hdCBtX21heENoYXJXaWR0aCB7IC0xIH07CiAgICAgZmxvYXQgbV9hdmdDaGFyV2lk
dGggeyAtMSB9OwpAQCAtMjk4LDYgKzMzMiw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBPcHRp
b25hbDxCaXRWZWN0b3I+IG1fZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzOwogICAgIG11dGFi
bGUgT3B0aW9uYWw8Qml0VmVjdG9yPiBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwczsK
ICAgICBtdXRhYmxlIE9wdGlvbmFsPFBBTDo6T1RTVkdUYWJsZT4gbV9vdFNWR1RhYmxlOworICAg
IG11dGFibGUgT3B0aW9uYWw8Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzPiBtX2dseXBoc1dpdGhD
b21wbGV4Q29sb3JGb3JtYXQ7IC8vIFNWRyBhbmQgc2JpeAogI2VuZGlmCiAKICNpZiBQTEFURk9S
TShXSU4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
dGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCmluZGV4IDZmZjAwYmZiZDU0
YTJiOGExOGVlYzA1ODQ5MDc5MzU0YzAyMTJkYjAuLjc1NTdkMGFjZTQ0Y2JlM2MzZGE5NTcxZTZl
ZWU4ZjZhNDA2OTYyZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCkBAIC0x
OTAsOSArMTkwLDEyIEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHCiAgICAgaWYgKCFwbGF0Zm9y
bURhdGEuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDR0NvbnRleHRSZWYgY2dDb250
ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBpZiAoaXNJbkdQVVByb2Nlc3Mo
KSAmJiBmb250Lmhhc0FueUNvbXBsZXhDb2xvckZvcm1hdEdseXBocyhnbHlwaHMsIG51bUdseXBo
cykpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNJbkdQVVByb2Nlc3MoKSB8fCAhZm9udC5maW5k
T1RTVkdHbHlwaHMoZ2x5cGhzLCBudW1HbHlwaHMpKTsKKyAgICBDR0NvbnRleHRSZWYgY2dDb250
ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIGJvb2wgc2hvdWxkQW50aWFs
aWFzID0gdHJ1ZTsKICAgICBib29sIHNob3VsZFNtb290aEZvbnRzID0gdHJ1ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29y
ZVRleHQuY3BwCmluZGV4IGVmODZlNGMzYzJiYmJhODc0NmUyNDFlNDM1MWU3ODBlNzQzM2QzMTYu
LjI2OWI3OTNiMzMwNDAyMjE0MzBjYWQ4Y2FjMTkxMmIwZTQ3NGE1YzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVU
ZXh0LmNwcApAQCAtNzc1LDIyICs3NzUsMTAzIEBAIGJvb2wgRm9udDo6aXNQcm9iYWJseU9ubHlV
c2VkVG9SZW5kZXJJY29ucygpIGNvbnN0CiAgICAgfSk7CiB9CiAKLU9wdGlvbmFsPEJpdFZlY3Rv
cj4gRm9udDo6ZmluZE9UU1ZHR2x5cGhzKGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywg
dW5zaWduZWQgY291bnQpIGNvbnN0Ci17CiAjaWYgUExBVEZPUk0oQ09DT0EpCitjb25zdCBQQUw6
Ok9UU1ZHVGFibGUmIEZvbnQ6Om90U1ZHVGFibGUoKSBjb25zdAorewogICAgIGlmICghbV9vdFNW
R1RhYmxlKSB7CiAgICAgICAgIGlmIChhdXRvIHRhYmxlRGF0YSA9IGFkb3B0Q0YoQ1RGb250Q29w
eVRhYmxlKHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBrQ1RGb250VGFibGVTVkcsIGtDVEZvbnRU
YWJsZU9wdGlvbk5vT3B0aW9ucykpKQogICAgICAgICAgICAgbV9vdFNWR1RhYmxlID0gUEFMOjpP
VFNWR1RhYmxlKHRhYmxlRGF0YS5nZXQoKSwgZm9udE1ldHJpY3MoKS51bml0c1BlckVtKCksIHBs
YXRmb3JtRGF0YSgpLnNpemUoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fb3RTVkdU
YWJsZSA9IHt7IH19OwogICAgIH0KKyAgICByZXR1cm4gbV9vdFNWR1RhYmxlLnZhbHVlKCk7Cit9
CisKK0ZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEdseXBocyBGb250OjpDb21wbGV4Q29sb3JGb3Jt
YXRHbHlwaHM6OmNyZWF0ZVdpdGhOb1JlbGV2YW50VGFibGVzKCkKK3sKKyAgICByZXR1cm4geyBm
YWxzZSwgMCB9OworfQorCitGb250OjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHMgRm9udDo6Q29t
cGxleENvbG9yRm9ybWF0R2x5cGhzOjpjcmVhdGVXaXRoUmVsZXZhbnRUYWJsZXNBbmRHbHlwaENv
dW50KHVuc2lnbmVkIGdseXBoQ291bnQpCit7CisgICAgcmV0dXJuIHsgdHJ1ZSwgZ2x5cGhDb3Vu
dCB9OworfQorCitib29sIEZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEdseXBoczo6aGFzVmFsdWVG
b3IoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYml0cy5jb250YWlucyhiaXRG
b3JJbml0aWFsaXplZChnbHlwaCkpOworfQorCitib29sIEZvbnQ6OkNvbXBsZXhDb2xvckZvcm1h
dEdseXBoczo6Z2V0KEdseXBoIGdseXBoKSBjb25zdAoreworICAgIEFTU0VSVChoYXNWYWx1ZUZv
cihnbHlwaCkpOworICAgIHJldHVybiBtX2JpdHMuY29udGFpbnMoYml0Rm9yVmFsdWUoZ2x5cGgp
KTsKK30KIAotICAgIGlmICghUEFMOjppc09UU1ZHRnJhbWV3b3JrQXZhaWxhYmxlKCkgfHwgIW1f
b3RTVkdUYWJsZS52YWx1ZSgpLnRhYmxlKQordm9pZCBGb250OjpDb21wbGV4Q29sb3JGb3JtYXRH
bHlwaHM6OnNldChHbHlwaCBnbHlwaCwgYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIW1faGFz
UmVsZXZhbnRUYWJsZXMpOworICAgIEFTU0VSVCghaGFzVmFsdWVGb3IoZ2x5cGgpKTsKKyAgICBt
X2JpdHMuc2V0KGJpdEZvckluaXRpYWxpemVkKGdseXBoKSk7CisgICAgaWYgKHZhbHVlKQorICAg
ICAgICBtX2JpdHMuc2V0KGJpdEZvclZhbHVlKGdseXBoKSk7Cit9CisKK2Jvb2wgRm9udDo6aGFz
Q29tcGxleENvbG9yRm9ybWF0VGFibGVzKCkgY29uc3QKK3sKKyAgICBpZiAob3RTVkdUYWJsZSgp
LnRhYmxlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworI2lmIEhBVkUoQ09SRV9URVhUX1NCSVhf
SU1BR0VfU0laRV9GVU5DVElPTlMpCisgICAgaWYgKGF1dG8gc2JpeFRhYmxlRGF0YSA9IGFkb3B0
Q0YoQ1RGb250Q29weVRhYmxlKHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBrQ1RGb250VGFibGVT
Yml4LCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisjZW5kaWYKKworICAgIHJldHVybiBmYWxzZTsKK30KKworRm9udDo6Q29tcGxleENvbG9yRm9y
bWF0R2x5cGhzJiBGb250OjpnbHlwaHNXaXRoQ29tcGxleENvbG9yRm9ybWF0KCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fZ2x5cGhzV2l0aENvbXBsZXhDb2xvckZvcm1hdCkgeworICAgICAgICBpZiAo
aGFzQ29tcGxleENvbG9yRm9ybWF0VGFibGVzKCkpIHsKKyAgICAgICAgICAgIENGSW5kZXggZ2x5
cGhDb3VudCA9IENURm9udEdldEdseXBoQ291bnQoZ2V0Q1RGb250KCkpOworICAgICAgICAgICAg
aWYgKGdseXBoQ291bnQgPj0gMCkgeworICAgICAgICAgICAgICAgIG1fZ2x5cGhzV2l0aENvbXBs
ZXhDb2xvckZvcm1hdCA9IENvbXBsZXhDb2xvckZvcm1hdEdseXBoczo6Y3JlYXRlV2l0aFJlbGV2
YW50VGFibGVzQW5kR2x5cGhDb3VudChnbHlwaENvdW50KTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9nbHlwaHNXaXRoQ29tcGxleENvbG9yRm9ybWF0LnZhbHVlKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgbV9nbHlwaHNXaXRoQ29tcGxleENvbG9yRm9ybWF0ID0g
Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzOjpjcmVhdGVXaXRoTm9SZWxldmFudFRhYmxlcygpOwor
ICAgIHJldHVybiBtX2dseXBoc1dpdGhDb21wbGV4Q29sb3JGb3JtYXQudmFsdWUoKTsKK30KKwor
Ym9vbCBGb250OjpnbHlwaEhhc0NvbXBsZXhDb2xvckZvcm1hdChHbHlwaCBnbHlwaElEKSBjb25z
dAoreworICAgIGlmIChhdXRvIHN2Z1RhYmxlID0gb3RTVkdUYWJsZSgpLnRhYmxlKSB7CisgICAg
ICAgIGlmIChQQUw6OnNvZnRMaW5rT1RTVkdPVFNWR1RhYmxlR2V0RG9jdW1lbnRJbmRleEZvckds
eXBoKHN2Z1RhYmxlLCBnbHlwaElEKSAhPSBrQ0ZOb3RGb3VuZCkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworI2lmIEhBVkUoQ09SRV9URVhUX1NCSVhfSU1BR0VfU0laRV9GVU5D
VElPTlMpCisgICAgLy8gVGhlcmUncyBubyBmdW5jdGlvbiB0byBkaXJlY3RseSBsb29rIHVwIHRo
ZSBzYml4IHRhYmxlLCBzbyB1c2UgdGhlIGZhY3QgdGhhdCB0aGlzIG9uZSByZXR1cm5zIGEgbm9u
LXplcm8gdmFsdWUgaWZmIHRoZXJlJ3MgYW4gc2JpeCBlbnRyeS4KKyAgICBpZiAoQ1RGb250R2V0
U2JpeEltYWdlU2l6ZUZvckdseXBoQW5kQ29udGVudHNTY2FsZShnZXRDVEZvbnQoKSwgZ2x5cGhJ
RCwgMCkpCisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisjZW5kaWYKKworT3B0aW9uYWw8Qml0VmVjdG9yPiBGb250OjpmaW5kT1RTVkdHbHlwaHMo
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCB1bnNpZ25lZCBjb3VudCkgY29uc3QKK3sK
KyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBhdXRvIHRhYmxlID0gb3RTVkdUYWJsZSgpLnRhYmxl
OworICAgIGlmICghdGFibGUpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBPcHRpb25hbDxC
aXRWZWN0b3I+IHJlc3VsdDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewotICAgICAgICBpZiAoUEFMOjpzb2Z0TGlua09UU1ZHT1RTVkdUYWJsZUdldERvY3VtZW50
SW5kZXhGb3JHbHlwaChtX290U1ZHVGFibGUudmFsdWUoKS50YWJsZSwgZ2x5cGhzW2ldKSAhPSBr
Q0ZOb3RGb3VuZCkgeworICAgICAgICBpZiAoUEFMOjpzb2Z0TGlua09UU1ZHT1RTVkdUYWJsZUdl
dERvY3VtZW50SW5kZXhGb3JHbHlwaCh0YWJsZSwgZ2x5cGhzW2ldKSAhPSBrQ0ZOb3RGb3VuZCkg
ewogICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQml0
VmVjdG9yKGNvdW50KTsKICAgICAgICAgICAgIHJlc3VsdC52YWx1ZSgpLnF1aWNrU2V0KGkpOwpA
QCAtODA0LDQgKzg4NSwyNiBAQCBPcHRpb25hbDxCaXRWZWN0b3I+IEZvbnQ6OmZpbmRPVFNWR0ds
eXBocyhjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIHVuc2lnbgogI2VuZGlmCiB9CiAK
K2Jvb2wgRm9udDo6aGFzQW55Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzKGNvbnN0IEdseXBoQnVm
ZmVyR2x5cGgqIGdseXBocywgdW5zaWduZWQgY291bnQpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0o
Q09DT0EpCisgICAgYXV0byYgY29tcGxleEdseXBocyA9IGdseXBoc1dpdGhDb21wbGV4Q29sb3JG
b3JtYXQoKTsKKyAgICBpZiAoIWNvbXBsZXhHbHlwaHMuaGFzUmVsZXZhbnRUYWJsZXMoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKKyAgICAgICAgaWYgKCFjb21wbGV4R2x5cGhzLmhhc1ZhbHVlRm9yKGdseXBoc1tp
XSkpCisgICAgICAgICAgICBjb21wbGV4R2x5cGhzLnNldChnbHlwaHNbaV0sIGdseXBoSGFzQ29t
cGxleENvbG9yRm9ybWF0KGdseXBoc1tpXSkpOworCisgICAgICAgIGlmIChjb21wbGV4R2x5cGhz
LmdldChnbHlwaHNbaV0pKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGdseXBocyk7CisgICAgVU5VU0VE
X1BBUkFNKGNvdW50KTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429802</attachid>
            <date>2021-05-26 15:11:06 -0700</date>
            <delta_ts>2021-05-26 23:43:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226159-20210527081104.patch</filename>
            <type>text/plain</type>
            <size>14377</size>
            <attacher name="Cameron McCormack (:heycam)">heycam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MDc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGI1ZjJmY2FmM2YwOTdmZDY4OTA4NWVh
YmI3MmEyZjFkYTFhZDMyZjguLmQ5N2NlYWZjMWQwOWRhNDRjOGQ1YjE3ODA4ZGVmOTQ0MjJhMWFm
ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUtMjIgIENhbWVyb24gTWNDb3JtYWNrICA8
aGV5Y2FtQGFwcGxlLmNvbT4KKworICAgICAgICBQcmV2ZW50IHNiaXggZ2x5cGhzIGZyb20gYmVp
bmcgcmVuZGVyZWQgaW4gdGhlIEdQVSBwcm9jZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNTkKKyAgICAgICAgPHJkYXI6Ly83NzIzMTk1OT4K
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIHd0Zi9QbGF0
Zm9ybUhhdmUuaDogQWRkIEhBVkVfQ09SRV9URVhUX1NCSVhfSU1BR0VfU0laRV9GVU5DVElPTlMu
CisKIDIwMjEtMDUtMjUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBVc2UgVW5jaGVja2VkTG9jayBsZXNzIGluIEphdmFTY3JpcHRDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTUxMTI4MTNiZmFhN2M1YjVkNjM2Nzg5OTJjOGE2MTgwNDQ2ZDc4ZC4uNzIwZmNkMDhhYmIyODNl
ZTY5MDYwMWJhNTliOWMyMzBhZGEyNzdjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisy
MDIxLTA1LTIyICBDYW1lcm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CisKKyAgICAg
ICAgUHJldmVudCBzYml4IGdseXBocyBmcm9tIGJlaW5nIHJlbmRlcmVkIGluIHRoZSBHUFUgcHJv
Y2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2
MTU5CisgICAgICAgIDxyZGFyOi8vNzcyMzE5NTk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCisKKyAgICAgICAgV2hlbiBHUFVQIGNhbnZhcyBpcyBlbmFibGVkLCB0aGUgZGlz
cGxheSBsaXN0IHJlY29yZGVyIGhhbmRsZXMgc2JpeAorICAgICAgICBnbHlwaHMgYnkgcmVjb3Jk
aW5nIGRyYXdJbWFnZSBjYWxscy4gVGhpcyBtZWFucyB0aGF0IGR1cmluZyBkaXNwbGF5IGxpc3QK
KyAgICAgICAgcmVwbGF5LCB3ZSBzaG91bGQgbm90IGhhdmUgYW55IHNiaXggZ2x5cGhzIGluIGEg
RHJhd0dseXBocyBkaXNwbGF5IGxpc3QKKyAgICAgICAgaXRlbS4gVGhpcyBwYXRjaCBjaGVja3Mg
Zm9yIHN1Y2ggZ2x5cGhzIChsaWtlIHdlIGFscmVhZHkgZG8gZm9yIFNWRworICAgICAgICBnbHlw
aHMpIGFuZCByZXR1cm5zIGVhcmx5IGlmIHRoZXkncmUgZm91bmQuCisKKyAgICAgICAgTWFudWFs
bHkgdGVzdGVkLiBObyBuZXcgdGVzdHMsIHNpbmNlIHdlJ2QgbmVlZCB0byBhZGQgc29tZSB3YXkg
aW5qZWN0CisgICAgICAgIHNiaXggZ2x5cGggSURzIGludG8gZGlzcGxheSBsaXN0IGl0ZW1zLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udDo6Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzOjpoYXNSZWxldmFudFRhYmxlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250OjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM6OmJpdEZv
ckluaXRpYWxpemVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXhDb2xvckZvcm1h
dEdseXBoczo6Yml0Rm9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Q29tcGxleENv
bG9yRm9ybWF0R2x5cGhzOjpiaXRzUmVxdWlyZWRGb3JHbHlwaENvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEdseXBoczo6Q29tcGxleENvbG9yRm9ybWF0
R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q2FzY2Fk
ZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhz
KTogQ2FsbCBuZXcgZnVuY3Rpb24gdGhhdCBjaGVja3MgZm9yCisgICAgICAgIFNWRyBhbmQgc2Jp
eCBnbHlwaCBwcmVzZW5jZS4gQ2hhbmdlIHJlbGVhc2UgYXNzZXJ0aW9uIHRvIGRlYnVnCisgICAg
ICAgIGFzc2VydGlvbiB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IGNyYXNoaW5nIHRoZSBHUFVQLCBh
bmQgaW5zdGVhZCByZXR1cm4KKyAgICAgICAgZWFybHkgaW4gdGhlIHByZXNlbmNlIG9mIHRoZXNl
IGdseXBocy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29yZVRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b3RTVkdUYWJsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM6OmNyZWF0ZVdpdGhO
b1JlbGV2YW50VGFibGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXhDb2xvckZv
cm1hdEdseXBoczo6Y3JlYXRlV2l0aFJlbGV2YW50VGFibGVzQW5kR2x5cGhDb3VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHM6Omhhc1ZhbHVlRm9y
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEdseXBo
czo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OkNvbXBsZXhDb2xvckZvcm1h
dEdseXBoczo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Omhhc0NvbXBsZXhDb2xvckZv
cm1hdFRhYmxlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpnbHlwaHNXaXRoQ29t
cGxleENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmdseXBoSGFz
Q29tcGxleENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZpbmRP
VFNWR0dseXBocyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpoYXNBbnlDb21wbGV4
Q29sb3JGb3JtYXRHbHlwaHMgY29uc3QpOiBOZXcgZnVuY3Rpb24gdG8KKyAgICAgICAgY2hlY2sg
aWYgYSBsaXN0IG9mIGdseXBoIElEcyBoYXMgYW55IHRoYXQgd291bGQgYmUgaW5hcHByb3ByaWF0
ZQorICAgICAgICB0byByZW5kZXIgaW4gdGhlIEdQVSBwcm9jZXNzLiBTaW5jZSBjYWxsaW5nIHRo
ZSBDb3JlVGV4dCBmdW5jdGlvbiB0aGF0CisgICAgICAgIGFsbG93cyB1cyB0byBjaGVjayBpZiBh
biBzYml4IGdseXBoIGV4aXN0cyB3b3VsZCBiZSB0b28gZXhwZW5zaXZlIHRvCisgICAgICAgIGNh
bGwgZm9yIGV2ZXJ5IGRyYXdHbHlwaHMgY2FsbCwgd2UgbGF6aWx5IGNhY2hlIChpbiBhIEJpdFZl
Y3RvcikgdGhlCisgICAgICAgIHByZXNlbmNlIG9mIHNiaXggYW5kIFNWRyBpbWFnZXMgZm9yIGds
eXBoIElEcyB3ZSBjaGVjay4KKwogMjAyMS0wNS0yNSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9y
aS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBSZW5hbWUgSW1hZ2VCdWZmZXI6OnRyYW5zZm9y
bUNvbG9yU3BhY2UgdG8gdHJhbnNmb3JtVG9Db2xvclNwYWNlLCBhbmQgaXQgc2hvdWxkIHRha2Ug
YSBzaW5nbGUgYXJndW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IGYwMGQ1NWNlYmFlYWRhZTA3
ZDJiMjg0YjA5MmEwM2VmYTM2NDdmN2IuLjQwNzA4MTI1YWJmYTNkZWVjOTVlNjhmNDZjOTNkNzVj
NzUwYmQ4ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA1LTIy
ICBDYW1lcm9uIE1jQ29ybWFjayAgPGhleWNhbUBhcHBsZS5jb20+CisKKyAgICAgICAgUHJldmVu
dCBzYml4IGdseXBocyBmcm9tIGJlaW5nIHJlbmRlcmVkIGluIHRoZSBHUFUgcHJvY2VzcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTU5CisgICAg
ICAgIDxyZGFyOi8vNzcyMzE5NTk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CisKKyAgICAgICAgKiBwYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmg6IEFkZCBkZWNsYXJhdGlvbiBm
b3IgYW4gU1BJIHRoYXQgbGV0cyB1cworICAgICAgICBpbmZlciB3aGV0aGVyIGEgZ2x5cGggaGFz
IGFuIHNiaXggaW1hZ2UuCisKIDIwMjEtMDUtMjQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUu
Y29tPgogCiAgICAgICAgIENvbnZlcnQgRGVzdGluYXRpb25Db2xvclNwYWNlIGZyb20gYW4gZW51
bSB0byBjbGFzcyB3cmFwcGluZyBhIHBsYXRmb3JtIGNvbG9yIHNwYWNlIChDR0NvbG9yU3BhY2VS
ZWYgZm9yIENHIHBvcnRzLCBldGMuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZv
cm1IYXZlLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaAppbmRleCAyMzEzZGJmY2Iz
OTY4NzdiNjI2NWYzNDEwZGUxNzNmNzkyNTFlNThkLi40M2JmNGYwYjE3YzBlOWFjNDdiNTA3YWJl
ZmY4ZDE3ZTRkOWZmODY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUhhdmUuaApAQCAtOTkyLDMgKzk5MiwxMSBA
QAogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiAhKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1Nf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxNTAwMDApCiAjZGVmaW5lIEhBVkVfU1lTVEVNX1NBTkRC
T1hFU19BTExPV0lOR19URVJNSU5BVEVfV0lUSF9SRUFTT04gMQogI2VuZGlmCisKKyNpZiAoUExB
VEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDExMDAwMCBc
CisgICAgfHwgKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTQwMDAwKSBcCisgICAgfHwgKFBMQVRGT1JNKFdBVENIT1MpICYmIF9fV0FUQ0hfT1Nf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gNzAwMDApIFwKKyAgICB8fCAoUExBVEZPUk0oQVBQTEVU
VikgJiYgX19UVl9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxNDAwMDApIFwKKyAgICB8fCAo
UExBVEZPUk0oTUFDQ0FUQUxZU1QpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDE0MDAwMCkpCisjZGVmaW5lIEhBVkVfQ09SRV9URVhUX1NCSVhfSU1BR0VfU0laRV9GVU5D
VElPTlMgMQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9j
Zi9Db3JlVGV4dFNQSS5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9zcGkvY2YvQ29yZVRleHRT
UEkuaAppbmRleCA5YTZhOGM5OTQ3NTg1YmNiOTE4YzRiZGIyMzU5YTU5MDljYTAzMTlmLi40OTA4
NjYzOThjNGI1MDQ1NDA5NGJiYTk0ZmU4MThkYWMzZWY4Y2RhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvcGFsL3NwaS9jZi9Db3JlVGV4dFNQSS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvc3BpL2NmL0NvcmVUZXh0U1BJLmgKQEAgLTIwMyw1ICsyMDMsNiBAQCBDVEZvbnRE
ZXNjcmlwdG9yUmVmIENURm9udENyZWF0ZVBoeXNpY2FsRm9udERlc2NyaXB0b3JGb3JDaGFyYWN0
ZXJzV2l0aExhbmd1YWdlKAogCiBib29sIENURm9udElzQXBwbGVDb2xvckVtb2ppKENURm9udFJl
Zik7CiBDVEZvbnRSZWYgQ1RGb250Q3JlYXRlRm9yQ2hhcmFjdGVycyhDVEZvbnRSZWYgY3VycmVu
dEZvbnQsIGNvbnN0IFVURjE2Q2hhciAqY2hhcmFjdGVycywgQ0ZJbmRleCBsZW5ndGgsIENGSW5k
ZXggKmNvdmVyZWRMZW5ndGgpOworQ0dGbG9hdCBDVEZvbnRHZXRTYml4SW1hZ2VTaXplRm9yR2x5
cGhBbmRDb250ZW50c1NjYWxlKENURm9udFJlZiwgY29uc3QgQ0dHbHlwaCwgQ0dGbG9hdCBjb250
ZW50c1NjYWxlKTsKIAogV1RGX0VYVEVSTl9DX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5oCmluZGV4IDc1ZjY0NmJmZDBjMzg1ZTBhNDNiYmI2MWU2NzcyYTQ4MWEwOTY2
YWUuLmYyNDk3N2ZmZmIwNzBlMWFjM2FlNjNmYWJkZGNiMTg0YTQ3NGI4ZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAgLTIyMyw2ICsyMjMsOCBAQCBwdWJsaWM6
CiAgICAgLy8gUmV0dXJucyBudWxsb3B0IGlmIG5vbmUgb2YgdGhlIGdseXBocyBhcmUgT1QtU1ZH
IGdseXBocy4KICAgICBPcHRpb25hbDxCaXRWZWN0b3I+IGZpbmRPVFNWR0dseXBocyhjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiwgdW5zaWduZWQgY291bnQpIGNvbnN0OwogCisgICAgYm9vbCBoYXNB
bnlDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHMoY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIHVuc2ln
bmVkIGNvdW50KSBjb25zdDsKKwogI2lmIFBMQVRGT1JNKFdJTikKICAgICBTQ1JJUFRfRk9OVFBS
T1BFUlRJRVMqIHNjcmlwdEZvbnRQcm9wZXJ0aWVzKCkgY29uc3Q7CiAgICAgU0NSSVBUX0NBQ0hF
KiBzY3JpcHRDYWNoZSgpIGNvbnN0IHsgcmV0dXJuICZtX3NjcmlwdENhY2hlOyB9CkBAIC0yNTcs
NiArMjU5LDM4IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgd2lkdGhGb3JHRElHbHlwaChHbHlwaCkg
Y29uc3Q7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGNsYXNzIENvbXBsZXhD
b2xvckZvcm1hdEdseXBocyB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgQ29tcGxleENv
bG9yRm9ybWF0R2x5cGhzIGNyZWF0ZVdpdGhOb1JlbGV2YW50VGFibGVzKCk7CisgICAgICAgIHN0
YXRpYyBDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHMgY3JlYXRlV2l0aFJlbGV2YW50VGFibGVzQW5k
R2x5cGhDb3VudCh1bnNpZ25lZCBnbHlwaENvdW50KTsKKworICAgICAgICBib29sIGhhc1ZhbHVl
Rm9yKEdseXBoKSBjb25zdDsKKyAgICAgICAgYm9vbCBnZXQoR2x5cGgpIGNvbnN0OworICAgICAg
ICB2b2lkIHNldChHbHlwaCwgYm9vbCB2YWx1ZSk7CisKKyAgICAgICAgYm9vbCBoYXNSZWxldmFu
dFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmVsZXZhbnRUYWJsZXM7IH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGJpdEZvckluaXRpYWxpemVk
KEdseXBoIGdseXBoSUQpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oZ2x5cGhJRCkgKiAy
OyB9CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGJpdEZvclZhbHVlKEdseXBoIGds
eXBoSUQpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oZ2x5cGhJRCkgKiAyICsgMTsgfQor
ICAgICAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBiaXRzUmVxdWlyZWRGb3JHbHlwaENvdW50
KHVuc2lnbmVkIGdseXBoQ291bnQpIHsgcmV0dXJuIGdseXBoQ291bnQgKiAyOyB9CisKKyAgICAg
ICAgQ29tcGxleENvbG9yRm9ybWF0R2x5cGhzKGJvb2wgaGFzUmVsZXZhbnRUYWJsZXMsIHVuc2ln
bmVkIGdseXBoQ291bnQpCisgICAgICAgICAgICA6IG1faGFzUmVsZXZhbnRUYWJsZXMoaGFzUmVs
ZXZhbnRUYWJsZXMpCisgICAgICAgICAgICAsIG1fYml0cyhiaXRzUmVxdWlyZWRGb3JHbHlwaENv
dW50KGdseXBoQ291bnQpKQorICAgICAgICB7IH0KKworICAgICAgICBib29sIG1faGFzUmVsZXZh
bnRUYWJsZXM7CisgICAgICAgIEJpdFZlY3RvciBtX2JpdHM7IC8vIHBhaXJzIG9mIChpbml0aWFs
aXplZCwgdmFsdWUpIGJpdHMKKyAgICB9OworCisgICAgY29uc3QgUEFMOjpPVFNWR1RhYmxlJiBv
dFNWR1RhYmxlKCkgY29uc3Q7CisgICAgYm9vbCBnbHlwaEhhc0NvbXBsZXhDb2xvckZvcm1hdChH
bHlwaCkgY29uc3Q7CisgICAgYm9vbCBoYXNDb21wbGV4Q29sb3JGb3JtYXRUYWJsZXMoKSBjb25z
dDsKKyAgICBDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHMmIGdseXBoc1dpdGhDb21wbGV4Q29sb3JG
b3JtYXQoKSBjb25zdDsKKyNlbmRpZgorCiAgICAgRm9udE1ldHJpY3MgbV9mb250TWV0cmljczsK
ICAgICBmbG9hdCBtX21heENoYXJXaWR0aCB7IC0xIH07CiAgICAgZmxvYXQgbV9hdmdDaGFyV2lk
dGggeyAtMSB9OwpAQCAtMjk4LDYgKzMzMiw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBPcHRp
b25hbDxCaXRWZWN0b3I+IG1fZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzOwogICAgIG11dGFi
bGUgT3B0aW9uYWw8Qml0VmVjdG9yPiBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwczsK
ICAgICBtdXRhYmxlIE9wdGlvbmFsPFBBTDo6T1RTVkdUYWJsZT4gbV9vdFNWR1RhYmxlOworICAg
IG11dGFibGUgT3B0aW9uYWw8Q29tcGxleENvbG9yRm9ybWF0R2x5cGhzPiBtX2dseXBoc1dpdGhD
b21wbGV4Q29sb3JGb3JtYXQ7IC8vIFNWRyBhbmQgc2JpeAogI2VuZGlmCiAKICNpZiBQTEFURk9S
TShXSU4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
dGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCmluZGV4IDZmZjAwYmZiZDU0
YTJiOGExOGVlYzA1ODQ5MDc5MzU0YzAyMTJkYjAuLjc1NTdkMGFjZTQ0Y2JlM2MzZGE5NTcxZTZl
ZWU4ZjZhNDA2OTYyZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCkBAIC0x
OTAsOSArMTkwLDEyIEBAIHZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHCiAgICAgaWYgKCFwbGF0Zm9y
bURhdGEuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDR0NvbnRleHRSZWYgY2dDb250
ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBpZiAoaXNJbkdQVVByb2Nlc3Mo
KSAmJiBmb250Lmhhc0FueUNvbXBsZXhDb2xvckZvcm1hdEdseXBocyhnbHlwaHMsIG51bUdseXBo
cykpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNJbkdQVVByb2Nlc3MoKSB8fCAhZm9udC5maW5k
T1RTVkdHbHlwaHMoZ2x5cGhzLCBudW1HbHlwaHMpKTsKKyAgICBDR0NvbnRleHRSZWYgY2dDb250
ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIGJvb2wgc2hvdWxkQW50aWFs
aWFzID0gdHJ1ZTsKICAgICBib29sIHNob3VsZFNtb290aEZvbnRzID0gdHJ1ZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb3JldGV4dC9Gb250Q29y
ZVRleHQuY3BwCmluZGV4IGVmODZlNGMzYzJiYmJhODc0NmUyNDFlNDM1MWU3ODBlNzQzM2QzMTYu
LmY4MjM4MTExYjRkM2I1NmUzYjRhOGY3NWU5NmM1ODdmNDkwZWIxZDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRDb3JlVGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQvRm9udENvcmVU
ZXh0LmNwcApAQCAtNzc1LDIyICs3NzUsMTAzIEBAIGJvb2wgRm9udDo6aXNQcm9iYWJseU9ubHlV
c2VkVG9SZW5kZXJJY29ucygpIGNvbnN0CiAgICAgfSk7CiB9CiAKLU9wdGlvbmFsPEJpdFZlY3Rv
cj4gRm9udDo6ZmluZE9UU1ZHR2x5cGhzKGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywg
dW5zaWduZWQgY291bnQpIGNvbnN0Ci17CiAjaWYgUExBVEZPUk0oQ09DT0EpCitjb25zdCBQQUw6
Ok9UU1ZHVGFibGUmIEZvbnQ6Om90U1ZHVGFibGUoKSBjb25zdAorewogICAgIGlmICghbV9vdFNW
R1RhYmxlKSB7CiAgICAgICAgIGlmIChhdXRvIHRhYmxlRGF0YSA9IGFkb3B0Q0YoQ1RGb250Q29w
eVRhYmxlKHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBrQ1RGb250VGFibGVTVkcsIGtDVEZvbnRU
YWJsZU9wdGlvbk5vT3B0aW9ucykpKQogICAgICAgICAgICAgbV9vdFNWR1RhYmxlID0gUEFMOjpP
VFNWR1RhYmxlKHRhYmxlRGF0YS5nZXQoKSwgZm9udE1ldHJpY3MoKS51bml0c1BlckVtKCksIHBs
YXRmb3JtRGF0YSgpLnNpemUoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fb3RTVkdU
YWJsZSA9IHt7IH19OwogICAgIH0KKyAgICByZXR1cm4gbV9vdFNWR1RhYmxlLnZhbHVlKCk7Cit9
CisKK0ZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEdseXBocyBGb250OjpDb21wbGV4Q29sb3JGb3Jt
YXRHbHlwaHM6OmNyZWF0ZVdpdGhOb1JlbGV2YW50VGFibGVzKCkKK3sKKyAgICByZXR1cm4geyBm
YWxzZSwgMCB9OworfQorCitGb250OjpDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHMgRm9udDo6Q29t
cGxleENvbG9yRm9ybWF0R2x5cGhzOjpjcmVhdGVXaXRoUmVsZXZhbnRUYWJsZXNBbmRHbHlwaENv
dW50KHVuc2lnbmVkIGdseXBoQ291bnQpCit7CisgICAgcmV0dXJuIHsgdHJ1ZSwgZ2x5cGhDb3Vu
dCB9OworfQorCitib29sIEZvbnQ6OkNvbXBsZXhDb2xvckZvcm1hdEdseXBoczo6aGFzVmFsdWVG
b3IoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYml0cy5jb250YWlucyhiaXRG
b3JJbml0aWFsaXplZChnbHlwaCkpOworfQorCitib29sIEZvbnQ6OkNvbXBsZXhDb2xvckZvcm1h
dEdseXBoczo6Z2V0KEdseXBoIGdseXBoKSBjb25zdAoreworICAgIEFTU0VSVChoYXNWYWx1ZUZv
cihnbHlwaCkpOworICAgIHJldHVybiBtX2JpdHMuY29udGFpbnMoYml0Rm9yVmFsdWUoZ2x5cGgp
KTsKK30KIAotICAgIGlmICghUEFMOjppc09UU1ZHRnJhbWV3b3JrQXZhaWxhYmxlKCkgfHwgIW1f
b3RTVkdUYWJsZS52YWx1ZSgpLnRhYmxlKQordm9pZCBGb250OjpDb21wbGV4Q29sb3JGb3JtYXRH
bHlwaHM6OnNldChHbHlwaCBnbHlwaCwgYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV9oYXNS
ZWxldmFudFRhYmxlcyk7CisgICAgQVNTRVJUKCFoYXNWYWx1ZUZvcihnbHlwaCkpOworICAgIG1f
Yml0cy5zZXQoYml0Rm9ySW5pdGlhbGl6ZWQoZ2x5cGgpKTsKKyAgICBpZiAodmFsdWUpCisgICAg
ICAgIG1fYml0cy5zZXQoYml0Rm9yVmFsdWUoZ2x5cGgpKTsKK30KKworYm9vbCBGb250OjpoYXND
b21wbGV4Q29sb3JGb3JtYXRUYWJsZXMoKSBjb25zdAoreworICAgIGlmIChvdFNWR1RhYmxlKCku
dGFibGUpCisgICAgICAgIHJldHVybiB0cnVlOworCisjaWYgSEFWRShDT1JFX1RFWFRfU0JJWF9J
TUFHRV9TSVpFX0ZVTkNUSU9OUykKKyAgICBpZiAoYXV0byBzYml4VGFibGVEYXRhID0gYWRvcHRD
RihDVEZvbnRDb3B5VGFibGUocGxhdGZvcm1EYXRhKCkuY3RGb250KCksIGtDVEZvbnRUYWJsZVNi
aXgsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyNlbmRpZgorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitGb250OjpDb21wbGV4Q29sb3JGb3Jt
YXRHbHlwaHMmIEZvbnQ6OmdseXBoc1dpdGhDb21wbGV4Q29sb3JGb3JtYXQoKSBjb25zdAorewor
ICAgIGlmICghbV9nbHlwaHNXaXRoQ29tcGxleENvbG9yRm9ybWF0KSB7CisgICAgICAgIGlmICho
YXNDb21wbGV4Q29sb3JGb3JtYXRUYWJsZXMoKSkgeworICAgICAgICAgICAgQ0ZJbmRleCBnbHlw
aENvdW50ID0gQ1RGb250R2V0R2x5cGhDb3VudChnZXRDVEZvbnQoKSk7CisgICAgICAgICAgICBp
ZiAoZ2x5cGhDb3VudCA+PSAwKSB7CisgICAgICAgICAgICAgICAgbV9nbHlwaHNXaXRoQ29tcGxl
eENvbG9yRm9ybWF0ID0gQ29tcGxleENvbG9yRm9ybWF0R2x5cGhzOjpjcmVhdGVXaXRoUmVsZXZh
bnRUYWJsZXNBbmRHbHlwaENvdW50KGdseXBoQ291bnQpOworICAgICAgICAgICAgICAgIHJldHVy
biBtX2dseXBoc1dpdGhDb21wbGV4Q29sb3JGb3JtYXQudmFsdWUoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBtX2dseXBoc1dpdGhDb21wbGV4Q29sb3JGb3JtYXQgPSBD
b21wbGV4Q29sb3JGb3JtYXRHbHlwaHM6OmNyZWF0ZVdpdGhOb1JlbGV2YW50VGFibGVzKCk7Cisg
ICAgcmV0dXJuIG1fZ2x5cGhzV2l0aENvbXBsZXhDb2xvckZvcm1hdC52YWx1ZSgpOworfQorCiti
b29sIEZvbnQ6OmdseXBoSGFzQ29tcGxleENvbG9yRm9ybWF0KEdseXBoIGdseXBoSUQpIGNvbnN0
Cit7CisgICAgaWYgKGF1dG8gc3ZnVGFibGUgPSBvdFNWR1RhYmxlKCkudGFibGUpIHsKKyAgICAg
ICAgaWYgKFBBTDo6c29mdExpbmtPVFNWR09UU1ZHVGFibGVHZXREb2N1bWVudEluZGV4Rm9yR2x5
cGgoc3ZnVGFibGUsIGdseXBoSUQpICE9IGtDRk5vdEZvdW5kKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisjaWYgSEFWRShDT1JFX1RFWFRfU0JJWF9JTUFHRV9TSVpFX0ZVTkNU
SU9OUykKKyAgICAvLyBUaGVyZSdzIG5vIGZ1bmN0aW9uIHRvIGRpcmVjdGx5IGxvb2sgdXAgdGhl
IHNiaXggdGFibGUsIHNvIHVzZSB0aGUgZmFjdCB0aGF0IHRoaXMgb25lIHJldHVybnMgYSBub24t
emVybyB2YWx1ZSBpZmYgdGhlcmUncyBhbiBzYml4IGVudHJ5LgorICAgIGlmIChDVEZvbnRHZXRT
Yml4SW1hZ2VTaXplRm9yR2x5cGhBbmRDb250ZW50c1NjYWxlKGdldENURm9udCgpLCBnbHlwaElE
LCAwKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKworICAgIHJldHVybiBmYWxzZTsK
K30KKyNlbmRpZgorCitPcHRpb25hbDxCaXRWZWN0b3I+IEZvbnQ6OmZpbmRPVFNWR0dseXBocyhj
b25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIHVuc2lnbmVkIGNvdW50KSBjb25zdAorewor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGF1dG8gdGFibGUgPSBvdFNWR1RhYmxlKCkudGFibGU7
CisgICAgaWYgKCF0YWJsZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIE9wdGlvbmFsPEJp
dFZlY3Rvcj4gcmVzdWx0OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7Ci0gICAgICAgIGlmIChQQUw6OnNvZnRMaW5rT1RTVkdPVFNWR1RhYmxlR2V0RG9jdW1lbnRJ
bmRleEZvckdseXBoKG1fb3RTVkdUYWJsZS52YWx1ZSgpLnRhYmxlLCBnbHlwaHNbaV0pICE9IGtD
Rk5vdEZvdW5kKSB7CisgICAgICAgIGlmIChQQUw6OnNvZnRMaW5rT1RTVkdPVFNWR1RhYmxlR2V0
RG9jdW1lbnRJbmRleEZvckdseXBoKHRhYmxlLCBnbHlwaHNbaV0pICE9IGtDRk5vdEZvdW5kKSB7
CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBCaXRW
ZWN0b3IoY291bnQpOwogICAgICAgICAgICAgcmVzdWx0LnZhbHVlKCkucXVpY2tTZXQoaSk7CkBA
IC04MDQsNCArODg1LDI2IEBAIE9wdGlvbmFsPEJpdFZlY3Rvcj4gRm9udDo6ZmluZE9UU1ZHR2x5
cGhzKGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgdW5zaWduCiAjZW5kaWYKIH0KIAor
Ym9vbCBGb250OjpoYXNBbnlDb21wbGV4Q29sb3JGb3JtYXRHbHlwaHMoY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCB1bnNpZ25lZCBjb3VudCkgY29uc3QKK3sKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICBhdXRvJiBjb21wbGV4R2x5cGhzID0gZ2x5cGhzV2l0aENvbXBsZXhDb2xvckZv
cm1hdCgpOworICAgIGlmICghY29tcGxleEdseXBocy5oYXNSZWxldmFudFRhYmxlcygpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgeworICAgICAgICBpZiAoIWNvbXBsZXhHbHlwaHMuaGFzVmFsdWVGb3IoZ2x5cGhzW2ld
KSkKKyAgICAgICAgICAgIGNvbXBsZXhHbHlwaHMuc2V0KGdseXBoc1tpXSwgZ2x5cGhIYXNDb21w
bGV4Q29sb3JGb3JtYXQoZ2x5cGhzW2ldKSk7CisKKyAgICAgICAgaWYgKGNvbXBsZXhHbHlwaHMu
Z2V0KGdseXBoc1tpXSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZ2x5cGhzKTsKKyAgICBVTlVTRURf
UEFSQU0oY291bnQpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>