<?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>137097</bug_id>
          
          <creation_ts>2014-09-24 17:29:09 -0700</creation_ts>
          <short_desc>[SVG -&gt; OTF Converter] Support non-BMP codepoints</short_desc>
          <delta_ts>2014-10-03 13:11:16 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>d-r</cc>
    
    <cc>fmalita</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jonlee</cc>
    
    <cc>pdr</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1037101</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-24 17:29:09 -0700</bug_when>
    <thetext>The following test fails because of this (when the SVG -&gt; OTF converter is turned on):

svg/custom/glyph-selection-non-bmp.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037729</commentid>
    <comment_count>1</comment_count>
      <attachid>238798</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-27 20:47:46 -0700</bug_when>
    <thetext>Created attachment 238798
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037790</commentid>
    <comment_count>2</comment_count>
      <attachid>238798</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-28 12:14:19 -0700</bug_when>
    <thetext>Comment on attachment 238798
Patch

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

&gt; Source/WebCore/ChangeLog:1
&gt; +2014-09-27  Myles C. Maxfield  &lt;litherum@gmail.com&gt;

Fix email address</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037792</commentid>
    <comment_count>3</comment_count>
      <attachid>238820</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-28 13:55:40 -0700</bug_when>
    <thetext>Created attachment 238820
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037800</commentid>
    <comment_count>4</comment_count>
      <attachid>238825</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-28 15:12:29 -0700</bug_when>
    <thetext>Created attachment 238825
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037820</commentid>
    <comment_count>5</comment_count>
      <attachid>238825</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-28 17:11:10 -0700</bug_when>
    <thetext>Comment on attachment 238825
Patch

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

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:949
&gt; +            codepoint2 = data1.codepoints[i2++];

data2.codepoints</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037837</commentid>
    <comment_count>6</comment_count>
      <attachid>238825</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-28 17:57:48 -0700</bug_when>
    <thetext>Comment on attachment 238825
Patch

Myles, are you going to review my tweaks to this file before landing all these additional changes? Or are you not reviewing because you are not a reviewer?

Code point is two words, not one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037856</commentid>
    <comment_count>7</comment_count>
      <attachid>238834</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-28 19:12:14 -0700</bug_when>
    <thetext>Created attachment 238834
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037861</commentid>
    <comment_count>8</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-09-28 19:19:57 -0700</bug_when>
    <thetext>Darin: Oh, whoops - I didn&apos;t realize there was more to review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039234</commentid>
    <comment_count>9</comment_count>
      <attachid>238834</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-10-03 09:33:58 -0700</bug_when>
    <thetext>Comment on attachment 238834
Patch

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

Has this been rebased after my changes? I think I see things that I thought I improved back in the old style.

I see a few problems but this seems OK to land.

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:43
&gt; +static inline void append32(Vector&lt;char&gt;&amp; result, uint32_t value)

Comment in change log makes it sound like you got rid of this, but it’s still here!

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:62
&gt; +    typedef String Codepoints;

I don’t think this typedef is a good abstraction. Should just use String directly.

It also seems a bis strange to use a string for this.

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:97
&gt; +    inline void append32(uint32_t value)

The keyword inline has no effect here in a class definition. Any functions defined in the class definition are implicitly treated as inline. I suggest either moving thereout of the class definition, or removing the redundant inline keywords.

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:108
&gt; +    inline void append4ByteCode(const char code[4])

Seems to me this could just be an overload of append32. I don’t think 4ByteCode adds any clarity. The only reason we include the size is to avoid accidentally writing the wrong amount of data. We should use the same terminology for appending 4 bytes in both cases, not arbitrarily call one 32 and the other 4Byte.

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:645
&gt; +            U16_APPEND(buffer, length, 2, codepoint, error);

Seems to me that U16_APPEND is overkill here; all the buffer length checking is pointless. But maybe it compiles to something efficient enough.

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:647
&gt; +                for (auto index : m_codepointsToIndicesMap.get(String(buffer, length)))

This is absurdly expensive, allocating and destroying a String for each code point.

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:939
&gt; +bool SVGToOTFFontConverter::compareCodepointsLexicographically(const GlyphData&amp; data1, const GlyphData&amp; data2)

Why is this a member function?

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:943
&gt; +    unsigned i1 = 0, i2 = 0;
&gt; +    UChar32 codepoint1, codepoint2;
&gt; +    unsigned length1 = data1.codepoints.length(), length2 = data2.codepoints.length();

We normally avoid doing these definitions two on a line like this in WebKit coding style.

I don’t understand why codepoint1 and codepoint2 are defined outside the loop.

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:944
&gt; +    for ( ; i1 &lt; length1 &amp;&amp; i2 &lt; length2; ) {

We should put the initialization in here or just use while instead of for.

&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:962
&gt; +        &amp;&amp; equalIgnoringCase(data1.glyphElement-&gt;fastGetAttribute(SVGNames::arabic_formAttr), String(&quot;isolated&quot;, String::ConstructFromLiteral)))

There is no need to construct a String just to call equalIgnoringCase. Or if there is, it&apos;s just a missing overload that should be added. Please remove the &quot;String/ConstructFromLiteral&quot; dance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039287</commentid>
    <comment_count>10</comment_count>
      <attachid>238834</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-10-03 12:14:46 -0700</bug_when>
    <thetext>Comment on attachment 238834
Patch

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

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:43
&gt;&gt; +static inline void append32(Vector&lt;char&gt;&amp; result, uint32_t value)
&gt; 
&gt; Comment in change log makes it sound like you got rid of this, but it’s still here!

This is for CFFBuilder. I&apos;ve updated the ChangeLog. Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:62
&gt;&gt; +    typedef String Codepoints;
&gt; 
&gt; I don’t think this typedef is a good abstraction. Should just use String directly.
&gt; 
&gt; It also seems a bis strange to use a string for this.

Done.

Do you think I should use Vector&lt;UChar32&gt; instead? I&apos;ll keep String for now but I can always change it before it gets turned on.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:97
&gt;&gt; +    inline void append32(uint32_t value)
&gt; 
&gt; The keyword inline has no effect here in a class definition. Any functions defined in the class definition are implicitly treated as inline. I suggest either moving thereout of the class definition, or removing the redundant inline keywords.

Ah, good to know! I&apos;ll remove the keyword. Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:108
&gt;&gt; +    inline void append4ByteCode(const char code[4])
&gt; 
&gt; Seems to me this could just be an overload of append32. I don’t think 4ByteCode adds any clarity. The only reason we include the size is to avoid accidentally writing the wrong amount of data. We should use the same terminology for appending 4 bytes in both cases, not arbitrarily call one 32 and the other 4Byte.

Turns out that this leads to ambiguous calls such as &quot;append32(0)&quot;. I&apos;ll rename this to append32BitCode(). Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:645
&gt;&gt; +            U16_APPEND(buffer, length, 2, codepoint, error);
&gt; 
&gt; Seems to me that U16_APPEND is overkill here; all the buffer length checking is pointless. But maybe it compiles to something efficient enough.

Given that length will always be 0 and capacity will always be 2, the compiler should be able to optimize out the check.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:647
&gt;&gt; +                for (auto index : m_codepointsToIndicesMap.get(String(buffer, length)))
&gt; 
&gt; This is absurdly expensive, allocating and destroying a String for each code point.

I&apos;ll make a bug about this - I&apos;m thinking about making another data structure that remembers code points as UChar32 instead of Strings. https://bugs.webkit.org/show_bug.cgi?id=137395 Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:939
&gt;&gt; +bool SVGToOTFFontConverter::compareCodepointsLexicographically(const GlyphData&amp; data1, const GlyphData&amp; data2)
&gt; 
&gt; Why is this a member function?

GlyphData is a private member of SVGToOTFFontConverter

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:943
&gt;&gt; +    unsigned length1 = data1.codepoints.length(), length2 = data2.codepoints.length();
&gt; 
&gt; We normally avoid doing these definitions two on a line like this in WebKit coding style.
&gt; 
&gt; I don’t understand why codepoint1 and codepoint2 are defined outside the loop.

Done.

Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:944
&gt;&gt; +    for ( ; i1 &lt; length1 &amp;&amp; i2 &lt; length2; ) {
&gt; 
&gt; We should put the initialization in here or just use while instead of for.

Done.

&gt;&gt; Source/WebCore/svg/SVGToOTFFontConversion.cpp:962
&gt;&gt; +        &amp;&amp; equalIgnoringCase(data1.glyphElement-&gt;fastGetAttribute(SVGNames::arabic_formAttr), String(&quot;isolated&quot;, String::ConstructFromLiteral)))
&gt; 
&gt; There is no need to construct a String just to call equalIgnoringCase. Or if there is, it&apos;s just a missing overload that should be added. Please remove the &quot;String/ConstructFromLiteral&quot; dance.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039307</commentid>
    <comment_count>11</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-10-03 13:11:16 -0700</bug_when>
    <thetext>https://trac.webkit.org/r174271</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238798</attachid>
            <date>2014-09-27 20:47:46 -0700</date>
            <delta_ts>2014-09-28 13:55:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137097-20140927204747.patch</filename>
            <type>text/plain</type>
            <size>61713</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczOTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDNkMjc0YmY1N2I4ODg3
N2MxNWMzMWUzMzQzZjMwYWFjNjk5ZDA1Yy4uOWMyNjg5NTdiOGI5NDNlMDdjYWY0MTcwOTZkZmIy
NTYxMDM2Y2E1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDE0LTA5LTI3ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPGxpdGhlcnVtQGdtYWlsLmNvbT4KKworICAgICAgICBbU1ZHIC0+IE9U
RiBDb252ZXJ0ZXJdIFN1cHBvcnQgbm9uLUJNUCBjb2RlcG9pbnRzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwOTcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGhhcyB0d28gcGllY2Vz
OgorCisgICAgICAgIDEpIE1vdmVzIHdyaXRlMzIoKSwgd3JpdGUxNigpLCBvdmVyd3JpdGUzMigp
IGFuZCBvdmVyd3JpdGUxNigpIGluc2lkZSBTVkdUb09URkZvbnRDb252ZXJ0ZXIuCisgICAgICAg
IFRoaXMgaXMgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGtlZXAgcGFzc2luZyBhcm91bmQgcmVm
ZXJlbmNlcyB0byBtX3Jlc3VsdCBldmVyeXdoZXJlLgorICAgICAgICBJbnN0ZWFkLCBwdXQgdGhl
IG91dHB1dCB2ZWN0b3IgaW5zaWRlIHRoZSBjbGFzcyBhcyBhbiBpbnN0YW5jZSBtZW1iZXIgdmFy
aWFibGUuIEluIGFkZGl0aW9uLAorICAgICAgICByZW5hbWUgd3JpdGUzMigpIGFuZCB3cml0ZTE2
KCkgdG8gYXBwZW5kMzIoKSBhbmQgYXBwZW5kMTYoKS4KKworICAgICAgICAyKSBDaGFuZ2UgdGhl
ICJDb2RlcG9pbnQiIHR5cGVkZWYgdG8gYmUgYSBTdHJpbmcsIGFuZCByZW5hbWUgaXQgdG8gQ29k
ZXBvaW50cy4gVGhpcyBpcyBzbyB0aGF0CisgICAgICAgIHdlIGNhbiBpbXBsZW1lbnQgbGlnYXR1
cmVzIGxhdGVyIG9uLiBVcGRhdGUgYWxsIHRoZSBwbGFjZXMgdGhhdCB1c2UgdGhpcyB2YXJpYWJs
ZSB0byB3b3JrIHdpdGgKKyAgICAgICAgYSBTdHJpbmcgb2YgbXVsdGlwbGUgY29kZXBvaW50cy4K
KworICAgICAgICBUaGUgQ01BUCB0YWJsZSBjdXJyZW50bHkgb25seSBtYXBzIHNpbmdsZSBjb2Rl
cG9pbnRzIHRvIGdseXBoIElEcyBhbmQgc2tpcHMgYWxsCisgICAgICAgIG11bHRpLWNvZGVwb2lu
dCBnbHlwaHMuIFdlIHdpbGwgaW1wbGVtZW50IGxpZ2F0dXJlcyBpbiBhbm90aGVyIHBhdGNoLgor
CisgICAgICAgIFRlc3Q6IHN2Zy9jdXN0b20vZ2x5cGgtc2VsZWN0aW9uLW5vbi1ibXAuc3ZnCisK
KyAgICAgICAgKiBzdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjphcHBlbmQzMik6IEFwcGVuZCBhIHJlc3VsdCB0byBhIGdpdmVuIHZlY3Rvci4gVGhpcyBp
cyBmb3IgdGhlIHBhdGggdHJhbnNjb2Rlci4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9u
dENvbnZlcnRlcjo6cmVsZWFzZVJlc3VsdCk6IFdURjo6bW92ZSgpJ3MgdGhlIHJlc3VsdC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6R2x5cGhEYXRhOjpHbHlwaERh
dGEpOiBVcGRhdGUgdG8gdGFrZSBDb2RlcG9pbnRzIGluc3RlYWQgb2YgQ29kZXBvaW50LgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmQzMik6IFBpZWNlIDEg
YWJvdmUuCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZDE2
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVu
ZDRCeXRlQ29kZSk6IENvbnZlbmllbmNlIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VG9PVEZGb250Q29udmVydGVyOjpvdmVyd3JpdGUzMik6IFBpZWNlIDEgYWJvdmUuCisgICAgICAg
IChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6Om92ZXJ3cml0ZTE2KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZENNQVBUYWJsZSk6
IFBhc3NpbmcgaW4gYSByZXN1bHQgdmVjdG9yIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEhFQURUYWJsZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRISEVB
VGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6
YXBwZW5kSE1UWFRhYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRD
b252ZXJ0ZXI6OmFwcGVuZE1BWFBUYWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VG9PVEZGb250Q29udmVydGVyOjphcHBlbmROQU1FVGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kT1MyVGFibGUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kUE9TVFRhYmxlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc1ZhbGlkU3RyaW5nRm9yQ0ZGKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZENGRlZhbGlkU3Ry
aW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFw
cGVuZENGRlRhYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252
ZXJ0ZXI6OmFwcGVuZFZPUkdUYWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9P
VEZGb250Q29udmVydGVyOjphcHBlbmRWSEVBVGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kVk1UWFRhYmxlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZENvZGVwb2ludFJhbmdlcyk6
IFVwZGF0ZSBmb3IgQ29kZXBvaW50cy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENv
bnZlcnRlcjo6YWRkQ29kZXBvaW50cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9P
VEZGb250Q29udmVydGVyOjphZGRHbHlwaE5hbWVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEtFUk5TdWJ0YWJsZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRLRVJOVGFibGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlQ0ZGRW5jb2RlZE51bWJlcik6IFBhc3Npbmcg
aW4gYSByZXN1bHQgdmVjdG9yIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkuCisgICAgICAgIChXZWJD
b3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEdseXBoRGF0YSk6IFVwZGF0ZSBmb3Ig
Q29kZXBvaW50cy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6cHJv
Y2Vzc0dseXBoRWxlbWVudCk6IFVwZGF0ZSBmb3IgQ29kZXBvaW50cy4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6Y29tcGFyZUNvZGVwb2ludHNMZXhpY29ncmFwaGlj
YWxseSk6IENvbXBhcmluZyBDb2RlcG9pbnRzCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZv
bnRDb252ZXJ0ZXI6OlNWR1RvT1RGRm9udENvbnZlcnRlcik6IFVwZGF0ZSBmb3IgQ29kZXBvaW50
cy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6Y2FsY3VsYXRlQ2hl
Y2tzdW0pOiBQYXNzaW5nIGluIGEgcmVzdWx0IHZlY3RvciBpcyBubyBsb25nZXIgbmVjZXNzYXJ5
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRUYWJsZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjpjb252ZXJ0
U1ZHVG9PVEZGb250KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0U1ZHVG9PVEZG
b250KTogTW92ZSBvdXQgb2YgdGhlIHJlc3VsdCB2ZWN0b3IuCisgICAgICAgIChXZWJDb3JlOjp3
cml0ZTMyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlMTYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6b3ZlcndyaXRlMzIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6YXBwZW5kQ0ZGVmFsaWRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dHJh
bnNjb2RlR2x5cGhQYXRocyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVD
aGVja3N1bSk6IERlbGV0ZWQuCisKIDIwMTQtMDktMjUgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNz
Lndhc2hpbmd0b24uZWR1PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEZ1bmN0aW9uQ2FsbCB0
aW1lbGluZSByZWNvcmRzIG9taXQgcHJvZmlsZSBkYXRhIGlmIHRoZSBkZWJ1Z2dlciBoYXMgcGF1
c2VkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZGb250Q29udmVyc2lv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHAKaW5k
ZXggNWQwNjlhYzYyODMzNmIyMjk5NGZkYWJmOTUzYzQ0NzMyM2JkYmUxYy4uZWUwNGFkZmY1YzQ4
Y2Y1ZTY1NmE1ZjQ3NzIyNWM0OWVmM2U5MjZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdUb09URkZvbnRDb252ZXJzaW9uLmNwcApAQCAtNDAsNTMgKzQwLDQyIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlMzIoVmVjdG9yPGNoYXI+JiB2
ZWN0b3IsIHVpbnQzMl90IHZhbHVlKQorc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZDMyKFZlY3Rv
cjxjaGFyPiYgcmVzdWx0LCB1aW50MzJfdCB2YWx1ZSkKIHsKLSAgICB2ZWN0b3IuYXBwZW5kKHZh
bHVlID4+IDI0KTsKLSAgICB2ZWN0b3IuYXBwZW5kKHZhbHVlID4+IDE2KTsKLSAgICB2ZWN0b3Iu
YXBwZW5kKHZhbHVlID4+IDgpOwotICAgIHZlY3Rvci5hcHBlbmQodmFsdWUpOwotfQotCi1zdGF0
aWMgaW5saW5lIHZvaWQgd3JpdGUxNihWZWN0b3I8Y2hhcj4mIHZlY3RvciwgdWludDE2X3QgdmFs
dWUpCi17Ci0gICAgdmVjdG9yLmFwcGVuZCh2YWx1ZSA+PiA4KTsKLSAgICB2ZWN0b3IuYXBwZW5k
KHZhbHVlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG92ZXJ3cml0ZTMyKFZlY3RvcjxjaGFy
PiYgdmVjdG9yLCB1bnNpZ25lZCBsb2NhdGlvbiwgdWludDMyX3QgdmFsdWUpCi17Ci0gICAgQVNT
RVJUKHZlY3Rvci5zaXplKCkgPj0gbG9jYXRpb24gKyA0KTsKLSAgICAqKHZlY3Rvci5kYXRhKCkg
KyBsb2NhdGlvbikgPSB2YWx1ZSA+PiAyNDsKLSAgICAqKHZlY3Rvci5kYXRhKCkgKyBsb2NhdGlv
biArIDEpID0gdmFsdWUgPj4gMTY7Ci0gICAgKih2ZWN0b3IuZGF0YSgpICsgbG9jYXRpb24gKyAy
KSA9IHZhbHVlID4+IDg7Ci0gICAgKih2ZWN0b3IuZGF0YSgpICsgbG9jYXRpb24gKyAzKSA9IHZh
bHVlOworICAgIHJlc3VsdC5hcHBlbmQodmFsdWUgPj4gMjQpOworICAgIHJlc3VsdC5hcHBlbmQo
dmFsdWUgPj4gMTYpOworICAgIHJlc3VsdC5hcHBlbmQodmFsdWUgPj4gOCk7CisgICAgcmVzdWx0
LmFwcGVuZCh2YWx1ZSk7CiB9CiAKIGNsYXNzIFNWR1RvT1RGRm9udENvbnZlcnRlciB7CiBwdWJs
aWM6CiAgICAgU1ZHVG9PVEZGb250Q29udmVydGVyKGNvbnN0IFNWR0ZvbnRFbGVtZW50Jik7Ci0g
ICAgVmVjdG9yPGNoYXI+IGNvbnZlcnRTVkdUb09URkZvbnQoKTsKKyAgICB2b2lkIGNvbnZlcnRT
VkdUb09URkZvbnQoKTsKKworICAgIFZlY3RvcjxjaGFyPiByZWxlYXNlUmVzdWx0KCkKKyAgICB7
CisgICAgICAgIHJldHVybiBXVEY6Om1vdmUobV9yZXN1bHQpOworICAgIH0KIAogcHJpdmF0ZToK
LSAgICB0eXBlZGVmIHVpbnQxNl90IFNJRDsgLy8gU3RyaW5nIElECi0gICAgdHlwZWRlZiBVQ2hh
ciBDb2RlcG9pbnQ7IC8vIEZJWE1FOiBPbmx5IHN1cHBvcnQgQk1QIGZvciBub3cKKyAgICB0eXBl
ZGVmIFN0cmluZyBDb2RlcG9pbnRzOwogICAgIHN0cnVjdCBHbHlwaERhdGEgewotICAgICAgICBH
bHlwaERhdGEoVmVjdG9yPGNoYXI+IGNoYXJTdHJpbmcsIGNvbnN0IFNWR0dseXBoRWxlbWVudCog
Z2x5cGhFbGVtZW50LCBmbG9hdCBob3Jpem9udGFsQWR2YW5jZSwgZmxvYXQgdmVydGljYWxBZHZh
bmNlLCBGbG9hdFJlY3QgYm91bmRpbmdCb3gsIENvZGVwb2ludCBjb2RlcG9pbnQpCisgICAgICAg
IEdseXBoRGF0YShWZWN0b3I8Y2hhcj4gY2hhclN0cmluZywgY29uc3QgU1ZHR2x5cGhFbGVtZW50
KiBnbHlwaEVsZW1lbnQsIGZsb2F0IGhvcml6b250YWxBZHZhbmNlLCBmbG9hdCB2ZXJ0aWNhbEFk
dmFuY2UsIEZsb2F0UmVjdCBib3VuZGluZ0JveCwgY29uc3QgQ29kZXBvaW50cyYgY29kZXBvaW50
cykKICAgICAgICAgICAgIDogYm91bmRpbmdCb3goYm91bmRpbmdCb3gpCiAgICAgICAgICAgICAs
IGNoYXJTdHJpbmcoY2hhclN0cmluZykKKyAgICAgICAgICAgICwgY29kZXBvaW50cyhjb2RlcG9p
bnRzKQogICAgICAgICAgICAgLCBnbHlwaEVsZW1lbnQoZ2x5cGhFbGVtZW50KQogICAgICAgICAg
ICAgLCBob3Jpem9udGFsQWR2YW5jZShob3Jpem9udGFsQWR2YW5jZSkKICAgICAgICAgICAgICwg
dmVydGljYWxBZHZhbmNlKHZlcnRpY2FsQWR2YW5jZSkKLSAgICAgICAgICAgICwgY29kZXBvaW50
KGNvZGVwb2ludCkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIEZsb2F0UmVjdCBib3Vu
ZGluZ0JveDsKICAgICAgICAgVmVjdG9yPGNoYXI+IGNoYXJTdHJpbmc7CisgICAgICAgIENvZGVw
b2ludHMgY29kZXBvaW50czsKICAgICAgICAgY29uc3QgU1ZHR2x5cGhFbGVtZW50KiBnbHlwaEVs
ZW1lbnQ7CiAgICAgICAgIGZsb2F0IGhvcml6b250YWxBZHZhbmNlOwogICAgICAgICBmbG9hdCB2
ZXJ0aWNhbEFkdmFuY2U7Ci0gICAgICAgIENvZGVwb2ludCBjb2RlcG9pbnQ7CiAgICAgfTsKIAog
ICAgIHN0cnVjdCBLZXJuaW5nRGF0YSB7CkBAIC0xMDUsNDIgKzk0LDg2IEBAIHByaXZhdGU6CiAg
ICAgICAgIGludDE2X3QgYWRqdXN0bWVudDsKICAgICB9OwogCisgICAgaW5saW5lIHZvaWQgYXBw
ZW5kMzIodWludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBXZWJDb3JlOjphcHBlbmQzMiht
X3Jlc3VsdCwgdmFsdWUpOworICAgIH0KKworICAgIGlubGluZSB2b2lkIGFwcGVuZDE2KHVpbnQx
Nl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9yZXN1bHQuYXBwZW5kKHZhbHVlID4+IDgpOwor
ICAgICAgICBtX3Jlc3VsdC5hcHBlbmQodmFsdWUpOworICAgIH0KKworICAgIGlubGluZSB2b2lk
IGFwcGVuZDRCeXRlQ29kZShjb25zdCBjaGFyIGNvZGVbNF0pCisgICAgeworICAgICAgICBtX3Jl
c3VsdC5hcHBlbmQoY29kZVswXSk7CisgICAgICAgIG1fcmVzdWx0LmFwcGVuZChjb2RlWzFdKTsK
KyAgICAgICAgbV9yZXN1bHQuYXBwZW5kKGNvZGVbMl0pOworICAgICAgICBtX3Jlc3VsdC5hcHBl
bmQoY29kZVszXSk7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgb3ZlcndyaXRlMzIodW5zaWdu
ZWQgbG9jYXRpb24sIHVpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmVz
dWx0LnNpemUoKSA+PSBsb2NhdGlvbiArIDQpOworICAgICAgICBtX3Jlc3VsdFtsb2NhdGlvbl0g
PSB2YWx1ZSA+PiAyNDsKKyAgICAgICAgbV9yZXN1bHRbbG9jYXRpb24gKyAxXSA9IHZhbHVlID4+
IDE2OworICAgICAgICBtX3Jlc3VsdFtsb2NhdGlvbiArIDJdID0gdmFsdWUgPj4gODsKKyAgICAg
ICAgbV9yZXN1bHRbbG9jYXRpb24gKyAzXSA9IHZhbHVlOworICAgIH0KKworICAgIGlubGluZSB2
b2lkIG92ZXJ3cml0ZTE2KHVuc2lnbmVkIGxvY2F0aW9uLCB1aW50MTZfdCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX3Jlc3VsdC5zaXplKCkgPj0gbG9jYXRpb24gKyAyKTsKKyAgICAg
ICAgbV9yZXN1bHRbbG9jYXRpb25dID0gdmFsdWUgPj4gODsKKyAgICAgICAgbV9yZXN1bHRbbG9j
YXRpb24gKyAxXSA9IHZhbHVlOworICAgIH0KKwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga1NO
RlRIZWFkZXJTaXplID0gMTI7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrRGlyZWN0b3J5RW50
cnlTaXplID0gMTY7CiAKKyAgICB1aW50MzJfdCBjYWxjdWxhdGVDaGVja3N1bShzaXplX3Qgc3Rh
cnRpbmdPZmZzZXQsIHNpemVfdCBlbmRpbmdPZmZzZXQpIGNvbnN0OwogCiAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBhcHBlbmRHbHlwaERhdGEoY29uc3QgVmVjdG9yPGNoYXI+
JiBwYXRoLCBjb25zdCBUKiBlbGVtZW50LCBmbG9hdCBob3Jpem9udGFsQWR2YW5jZSwgZmxvYXQg
dmVydGljYWxBZHZhbmNlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBDb2RlcG9pbnQg
Y29kZXBvaW50KTsKKyAgICB2b2lkIGFwcGVuZEdseXBoRGF0YShjb25zdCBWZWN0b3I8Y2hhcj4m
IHBhdGgsIGNvbnN0IFQqIGVsZW1lbnQsIGZsb2F0IGhvcml6b250YWxBZHZhbmNlLCBmbG9hdCB2
ZXJ0aWNhbEFkdmFuY2UsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IENvZGVw
b2ludHMmKTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHByb2Nlc3NHbHlw
aEVsZW1lbnQoY29uc3QgVCYgZWxlbWVudCwgZmxvYXQgZGVmYXVsdEhvcml6b250YWxBZHZhbmNl
LCBmbG9hdCBkZWZhdWx0VmVydGljYWxBZHZhbmNlLCBDb2RlcG9pbnQsIGJvb2wmIGluaXRpYWxH
bHlwaCk7Ci0KLSAgICB0eXBlZGVmIHZvaWQgKFNWR1RvT1RGRm9udENvbnZlcnRlcjo6KkZvbnRB
cHBlbmRpbmdGdW5jdGlvbikoVmVjdG9yPGNoYXI+ICYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5k
VGFibGUoY29uc3QgY2hhciBpZGVudGlmaWVyWzRdLCBWZWN0b3I8Y2hhcj4mLCBGb250QXBwZW5k
aW5nRnVuY3Rpb24pOwotICAgIHZvaWQgYXBwZW5kQ01BUFRhYmxlKFZlY3RvcjxjaGFyPiYpIGNv
bnN0OwotICAgIHZvaWQgYXBwZW5kSEVBRFRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAg
IHZvaWQgYXBwZW5kSEhFQVRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBw
ZW5kSE1UWFRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kVkhFQVRh
YmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kVk1UWFRhYmxlKFZlY3Rv
cjxjaGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kS0VSTlRhYmxlKFZlY3RvcjxjaGFyPiYp
IGNvbnN0OwotICAgIHZvaWQgYXBwZW5kTUFYUFRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0Owot
ICAgIHZvaWQgYXBwZW5kTkFNRVRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAgIHZvaWQg
YXBwZW5kT1MyVGFibGUoVmVjdG9yPGNoYXI+JikgY29uc3Q7Ci0gICAgdm9pZCBhcHBlbmRQT1NU
VGFibGUoVmVjdG9yPGNoYXI+JikgY29uc3Q7Ci0gICAgdm9pZCBhcHBlbmRDRkZUYWJsZShWZWN0
b3I8Y2hhcj4mKSBjb25zdDsKLSAgICB2b2lkIGFwcGVuZFZPUkdUYWJsZShWZWN0b3I8Y2hhcj4m
KSBjb25zdDsKLQotICAgIHZvaWQgYWRkQ29kZXBvaW50UmFuZ2VzKGNvbnN0IFVuaWNvZGVSYW5n
ZXMmLCBIYXNoU2V0PHVpbnQxNl90PiYgZ2x5cGhTZXQpIGNvbnN0OwotICAgIHZvaWQgYWRkQ29k
ZXBvaW50cyhjb25zdCBIYXNoU2V0PFN0cmluZz4mIGNvZGVwb2ludHMsIEhhc2hTZXQ8dWludDE2
X3Q+JiBnbHlwaFNldCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRHbHlwaE5hbWVzKGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgZ2x5cGhOYW1lcywgSGFzaFNldDx1aW50MTZfdD4mIGdseXBoU2V0KSBjb25z
dDsKKyAgICB2b2lkIHByb2Nlc3NHbHlwaEVsZW1lbnQoY29uc3QgVCYgZWxlbWVudCwgZmxvYXQg
ZGVmYXVsdEhvcml6b250YWxBZHZhbmNlLCBmbG9hdCBkZWZhdWx0VmVydGljYWxBZHZhbmNlLCBj
b25zdCBDb2RlcG9pbnRzJiwgYm9vbCYgaW5pdGlhbEdseXBoKTsKKworICAgIHR5cGVkZWYgdm9p
ZCAoU1ZHVG9PVEZGb250Q29udmVydGVyOjoqRm9udEFwcGVuZGluZ0Z1bmN0aW9uKSgpOworICAg
IHZvaWQgYXBwZW5kVGFibGUoY29uc3QgY2hhciBpZGVudGlmaWVyWzRdLCBGb250QXBwZW5kaW5n
RnVuY3Rpb24pOworICAgIHZvaWQgYXBwZW5kQ01BUFRhYmxlKCk7CisgICAgdm9pZCBhcHBlbmRI
RUFEVGFibGUoKTsKKyAgICB2b2lkIGFwcGVuZEhIRUFUYWJsZSgpOworICAgIHZvaWQgYXBwZW5k
SE1UWFRhYmxlKCk7CisgICAgdm9pZCBhcHBlbmRWSEVBVGFibGUoKTsKKyAgICB2b2lkIGFwcGVu
ZFZNVFhUYWJsZSgpOworICAgIHZvaWQgYXBwZW5kS0VSTlRhYmxlKCk7CisgICAgdm9pZCBhcHBl
bmRNQVhQVGFibGUoKTsKKyAgICB2b2lkIGFwcGVuZE5BTUVUYWJsZSgpOworICAgIHZvaWQgYXBw
ZW5kT1MyVGFibGUoKTsKKyAgICB2b2lkIGFwcGVuZFBPU1RUYWJsZSgpOworICAgIHZvaWQgYXBw
ZW5kQ0ZGVGFibGUoKTsKKyAgICB2b2lkIGFwcGVuZFZPUkdUYWJsZSgpOworCisgICAgc3RhdGlj
IGJvb2wgY29tcGFyZUNvZGVwb2ludHNMZXhpY29ncmFwaGljYWxseShjb25zdCBHbHlwaERhdGEm
LCBjb25zdCBHbHlwaERhdGEmKTsKKworICAgIHZvaWQgYXBwZW5kQ0ZGVmFsaWRTdHJpbmcoY29u
c3QgU3RyaW5nJik7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBWZWN0b3I8Y2hh
cj4gdHJhbnNjb2RlR2x5cGhQYXRocyhmbG9hdCB3aWR0aCwgY29uc3QgVCYgZ2x5cGhFbGVtZW50
LCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdDsKKworICAgIHZvaWQgYWRkQ29kZXBvaW50
UmFuZ2VzKGNvbnN0IFVuaWNvZGVSYW5nZXMmLCBIYXNoU2V0PEdseXBoPiYgZ2x5cGhTZXQpIGNv
bnN0OworICAgIHZvaWQgYWRkQ29kZXBvaW50cyhjb25zdCBIYXNoU2V0PFN0cmluZz4mIGNvZGVw
b2ludHMsIEhhc2hTZXQ8R2x5cGg+JiBnbHlwaFNldCkgY29uc3Q7CisgICAgdm9pZCBhZGRHbHlw
aE5hbWVzKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgZ2x5cGhOYW1lcywgSGFzaFNldDxHbHlwaD4m
IGdseXBoU2V0KSBjb25zdDsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgICBWZWN0b3I8
S2VybmluZ0RhdGE+IGNvbXB1dGVLZXJuaW5nRGF0YShib29sIChUOjoqYnVpbGRLZXJuaW5nUGFp
cikoU1ZHS2VybmluZ1BhaXImKSBjb25zdCkgY29uc3Q7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Ci0gICAgc2l6ZV90IGFwcGVuZEtFUk5TdWJ0YWJsZShWZWN0b3I8Y2hhcj4mIHJlc3VsdCwg
Ym9vbCAoVDo6KmJ1aWxkS2VybmluZ1BhaXIpKFNWR0tlcm5pbmdQYWlyJikgY29uc3QsIHVpbnQx
Nl90IGNvdmVyYWdlKSBjb25zdDsKKyAgICBzaXplX3QgYXBwZW5kS0VSTlN1YnRhYmxlKGJvb2wg
KFQ6OipidWlsZEtlcm5pbmdQYWlyKShTVkdLZXJuaW5nUGFpciYpIGNvbnN0LCB1aW50MTZfdCBj
b3ZlcmFnZSk7CiAKICAgICBWZWN0b3I8R2x5cGhEYXRhPiBtX2dseXBoczsKICAgICBIYXNoTWFw
PFN0cmluZywgR2x5cGg+IG1fZ2x5cGhOYW1lVG9JbmRleE1hcDsgLy8gU1ZHIDEuMTogIkl0IGlz
IHJlY29tbWVuZGVkIHRoYXQgZ2x5cGggbmFtZXMgYmUgdW5pcXVlIHdpdGhpbiBhIGZvbnQuIgot
ICAgIEhhc2hNYXA8Q29kZXBvaW50LCBHbHlwaD4gbV9jb2RlcG9pbnRUb0luZGV4TWFwOyAvLyBG
SVhNRTogVGhlcmUgbWlnaHQgYmUgbWFueSBnbHlwaHMgdGhhdCBtYXAgdG8gYSBzaW5nbGUgY29k
ZXBvaW50LgorICAgIEhhc2hNYXA8Q29kZXBvaW50cywgVmVjdG9yPEdseXBoLCAxPj4gbV9jb2Rl
cG9pbnRzVG9JbmRpY2VzTWFwOworICAgIFZlY3RvcjxjaGFyPiBtX3Jlc3VsdDsKICAgICBGbG9h
dFJlY3QgbV9ib3VuZGluZ0JveDsKICAgICBjb25zdCBTVkdGb250RWxlbWVudCYgbV9mb250RWxl
bWVudDsKICAgICBjb25zdCBTVkdGb250RmFjZUVsZW1lbnQqIG1fZm9udEZhY2VFbGVtZW50OwpA
QCAtMTcxLDcyICsyMDQsNzEgQEAgc3RhdGljIHVpbnQxNl90IGludGVncmFsTG9nMih1aW50MTZf
dCB4KSB7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0
ZXI6OmFwcGVuZENNQVBUYWJsZShWZWN0b3I8Y2hhcj4mIHJlc3VsdCkgY29uc3QKK3ZvaWQgU1ZH
VG9PVEZGb250Q29udmVydGVyOjphcHBlbmRDTUFQVGFibGUoKQogewotICAgIGF1dG8gc3RhcnRp
bmdPZmZzZXQgPSByZXN1bHQuc2l6ZSgpOwotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsKLSAgICB3
cml0ZTE2KHJlc3VsdCwgMSk7IC8vIE51bWJlciBzdWJ0YWJsZXMKKyAgICBhdXRvIHN0YXJ0aW5n
T2Zmc2V0ID0gbV9yZXN1bHQuc2l6ZSgpOworICAgIGFwcGVuZDE2KDApOworICAgIGFwcGVuZDE2
KDEpOyAvLyBOdW1iZXIgc3VidGFibGVzCiAKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFVu
aWNvZGUKLSAgICB3cml0ZTE2KHJlc3VsdCwgMyk7IC8vIFVuaWNvZGUgdmVyc2lvbiAyLjIrCi0g
ICAgd3JpdGUzMihyZXN1bHQsIHJlc3VsdC5zaXplKCkgLSBzdGFydGluZ09mZnNldCArIHNpemVv
Zih1aW50MzJfdCkpOyAvLyBCeXRlIG9mZnNldCBvZiBzdWJ0YWJsZQorICAgIGFwcGVuZDE2KDAp
OyAvLyBVbmljb2RlCisgICAgYXBwZW5kMTYoMyk7IC8vIFVuaWNvZGUgdmVyc2lvbiAyLjIrCisg
ICAgYXBwZW5kMzIobV9yZXN1bHQuc2l6ZSgpIC0gc3RhcnRpbmdPZmZzZXQgKyBzaXplb2YodWlu
dDMyX3QpKTsgLy8gQnl0ZSBvZmZzZXQgb2Ygc3VidGFibGUKIAogICAgIC8vIEJyYWluZGVhZCBz
Y2hlbWU6IE9uZSBzZWdtZW50IGZvciBlYWNoIGNoYXJhY3RlcgogICAgIEFTU0VSVChtX2dseXBo
cy5zaXplKCkgPCAweEZGRkYpOwotICAgIHVpbnQxNl90IHNlZ0NvdW50ID0gbV9nbHlwaHMuc2l6
ZSgpICsgMTsKLSAgICB3cml0ZTE2KHJlc3VsdCwgNCk7IC8vIEZvcm1hdDogT25seSBzdXBwb3J0
IHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgZm9yIG5vdwotICAgIHdyaXRlMTYocmVzdWx0
LCAyMiArIG1fZ2x5cGhzLnNpemUoKSAqIDIpOyAvLyBsZW5ndGgKLSAgICB3cml0ZTE2KHJlc3Vs
dCwgMCk7IC8vIExhbmd1YWdlIGluZGVwZW5kZW50Ci0gICAgd3JpdGUxNihyZXN1bHQsIDIgKiBz
ZWdDb3VudCk7IC8vIHNlZ0NvdW50WDI6ICIyIHggc2VnQ291bnQiCi0gICAgdWludDE2X3Qgb3Jp
Z2luYWxTZWFyY2hSYW5nZSA9IHJvdW5kRG93blRvUG93ZXJPZlR3byhzZWdDb3VudCk7Ci0gICAg
dWludDE2X3Qgc2VhcmNoUmFuZ2UgPSAyICogb3JpZ2luYWxTZWFyY2hSYW5nZTsgLy8gc2VhcmNo
UmFuZ2U6ICIyIHggKDIqKmZsb29yKGxvZzIoc2VnQ291bnQpKSkiCi0gICAgd3JpdGUxNihyZXN1
bHQsIHNlYXJjaFJhbmdlKTsKLSAgICB3cml0ZTE2KHJlc3VsdCwgaW50ZWdyYWxMb2cyKG9yaWdp
bmFsU2VhcmNoUmFuZ2UpKTsgLy8gZW50cnlTZWxlY3RvcjogImxvZzIoc2VhcmNoUmFuZ2UvMiki
Ci0gICAgd3JpdGUxNihyZXN1bHQsICgyICogc2VnQ291bnQpIC0gc2VhcmNoUmFuZ2UpOyAvLyBy
YW5nZVNoaWZ0OiAiMiB4IHNlZ0NvdW50IC0gc2VhcmNoUmFuZ2UiCisgICAgYXV0byBzdWJ0YWJs
ZUxvY2F0aW9uID0gbV9yZXN1bHQuc2l6ZSgpOworICAgIGFwcGVuZDMyKDEyIDw8IDE2KTsgLy8g
Rm9ybWF0IDEyCisgICAgYXBwZW5kMzIoMCk7IC8vIFBsYWNlaG9sZGVyIGZvciBieXRlIGxlbmd0
aAorICAgIGFwcGVuZDMyKDApOyAvLyBMYW5ndWFnZSBpbmRlcGVuZGVudAorICAgIGFwcGVuZDMy
KDApOyAvLyBQbGFjZWhvbGRlciBmb3Igbkdyb3VwcworCisgICAgdWludDE2X3Qgbkdyb3VwcyA9
IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dseXBocy5zaXplKCk7ICsraSkgewor
ICAgICAgICBhdXRvJiBnbHlwaCA9IG1fZ2x5cGhzW2ldOworICAgICAgICB1bnNpZ25lZCBjb2Rl
cG9pbnRTaXplID0gMDsKKyAgICAgICAgVUNoYXIzMiBjb2RlcG9pbnQ7CisgICAgICAgIGlmIChn
bHlwaC5jb2RlcG9pbnRzLmlzTnVsbCgpKQorICAgICAgICAgICAgY29kZXBvaW50ID0gMDsKKyAg
ICAgICAgZWxzZSBpZiAoZ2x5cGguY29kZXBvaW50cy5pczhCaXQoKSkKKyAgICAgICAgICAgIGNv
ZGVwb2ludCA9IGdseXBoLmNvZGVwb2ludHNbY29kZXBvaW50U2l6ZSsrXTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgVTE2X05FWFQoZ2x5cGguY29kZXBvaW50cy5jaGFyYWN0ZXJzMTYoKSwg
Y29kZXBvaW50U2l6ZSwgZ2x5cGguY29kZXBvaW50cy5sZW5ndGgoKSwgY29kZXBvaW50KTsKIAot
ICAgIGZvciAoYXV0byYgZ2x5cGggOiBtX2dseXBocykKLSAgICAgICAgd3JpdGUxNihyZXN1bHQs
IGdseXBoLmNvZGVwb2ludCk7IC8vIEVuZENvZGUKLSAgICB3cml0ZTE2KHJlc3VsdCwgMHhGRkZG
KTsgLy8gIlRvIGVuc3VyZSB0aGF0IHRoZSBzZWFyY2ggd2lsbCB0ZXJtaW5hdGUsIHRoZSBmaW5h
bCBlbmRDb2RlIHZhbHVlIG11c3QgYmUgMHhGRkZGLiIKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7
IC8vIFJlc2VydmVkCi0gICAgZm9yIChhdXRvJiBnbHlwaCA6IG1fZ2x5cGhzKQotICAgICAgICB3
cml0ZTE2KHJlc3VsdCwgZ2x5cGguY29kZXBvaW50KTsgLy8gc3RhcnRDb2RlCi0gICAgd3JpdGUx
NihyZXN1bHQsIDB4RkZGRik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2x5cGhz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIHZhbHVlIGNhbiBiZSAi
bmVnYXRpdmUsIiBidXQgdGhhdCBpcyBva2F5IGJlY2F1c2Ugd3JhcHBpbmcgaXMgZGVmaW5lZCBh
bmQgZXhwZWN0ZWQgaGVyZQotICAgICAgICB3cml0ZTE2KHJlc3VsdCwgc3RhdGljX2Nhc3Q8dWlu
dDE2X3Q+KGkpIC0gbV9nbHlwaHNbaV0uY29kZXBvaW50KTsgLy8gaWREZWx0YQorICAgICAgICAv
LyBEb24ndCBtYXAgbGlnYXR1cmVzIGhlcmUuCisgICAgICAgIGlmIChnbHlwaC5jb2RlcG9pbnRz
Lmxlbmd0aCgpID4gY29kZXBvaW50U2l6ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGFwcGVuZDMyKGNvZGVwb2ludCk7IC8vIHN0YXJ0Q2hhckNvZGUKKyAgICAgICAgYXBwZW5k
MzIoY29kZXBvaW50KTsgLy8gZW5kQ2hhckNvZGUKKyAgICAgICAgYXBwZW5kMzIoaSk7IC8vIHN0
YXJ0R2x5cGhDb2RlCisgICAgICAgICsrbkdyb3VwczsKICAgICB9Ci0gICAgd3JpdGUxNihyZXN1
bHQsIDEpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dseXBocy5zaXplKCk7ICsr
aSkKLSAgICAgICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBpZFJhbmdlT2Zmc2V0Ci0gICAgd3Jp
dGUxNihyZXN1bHQsIDApOworICAgIG92ZXJ3cml0ZTMyKHN1YnRhYmxlTG9jYXRpb24gKyA0LCBt
X3Jlc3VsdC5zaXplKCkgLSBzdWJ0YWJsZUxvY2F0aW9uKTsKKyAgICBvdmVyd3JpdGUzMihzdWJ0
YWJsZUxvY2F0aW9uICsgMTIsIG5Hcm91cHMpOwogfQogCi12b2lkIFNWR1RvT1RGRm9udENvbnZl
cnRlcjo6YXBwZW5kSEVBRFRhYmxlKFZlY3RvcjxjaGFyPiYgcmVzdWx0KSBjb25zdAordm9pZCBT
VkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEhFQURUYWJsZSgpCiB7Ci0gICAgd3JpdGUzMihy
ZXN1bHQsIDB4MDAwMTAwMDApOyAvLyBWZXJzaW9uCi0gICAgd3JpdGUzMihyZXN1bHQsIDB4MDAw
MTAwMDApOyAvLyBSZXZpc2lvbgotICAgIHdyaXRlMzIocmVzdWx0LCAwKTsgLy8gQ2hlY2tzdW0g
YWRqdXN0bWVudAotICAgIC8vIE1hZ2ljIG51bWJlci4gIlNldCB0byAweDVGMEYzQ0Y1IgotICAg
IHJlc3VsdC5hcHBlbmQoMHg1Rik7Ci0gICAgcmVzdWx0LmFwcGVuZCgweDBGKTsKLSAgICByZXN1
bHQuYXBwZW5kKDB4M0MpOwotICAgIHJlc3VsdC5hcHBlbmQoLTB4MEIpOyAvLyBXcmFwYXJvdW5k
Ci0gICAgd3JpdGUxNihyZXN1bHQsICgxIDw8IDkpIHwgMSk7Ci0KLSAgICB3cml0ZTE2KHJlc3Vs
dCwgbV91bml0c1BlckVtKTsKLSAgICB3cml0ZTMyKHJlc3VsdCwgMCk7IC8vIEZpcnN0IGhhbGYg
b2YgY3JlYXRpb24gZGF0ZQotICAgIHdyaXRlMzIocmVzdWx0LCAwKTsgLy8gTGFzdCBoYWxmIG9m
IGNyZWF0aW9uIGRhdGUKLSAgICB3cml0ZTMyKHJlc3VsdCwgMCk7IC8vIEZpcnN0IGhhbGYgb2Yg
bW9kaWZpY2F0aW9uIGRhdGUKLSAgICB3cml0ZTMyKHJlc3VsdCwgMCk7IC8vIExhc3QgaGFsZiBv
ZiBtb2RpZmljYXRpb24gZGF0ZQotICAgIHdyaXRlMTYocmVzdWx0LCBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDE2X3Q+OjptaW4oKSk7IC8vIE1pbmltdW0gWAotICAgIHdyaXRlMTYocmVzdWx0LCBz
dGQ6Om51bWVyaWNfbGltaXRzPGludDE2X3Q+OjptaW4oKSk7IC8vIE1pbmltdW0gWQotICAgIHdy
aXRlMTYocmVzdWx0LCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDE2X3Q+OjptYXgoKSk7IC8vIE1h
eGltdW0gWAotICAgIHdyaXRlMTYocmVzdWx0LCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDE2X3Q+
OjptYXgoKSk7IC8vIE1heGltdW0gWQotICAgIHdyaXRlMTYocmVzdWx0LCAobV9pdGFsaWMgPyAx
IDw8IDEgOiAwKSB8IChtX3dlaWdodCA+PSA3ID8gMSA6IDApKTsKLSAgICB3cml0ZTE2KHJlc3Vs
dCwgMyk7IC8vIFNtYWxsZXN0IHJlYWRhYmxlIHNpemUgaW4gcGl4ZWxzCi0gICAgd3JpdGUxNihy
ZXN1bHQsIDApOyAvLyBNaWdodCBjb250YWluIExUUiBvciBSVEwgZ2x5cGhzCi0gICAgd3JpdGUx
NihyZXN1bHQsIDApOyAvLyBTaG9ydCBvZmZzZXRzIGluIHRoZSAnbG9jYScgdGFibGUuIEhvd2V2
ZXIsIE9URiBmb250cyBkb24ndCBoYXZlIGEgJ2xvY2EnIHRhYmxlIHNvIHRoaXMgaXMgaXJyZWxl
dmFudAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gR2x5cGggZGF0YSBmb3JtYXQKKyAgICBh
cHBlbmQzMigweDAwMDEwMDAwKTsgLy8gVmVyc2lvbgorICAgIGFwcGVuZDMyKDB4MDAwMTAwMDAp
OyAvLyBSZXZpc2lvbgorICAgIGFwcGVuZDMyKDApOyAvLyBDaGVja3N1bSBhZGp1c3RtZW50Cisg
ICAgYXBwZW5kMzIoMHg1RjBGM0NGNSk7CisgICAgYXBwZW5kMTYoKDEgPDwgOSkgfCAxKTsKKwor
ICAgIGFwcGVuZDE2KG1fdW5pdHNQZXJFbSk7CisgICAgYXBwZW5kMzIoMCk7IC8vIEZpcnN0IGhh
bGYgb2YgY3JlYXRpb24gZGF0ZQorICAgIGFwcGVuZDMyKDApOyAvLyBMYXN0IGhhbGYgb2YgY3Jl
YXRpb24gZGF0ZQorICAgIGFwcGVuZDMyKDApOyAvLyBGaXJzdCBoYWxmIG9mIG1vZGlmaWNhdGlv
biBkYXRlCisgICAgYXBwZW5kMzIoMCk7IC8vIExhc3QgaGFsZiBvZiBtb2RpZmljYXRpb24gZGF0
ZQorICAgIGFwcGVuZDE2KG1fYm91bmRpbmdCb3gueCgpKTsgLy8gTWluaW11bSBYCisgICAgYXBw
ZW5kMTYobV9ib3VuZGluZ0JveC55KCkpOyAvLyBNaW5pbXVtIFkKKyAgICBhcHBlbmQxNihtX2Jv
dW5kaW5nQm94Lm1heFgoKSk7IC8vIE1heGltdW0gWAorICAgIGFwcGVuZDE2KG1fYm91bmRpbmdC
b3gubWF4WSgpKTsgLy8gTWF4aW11bSBZCisgICAgYXBwZW5kMTYoKG1faXRhbGljID8gMSA8PCAx
IDogMCkgfCAobV93ZWlnaHQgPj0gNyA/IDEgOiAwKSk7CisgICAgYXBwZW5kMTYoMyk7IC8vIFNt
YWxsZXN0IHJlYWRhYmxlIHNpemUgaW4gcGl4ZWxzCisgICAgYXBwZW5kMTYoMCk7IC8vIE1pZ2h0
IGNvbnRhaW4gTFRSIG9yIFJUTCBnbHlwaHMKKyAgICBhcHBlbmQxNigwKTsgLy8gU2hvcnQgb2Zm
c2V0cyBpbiB0aGUgJ2xvY2EnIHRhYmxlLiBIb3dldmVyLCBPVEYgZm9udHMgZG9uJ3QgaGF2ZSBh
ICdsb2NhJyB0YWJsZSBzbyB0aGlzIGlzIGlycmVsZXZhbnQKKyAgICBhcHBlbmQxNigwKTsgLy8g
R2x5cGggZGF0YSBmb3JtYXQKIH0KIAogLy8gQXNzdW1wdGlvbjogVDIgY2FuIGhvbGQgZXZlcnkg
dmFsdWUgdGhhdCBhIFQxIGNhbiBob2xkCkBAIC0yNDgsMTAgKzI4MCwxMCBAQCBzdGF0aWMgaW5s
aW5lIFQxIGNsYW1wVG8oVDIgeCkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VDE+KHgpOwogfQog
Ci12b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kSEhFQVRhYmxlKFZlY3RvcjxjaGFy
PiYgcmVzdWx0KSBjb25zdAordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEhIRUFU
YWJsZSgpCiB7Ci0gICAgaW50MTZfdCBhc2NlbnQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDE2
X3Q+OjptYXgoKTsKLSAgICBpbnQxNl90IGRlc2NlbnQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDE2X3Q+OjptYXgoKTsKKyAgICBpbnQxNl90IGFzY2VudCA9IG1fdW5pdHNQZXJFbTsKKyAgICBp
bnQxNl90IGRlc2NlbnQgPSAwOwogICAgIGlmIChtX2ZvbnRGYWNlRWxlbWVudCkgewogICAgICAg
ICBhc2NlbnQgPSBtX2ZvbnRGYWNlRWxlbWVudC0+YXNjZW50KCk7CiAgICAgICAgIGRlc2NlbnQg
PSBtX2ZvbnRGYWNlRWxlbWVudC0+ZGVzY2VudCgpOwpAQCAtMjY2LDcxICsyOTgsNzEgQEAgdm9p
ZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEhIRUFUYWJsZShWZWN0b3I8Y2hhcj4mIHJl
c3VsdCkgY29uc3QKICAgICBpZiAoIWRlc2NlbnQpCiAgICAgICAgIGRlc2NlbnQgPSAxOwogCi0g
ICAgd3JpdGUzMihyZXN1bHQsIDB4MDAwMTAwMDApOyAvLyBWZXJzaW9uCi0gICAgd3JpdGUxNihy
ZXN1bHQsIGFzY2VudCk7Ci0gICAgd3JpdGUxNihyZXN1bHQsIGRlc2NlbnQpOworICAgIGFwcGVu
ZDMyKDB4MDAwMTAwMDApOyAvLyBWZXJzaW9uCisgICAgYXBwZW5kMTYoYXNjZW50KTsKKyAgICBh
cHBlbmQxNihkZXNjZW50KTsKICAgICAvLyBXZWJLaXQncyBTVkcgY29kZXBhdGggaGFyZGNvZGVz
IHRoZSBsaW5lIGdhcCB0byBiZSAxLzEwdGggb2YgdGhlIGZvbnQgc2l6ZSAoc2VlIHIyOTcxOSku
IE1hdGNoaW5nIHRoYXQKICAgICAvLyBhbGxvd3MgdXMgdG8gaGF2ZSBjb25zaXN0ZW50IHJlbmRl
cmluZ3MgYmV0d2VlbiB0aGUgdHdvIHBhdGhzLgotICAgIHdyaXRlMTYocmVzdWx0LCBtX3VuaXRz
UGVyRW0gLyAxMCk7IC8vIExpbmUgZ2FwCi0gICAgd3JpdGUxNihyZXN1bHQsIGNsYW1wVG88dWlu
dDE2X3Q+KG1fYWR2YW5jZVdpZHRoTWF4KSk7Ci0gICAgd3JpdGUxNihyZXN1bHQsIGNsYW1wVG88
aW50MTZfdD4obV9ib3VuZGluZ0JveC54KCkpKTsgLy8gTWluaW11bSBsZWZ0IHNpZGUgYmVhcmlu
ZwotICAgIHdyaXRlMTYocmVzdWx0LCBjbGFtcFRvPGludDE2X3Q+KG1fbWluUmlnaHRTaWRlQmVh
cmluZykpOyAvLyBNaW5pbXVtIHJpZ2h0IHNpZGUgYmVhcmluZwotICAgIHdyaXRlMTYocmVzdWx0
LCBjbGFtcFRvPGludDE2X3Q+KG1fYm91bmRpbmdCb3gubWF4WCgpKSk7IC8vIFggbWF4aW11bSBl
eHRlbnQKKyAgICBhcHBlbmQxNihtX3VuaXRzUGVyRW0gLyAxMCk7IC8vIExpbmUgZ2FwCisgICAg
YXBwZW5kMTYoY2xhbXBUbzx1aW50MTZfdD4obV9hZHZhbmNlV2lkdGhNYXgpKTsKKyAgICBhcHBl
bmQxNihjbGFtcFRvPGludDE2X3Q+KG1fYm91bmRpbmdCb3gueCgpKSk7IC8vIE1pbmltdW0gbGVm
dCBzaWRlIGJlYXJpbmcKKyAgICBhcHBlbmQxNihjbGFtcFRvPGludDE2X3Q+KG1fbWluUmlnaHRT
aWRlQmVhcmluZykpOyAvLyBNaW5pbXVtIHJpZ2h0IHNpZGUgYmVhcmluZworICAgIGFwcGVuZDE2
KGNsYW1wVG88aW50MTZfdD4obV9ib3VuZGluZ0JveC5tYXhYKCkpKTsgLy8gWCBtYXhpbXVtIGV4
dGVudAogICAgIC8vIFdlYktpdCBkcmF3cyB0aGUgY2FyZXQKLSAgICB3cml0ZTE2KHJlc3VsdCwg
MSk7IC8vIFZlcnRpY2FsIGNhcmV0Ci0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBWZXJ0aWNh
bCBjYXJldAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gIlNldCB2YWx1ZSB0byAwIGZvciBu
b24tc2xhbnRlZCBmb250cyIKLSAgICB3cml0ZTMyKHJlc3VsdCwgMCk7IC8vIFJlc2VydmVkCi0g
ICAgd3JpdGUzMihyZXN1bHQsIDApOyAvLyBSZXNlcnZlZAotICAgIHdyaXRlMTYocmVzdWx0LCAw
KTsgLy8gQ3VycmVudCBmb3JtYXQKLSAgICB3cml0ZTE2KHJlc3VsdCwgbV9nbHlwaHMuc2l6ZSgp
KTsgLy8gTnVtYmVyIG9mIGFkdmFuY2Ugd2lkdGhzIGluIEhNVFggdGFibGUKKyAgICBhcHBlbmQx
NigxKTsgLy8gVmVydGljYWwgY2FyZXQKKyAgICBhcHBlbmQxNigwKTsgLy8gVmVydGljYWwgY2Fy
ZXQKKyAgICBhcHBlbmQxNigwKTsgLy8gIlNldCB2YWx1ZSB0byAwIGZvciBub24tc2xhbnRlZCBm
b250cyIKKyAgICBhcHBlbmQzMigwKTsgLy8gUmVzZXJ2ZWQKKyAgICBhcHBlbmQzMigwKTsgLy8g
UmVzZXJ2ZWQKKyAgICBhcHBlbmQxNigwKTsgLy8gQ3VycmVudCBmb3JtYXQKKyAgICBhcHBlbmQx
NihtX2dseXBocy5zaXplKCkpOyAvLyBOdW1iZXIgb2YgYWR2YW5jZSB3aWR0aHMgaW4gSE1UWCB0
YWJsZQogfQogCi12b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kSE1UWFRhYmxlKFZl
Y3RvcjxjaGFyPiYgcmVzdWx0KSBjb25zdAordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFw
cGVuZEhNVFhUYWJsZSgpCiB7CiAgICAgZm9yIChhdXRvJiBnbHlwaCA6IG1fZ2x5cGhzKSB7Ci0g
ICAgICAgIHdyaXRlMTYocmVzdWx0LCBjbGFtcFRvPHVpbnQxNl90PihnbHlwaC5ob3Jpem9udGFs
QWR2YW5jZSkpOwotICAgICAgICB3cml0ZTE2KHJlc3VsdCwgY2xhbXBUbzxpbnQxNl90PihnbHlw
aC5ib3VuZGluZ0JveC54KCkpKTsKKyAgICAgICAgYXBwZW5kMTYoY2xhbXBUbzx1aW50MTZfdD4o
Z2x5cGguaG9yaXpvbnRhbEFkdmFuY2UpKTsKKyAgICAgICAgYXBwZW5kMTYoY2xhbXBUbzxpbnQx
Nl90PihnbHlwaC5ib3VuZGluZ0JveC54KCkpKTsKICAgICB9CiB9CiAKLXZvaWQgU1ZHVG9PVEZG
b250Q29udmVydGVyOjphcHBlbmRNQVhQVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0
Cit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kTUFYUFRhYmxlKCkKIHsKLSAgICB3
cml0ZTMyKHJlc3VsdCwgMHgwMDAxMDAwMCk7IC8vIFZlcnNpb24KLSAgICB3cml0ZTE2KHJlc3Vs
dCwgbV9nbHlwaHMuc2l6ZSgpKTsKLSAgICB3cml0ZTE2KHJlc3VsdCwgMHhGRkZGKTsgLy8gTWF4
aW11bSBudW1iZXIgb2YgcG9pbnRzIGluIG5vbi1jb21wb3VuZCBnbHlwaAotICAgIHdyaXRlMTYo
cmVzdWx0LCAweEZGRkYpOyAvLyBNYXhpbXVtIG51bWJlciBvZiBjb250b3VycyBpbiBub24tY29t
cG91bmQgZ2x5cGgKLSAgICB3cml0ZTE2KHJlc3VsdCwgMHhGRkZGKTsgLy8gTWF4aW11bSBudW1i
ZXIgb2YgcG9pbnRzIGluIGNvbXBvdW5kIGdseXBoCi0gICAgd3JpdGUxNihyZXN1bHQsIDB4RkZG
Rik7IC8vIE1heGltdW0gbnVtYmVyIG9mIGNvbnRvdXJzIGluIGNvbXBvdW5kIGdseXBoCi0gICAg
d3JpdGUxNihyZXN1bHQsIDIpOyAvLyBNYXhpbXVtIG51bWJlciBvZiB6b25lcwotICAgIHdyaXRl
MTYocmVzdWx0LCAwKTsgLy8gTWF4aW11bSBudW1iZXIgb2YgcG9pbnRzIHVzZWQgaW4gem9uZSAw
Ci0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBNYXhpbXVtIG51bWJlciBvZiBzdG9yYWdlIGFy
ZWEgbG9jYXRpb25zCi0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBNYXhpbXVtIG51bWJlciBv
ZiBmdW5jdGlvbiBkZWZpbml0aW9ucwotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gTWF4aW11
bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb24gZGVmaW5pdGlvbnMKLSAgICB3cml0ZTE2KHJlc3VsdCwg
MCk7IC8vIE1heGltdW0gc3RhY2sgZGVwdGgKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIE1h
eGltdW0gc2l6ZSBvZiBpbnN0cnVjdGlvbnMKLSAgICB3cml0ZTE2KHJlc3VsdCwgbV9nbHlwaHMu
c2l6ZSgpKTsgLy8gTWF4aW11bSBudW1iZXIgb2YgZ2x5cGhzIHJlZmVyZW5jZWQgYXQgdG9wIGxl
dmVsCi0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBObyBjb21wb3VuZCBnbHlwaHMKKyAgICBh
cHBlbmQzMigweDAwMDEwMDAwKTsgLy8gVmVyc2lvbgorICAgIGFwcGVuZDE2KG1fZ2x5cGhzLnNp
emUoKSk7CisgICAgYXBwZW5kMTYoMHhGRkZGKTsgLy8gTWF4aW11bSBudW1iZXIgb2YgcG9pbnRz
IGluIG5vbi1jb21wb3VuZCBnbHlwaAorICAgIGFwcGVuZDE2KDB4RkZGRik7IC8vIE1heGltdW0g
bnVtYmVyIG9mIGNvbnRvdXJzIGluIG5vbi1jb21wb3VuZCBnbHlwaAorICAgIGFwcGVuZDE2KDB4
RkZGRik7IC8vIE1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBpbiBjb21wb3VuZCBnbHlwaAorICAg
IGFwcGVuZDE2KDB4RkZGRik7IC8vIE1heGltdW0gbnVtYmVyIG9mIGNvbnRvdXJzIGluIGNvbXBv
dW5kIGdseXBoCisgICAgYXBwZW5kMTYoMik7IC8vIE1heGltdW0gbnVtYmVyIG9mIHpvbmVzCisg
ICAgYXBwZW5kMTYoMCk7IC8vIE1heGltdW0gbnVtYmVyIG9mIHBvaW50cyB1c2VkIGluIHpvbmUg
MAorICAgIGFwcGVuZDE2KDApOyAvLyBNYXhpbXVtIG51bWJlciBvZiBzdG9yYWdlIGFyZWEgbG9j
YXRpb25zCisgICAgYXBwZW5kMTYoMCk7IC8vIE1heGltdW0gbnVtYmVyIG9mIGZ1bmN0aW9uIGRl
ZmluaXRpb25zCisgICAgYXBwZW5kMTYoMCk7IC8vIE1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0
aW9uIGRlZmluaXRpb25zCisgICAgYXBwZW5kMTYoMCk7IC8vIE1heGltdW0gc3RhY2sgZGVwdGgK
KyAgICBhcHBlbmQxNigwKTsgLy8gTWF4aW11bSBzaXplIG9mIGluc3RydWN0aW9ucworICAgIGFw
cGVuZDE2KG1fZ2x5cGhzLnNpemUoKSk7IC8vIE1heGltdW0gbnVtYmVyIG9mIGdseXBocyByZWZl
cmVuY2VkIGF0IHRvcCBsZXZlbAorICAgIGFwcGVuZDE2KDApOyAvLyBObyBjb21wb3VuZCBnbHlw
aHMKIH0KIAotdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZE5BTUVUYWJsZShWZWN0
b3I8Y2hhcj4mIHJlc3VsdCkgY29uc3QKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBl
bmROQU1FVGFibGUoKQogewotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gRm9ybWF0IHNlbGVj
dG9yCi0gICAgd3JpdGUxNihyZXN1bHQsIDEpOyAvLyBOdW1iZXIgb2YgbmFtZSByZWNvcmRzIGlu
IHRhYmxlCi0gICAgd3JpdGUxNihyZXN1bHQsIDE4KTsgLy8gT2Zmc2V0IGluIGJ5dGVzIHRvIHRo
ZSBiZWdpbm5pbmcgb2YgbmFtZSBjaGFyYWN0ZXIgc3RyaW5ncworICAgIGFwcGVuZDE2KDApOyAv
LyBGb3JtYXQgc2VsZWN0b3IKKyAgICBhcHBlbmQxNigxKTsgLy8gTnVtYmVyIG9mIG5hbWUgcmVj
b3JkcyBpbiB0YWJsZQorICAgIGFwcGVuZDE2KDE4KTsgLy8gT2Zmc2V0IGluIGJ5dGVzIHRvIHRo
ZSBiZWdpbm5pbmcgb2YgbmFtZSBjaGFyYWN0ZXIgc3RyaW5ncwogCi0gICAgd3JpdGUxNihyZXN1
bHQsIDApOyAvLyBVbmljb2RlCi0gICAgd3JpdGUxNihyZXN1bHQsIDMpOyAvLyBVbmljb2RlIHZl
cnNpb24gMi4wIG9yIGxhdGVyCi0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBMYW5ndWFnZQot
ICAgIHdyaXRlMTYocmVzdWx0LCAxKTsgLy8gTmFtZSBpZGVudGlmaWVyLiAxID0gRm9udCBmYW1p
bHkKLSAgICB3cml0ZTE2KHJlc3VsdCwgbV9mb250RmFtaWx5Lmxlbmd0aCgpKTsKLSAgICB3cml0
ZTE2KHJlc3VsdCwgMCk7IC8vIE9mZnNldCBpbnRvIG5hbWUgZGF0YQorICAgIGFwcGVuZDE2KDAp
OyAvLyBVbmljb2RlCisgICAgYXBwZW5kMTYoMyk7IC8vIFVuaWNvZGUgdmVyc2lvbiAyLjAgb3Ig
bGF0ZXIKKyAgICBhcHBlbmQxNigwKTsgLy8gTGFuZ3VhZ2UKKyAgICBhcHBlbmQxNigxKTsgLy8g
TmFtZSBpZGVudGlmaWVyLiAxID0gRm9udCBmYW1pbHkKKyAgICBhcHBlbmQxNihtX2ZvbnRGYW1p
bHkubGVuZ3RoKCkpOworICAgIGFwcGVuZDE2KDApOyAvLyBPZmZzZXQgaW50byBuYW1lIGRhdGEK
IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZvbnRGYW1pbHkubGVuZ3RoKCk7ICsr
aSkKLSAgICAgICAgd3JpdGUxNihyZXN1bHQsIG1fZm9udEZhbWlseVtpXSk7CisgICAgICAgIGFw
cGVuZDE2KG1fZm9udEZhbWlseVtpXSk7CiB9CiAKLXZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVy
OjphcHBlbmRPUzJUYWJsZShWZWN0b3I8Y2hhcj4mIHJlc3VsdCkgY29uc3QKK3ZvaWQgU1ZHVG9P
VEZGb250Q29udmVydGVyOjphcHBlbmRPUzJUYWJsZSgpCiB7CiAgICAgaW50MTZfdCBhdmVyYWdl
QWR2YW5jZSA9IG1fdW5pdHNQZXJFbTsKICAgICBhdXRvJiBhdHRyaWJ1dGUgPSBtX2ZvbnRFbGVt
ZW50LmZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6Omhvcml6X2Fkdl94QXR0cik7CkBAIC0zNDQs
MjMgKzM3NiwyMyBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kT1MyVGFibGUo
VmVjdG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0CiAgICAgICAgICAgICBhdmVyYWdlQWR2YW5jZSA9
IGNsYW1wVG88aW50MTZfdD4odmFsdWUpOwogICAgIH0KIAotICAgIHdyaXRlMTYocmVzdWx0LCAw
KTsgLy8gVmVyc2lvbgotICAgIHdyaXRlMTYocmVzdWx0LCBhdmVyYWdlQWR2YW5jZSk7Ci0gICAg
d3JpdGUxNihyZXN1bHQsIG1fd2VpZ2h0KTsgLy8gV2VpZ2h0IGNsYXNzCi0gICAgd3JpdGUxNihy
ZXN1bHQsIDUpOyAvLyBXaWR0aCBjbGFzcwotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gUHJv
dGVjdGVkIGZvbnQKKyAgICBhcHBlbmQxNigwKTsgLy8gVmVyc2lvbgorICAgIGFwcGVuZDE2KGF2
ZXJhZ2VBZHZhbmNlKTsKKyAgICBhcHBlbmQxNihtX3dlaWdodCk7IC8vIFdlaWdodCBjbGFzcwor
ICAgIGFwcGVuZDE2KDUpOyAvLyBXaWR0aCBjbGFzcworICAgIGFwcGVuZDE2KDApOyAvLyBQcm90
ZWN0ZWQgZm9udAogICAgIC8vIFdlYktpdCBoYW5kbGVzIHRoZXNlIHN1cGVyc2NyaXB0cyBhbmQg
c3Vic2NyaXB0cwotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gU3Vic2NyaXB0IFggU2l6ZQot
ICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gU3Vic2NyaXB0IFkgU2l6ZQotICAgIHdyaXRlMTYo
cmVzdWx0LCAwKTsgLy8gU3Vic2NyaXB0IFggT2Zmc2V0Ci0gICAgd3JpdGUxNihyZXN1bHQsIDAp
OyAvLyBTdWJzY3JpcHQgWSBPZmZzZXQKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFN1cGVy
c2NyaXB0IFggU2l6ZQotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gU3VwZXJzY3JpcHQgWSBT
aXplCi0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBTdXBlcnNjcmlwdCBYIE9mZnNldAotICAg
IHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gU3VwZXJzY3JpcHQgWSBPZmZzZXQKLSAgICB3cml0ZTE2
KHJlc3VsdCwgMCk7IC8vIFN0cmlrZW91dCB3aWR0aAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsg
Ly8gU3RyaWtlb3V0IFBvc2l0aW9uCi0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBObyBjbGFz
c2lmaWNhdGlvbgorICAgIGFwcGVuZDE2KDApOyAvLyBTdWJzY3JpcHQgWCBTaXplCisgICAgYXBw
ZW5kMTYoMCk7IC8vIFN1YnNjcmlwdCBZIFNpemUKKyAgICBhcHBlbmQxNigwKTsgLy8gU3Vic2Ny
aXB0IFggT2Zmc2V0CisgICAgYXBwZW5kMTYoMCk7IC8vIFN1YnNjcmlwdCBZIE9mZnNldAorICAg
IGFwcGVuZDE2KDApOyAvLyBTdXBlcnNjcmlwdCBYIFNpemUKKyAgICBhcHBlbmQxNigwKTsgLy8g
U3VwZXJzY3JpcHQgWSBTaXplCisgICAgYXBwZW5kMTYoMCk7IC8vIFN1cGVyc2NyaXB0IFggT2Zm
c2V0CisgICAgYXBwZW5kMTYoMCk7IC8vIFN1cGVyc2NyaXB0IFkgT2Zmc2V0CisgICAgYXBwZW5k
MTYoMCk7IC8vIFN0cmlrZW91dCB3aWR0aAorICAgIGFwcGVuZDE2KDApOyAvLyBTdHJpa2VvdXQg
UG9zaXRpb24KKyAgICBhcHBlbmQxNigwKTsgLy8gTm8gY2xhc3NpZmljYXRpb24KIAogICAgIFZl
Y3Rvcjx1bnNpZ25lZCBjaGFyPiBzcGVjaWZpZWRQYW5vc2U7CiAgICAgaWYgKG1fZm9udEZhY2VF
bGVtZW50KSB7CkBAIC0zODIsNTcgKzQxNCw1OCBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRl
cjo6YXBwZW5kT1MyVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0CiAKICAgICBpZiAo
c3BlY2lmaWVkUGFub3NlLnNpemUoKSA9PSAxMCkgewogICAgICAgICBmb3IgKGNoYXIgYyA6IHNw
ZWNpZmllZFBhbm9zZSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYyk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC5hcHBlbmQoYyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCAxMDsgKytpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgwKTsgLy8gUEFOT1NF
OiBBbnkKKyAgICAgICAgICAgIG1fcmVzdWx0LmFwcGVuZCgwKTsgLy8gUEFOT1NFOiBBbnkKICAg
ICB9CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKLSAgICAgICAgd3JpdGUzMihy
ZXN1bHQsIDApOyAvLyAiQml0IGFzc2lnbm1lbnRzIGFyZSBwZW5kaW5nLiBTZXQgdG8gMCIKLSAg
ICB3cml0ZTMyKHJlc3VsdCwgMHg1NDRCNDI1Nyk7IC8vIEZvbnQgVmVuZG9yLiAiV0JLVCIKLSAg
ICB3cml0ZTE2KHJlc3VsdCwgKG1fd2VpZ2h0ID49IDcgPyAxIDw8IDUgOiAwKSB8IChtX2l0YWxp
YyA/IDEgOiAwKSk7IC8vIEZvbnQgUGF0dGVybnMuCi0gICAgd3JpdGUxNihyZXN1bHQsIG1fZ2x5
cGhzWzBdLmNvZGVwb2ludCk7IC8vIEZpcnN0IHVuaWNvZGUgaW5kZXgKLSAgICB3cml0ZTE2KHJl
c3VsdCwgbV9nbHlwaHNbbV9nbHlwaHMuc2l6ZSgpIC0gMV0uY29kZXBvaW50KTsgLy8gTGFzdCB1
bmljb2RlIGluZGV4CisgICAgICAgIGFwcGVuZDMyKDApOyAvLyAiQml0IGFzc2lnbm1lbnRzIGFy
ZSBwZW5kaW5nLiBTZXQgdG8gMCIKKyAgICBhcHBlbmQzMigweDU0NEI0MjU3KTsgLy8gRm9udCBW
ZW5kb3IuICJXQktUIgorICAgIGFwcGVuZDE2KChtX3dlaWdodCA+PSA3ID8gMSA8PCA1IDogMCkg
fCAobV9pdGFsaWMgPyAxIDogMCkpOyAvLyBGb250IFBhdHRlcm5zLgorICAgIGFwcGVuZDE2KDAp
OyAvLyBGaXJzdCB1bmljb2RlIGluZGV4CisgICAgYXBwZW5kMTYoMHhGRkZGKTsgLy8gTGFzdCB1
bmljb2RlIGluZGV4CiB9CiAKLXZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRQT1NU
VGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0Cit2b2lkIFNWR1RvT1RGRm9udENvbnZl
cnRlcjo6YXBwZW5kUE9TVFRhYmxlKCkKIHsKLSAgICB3cml0ZTMyKHJlc3VsdCwgMHgwMDAzMDAw
MCk7IC8vIEZvcm1hdC4gUHJpbnRpbmcgaXMgdW5kZWZpbmVkCi0gICAgd3JpdGUzMihyZXN1bHQs
IDApOyAvLyBJdGFsaWMgYW5nbGUgaW4gZGVncmVlcwotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsg
Ly8gVW5kZXJsaW5lIHBvc2l0aW9uCi0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBVbmRlcmxp
bmUgdGhpY2tuZXNzCi0gICAgd3JpdGUzMihyZXN1bHQsIDApOyAvLyBNb25vc3BhY2VkCi0gICAg
d3JpdGUzMihyZXN1bHQsIDApOyAvLyAiTWluaW11bSBtZW1vcnkgdXNhZ2Ugd2hlbiBhIFRydWVU
eXBlIGZvbnQgaXMgZG93bmxvYWRlZCBhcyBhIFR5cGUgNDIgZm9udCIKLSAgICB3cml0ZTMyKHJl
c3VsdCwgMCk7IC8vICJNYXhpbXVtIG1lbW9yeSB1c2FnZSB3aGVuIGEgVHJ1ZVR5cGUgZm9udCBp
cyBkb3dubG9hZGVkIGFzIGEgVHlwZSA0MiBmb250IgotICAgIHdyaXRlMzIocmVzdWx0LCAwKTsg
Ly8gIk1pbmltdW0gbWVtb3J5IHVzYWdlIHdoZW4gYSBUcnVlVHlwZSBmb250IGlzIGRvd25sb2Fk
ZWQgYXMgYSBUeXBlIDEgZm9udCIKLSAgICB3cml0ZTMyKHJlc3VsdCwgMCk7IC8vICJNYXhpbXVt
IG1lbW9yeSB1c2FnZSB3aGVuIGEgVHJ1ZVR5cGUgZm9udCBpcyBkb3dubG9hZGVkIGFzIGEgVHlw
ZSAxIGZvbnQiCisgICAgYXBwZW5kMzIoMHgwMDAzMDAwMCk7IC8vIEZvcm1hdC4gUHJpbnRpbmcg
aXMgdW5kZWZpbmVkCisgICAgYXBwZW5kMzIoMCk7IC8vIEl0YWxpYyBhbmdsZSBpbiBkZWdyZWVz
CisgICAgYXBwZW5kMTYoMCk7IC8vIFVuZGVybGluZSBwb3NpdGlvbgorICAgIGFwcGVuZDE2KDAp
OyAvLyBVbmRlcmxpbmUgdGhpY2tuZXNzCisgICAgYXBwZW5kMzIoMCk7IC8vIE1vbm9zcGFjZWQK
KyAgICBhcHBlbmQzMigwKTsgLy8gIk1pbmltdW0gbWVtb3J5IHVzYWdlIHdoZW4gYSBUcnVlVHlw
ZSBmb250IGlzIGRvd25sb2FkZWQgYXMgYSBUeXBlIDQyIGZvbnQiCisgICAgYXBwZW5kMzIoMCk7
IC8vICJNYXhpbXVtIG1lbW9yeSB1c2FnZSB3aGVuIGEgVHJ1ZVR5cGUgZm9udCBpcyBkb3dubG9h
ZGVkIGFzIGEgVHlwZSA0MiBmb250IgorICAgIGFwcGVuZDMyKDApOyAvLyAiTWluaW11bSBtZW1v
cnkgdXNhZ2Ugd2hlbiBhIFRydWVUeXBlIGZvbnQgaXMgZG93bmxvYWRlZCBhcyBhIFR5cGUgMSBm
b250IgorICAgIGFwcGVuZDMyKDApOyAvLyAiTWF4aW11bSBtZW1vcnkgdXNhZ2Ugd2hlbiBhIFRy
dWVUeXBlIGZvbnQgaXMgZG93bmxvYWRlZCBhcyBhIFR5cGUgMSBmb250IgogfQogCiBzdGF0aWMg
Ym9vbCBpc1ZhbGlkU3RyaW5nRm9yQ0ZGKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBp
ZiAoc3RyaW5nW2ldIDwgMzMgfHwgc3RyaW5nW2ldID4gMTI2KQorICAgICAgICBhdXRvIGMgPSBz
dHJpbmdbaV07CisgICAgICAgIGlmIChjIDwgMzMgfHwgYyA+IDEyNikKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIGFw
cGVuZENGRlZhbGlkU3RyaW5nKFZlY3RvcjxjaGFyPiYgb3V0cHV0LCBjb25zdCBTdHJpbmcmIHN0
cmluZykKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRDRkZWYWxpZFN0cmluZyhj
b25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBBU1NFUlQoaXNWYWxpZFN0cmluZ0ZvckNGRihz
dHJpbmcpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aCgpOyAr
K2kpCi0gICAgICAgIG91dHB1dC5hcHBlbmQoc3RyaW5nW2ldKTsKKyAgICAgICAgbV9yZXN1bHQu
YXBwZW5kKHN0cmluZ1tpXSk7CiB9CiAKLXZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBl
bmRDRkZUYWJsZShWZWN0b3I8Y2hhcj4mIHJlc3VsdCkgY29uc3QKK3ZvaWQgU1ZHVG9PVEZGb250
Q29udmVydGVyOjphcHBlbmRDRkZUYWJsZSgpCiB7Ci0gICAgYXV0byBzdGFydGluZ09mZnNldCA9
IHJlc3VsdC5zaXplKCk7CisgICAgYXV0byBzdGFydGluZ09mZnNldCA9IG1fcmVzdWx0LnNpemUo
KTsKICAgICAvLyBIZWFkZXIKLSAgICByZXN1bHQuYXBwZW5kKDEpOyAvLyBNYWpvciB2ZXJzaW9u
Ci0gICAgcmVzdWx0LmFwcGVuZCgwKTsgLy8gTWlub3IgdmVyc2lvbgotICAgIHJlc3VsdC5hcHBl
bmQoNCk7IC8vIEhlYWRlciBzaXplCi0gICAgcmVzdWx0LmFwcGVuZCg0KTsgLy8gT2Zmc2V0cyB3
aXRoaW4gQ0ZGIHRhYmxlIGFyZSA0IGJ5dGVzIGxvbmcKKyAgICBtX3Jlc3VsdC5hcHBlbmQoMSk7
IC8vIE1ham9yIHZlcnNpb24KKyAgICBtX3Jlc3VsdC5hcHBlbmQoMCk7IC8vIE1pbm9yIHZlcnNp
b24KKyAgICBtX3Jlc3VsdC5hcHBlbmQoNCk7IC8vIEhlYWRlciBzaXplCisgICAgbV9yZXN1bHQu
YXBwZW5kKDQpOyAvLyBPZmZzZXRzIHdpdGhpbiBDRkYgdGFibGUgYXJlIDQgYnl0ZXMgbG9uZwog
CiAgICAgLy8gTmFtZSBJTkRFWAogICAgIFN0cmluZyBmb250TmFtZTsKQEAgLTQ0MiwxMSArNDc1
LDExIEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRDRkZUYWJsZShWZWN0b3I8
Y2hhcj4mIHJlc3VsdCkgY29uc3QKICAgICAgICAgaWYgKGlzVmFsaWRTdHJpbmdGb3JDRkYocG90
ZW50aWFsRm9udE5hbWUpKQogICAgICAgICAgICAgZm9udE5hbWUgPSBwb3RlbnRpYWxGb250TmFt
ZTsKICAgICB9Ci0gICAgd3JpdGUxNihyZXN1bHQsIDEpOyAvLyBJTkRFWCBjb250YWlucyAxIGVs
ZW1lbnQKLSAgICByZXN1bHQuYXBwZW5kKDQpOyAvLyBPZmZzZXRzIGluIHRoaXMgSU5ERVggYXJl
IDQgYnl0ZXMgbG9uZwotICAgIHdyaXRlMzIocmVzdWx0LCAxKTsgLy8gMS1pbmRleCBvZmZzZXQg
b2YgbmFtZSBkYXRhCi0gICAgd3JpdGUzMihyZXN1bHQsIGZvbnROYW1lLmxlbmd0aCgpICsgMSk7
IC8vIDEtaW5kZXggb2Zmc2V0IGp1c3QgcGFzdCBlbmQgb2YgbmFtZSBkYXRhCi0gICAgYXBwZW5k
Q0ZGVmFsaWRTdHJpbmcocmVzdWx0LCBmb250TmFtZSk7CisgICAgYXBwZW5kMTYoMSk7IC8vIElO
REVYIGNvbnRhaW5zIDEgZWxlbWVudAorICAgIG1fcmVzdWx0LmFwcGVuZCg0KTsgLy8gT2Zmc2V0
cyBpbiB0aGlzIElOREVYIGFyZSA0IGJ5dGVzIGxvbmcKKyAgICBhcHBlbmQzMigxKTsgLy8gMS1p
bmRleCBvZmZzZXQgb2YgbmFtZSBkYXRhCisgICAgYXBwZW5kMzIoZm9udE5hbWUubGVuZ3RoKCkg
KyAxKTsgLy8gMS1pbmRleCBvZmZzZXQganVzdCBwYXN0IGVuZCBvZiBuYW1lIGRhdGEKKyAgICBh
cHBlbmRDRkZWYWxpZFN0cmluZyhmb250TmFtZSk7CiAKICAgICBTdHJpbmcgd2VpZ2h0OwogICAg
IGlmIChtX2ZvbnRGYWNlRWxlbWVudCkgewpAQCAtNDY2LDkxICs0OTksOTEgQEAgdm9pZCBTVkdU
b09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZENGRlRhYmxlKFZlY3RvcjxjaGFyPiYgcmVzdWx0KSBj
b25zdAogICAgIGNvbnN0IHVuc2lnbmVkIHNpemVPZlRvcEluZGV4ID0gNDUgKyAod2VpZ2h0Lmlz
RW1wdHkoKSA/IDAgOiA2KTsKIAogICAgIC8vIFRvcCBESUNUIElOREVYLgotICAgIHdyaXRlMTYo
cmVzdWx0LCAxKTsgLy8gSU5ERVggY29udGFpbnMgMSBlbGVtZW50Ci0gICAgcmVzdWx0LmFwcGVu
ZCg0KTsgLy8gT2Zmc2V0cyBpbiB0aGlzIElOREVYIGFyZSA0IGJ5dGVzIGxvbmcKLSAgICB3cml0
ZTMyKHJlc3VsdCwgMSk7IC8vIDEtaW5kZXggb2Zmc2V0IG9mIERJQ1QgZGF0YQotICAgIHdyaXRl
MzIocmVzdWx0LCAxICsgc2l6ZU9mVG9wSW5kZXgpOyAvLyAxLWluZGV4IG9mZnNldCBqdXN0IHBh
c3QgZW5kIG9mIERJQ1QgZGF0YQorICAgIGFwcGVuZDE2KDEpOyAvLyBJTkRFWCBjb250YWlucyAx
IGVsZW1lbnQKKyAgICBtX3Jlc3VsdC5hcHBlbmQoNCk7IC8vIE9mZnNldHMgaW4gdGhpcyBJTkRF
WCBhcmUgNCBieXRlcyBsb25nCisgICAgYXBwZW5kMzIoMSk7IC8vIDEtaW5kZXggb2Zmc2V0IG9m
IERJQ1QgZGF0YQorICAgIGFwcGVuZDMyKDEgKyBzaXplT2ZUb3BJbmRleCk7IC8vIDEtaW5kZXgg
b2Zmc2V0IGp1c3QgcGFzdCBlbmQgb2YgRElDVCBkYXRhCiAKICAgICAvLyBESUNUIGluZm9ybWF0
aW9uCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIHVuc2lnbmVkIHRvcERpY3RTdGFydCA9IHJl
c3VsdC5zaXplKCk7CisgICAgdW5zaWduZWQgdG9wRGljdFN0YXJ0ID0gbV9yZXN1bHQuc2l6ZSgp
OwogI2VuZGlmCi0gICAgcmVzdWx0LmFwcGVuZChvcGVyYW5kMzJCaXQpOwotICAgIHdyaXRlMzIo
cmVzdWx0LCB1c2VyRGVmaW5lZFN0cmluZ1N0YXJ0SW5kZXgpOwotICAgIHJlc3VsdC5hcHBlbmQo
ZnVsbE5hbWVLZXkpOwotICAgIHJlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsKLSAgICB3cml0
ZTMyKHJlc3VsdCwgdXNlckRlZmluZWRTdHJpbmdTdGFydEluZGV4KTsKLSAgICByZXN1bHQuYXBw
ZW5kKGZhbWlseU5hbWVLZXkpOworICAgIG1fcmVzdWx0LmFwcGVuZChvcGVyYW5kMzJCaXQpOwor
ICAgIGFwcGVuZDMyKHVzZXJEZWZpbmVkU3RyaW5nU3RhcnRJbmRleCk7CisgICAgbV9yZXN1bHQu
YXBwZW5kKGZ1bGxOYW1lS2V5KTsKKyAgICBtX3Jlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsK
KyAgICBhcHBlbmQzMih1c2VyRGVmaW5lZFN0cmluZ1N0YXJ0SW5kZXgpOworICAgIG1fcmVzdWx0
LmFwcGVuZChmYW1pbHlOYW1lS2V5KTsKICAgICBpZiAoIXdlaWdodC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZChvcGVyYW5kMzJCaXQpOwotICAgICAgICB3cml0ZTMyKHJlc3Vs
dCwgdXNlckRlZmluZWRTdHJpbmdTdGFydEluZGV4ICsgMSk7Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQod2VpZ2h0S2V5KTsKKyAgICAgICAgbV9yZXN1bHQuYXBwZW5kKG9wZXJhbmQzMkJpdCk7Cisg
ICAgICAgIGFwcGVuZDMyKHVzZXJEZWZpbmVkU3RyaW5nU3RhcnRJbmRleCArIDEpOworICAgICAg
ICBtX3Jlc3VsdC5hcHBlbmQod2VpZ2h0S2V5KTsKICAgICB9Ci0gICAgcmVzdWx0LmFwcGVuZChv
cGVyYW5kMzJCaXQpOwotICAgIHdyaXRlMzIocmVzdWx0LCBjbGFtcFRvPGludDMyX3Q+KG1fYm91
bmRpbmdCb3gueCgpKSk7Ci0gICAgcmVzdWx0LmFwcGVuZChvcGVyYW5kMzJCaXQpOwotICAgIHdy
aXRlMzIocmVzdWx0LCBjbGFtcFRvPGludDMyX3Q+KG1fYm91bmRpbmdCb3gubWF4WCgpKSk7Ci0g
ICAgcmVzdWx0LmFwcGVuZChvcGVyYW5kMzJCaXQpOwotICAgIHdyaXRlMzIocmVzdWx0LCBjbGFt
cFRvPGludDMyX3Q+KG1fYm91bmRpbmdCb3gueSgpKSk7Ci0gICAgcmVzdWx0LmFwcGVuZChvcGVy
YW5kMzJCaXQpOwotICAgIHdyaXRlMzIocmVzdWx0LCBjbGFtcFRvPGludDMyX3Q+KG1fYm91bmRp
bmdCb3gubWF4WSgpKSk7Ci0gICAgcmVzdWx0LmFwcGVuZChmb250QkJveEtleSk7Ci0gICAgcmVz
dWx0LmFwcGVuZChvcGVyYW5kMzJCaXQpOwotICAgIHVuc2lnbmVkIGNoYXJzZXRPZmZzZXRMb2Nh
dGlvbiA9IHJlc3VsdC5zaXplKCk7Ci0gICAgd3JpdGUzMihyZXN1bHQsIDApOyAvLyBPZmZzZXQg
b2YgQ2hhcnNldCBpbmZvLiBXaWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgotICAgIHJlc3VsdC5h
cHBlbmQoY2hhcnNldEluZGV4S2V5KTsKLSAgICByZXN1bHQuYXBwZW5kKG9wZXJhbmQzMkJpdCk7
Ci0gICAgdW5zaWduZWQgY2hhcnN0cmluZ3NPZmZzZXRMb2NhdGlvbiA9IHJlc3VsdC5zaXplKCk7
Ci0gICAgd3JpdGUzMihyZXN1bHQsIDApOyAvLyBPZmZzZXQgb2YgQ2hhclN0cmluZ3MgSU5ERVgu
IFdpbGwgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIuCi0gICAgcmVzdWx0LmFwcGVuZChjaGFyc3RyaW5n
c0luZGV4S2V5KTsKLSAgICBBU1NFUlQocmVzdWx0LnNpemUoKSA9PSB0b3BEaWN0U3RhcnQgKyBz
aXplT2ZUb3BJbmRleCk7CisgICAgbV9yZXN1bHQuYXBwZW5kKG9wZXJhbmQzMkJpdCk7CisgICAg
YXBwZW5kMzIoY2xhbXBUbzxpbnQzMl90PihtX2JvdW5kaW5nQm94LngoKSkpOworICAgIG1fcmVz
dWx0LmFwcGVuZChvcGVyYW5kMzJCaXQpOworICAgIGFwcGVuZDMyKGNsYW1wVG88aW50MzJfdD4o
bV9ib3VuZGluZ0JveC5tYXhYKCkpKTsKKyAgICBtX3Jlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0
KTsKKyAgICBhcHBlbmQzMihjbGFtcFRvPGludDMyX3Q+KG1fYm91bmRpbmdCb3gueSgpKSk7Cisg
ICAgbV9yZXN1bHQuYXBwZW5kKG9wZXJhbmQzMkJpdCk7CisgICAgYXBwZW5kMzIoY2xhbXBUbzxp
bnQzMl90PihtX2JvdW5kaW5nQm94Lm1heFkoKSkpOworICAgIG1fcmVzdWx0LmFwcGVuZChmb250
QkJveEtleSk7CisgICAgbV9yZXN1bHQuYXBwZW5kKG9wZXJhbmQzMkJpdCk7CisgICAgdW5zaWdu
ZWQgY2hhcnNldE9mZnNldExvY2F0aW9uID0gbV9yZXN1bHQuc2l6ZSgpOworICAgIGFwcGVuZDMy
KDApOyAvLyBPZmZzZXQgb2YgQ2hhcnNldCBpbmZvLiBXaWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVy
LgorICAgIG1fcmVzdWx0LmFwcGVuZChjaGFyc2V0SW5kZXhLZXkpOworICAgIG1fcmVzdWx0LmFw
cGVuZChvcGVyYW5kMzJCaXQpOworICAgIHVuc2lnbmVkIGNoYXJzdHJpbmdzT2Zmc2V0TG9jYXRp
b24gPSBtX3Jlc3VsdC5zaXplKCk7CisgICAgYXBwZW5kMzIoMCk7IC8vIE9mZnNldCBvZiBDaGFy
U3RyaW5ncyBJTkRFWC4gV2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlci4KKyAgICBtX3Jlc3VsdC5h
cHBlbmQoY2hhcnN0cmluZ3NJbmRleEtleSk7CisgICAgQVNTRVJUKG1fcmVzdWx0LnNpemUoKSA9
PSB0b3BEaWN0U3RhcnQgKyBzaXplT2ZUb3BJbmRleCk7CiAKICAgICAvLyBTdHJpbmcgSU5ERVgK
LSAgICB3cml0ZTE2KHJlc3VsdCwgMSArICh3ZWlnaHQuaXNFbXB0eSgpID8gMCA6IDEpKTsgLy8g
TnVtYmVyIG9mIGVsZW1lbnRzIGluIElOREVYCi0gICAgcmVzdWx0LmFwcGVuZCg0KTsgLy8gT2Zm
c2V0cyBpbiB0aGlzIElOREVYIGFyZSA0IGJ5dGVzIGxvbmcKKyAgICBhcHBlbmQxNigxICsgKHdl
aWdodC5pc0VtcHR5KCkgPyAwIDogMSkpOyAvLyBOdW1iZXIgb2YgZWxlbWVudHMgaW4gSU5ERVgK
KyAgICBtX3Jlc3VsdC5hcHBlbmQoNCk7IC8vIE9mZnNldHMgaW4gdGhpcyBJTkRFWCBhcmUgNCBi
eXRlcyBsb25nCiAgICAgdWludDMyX3Qgb2Zmc2V0ID0gMTsKLSAgICB3cml0ZTMyKHJlc3VsdCwg
b2Zmc2V0KTsKKyAgICBhcHBlbmQzMihvZmZzZXQpOwogICAgIG9mZnNldCArPSBmb250TmFtZS5s
ZW5ndGgoKTsKLSAgICB3cml0ZTMyKHJlc3VsdCwgb2Zmc2V0KTsKKyAgICBhcHBlbmQzMihvZmZz
ZXQpOwogICAgIGlmICghd2VpZ2h0LmlzRW1wdHkoKSkgewogICAgICAgICBvZmZzZXQgKz0gd2Vp
Z2h0Lmxlbmd0aCgpOwotICAgICAgICB3cml0ZTMyKHJlc3VsdCwgb2Zmc2V0KTsKKyAgICAgICAg
YXBwZW5kMzIob2Zmc2V0KTsKICAgICB9Ci0gICAgYXBwZW5kQ0ZGVmFsaWRTdHJpbmcocmVzdWx0
LCBmb250TmFtZSk7Ci0gICAgYXBwZW5kQ0ZGVmFsaWRTdHJpbmcocmVzdWx0LCB3ZWlnaHQpOwor
ICAgIGFwcGVuZENGRlZhbGlkU3RyaW5nKGZvbnROYW1lKTsKKyAgICBhcHBlbmRDRkZWYWxpZFN0
cmluZyh3ZWlnaHQpOwogCi0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBFbXB0eSBzdWJyb3V0
aW5lIElOREVYCisgICAgYXBwZW5kMTYoMCk7IC8vIEVtcHR5IHN1YnJvdXRpbmUgSU5ERVgKIAog
ICAgIC8vIENoYXJzZXQgaW5mbwotICAgIG92ZXJ3cml0ZTMyKHJlc3VsdCwgY2hhcnNldE9mZnNl
dExvY2F0aW9uLCByZXN1bHQuc2l6ZSgpIC0gc3RhcnRpbmdPZmZzZXQpOwotICAgIHJlc3VsdC5h
cHBlbmQoMCk7CisgICAgb3ZlcndyaXRlMzIoY2hhcnNldE9mZnNldExvY2F0aW9uLCBtX3Jlc3Vs
dC5zaXplKCkgLSBzdGFydGluZ09mZnNldCk7CisgICAgbV9yZXN1bHQuYXBwZW5kKDApOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX2dseXBocy5zaXplKCk7ICsraSkKLSAgICAgICAg
d3JpdGUxNihyZXN1bHQsIGkpOworICAgICAgICBhcHBlbmQxNihpKTsKIAogICAgIC8vIENoYXJT
dHJpbmdzIElOREVYCi0gICAgb3ZlcndyaXRlMzIocmVzdWx0LCBjaGFyc3RyaW5nc09mZnNldExv
Y2F0aW9uLCByZXN1bHQuc2l6ZSgpIC0gc3RhcnRpbmdPZmZzZXQpOwotICAgIHdyaXRlMTYocmVz
dWx0LCBtX2dseXBocy5zaXplKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoNCk7IC8vIE9mZnNldHMg
aW4gdGhpcyBJTkRFWCBhcmUgNCBieXRlcyBsb25nCisgICAgb3ZlcndyaXRlMzIoY2hhcnN0cmlu
Z3NPZmZzZXRMb2NhdGlvbiwgbV9yZXN1bHQuc2l6ZSgpIC0gc3RhcnRpbmdPZmZzZXQpOworICAg
IGFwcGVuZDE2KG1fZ2x5cGhzLnNpemUoKSk7CisgICAgbV9yZXN1bHQuYXBwZW5kKDQpOyAvLyBP
ZmZzZXRzIGluIHRoaXMgSU5ERVggYXJlIDQgYnl0ZXMgbG9uZwogICAgIG9mZnNldCA9IDE7Ci0g
ICAgd3JpdGUzMihyZXN1bHQsIG9mZnNldCk7CisgICAgYXBwZW5kMzIob2Zmc2V0KTsKICAgICBm
b3IgKGF1dG8mIGdseXBoIDogbV9nbHlwaHMpIHsKICAgICAgICAgb2Zmc2V0ICs9IGdseXBoLmNo
YXJTdHJpbmcuc2l6ZSgpOwotICAgICAgICB3cml0ZTMyKHJlc3VsdCwgb2Zmc2V0KTsKKyAgICAg
ICAgYXBwZW5kMzIob2Zmc2V0KTsKICAgICB9CiAgICAgZm9yIChhdXRvJiBnbHlwaCA6IG1fZ2x5
cGhzKQotICAgICAgICByZXN1bHQuYXBwZW5kVmVjdG9yKGdseXBoLmNoYXJTdHJpbmcpOworICAg
ICAgICBtX3Jlc3VsdC5hcHBlbmRWZWN0b3IoZ2x5cGguY2hhclN0cmluZyk7CiB9CiAKLXZvaWQg
U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRWT1JHVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1
bHQpIGNvbnN0Cit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kVk9SR1RhYmxlKCkK
IHsKLSAgICB3cml0ZTE2KHJlc3VsdCwgMSk7IC8vIE1ham9yIHZlcnNpb24KLSAgICB3cml0ZTE2
KHJlc3VsdCwgMCk7IC8vIE1pbm9yIHZlcnNpb24KKyAgICBhcHBlbmQxNigxKTsgLy8gTWFqb3Ig
dmVyc2lvbgorICAgIGFwcGVuZDE2KDApOyAvLyBNaW5vciB2ZXJzaW9uCiAKICAgICBib29sIG9r
OwogICAgIGludDE2X3QgZGVmYXVsdFZlcnRpY2FsT3JpZ2luWSA9IGNsYW1wVG88aW50MTZfdD4o
bV9mb250RWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjp2ZXJ0X29yaWdpbl95QXR0
cikudG9JbnQoJm9rKSk7CiAgICAgaWYgKCFvayAmJiBtX21pc3NpbmdHbHlwaEVsZW1lbnQpCiAg
ICAgICAgIGRlZmF1bHRWZXJ0aWNhbE9yaWdpblkgPSBjbGFtcFRvPGludDE2X3Q+KG1fbWlzc2lu
Z0dseXBoRWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6dmVydF9vcmlnaW5feUF0
dHIpLnRvSW50KCkpOwotICAgIHdyaXRlMTYocmVzdWx0LCBkZWZhdWx0VmVydGljYWxPcmlnaW5Z
KTsKKyAgICBhcHBlbmQxNihkZWZhdWx0VmVydGljYWxPcmlnaW5ZKTsKIAogICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8dWludDE2X3QsIGludDE2X3Q+PiBvcmlnaW5zOwogICAgIGZvciAodWludDE2X3Qg
aSA9IDA7IGkgPCBtX2dseXBocy5zaXplKCk7ICsraSkgewpAQCAtNTY0LDUxICs1OTcsNTQgQEAg
dm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFZPUkdUYWJsZShWZWN0b3I8Y2hhcj4m
IHJlc3VsdCkgY29uc3QKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICB3cml0
ZTE2KHJlc3VsdCwgb3JpZ2lucy5zaXplKCkpOworICAgIGFwcGVuZDE2KG9yaWdpbnMuc2l6ZSgp
KTsKIAogICAgIGZvciAoYXV0byYgcCA6IG9yaWdpbnMpIHsKLSAgICAgICAgd3JpdGUxNihyZXN1
bHQsIHAuZmlyc3QpOwotICAgICAgICB3cml0ZTE2KHJlc3VsdCwgcC5zZWNvbmQpOworICAgICAg
ICBhcHBlbmQxNihwLmZpcnN0KTsKKyAgICAgICAgYXBwZW5kMTYocC5zZWNvbmQpOwogICAgIH0K
IH0KIAotdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFZIRUFUYWJsZShWZWN0b3I8
Y2hhcj4mIHJlc3VsdCkgY29uc3QKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRW
SEVBVGFibGUoKQogewotICAgIHdyaXRlMzIocmVzdWx0LCAweDAwMDExMDAwKTsgLy8gVmVyc2lv
bgotICAgIHdyaXRlMTYocmVzdWx0LCBtX3VuaXRzUGVyRW0gLyAyKTsgLy8gVmVydGljYWwgdHlw
b2dyYXBoaWMgYXNjZW5kZXIgKHZlcnRpY2FsIGJhc2VsaW5lIHRvIHRoZSByaWdodCkKLSAgICB3
cml0ZTE2KHJlc3VsdCwgY2xhbXBUbzxpbnQxNl90Pigtc3RhdGljX2Nhc3Q8aW50PihtX3VuaXRz
UGVyRW0gLyAyKSkpOyAvLyBWZXJ0aWNhbCB0eXBvZ3JhcGhpYyBkZXNjZW5kZXIKLSAgICB3cml0
ZTE2KHJlc3VsdCwgbV91bml0c1BlckVtIC8gMTApOyAvLyBWZXJ0aWNhbCB0eXBvZ3JhcGhpYyBs
aW5lIGdhcAotICAgIHdyaXRlMTYocmVzdWx0LCBjbGFtcFRvPGludDE2X3Q+KG1fYWR2YW5jZUhl
aWdodE1heCkpOwotICAgIHdyaXRlMTYocmVzdWx0LCBjbGFtcFRvPGludDE2X3Q+KG1fdW5pdHNQ
ZXJFbSAtIG1fYm91bmRpbmdCb3gubWF4WSgpKSk7IC8vIE1pbmltdW0gdG9wIHNpZGUgYmVhcmlu
ZwotICAgIHdyaXRlMTYocmVzdWx0LCBjbGFtcFRvPGludDE2X3Q+KG1fYm91bmRpbmdCb3gueSgp
KSk7IC8vIE1pbmltdW0gYm90dG9tIHNpZGUgYmVhcmluZwotICAgIHdyaXRlMTYocmVzdWx0LCBj
bGFtcFRvPGludDE2X3Q+KG1fdW5pdHNQZXJFbSAtIG1fYm91bmRpbmdCb3gueSgpKSk7IC8vIFkg
bWF4aW11bSBleHRlbnQKKyAgICBhcHBlbmQzMigweDAwMDExMDAwKTsgLy8gVmVyc2lvbgorICAg
IGFwcGVuZDE2KG1fdW5pdHNQZXJFbSAvIDIpOyAvLyBWZXJ0aWNhbCB0eXBvZ3JhcGhpYyBhc2Nl
bmRlciAodmVydGljYWwgYmFzZWxpbmUgdG8gdGhlIHJpZ2h0KQorICAgIGFwcGVuZDE2KGNsYW1w
VG88aW50MTZfdD4oLXN0YXRpY19jYXN0PGludD4obV91bml0c1BlckVtIC8gMikpKTsgLy8gVmVy
dGljYWwgdHlwb2dyYXBoaWMgZGVzY2VuZGVyCisgICAgYXBwZW5kMTYobV91bml0c1BlckVtIC8g
MTApOyAvLyBWZXJ0aWNhbCB0eXBvZ3JhcGhpYyBsaW5lIGdhcAorICAgIGFwcGVuZDE2KGNsYW1w
VG88aW50MTZfdD4obV9hZHZhbmNlSGVpZ2h0TWF4KSk7CisgICAgYXBwZW5kMTYoY2xhbXBUbzxp
bnQxNl90PihtX3VuaXRzUGVyRW0gLSBtX2JvdW5kaW5nQm94Lm1heFkoKSkpOyAvLyBNaW5pbXVt
IHRvcCBzaWRlIGJlYXJpbmcKKyAgICBhcHBlbmQxNihjbGFtcFRvPGludDE2X3Q+KG1fYm91bmRp
bmdCb3gueSgpKSk7IC8vIE1pbmltdW0gYm90dG9tIHNpZGUgYmVhcmluZworICAgIGFwcGVuZDE2
KGNsYW1wVG88aW50MTZfdD4obV91bml0c1BlckVtIC0gbV9ib3VuZGluZ0JveC55KCkpKTsgLy8g
WSBtYXhpbXVtIGV4dGVudAogICAgIC8vIFdlYktpdCBkcmF3cyB0aGUgY2FyZXQKLSAgICB3cml0
ZTE2KHJlc3VsdCwgMSk7IC8vIFZlcnRpY2FsIGNhcmV0Ci0gICAgd3JpdGUxNihyZXN1bHQsIDAp
OyAvLyBWZXJ0aWNhbCBjYXJldAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gIlNldCB2YWx1
ZSB0byAwIGZvciBub24tc2xhbnRlZCBmb250cyIKLSAgICB3cml0ZTMyKHJlc3VsdCwgMCk7IC8v
IFJlc2VydmVkCi0gICAgd3JpdGUzMihyZXN1bHQsIDApOyAvLyBSZXNlcnZlZAotICAgIHdyaXRl
MTYocmVzdWx0LCAwKTsgLy8gIlNldCB0byAwIgotICAgIHdyaXRlMTYocmVzdWx0LCBtX2dseXBo
cy5zaXplKCkpOyAvLyBOdW1iZXIgb2YgYWR2YW5jZSBoZWlnaHRzIGluIFZNVFggdGFibGUKKyAg
ICBhcHBlbmQxNigxKTsgLy8gVmVydGljYWwgY2FyZXQKKyAgICBhcHBlbmQxNigwKTsgLy8gVmVy
dGljYWwgY2FyZXQKKyAgICBhcHBlbmQxNigwKTsgLy8gIlNldCB2YWx1ZSB0byAwIGZvciBub24t
c2xhbnRlZCBmb250cyIKKyAgICBhcHBlbmQzMigwKTsgLy8gUmVzZXJ2ZWQKKyAgICBhcHBlbmQz
MigwKTsgLy8gUmVzZXJ2ZWQKKyAgICBhcHBlbmQxNigwKTsgLy8gIlNldCB0byAwIgorICAgIGFw
cGVuZDE2KG1fZ2x5cGhzLnNpemUoKSk7IC8vIE51bWJlciBvZiBhZHZhbmNlIGhlaWdodHMgaW4g
Vk1UWCB0YWJsZQogfQogCi12b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kVk1UWFRh
YmxlKFZlY3RvcjxjaGFyPiYgcmVzdWx0KSBjb25zdAordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0
ZXI6OmFwcGVuZFZNVFhUYWJsZSgpCiB7CiAgICAgZm9yIChhdXRvJiBnbHlwaCA6IG1fZ2x5cGhz
KSB7Ci0gICAgICAgIHdyaXRlMTYocmVzdWx0LCBjbGFtcFRvPHVpbnQxNl90PihnbHlwaC52ZXJ0
aWNhbEFkdmFuY2UpKTsKLSAgICAgICAgd3JpdGUxNihyZXN1bHQsIGNsYW1wVG88aW50MTZfdD4o
bV91bml0c1BlckVtIC0gZ2x5cGguYm91bmRpbmdCb3gubWF4WSgpKSk7IC8vIHRvcCBzaWRlIGJl
YXJpbmcKKyAgICAgICAgYXBwZW5kMTYoY2xhbXBUbzx1aW50MTZfdD4oZ2x5cGgudmVydGljYWxB
ZHZhbmNlKSk7CisgICAgICAgIGFwcGVuZDE2KGNsYW1wVG88aW50MTZfdD4obV91bml0c1BlckVt
IC0gZ2x5cGguYm91bmRpbmdCb3gubWF4WSgpKSk7IC8vIHRvcCBzaWRlIGJlYXJpbmcKICAgICB9
CiB9CiAKIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRDb2RlcG9pbnRSYW5nZXMoY29u
c3QgVW5pY29kZVJhbmdlcyYgdW5pY29kZVJhbmdlcywgSGFzaFNldDxHbHlwaD4mIGdseXBoU2V0
KSBjb25zdAogewogICAgIGZvciAoYXV0byYgdW5pY29kZVJhbmdlIDogdW5pY29kZVJhbmdlcykg
ewotICAgICAgICBmb3IgKGF1dG8gY29kZXBvaW50ID0gdW5pY29kZVJhbmdlLmZpcnN0OyBjb2Rl
cG9pbnQgPCB1bmljb2RlUmFuZ2Uuc2Vjb25kOyArK2NvZGVwb2ludCkgewotICAgICAgICAgICAg
aWYgKCFjb2RlcG9pbnQgfHwgY29kZXBvaW50ID49IHN0ZDo6bnVtZXJpY19saW1pdHM8Q29kZXBv
aW50Pjo6bWF4KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhdXRv
IGl0ZXJhdG9yID0gbV9jb2RlcG9pbnRUb0luZGV4TWFwLmZpbmQoY29kZXBvaW50KTsKLSAgICAg
ICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2NvZGVwb2ludFRvSW5kZXhNYXAuZW5kKCkpCi0gICAg
ICAgICAgICAgICAgZ2x5cGhTZXQuYWRkKGl0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIGZvciAo
YXV0byBjb2RlcG9pbnQgPSB1bmljb2RlUmFuZ2UuZmlyc3Q7IGNvZGVwb2ludCA8PSB1bmljb2Rl
UmFuZ2Uuc2Vjb25kOyArK2NvZGVwb2ludCkgeworICAgICAgICAgICAgVUNoYXIgYnVmZmVyWzJd
OworICAgICAgICAgICAgdWludDhfdCBsZW5ndGggPSAwOworICAgICAgICAgICAgVUJvb2wgZXJy
b3IgPSBmYWxzZTsKKyAgICAgICAgICAgIFUxNl9BUFBFTkQoYnVmZmVyLCBsZW5ndGgsIDIsIGNv
ZGVwb2ludCwgZXJyb3IpOworICAgICAgICAgICAgaWYgKCFlcnJvcikgeworICAgICAgICAgICAg
ICAgIGZvciAoYXV0byBpbmRleCA6IG1fY29kZXBvaW50c1RvSW5kaWNlc01hcC5nZXQoU3RyaW5n
KGJ1ZmZlciwgbGVuZ3RoKSkpCisgICAgICAgICAgICAgICAgICAgIGdseXBoU2V0LmFkZChpbmRl
eCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC02MTYsMjYgKzY1Miwx
MiBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkQ29kZXBvaW50UmFuZ2VzKGNvbnN0
IFVuaWNvZGVSYW5nZXMmIHVuaWNvZGVSYW5nZQogdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6
OmFkZENvZGVwb2ludHMoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBjb2RlcG9pbnRzLCBIYXNoU2V0
PEdseXBoPiYgZ2x5cGhTZXQpIGNvbnN0CiB7CiAgICAgZm9yIChhdXRvJiBjb2RlcG9pbnRTdHJp
bmcgOiBjb2RlcG9pbnRzKSB7Ci0gICAgICAgIGF1dG8gY29kZXBvaW50U3RyaW5nTGVuZ3RoID0g
Y29kZXBvaW50U3RyaW5nLmxlbmd0aCgpOwotICAgICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAg
ICAgd2hpbGUgKGkgPCBjb2RlcG9pbnRTdHJpbmdMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBDYW5vbmljYWxpemF0aW9uIG1pZ2h0IGJlIG5lY2Vzc2FyeQotICAgICAgICAgICAgVUNo
YXIzMiBjb2RlcG9pbnQ7Ci0gICAgICAgICAgICBpZiAoY29kZXBvaW50U3RyaW5nLmlzOEJpdCgp
KQotICAgICAgICAgICAgICAgIGNvZGVwb2ludCA9IGNvZGVwb2ludFN0cmluZy5jaGFyYWN0ZXJz
OCgpW2krK107Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgVTE2X05FWFQoY29k
ZXBvaW50U3RyaW5nLmNoYXJhY3RlcnMxNigpLCBpLCBjb2RlcG9pbnRTdHJpbmdMZW5ndGgsIGNv
ZGVwb2ludCk7Ci0KLSAgICAgICAgICAgIGlmICghY29kZXBvaW50IHx8IGNvZGVwb2ludCA+PSBz
dGQ6Om51bWVyaWNfbGltaXRzPENvZGVwb2ludD46Om1heCgpKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgYXV0byBpbmRleEl0ZXIgPSBtX2NvZGVwb2ludFRvSW5kZXhN
YXAuZmluZChjb2RlcG9pbnQpOwotICAgICAgICAgICAgaWYgKGluZGV4SXRlciAhPSBtX2NvZGVw
b2ludFRvSW5kZXhNYXAuZW5kKCkpCi0gICAgICAgICAgICAgICAgZ2x5cGhTZXQuYWRkKGluZGV4
SXRlci0+dmFsdWUpOwotICAgICAgICB9CisgICAgICAgIGZvciAoYXV0byBpbmRleCA6IG1fY29k
ZXBvaW50c1RvSW5kaWNlc01hcC5nZXQoY29kZXBvaW50U3RyaW5nKSkKKyAgICAgICAgICAgIGds
eXBoU2V0LmFkZChpbmRleCk7CiAgICAgfQogfQogCi12b2lkIFNWR1RvT1RGRm9udENvbnZlcnRl
cjo6YWRkR2x5cGhOYW1lcyhjb25zdCBIYXNoU2V0PFN0cmluZz4mIGdseXBoTmFtZXMsIEhhc2hT
ZXQ8dWludDE2X3Q+JiBnbHlwaFNldCkgY29uc3QKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVy
OjphZGRHbHlwaE5hbWVzKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgZ2x5cGhOYW1lcywgSGFzaFNl
dDxHbHlwaD4mIGdseXBoU2V0KSBjb25zdAogewogICAgIGZvciAoYXV0byYgZ2x5cGhOYW1lIDog
Z2x5cGhOYW1lcykgewogICAgICAgICBhdXRvIGluZGV4SXRlciA9IG1fZ2x5cGhOYW1lVG9JbmRl
eE1hcC5maW5kKGdseXBoTmFtZSk7CkBAIC02NjAsNyArNjgyLDcgQEAgYXV0byBTVkdUb09URkZv
bnRDb252ZXJ0ZXI6OmNvbXB1dGVLZXJuaW5nRGF0YShib29sIChUOjoqYnVpbGRLZXJuaW5nUGFp
cikoU1ZHS2UKICAgICAgICAgICAgIGFkZEdseXBoTmFtZXMoa2VybmluZ1BhaXIuZ2x5cGhOYW1l
MSwgZ2x5cGhTZXQxKTsKICAgICAgICAgICAgIGFkZEdseXBoTmFtZXMoa2VybmluZ1BhaXIuZ2x5
cGhOYW1lMiwgZ2x5cGhTZXQyKTsKICAgICAgICAgICAgIGFkZENvZGVwb2ludHMoa2VybmluZ1Bh
aXIudW5pY29kZU5hbWUxLCBnbHlwaFNldDEpOwotICAgICAgICAgICAgYWRkQ29kZXBvaW50cyhr
ZXJuaW5nUGFpci51bmljb2RlTmFtZTIsIGdseXBoU2V0MSk7CisgICAgICAgICAgICBhZGRDb2Rl
cG9pbnRzKGtlcm5pbmdQYWlyLnVuaWNvZGVOYW1lMiwgZ2x5cGhTZXQyKTsKIAogICAgICAgICAg
ICAgLy8gRklYTUU6IFVzZSB0YWJsZSBmb3JtYXQgMiBzbyB3ZSBkb24ndCBoYXZlIHRvIGFwcGVu
ZCBlYWNoIG9mIHRoZXNlIG9uZSBieSBvbmUKICAgICAgICAgICAgIGZvciAoYXV0byYgZ2x5cGgx
IDogZ2x5cGhTZXQxKSB7CkBAIC02NzQsNyArNjk2LDcgQEAgYXV0byBTVkdUb09URkZvbnRDb252
ZXJ0ZXI6OmNvbXB1dGVLZXJuaW5nRGF0YShib29sIChUOjoqYnVpbGRLZXJuaW5nUGFpcikoU1ZH
S2UKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zaXplX3QgU1ZHVG9PVEZGb250Q29udmVy
dGVyOjphcHBlbmRLRVJOU3VidGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQsIGJvb2wgKFQ6Oipi
dWlsZEtlcm5pbmdQYWlyKShTVkdLZXJuaW5nUGFpciYpIGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFn
ZSkgY29uc3QKK3NpemVfdCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEtFUk5TdWJ0YWJs
ZShib29sIChUOjoqYnVpbGRLZXJuaW5nUGFpcikoU1ZHS2VybmluZ1BhaXImKSBjb25zdCwgdWlu
dDE2X3QgY292ZXJhZ2UpCiB7CiAgICAgVmVjdG9yPEtlcm5pbmdEYXRhPiBrZXJuaW5nRGF0YSA9
IGNvbXB1dGVLZXJuaW5nRGF0YTxUPihidWlsZEtlcm5pbmdQYWlyKTsKICAgICBzdGQ6OnNvcnQo
a2VybmluZ0RhdGEuYmVnaW4oKSwga2VybmluZ0RhdGEuZW5kKCkpOwpAQCAtNjg0LDUxICs3MDYs
NTEgQEAgc2l6ZV90IFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kS0VSTlN1YnRhYmxlKFZl
Y3RvcjxjaGFyPiYgcmVzdWx0LCBib29sIChUOjoKICAgICAgICAgc2l6ZU9mS2VybmluZ0RhdGFU
YWJsZSA9IDE0OwogICAgIH0KIAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gVmVyc2lvbiBv
ZiBzdWJ0YWJsZQotICAgIHdyaXRlMTYocmVzdWx0LCBzaXplT2ZLZXJuaW5nRGF0YVRhYmxlKTsg
Ly8gTGVuZ3RoIG9mIHRoaXMgc3VidGFibGUKLSAgICB3cml0ZTE2KHJlc3VsdCwgY292ZXJhZ2Up
OyAvLyBUYWJsZSBjb3ZlcmFnZSBiaXRmaWVsZAorICAgIGFwcGVuZDE2KDApOyAvLyBWZXJzaW9u
IG9mIHN1YnRhYmxlCisgICAgYXBwZW5kMTYoc2l6ZU9mS2VybmluZ0RhdGFUYWJsZSk7IC8vIExl
bmd0aCBvZiB0aGlzIHN1YnRhYmxlCisgICAgYXBwZW5kMTYoY292ZXJhZ2UpOyAvLyBUYWJsZSBj
b3ZlcmFnZSBiaXRmaWVsZAogCiAgICAgdWludDE2X3Qgcm91bmRlZE51bUtlcm5pbmdQYWlycyA9
IHJvdW5kRG93blRvUG93ZXJPZlR3byhrZXJuaW5nRGF0YS5zaXplKCkpOwogCi0gICAgd3JpdGUx
NihyZXN1bHQsIGtlcm5pbmdEYXRhLnNpemUoKSk7Ci0gICAgd3JpdGUxNihyZXN1bHQsIHJvdW5k
ZWROdW1LZXJuaW5nUGFpcnMgKiA2KTsgLy8gc2VhcmNoUmFuZ2U6ICJUaGUgbGFyZ2VzdCBwb3dl
ciBvZiB0d28gbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBuUGFpcnMsIG11bHRp
cGxpZWQgYnkgdGhlIHNpemUgaW4gYnl0ZXMgb2YgYW4gZW50cnkgaW4gdGhlIHRhYmxlLiIKLSAg
ICB3cml0ZTE2KHJlc3VsdCwgaW50ZWdyYWxMb2cyKHJvdW5kZWROdW1LZXJuaW5nUGFpcnMpKTsg
Ly8gZW50cnlTZWxlY3RvcjogImxvZzIgb2YgdGhlIGxhcmdlc3QgcG93ZXIgb2YgdHdvIGxlc3Mg
dGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2YgblBhaXJzLiIKLSAgICB3cml0ZTE2KHJlc3Vs
dCwgKGtlcm5pbmdEYXRhLnNpemUoKSAtIHJvdW5kZWROdW1LZXJuaW5nUGFpcnMpICogNik7IC8v
IHJhbmdlU2hpZnQ6ICJUaGUgdmFsdWUgb2YgblBhaXJzIG1pbnVzIHRoZSBsYXJnZXN0IHBvd2Vy
IG9mIHR3byBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gblBhaXJzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
YW5kIHRoZW4gbXVsdGlwbGllZCBieSB0aGUgc2l6ZSBpbiBieXRlcyBvZiBhbiBlbnRyeSBpbiB0
aGUgdGFibGUuIgorICAgIGFwcGVuZDE2KGtlcm5pbmdEYXRhLnNpemUoKSk7CisgICAgYXBwZW5k
MTYocm91bmRlZE51bUtlcm5pbmdQYWlycyAqIDYpOyAvLyBzZWFyY2hSYW5nZTogIlRoZSBsYXJn
ZXN0IHBvd2VyIG9mIHR3byBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIG5QYWly
cywgbXVsdGlwbGllZCBieSB0aGUgc2l6ZSBpbiBieXRlcyBvZiBhbiBlbnRyeSBpbiB0aGUgdGFi
bGUuIgorICAgIGFwcGVuZDE2KGludGVncmFsTG9nMihyb3VuZGVkTnVtS2VybmluZ1BhaXJzKSk7
IC8vIGVudHJ5U2VsZWN0b3I6ICJsb2cyIG9mIHRoZSBsYXJnZXN0IHBvd2VyIG9mIHR3byBsZXNz
IHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIG5QYWlycy4iCisgICAgYXBwZW5kMTYoKGtl
cm5pbmdEYXRhLnNpemUoKSAtIHJvdW5kZWROdW1LZXJuaW5nUGFpcnMpICogNik7IC8vIHJhbmdl
U2hpZnQ6ICJUaGUgdmFsdWUgb2YgblBhaXJzIG1pbnVzIHRoZSBsYXJnZXN0IHBvd2VyIG9mIHR3
byBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gblBhaXJzLAorICAgICAgICAvLyBhbmQgdGhlbiBtdWx0
aXBsaWVkIGJ5IHRoZSBzaXplIGluIGJ5dGVzIG9mIGFuIGVudHJ5IGluIHRoZSB0YWJsZS4iCiAK
ICAgICBmb3IgKGF1dG8mIGtlcm5pbmdEYXRhIDoga2VybmluZ0RhdGEpIHsKLSAgICAgICAgd3Jp
dGUxNihyZXN1bHQsIGtlcm5pbmdEYXRhLmdseXBoMSk7Ci0gICAgICAgIHdyaXRlMTYocmVzdWx0
LCBrZXJuaW5nRGF0YS5nbHlwaDIpOwotICAgICAgICB3cml0ZTE2KHJlc3VsdCwga2VybmluZ0Rh
dGEuYWRqdXN0bWVudCk7CisgICAgICAgIGFwcGVuZDE2KGtlcm5pbmdEYXRhLmdseXBoMSk7Cisg
ICAgICAgIGFwcGVuZDE2KGtlcm5pbmdEYXRhLmdseXBoMik7CisgICAgICAgIGFwcGVuZDE2KGtl
cm5pbmdEYXRhLmFkanVzdG1lbnQpOwogICAgIH0KIAogICAgIHJldHVybiBzaXplT2ZLZXJuaW5n
RGF0YVRhYmxlOwogfQogCi12b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kS0VSTlRh
YmxlKFZlY3RvcjxjaGFyPiYgcmVzdWx0KSBjb25zdAordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0
ZXI6OmFwcGVuZEtFUk5UYWJsZSgpCiB7Ci0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBWZXJz
aW9uCi0gICAgd3JpdGUxNihyZXN1bHQsIDIpOyAvLyBOdW1iZXIgb2Ygc3VidGFibGVzCisgICAg
YXBwZW5kMTYoMCk7IC8vIFZlcnNpb24KKyAgICBhcHBlbmQxNigyKTsgLy8gTnVtYmVyIG9mIHN1
YnRhYmxlcwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIGF1dG8gc3VidGFibGVzT2Zmc2V0
ID0gcmVzdWx0LnNpemUoKTsKKyAgICBhdXRvIHN1YnRhYmxlc09mZnNldCA9IG1fcmVzdWx0LnNp
emUoKTsKICNlbmRpZgogCi0gICAgc2l6ZV90IHNpemVPZkhvcml6b250YWxTdWJ0YWJsZSA9IGFw
cGVuZEtFUk5TdWJ0YWJsZTxTVkdIS2VybkVsZW1lbnQ+KHJlc3VsdCwgJlNWR0hLZXJuRWxlbWVu
dDo6YnVpbGRIb3Jpem9udGFsS2VybmluZ1BhaXIsIDEpOwotICAgIEFTU0VSVF9VTlVTRUQoc2l6
ZU9mSG9yaXpvbnRhbFN1YnRhYmxlLCBzdWJ0YWJsZXNPZmZzZXQgKyBzaXplT2ZIb3Jpem9udGFs
U3VidGFibGUgPT0gcmVzdWx0LnNpemUoKSk7Ci0gICAgc2l6ZV90IHNpemVPZlZlcnRpY2FsU3Vi
dGFibGUgPSBhcHBlbmRLRVJOU3VidGFibGU8U1ZHVktlcm5FbGVtZW50PihyZXN1bHQsICZTVkdW
S2VybkVsZW1lbnQ6OmJ1aWxkVmVydGljYWxLZXJuaW5nUGFpciwgMCk7Ci0gICAgQVNTRVJUX1VO
VVNFRChzaXplT2ZWZXJ0aWNhbFN1YnRhYmxlLCBzdWJ0YWJsZXNPZmZzZXQgKyBzaXplT2ZIb3Jp
em9udGFsU3VidGFibGUgKyBzaXplT2ZWZXJ0aWNhbFN1YnRhYmxlID09IHJlc3VsdC5zaXplKCkp
OworICAgIHNpemVfdCBzaXplT2ZIb3Jpem9udGFsU3VidGFibGUgPSBhcHBlbmRLRVJOU3VidGFi
bGU8U1ZHSEtlcm5FbGVtZW50PigmU1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXJu
aW5nUGFpciwgMSk7CisgICAgQVNTRVJUX1VOVVNFRChzaXplT2ZIb3Jpem9udGFsU3VidGFibGUs
IHN1YnRhYmxlc09mZnNldCArIHNpemVPZkhvcml6b250YWxTdWJ0YWJsZSA9PSBtX3Jlc3VsdC5z
aXplKCkpOworICAgIHNpemVfdCBzaXplT2ZWZXJ0aWNhbFN1YnRhYmxlID0gYXBwZW5kS0VSTlN1
YnRhYmxlPFNWR1ZLZXJuRWxlbWVudD4oJlNWR1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtl
cm5pbmdQYWlyLCAwKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNpemVPZlZlcnRpY2FsU3VidGFibGUs
IHN1YnRhYmxlc09mZnNldCArIHNpemVPZkhvcml6b250YWxTdWJ0YWJsZSArIHNpemVPZlZlcnRp
Y2FsU3VidGFibGUgPT0gbV9yZXN1bHQuc2l6ZSgpKTsKIAogICAgIC8vIFdvcmsgYXJvdW5kIGEg
YnVnIGluIEFwcGxlJ3MgZm9udCBwYXJzZXIgYnkgYWRkaW5nIHNvbWUgcGFkZGluZyBieXRlcy4g
PHJkYXI6Ly9wcm9ibGVtLzE4NDAxOTAxPgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgKytp
KQotICAgICAgICByZXN1bHQuYXBwZW5kKDApOworICAgICAgICBtX3Jlc3VsdC5hcHBlbmQoMCk7
CiB9CiAKIHN0YXRpYyB2b2lkIHdyaXRlQ0ZGRW5jb2RlZE51bWJlcihWZWN0b3I8Y2hhcj4mIHZl
Y3RvciwgZmxvYXQgbnVtYmVyKQogewogICAgIGludCByYXcgPSBudW1iZXIgKiBwb3dmKDIsIDE2
KTsKICAgICB2ZWN0b3IuYXBwZW5kKC0xKTsgLy8gMHhGRgotICAgIHdyaXRlMzIodmVjdG9yLCBy
YXcpOworICAgIGFwcGVuZDMyKHZlY3RvciwgcmF3KTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIg
ckxpbmVUbyA9IDB4MDU7CkBAIC04MzUsNyArODU3LDcgQEAgcHJpdmF0ZToKIH07CiAKIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIFZlY3RvcjxjaGFyPiB0cmFuc2NvZGVHbHlwaFBhdGhz
KGZsb2F0IHdpZHRoLCBjb25zdCBUJiBnbHlwaEVsZW1lbnQsIEZsb2F0UmVjdCYgYm91bmRpbmdC
b3gpCitWZWN0b3I8Y2hhcj4gU1ZHVG9PVEZGb250Q29udmVydGVyOjp0cmFuc2NvZGVHbHlwaFBh
dGhzKGZsb2F0IHdpZHRoLCBjb25zdCBUJiBnbHlwaEVsZW1lbnQsIEZsb2F0UmVjdCYgYm91bmRp
bmdCb3gpIGNvbnN0CiB7CiAgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKICAgICBhdXRvJiBkQXR0
cmlidXRlID0gZ2x5cGhFbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmRBdHRyKTsK
QEAgLTg1MSwxMSArODczLDExIEBAIHN0YXRpYyBWZWN0b3I8Y2hhcj4gdHJhbnNjb2RlR2x5cGhQ
YXRocyhmbG9hdCB3aWR0aCwgY29uc3QgVCYgZ2x5cGhFbGVtZW50LCBGbG9hCiAgICAgLy8gRklY
TUU6IElmIHdlIGFyZSB2ZXJ0aWNhbCwgdXNlIHZlcnRfb3JpZ2luX3ggYW5kIHZlcnRfb3JpZ2lu
X3kKICAgICBib29sIG9rOwogICAgIGZsb2F0IGhvcml6b250YWxPcmlnaW5YID0gZ2x5cGhFbGVt
ZW50LmZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6Omhvcml6X29yaWdpbl94QXR0cikudG9GbG9h
dCgmb2spOwotICAgIGlmICghb2spCi0gICAgICAgIGhvcml6b250YWxPcmlnaW5YID0gMDsKKyAg
ICBpZiAoIW9rICYmIG1fZm9udEZhY2VFbGVtZW50KQorICAgICAgICBob3Jpem9udGFsT3JpZ2lu
WCA9IG1fZm9udEZhY2VFbGVtZW50LT5ob3Jpem9udGFsT3JpZ2luWCgpOwogICAgIGZsb2F0IGhv
cml6b250YWxPcmlnaW5ZID0gZ2x5cGhFbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6
Omhvcml6X29yaWdpbl95QXR0cikudG9GbG9hdCgmb2spOwotICAgIGlmICghb2spCi0gICAgICAg
IGhvcml6b250YWxPcmlnaW5ZID0gMDsKKyAgICBpZiAoIW9rICYmIG1fZm9udEZhY2VFbGVtZW50
KQorICAgICAgICBob3Jpem9udGFsT3JpZ2luWSA9IG1fZm9udEZhY2VFbGVtZW50LT5ob3Jpem9u
dGFsT3JpZ2luWSgpOwogCiAgICAgQ0ZGQnVpbGRlciBidWlsZGVyKHJlc3VsdCwgd2lkdGgsIEZs
b2F0UG9pbnQoaG9yaXpvbnRhbE9yaWdpblgsIGhvcml6b250YWxPcmlnaW5ZKSk7CiAgICAgU1ZH
UGF0aFN0cmluZ1NvdXJjZSBzb3VyY2UoZEF0dHJpYnV0ZSk7CkBAIC04NzYsMTkgKzg5OCwxOSBA
QCBzdGF0aWMgVmVjdG9yPGNoYXI+IHRyYW5zY29kZUdseXBoUGF0aHMoZmxvYXQgd2lkdGgsIGNv
bnN0IFQmIGdseXBoRWxlbWVudCwgRmxvYQogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXZv
aWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRHbHlwaERhdGEoY29uc3QgVmVjdG9yPGNo
YXI+JiBwYXRoLCBjb25zdCBUKiwgZmxvYXQgaG9yaXpvbnRhbEFkdmFuY2UsIGZsb2F0IHZlcnRp
Y2FsQWR2YW5jZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCwgQ29kZXBvaW50IGNvZGVw
b2ludCkKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRHbHlwaERhdGEoY29uc3Qg
VmVjdG9yPGNoYXI+JiBwYXRoLCBjb25zdCBUKiwgZmxvYXQgaG9yaXpvbnRhbEFkdmFuY2UsIGZs
b2F0IHZlcnRpY2FsQWR2YW5jZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCwgY29uc3Qg
Q29kZXBvaW50cyYgY29kZXBvaW50cykKIHsKLSAgICBtX2dseXBocy5hcHBlbmQoR2x5cGhEYXRh
KHBhdGgsIG51bGxwdHIsIGhvcml6b250YWxBZHZhbmNlLCB2ZXJ0aWNhbEFkdmFuY2UsIGJvdW5k
aW5nQm94LCBjb2RlcG9pbnQpKTsKKyAgICBtX2dseXBocy5hcHBlbmQoR2x5cGhEYXRhKHBhdGgs
IG51bGxwdHIsIGhvcml6b250YWxBZHZhbmNlLCB2ZXJ0aWNhbEFkdmFuY2UsIGJvdW5kaW5nQm94
LCBjb2RlcG9pbnRzKSk7CiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lkIFNWR1RvT1RGRm9udENvbnZl
cnRlcjo6YXBwZW5kR2x5cGhEYXRhKGNvbnN0IFZlY3RvcjxjaGFyPiYgcGF0aCwgY29uc3QgU1ZH
R2x5cGhFbGVtZW50KiBlbGVtZW50LCBmbG9hdCBob3Jpem9udGFsQWR2YW5jZSwgZmxvYXQgdmVy
dGljYWxBZHZhbmNlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBDb2RlcG9pbnQgY29k
ZXBvaW50KQordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEdseXBoRGF0YShjb25z
dCBWZWN0b3I8Y2hhcj4mIHBhdGgsIGNvbnN0IFNWR0dseXBoRWxlbWVudCogZWxlbWVudCwgZmxv
YXQgaG9yaXpvbnRhbEFkdmFuY2UsIGZsb2F0IHZlcnRpY2FsQWR2YW5jZSwgY29uc3QgRmxvYXRS
ZWN0JiBib3VuZGluZ0JveCwgY29uc3QgQ29kZXBvaW50cyYgY29kZXBvaW50cykKIHsKLSAgICBt
X2dseXBocy5hcHBlbmQoR2x5cGhEYXRhKHBhdGgsIGVsZW1lbnQsIGhvcml6b250YWxBZHZhbmNl
LCB2ZXJ0aWNhbEFkdmFuY2UsIGJvdW5kaW5nQm94LCBjb2RlcG9pbnQpKTsKKyAgICBtX2dseXBo
cy5hcHBlbmQoR2x5cGhEYXRhKHBhdGgsIGVsZW1lbnQsIGhvcml6b250YWxBZHZhbmNlLCB2ZXJ0
aWNhbEFkdmFuY2UsIGJvdW5kaW5nQm94LCBjb2RlcG9pbnRzKSk7CiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgotdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OnByb2Nlc3NHbHlwaEVsZW1l
bnQoY29uc3QgVCYgZWxlbWVudCwgZmxvYXQgZGVmYXVsdEhvcml6b250YWxBZHZhbmNlLCBmbG9h
dCBkZWZhdWx0VmVydGljYWxBZHZhbmNlLCBDb2RlcG9pbnQgY29kZXBvaW50LCBib29sJiBpbml0
aWFsR2x5cGgpCit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6cHJvY2Vzc0dseXBoRWxlbWVu
dChjb25zdCBUJiBlbGVtZW50LCBmbG9hdCBkZWZhdWx0SG9yaXpvbnRhbEFkdmFuY2UsIGZsb2F0
IGRlZmF1bHRWZXJ0aWNhbEFkdmFuY2UsIGNvbnN0IENvZGVwb2ludHMmIGNvZGVwb2ludHMsIGJv
b2wmIGluaXRpYWxHbHlwaCkKIHsKICAgICBib29sIG9rOwogICAgIGZsb2F0IGhvcml6b250YWxB
ZHZhbmNlID0gZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpob3Jpel9hZHZfeEF0
dHIpLnRvRmxvYXQoJm9rKTsKQEAgLTkwOSw3ICs5MzEsMzEgQEAgdm9pZCBTVkdUb09URkZvbnRD
b252ZXJ0ZXI6OnByb2Nlc3NHbHlwaEVsZW1lbnQoY29uc3QgVCYgZWxlbWVudCwgZmxvYXQgZGVm
YXVsdEgKICAgICBtX21pblJpZ2h0U2lkZUJlYXJpbmcgPSBzdGQ6Om1pbihtX21pblJpZ2h0U2lk
ZUJlYXJpbmcsIGhvcml6b250YWxBZHZhbmNlIC0gZ2x5cGhCb3VuZGluZ0JveC5tYXhYKCkpOwog
ICAgIGluaXRpYWxHbHlwaCA9IGZhbHNlOwogCi0gICAgYXBwZW5kR2x5cGhEYXRhKHBhdGgsICZl
bGVtZW50LCBob3Jpem9udGFsQWR2YW5jZSwgdmVydGljYWxBZHZhbmNlLCBnbHlwaEJvdW5kaW5n
Qm94LCBjb2RlcG9pbnQpOworICAgIGFwcGVuZEdseXBoRGF0YShwYXRoLCAmZWxlbWVudCwgaG9y
aXpvbnRhbEFkdmFuY2UsIHZlcnRpY2FsQWR2YW5jZSwgZ2x5cGhCb3VuZGluZ0JveCwgY29kZXBv
aW50cyk7Cit9CisKK2Jvb2wgU1ZHVG9PVEZGb250Q29udmVydGVyOjpjb21wYXJlQ29kZXBvaW50
c0xleGljb2dyYXBoaWNhbGx5KGNvbnN0IEdseXBoRGF0YSYgZGF0YTEsIGNvbnN0IEdseXBoRGF0
YSYgZGF0YTIpCit7CisgICAgdW5zaWduZWQgaTEgPSAwLCBpMiA9IDA7CisgICAgVUNoYXIzMiBj
b2RlcG9pbnQxLCBjb2RlcG9pbnQyOworICAgIHVuc2lnbmVkIGxlbmd0aDEgPSBkYXRhMS5jb2Rl
cG9pbnRzLmxlbmd0aCgpLCBsZW5ndGgyID0gZGF0YTIuY29kZXBvaW50cy5sZW5ndGgoKTsKKyAg
ICBmb3IgKCA7IGkxIDwgbGVuZ3RoMSAmJiBpMiA8IGxlbmd0aDI7ICkgeworICAgICAgICBpZiAo
ZGF0YTEuY29kZXBvaW50cy5pczhCaXQoKSkKKyAgICAgICAgICAgIGNvZGVwb2ludDEgPSBkYXRh
MS5jb2RlcG9pbnRzW2kxKytdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBVMTZfTkVYVChk
YXRhMS5jb2RlcG9pbnRzLmNoYXJhY3RlcnMxNigpLCBpMSwgbGVuZ3RoMSwgY29kZXBvaW50MSk7
CisKKyAgICAgICAgaWYgKGRhdGEyLmNvZGVwb2ludHMuaXM4Qml0KCkpCisgICAgICAgICAgICBj
b2RlcG9pbnQyID0gZGF0YTEuY29kZXBvaW50c1tpMisrXTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgVTE2X05FWFQoZGF0YTIuY29kZXBvaW50cy5jaGFyYWN0ZXJzMTYoKSwgaTIsIGxlbmd0
aDIsIGNvZGVwb2ludDIpOworCisgICAgICAgIGlmIChjb2RlcG9pbnQxIDwgY29kZXBvaW50MikK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoY29kZXBvaW50MSA+IGNvZGVw
b2ludDIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBsZW5n
dGgxIDwgbGVuZ3RoMjsKIH0KIAogU1ZHVG9PVEZGb250Q29udmVydGVyOjpTVkdUb09URkZvbnRD
b252ZXJ0ZXIoY29uc3QgU1ZHRm9udEVsZW1lbnQmIGZvbnRFbGVtZW50KQpAQCAtOTMyLDcgKzk3
OCw3IEBAIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6U1ZHVG9PVEZGb250Q29udmVydGVyKGNvbnN0
IFNWR0ZvbnRFbGVtZW50JiBmb250RWxlbWVudCkKICAgICAgICAgbV91bml0c1BlckVtID0gbV9m
b250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKTsKIAogICAgIGlmIChtX21pc3NpbmdHbHlwaEVs
ZW1lbnQpCi0gICAgICAgIHByb2Nlc3NHbHlwaEVsZW1lbnQoKm1fbWlzc2luZ0dseXBoRWxlbWVu
dCwgZGVmYXVsdEhvcml6b250YWxBZHZhbmNlLCBkZWZhdWx0VmVydGljYWxBZHZhbmNlLCAwLCBp
bml0aWFsR2x5cGgpOworICAgICAgICBwcm9jZXNzR2x5cGhFbGVtZW50KCptX21pc3NpbmdHbHlw
aEVsZW1lbnQsIGRlZmF1bHRIb3Jpem9udGFsQWR2YW5jZSwgZGVmYXVsdFZlcnRpY2FsQWR2YW5j
ZSwgQ29kZXBvaW50cygpLCBpbml0aWFsR2x5cGgpOwogICAgIGVsc2UgewogICAgICAgICBWZWN0
b3I8Y2hhcj4gbm90ZGVmQ2hhclN0cmluZzsKICAgICAgICAgd3JpdGVDRkZFbmNvZGVkTnVtYmVy
KG5vdGRlZkNoYXJTdHJpbmcsIG1fdW5pdHNQZXJFbSk7CkBAIC05NDAsMTQgKzk4NiwxNCBAQCBT
VkdUb09URkZvbnRDb252ZXJ0ZXI6OlNWR1RvT1RGRm9udENvbnZlcnRlcihjb25zdCBTVkdGb250
RWxlbWVudCYgZm9udEVsZW1lbnQpCiAgICAgICAgIHdyaXRlQ0ZGRW5jb2RlZE51bWJlcihub3Rk
ZWZDaGFyU3RyaW5nLCAwKTsKICAgICAgICAgbm90ZGVmQ2hhclN0cmluZy5hcHBlbmQock1vdmVU
byk7CiAgICAgICAgIG5vdGRlZkNoYXJTdHJpbmcuYXBwZW5kKGVuZENoYXIpOwotICAgICAgICBt
X2dseXBocy5hcHBlbmQoR2x5cGhEYXRhKG5vdGRlZkNoYXJTdHJpbmcsIG51bGxwdHIsIG1fdW5p
dHNQZXJFbSwgbV91bml0c1BlckVtLCBGbG9hdFJlY3QoKSwgMCkpOworICAgICAgICBtX2dseXBo
cy5hcHBlbmQoR2x5cGhEYXRhKG5vdGRlZkNoYXJTdHJpbmcsIG51bGxwdHIsIG1fdW5pdHNQZXJF
bSwgbV91bml0c1BlckVtLCBGbG9hdFJlY3QoKSwgQ29kZXBvaW50cygpKSk7CiAgICAgfQogCiAg
ICAgZm9yIChhdXRvJiBnbHlwaEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdHbHlwaEVsZW1l
bnQ+KG1fZm9udEVsZW1lbnQpKSB7CiAgICAgICAgIGF1dG8mIHVuaWNvZGVBdHRyaWJ1dGUgPSBn
bHlwaEVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6dW5pY29kZUF0dHIpOwogICAg
ICAgICAvLyBPbmx5IHN1cHBvcnQgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIHcvbyBsaWdhdHVy
ZXMgZm9yIG5vdwotICAgICAgICBpZiAodW5pY29kZUF0dHJpYnV0ZS5sZW5ndGgoKSA9PSAxKQot
ICAgICAgICAgICAgcHJvY2Vzc0dseXBoRWxlbWVudChnbHlwaEVsZW1lbnQsIGRlZmF1bHRIb3Jp
em9udGFsQWR2YW5jZSwgZGVmYXVsdFZlcnRpY2FsQWR2YW5jZSwgdW5pY29kZUF0dHJpYnV0ZVsw
XSwgaW5pdGlhbEdseXBoKTsKKyAgICAgICAgaWYgKCF1bmljb2RlQXR0cmlidXRlLmlzRW1wdHko
KSkgLy8gSWYgd2UgY2FuIG5ldmVyIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBnbHlwaCwgaWdub3Jl
IGl0IGNvbXBsZXRlbHkKKyAgICAgICAgICAgIHByb2Nlc3NHbHlwaEVsZW1lbnQoZ2x5cGhFbGVt
ZW50LCBkZWZhdWx0SG9yaXpvbnRhbEFkdmFuY2UsIGRlZmF1bHRWZXJ0aWNhbEFkdmFuY2UsIHVu
aWNvZGVBdHRyaWJ1dGUsIGluaXRpYWxHbHlwaCk7CiAgICAgfQogCiAgICAgaWYgKG1fZ2x5cGhz
LnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8R2x5cGg+OjptYXgoKSkgewpAQCAtOTU2LDE5
ICsxMDAyLDE3IEBAIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6U1ZHVG9PVEZGb250Q29udmVydGVy
KGNvbnN0IFNWR0ZvbnRFbGVtZW50JiBmb250RWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIHN0ZDo6c29ydChtX2dseXBocy5iZWdpbigpLCBtX2dseXBocy5lbmQoKSwgW10o
Y29uc3QgR2x5cGhEYXRhJiBkYXRhMSwgY29uc3QgR2x5cGhEYXRhJiBkYXRhMikgewotICAgICAg
ICByZXR1cm4gZGF0YTEuY29kZXBvaW50IDwgZGF0YTIuY29kZXBvaW50OwotICAgIH0pOworICAg
IHN0ZDo6c29ydChtX2dseXBocy5iZWdpbigpLCBtX2dseXBocy5lbmQoKSwgJmNvbXBhcmVDb2Rl
cG9pbnRzTGV4aWNvZ3JhcGhpY2FsbHkpOwogCiAgICAgZm9yIChHbHlwaCBpID0gMDsgaSA8IG1f
Z2x5cGhzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEdseXBoRGF0YSYgZ2x5cGggPSBtX2dseXBo
c1tpXTsKICAgICAgICAgaWYgKGdseXBoLmdseXBoRWxlbWVudCkgewogICAgICAgICAgICAgYXV0
byYgZ2x5cGhOYW1lID0gZ2x5cGguZ2x5cGhFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFNWR05h
bWVzOjpnbHlwaF9uYW1lQXR0cik7Ci0gICAgICAgICAgICBpZiAoIWdseXBoTmFtZS5pc0VtcHR5
KCkpCisgICAgICAgICAgICBpZiAoIWdseXBoTmFtZS5pc051bGwoKSkKICAgICAgICAgICAgICAg
ICBtX2dseXBoTmFtZVRvSW5kZXhNYXAuYWRkKGdseXBoTmFtZSwgaSk7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKGdseXBoLmNvZGVwb2ludCkKLSAgICAgICAgICAgIG1fY29kZXBvaW50VG9JbmRl
eE1hcC5hZGQoZ2x5cGguY29kZXBvaW50LCBpKTsKKyAgICAgICAgaWYgKCFnbHlwaC5jb2RlcG9p
bnRzLmlzTnVsbCgpKQorICAgICAgICAgICAgbV9jb2RlcG9pbnRzVG9JbmRpY2VzTWFwLmFkZChn
bHlwaC5jb2RlcG9pbnRzLCBWZWN0b3I8R2x5cGg+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQo
aSk7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IEhhbmRsZSBjb21tYXMKQEAgLTEwMDMsOTQgKzEw
NDcsOTIgQEAgc3RhdGljIGlubGluZSBib29sIGlzRm91ckJ5dGVBbGlnbmVkKHNpemVfdCB4KQog
ICAgIHJldHVybiAhKHggJiBzaXplb2YodWludDMyX3QpLTEpOwogfQogCi1zdGF0aWMgdWludDMy
X3QgY2FsY3VsYXRlQ2hlY2tzdW0oY29uc3QgVmVjdG9yPGNoYXI+JiB0YWJsZSwgc2l6ZV90IHN0
YXJ0aW5nT2Zmc2V0LCBzaXplX3QgZW5kaW5nT2Zmc2V0KQordWludDMyX3QgU1ZHVG9PVEZGb250
Q29udmVydGVyOjpjYWxjdWxhdGVDaGVja3N1bShzaXplX3Qgc3RhcnRpbmdPZmZzZXQsIHNpemVf
dCBlbmRpbmdPZmZzZXQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzRm91ckJ5dGVBbGlnbmVkKGVu
ZGluZ09mZnNldCAtIHN0YXJ0aW5nT2Zmc2V0KSk7CiAgICAgdWludDMyX3Qgc3VtID0gMDsKICAg
ICBmb3IgKDsgc3RhcnRpbmdPZmZzZXQgPCBlbmRpbmdPZmZzZXQ7IHN0YXJ0aW5nT2Zmc2V0ICs9
IDQpIHsKICAgICAgICAgLy8gVGhlIHNwZWMgaXMgdW5jbGVhciB3aGV0aGVyIHRoaXMgaXMgYSBs
aXR0bGUtZW5kaWFuIHN1bSBvciBhIGJpZy1lbmRpYW4gc3VtLiBDaG9vc2UgbGl0dGxlIGVuZGlh
bi4KLSAgICAgICAgc3VtICs9IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih0YWJsZVtzdGFy
dGluZ09mZnNldCArIDNdKSA8PCAyNCkKLSAgICAgICAgICAgIHwgKHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KHRhYmxlW3N0YXJ0aW5nT2Zmc2V0ICsgMl0pIDw8IDE2KQotICAgICAgICAgICAg
fCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odGFibGVbc3RhcnRpbmdPZmZzZXQgKyAxXSkg
PDwgOCkKLSAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odGFibGVbc3Rh
cnRpbmdPZmZzZXRdKTsKKyAgICAgICAgc3VtICs9IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PihtX3Jlc3VsdFtzdGFydGluZ09mZnNldCArIDNdKSA8PCAyNCkKKyAgICAgICAgICAgIHwgKHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KG1fcmVzdWx0W3N0YXJ0aW5nT2Zmc2V0ICsgMl0pIDw8
IDE2KQorICAgICAgICAgICAgfCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obV9yZXN1bHRb
c3RhcnRpbmdPZmZzZXQgKyAxXSkgPDwgOCkKKyAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4obV9yZXN1bHRbc3RhcnRpbmdPZmZzZXRdKTsKICAgICB9CiAgICAgcmV0dXJu
IHN1bTsKIH0KIAotdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFRhYmxlKGNvbnN0
IGNoYXIgaWRlbnRpZmllcls0XSwgVmVjdG9yPGNoYXI+JiBvdXRwdXQsIEZvbnRBcHBlbmRpbmdG
dW5jdGlvbiBhcHBlbmRpbmdGdW5jdGlvbikKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjph
cHBlbmRUYWJsZShjb25zdCBjaGFyIGlkZW50aWZpZXJbNF0sIEZvbnRBcHBlbmRpbmdGdW5jdGlv
biBhcHBlbmRpbmdGdW5jdGlvbikKIHsKLSAgICBzaXplX3Qgb2Zmc2V0ID0gb3V0cHV0LnNpemUo
KTsKKyAgICBzaXplX3Qgb2Zmc2V0ID0gbV9yZXN1bHQuc2l6ZSgpOwogICAgIEFTU0VSVChpc0Zv
dXJCeXRlQWxpZ25lZChvZmZzZXQpKTsKLSAgICAodGhpcy0+KmFwcGVuZGluZ0Z1bmN0aW9uKShv
dXRwdXQpOwotICAgIHNpemVfdCB1bnBhZGRlZFNpemUgPSBvdXRwdXQuc2l6ZSgpIC0gb2Zmc2V0
OwotICAgIHdoaWxlICghaXNGb3VyQnl0ZUFsaWduZWQob3V0cHV0LnNpemUoKSkpCi0gICAgICAg
IG91dHB1dC5hcHBlbmQoMCk7Ci0gICAgQVNTRVJUKGlzRm91ckJ5dGVBbGlnbmVkKG91dHB1dC5z
aXplKCkpKTsKKyAgICAodGhpcy0+KmFwcGVuZGluZ0Z1bmN0aW9uKSgpOworICAgIHNpemVfdCB1
bnBhZGRlZFNpemUgPSBtX3Jlc3VsdC5zaXplKCkgLSBvZmZzZXQ7CisgICAgd2hpbGUgKCFpc0Zv
dXJCeXRlQWxpZ25lZChtX3Jlc3VsdC5zaXplKCkpKQorICAgICAgICBtX3Jlc3VsdC5hcHBlbmQo
MCk7CisgICAgQVNTRVJUKGlzRm91ckJ5dGVBbGlnbmVkKG1fcmVzdWx0LnNpemUoKSkpOwogICAg
IHNpemVfdCBkaXJlY3RvcnlFbnRyeU9mZnNldCA9IGtTTkZUSGVhZGVyU2l6ZSArIG1fdGFibGVz
QXBwZW5kZWRDb3VudCAqIGtEaXJlY3RvcnlFbnRyeVNpemU7Ci0gICAgb3V0cHV0W2RpcmVjdG9y
eUVudHJ5T2Zmc2V0XSA9IGlkZW50aWZpZXJbMF07Ci0gICAgb3V0cHV0W2RpcmVjdG9yeUVudHJ5
T2Zmc2V0ICsgMV0gPSBpZGVudGlmaWVyWzFdOwotICAgIG91dHB1dFtkaXJlY3RvcnlFbnRyeU9m
ZnNldCArIDJdID0gaWRlbnRpZmllclsyXTsKLSAgICBvdXRwdXRbZGlyZWN0b3J5RW50cnlPZmZz
ZXQgKyAzXSA9IGlkZW50aWZpZXJbM107Ci0gICAgb3ZlcndyaXRlMzIob3V0cHV0LCBkaXJlY3Rv
cnlFbnRyeU9mZnNldCArIDQsIGNhbGN1bGF0ZUNoZWNrc3VtKG91dHB1dCwgb2Zmc2V0LCBvdXRw
dXQuc2l6ZSgpKSk7Ci0gICAgb3ZlcndyaXRlMzIob3V0cHV0LCBkaXJlY3RvcnlFbnRyeU9mZnNl
dCArIDgsIG9mZnNldCk7Ci0gICAgb3ZlcndyaXRlMzIob3V0cHV0LCBkaXJlY3RvcnlFbnRyeU9m
ZnNldCArIDEyLCB1bnBhZGRlZFNpemUpOworICAgIG1fcmVzdWx0W2RpcmVjdG9yeUVudHJ5T2Zm
c2V0XSA9IGlkZW50aWZpZXJbMF07CisgICAgbV9yZXN1bHRbZGlyZWN0b3J5RW50cnlPZmZzZXQg
KyAxXSA9IGlkZW50aWZpZXJbMV07CisgICAgbV9yZXN1bHRbZGlyZWN0b3J5RW50cnlPZmZzZXQg
KyAyXSA9IGlkZW50aWZpZXJbMl07CisgICAgbV9yZXN1bHRbZGlyZWN0b3J5RW50cnlPZmZzZXQg
KyAzXSA9IGlkZW50aWZpZXJbM107CisgICAgb3ZlcndyaXRlMzIoZGlyZWN0b3J5RW50cnlPZmZz
ZXQgKyA0LCBjYWxjdWxhdGVDaGVja3N1bShvZmZzZXQsIG1fcmVzdWx0LnNpemUoKSkpOworICAg
IG92ZXJ3cml0ZTMyKGRpcmVjdG9yeUVudHJ5T2Zmc2V0ICsgOCwgb2Zmc2V0KTsKKyAgICBvdmVy
d3JpdGUzMihkaXJlY3RvcnlFbnRyeU9mZnNldCArIDEyLCB1bnBhZGRlZFNpemUpOwogICAgICsr
bV90YWJsZXNBcHBlbmRlZENvdW50OwogfQogCi1WZWN0b3I8Y2hhcj4gU1ZHVG9PVEZGb250Q29u
dmVydGVyOjpjb252ZXJ0U1ZHVG9PVEZGb250KCkKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVy
Ojpjb252ZXJ0U1ZHVG9PVEZGb250KCkKIHsKLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwogICAg
IGlmICghbV9nbHlwaHMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBy
ZXR1cm47CiAKICAgICB1aW50MTZfdCBudW1UYWJsZXMgPSAxMzsKICAgICB1aW50MTZfdCByb3Vu
ZGVkTnVtVGFibGVzID0gcm91bmREb3duVG9Qb3dlck9mVHdvKG51bVRhYmxlcyk7CiAgICAgdWlu
dDE2X3Qgc2VhcmNoUmFuZ2UgPSByb3VuZGVkTnVtVGFibGVzICogMTY7IC8vIHNlYXJjaFJhbmdl
OiAiKE1heGltdW0gcG93ZXIgb2YgMiA8PSBudW1UYWJsZXMpIHggMTYuIgogCi0gICAgcmVzdWx0
LmFwcGVuZCgnTycpOwotICAgIHJlc3VsdC5hcHBlbmQoJ1QnKTsKLSAgICByZXN1bHQuYXBwZW5k
KCdUJyk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnTycpOwotICAgIHdyaXRlMTYocmVzdWx0LCBudW1U
YWJsZXMpOwotICAgIHdyaXRlMTYocmVzdWx0LCBzZWFyY2hSYW5nZSk7Ci0gICAgd3JpdGUxNihy
ZXN1bHQsIGludGVncmFsTG9nMihyb3VuZGVkTnVtVGFibGVzKSk7IC8vIGVudHJ5U2VsZWN0b3I6
ICJMb2cyKG1heGltdW0gcG93ZXIgb2YgMiA8PSBudW1UYWJsZXMpLiIKLSAgICB3cml0ZTE2KHJl
c3VsdCwgbnVtVGFibGVzICogMTYgLSBzZWFyY2hSYW5nZSk7IC8vIHJhbmdlU2hpZnQ6ICJOdW1U
YWJsZXMgeCAxNi1zZWFyY2hSYW5nZS4iCisgICAgbV9yZXN1bHQuYXBwZW5kKCdPJyk7CisgICAg
bV9yZXN1bHQuYXBwZW5kKCdUJyk7CisgICAgbV9yZXN1bHQuYXBwZW5kKCdUJyk7CisgICAgbV9y
ZXN1bHQuYXBwZW5kKCdPJyk7CisgICAgYXBwZW5kMTYobnVtVGFibGVzKTsKKyAgICBhcHBlbmQx
NihzZWFyY2hSYW5nZSk7CisgICAgYXBwZW5kMTYoaW50ZWdyYWxMb2cyKHJvdW5kZWROdW1UYWJs
ZXMpKTsgLy8gZW50cnlTZWxlY3RvcjogIkxvZzIobWF4aW11bSBwb3dlciBvZiAyIDw9IG51bVRh
YmxlcykuIgorICAgIGFwcGVuZDE2KG51bVRhYmxlcyAqIDE2IC0gc2VhcmNoUmFuZ2UpOyAvLyBy
YW5nZVNoaWZ0OiAiTnVtVGFibGVzIHggMTYtc2VhcmNoUmFuZ2UuIgogCi0gICAgQVNTRVJUKHJl
c3VsdC5zaXplKCkgPT0ga1NORlRIZWFkZXJTaXplKTsKKyAgICBBU1NFUlQobV9yZXN1bHQuc2l6
ZSgpID09IGtTTkZUSGVhZGVyU2l6ZSk7CiAKICAgICAvLyBMZWF2ZSBzcGFjZSBmb3IgdGhlIERp
cmVjdG9yeSBFbnRyaWVzCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrRGlyZWN0b3J5RW50
cnlTaXplICogbnVtVGFibGVzOyArK2kpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoMCk7Ci0KLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdGFibGVzLCBsaWtlIHZoZWEgYW5kIHZtdHggKGFu
ZCBrZXJuISkKLSAgICBhcHBlbmRUYWJsZSgiQ0ZGICIsIHJlc3VsdCwgJlNWR1RvT1RGRm9udENv
bnZlcnRlcjo6YXBwZW5kQ0ZGVGFibGUpOwotICAgIGFwcGVuZFRhYmxlKCJPUy8yIiwgcmVzdWx0
LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRPUzJUYWJsZSk7Ci0gICAgYXBwZW5kVGFi
bGUoIlZPUkciLCByZXN1bHQsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFZPUkdUYWJs
ZSk7Ci0gICAgYXBwZW5kVGFibGUoImNtYXAiLCByZXN1bHQsICZTVkdUb09URkZvbnRDb252ZXJ0
ZXI6OmFwcGVuZENNQVBUYWJsZSk7Ci0gICAgYXV0byBoZWFkVGFibGVPZmZzZXQgPSByZXN1bHQu
c2l6ZSgpOwotICAgIGFwcGVuZFRhYmxlKCJoZWFkIiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29u
dmVydGVyOjphcHBlbmRIRUFEVGFibGUpOwotICAgIGFwcGVuZFRhYmxlKCJoaGVhIiwgcmVzdWx0
LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRISEVBVGFibGUpOwotICAgIGFwcGVuZFRh
YmxlKCJobXR4IiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRITVRYVGFi
bGUpOwotICAgIGFwcGVuZFRhYmxlKCJrZXJuIiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29udmVy
dGVyOjphcHBlbmRLRVJOVGFibGUpOwotICAgIGFwcGVuZFRhYmxlKCJtYXhwIiwgcmVzdWx0LCAm
U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRNQVhQVGFibGUpOwotICAgIGFwcGVuZFRhYmxl
KCJuYW1lIiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmROQU1FVGFibGUp
OwotICAgIGFwcGVuZFRhYmxlKCJwb3N0IiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29udmVydGVy
OjphcHBlbmRQT1NUVGFibGUpOwotICAgIGFwcGVuZFRhYmxlKCJ2aGVhIiwgcmVzdWx0LCAmU1ZH
VG9PVEZGb250Q29udmVydGVyOjphcHBlbmRWSEVBVGFibGUpOwotICAgIGFwcGVuZFRhYmxlKCJ2
bXR4IiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRWTVRYVGFibGUpOwor
ICAgICAgICBtX3Jlc3VsdC5hcHBlbmQoMCk7CisKKyAgICBhcHBlbmRUYWJsZSgiQ0ZGICIsICZT
VkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZENGRlRhYmxlKTsKKyAgICBhcHBlbmRUYWJsZSgi
T1MvMiIsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZE9TMlRhYmxlKTsKKyAgICBhcHBl
bmRUYWJsZSgiVk9SRyIsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFZPUkdUYWJsZSk7
CisgICAgYXBwZW5kVGFibGUoImNtYXAiLCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRD
TUFQVGFibGUpOworICAgIGF1dG8gaGVhZFRhYmxlT2Zmc2V0ID0gbV9yZXN1bHQuc2l6ZSgpOwor
ICAgIGFwcGVuZFRhYmxlKCJoZWFkIiwgJlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kSEVB
RFRhYmxlKTsKKyAgICBhcHBlbmRUYWJsZSgiaGhlYSIsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6
OmFwcGVuZEhIRUFUYWJsZSk7CisgICAgYXBwZW5kVGFibGUoImhtdHgiLCAmU1ZHVG9PVEZGb250
Q29udmVydGVyOjphcHBlbmRITVRYVGFibGUpOworICAgIGFwcGVuZFRhYmxlKCJrZXJuIiwgJlNW
R1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kS0VSTlRhYmxlKTsKKyAgICBhcHBlbmRUYWJsZSgi
bWF4cCIsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZE1BWFBUYWJsZSk7CisgICAgYXBw
ZW5kVGFibGUoIm5hbWUiLCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmROQU1FVGFibGUp
OworICAgIGFwcGVuZFRhYmxlKCJwb3N0IiwgJlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5k
UE9TVFRhYmxlKTsKKyAgICBhcHBlbmRUYWJsZSgidmhlYSIsICZTVkdUb09URkZvbnRDb252ZXJ0
ZXI6OmFwcGVuZFZIRUFUYWJsZSk7CisgICAgYXBwZW5kVGFibGUoInZtdHgiLCAmU1ZHVG9PVEZG
b250Q29udmVydGVyOjphcHBlbmRWTVRYVGFibGUpOwogCiAgICAgQVNTRVJUKG51bVRhYmxlcyA9
PSBtX3RhYmxlc0FwcGVuZGVkQ291bnQpOwogCiAgICAgLy8gY2hlY2tTdW1BZGp1c3RtZW50OiAi
VG8gY29tcHV0ZTogc2V0IGl0IHRvIDAsIGNhbGN1bGF0ZSB0aGUgY2hlY2tzdW0gZm9yIHRoZSAn
aGVhZCcgdGFibGUgYW5kIHB1dCBpdCBpbiB0aGUgdGFibGUgZGlyZWN0b3J5LAogICAgIC8vIHN1
bSB0aGUgZW50aXJlIGZvbnQgYXMgdWludDMyLCB0aGVuIHN0b3JlIEIxQjBBRkJBIC0gc3VtLiBU
aGUgY2hlY2tzdW0gZm9yIHRoZSAnaGVhZCcgdGFibGUgd2lsbCBub3cgYmUgd3JvbmcuIFRoYXQg
aXMgT0suIgotICAgIHVpbnQzMl90IGNoZWNrc3VtQWRqdXN0bWVudCA9IDB4QjFCMEFGQkFVIC0g
Y2FsY3VsYXRlQ2hlY2tzdW0ocmVzdWx0LCAwLCByZXN1bHQuc2l6ZSgpKTsKLSAgICBvdmVyd3Jp
dGUzMihyZXN1bHQsIGhlYWRUYWJsZU9mZnNldCArIDgsIGNoZWNrc3VtQWRqdXN0bWVudCk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OworICAgIHVpbnQzMl90IGNoZWNrc3VtQWRqdXN0bWVudCA9IDB4
QjFCMEFGQkFVIC0gY2FsY3VsYXRlQ2hlY2tzdW0oMCwgbV9yZXN1bHQuc2l6ZSgpKTsKKyAgICBv
dmVyd3JpdGUzMihoZWFkVGFibGVPZmZzZXQgKyA4LCBjaGVja3N1bUFkanVzdG1lbnQpOwogfQog
CiBWZWN0b3I8Y2hhcj4gY29udmVydFNWR1RvT1RGRm9udChjb25zdCBTVkdGb250RWxlbWVudCYg
ZWxlbWVudCkKIHsKLSAgICByZXR1cm4gU1ZHVG9PVEZGb250Q29udmVydGVyKGVsZW1lbnQpLmNv
bnZlcnRTVkdUb09URkZvbnQoKTsKKyAgICBTVkdUb09URkZvbnRDb252ZXJ0ZXIgY29udmVydGVy
KGVsZW1lbnQpOworICAgIGNvbnZlcnRlci5jb252ZXJ0U1ZHVG9PVEZGb250KCk7CisgICAgcmV0
dXJuIGNvbnZlcnRlci5yZWxlYXNlUmVzdWx0KCk7CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238820</attachid>
            <date>2014-09-28 13:55:40 -0700</date>
            <delta_ts>2014-09-28 15:12:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137097-20140928135541.patch</filename>
            <type>text/plain</type>
            <size>59661</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MDQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjJkYjAxNWE1NWFkMmE4
YzQ3ODg3N2MyODQ0N2IxMjgwMTk0OWRjMC4uZGYxMWY3MTM4ZTEwODJlOWJjM2VlN2U0NzM5MzQ5
YmVmMDIxMjYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDE0LTA5LTI4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPGxpdGhlcnVtQGdtYWlsLmNvbT4KKworICAgICAgICBbU1ZHIC0+IE9U
RiBDb252ZXJ0ZXJdIFN1cHBvcnQgbm9uLUJNUCBjb2RlcG9pbnRzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcwOTcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGhhcyB0d28gcGllY2Vz
OgorCisgICAgICAgIDEpIE1vdmVzIHdyaXRlMzIoKSwgd3JpdGUxNigpLCBvdmVyd3JpdGUzMigp
IGFuZCBvdmVyd3JpdGUxNigpIGluc2lkZSBTVkdUb09URkZvbnRDb252ZXJ0ZXIuCisgICAgICAg
IFRoaXMgaXMgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGtlZXAgcGFzc2luZyBhcm91bmQgcmVm
ZXJlbmNlcyB0byBtX3Jlc3VsdCBldmVyeXdoZXJlLgorICAgICAgICBJbnN0ZWFkLCBwdXQgdGhl
IG91dHB1dCB2ZWN0b3IgaW5zaWRlIHRoZSBjbGFzcyBhcyBhbiBpbnN0YW5jZSBtZW1iZXIgdmFy
aWFibGUuIEluIGFkZGl0aW9uLAorICAgICAgICByZW5hbWUgd3JpdGUzMigpIGFuZCB3cml0ZTE2
KCkgdG8gYXBwZW5kMzIoKSBhbmQgYXBwZW5kMTYoKS4KKworICAgICAgICAyKSBDaGFuZ2UgdGhl
ICJDb2RlcG9pbnQiIHR5cGVkZWYgdG8gYmUgYSBTdHJpbmcsIGFuZCByZW5hbWUgaXQgdG8gQ29k
ZXBvaW50cy4gVGhpcyBpcyBzbyB0aGF0CisgICAgICAgIHdlIGNhbiBpbXBsZW1lbnQgbGlnYXR1
cmVzIGxhdGVyIG9uLiBVcGRhdGUgYWxsIHRoZSBwbGFjZXMgdGhhdCB1c2UgdGhpcyB2YXJpYWJs
ZSB0byB3b3JrIHdpdGgKKyAgICAgICAgYSBTdHJpbmcgb2YgbXVsdGlwbGUgY29kZXBvaW50cy4K
KworICAgICAgICBUaGUgQ01BUCB0YWJsZSBjdXJyZW50bHkgb25seSBtYXBzIHNpbmdsZSBjb2Rl
cG9pbnRzIHRvIGdseXBoIElEcyBhbmQgc2tpcHMgYWxsCisgICAgICAgIG11bHRpLWNvZGVwb2lu
dCBnbHlwaHMuIFdlIHdpbGwgaW1wbGVtZW50IGxpZ2F0dXJlcyBpbiBhbm90aGVyIHBhdGNoLgor
CisgICAgICAgIFRlc3Q6IHN2Zy9jdXN0b20vZ2x5cGgtc2VsZWN0aW9uLW5vbi1ibXAuc3ZnCisK
KyAgICAgICAgKiBzdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjphcHBlbmQzMik6IEFwcGVuZCBhIHJlc3VsdCB0byBhIGdpdmVuIHZlY3Rvci4gVGhpcyBp
cyBmb3IgdGhlIHBhdGggdHJhbnNjb2Rlci4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9u
dENvbnZlcnRlcjo6cmVsZWFzZVJlc3VsdCk6IFdURjo6bW92ZSgpJ3MgdGhlIHJlc3VsdC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6R2x5cGhEYXRhOjpHbHlwaERh
dGEpOiBVcGRhdGUgdG8gdGFrZSBDb2RlcG9pbnRzIGluc3RlYWQgb2YgQ29kZXBvaW50LgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmQzMik6IFBpZWNlIDEg
YWJvdmUuCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZDE2
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVu
ZDRCeXRlQ29kZSk6IENvbnZlbmllbmNlIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VG9PVEZGb250Q29udmVydGVyOjpvdmVyd3JpdGUzMik6IFBpZWNlIDEgYWJvdmUuCisgICAgICAg
IChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6Om92ZXJ3cml0ZTE2KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZENNQVBUYWJsZSk6
IFBhc3NpbmcgaW4gYSByZXN1bHQgdmVjdG9yIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkuCisgICAg
ICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEhFQURUYWJsZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRISEVB
VGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6
YXBwZW5kSE1UWFRhYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRD
b252ZXJ0ZXI6OmFwcGVuZE1BWFBUYWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VG9PVEZGb250Q29udmVydGVyOjphcHBlbmROQU1FVGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kT1MyVGFibGUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kUE9TVFRhYmxlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc1ZhbGlkU3RyaW5nRm9yQ0ZGKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZENGRlZhbGlkU3Ry
aW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFw
cGVuZENGRlRhYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252
ZXJ0ZXI6OmFwcGVuZFZPUkdUYWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9P
VEZGb250Q29udmVydGVyOjphcHBlbmRWSEVBVGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kVk1UWFRhYmxlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZENvZGVwb2ludFJhbmdlcyk6
IFVwZGF0ZSBmb3IgQ29kZXBvaW50cy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENv
bnZlcnRlcjo6YWRkQ29kZXBvaW50cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9P
VEZGb250Q29udmVydGVyOjphZGRHbHlwaE5hbWVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEtFUk5TdWJ0YWJsZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRLRVJOVGFibGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlQ0ZGRW5jb2RlZE51bWJlcik6IFBhc3Npbmcg
aW4gYSByZXN1bHQgdmVjdG9yIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkuCisgICAgICAgIChXZWJD
b3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEdseXBoRGF0YSk6IFVwZGF0ZSBmb3Ig
Q29kZXBvaW50cy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6cHJv
Y2Vzc0dseXBoRWxlbWVudCk6IFVwZGF0ZSBmb3IgQ29kZXBvaW50cy4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6Y29tcGFyZUNvZGVwb2ludHNMZXhpY29ncmFwaGlj
YWxseSk6IENvbXBhcmluZyBDb2RlcG9pbnRzCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZv
bnRDb252ZXJ0ZXI6OlNWR1RvT1RGRm9udENvbnZlcnRlcik6IFVwZGF0ZSBmb3IgQ29kZXBvaW50
cy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6Y2FsY3VsYXRlQ2hl
Y2tzdW0pOiBQYXNzaW5nIGluIGEgcmVzdWx0IHZlY3RvciBpcyBubyBsb25nZXIgbmVjZXNzYXJ5
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRUYWJsZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjpjb252ZXJ0
U1ZHVG9PVEZGb250KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0U1ZHVG9PVEZG
b250KTogTW92ZSBvdXQgb2YgdGhlIHJlc3VsdCB2ZWN0b3IuCisgICAgICAgIChXZWJDb3JlOjp3
cml0ZTMyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRlMTYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6b3ZlcndyaXRlMzIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6YXBwZW5kQ0ZGVmFsaWRTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6dHJh
bnNjb2RlR2x5cGhQYXRocyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVD
aGVja3N1bSk6IERlbGV0ZWQuCisKIDIwMTQtMDktMjggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIE1vdmUgUmVuZGVyVGhl
bWVHdGsuaCBmcm9tIHBsYXRmb3JtL2d0ayB0byByZW5kZXJpbmcuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHAKaW5kZXggN2ZhNjE2MWViZDU2YmM2OWQy
MjcxYzZjZTUzMmQyNmU2NTVhYzgyZC4uZWUwNGFkZmY1YzQ4Y2Y1ZTY1NmE1ZjQ3NzIyNWM0OWVm
M2U5MjZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RvT1RGRm9udENvbnZl
cnNpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUb09URkZvbnRDb252ZXJzaW9u
LmNwcApAQCAtNDAsNTMgKzQwLDQyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGlj
IGlubGluZSB2b2lkIHdyaXRlMzIoVmVjdG9yPGNoYXI+JiB2ZWN0b3IsIHVpbnQzMl90IHZhbHVl
KQorc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZDMyKFZlY3RvcjxjaGFyPiYgcmVzdWx0LCB1aW50
MzJfdCB2YWx1ZSkKIHsKLSAgICB2ZWN0b3IuYXBwZW5kKHZhbHVlID4+IDI0KTsKLSAgICB2ZWN0
b3IuYXBwZW5kKHZhbHVlID4+IDE2KTsKLSAgICB2ZWN0b3IuYXBwZW5kKHZhbHVlID4+IDgpOwot
ICAgIHZlY3Rvci5hcHBlbmQodmFsdWUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGUx
NihWZWN0b3I8Y2hhcj4mIHZlY3RvciwgdWludDE2X3QgdmFsdWUpCi17Ci0gICAgdmVjdG9yLmFw
cGVuZCh2YWx1ZSA+PiA4KTsKLSAgICB2ZWN0b3IuYXBwZW5kKHZhbHVlKTsKLX0KLQotc3RhdGlj
IGlubGluZSB2b2lkIG92ZXJ3cml0ZTMyKFZlY3RvcjxjaGFyPiYgdmVjdG9yLCB1bnNpZ25lZCBs
b2NhdGlvbiwgdWludDMyX3QgdmFsdWUpCi17Ci0gICAgQVNTRVJUKHZlY3Rvci5zaXplKCkgPj0g
bG9jYXRpb24gKyA0KTsKLSAgICAqKHZlY3Rvci5kYXRhKCkgKyBsb2NhdGlvbikgPSB2YWx1ZSA+
PiAyNDsKLSAgICAqKHZlY3Rvci5kYXRhKCkgKyBsb2NhdGlvbiArIDEpID0gdmFsdWUgPj4gMTY7
Ci0gICAgKih2ZWN0b3IuZGF0YSgpICsgbG9jYXRpb24gKyAyKSA9IHZhbHVlID4+IDg7Ci0gICAg
Kih2ZWN0b3IuZGF0YSgpICsgbG9jYXRpb24gKyAzKSA9IHZhbHVlOworICAgIHJlc3VsdC5hcHBl
bmQodmFsdWUgPj4gMjQpOworICAgIHJlc3VsdC5hcHBlbmQodmFsdWUgPj4gMTYpOworICAgIHJl
c3VsdC5hcHBlbmQodmFsdWUgPj4gOCk7CisgICAgcmVzdWx0LmFwcGVuZCh2YWx1ZSk7CiB9CiAK
IGNsYXNzIFNWR1RvT1RGRm9udENvbnZlcnRlciB7CiBwdWJsaWM6CiAgICAgU1ZHVG9PVEZGb250
Q29udmVydGVyKGNvbnN0IFNWR0ZvbnRFbGVtZW50Jik7Ci0gICAgVmVjdG9yPGNoYXI+IGNvbnZl
cnRTVkdUb09URkZvbnQoKTsKKyAgICB2b2lkIGNvbnZlcnRTVkdUb09URkZvbnQoKTsKKworICAg
IFZlY3RvcjxjaGFyPiByZWxlYXNlUmVzdWx0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6
Om1vdmUobV9yZXN1bHQpOworICAgIH0KIAogcHJpdmF0ZToKLSAgICB0eXBlZGVmIHVpbnQxNl90
IFNJRDsgLy8gU3RyaW5nIElECi0gICAgdHlwZWRlZiBVQ2hhciBDb2RlcG9pbnQ7IC8vIEZJWE1F
OiBPbmx5IHN1cHBvcnQgQk1QIGZvciBub3cKKyAgICB0eXBlZGVmIFN0cmluZyBDb2RlcG9pbnRz
OwogICAgIHN0cnVjdCBHbHlwaERhdGEgewotICAgICAgICBHbHlwaERhdGEoVmVjdG9yPGNoYXI+
IGNoYXJTdHJpbmcsIGNvbnN0IFNWR0dseXBoRWxlbWVudCogZ2x5cGhFbGVtZW50LCBmbG9hdCBo
b3Jpem9udGFsQWR2YW5jZSwgZmxvYXQgdmVydGljYWxBZHZhbmNlLCBGbG9hdFJlY3QgYm91bmRp
bmdCb3gsIENvZGVwb2ludCBjb2RlcG9pbnQpCisgICAgICAgIEdseXBoRGF0YShWZWN0b3I8Y2hh
cj4gY2hhclN0cmluZywgY29uc3QgU1ZHR2x5cGhFbGVtZW50KiBnbHlwaEVsZW1lbnQsIGZsb2F0
IGhvcml6b250YWxBZHZhbmNlLCBmbG9hdCB2ZXJ0aWNhbEFkdmFuY2UsIEZsb2F0UmVjdCBib3Vu
ZGluZ0JveCwgY29uc3QgQ29kZXBvaW50cyYgY29kZXBvaW50cykKICAgICAgICAgICAgIDogYm91
bmRpbmdCb3goYm91bmRpbmdCb3gpCiAgICAgICAgICAgICAsIGNoYXJTdHJpbmcoY2hhclN0cmlu
ZykKKyAgICAgICAgICAgICwgY29kZXBvaW50cyhjb2RlcG9pbnRzKQogICAgICAgICAgICAgLCBn
bHlwaEVsZW1lbnQoZ2x5cGhFbGVtZW50KQogICAgICAgICAgICAgLCBob3Jpem9udGFsQWR2YW5j
ZShob3Jpem9udGFsQWR2YW5jZSkKICAgICAgICAgICAgICwgdmVydGljYWxBZHZhbmNlKHZlcnRp
Y2FsQWR2YW5jZSkKLSAgICAgICAgICAgICwgY29kZXBvaW50KGNvZGVwb2ludCkKICAgICAgICAg
ewogICAgICAgICB9CiAgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKICAgICAgICAgVmVj
dG9yPGNoYXI+IGNoYXJTdHJpbmc7CisgICAgICAgIENvZGVwb2ludHMgY29kZXBvaW50czsKICAg
ICAgICAgY29uc3QgU1ZHR2x5cGhFbGVtZW50KiBnbHlwaEVsZW1lbnQ7CiAgICAgICAgIGZsb2F0
IGhvcml6b250YWxBZHZhbmNlOwogICAgICAgICBmbG9hdCB2ZXJ0aWNhbEFkdmFuY2U7Ci0gICAg
ICAgIENvZGVwb2ludCBjb2RlcG9pbnQ7CiAgICAgfTsKIAogICAgIHN0cnVjdCBLZXJuaW5nRGF0
YSB7CkBAIC0xMDUsNDUgKzk0LDg2IEBAIHByaXZhdGU6CiAgICAgICAgIGludDE2X3QgYWRqdXN0
bWVudDsKICAgICB9OwogCisgICAgaW5saW5lIHZvaWQgYXBwZW5kMzIodWludDMyX3QgdmFsdWUp
CisgICAgeworICAgICAgICBXZWJDb3JlOjphcHBlbmQzMihtX3Jlc3VsdCwgdmFsdWUpOworICAg
IH0KKworICAgIGlubGluZSB2b2lkIGFwcGVuZDE2KHVpbnQxNl90IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgbV9yZXN1bHQuYXBwZW5kKHZhbHVlID4+IDgpOworICAgICAgICBtX3Jlc3VsdC5hcHBl
bmQodmFsdWUpOworICAgIH0KKworICAgIGlubGluZSB2b2lkIGFwcGVuZDRCeXRlQ29kZShjb25z
dCBjaGFyIGNvZGVbNF0pCisgICAgeworICAgICAgICBtX3Jlc3VsdC5hcHBlbmQoY29kZVswXSk7
CisgICAgICAgIG1fcmVzdWx0LmFwcGVuZChjb2RlWzFdKTsKKyAgICAgICAgbV9yZXN1bHQuYXBw
ZW5kKGNvZGVbMl0pOworICAgICAgICBtX3Jlc3VsdC5hcHBlbmQoY29kZVszXSk7CisgICAgfQor
CisgICAgaW5saW5lIHZvaWQgb3ZlcndyaXRlMzIodW5zaWduZWQgbG9jYXRpb24sIHVpbnQzMl90
IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmVzdWx0LnNpemUoKSA+PSBsb2NhdGlv
biArIDQpOworICAgICAgICBtX3Jlc3VsdFtsb2NhdGlvbl0gPSB2YWx1ZSA+PiAyNDsKKyAgICAg
ICAgbV9yZXN1bHRbbG9jYXRpb24gKyAxXSA9IHZhbHVlID4+IDE2OworICAgICAgICBtX3Jlc3Vs
dFtsb2NhdGlvbiArIDJdID0gdmFsdWUgPj4gODsKKyAgICAgICAgbV9yZXN1bHRbbG9jYXRpb24g
KyAzXSA9IHZhbHVlOworICAgIH0KKworICAgIGlubGluZSB2b2lkIG92ZXJ3cml0ZTE2KHVuc2ln
bmVkIGxvY2F0aW9uLCB1aW50MTZfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Jl
c3VsdC5zaXplKCkgPj0gbG9jYXRpb24gKyAyKTsKKyAgICAgICAgbV9yZXN1bHRbbG9jYXRpb25d
ID0gdmFsdWUgPj4gODsKKyAgICAgICAgbV9yZXN1bHRbbG9jYXRpb24gKyAxXSA9IHZhbHVlOwor
ICAgIH0KKwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga1NORlRIZWFkZXJTaXplID0gMTI7CiAg
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBrRGlyZWN0b3J5RW50cnlTaXplID0gMTY7CiAKKyAgICB1
aW50MzJfdCBjYWxjdWxhdGVDaGVja3N1bShzaXplX3Qgc3RhcnRpbmdPZmZzZXQsIHNpemVfdCBl
bmRpbmdPZmZzZXQpIGNvbnN0OwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgdm9p
ZCBhcHBlbmRHbHlwaERhdGEoY29uc3QgVmVjdG9yPGNoYXI+JiBwYXRoLCBjb25zdCBUKiBlbGVt
ZW50LCBmbG9hdCBob3Jpem9udGFsQWR2YW5jZSwgZmxvYXQgdmVydGljYWxBZHZhbmNlLCBjb25z
dCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBDb2RlcG9pbnQgY29kZXBvaW50KTsKKyAgICB2b2lk
IGFwcGVuZEdseXBoRGF0YShjb25zdCBWZWN0b3I8Y2hhcj4mIHBhdGgsIGNvbnN0IFQqIGVsZW1l
bnQsIGZsb2F0IGhvcml6b250YWxBZHZhbmNlLCBmbG9hdCB2ZXJ0aWNhbEFkdmFuY2UsIGNvbnN0
IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IENvZGVwb2ludHMmKTsKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHByb2Nlc3NHbHlwaEVsZW1lbnQoY29uc3QgVCYgZWxl
bWVudCwgZmxvYXQgZGVmYXVsdEhvcml6b250YWxBZHZhbmNlLCBmbG9hdCBkZWZhdWx0VmVydGlj
YWxBZHZhbmNlLCBDb2RlcG9pbnQsIGJvb2wmIGluaXRpYWxHbHlwaCk7Ci0KLSAgICB0eXBlZGVm
IHZvaWQgKFNWR1RvT1RGRm9udENvbnZlcnRlcjo6KkZvbnRBcHBlbmRpbmdGdW5jdGlvbikoVmVj
dG9yPGNoYXI+ICYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kVGFibGUoY29uc3QgY2hhciBpZGVu
dGlmaWVyWzRdLCBWZWN0b3I8Y2hhcj4mLCBGb250QXBwZW5kaW5nRnVuY3Rpb24pOwotICAgIHZv
aWQgYXBwZW5kQ01BUFRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5k
SEVBRFRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kSEhFQVRhYmxl
KFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kSE1UWFRhYmxlKFZlY3Rvcjxj
aGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kVkhFQVRhYmxlKFZlY3RvcjxjaGFyPiYpIGNv
bnN0OwotICAgIHZvaWQgYXBwZW5kVk1UWFRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAg
IHZvaWQgYXBwZW5kS0VSTlRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBw
ZW5kTUFYUFRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kTkFNRVRh
YmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kT1MyVGFibGUoVmVjdG9y
PGNoYXI+JikgY29uc3Q7Ci0gICAgdm9pZCBhcHBlbmRQT1NUVGFibGUoVmVjdG9yPGNoYXI+Jikg
Y29uc3Q7Ci0gICAgdm9pZCBhcHBlbmRDRkZUYWJsZShWZWN0b3I8Y2hhcj4mKSBjb25zdDsKLSAg
ICB2b2lkIGFwcGVuZFZPUkdUYWJsZShWZWN0b3I8Y2hhcj4mKSBjb25zdDsKKyAgICB2b2lkIHBy
b2Nlc3NHbHlwaEVsZW1lbnQoY29uc3QgVCYgZWxlbWVudCwgZmxvYXQgZGVmYXVsdEhvcml6b250
YWxBZHZhbmNlLCBmbG9hdCBkZWZhdWx0VmVydGljYWxBZHZhbmNlLCBjb25zdCBDb2RlcG9pbnRz
JiwgYm9vbCYgaW5pdGlhbEdseXBoKTsKKworICAgIHR5cGVkZWYgdm9pZCAoU1ZHVG9PVEZGb250
Q29udmVydGVyOjoqRm9udEFwcGVuZGluZ0Z1bmN0aW9uKSgpOworICAgIHZvaWQgYXBwZW5kVGFi
bGUoY29uc3QgY2hhciBpZGVudGlmaWVyWzRdLCBGb250QXBwZW5kaW5nRnVuY3Rpb24pOworICAg
IHZvaWQgYXBwZW5kQ01BUFRhYmxlKCk7CisgICAgdm9pZCBhcHBlbmRIRUFEVGFibGUoKTsKKyAg
ICB2b2lkIGFwcGVuZEhIRUFUYWJsZSgpOworICAgIHZvaWQgYXBwZW5kSE1UWFRhYmxlKCk7Cisg
ICAgdm9pZCBhcHBlbmRWSEVBVGFibGUoKTsKKyAgICB2b2lkIGFwcGVuZFZNVFhUYWJsZSgpOwor
ICAgIHZvaWQgYXBwZW5kS0VSTlRhYmxlKCk7CisgICAgdm9pZCBhcHBlbmRNQVhQVGFibGUoKTsK
KyAgICB2b2lkIGFwcGVuZE5BTUVUYWJsZSgpOworICAgIHZvaWQgYXBwZW5kT1MyVGFibGUoKTsK
KyAgICB2b2lkIGFwcGVuZFBPU1RUYWJsZSgpOworICAgIHZvaWQgYXBwZW5kQ0ZGVGFibGUoKTsK
KyAgICB2b2lkIGFwcGVuZFZPUkdUYWJsZSgpOworCisgICAgc3RhdGljIGJvb2wgY29tcGFyZUNv
ZGVwb2ludHNMZXhpY29ncmFwaGljYWxseShjb25zdCBHbHlwaERhdGEmLCBjb25zdCBHbHlwaERh
dGEmKTsKKworICAgIHZvaWQgYXBwZW5kQ0ZGVmFsaWRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgICBWZWN0b3I8Y2hhcj4gdHJhbnNjb2RlR2x5
cGhQYXRocyhmbG9hdCB3aWR0aCwgY29uc3QgVCYgZ2x5cGhFbGVtZW50LCBGbG9hdFJlY3QmIGJv
dW5kaW5nQm94KSBjb25zdDsKIAotICAgIHZvaWQgYWRkQ29kZXBvaW50UmFuZ2VzKGNvbnN0IFVu
aWNvZGVSYW5nZXMmLCBIYXNoU2V0PHVpbnQxNl90PiYgZ2x5cGhTZXQpIGNvbnN0OwotICAgIHZv
aWQgYWRkQ29kZXBvaW50cyhjb25zdCBIYXNoU2V0PFN0cmluZz4mIGNvZGVwb2ludHMsIEhhc2hT
ZXQ8dWludDE2X3Q+JiBnbHlwaFNldCkgY29uc3Q7Ci0gICAgdm9pZCBhZGRHbHlwaE5hbWVzKGNv
bnN0IEhhc2hTZXQ8U3RyaW5nPiYgZ2x5cGhOYW1lcywgSGFzaFNldDx1aW50MTZfdD4mIGdseXBo
U2V0KSBjb25zdDsKKyAgICB2b2lkIGFkZENvZGVwb2ludFJhbmdlcyhjb25zdCBVbmljb2RlUmFu
Z2VzJiwgSGFzaFNldDxHbHlwaD4mIGdseXBoU2V0KSBjb25zdDsKKyAgICB2b2lkIGFkZENvZGVw
b2ludHMoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBjb2RlcG9pbnRzLCBIYXNoU2V0PEdseXBoPiYg
Z2x5cGhTZXQpIGNvbnN0OworICAgIHZvaWQgYWRkR2x5cGhOYW1lcyhjb25zdCBIYXNoU2V0PFN0
cmluZz4mIGdseXBoTmFtZXMsIEhhc2hTZXQ8R2x5cGg+JiBnbHlwaFNldCkgY29uc3Q7CiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgVmVjdG9yPEtlcm5pbmdEYXRhPiBjb21wdXRlS2Vy
bmluZ0RhdGEoYm9vbCAoVDo6KmJ1aWxkS2VybmluZ1BhaXIpKFNWR0tlcm5pbmdQYWlyJikgY29u
c3QpIGNvbnN0OwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIHNpemVfdCBhcHBlbmRL
RVJOU3VidGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQsIGJvb2wgKFQ6OipidWlsZEtlcm5pbmdQ
YWlyKShTVkdLZXJuaW5nUGFpciYpIGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFnZSkgY29uc3Q7Cisg
ICAgc2l6ZV90IGFwcGVuZEtFUk5TdWJ0YWJsZShib29sIChUOjoqYnVpbGRLZXJuaW5nUGFpciko
U1ZHS2VybmluZ1BhaXImKSBjb25zdCwgdWludDE2X3QgY292ZXJhZ2UpOwogCiAgICAgVmVjdG9y
PEdseXBoRGF0YT4gbV9nbHlwaHM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIEdseXBoPiBtX2dseXBo
TmFtZVRvSW5kZXhNYXA7IC8vIFNWRyAxLjE6ICJJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGdseXBo
IG5hbWVzIGJlIHVuaXF1ZSB3aXRoaW4gYSBmb250LiIKLSAgICBIYXNoTWFwPENvZGVwb2ludCwg
R2x5cGg+IG1fY29kZXBvaW50VG9JbmRleE1hcDsgLy8gRklYTUU6IFRoZXJlIG1pZ2h0IGJlIG1h
bnkgZ2x5cGhzIHRoYXQgbWFwIHRvIGEgc2luZ2xlIGNvZGVwb2ludC4KKyAgICBIYXNoTWFwPENv
ZGVwb2ludHMsIFZlY3RvcjxHbHlwaCwgMT4+IG1fY29kZXBvaW50c1RvSW5kaWNlc01hcDsKKyAg
ICBWZWN0b3I8Y2hhcj4gbV9yZXN1bHQ7CiAgICAgRmxvYXRSZWN0IG1fYm91bmRpbmdCb3g7CiAg
ICAgY29uc3QgU1ZHRm9udEVsZW1lbnQmIG1fZm9udEVsZW1lbnQ7CiAgICAgY29uc3QgU1ZHRm9u
dEZhY2VFbGVtZW50KiBtX2ZvbnRGYWNlRWxlbWVudDsKQEAgLTE3NCw3MiArMjA0LDcxIEBAIHN0
YXRpYyB1aW50MTZfdCBpbnRlZ3JhbExvZzIodWludDE2X3QgeCkgewogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRDTUFQVGFibGUoVmVj
dG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0Cit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBw
ZW5kQ01BUFRhYmxlKCkKIHsKLSAgICBhdXRvIHN0YXJ0aW5nT2Zmc2V0ID0gcmVzdWx0LnNpemUo
KTsKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7Ci0gICAgd3JpdGUxNihyZXN1bHQsIDEpOyAvLyBO
dW1iZXIgc3VidGFibGVzCisgICAgYXV0byBzdGFydGluZ09mZnNldCA9IG1fcmVzdWx0LnNpemUo
KTsKKyAgICBhcHBlbmQxNigwKTsKKyAgICBhcHBlbmQxNigxKTsgLy8gTnVtYmVyIHN1YnRhYmxl
cwogCi0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBVbmljb2RlCi0gICAgd3JpdGUxNihyZXN1
bHQsIDMpOyAvLyBVbmljb2RlIHZlcnNpb24gMi4yKwotICAgIHdyaXRlMzIocmVzdWx0LCByZXN1
bHQuc2l6ZSgpIC0gc3RhcnRpbmdPZmZzZXQgKyBzaXplb2YodWludDMyX3QpKTsgLy8gQnl0ZSBv
ZmZzZXQgb2Ygc3VidGFibGUKKyAgICBhcHBlbmQxNigwKTsgLy8gVW5pY29kZQorICAgIGFwcGVu
ZDE2KDMpOyAvLyBVbmljb2RlIHZlcnNpb24gMi4yKworICAgIGFwcGVuZDMyKG1fcmVzdWx0LnNp
emUoKSAtIHN0YXJ0aW5nT2Zmc2V0ICsgc2l6ZW9mKHVpbnQzMl90KSk7IC8vIEJ5dGUgb2Zmc2V0
IG9mIHN1YnRhYmxlCiAKICAgICAvLyBCcmFpbmRlYWQgc2NoZW1lOiBPbmUgc2VnbWVudCBmb3Ig
ZWFjaCBjaGFyYWN0ZXIKICAgICBBU1NFUlQobV9nbHlwaHMuc2l6ZSgpIDwgMHhGRkZGKTsKLSAg
ICB1aW50MTZfdCBzZWdDb3VudCA9IG1fZ2x5cGhzLnNpemUoKSArIDE7Ci0gICAgd3JpdGUxNihy
ZXN1bHQsIDQpOyAvLyBGb3JtYXQ6IE9ubHkgc3VwcG9ydCB0aGUgQmFzaWMgTXVsdGlsaW5ndWFs
IFBsYW5lIGZvciBub3cKLSAgICB3cml0ZTE2KHJlc3VsdCwgMjIgKyBtX2dseXBocy5zaXplKCkg
KiAyKTsgLy8gbGVuZ3RoCi0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBMYW5ndWFnZSBpbmRl
cGVuZGVudAotICAgIHdyaXRlMTYocmVzdWx0LCAyICogc2VnQ291bnQpOyAvLyBzZWdDb3VudFgy
OiAiMiB4IHNlZ0NvdW50IgotICAgIHVpbnQxNl90IG9yaWdpbmFsU2VhcmNoUmFuZ2UgPSByb3Vu
ZERvd25Ub1Bvd2VyT2ZUd28oc2VnQ291bnQpOwotICAgIHVpbnQxNl90IHNlYXJjaFJhbmdlID0g
MiAqIG9yaWdpbmFsU2VhcmNoUmFuZ2U7IC8vIHNlYXJjaFJhbmdlOiAiMiB4ICgyKipmbG9vcihs
b2cyKHNlZ0NvdW50KSkpIgotICAgIHdyaXRlMTYocmVzdWx0LCBzZWFyY2hSYW5nZSk7Ci0gICAg
d3JpdGUxNihyZXN1bHQsIGludGVncmFsTG9nMihvcmlnaW5hbFNlYXJjaFJhbmdlKSk7IC8vIGVu
dHJ5U2VsZWN0b3I6ICJsb2cyKHNlYXJjaFJhbmdlLzIpIgotICAgIHdyaXRlMTYocmVzdWx0LCAo
MiAqIHNlZ0NvdW50KSAtIHNlYXJjaFJhbmdlKTsgLy8gcmFuZ2VTaGlmdDogIjIgeCBzZWdDb3Vu
dCAtIHNlYXJjaFJhbmdlIgorICAgIGF1dG8gc3VidGFibGVMb2NhdGlvbiA9IG1fcmVzdWx0LnNp
emUoKTsKKyAgICBhcHBlbmQzMigxMiA8PCAxNik7IC8vIEZvcm1hdCAxMgorICAgIGFwcGVuZDMy
KDApOyAvLyBQbGFjZWhvbGRlciBmb3IgYnl0ZSBsZW5ndGgKKyAgICBhcHBlbmQzMigwKTsgLy8g
TGFuZ3VhZ2UgaW5kZXBlbmRlbnQKKyAgICBhcHBlbmQzMigwKTsgLy8gUGxhY2Vob2xkZXIgZm9y
IG5Hcm91cHMKKworICAgIHVpbnQxNl90IG5Hcm91cHMgPSAwOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9nbHlwaHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYgZ2x5cGggPSBt
X2dseXBoc1tpXTsKKyAgICAgICAgdW5zaWduZWQgY29kZXBvaW50U2l6ZSA9IDA7CisgICAgICAg
IFVDaGFyMzIgY29kZXBvaW50OworICAgICAgICBpZiAoZ2x5cGguY29kZXBvaW50cy5pc051bGwo
KSkKKyAgICAgICAgICAgIGNvZGVwb2ludCA9IDA7CisgICAgICAgIGVsc2UgaWYgKGdseXBoLmNv
ZGVwb2ludHMuaXM4Qml0KCkpCisgICAgICAgICAgICBjb2RlcG9pbnQgPSBnbHlwaC5jb2RlcG9p
bnRzW2NvZGVwb2ludFNpemUrK107CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFUxNl9ORVhU
KGdseXBoLmNvZGVwb2ludHMuY2hhcmFjdGVyczE2KCksIGNvZGVwb2ludFNpemUsIGdseXBoLmNv
ZGVwb2ludHMubGVuZ3RoKCksIGNvZGVwb2ludCk7CiAKLSAgICBmb3IgKGF1dG8mIGdseXBoIDog
bV9nbHlwaHMpCi0gICAgICAgIHdyaXRlMTYocmVzdWx0LCBnbHlwaC5jb2RlcG9pbnQpOyAvLyBF
bmRDb2RlCi0gICAgd3JpdGUxNihyZXN1bHQsIDB4RkZGRik7IC8vICJUbyBlbnN1cmUgdGhhdCB0
aGUgc2VhcmNoIHdpbGwgdGVybWluYXRlLCB0aGUgZmluYWwgZW5kQ29kZSB2YWx1ZSBtdXN0IGJl
IDB4RkZGRi4iCi0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBSZXNlcnZlZAotICAgIGZvciAo
YXV0byYgZ2x5cGggOiBtX2dseXBocykKLSAgICAgICAgd3JpdGUxNihyZXN1bHQsIGdseXBoLmNv
ZGVwb2ludCk7IC8vIHN0YXJ0Q29kZQotICAgIHdyaXRlMTYocmVzdWx0LCAweEZGRkYpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dseXBocy5zaXplKCk7ICsraSkgewotICAgICAg
ICAvLyBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBjYW4gYmUgIm5lZ2F0aXZlLCIgYnV0IHRoYXQgaXMg
b2theSBiZWNhdXNlIHdyYXBwaW5nIGlzIGRlZmluZWQgYW5kIGV4cGVjdGVkIGhlcmUKLSAgICAg
ICAgd3JpdGUxNihyZXN1bHQsIHN0YXRpY19jYXN0PHVpbnQxNl90PihpKSAtIG1fZ2x5cGhzW2ld
LmNvZGVwb2ludCk7IC8vIGlkRGVsdGEKKyAgICAgICAgLy8gRG9uJ3QgbWFwIGxpZ2F0dXJlcyBo
ZXJlLgorICAgICAgICBpZiAoZ2x5cGguY29kZXBvaW50cy5sZW5ndGgoKSA+IGNvZGVwb2ludFNp
emUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBhcHBlbmQzMihjb2RlcG9pbnQp
OyAvLyBzdGFydENoYXJDb2RlCisgICAgICAgIGFwcGVuZDMyKGNvZGVwb2ludCk7IC8vIGVuZENo
YXJDb2RlCisgICAgICAgIGFwcGVuZDMyKGkpOyAvLyBzdGFydEdseXBoQ29kZQorICAgICAgICAr
K25Hcm91cHM7CiAgICAgfQotICAgIHdyaXRlMTYocmVzdWx0LCAxKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9nbHlwaHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHdyaXRlMTYocmVz
dWx0LCAwKTsgLy8gaWRSYW5nZU9mZnNldAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsKKyAgICBv
dmVyd3JpdGUzMihzdWJ0YWJsZUxvY2F0aW9uICsgNCwgbV9yZXN1bHQuc2l6ZSgpIC0gc3VidGFi
bGVMb2NhdGlvbik7CisgICAgb3ZlcndyaXRlMzIoc3VidGFibGVMb2NhdGlvbiArIDEyLCBuR3Jv
dXBzKTsKIH0KIAotdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEhFQURUYWJsZShW
ZWN0b3I8Y2hhcj4mIHJlc3VsdCkgY29uc3QKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjph
cHBlbmRIRUFEVGFibGUoKQogewotICAgIHdyaXRlMzIocmVzdWx0LCAweDAwMDEwMDAwKTsgLy8g
VmVyc2lvbgotICAgIHdyaXRlMzIocmVzdWx0LCAweDAwMDEwMDAwKTsgLy8gUmV2aXNpb24KLSAg
ICB3cml0ZTMyKHJlc3VsdCwgMCk7IC8vIENoZWNrc3VtIGFkanVzdG1lbnQKLSAgICAvLyBNYWdp
YyBudW1iZXIuICJTZXQgdG8gMHg1RjBGM0NGNSIKLSAgICByZXN1bHQuYXBwZW5kKDB4NUYpOwot
ICAgIHJlc3VsdC5hcHBlbmQoMHgwRik7Ci0gICAgcmVzdWx0LmFwcGVuZCgweDNDKTsKLSAgICBy
ZXN1bHQuYXBwZW5kKC0weDBCKTsgLy8gV3JhcGFyb3VuZAotICAgIHdyaXRlMTYocmVzdWx0LCAo
MSA8PCA5KSB8IDEpOwotCi0gICAgd3JpdGUxNihyZXN1bHQsIG1fdW5pdHNQZXJFbSk7Ci0gICAg
d3JpdGUzMihyZXN1bHQsIDApOyAvLyBGaXJzdCBoYWxmIG9mIGNyZWF0aW9uIGRhdGUKLSAgICB3
cml0ZTMyKHJlc3VsdCwgMCk7IC8vIExhc3QgaGFsZiBvZiBjcmVhdGlvbiBkYXRlCi0gICAgd3Jp
dGUzMihyZXN1bHQsIDApOyAvLyBGaXJzdCBoYWxmIG9mIG1vZGlmaWNhdGlvbiBkYXRlCi0gICAg
d3JpdGUzMihyZXN1bHQsIDApOyAvLyBMYXN0IGhhbGYgb2YgbW9kaWZpY2F0aW9uIGRhdGUKLSAg
ICB3cml0ZTE2KHJlc3VsdCwgbV9ib3VuZGluZ0JveC54KCkpOyAvLyBNaW5pbXVtIFgKLSAgICB3
cml0ZTE2KHJlc3VsdCwgbV9ib3VuZGluZ0JveC55KCkpOyAvLyBNaW5pbXVtIFkKLSAgICB3cml0
ZTE2KHJlc3VsdCwgbV9ib3VuZGluZ0JveC5tYXhYKCkpOyAvLyBNYXhpbXVtIFgKLSAgICB3cml0
ZTE2KHJlc3VsdCwgbV9ib3VuZGluZ0JveC5tYXhZKCkpOyAvLyBNYXhpbXVtIFkKLSAgICB3cml0
ZTE2KHJlc3VsdCwgKG1faXRhbGljID8gMSA8PCAxIDogMCkgfCAobV93ZWlnaHQgPj0gNyA/IDEg
OiAwKSk7Ci0gICAgd3JpdGUxNihyZXN1bHQsIDMpOyAvLyBTbWFsbGVzdCByZWFkYWJsZSBzaXpl
IGluIHBpeGVscwotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gTWlnaHQgY29udGFpbiBMVFIg
b3IgUlRMIGdseXBocwotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gU2hvcnQgb2Zmc2V0cyBp
biB0aGUgJ2xvY2EnIHRhYmxlLiBIb3dldmVyLCBPVEYgZm9udHMgZG9uJ3QgaGF2ZSBhICdsb2Nh
JyB0YWJsZSBzbyB0aGlzIGlzIGlycmVsZXZhbnQKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8v
IEdseXBoIGRhdGEgZm9ybWF0CisgICAgYXBwZW5kMzIoMHgwMDAxMDAwMCk7IC8vIFZlcnNpb24K
KyAgICBhcHBlbmQzMigweDAwMDEwMDAwKTsgLy8gUmV2aXNpb24KKyAgICBhcHBlbmQzMigwKTsg
Ly8gQ2hlY2tzdW0gYWRqdXN0bWVudAorICAgIGFwcGVuZDMyKDB4NUYwRjNDRjUpOworICAgIGFw
cGVuZDE2KCgxIDw8IDkpIHwgMSk7CisKKyAgICBhcHBlbmQxNihtX3VuaXRzUGVyRW0pOworICAg
IGFwcGVuZDMyKDApOyAvLyBGaXJzdCBoYWxmIG9mIGNyZWF0aW9uIGRhdGUKKyAgICBhcHBlbmQz
MigwKTsgLy8gTGFzdCBoYWxmIG9mIGNyZWF0aW9uIGRhdGUKKyAgICBhcHBlbmQzMigwKTsgLy8g
Rmlyc3QgaGFsZiBvZiBtb2RpZmljYXRpb24gZGF0ZQorICAgIGFwcGVuZDMyKDApOyAvLyBMYXN0
IGhhbGYgb2YgbW9kaWZpY2F0aW9uIGRhdGUKKyAgICBhcHBlbmQxNihtX2JvdW5kaW5nQm94Lngo
KSk7IC8vIE1pbmltdW0gWAorICAgIGFwcGVuZDE2KG1fYm91bmRpbmdCb3gueSgpKTsgLy8gTWlu
aW11bSBZCisgICAgYXBwZW5kMTYobV9ib3VuZGluZ0JveC5tYXhYKCkpOyAvLyBNYXhpbXVtIFgK
KyAgICBhcHBlbmQxNihtX2JvdW5kaW5nQm94Lm1heFkoKSk7IC8vIE1heGltdW0gWQorICAgIGFw
cGVuZDE2KChtX2l0YWxpYyA/IDEgPDwgMSA6IDApIHwgKG1fd2VpZ2h0ID49IDcgPyAxIDogMCkp
OworICAgIGFwcGVuZDE2KDMpOyAvLyBTbWFsbGVzdCByZWFkYWJsZSBzaXplIGluIHBpeGVscwor
ICAgIGFwcGVuZDE2KDApOyAvLyBNaWdodCBjb250YWluIExUUiBvciBSVEwgZ2x5cGhzCisgICAg
YXBwZW5kMTYoMCk7IC8vIFNob3J0IG9mZnNldHMgaW4gdGhlICdsb2NhJyB0YWJsZS4gSG93ZXZl
ciwgT1RGIGZvbnRzIGRvbid0IGhhdmUgYSAnbG9jYScgdGFibGUgc28gdGhpcyBpcyBpcnJlbGV2
YW50CisgICAgYXBwZW5kMTYoMCk7IC8vIEdseXBoIGRhdGEgZm9ybWF0CiB9CiAKIC8vIEFzc3Vt
cHRpb246IFQyIGNhbiBob2xkIGV2ZXJ5IHZhbHVlIHRoYXQgYSBUMSBjYW4gaG9sZApAQCAtMjUx
LDEwICsyODAsMTAgQEAgc3RhdGljIGlubGluZSBUMSBjbGFtcFRvKFQyIHgpCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQxPih4KTsKIH0KIAotdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFw
cGVuZEhIRUFUYWJsZShWZWN0b3I8Y2hhcj4mIHJlc3VsdCkgY29uc3QKK3ZvaWQgU1ZHVG9PVEZG
b250Q29udmVydGVyOjphcHBlbmRISEVBVGFibGUoKQogewotICAgIGludDE2X3QgYXNjZW50ID0g
c3RkOjpudW1lcmljX2xpbWl0czxpbnQxNl90Pjo6bWF4KCk7Ci0gICAgaW50MTZfdCBkZXNjZW50
ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQxNl90Pjo6bWF4KCk7CisgICAgaW50MTZfdCBhc2Nl
bnQgPSBtX3VuaXRzUGVyRW07CisgICAgaW50MTZfdCBkZXNjZW50ID0gMDsKICAgICBpZiAobV9m
b250RmFjZUVsZW1lbnQpIHsKICAgICAgICAgYXNjZW50ID0gbV9mb250RmFjZUVsZW1lbnQtPmFz
Y2VudCgpOwogICAgICAgICBkZXNjZW50ID0gbV9mb250RmFjZUVsZW1lbnQtPmRlc2NlbnQoKTsK
QEAgLTI2OSw3MSArMjk4LDcxIEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRI
SEVBVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0CiAgICAgaWYgKCFkZXNjZW50KQog
ICAgICAgICBkZXNjZW50ID0gMTsKIAotICAgIHdyaXRlMzIocmVzdWx0LCAweDAwMDEwMDAwKTsg
Ly8gVmVyc2lvbgotICAgIHdyaXRlMTYocmVzdWx0LCBhc2NlbnQpOwotICAgIHdyaXRlMTYocmVz
dWx0LCBkZXNjZW50KTsKKyAgICBhcHBlbmQzMigweDAwMDEwMDAwKTsgLy8gVmVyc2lvbgorICAg
IGFwcGVuZDE2KGFzY2VudCk7CisgICAgYXBwZW5kMTYoZGVzY2VudCk7CiAgICAgLy8gV2ViS2l0
J3MgU1ZHIGNvZGVwYXRoIGhhcmRjb2RlcyB0aGUgbGluZSBnYXAgdG8gYmUgMS8xMHRoIG9mIHRo
ZSBmb250IHNpemUgKHNlZSByMjk3MTkpLiBNYXRjaGluZyB0aGF0CiAgICAgLy8gYWxsb3dzIHVz
IHRvIGhhdmUgY29uc2lzdGVudCByZW5kZXJpbmdzIGJldHdlZW4gdGhlIHR3byBwYXRocy4KLSAg
ICB3cml0ZTE2KHJlc3VsdCwgbV91bml0c1BlckVtIC8gMTApOyAvLyBMaW5lIGdhcAotICAgIHdy
aXRlMTYocmVzdWx0LCBjbGFtcFRvPHVpbnQxNl90PihtX2FkdmFuY2VXaWR0aE1heCkpOwotICAg
IHdyaXRlMTYocmVzdWx0LCBjbGFtcFRvPGludDE2X3Q+KG1fYm91bmRpbmdCb3gueCgpKSk7IC8v
IE1pbmltdW0gbGVmdCBzaWRlIGJlYXJpbmcKLSAgICB3cml0ZTE2KHJlc3VsdCwgY2xhbXBUbzxp
bnQxNl90PihtX21pblJpZ2h0U2lkZUJlYXJpbmcpKTsgLy8gTWluaW11bSByaWdodCBzaWRlIGJl
YXJpbmcKLSAgICB3cml0ZTE2KHJlc3VsdCwgY2xhbXBUbzxpbnQxNl90PihtX2JvdW5kaW5nQm94
Lm1heFgoKSkpOyAvLyBYIG1heGltdW0gZXh0ZW50CisgICAgYXBwZW5kMTYobV91bml0c1BlckVt
IC8gMTApOyAvLyBMaW5lIGdhcAorICAgIGFwcGVuZDE2KGNsYW1wVG88dWludDE2X3Q+KG1fYWR2
YW5jZVdpZHRoTWF4KSk7CisgICAgYXBwZW5kMTYoY2xhbXBUbzxpbnQxNl90PihtX2JvdW5kaW5n
Qm94LngoKSkpOyAvLyBNaW5pbXVtIGxlZnQgc2lkZSBiZWFyaW5nCisgICAgYXBwZW5kMTYoY2xh
bXBUbzxpbnQxNl90PihtX21pblJpZ2h0U2lkZUJlYXJpbmcpKTsgLy8gTWluaW11bSByaWdodCBz
aWRlIGJlYXJpbmcKKyAgICBhcHBlbmQxNihjbGFtcFRvPGludDE2X3Q+KG1fYm91bmRpbmdCb3gu
bWF4WCgpKSk7IC8vIFggbWF4aW11bSBleHRlbnQKICAgICAvLyBXZWJLaXQgZHJhd3MgdGhlIGNh
cmV0Ci0gICAgd3JpdGUxNihyZXN1bHQsIDEpOyAvLyBWZXJ0aWNhbCBjYXJldAotICAgIHdyaXRl
MTYocmVzdWx0LCAwKTsgLy8gVmVydGljYWwgY2FyZXQKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7
IC8vICJTZXQgdmFsdWUgdG8gMCBmb3Igbm9uLXNsYW50ZWQgZm9udHMiCi0gICAgd3JpdGUzMihy
ZXN1bHQsIDApOyAvLyBSZXNlcnZlZAotICAgIHdyaXRlMzIocmVzdWx0LCAwKTsgLy8gUmVzZXJ2
ZWQKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIEN1cnJlbnQgZm9ybWF0Ci0gICAgd3JpdGUx
NihyZXN1bHQsIG1fZ2x5cGhzLnNpemUoKSk7IC8vIE51bWJlciBvZiBhZHZhbmNlIHdpZHRocyBp
biBITVRYIHRhYmxlCisgICAgYXBwZW5kMTYoMSk7IC8vIFZlcnRpY2FsIGNhcmV0CisgICAgYXBw
ZW5kMTYoMCk7IC8vIFZlcnRpY2FsIGNhcmV0CisgICAgYXBwZW5kMTYoMCk7IC8vICJTZXQgdmFs
dWUgdG8gMCBmb3Igbm9uLXNsYW50ZWQgZm9udHMiCisgICAgYXBwZW5kMzIoMCk7IC8vIFJlc2Vy
dmVkCisgICAgYXBwZW5kMzIoMCk7IC8vIFJlc2VydmVkCisgICAgYXBwZW5kMTYoMCk7IC8vIEN1
cnJlbnQgZm9ybWF0CisgICAgYXBwZW5kMTYobV9nbHlwaHMuc2l6ZSgpKTsgLy8gTnVtYmVyIG9m
IGFkdmFuY2Ugd2lkdGhzIGluIEhNVFggdGFibGUKIH0KIAotdm9pZCBTVkdUb09URkZvbnRDb252
ZXJ0ZXI6OmFwcGVuZEhNVFhUYWJsZShWZWN0b3I8Y2hhcj4mIHJlc3VsdCkgY29uc3QKK3ZvaWQg
U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRITVRYVGFibGUoKQogewogICAgIGZvciAoYXV0
byYgZ2x5cGggOiBtX2dseXBocykgewotICAgICAgICB3cml0ZTE2KHJlc3VsdCwgY2xhbXBUbzx1
aW50MTZfdD4oZ2x5cGguaG9yaXpvbnRhbEFkdmFuY2UpKTsKLSAgICAgICAgd3JpdGUxNihyZXN1
bHQsIGNsYW1wVG88aW50MTZfdD4oZ2x5cGguYm91bmRpbmdCb3gueCgpKSk7CisgICAgICAgIGFw
cGVuZDE2KGNsYW1wVG88dWludDE2X3Q+KGdseXBoLmhvcml6b250YWxBZHZhbmNlKSk7CisgICAg
ICAgIGFwcGVuZDE2KGNsYW1wVG88aW50MTZfdD4oZ2x5cGguYm91bmRpbmdCb3gueCgpKSk7CiAg
ICAgfQogfQogCi12b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kTUFYUFRhYmxlKFZl
Y3RvcjxjaGFyPiYgcmVzdWx0KSBjb25zdAordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFw
cGVuZE1BWFBUYWJsZSgpCiB7Ci0gICAgd3JpdGUzMihyZXN1bHQsIDB4MDAwMTAwMDApOyAvLyBW
ZXJzaW9uCi0gICAgd3JpdGUxNihyZXN1bHQsIG1fZ2x5cGhzLnNpemUoKSk7Ci0gICAgd3JpdGUx
NihyZXN1bHQsIDB4RkZGRik7IC8vIE1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBpbiBub24tY29t
cG91bmQgZ2x5cGgKLSAgICB3cml0ZTE2KHJlc3VsdCwgMHhGRkZGKTsgLy8gTWF4aW11bSBudW1i
ZXIgb2YgY29udG91cnMgaW4gbm9uLWNvbXBvdW5kIGdseXBoCi0gICAgd3JpdGUxNihyZXN1bHQs
IDB4RkZGRik7IC8vIE1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBpbiBjb21wb3VuZCBnbHlwaAot
ICAgIHdyaXRlMTYocmVzdWx0LCAweEZGRkYpOyAvLyBNYXhpbXVtIG51bWJlciBvZiBjb250b3Vy
cyBpbiBjb21wb3VuZCBnbHlwaAotICAgIHdyaXRlMTYocmVzdWx0LCAyKTsgLy8gTWF4aW11bSBu
dW1iZXIgb2Ygem9uZXMKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIE1heGltdW0gbnVtYmVy
IG9mIHBvaW50cyB1c2VkIGluIHpvbmUgMAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gTWF4
aW11bSBudW1iZXIgb2Ygc3RvcmFnZSBhcmVhIGxvY2F0aW9ucwotICAgIHdyaXRlMTYocmVzdWx0
LCAwKTsgLy8gTWF4aW11bSBudW1iZXIgb2YgZnVuY3Rpb24gZGVmaW5pdGlvbnMKLSAgICB3cml0
ZTE2KHJlc3VsdCwgMCk7IC8vIE1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9uIGRlZmluaXRp
b25zCi0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBNYXhpbXVtIHN0YWNrIGRlcHRoCi0gICAg
d3JpdGUxNihyZXN1bHQsIDApOyAvLyBNYXhpbXVtIHNpemUgb2YgaW5zdHJ1Y3Rpb25zCi0gICAg
d3JpdGUxNihyZXN1bHQsIG1fZ2x5cGhzLnNpemUoKSk7IC8vIE1heGltdW0gbnVtYmVyIG9mIGds
eXBocyByZWZlcmVuY2VkIGF0IHRvcCBsZXZlbAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8g
Tm8gY29tcG91bmQgZ2x5cGhzCisgICAgYXBwZW5kMzIoMHgwMDAxMDAwMCk7IC8vIFZlcnNpb24K
KyAgICBhcHBlbmQxNihtX2dseXBocy5zaXplKCkpOworICAgIGFwcGVuZDE2KDB4RkZGRik7IC8v
IE1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBpbiBub24tY29tcG91bmQgZ2x5cGgKKyAgICBhcHBl
bmQxNigweEZGRkYpOyAvLyBNYXhpbXVtIG51bWJlciBvZiBjb250b3VycyBpbiBub24tY29tcG91
bmQgZ2x5cGgKKyAgICBhcHBlbmQxNigweEZGRkYpOyAvLyBNYXhpbXVtIG51bWJlciBvZiBwb2lu
dHMgaW4gY29tcG91bmQgZ2x5cGgKKyAgICBhcHBlbmQxNigweEZGRkYpOyAvLyBNYXhpbXVtIG51
bWJlciBvZiBjb250b3VycyBpbiBjb21wb3VuZCBnbHlwaAorICAgIGFwcGVuZDE2KDIpOyAvLyBN
YXhpbXVtIG51bWJlciBvZiB6b25lcworICAgIGFwcGVuZDE2KDApOyAvLyBNYXhpbXVtIG51bWJl
ciBvZiBwb2ludHMgdXNlZCBpbiB6b25lIDAKKyAgICBhcHBlbmQxNigwKTsgLy8gTWF4aW11bSBu
dW1iZXIgb2Ygc3RvcmFnZSBhcmVhIGxvY2F0aW9ucworICAgIGFwcGVuZDE2KDApOyAvLyBNYXhp
bXVtIG51bWJlciBvZiBmdW5jdGlvbiBkZWZpbml0aW9ucworICAgIGFwcGVuZDE2KDApOyAvLyBN
YXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbiBkZWZpbml0aW9ucworICAgIGFwcGVuZDE2KDAp
OyAvLyBNYXhpbXVtIHN0YWNrIGRlcHRoCisgICAgYXBwZW5kMTYoMCk7IC8vIE1heGltdW0gc2l6
ZSBvZiBpbnN0cnVjdGlvbnMKKyAgICBhcHBlbmQxNihtX2dseXBocy5zaXplKCkpOyAvLyBNYXhp
bXVtIG51bWJlciBvZiBnbHlwaHMgcmVmZXJlbmNlZCBhdCB0b3AgbGV2ZWwKKyAgICBhcHBlbmQx
NigwKTsgLy8gTm8gY29tcG91bmQgZ2x5cGhzCiB9CiAKLXZvaWQgU1ZHVG9PVEZGb250Q29udmVy
dGVyOjphcHBlbmROQU1FVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0Cit2b2lkIFNW
R1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kTkFNRVRhYmxlKCkKIHsKLSAgICB3cml0ZTE2KHJl
c3VsdCwgMCk7IC8vIEZvcm1hdCBzZWxlY3RvcgotICAgIHdyaXRlMTYocmVzdWx0LCAxKTsgLy8g
TnVtYmVyIG9mIG5hbWUgcmVjb3JkcyBpbiB0YWJsZQotICAgIHdyaXRlMTYocmVzdWx0LCAxOCk7
IC8vIE9mZnNldCBpbiBieXRlcyB0byB0aGUgYmVnaW5uaW5nIG9mIG5hbWUgY2hhcmFjdGVyIHN0
cmluZ3MKKyAgICBhcHBlbmQxNigwKTsgLy8gRm9ybWF0IHNlbGVjdG9yCisgICAgYXBwZW5kMTYo
MSk7IC8vIE51bWJlciBvZiBuYW1lIHJlY29yZHMgaW4gdGFibGUKKyAgICBhcHBlbmQxNigxOCk7
IC8vIE9mZnNldCBpbiBieXRlcyB0byB0aGUgYmVnaW5uaW5nIG9mIG5hbWUgY2hhcmFjdGVyIHN0
cmluZ3MKIAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gVW5pY29kZQotICAgIHdyaXRlMTYo
cmVzdWx0LCAzKTsgLy8gVW5pY29kZSB2ZXJzaW9uIDIuMCBvciBsYXRlcgotICAgIHdyaXRlMTYo
cmVzdWx0LCAwKTsgLy8gTGFuZ3VhZ2UKLSAgICB3cml0ZTE2KHJlc3VsdCwgMSk7IC8vIE5hbWUg
aWRlbnRpZmllci4gMSA9IEZvbnQgZmFtaWx5Ci0gICAgd3JpdGUxNihyZXN1bHQsIG1fZm9udEZh
bWlseS5sZW5ndGgoKSk7Ci0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBPZmZzZXQgaW50byBu
YW1lIGRhdGEKKyAgICBhcHBlbmQxNigwKTsgLy8gVW5pY29kZQorICAgIGFwcGVuZDE2KDMpOyAv
LyBVbmljb2RlIHZlcnNpb24gMi4wIG9yIGxhdGVyCisgICAgYXBwZW5kMTYoMCk7IC8vIExhbmd1
YWdlCisgICAgYXBwZW5kMTYoMSk7IC8vIE5hbWUgaWRlbnRpZmllci4gMSA9IEZvbnQgZmFtaWx5
CisgICAgYXBwZW5kMTYobV9mb250RmFtaWx5Lmxlbmd0aCgpKTsKKyAgICBhcHBlbmQxNigwKTsg
Ly8gT2Zmc2V0IGludG8gbmFtZSBkYXRhCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9mb250RmFtaWx5Lmxlbmd0aCgpOyArK2kpCi0gICAgICAgIHdyaXRlMTYocmVzdWx0LCBtX2Zv
bnRGYW1pbHlbaV0pOworICAgICAgICBhcHBlbmQxNihtX2ZvbnRGYW1pbHlbaV0pOwogfQogCi12
b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kT1MyVGFibGUoVmVjdG9yPGNoYXI+JiBy
ZXN1bHQpIGNvbnN0Cit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kT1MyVGFibGUo
KQogewogICAgIGludDE2X3QgYXZlcmFnZUFkdmFuY2UgPSBtX3VuaXRzUGVyRW07CiAgICAgYXV0
byYgYXR0cmlidXRlID0gbV9mb250RWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpo
b3Jpel9hZHZfeEF0dHIpOwpAQCAtMzQ3LDIzICszNzYsMjMgQEAgdm9pZCBTVkdUb09URkZvbnRD
b252ZXJ0ZXI6OmFwcGVuZE9TMlRhYmxlKFZlY3RvcjxjaGFyPiYgcmVzdWx0KSBjb25zdAogICAg
ICAgICAgICAgYXZlcmFnZUFkdmFuY2UgPSBjbGFtcFRvPGludDE2X3Q+KHZhbHVlKTsKICAgICB9
CiAKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFZlcnNpb24KLSAgICB3cml0ZTE2KHJlc3Vs
dCwgYXZlcmFnZUFkdmFuY2UpOwotICAgIHdyaXRlMTYocmVzdWx0LCBtX3dlaWdodCk7IC8vIFdl
aWdodCBjbGFzcwotICAgIHdyaXRlMTYocmVzdWx0LCA1KTsgLy8gV2lkdGggY2xhc3MKLSAgICB3
cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFByb3RlY3RlZCBmb250CisgICAgYXBwZW5kMTYoMCk7IC8v
IFZlcnNpb24KKyAgICBhcHBlbmQxNihhdmVyYWdlQWR2YW5jZSk7CisgICAgYXBwZW5kMTYobV93
ZWlnaHQpOyAvLyBXZWlnaHQgY2xhc3MKKyAgICBhcHBlbmQxNig1KTsgLy8gV2lkdGggY2xhc3MK
KyAgICBhcHBlbmQxNigwKTsgLy8gUHJvdGVjdGVkIGZvbnQKICAgICAvLyBXZWJLaXQgaGFuZGxl
cyB0aGVzZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMKLSAgICB3cml0ZTE2KHJlc3VsdCwg
MCk7IC8vIFN1YnNjcmlwdCBYIFNpemUKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFN1YnNj
cmlwdCBZIFNpemUKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFN1YnNjcmlwdCBYIE9mZnNl
dAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gU3Vic2NyaXB0IFkgT2Zmc2V0Ci0gICAgd3Jp
dGUxNihyZXN1bHQsIDApOyAvLyBTdXBlcnNjcmlwdCBYIFNpemUKLSAgICB3cml0ZTE2KHJlc3Vs
dCwgMCk7IC8vIFN1cGVyc2NyaXB0IFkgU2l6ZQotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8g
U3VwZXJzY3JpcHQgWCBPZmZzZXQKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFN1cGVyc2Ny
aXB0IFkgT2Zmc2V0Ci0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBTdHJpa2VvdXQgd2lkdGgK
LSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFN0cmlrZW91dCBQb3NpdGlvbgotICAgIHdyaXRl
MTYocmVzdWx0LCAwKTsgLy8gTm8gY2xhc3NpZmljYXRpb24KKyAgICBhcHBlbmQxNigwKTsgLy8g
U3Vic2NyaXB0IFggU2l6ZQorICAgIGFwcGVuZDE2KDApOyAvLyBTdWJzY3JpcHQgWSBTaXplCisg
ICAgYXBwZW5kMTYoMCk7IC8vIFN1YnNjcmlwdCBYIE9mZnNldAorICAgIGFwcGVuZDE2KDApOyAv
LyBTdWJzY3JpcHQgWSBPZmZzZXQKKyAgICBhcHBlbmQxNigwKTsgLy8gU3VwZXJzY3JpcHQgWCBT
aXplCisgICAgYXBwZW5kMTYoMCk7IC8vIFN1cGVyc2NyaXB0IFkgU2l6ZQorICAgIGFwcGVuZDE2
KDApOyAvLyBTdXBlcnNjcmlwdCBYIE9mZnNldAorICAgIGFwcGVuZDE2KDApOyAvLyBTdXBlcnNj
cmlwdCBZIE9mZnNldAorICAgIGFwcGVuZDE2KDApOyAvLyBTdHJpa2VvdXQgd2lkdGgKKyAgICBh
cHBlbmQxNigwKTsgLy8gU3RyaWtlb3V0IFBvc2l0aW9uCisgICAgYXBwZW5kMTYoMCk7IC8vIE5v
IGNsYXNzaWZpY2F0aW9uCiAKICAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gc3BlY2lmaWVkUGFu
b3NlOwogICAgIGlmIChtX2ZvbnRGYWNlRWxlbWVudCkgewpAQCAtMzg1LDU3ICs0MTQsNTggQEAg
dm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZE9TMlRhYmxlKFZlY3RvcjxjaGFyPiYg
cmVzdWx0KSBjb25zdAogCiAgICAgaWYgKHNwZWNpZmllZFBhbm9zZS5zaXplKCkgPT0gMTApIHsK
ICAgICAgICAgZm9yIChjaGFyIGMgOiBzcGVjaWZpZWRQYW5vc2UpCi0gICAgICAgICAgICByZXN1
bHQuYXBwZW5kKGMpOworICAgICAgICAgICAgbV9yZXN1bHQuYXBwZW5kKGMpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkKLSAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoMCk7IC8vIFBBTk9TRTogQW55CisgICAgICAgICAgICBtX3Jlc3VsdC5hcHBl
bmQoMCk7IC8vIFBBTk9TRTogQW55CiAgICAgfQogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0
OyArK2kpCi0gICAgICAgIHdyaXRlMzIocmVzdWx0LCAwKTsgLy8gIkJpdCBhc3NpZ25tZW50cyBh
cmUgcGVuZGluZy4gU2V0IHRvIDAiCi0gICAgd3JpdGUzMihyZXN1bHQsIDB4NTQ0QjQyNTcpOyAv
LyBGb250IFZlbmRvci4gIldCS1QiCi0gICAgd3JpdGUxNihyZXN1bHQsIChtX3dlaWdodCA+PSA3
ID8gMSA8PCA1IDogMCkgfCAobV9pdGFsaWMgPyAxIDogMCkpOyAvLyBGb250IFBhdHRlcm5zLgot
ICAgIHdyaXRlMTYocmVzdWx0LCBtX2dseXBoc1swXS5jb2RlcG9pbnQpOyAvLyBGaXJzdCB1bmlj
b2RlIGluZGV4Ci0gICAgd3JpdGUxNihyZXN1bHQsIG1fZ2x5cGhzW21fZ2x5cGhzLnNpemUoKSAt
IDFdLmNvZGVwb2ludCk7IC8vIExhc3QgdW5pY29kZSBpbmRleAorICAgICAgICBhcHBlbmQzMigw
KTsgLy8gIkJpdCBhc3NpZ25tZW50cyBhcmUgcGVuZGluZy4gU2V0IHRvIDAiCisgICAgYXBwZW5k
MzIoMHg1NDRCNDI1Nyk7IC8vIEZvbnQgVmVuZG9yLiAiV0JLVCIKKyAgICBhcHBlbmQxNigobV93
ZWlnaHQgPj0gNyA/IDEgPDwgNSA6IDApIHwgKG1faXRhbGljID8gMSA6IDApKTsgLy8gRm9udCBQ
YXR0ZXJucy4KKyAgICBhcHBlbmQxNigwKTsgLy8gRmlyc3QgdW5pY29kZSBpbmRleAorICAgIGFw
cGVuZDE2KDB4RkZGRik7IC8vIExhc3QgdW5pY29kZSBpbmRleAogfQogCi12b2lkIFNWR1RvT1RG
Rm9udENvbnZlcnRlcjo6YXBwZW5kUE9TVFRhYmxlKFZlY3RvcjxjaGFyPiYgcmVzdWx0KSBjb25z
dAordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFBPU1RUYWJsZSgpCiB7Ci0gICAg
d3JpdGUzMihyZXN1bHQsIDB4MDAwMzAwMDApOyAvLyBGb3JtYXQuIFByaW50aW5nIGlzIHVuZGVm
aW5lZAotICAgIHdyaXRlMzIocmVzdWx0LCAwKTsgLy8gSXRhbGljIGFuZ2xlIGluIGRlZ3JlZXMK
LSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFVuZGVybGluZSBwb3NpdGlvbgotICAgIHdyaXRl
MTYocmVzdWx0LCAwKTsgLy8gVW5kZXJsaW5lIHRoaWNrbmVzcwotICAgIHdyaXRlMzIocmVzdWx0
LCAwKTsgLy8gTW9ub3NwYWNlZAotICAgIHdyaXRlMzIocmVzdWx0LCAwKTsgLy8gIk1pbmltdW0g
bWVtb3J5IHVzYWdlIHdoZW4gYSBUcnVlVHlwZSBmb250IGlzIGRvd25sb2FkZWQgYXMgYSBUeXBl
IDQyIGZvbnQiCi0gICAgd3JpdGUzMihyZXN1bHQsIDApOyAvLyAiTWF4aW11bSBtZW1vcnkgdXNh
Z2Ugd2hlbiBhIFRydWVUeXBlIGZvbnQgaXMgZG93bmxvYWRlZCBhcyBhIFR5cGUgNDIgZm9udCIK
LSAgICB3cml0ZTMyKHJlc3VsdCwgMCk7IC8vICJNaW5pbXVtIG1lbW9yeSB1c2FnZSB3aGVuIGEg
VHJ1ZVR5cGUgZm9udCBpcyBkb3dubG9hZGVkIGFzIGEgVHlwZSAxIGZvbnQiCi0gICAgd3JpdGUz
MihyZXN1bHQsIDApOyAvLyAiTWF4aW11bSBtZW1vcnkgdXNhZ2Ugd2hlbiBhIFRydWVUeXBlIGZv
bnQgaXMgZG93bmxvYWRlZCBhcyBhIFR5cGUgMSBmb250IgorICAgIGFwcGVuZDMyKDB4MDAwMzAw
MDApOyAvLyBGb3JtYXQuIFByaW50aW5nIGlzIHVuZGVmaW5lZAorICAgIGFwcGVuZDMyKDApOyAv
LyBJdGFsaWMgYW5nbGUgaW4gZGVncmVlcworICAgIGFwcGVuZDE2KDApOyAvLyBVbmRlcmxpbmUg
cG9zaXRpb24KKyAgICBhcHBlbmQxNigwKTsgLy8gVW5kZXJsaW5lIHRoaWNrbmVzcworICAgIGFw
cGVuZDMyKDApOyAvLyBNb25vc3BhY2VkCisgICAgYXBwZW5kMzIoMCk7IC8vICJNaW5pbXVtIG1l
bW9yeSB1c2FnZSB3aGVuIGEgVHJ1ZVR5cGUgZm9udCBpcyBkb3dubG9hZGVkIGFzIGEgVHlwZSA0
MiBmb250IgorICAgIGFwcGVuZDMyKDApOyAvLyAiTWF4aW11bSBtZW1vcnkgdXNhZ2Ugd2hlbiBh
IFRydWVUeXBlIGZvbnQgaXMgZG93bmxvYWRlZCBhcyBhIFR5cGUgNDIgZm9udCIKKyAgICBhcHBl
bmQzMigwKTsgLy8gIk1pbmltdW0gbWVtb3J5IHVzYWdlIHdoZW4gYSBUcnVlVHlwZSBmb250IGlz
IGRvd25sb2FkZWQgYXMgYSBUeXBlIDEgZm9udCIKKyAgICBhcHBlbmQzMigwKTsgLy8gIk1heGlt
dW0gbWVtb3J5IHVzYWdlIHdoZW4gYSBUcnVlVHlwZSBmb250IGlzIGRvd25sb2FkZWQgYXMgYSBU
eXBlIDEgZm9udCIKIH0KIAogc3RhdGljIGJvb2wgaXNWYWxpZFN0cmluZ0ZvckNGRihjb25zdCBT
dHJpbmcmIHN0cmluZykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RyaW5nLmxl
bmd0aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKHN0cmluZ1tpXSA8IDMzIHx8IHN0cmluZ1tpXSA+
IDEyNikKKyAgICAgICAgYXV0byBjID0gc3RyaW5nW2ldOworICAgICAgICBpZiAoYyA8IDMzIHx8
IGMgPiAxMjYpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0
cnVlOwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRDRkZWYWxpZFN0cmluZyhWZWN0b3I8Y2hhcj4m
IG91dHB1dCwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRl
cjo6YXBwZW5kQ0ZGVmFsaWRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgQVNT
RVJUKGlzVmFsaWRTdHJpbmdGb3JDRkYoc3RyaW5nKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKQotICAgICAgICBvdXRwdXQuYXBwZW5kKHN0cmlu
Z1tpXSk7CisgICAgICAgIG1fcmVzdWx0LmFwcGVuZChzdHJpbmdbaV0pOwogfQogCi12b2lkIFNW
R1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kQ0ZGVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQp
IGNvbnN0Cit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kQ0ZGVGFibGUoKQogewot
ICAgIGF1dG8gc3RhcnRpbmdPZmZzZXQgPSByZXN1bHQuc2l6ZSgpOworICAgIGF1dG8gc3RhcnRp
bmdPZmZzZXQgPSBtX3Jlc3VsdC5zaXplKCk7CiAgICAgLy8gSGVhZGVyCi0gICAgcmVzdWx0LmFw
cGVuZCgxKTsgLy8gTWFqb3IgdmVyc2lvbgotICAgIHJlc3VsdC5hcHBlbmQoMCk7IC8vIE1pbm9y
IHZlcnNpb24KLSAgICByZXN1bHQuYXBwZW5kKDQpOyAvLyBIZWFkZXIgc2l6ZQotICAgIHJlc3Vs
dC5hcHBlbmQoNCk7IC8vIE9mZnNldHMgd2l0aGluIENGRiB0YWJsZSBhcmUgNCBieXRlcyBsb25n
CisgICAgbV9yZXN1bHQuYXBwZW5kKDEpOyAvLyBNYWpvciB2ZXJzaW9uCisgICAgbV9yZXN1bHQu
YXBwZW5kKDApOyAvLyBNaW5vciB2ZXJzaW9uCisgICAgbV9yZXN1bHQuYXBwZW5kKDQpOyAvLyBI
ZWFkZXIgc2l6ZQorICAgIG1fcmVzdWx0LmFwcGVuZCg0KTsgLy8gT2Zmc2V0cyB3aXRoaW4gQ0ZG
IHRhYmxlIGFyZSA0IGJ5dGVzIGxvbmcKIAogICAgIC8vIE5hbWUgSU5ERVgKICAgICBTdHJpbmcg
Zm9udE5hbWU7CkBAIC00NDUsMTEgKzQ3NSwxMSBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRl
cjo6YXBwZW5kQ0ZGVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0CiAgICAgICAgIGlm
IChpc1ZhbGlkU3RyaW5nRm9yQ0ZGKHBvdGVudGlhbEZvbnROYW1lKSkKICAgICAgICAgICAgIGZv
bnROYW1lID0gcG90ZW50aWFsRm9udE5hbWU7CiAgICAgfQotICAgIHdyaXRlMTYocmVzdWx0LCAx
KTsgLy8gSU5ERVggY29udGFpbnMgMSBlbGVtZW50Ci0gICAgcmVzdWx0LmFwcGVuZCg0KTsgLy8g
T2Zmc2V0cyBpbiB0aGlzIElOREVYIGFyZSA0IGJ5dGVzIGxvbmcKLSAgICB3cml0ZTMyKHJlc3Vs
dCwgMSk7IC8vIDEtaW5kZXggb2Zmc2V0IG9mIG5hbWUgZGF0YQotICAgIHdyaXRlMzIocmVzdWx0
LCBmb250TmFtZS5sZW5ndGgoKSArIDEpOyAvLyAxLWluZGV4IG9mZnNldCBqdXN0IHBhc3QgZW5k
IG9mIG5hbWUgZGF0YQotICAgIGFwcGVuZENGRlZhbGlkU3RyaW5nKHJlc3VsdCwgZm9udE5hbWUp
OworICAgIGFwcGVuZDE2KDEpOyAvLyBJTkRFWCBjb250YWlucyAxIGVsZW1lbnQKKyAgICBtX3Jl
c3VsdC5hcHBlbmQoNCk7IC8vIE9mZnNldHMgaW4gdGhpcyBJTkRFWCBhcmUgNCBieXRlcyBsb25n
CisgICAgYXBwZW5kMzIoMSk7IC8vIDEtaW5kZXggb2Zmc2V0IG9mIG5hbWUgZGF0YQorICAgIGFw
cGVuZDMyKGZvbnROYW1lLmxlbmd0aCgpICsgMSk7IC8vIDEtaW5kZXggb2Zmc2V0IGp1c3QgcGFz
dCBlbmQgb2YgbmFtZSBkYXRhCisgICAgYXBwZW5kQ0ZGVmFsaWRTdHJpbmcoZm9udE5hbWUpOwog
CiAgICAgU3RyaW5nIHdlaWdodDsKICAgICBpZiAobV9mb250RmFjZUVsZW1lbnQpIHsKQEAgLTQ2
OSw5MSArNDk5LDkxIEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRDRkZUYWJs
ZShWZWN0b3I8Y2hhcj4mIHJlc3VsdCkgY29uc3QKICAgICBjb25zdCB1bnNpZ25lZCBzaXplT2ZU
b3BJbmRleCA9IDQ1ICsgKHdlaWdodC5pc0VtcHR5KCkgPyAwIDogNik7CiAKICAgICAvLyBUb3Ag
RElDVCBJTkRFWC4KLSAgICB3cml0ZTE2KHJlc3VsdCwgMSk7IC8vIElOREVYIGNvbnRhaW5zIDEg
ZWxlbWVudAotICAgIHJlc3VsdC5hcHBlbmQoNCk7IC8vIE9mZnNldHMgaW4gdGhpcyBJTkRFWCBh
cmUgNCBieXRlcyBsb25nCi0gICAgd3JpdGUzMihyZXN1bHQsIDEpOyAvLyAxLWluZGV4IG9mZnNl
dCBvZiBESUNUIGRhdGEKLSAgICB3cml0ZTMyKHJlc3VsdCwgMSArIHNpemVPZlRvcEluZGV4KTsg
Ly8gMS1pbmRleCBvZmZzZXQganVzdCBwYXN0IGVuZCBvZiBESUNUIGRhdGEKKyAgICBhcHBlbmQx
NigxKTsgLy8gSU5ERVggY29udGFpbnMgMSBlbGVtZW50CisgICAgbV9yZXN1bHQuYXBwZW5kKDQp
OyAvLyBPZmZzZXRzIGluIHRoaXMgSU5ERVggYXJlIDQgYnl0ZXMgbG9uZworICAgIGFwcGVuZDMy
KDEpOyAvLyAxLWluZGV4IG9mZnNldCBvZiBESUNUIGRhdGEKKyAgICBhcHBlbmQzMigxICsgc2l6
ZU9mVG9wSW5kZXgpOyAvLyAxLWluZGV4IG9mZnNldCBqdXN0IHBhc3QgZW5kIG9mIERJQ1QgZGF0
YQogCiAgICAgLy8gRElDVCBpbmZvcm1hdGlvbgogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICB1
bnNpZ25lZCB0b3BEaWN0U3RhcnQgPSByZXN1bHQuc2l6ZSgpOworICAgIHVuc2lnbmVkIHRvcERp
Y3RTdGFydCA9IG1fcmVzdWx0LnNpemUoKTsKICNlbmRpZgotICAgIHJlc3VsdC5hcHBlbmQob3Bl
cmFuZDMyQml0KTsKLSAgICB3cml0ZTMyKHJlc3VsdCwgdXNlckRlZmluZWRTdHJpbmdTdGFydElu
ZGV4KTsKLSAgICByZXN1bHQuYXBwZW5kKGZ1bGxOYW1lS2V5KTsKLSAgICByZXN1bHQuYXBwZW5k
KG9wZXJhbmQzMkJpdCk7Ci0gICAgd3JpdGUzMihyZXN1bHQsIHVzZXJEZWZpbmVkU3RyaW5nU3Rh
cnRJbmRleCk7Ci0gICAgcmVzdWx0LmFwcGVuZChmYW1pbHlOYW1lS2V5KTsKKyAgICBtX3Jlc3Vs
dC5hcHBlbmQob3BlcmFuZDMyQml0KTsKKyAgICBhcHBlbmQzMih1c2VyRGVmaW5lZFN0cmluZ1N0
YXJ0SW5kZXgpOworICAgIG1fcmVzdWx0LmFwcGVuZChmdWxsTmFtZUtleSk7CisgICAgbV9yZXN1
bHQuYXBwZW5kKG9wZXJhbmQzMkJpdCk7CisgICAgYXBwZW5kMzIodXNlckRlZmluZWRTdHJpbmdT
dGFydEluZGV4KTsKKyAgICBtX3Jlc3VsdC5hcHBlbmQoZmFtaWx5TmFtZUtleSk7CiAgICAgaWYg
KCF3ZWlnaHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0
KTsKLSAgICAgICAgd3JpdGUzMihyZXN1bHQsIHVzZXJEZWZpbmVkU3RyaW5nU3RhcnRJbmRleCAr
IDEpOwotICAgICAgICByZXN1bHQuYXBwZW5kKHdlaWdodEtleSk7CisgICAgICAgIG1fcmVzdWx0
LmFwcGVuZChvcGVyYW5kMzJCaXQpOworICAgICAgICBhcHBlbmQzMih1c2VyRGVmaW5lZFN0cmlu
Z1N0YXJ0SW5kZXggKyAxKTsKKyAgICAgICAgbV9yZXN1bHQuYXBwZW5kKHdlaWdodEtleSk7CiAg
ICAgfQotICAgIHJlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsKLSAgICB3cml0ZTMyKHJlc3Vs
dCwgY2xhbXBUbzxpbnQzMl90PihtX2JvdW5kaW5nQm94LngoKSkpOwotICAgIHJlc3VsdC5hcHBl
bmQob3BlcmFuZDMyQml0KTsKLSAgICB3cml0ZTMyKHJlc3VsdCwgY2xhbXBUbzxpbnQzMl90Piht
X2JvdW5kaW5nQm94Lm1heFgoKSkpOwotICAgIHJlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsK
LSAgICB3cml0ZTMyKHJlc3VsdCwgY2xhbXBUbzxpbnQzMl90PihtX2JvdW5kaW5nQm94LnkoKSkp
OwotICAgIHJlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsKLSAgICB3cml0ZTMyKHJlc3VsdCwg
Y2xhbXBUbzxpbnQzMl90PihtX2JvdW5kaW5nQm94Lm1heFkoKSkpOwotICAgIHJlc3VsdC5hcHBl
bmQoZm9udEJCb3hLZXkpOwotICAgIHJlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsKLSAgICB1
bnNpZ25lZCBjaGFyc2V0T2Zmc2V0TG9jYXRpb24gPSByZXN1bHQuc2l6ZSgpOwotICAgIHdyaXRl
MzIocmVzdWx0LCAwKTsgLy8gT2Zmc2V0IG9mIENoYXJzZXQgaW5mby4gV2lsbCBiZSBvdmVyd3Jp
dHRlbiBsYXRlci4KLSAgICByZXN1bHQuYXBwZW5kKGNoYXJzZXRJbmRleEtleSk7Ci0gICAgcmVz
dWx0LmFwcGVuZChvcGVyYW5kMzJCaXQpOwotICAgIHVuc2lnbmVkIGNoYXJzdHJpbmdzT2Zmc2V0
TG9jYXRpb24gPSByZXN1bHQuc2l6ZSgpOwotICAgIHdyaXRlMzIocmVzdWx0LCAwKTsgLy8gT2Zm
c2V0IG9mIENoYXJTdHJpbmdzIElOREVYLiBXaWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgotICAg
IHJlc3VsdC5hcHBlbmQoY2hhcnN0cmluZ3NJbmRleEtleSk7Ci0gICAgQVNTRVJUKHJlc3VsdC5z
aXplKCkgPT0gdG9wRGljdFN0YXJ0ICsgc2l6ZU9mVG9wSW5kZXgpOworICAgIG1fcmVzdWx0LmFw
cGVuZChvcGVyYW5kMzJCaXQpOworICAgIGFwcGVuZDMyKGNsYW1wVG88aW50MzJfdD4obV9ib3Vu
ZGluZ0JveC54KCkpKTsKKyAgICBtX3Jlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsKKyAgICBh
cHBlbmQzMihjbGFtcFRvPGludDMyX3Q+KG1fYm91bmRpbmdCb3gubWF4WCgpKSk7CisgICAgbV9y
ZXN1bHQuYXBwZW5kKG9wZXJhbmQzMkJpdCk7CisgICAgYXBwZW5kMzIoY2xhbXBUbzxpbnQzMl90
PihtX2JvdW5kaW5nQm94LnkoKSkpOworICAgIG1fcmVzdWx0LmFwcGVuZChvcGVyYW5kMzJCaXQp
OworICAgIGFwcGVuZDMyKGNsYW1wVG88aW50MzJfdD4obV9ib3VuZGluZ0JveC5tYXhZKCkpKTsK
KyAgICBtX3Jlc3VsdC5hcHBlbmQoZm9udEJCb3hLZXkpOworICAgIG1fcmVzdWx0LmFwcGVuZChv
cGVyYW5kMzJCaXQpOworICAgIHVuc2lnbmVkIGNoYXJzZXRPZmZzZXRMb2NhdGlvbiA9IG1fcmVz
dWx0LnNpemUoKTsKKyAgICBhcHBlbmQzMigwKTsgLy8gT2Zmc2V0IG9mIENoYXJzZXQgaW5mby4g
V2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlci4KKyAgICBtX3Jlc3VsdC5hcHBlbmQoY2hhcnNldElu
ZGV4S2V5KTsKKyAgICBtX3Jlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsKKyAgICB1bnNpZ25l
ZCBjaGFyc3RyaW5nc09mZnNldExvY2F0aW9uID0gbV9yZXN1bHQuc2l6ZSgpOworICAgIGFwcGVu
ZDMyKDApOyAvLyBPZmZzZXQgb2YgQ2hhclN0cmluZ3MgSU5ERVguIFdpbGwgYmUgb3ZlcndyaXR0
ZW4gbGF0ZXIuCisgICAgbV9yZXN1bHQuYXBwZW5kKGNoYXJzdHJpbmdzSW5kZXhLZXkpOworICAg
IEFTU0VSVChtX3Jlc3VsdC5zaXplKCkgPT0gdG9wRGljdFN0YXJ0ICsgc2l6ZU9mVG9wSW5kZXgp
OwogCiAgICAgLy8gU3RyaW5nIElOREVYCi0gICAgd3JpdGUxNihyZXN1bHQsIDEgKyAod2VpZ2h0
LmlzRW1wdHkoKSA/IDAgOiAxKSk7IC8vIE51bWJlciBvZiBlbGVtZW50cyBpbiBJTkRFWAotICAg
IHJlc3VsdC5hcHBlbmQoNCk7IC8vIE9mZnNldHMgaW4gdGhpcyBJTkRFWCBhcmUgNCBieXRlcyBs
b25nCisgICAgYXBwZW5kMTYoMSArICh3ZWlnaHQuaXNFbXB0eSgpID8gMCA6IDEpKTsgLy8gTnVt
YmVyIG9mIGVsZW1lbnRzIGluIElOREVYCisgICAgbV9yZXN1bHQuYXBwZW5kKDQpOyAvLyBPZmZz
ZXRzIGluIHRoaXMgSU5ERVggYXJlIDQgYnl0ZXMgbG9uZwogICAgIHVpbnQzMl90IG9mZnNldCA9
IDE7Ci0gICAgd3JpdGUzMihyZXN1bHQsIG9mZnNldCk7CisgICAgYXBwZW5kMzIob2Zmc2V0KTsK
ICAgICBvZmZzZXQgKz0gZm9udE5hbWUubGVuZ3RoKCk7Ci0gICAgd3JpdGUzMihyZXN1bHQsIG9m
ZnNldCk7CisgICAgYXBwZW5kMzIob2Zmc2V0KTsKICAgICBpZiAoIXdlaWdodC5pc0VtcHR5KCkp
IHsKICAgICAgICAgb2Zmc2V0ICs9IHdlaWdodC5sZW5ndGgoKTsKLSAgICAgICAgd3JpdGUzMihy
ZXN1bHQsIG9mZnNldCk7CisgICAgICAgIGFwcGVuZDMyKG9mZnNldCk7CiAgICAgfQotICAgIGFw
cGVuZENGRlZhbGlkU3RyaW5nKHJlc3VsdCwgZm9udE5hbWUpOwotICAgIGFwcGVuZENGRlZhbGlk
U3RyaW5nKHJlc3VsdCwgd2VpZ2h0KTsKKyAgICBhcHBlbmRDRkZWYWxpZFN0cmluZyhmb250TmFt
ZSk7CisgICAgYXBwZW5kQ0ZGVmFsaWRTdHJpbmcod2VpZ2h0KTsKIAotICAgIHdyaXRlMTYocmVz
dWx0LCAwKTsgLy8gRW1wdHkgc3Vicm91dGluZSBJTkRFWAorICAgIGFwcGVuZDE2KDApOyAvLyBF
bXB0eSBzdWJyb3V0aW5lIElOREVYCiAKICAgICAvLyBDaGFyc2V0IGluZm8KLSAgICBvdmVyd3Jp
dGUzMihyZXN1bHQsIGNoYXJzZXRPZmZzZXRMb2NhdGlvbiwgcmVzdWx0LnNpemUoKSAtIHN0YXJ0
aW5nT2Zmc2V0KTsKLSAgICByZXN1bHQuYXBwZW5kKDApOworICAgIG92ZXJ3cml0ZTMyKGNoYXJz
ZXRPZmZzZXRMb2NhdGlvbiwgbV9yZXN1bHQuc2l6ZSgpIC0gc3RhcnRpbmdPZmZzZXQpOworICAg
IG1fcmVzdWx0LmFwcGVuZCgwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9nbHlw
aHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHdyaXRlMTYocmVzdWx0LCBpKTsKKyAgICAgICAgYXBw
ZW5kMTYoaSk7CiAKICAgICAvLyBDaGFyU3RyaW5ncyBJTkRFWAotICAgIG92ZXJ3cml0ZTMyKHJl
c3VsdCwgY2hhcnN0cmluZ3NPZmZzZXRMb2NhdGlvbiwgcmVzdWx0LnNpemUoKSAtIHN0YXJ0aW5n
T2Zmc2V0KTsKLSAgICB3cml0ZTE2KHJlc3VsdCwgbV9nbHlwaHMuc2l6ZSgpKTsKLSAgICByZXN1
bHQuYXBwZW5kKDQpOyAvLyBPZmZzZXRzIGluIHRoaXMgSU5ERVggYXJlIDQgYnl0ZXMgbG9uZwor
ICAgIG92ZXJ3cml0ZTMyKGNoYXJzdHJpbmdzT2Zmc2V0TG9jYXRpb24sIG1fcmVzdWx0LnNpemUo
KSAtIHN0YXJ0aW5nT2Zmc2V0KTsKKyAgICBhcHBlbmQxNihtX2dseXBocy5zaXplKCkpOworICAg
IG1fcmVzdWx0LmFwcGVuZCg0KTsgLy8gT2Zmc2V0cyBpbiB0aGlzIElOREVYIGFyZSA0IGJ5dGVz
IGxvbmcKICAgICBvZmZzZXQgPSAxOwotICAgIHdyaXRlMzIocmVzdWx0LCBvZmZzZXQpOworICAg
IGFwcGVuZDMyKG9mZnNldCk7CiAgICAgZm9yIChhdXRvJiBnbHlwaCA6IG1fZ2x5cGhzKSB7CiAg
ICAgICAgIG9mZnNldCArPSBnbHlwaC5jaGFyU3RyaW5nLnNpemUoKTsKLSAgICAgICAgd3JpdGUz
MihyZXN1bHQsIG9mZnNldCk7CisgICAgICAgIGFwcGVuZDMyKG9mZnNldCk7CiAgICAgfQogICAg
IGZvciAoYXV0byYgZ2x5cGggOiBtX2dseXBocykKLSAgICAgICAgcmVzdWx0LmFwcGVuZFZlY3Rv
cihnbHlwaC5jaGFyU3RyaW5nKTsKKyAgICAgICAgbV9yZXN1bHQuYXBwZW5kVmVjdG9yKGdseXBo
LmNoYXJTdHJpbmcpOwogfQogCi12b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kVk9S
R1RhYmxlKFZlY3RvcjxjaGFyPiYgcmVzdWx0KSBjb25zdAordm9pZCBTVkdUb09URkZvbnRDb252
ZXJ0ZXI6OmFwcGVuZFZPUkdUYWJsZSgpCiB7Ci0gICAgd3JpdGUxNihyZXN1bHQsIDEpOyAvLyBN
YWpvciB2ZXJzaW9uCi0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBNaW5vciB2ZXJzaW9uCisg
ICAgYXBwZW5kMTYoMSk7IC8vIE1ham9yIHZlcnNpb24KKyAgICBhcHBlbmQxNigwKTsgLy8gTWlu
b3IgdmVyc2lvbgogCiAgICAgYm9vbCBvazsKICAgICBpbnQxNl90IGRlZmF1bHRWZXJ0aWNhbE9y
aWdpblkgPSBjbGFtcFRvPGludDE2X3Q+KG1fZm9udEVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShT
VkdOYW1lczo6dmVydF9vcmlnaW5feUF0dHIpLnRvSW50KCZvaykpOwogICAgIGlmICghb2sgJiYg
bV9taXNzaW5nR2x5cGhFbGVtZW50KQogICAgICAgICBkZWZhdWx0VmVydGljYWxPcmlnaW5ZID0g
Y2xhbXBUbzxpbnQxNl90PihtX21pc3NpbmdHbHlwaEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUo
U1ZHTmFtZXM6OnZlcnRfb3JpZ2luX3lBdHRyKS50b0ludCgpKTsKLSAgICB3cml0ZTE2KHJlc3Vs
dCwgZGVmYXVsdFZlcnRpY2FsT3JpZ2luWSk7CisgICAgYXBwZW5kMTYoZGVmYXVsdFZlcnRpY2Fs
T3JpZ2luWSk7CiAKICAgICBWZWN0b3I8c3RkOjpwYWlyPHVpbnQxNl90LCBpbnQxNl90Pj4gb3Jp
Z2luczsKICAgICBmb3IgKHVpbnQxNl90IGkgPSAwOyBpIDwgbV9nbHlwaHMuc2l6ZSgpOyArK2kp
IHsKQEAgLTU2NywzOSArNTk3LDM5IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBl
bmRWT1JHVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgd3JpdGUxNihyZXN1bHQsIG9yaWdpbnMuc2l6ZSgpKTsKKyAg
ICBhcHBlbmQxNihvcmlnaW5zLnNpemUoKSk7CiAKICAgICBmb3IgKGF1dG8mIHAgOiBvcmlnaW5z
KSB7Ci0gICAgICAgIHdyaXRlMTYocmVzdWx0LCBwLmZpcnN0KTsKLSAgICAgICAgd3JpdGUxNihy
ZXN1bHQsIHAuc2Vjb25kKTsKKyAgICAgICAgYXBwZW5kMTYocC5maXJzdCk7CisgICAgICAgIGFw
cGVuZDE2KHAuc2Vjb25kKTsKICAgICB9CiB9CiAKLXZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVy
OjphcHBlbmRWSEVBVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0Cit2b2lkIFNWR1Rv
T1RGRm9udENvbnZlcnRlcjo6YXBwZW5kVkhFQVRhYmxlKCkKIHsKLSAgICB3cml0ZTMyKHJlc3Vs
dCwgMHgwMDAxMTAwMCk7IC8vIFZlcnNpb24KLSAgICB3cml0ZTE2KHJlc3VsdCwgbV91bml0c1Bl
ckVtIC8gMik7IC8vIFZlcnRpY2FsIHR5cG9ncmFwaGljIGFzY2VuZGVyICh2ZXJ0aWNhbCBiYXNl
bGluZSB0byB0aGUgcmlnaHQpCi0gICAgd3JpdGUxNihyZXN1bHQsIGNsYW1wVG88aW50MTZfdD4o
LXN0YXRpY19jYXN0PGludD4obV91bml0c1BlckVtIC8gMikpKTsgLy8gVmVydGljYWwgdHlwb2dy
YXBoaWMgZGVzY2VuZGVyCi0gICAgd3JpdGUxNihyZXN1bHQsIG1fdW5pdHNQZXJFbSAvIDEwKTsg
Ly8gVmVydGljYWwgdHlwb2dyYXBoaWMgbGluZSBnYXAKLSAgICB3cml0ZTE2KHJlc3VsdCwgY2xh
bXBUbzxpbnQxNl90PihtX2FkdmFuY2VIZWlnaHRNYXgpKTsKLSAgICB3cml0ZTE2KHJlc3VsdCwg
Y2xhbXBUbzxpbnQxNl90PihtX3VuaXRzUGVyRW0gLSBtX2JvdW5kaW5nQm94Lm1heFkoKSkpOyAv
LyBNaW5pbXVtIHRvcCBzaWRlIGJlYXJpbmcKLSAgICB3cml0ZTE2KHJlc3VsdCwgY2xhbXBUbzxp
bnQxNl90PihtX2JvdW5kaW5nQm94LnkoKSkpOyAvLyBNaW5pbXVtIGJvdHRvbSBzaWRlIGJlYXJp
bmcKLSAgICB3cml0ZTE2KHJlc3VsdCwgY2xhbXBUbzxpbnQxNl90PihtX3VuaXRzUGVyRW0gLSBt
X2JvdW5kaW5nQm94LnkoKSkpOyAvLyBZIG1heGltdW0gZXh0ZW50CisgICAgYXBwZW5kMzIoMHgw
MDAxMTAwMCk7IC8vIFZlcnNpb24KKyAgICBhcHBlbmQxNihtX3VuaXRzUGVyRW0gLyAyKTsgLy8g
VmVydGljYWwgdHlwb2dyYXBoaWMgYXNjZW5kZXIgKHZlcnRpY2FsIGJhc2VsaW5lIHRvIHRoZSBy
aWdodCkKKyAgICBhcHBlbmQxNihjbGFtcFRvPGludDE2X3Q+KC1zdGF0aWNfY2FzdDxpbnQ+KG1f
dW5pdHNQZXJFbSAvIDIpKSk7IC8vIFZlcnRpY2FsIHR5cG9ncmFwaGljIGRlc2NlbmRlcgorICAg
IGFwcGVuZDE2KG1fdW5pdHNQZXJFbSAvIDEwKTsgLy8gVmVydGljYWwgdHlwb2dyYXBoaWMgbGlu
ZSBnYXAKKyAgICBhcHBlbmQxNihjbGFtcFRvPGludDE2X3Q+KG1fYWR2YW5jZUhlaWdodE1heCkp
OworICAgIGFwcGVuZDE2KGNsYW1wVG88aW50MTZfdD4obV91bml0c1BlckVtIC0gbV9ib3VuZGlu
Z0JveC5tYXhZKCkpKTsgLy8gTWluaW11bSB0b3Agc2lkZSBiZWFyaW5nCisgICAgYXBwZW5kMTYo
Y2xhbXBUbzxpbnQxNl90PihtX2JvdW5kaW5nQm94LnkoKSkpOyAvLyBNaW5pbXVtIGJvdHRvbSBz
aWRlIGJlYXJpbmcKKyAgICBhcHBlbmQxNihjbGFtcFRvPGludDE2X3Q+KG1fdW5pdHNQZXJFbSAt
IG1fYm91bmRpbmdCb3gueSgpKSk7IC8vIFkgbWF4aW11bSBleHRlbnQKICAgICAvLyBXZWJLaXQg
ZHJhd3MgdGhlIGNhcmV0Ci0gICAgd3JpdGUxNihyZXN1bHQsIDEpOyAvLyBWZXJ0aWNhbCBjYXJl
dAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gVmVydGljYWwgY2FyZXQKLSAgICB3cml0ZTE2
KHJlc3VsdCwgMCk7IC8vICJTZXQgdmFsdWUgdG8gMCBmb3Igbm9uLXNsYW50ZWQgZm9udHMiCi0g
ICAgd3JpdGUzMihyZXN1bHQsIDApOyAvLyBSZXNlcnZlZAotICAgIHdyaXRlMzIocmVzdWx0LCAw
KTsgLy8gUmVzZXJ2ZWQKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vICJTZXQgdG8gMCIKLSAg
ICB3cml0ZTE2KHJlc3VsdCwgbV9nbHlwaHMuc2l6ZSgpKTsgLy8gTnVtYmVyIG9mIGFkdmFuY2Ug
aGVpZ2h0cyBpbiBWTVRYIHRhYmxlCisgICAgYXBwZW5kMTYoMSk7IC8vIFZlcnRpY2FsIGNhcmV0
CisgICAgYXBwZW5kMTYoMCk7IC8vIFZlcnRpY2FsIGNhcmV0CisgICAgYXBwZW5kMTYoMCk7IC8v
ICJTZXQgdmFsdWUgdG8gMCBmb3Igbm9uLXNsYW50ZWQgZm9udHMiCisgICAgYXBwZW5kMzIoMCk7
IC8vIFJlc2VydmVkCisgICAgYXBwZW5kMzIoMCk7IC8vIFJlc2VydmVkCisgICAgYXBwZW5kMTYo
MCk7IC8vICJTZXQgdG8gMCIKKyAgICBhcHBlbmQxNihtX2dseXBocy5zaXplKCkpOyAvLyBOdW1i
ZXIgb2YgYWR2YW5jZSBoZWlnaHRzIGluIFZNVFggdGFibGUKIH0KIAotdm9pZCBTVkdUb09URkZv
bnRDb252ZXJ0ZXI6OmFwcGVuZFZNVFhUYWJsZShWZWN0b3I8Y2hhcj4mIHJlc3VsdCkgY29uc3QK
K3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRWTVRYVGFibGUoKQogewogICAgIGZv
ciAoYXV0byYgZ2x5cGggOiBtX2dseXBocykgewotICAgICAgICB3cml0ZTE2KHJlc3VsdCwgY2xh
bXBUbzx1aW50MTZfdD4oZ2x5cGgudmVydGljYWxBZHZhbmNlKSk7Ci0gICAgICAgIHdyaXRlMTYo
cmVzdWx0LCBjbGFtcFRvPGludDE2X3Q+KG1fdW5pdHNQZXJFbSAtIGdseXBoLmJvdW5kaW5nQm94
Lm1heFkoKSkpOyAvLyB0b3Agc2lkZSBiZWFyaW5nCisgICAgICAgIGFwcGVuZDE2KGNsYW1wVG88
dWludDE2X3Q+KGdseXBoLnZlcnRpY2FsQWR2YW5jZSkpOworICAgICAgICBhcHBlbmQxNihjbGFt
cFRvPGludDE2X3Q+KG1fdW5pdHNQZXJFbSAtIGdseXBoLmJvdW5kaW5nQm94Lm1heFkoKSkpOyAv
LyB0b3Agc2lkZSBiZWFyaW5nCiAgICAgfQogfQogCkBAIC02MDcsMTEgKzYzNywxNCBAQCB2b2lk
IFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkQ29kZXBvaW50UmFuZ2VzKGNvbnN0IFVuaWNvZGVS
YW5nZXMmIHVuaWNvZGVSYW5nZQogewogICAgIGZvciAoYXV0byYgdW5pY29kZVJhbmdlIDogdW5p
Y29kZVJhbmdlcykgewogICAgICAgICBmb3IgKGF1dG8gY29kZXBvaW50ID0gdW5pY29kZVJhbmdl
LmZpcnN0OyBjb2RlcG9pbnQgPD0gdW5pY29kZVJhbmdlLnNlY29uZDsgKytjb2RlcG9pbnQpIHsK
LSAgICAgICAgICAgIGlmICghY29kZXBvaW50IHx8IGNvZGVwb2ludCA+PSBzdGQ6Om51bWVyaWNf
bGltaXRzPENvZGVwb2ludD46Om1heCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fY29kZXBvaW50VG9JbmRleE1hcC5maW5kKGNvZGVw
b2ludCk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb2RlcG9pbnRUb0luZGV4TWFw
LmVuZCgpKQotICAgICAgICAgICAgICAgIGdseXBoU2V0LmFkZChpdGVyYXRvci0+dmFsdWUpOwor
ICAgICAgICAgICAgVUNoYXIgYnVmZmVyWzJdOworICAgICAgICAgICAgdWludDhfdCBsZW5ndGgg
PSAwOworICAgICAgICAgICAgVUJvb2wgZXJyb3IgPSBmYWxzZTsKKyAgICAgICAgICAgIFUxNl9B
UFBFTkQoYnVmZmVyLCBsZW5ndGgsIDIsIGNvZGVwb2ludCwgZXJyb3IpOworICAgICAgICAgICAg
aWYgKCFlcnJvcikgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byBpbmRleCA6IG1fY29kZXBv
aW50c1RvSW5kaWNlc01hcC5nZXQoU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKSkpCisgICAgICAgICAg
ICAgICAgICAgIGdseXBoU2V0LmFkZChpbmRleCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC02MTksMjYgKzY1MiwxMiBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRl
cjo6YWRkQ29kZXBvaW50UmFuZ2VzKGNvbnN0IFVuaWNvZGVSYW5nZXMmIHVuaWNvZGVSYW5nZQog
dm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZENvZGVwb2ludHMoY29uc3QgSGFzaFNldDxT
dHJpbmc+JiBjb2RlcG9pbnRzLCBIYXNoU2V0PEdseXBoPiYgZ2x5cGhTZXQpIGNvbnN0CiB7CiAg
ICAgZm9yIChhdXRvJiBjb2RlcG9pbnRTdHJpbmcgOiBjb2RlcG9pbnRzKSB7Ci0gICAgICAgIGF1
dG8gY29kZXBvaW50U3RyaW5nTGVuZ3RoID0gY29kZXBvaW50U3RyaW5nLmxlbmd0aCgpOwotICAg
ICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAgICAgd2hpbGUgKGkgPCBjb2RlcG9pbnRTdHJpbmdM
ZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBDYW5vbmljYWxpemF0aW9uIG1pZ2h0IGJl
IG5lY2Vzc2FyeQotICAgICAgICAgICAgVUNoYXIzMiBjb2RlcG9pbnQ7Ci0gICAgICAgICAgICBp
ZiAoY29kZXBvaW50U3RyaW5nLmlzOEJpdCgpKQotICAgICAgICAgICAgICAgIGNvZGVwb2ludCA9
IGNvZGVwb2ludFN0cmluZy5jaGFyYWN0ZXJzOCgpW2krK107Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgVTE2X05FWFQoY29kZXBvaW50U3RyaW5nLmNoYXJhY3RlcnMxNigpLCBp
LCBjb2RlcG9pbnRTdHJpbmdMZW5ndGgsIGNvZGVwb2ludCk7Ci0KLSAgICAgICAgICAgIGlmICgh
Y29kZXBvaW50IHx8IGNvZGVwb2ludCA+PSBzdGQ6Om51bWVyaWNfbGltaXRzPENvZGVwb2ludD46
Om1heCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYXV0byBpbmRl
eEl0ZXIgPSBtX2NvZGVwb2ludFRvSW5kZXhNYXAuZmluZChjb2RlcG9pbnQpOwotICAgICAgICAg
ICAgaWYgKGluZGV4SXRlciAhPSBtX2NvZGVwb2ludFRvSW5kZXhNYXAuZW5kKCkpCi0gICAgICAg
ICAgICAgICAgZ2x5cGhTZXQuYWRkKGluZGV4SXRlci0+dmFsdWUpOwotICAgICAgICB9CisgICAg
ICAgIGZvciAoYXV0byBpbmRleCA6IG1fY29kZXBvaW50c1RvSW5kaWNlc01hcC5nZXQoY29kZXBv
aW50U3RyaW5nKSkKKyAgICAgICAgICAgIGdseXBoU2V0LmFkZChpbmRleCk7CiAgICAgfQogfQog
Ci12b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkR2x5cGhOYW1lcyhjb25zdCBIYXNoU2V0
PFN0cmluZz4mIGdseXBoTmFtZXMsIEhhc2hTZXQ8dWludDE2X3Q+JiBnbHlwaFNldCkgY29uc3QK
K3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRHbHlwaE5hbWVzKGNvbnN0IEhhc2hTZXQ8
U3RyaW5nPiYgZ2x5cGhOYW1lcywgSGFzaFNldDxHbHlwaD4mIGdseXBoU2V0KSBjb25zdAogewog
ICAgIGZvciAoYXV0byYgZ2x5cGhOYW1lIDogZ2x5cGhOYW1lcykgewogICAgICAgICBhdXRvIGlu
ZGV4SXRlciA9IG1fZ2x5cGhOYW1lVG9JbmRleE1hcC5maW5kKGdseXBoTmFtZSk7CkBAIC02Nzcs
NyArNjk2LDcgQEAgYXV0byBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmNvbXB1dGVLZXJuaW5nRGF0
YShib29sIChUOjoqYnVpbGRLZXJuaW5nUGFpcikoU1ZHS2UKIH0KIAogdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci1zaXplX3QgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRLRVJOU3VidGFibGUo
VmVjdG9yPGNoYXI+JiByZXN1bHQsIGJvb2wgKFQ6OipidWlsZEtlcm5pbmdQYWlyKShTVkdLZXJu
aW5nUGFpciYpIGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFnZSkgY29uc3QKK3NpemVfdCBTVkdUb09U
RkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEtFUk5TdWJ0YWJsZShib29sIChUOjoqYnVpbGRLZXJuaW5n
UGFpcikoU1ZHS2VybmluZ1BhaXImKSBjb25zdCwgdWludDE2X3QgY292ZXJhZ2UpCiB7CiAgICAg
VmVjdG9yPEtlcm5pbmdEYXRhPiBrZXJuaW5nRGF0YSA9IGNvbXB1dGVLZXJuaW5nRGF0YTxUPihi
dWlsZEtlcm5pbmdQYWlyKTsKICAgICBzdGQ6OnNvcnQoa2VybmluZ0RhdGEuYmVnaW4oKSwga2Vy
bmluZ0RhdGEuZW5kKCkpOwpAQCAtNjg3LDUxICs3MDYsNTEgQEAgc2l6ZV90IFNWR1RvT1RGRm9u
dENvbnZlcnRlcjo6YXBwZW5kS0VSTlN1YnRhYmxlKFZlY3RvcjxjaGFyPiYgcmVzdWx0LCBib29s
IChUOjoKICAgICAgICAgc2l6ZU9mS2VybmluZ0RhdGFUYWJsZSA9IDE0OwogICAgIH0KIAotICAg
IHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gVmVyc2lvbiBvZiBzdWJ0YWJsZQotICAgIHdyaXRlMTYo
cmVzdWx0LCBzaXplT2ZLZXJuaW5nRGF0YVRhYmxlKTsgLy8gTGVuZ3RoIG9mIHRoaXMgc3VidGFi
bGUKLSAgICB3cml0ZTE2KHJlc3VsdCwgY292ZXJhZ2UpOyAvLyBUYWJsZSBjb3ZlcmFnZSBiaXRm
aWVsZAorICAgIGFwcGVuZDE2KDApOyAvLyBWZXJzaW9uIG9mIHN1YnRhYmxlCisgICAgYXBwZW5k
MTYoc2l6ZU9mS2VybmluZ0RhdGFUYWJsZSk7IC8vIExlbmd0aCBvZiB0aGlzIHN1YnRhYmxlCisg
ICAgYXBwZW5kMTYoY292ZXJhZ2UpOyAvLyBUYWJsZSBjb3ZlcmFnZSBiaXRmaWVsZAogCiAgICAg
dWludDE2X3Qgcm91bmRlZE51bUtlcm5pbmdQYWlycyA9IHJvdW5kRG93blRvUG93ZXJPZlR3byhr
ZXJuaW5nRGF0YS5zaXplKCkpOwogCi0gICAgd3JpdGUxNihyZXN1bHQsIGtlcm5pbmdEYXRhLnNp
emUoKSk7Ci0gICAgd3JpdGUxNihyZXN1bHQsIHJvdW5kZWROdW1LZXJuaW5nUGFpcnMgKiA2KTsg
Ly8gc2VhcmNoUmFuZ2U6ICJUaGUgbGFyZ2VzdCBwb3dlciBvZiB0d28gbGVzcyB0aGFuIG9yIGVx
dWFsIHRvIHRoZSB2YWx1ZSBvZiBuUGFpcnMsIG11bHRpcGxpZWQgYnkgdGhlIHNpemUgaW4gYnl0
ZXMgb2YgYW4gZW50cnkgaW4gdGhlIHRhYmxlLiIKLSAgICB3cml0ZTE2KHJlc3VsdCwgaW50ZWdy
YWxMb2cyKHJvdW5kZWROdW1LZXJuaW5nUGFpcnMpKTsgLy8gZW50cnlTZWxlY3RvcjogImxvZzIg
b2YgdGhlIGxhcmdlc3QgcG93ZXIgb2YgdHdvIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFs
dWUgb2YgblBhaXJzLiIKLSAgICB3cml0ZTE2KHJlc3VsdCwgKGtlcm5pbmdEYXRhLnNpemUoKSAt
IHJvdW5kZWROdW1LZXJuaW5nUGFpcnMpICogNik7IC8vIHJhbmdlU2hpZnQ6ICJUaGUgdmFsdWUg
b2YgblBhaXJzIG1pbnVzIHRoZSBsYXJnZXN0IHBvd2VyIG9mIHR3byBsZXNzIHRoYW4gb3IgZXF1
YWwgdG8gblBhaXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZW4gbXVsdGlwbGllZCBieSB0
aGUgc2l6ZSBpbiBieXRlcyBvZiBhbiBlbnRyeSBpbiB0aGUgdGFibGUuIgorICAgIGFwcGVuZDE2
KGtlcm5pbmdEYXRhLnNpemUoKSk7CisgICAgYXBwZW5kMTYocm91bmRlZE51bUtlcm5pbmdQYWly
cyAqIDYpOyAvLyBzZWFyY2hSYW5nZTogIlRoZSBsYXJnZXN0IHBvd2VyIG9mIHR3byBsZXNzIHRo
YW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIG5QYWlycywgbXVsdGlwbGllZCBieSB0aGUgc2l6
ZSBpbiBieXRlcyBvZiBhbiBlbnRyeSBpbiB0aGUgdGFibGUuIgorICAgIGFwcGVuZDE2KGludGVn
cmFsTG9nMihyb3VuZGVkTnVtS2VybmluZ1BhaXJzKSk7IC8vIGVudHJ5U2VsZWN0b3I6ICJsb2cy
IG9mIHRoZSBsYXJnZXN0IHBvd2VyIG9mIHR3byBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZh
bHVlIG9mIG5QYWlycy4iCisgICAgYXBwZW5kMTYoKGtlcm5pbmdEYXRhLnNpemUoKSAtIHJvdW5k
ZWROdW1LZXJuaW5nUGFpcnMpICogNik7IC8vIHJhbmdlU2hpZnQ6ICJUaGUgdmFsdWUgb2YgblBh
aXJzIG1pbnVzIHRoZSBsYXJnZXN0IHBvd2VyIG9mIHR3byBsZXNzIHRoYW4gb3IgZXF1YWwgdG8g
blBhaXJzLAorICAgICAgICAvLyBhbmQgdGhlbiBtdWx0aXBsaWVkIGJ5IHRoZSBzaXplIGluIGJ5
dGVzIG9mIGFuIGVudHJ5IGluIHRoZSB0YWJsZS4iCiAKICAgICBmb3IgKGF1dG8mIGtlcm5pbmdE
YXRhIDoga2VybmluZ0RhdGEpIHsKLSAgICAgICAgd3JpdGUxNihyZXN1bHQsIGtlcm5pbmdEYXRh
LmdseXBoMSk7Ci0gICAgICAgIHdyaXRlMTYocmVzdWx0LCBrZXJuaW5nRGF0YS5nbHlwaDIpOwot
ICAgICAgICB3cml0ZTE2KHJlc3VsdCwga2VybmluZ0RhdGEuYWRqdXN0bWVudCk7CisgICAgICAg
IGFwcGVuZDE2KGtlcm5pbmdEYXRhLmdseXBoMSk7CisgICAgICAgIGFwcGVuZDE2KGtlcm5pbmdE
YXRhLmdseXBoMik7CisgICAgICAgIGFwcGVuZDE2KGtlcm5pbmdEYXRhLmFkanVzdG1lbnQpOwog
ICAgIH0KIAogICAgIHJldHVybiBzaXplT2ZLZXJuaW5nRGF0YVRhYmxlOwogfQogCi12b2lkIFNW
R1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kS0VSTlRhYmxlKFZlY3RvcjxjaGFyPiYgcmVzdWx0
KSBjb25zdAordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEtFUk5UYWJsZSgpCiB7
Ci0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBWZXJzaW9uCi0gICAgd3JpdGUxNihyZXN1bHQs
IDIpOyAvLyBOdW1iZXIgb2Ygc3VidGFibGVzCisgICAgYXBwZW5kMTYoMCk7IC8vIFZlcnNpb24K
KyAgICBhcHBlbmQxNigyKTsgLy8gTnVtYmVyIG9mIHN1YnRhYmxlcwogCiAjaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgIGF1dG8gc3VidGFibGVzT2Zmc2V0ID0gcmVzdWx0LnNpemUoKTsKKyAgICBh
dXRvIHN1YnRhYmxlc09mZnNldCA9IG1fcmVzdWx0LnNpemUoKTsKICNlbmRpZgogCi0gICAgc2l6
ZV90IHNpemVPZkhvcml6b250YWxTdWJ0YWJsZSA9IGFwcGVuZEtFUk5TdWJ0YWJsZTxTVkdIS2Vy
bkVsZW1lbnQ+KHJlc3VsdCwgJlNWR0hLZXJuRWxlbWVudDo6YnVpbGRIb3Jpem9udGFsS2Vybmlu
Z1BhaXIsIDEpOwotICAgIEFTU0VSVF9VTlVTRUQoc2l6ZU9mSG9yaXpvbnRhbFN1YnRhYmxlLCBz
dWJ0YWJsZXNPZmZzZXQgKyBzaXplT2ZIb3Jpem9udGFsU3VidGFibGUgPT0gcmVzdWx0LnNpemUo
KSk7Ci0gICAgc2l6ZV90IHNpemVPZlZlcnRpY2FsU3VidGFibGUgPSBhcHBlbmRLRVJOU3VidGFi
bGU8U1ZHVktlcm5FbGVtZW50PihyZXN1bHQsICZTVkdWS2VybkVsZW1lbnQ6OmJ1aWxkVmVydGlj
YWxLZXJuaW5nUGFpciwgMCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzaXplT2ZWZXJ0aWNhbFN1YnRh
YmxlLCBzdWJ0YWJsZXNPZmZzZXQgKyBzaXplT2ZIb3Jpem9udGFsU3VidGFibGUgKyBzaXplT2ZW
ZXJ0aWNhbFN1YnRhYmxlID09IHJlc3VsdC5zaXplKCkpOworICAgIHNpemVfdCBzaXplT2ZIb3Jp
em9udGFsU3VidGFibGUgPSBhcHBlbmRLRVJOU3VidGFibGU8U1ZHSEtlcm5FbGVtZW50PigmU1ZH
SEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5nUGFpciwgMSk7CisgICAgQVNTRVJU
X1VOVVNFRChzaXplT2ZIb3Jpem9udGFsU3VidGFibGUsIHN1YnRhYmxlc09mZnNldCArIHNpemVP
Zkhvcml6b250YWxTdWJ0YWJsZSA9PSBtX3Jlc3VsdC5zaXplKCkpOworICAgIHNpemVfdCBzaXpl
T2ZWZXJ0aWNhbFN1YnRhYmxlID0gYXBwZW5kS0VSTlN1YnRhYmxlPFNWR1ZLZXJuRWxlbWVudD4o
JlNWR1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtlcm5pbmdQYWlyLCAwKTsKKyAgICBBU1NF
UlRfVU5VU0VEKHNpemVPZlZlcnRpY2FsU3VidGFibGUsIHN1YnRhYmxlc09mZnNldCArIHNpemVP
Zkhvcml6b250YWxTdWJ0YWJsZSArIHNpemVPZlZlcnRpY2FsU3VidGFibGUgPT0gbV9yZXN1bHQu
c2l6ZSgpKTsKIAogICAgIC8vIFdvcmsgYXJvdW5kIGEgYnVnIGluIEFwcGxlJ3MgZm9udCBwYXJz
ZXIgYnkgYWRkaW5nIHNvbWUgcGFkZGluZyBieXRlcy4gPHJkYXI6Ly9wcm9ibGVtLzE4NDAxOTAx
PgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgKytpKQotICAgICAgICByZXN1bHQuYXBwZW5k
KDApOworICAgICAgICBtX3Jlc3VsdC5hcHBlbmQoMCk7CiB9CiAKIHN0YXRpYyB2b2lkIHdyaXRl
Q0ZGRW5jb2RlZE51bWJlcihWZWN0b3I8Y2hhcj4mIHZlY3RvciwgZmxvYXQgbnVtYmVyKQogewog
ICAgIGludCByYXcgPSBudW1iZXIgKiBwb3dmKDIsIDE2KTsKICAgICB2ZWN0b3IuYXBwZW5kKC0x
KTsgLy8gMHhGRgotICAgIHdyaXRlMzIodmVjdG9yLCByYXcpOworICAgIGFwcGVuZDMyKHZlY3Rv
ciwgcmF3KTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgckxpbmVUbyA9IDB4MDU7CkBAIC04Nzks
MTkgKzg5OCwxOSBAQCBWZWN0b3I8Y2hhcj4gU1ZHVG9PVEZGb250Q29udmVydGVyOjp0cmFuc2Nv
ZGVHbHlwaFBhdGhzKGZsb2F0IHdpZHRoLCBjb25zdCBUJiBnbAogfQogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KLXZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRHbHlwaERhdGEoY29u
c3QgVmVjdG9yPGNoYXI+JiBwYXRoLCBjb25zdCBUKiwgZmxvYXQgaG9yaXpvbnRhbEFkdmFuY2Us
IGZsb2F0IHZlcnRpY2FsQWR2YW5jZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCwgQ29k
ZXBvaW50IGNvZGVwb2ludCkKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRHbHlw
aERhdGEoY29uc3QgVmVjdG9yPGNoYXI+JiBwYXRoLCBjb25zdCBUKiwgZmxvYXQgaG9yaXpvbnRh
bEFkdmFuY2UsIGZsb2F0IHZlcnRpY2FsQWR2YW5jZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGlu
Z0JveCwgY29uc3QgQ29kZXBvaW50cyYgY29kZXBvaW50cykKIHsKLSAgICBtX2dseXBocy5hcHBl
bmQoR2x5cGhEYXRhKHBhdGgsIG51bGxwdHIsIGhvcml6b250YWxBZHZhbmNlLCB2ZXJ0aWNhbEFk
dmFuY2UsIGJvdW5kaW5nQm94LCBjb2RlcG9pbnQpKTsKKyAgICBtX2dseXBocy5hcHBlbmQoR2x5
cGhEYXRhKHBhdGgsIG51bGxwdHIsIGhvcml6b250YWxBZHZhbmNlLCB2ZXJ0aWNhbEFkdmFuY2Us
IGJvdW5kaW5nQm94LCBjb2RlcG9pbnRzKSk7CiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lkIFNWR1Rv
T1RGRm9udENvbnZlcnRlcjo6YXBwZW5kR2x5cGhEYXRhKGNvbnN0IFZlY3RvcjxjaGFyPiYgcGF0
aCwgY29uc3QgU1ZHR2x5cGhFbGVtZW50KiBlbGVtZW50LCBmbG9hdCBob3Jpem9udGFsQWR2YW5j
ZSwgZmxvYXQgdmVydGljYWxBZHZhbmNlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBD
b2RlcG9pbnQgY29kZXBvaW50KQordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEds
eXBoRGF0YShjb25zdCBWZWN0b3I8Y2hhcj4mIHBhdGgsIGNvbnN0IFNWR0dseXBoRWxlbWVudCog
ZWxlbWVudCwgZmxvYXQgaG9yaXpvbnRhbEFkdmFuY2UsIGZsb2F0IHZlcnRpY2FsQWR2YW5jZSwg
Y29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCwgY29uc3QgQ29kZXBvaW50cyYgY29kZXBvaW50
cykKIHsKLSAgICBtX2dseXBocy5hcHBlbmQoR2x5cGhEYXRhKHBhdGgsIGVsZW1lbnQsIGhvcml6
b250YWxBZHZhbmNlLCB2ZXJ0aWNhbEFkdmFuY2UsIGJvdW5kaW5nQm94LCBjb2RlcG9pbnQpKTsK
KyAgICBtX2dseXBocy5hcHBlbmQoR2x5cGhEYXRhKHBhdGgsIGVsZW1lbnQsIGhvcml6b250YWxB
ZHZhbmNlLCB2ZXJ0aWNhbEFkdmFuY2UsIGJvdW5kaW5nQm94LCBjb2RlcG9pbnRzKSk7CiB9CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OnByb2Nl
c3NHbHlwaEVsZW1lbnQoY29uc3QgVCYgZWxlbWVudCwgZmxvYXQgZGVmYXVsdEhvcml6b250YWxB
ZHZhbmNlLCBmbG9hdCBkZWZhdWx0VmVydGljYWxBZHZhbmNlLCBDb2RlcG9pbnQgY29kZXBvaW50
LCBib29sJiBpbml0aWFsR2x5cGgpCit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6cHJvY2Vz
c0dseXBoRWxlbWVudChjb25zdCBUJiBlbGVtZW50LCBmbG9hdCBkZWZhdWx0SG9yaXpvbnRhbEFk
dmFuY2UsIGZsb2F0IGRlZmF1bHRWZXJ0aWNhbEFkdmFuY2UsIGNvbnN0IENvZGVwb2ludHMmIGNv
ZGVwb2ludHMsIGJvb2wmIGluaXRpYWxHbHlwaCkKIHsKICAgICBib29sIG9rOwogICAgIGZsb2F0
IGhvcml6b250YWxBZHZhbmNlID0gZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpo
b3Jpel9hZHZfeEF0dHIpLnRvRmxvYXQoJm9rKTsKQEAgLTkxMiw3ICs5MzEsMzEgQEAgdm9pZCBT
VkdUb09URkZvbnRDb252ZXJ0ZXI6OnByb2Nlc3NHbHlwaEVsZW1lbnQoY29uc3QgVCYgZWxlbWVu
dCwgZmxvYXQgZGVmYXVsdEgKICAgICBtX21pblJpZ2h0U2lkZUJlYXJpbmcgPSBzdGQ6Om1pbiht
X21pblJpZ2h0U2lkZUJlYXJpbmcsIGhvcml6b250YWxBZHZhbmNlIC0gZ2x5cGhCb3VuZGluZ0Jv
eC5tYXhYKCkpOwogICAgIGluaXRpYWxHbHlwaCA9IGZhbHNlOwogCi0gICAgYXBwZW5kR2x5cGhE
YXRhKHBhdGgsICZlbGVtZW50LCBob3Jpem9udGFsQWR2YW5jZSwgdmVydGljYWxBZHZhbmNlLCBn
bHlwaEJvdW5kaW5nQm94LCBjb2RlcG9pbnQpOworICAgIGFwcGVuZEdseXBoRGF0YShwYXRoLCAm
ZWxlbWVudCwgaG9yaXpvbnRhbEFkdmFuY2UsIHZlcnRpY2FsQWR2YW5jZSwgZ2x5cGhCb3VuZGlu
Z0JveCwgY29kZXBvaW50cyk7Cit9CisKK2Jvb2wgU1ZHVG9PVEZGb250Q29udmVydGVyOjpjb21w
YXJlQ29kZXBvaW50c0xleGljb2dyYXBoaWNhbGx5KGNvbnN0IEdseXBoRGF0YSYgZGF0YTEsIGNv
bnN0IEdseXBoRGF0YSYgZGF0YTIpCit7CisgICAgdW5zaWduZWQgaTEgPSAwLCBpMiA9IDA7Cisg
ICAgVUNoYXIzMiBjb2RlcG9pbnQxLCBjb2RlcG9pbnQyOworICAgIHVuc2lnbmVkIGxlbmd0aDEg
PSBkYXRhMS5jb2RlcG9pbnRzLmxlbmd0aCgpLCBsZW5ndGgyID0gZGF0YTIuY29kZXBvaW50cy5s
ZW5ndGgoKTsKKyAgICBmb3IgKCA7IGkxIDwgbGVuZ3RoMSAmJiBpMiA8IGxlbmd0aDI7ICkgewor
ICAgICAgICBpZiAoZGF0YTEuY29kZXBvaW50cy5pczhCaXQoKSkKKyAgICAgICAgICAgIGNvZGVw
b2ludDEgPSBkYXRhMS5jb2RlcG9pbnRzW2kxKytdOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBVMTZfTkVYVChkYXRhMS5jb2RlcG9pbnRzLmNoYXJhY3RlcnMxNigpLCBpMSwgbGVuZ3RoMSwg
Y29kZXBvaW50MSk7CisKKyAgICAgICAgaWYgKGRhdGEyLmNvZGVwb2ludHMuaXM4Qml0KCkpCisg
ICAgICAgICAgICBjb2RlcG9pbnQyID0gZGF0YTEuY29kZXBvaW50c1tpMisrXTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgVTE2X05FWFQoZGF0YTIuY29kZXBvaW50cy5jaGFyYWN0ZXJzMTYo
KSwgaTIsIGxlbmd0aDIsIGNvZGVwb2ludDIpOworCisgICAgICAgIGlmIChjb2RlcG9pbnQxIDwg
Y29kZXBvaW50MikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoY29kZXBv
aW50MSA+IGNvZGVwb2ludDIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiBsZW5ndGgxIDwgbGVuZ3RoMjsKIH0KIAogU1ZHVG9PVEZGb250Q29udmVydGVyOjpT
VkdUb09URkZvbnRDb252ZXJ0ZXIoY29uc3QgU1ZHRm9udEVsZW1lbnQmIGZvbnRFbGVtZW50KQpA
QCAtOTM1LDcgKzk3OCw3IEBAIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6U1ZHVG9PVEZGb250Q29u
dmVydGVyKGNvbnN0IFNWR0ZvbnRFbGVtZW50JiBmb250RWxlbWVudCkKICAgICAgICAgbV91bml0
c1BlckVtID0gbV9mb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKTsKIAogICAgIGlmIChtX21p
c3NpbmdHbHlwaEVsZW1lbnQpCi0gICAgICAgIHByb2Nlc3NHbHlwaEVsZW1lbnQoKm1fbWlzc2lu
Z0dseXBoRWxlbWVudCwgZGVmYXVsdEhvcml6b250YWxBZHZhbmNlLCBkZWZhdWx0VmVydGljYWxB
ZHZhbmNlLCAwLCBpbml0aWFsR2x5cGgpOworICAgICAgICBwcm9jZXNzR2x5cGhFbGVtZW50KCpt
X21pc3NpbmdHbHlwaEVsZW1lbnQsIGRlZmF1bHRIb3Jpem9udGFsQWR2YW5jZSwgZGVmYXVsdFZl
cnRpY2FsQWR2YW5jZSwgQ29kZXBvaW50cygpLCBpbml0aWFsR2x5cGgpOwogICAgIGVsc2Ugewog
ICAgICAgICBWZWN0b3I8Y2hhcj4gbm90ZGVmQ2hhclN0cmluZzsKICAgICAgICAgd3JpdGVDRkZF
bmNvZGVkTnVtYmVyKG5vdGRlZkNoYXJTdHJpbmcsIG1fdW5pdHNQZXJFbSk7CkBAIC05NDMsMTQg
Kzk4NiwxNCBAQCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OlNWR1RvT1RGRm9udENvbnZlcnRlcihj
b25zdCBTVkdGb250RWxlbWVudCYgZm9udEVsZW1lbnQpCiAgICAgICAgIHdyaXRlQ0ZGRW5jb2Rl
ZE51bWJlcihub3RkZWZDaGFyU3RyaW5nLCAwKTsKICAgICAgICAgbm90ZGVmQ2hhclN0cmluZy5h
cHBlbmQock1vdmVUbyk7CiAgICAgICAgIG5vdGRlZkNoYXJTdHJpbmcuYXBwZW5kKGVuZENoYXIp
OwotICAgICAgICBtX2dseXBocy5hcHBlbmQoR2x5cGhEYXRhKG5vdGRlZkNoYXJTdHJpbmcsIG51
bGxwdHIsIG1fdW5pdHNQZXJFbSwgbV91bml0c1BlckVtLCBGbG9hdFJlY3QoKSwgMCkpOworICAg
ICAgICBtX2dseXBocy5hcHBlbmQoR2x5cGhEYXRhKG5vdGRlZkNoYXJTdHJpbmcsIG51bGxwdHIs
IG1fdW5pdHNQZXJFbSwgbV91bml0c1BlckVtLCBGbG9hdFJlY3QoKSwgQ29kZXBvaW50cygpKSk7
CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBnbHlwaEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxT
VkdHbHlwaEVsZW1lbnQ+KG1fZm9udEVsZW1lbnQpKSB7CiAgICAgICAgIGF1dG8mIHVuaWNvZGVB
dHRyaWJ1dGUgPSBnbHlwaEVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6dW5pY29k
ZUF0dHIpOwogICAgICAgICAvLyBPbmx5IHN1cHBvcnQgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5l
IHcvbyBsaWdhdHVyZXMgZm9yIG5vdwotICAgICAgICBpZiAodW5pY29kZUF0dHJpYnV0ZS5sZW5n
dGgoKSA9PSAxKQotICAgICAgICAgICAgcHJvY2Vzc0dseXBoRWxlbWVudChnbHlwaEVsZW1lbnQs
IGRlZmF1bHRIb3Jpem9udGFsQWR2YW5jZSwgZGVmYXVsdFZlcnRpY2FsQWR2YW5jZSwgdW5pY29k
ZUF0dHJpYnV0ZVswXSwgaW5pdGlhbEdseXBoKTsKKyAgICAgICAgaWYgKCF1bmljb2RlQXR0cmli
dXRlLmlzRW1wdHkoKSkgLy8gSWYgd2UgY2FuIG5ldmVyIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBn
bHlwaCwgaWdub3JlIGl0IGNvbXBsZXRlbHkKKyAgICAgICAgICAgIHByb2Nlc3NHbHlwaEVsZW1l
bnQoZ2x5cGhFbGVtZW50LCBkZWZhdWx0SG9yaXpvbnRhbEFkdmFuY2UsIGRlZmF1bHRWZXJ0aWNh
bEFkdmFuY2UsIHVuaWNvZGVBdHRyaWJ1dGUsIGluaXRpYWxHbHlwaCk7CiAgICAgfQogCiAgICAg
aWYgKG1fZ2x5cGhzLnNpemUoKSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8R2x5cGg+OjptYXgoKSkg
ewpAQCAtOTU5LDE5ICsxMDAyLDE3IEBAIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6U1ZHVG9PVEZG
b250Q29udmVydGVyKGNvbnN0IFNWR0ZvbnRFbGVtZW50JiBmb250RWxlbWVudCkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIHN0ZDo6c29ydChtX2dseXBocy5iZWdpbigpLCBtX2dseXBo
cy5lbmQoKSwgW10oY29uc3QgR2x5cGhEYXRhJiBkYXRhMSwgY29uc3QgR2x5cGhEYXRhJiBkYXRh
MikgewotICAgICAgICByZXR1cm4gZGF0YTEuY29kZXBvaW50IDwgZGF0YTIuY29kZXBvaW50Owot
ICAgIH0pOworICAgIHN0ZDo6c29ydChtX2dseXBocy5iZWdpbigpLCBtX2dseXBocy5lbmQoKSwg
JmNvbXBhcmVDb2RlcG9pbnRzTGV4aWNvZ3JhcGhpY2FsbHkpOwogCiAgICAgZm9yIChHbHlwaCBp
ID0gMDsgaSA8IG1fZ2x5cGhzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEdseXBoRGF0YSYgZ2x5
cGggPSBtX2dseXBoc1tpXTsKICAgICAgICAgaWYgKGdseXBoLmdseXBoRWxlbWVudCkgewogICAg
ICAgICAgICAgYXV0byYgZ2x5cGhOYW1lID0gZ2x5cGguZ2x5cGhFbGVtZW50LT5mYXN0R2V0QXR0
cmlidXRlKFNWR05hbWVzOjpnbHlwaF9uYW1lQXR0cik7Ci0gICAgICAgICAgICBpZiAoIWdseXBo
TmFtZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBpZiAoIWdseXBoTmFtZS5pc051bGwoKSkKICAg
ICAgICAgICAgICAgICBtX2dseXBoTmFtZVRvSW5kZXhNYXAuYWRkKGdseXBoTmFtZSwgaSk7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKGdseXBoLmNvZGVwb2ludCkKLSAgICAgICAgICAgIG1fY29k
ZXBvaW50VG9JbmRleE1hcC5hZGQoZ2x5cGguY29kZXBvaW50LCBpKTsKKyAgICAgICAgaWYgKCFn
bHlwaC5jb2RlcG9pbnRzLmlzTnVsbCgpKQorICAgICAgICAgICAgbV9jb2RlcG9pbnRzVG9JbmRp
Y2VzTWFwLmFkZChnbHlwaC5jb2RlcG9pbnRzLCBWZWN0b3I8R2x5cGg+KCkpLml0ZXJhdG9yLT52
YWx1ZS5hcHBlbmQoaSk7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IEhhbmRsZSBjb21tYXMKQEAg
LTEwMDYsOTMgKzEwNDcsOTIgQEAgc3RhdGljIGlubGluZSBib29sIGlzRm91ckJ5dGVBbGlnbmVk
KHNpemVfdCB4KQogICAgIHJldHVybiAhKHggJiBzaXplb2YodWludDMyX3QpLTEpOwogfQogCi1z
dGF0aWMgdWludDMyX3QgY2FsY3VsYXRlQ2hlY2tzdW0oY29uc3QgVmVjdG9yPGNoYXI+JiB0YWJs
ZSwgc2l6ZV90IHN0YXJ0aW5nT2Zmc2V0LCBzaXplX3QgZW5kaW5nT2Zmc2V0KQordWludDMyX3Qg
U1ZHVG9PVEZGb250Q29udmVydGVyOjpjYWxjdWxhdGVDaGVja3N1bShzaXplX3Qgc3RhcnRpbmdP
ZmZzZXQsIHNpemVfdCBlbmRpbmdPZmZzZXQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzRm91ckJ5
dGVBbGlnbmVkKGVuZGluZ09mZnNldCAtIHN0YXJ0aW5nT2Zmc2V0KSk7CiAgICAgdWludDMyX3Qg
c3VtID0gMDsKICAgICBmb3IgKDsgc3RhcnRpbmdPZmZzZXQgPCBlbmRpbmdPZmZzZXQ7IHN0YXJ0
aW5nT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgLy8gVGhlIHNwZWMgaXMgdW5jbGVhciB3aGV0aGVy
IHRoaXMgaXMgYSBsaXR0bGUtZW5kaWFuIHN1bSBvciBhIGJpZy1lbmRpYW4gc3VtLiBDaG9vc2Ug
bGl0dGxlIGVuZGlhbi4KLSAgICAgICAgc3VtICs9IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Pih0YWJsZVtzdGFydGluZ09mZnNldCArIDNdKSA8PCAyNCkKLSAgICAgICAgICAgIHwgKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KHRhYmxlW3N0YXJ0aW5nT2Zmc2V0ICsgMl0pIDw8IDE2KQot
ICAgICAgICAgICAgfCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odGFibGVbc3RhcnRpbmdP
ZmZzZXQgKyAxXSkgPDwgOCkKLSAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4odGFibGVbc3RhcnRpbmdPZmZzZXRdKTsKKyAgICAgICAgc3VtICs9IChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPihtX3Jlc3VsdFtzdGFydGluZ09mZnNldCArIDNdKSA8PCAyNCkKKyAgICAg
ICAgICAgIHwgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KG1fcmVzdWx0W3N0YXJ0aW5nT2Zm
c2V0ICsgMl0pIDw8IDE2KQorICAgICAgICAgICAgfCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4obV9yZXN1bHRbc3RhcnRpbmdPZmZzZXQgKyAxXSkgPDwgOCkKKyAgICAgICAgICAgIHwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obV9yZXN1bHRbc3RhcnRpbmdPZmZzZXRdKTsKICAgICB9
CiAgICAgcmV0dXJuIHN1bTsKIH0KIAotdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVu
ZFRhYmxlKGNvbnN0IGNoYXIgaWRlbnRpZmllcls0XSwgVmVjdG9yPGNoYXI+JiBvdXRwdXQsIEZv
bnRBcHBlbmRpbmdGdW5jdGlvbiBhcHBlbmRpbmdGdW5jdGlvbikKK3ZvaWQgU1ZHVG9PVEZGb250
Q29udmVydGVyOjphcHBlbmRUYWJsZShjb25zdCBjaGFyIGlkZW50aWZpZXJbNF0sIEZvbnRBcHBl
bmRpbmdGdW5jdGlvbiBhcHBlbmRpbmdGdW5jdGlvbikKIHsKLSAgICBzaXplX3Qgb2Zmc2V0ID0g
b3V0cHV0LnNpemUoKTsKKyAgICBzaXplX3Qgb2Zmc2V0ID0gbV9yZXN1bHQuc2l6ZSgpOwogICAg
IEFTU0VSVChpc0ZvdXJCeXRlQWxpZ25lZChvZmZzZXQpKTsKLSAgICAodGhpcy0+KmFwcGVuZGlu
Z0Z1bmN0aW9uKShvdXRwdXQpOwotICAgIHNpemVfdCB1bnBhZGRlZFNpemUgPSBvdXRwdXQuc2l6
ZSgpIC0gb2Zmc2V0OwotICAgIHdoaWxlICghaXNGb3VyQnl0ZUFsaWduZWQob3V0cHV0LnNpemUo
KSkpCi0gICAgICAgIG91dHB1dC5hcHBlbmQoMCk7Ci0gICAgQVNTRVJUKGlzRm91ckJ5dGVBbGln
bmVkKG91dHB1dC5zaXplKCkpKTsKKyAgICAodGhpcy0+KmFwcGVuZGluZ0Z1bmN0aW9uKSgpOwor
ICAgIHNpemVfdCB1bnBhZGRlZFNpemUgPSBtX3Jlc3VsdC5zaXplKCkgLSBvZmZzZXQ7CisgICAg
d2hpbGUgKCFpc0ZvdXJCeXRlQWxpZ25lZChtX3Jlc3VsdC5zaXplKCkpKQorICAgICAgICBtX3Jl
c3VsdC5hcHBlbmQoMCk7CisgICAgQVNTRVJUKGlzRm91ckJ5dGVBbGlnbmVkKG1fcmVzdWx0LnNp
emUoKSkpOwogICAgIHNpemVfdCBkaXJlY3RvcnlFbnRyeU9mZnNldCA9IGtTTkZUSGVhZGVyU2l6
ZSArIG1fdGFibGVzQXBwZW5kZWRDb3VudCAqIGtEaXJlY3RvcnlFbnRyeVNpemU7Ci0gICAgb3V0
cHV0W2RpcmVjdG9yeUVudHJ5T2Zmc2V0XSA9IGlkZW50aWZpZXJbMF07Ci0gICAgb3V0cHV0W2Rp
cmVjdG9yeUVudHJ5T2Zmc2V0ICsgMV0gPSBpZGVudGlmaWVyWzFdOwotICAgIG91dHB1dFtkaXJl
Y3RvcnlFbnRyeU9mZnNldCArIDJdID0gaWRlbnRpZmllclsyXTsKLSAgICBvdXRwdXRbZGlyZWN0
b3J5RW50cnlPZmZzZXQgKyAzXSA9IGlkZW50aWZpZXJbM107Ci0gICAgb3ZlcndyaXRlMzIob3V0
cHV0LCBkaXJlY3RvcnlFbnRyeU9mZnNldCArIDQsIGNhbGN1bGF0ZUNoZWNrc3VtKG91dHB1dCwg
b2Zmc2V0LCBvdXRwdXQuc2l6ZSgpKSk7Ci0gICAgb3ZlcndyaXRlMzIob3V0cHV0LCBkaXJlY3Rv
cnlFbnRyeU9mZnNldCArIDgsIG9mZnNldCk7Ci0gICAgb3ZlcndyaXRlMzIob3V0cHV0LCBkaXJl
Y3RvcnlFbnRyeU9mZnNldCArIDEyLCB1bnBhZGRlZFNpemUpOworICAgIG1fcmVzdWx0W2RpcmVj
dG9yeUVudHJ5T2Zmc2V0XSA9IGlkZW50aWZpZXJbMF07CisgICAgbV9yZXN1bHRbZGlyZWN0b3J5
RW50cnlPZmZzZXQgKyAxXSA9IGlkZW50aWZpZXJbMV07CisgICAgbV9yZXN1bHRbZGlyZWN0b3J5
RW50cnlPZmZzZXQgKyAyXSA9IGlkZW50aWZpZXJbMl07CisgICAgbV9yZXN1bHRbZGlyZWN0b3J5
RW50cnlPZmZzZXQgKyAzXSA9IGlkZW50aWZpZXJbM107CisgICAgb3ZlcndyaXRlMzIoZGlyZWN0
b3J5RW50cnlPZmZzZXQgKyA0LCBjYWxjdWxhdGVDaGVja3N1bShvZmZzZXQsIG1fcmVzdWx0LnNp
emUoKSkpOworICAgIG92ZXJ3cml0ZTMyKGRpcmVjdG9yeUVudHJ5T2Zmc2V0ICsgOCwgb2Zmc2V0
KTsKKyAgICBvdmVyd3JpdGUzMihkaXJlY3RvcnlFbnRyeU9mZnNldCArIDEyLCB1bnBhZGRlZFNp
emUpOwogICAgICsrbV90YWJsZXNBcHBlbmRlZENvdW50OwogfQogCi1WZWN0b3I8Y2hhcj4gU1ZH
VG9PVEZGb250Q29udmVydGVyOjpjb252ZXJ0U1ZHVG9PVEZGb250KCkKK3ZvaWQgU1ZHVG9PVEZG
b250Q29udmVydGVyOjpjb252ZXJ0U1ZHVG9PVEZGb250KCkKIHsKLSAgICBWZWN0b3I8Y2hhcj4g
cmVzdWx0OwogICAgIGlmICghbV9nbHlwaHMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICByZXR1cm47CiAKICAgICB1aW50MTZfdCBudW1UYWJsZXMgPSAxMzsKICAgICB1
aW50MTZfdCByb3VuZGVkTnVtVGFibGVzID0gcm91bmREb3duVG9Qb3dlck9mVHdvKG51bVRhYmxl
cyk7CiAgICAgdWludDE2X3Qgc2VhcmNoUmFuZ2UgPSByb3VuZGVkTnVtVGFibGVzICogMTY7IC8v
IHNlYXJjaFJhbmdlOiAiKE1heGltdW0gcG93ZXIgb2YgMiA8PSBudW1UYWJsZXMpIHggMTYuIgog
Ci0gICAgcmVzdWx0LmFwcGVuZCgnTycpOwotICAgIHJlc3VsdC5hcHBlbmQoJ1QnKTsKLSAgICBy
ZXN1bHQuYXBwZW5kKCdUJyk7Ci0gICAgcmVzdWx0LmFwcGVuZCgnTycpOwotICAgIHdyaXRlMTYo
cmVzdWx0LCBudW1UYWJsZXMpOwotICAgIHdyaXRlMTYocmVzdWx0LCBzZWFyY2hSYW5nZSk7Ci0g
ICAgd3JpdGUxNihyZXN1bHQsIGludGVncmFsTG9nMihyb3VuZGVkTnVtVGFibGVzKSk7IC8vIGVu
dHJ5U2VsZWN0b3I6ICJMb2cyKG1heGltdW0gcG93ZXIgb2YgMiA8PSBudW1UYWJsZXMpLiIKLSAg
ICB3cml0ZTE2KHJlc3VsdCwgbnVtVGFibGVzICogMTYgLSBzZWFyY2hSYW5nZSk7IC8vIHJhbmdl
U2hpZnQ6ICJOdW1UYWJsZXMgeCAxNi1zZWFyY2hSYW5nZS4iCisgICAgbV9yZXN1bHQuYXBwZW5k
KCdPJyk7CisgICAgbV9yZXN1bHQuYXBwZW5kKCdUJyk7CisgICAgbV9yZXN1bHQuYXBwZW5kKCdU
Jyk7CisgICAgbV9yZXN1bHQuYXBwZW5kKCdPJyk7CisgICAgYXBwZW5kMTYobnVtVGFibGVzKTsK
KyAgICBhcHBlbmQxNihzZWFyY2hSYW5nZSk7CisgICAgYXBwZW5kMTYoaW50ZWdyYWxMb2cyKHJv
dW5kZWROdW1UYWJsZXMpKTsgLy8gZW50cnlTZWxlY3RvcjogIkxvZzIobWF4aW11bSBwb3dlciBv
ZiAyIDw9IG51bVRhYmxlcykuIgorICAgIGFwcGVuZDE2KG51bVRhYmxlcyAqIDE2IC0gc2VhcmNo
UmFuZ2UpOyAvLyByYW5nZVNoaWZ0OiAiTnVtVGFibGVzIHggMTYtc2VhcmNoUmFuZ2UuIgogCi0g
ICAgQVNTRVJUKHJlc3VsdC5zaXplKCkgPT0ga1NORlRIZWFkZXJTaXplKTsKKyAgICBBU1NFUlQo
bV9yZXN1bHQuc2l6ZSgpID09IGtTTkZUSGVhZGVyU2l6ZSk7CiAKICAgICAvLyBMZWF2ZSBzcGFj
ZSBmb3IgdGhlIERpcmVjdG9yeSBFbnRyaWVzCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBr
RGlyZWN0b3J5RW50cnlTaXplICogbnVtVGFibGVzOyArK2kpCi0gICAgICAgIHJlc3VsdC5hcHBl
bmQoMCk7Ci0KLSAgICBhcHBlbmRUYWJsZSgiQ0ZGICIsIHJlc3VsdCwgJlNWR1RvT1RGRm9udENv
bnZlcnRlcjo6YXBwZW5kQ0ZGVGFibGUpOwotICAgIGFwcGVuZFRhYmxlKCJPUy8yIiwgcmVzdWx0
LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRPUzJUYWJsZSk7Ci0gICAgYXBwZW5kVGFi
bGUoIlZPUkciLCByZXN1bHQsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFZPUkdUYWJs
ZSk7Ci0gICAgYXBwZW5kVGFibGUoImNtYXAiLCByZXN1bHQsICZTVkdUb09URkZvbnRDb252ZXJ0
ZXI6OmFwcGVuZENNQVBUYWJsZSk7Ci0gICAgYXV0byBoZWFkVGFibGVPZmZzZXQgPSByZXN1bHQu
c2l6ZSgpOwotICAgIGFwcGVuZFRhYmxlKCJoZWFkIiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29u
dmVydGVyOjphcHBlbmRIRUFEVGFibGUpOwotICAgIGFwcGVuZFRhYmxlKCJoaGVhIiwgcmVzdWx0
LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRISEVBVGFibGUpOwotICAgIGFwcGVuZFRh
YmxlKCJobXR4IiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRITVRYVGFi
bGUpOwotICAgIGFwcGVuZFRhYmxlKCJrZXJuIiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29udmVy
dGVyOjphcHBlbmRLRVJOVGFibGUpOwotICAgIGFwcGVuZFRhYmxlKCJtYXhwIiwgcmVzdWx0LCAm
U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRNQVhQVGFibGUpOwotICAgIGFwcGVuZFRhYmxl
KCJuYW1lIiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmROQU1FVGFibGUp
OwotICAgIGFwcGVuZFRhYmxlKCJwb3N0IiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29udmVydGVy
OjphcHBlbmRQT1NUVGFibGUpOwotICAgIGFwcGVuZFRhYmxlKCJ2aGVhIiwgcmVzdWx0LCAmU1ZH
VG9PVEZGb250Q29udmVydGVyOjphcHBlbmRWSEVBVGFibGUpOwotICAgIGFwcGVuZFRhYmxlKCJ2
bXR4IiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRWTVRYVGFibGUpOwor
ICAgICAgICBtX3Jlc3VsdC5hcHBlbmQoMCk7CisKKyAgICBhcHBlbmRUYWJsZSgiQ0ZGICIsICZT
VkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZENGRlRhYmxlKTsKKyAgICBhcHBlbmRUYWJsZSgi
T1MvMiIsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZE9TMlRhYmxlKTsKKyAgICBhcHBl
bmRUYWJsZSgiVk9SRyIsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFZPUkdUYWJsZSk7
CisgICAgYXBwZW5kVGFibGUoImNtYXAiLCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRD
TUFQVGFibGUpOworICAgIGF1dG8gaGVhZFRhYmxlT2Zmc2V0ID0gbV9yZXN1bHQuc2l6ZSgpOwor
ICAgIGFwcGVuZFRhYmxlKCJoZWFkIiwgJlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kSEVB
RFRhYmxlKTsKKyAgICBhcHBlbmRUYWJsZSgiaGhlYSIsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6
OmFwcGVuZEhIRUFUYWJsZSk7CisgICAgYXBwZW5kVGFibGUoImhtdHgiLCAmU1ZHVG9PVEZGb250
Q29udmVydGVyOjphcHBlbmRITVRYVGFibGUpOworICAgIGFwcGVuZFRhYmxlKCJrZXJuIiwgJlNW
R1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kS0VSTlRhYmxlKTsKKyAgICBhcHBlbmRUYWJsZSgi
bWF4cCIsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZE1BWFBUYWJsZSk7CisgICAgYXBw
ZW5kVGFibGUoIm5hbWUiLCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmROQU1FVGFibGUp
OworICAgIGFwcGVuZFRhYmxlKCJwb3N0IiwgJlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5k
UE9TVFRhYmxlKTsKKyAgICBhcHBlbmRUYWJsZSgidmhlYSIsICZTVkdUb09URkZvbnRDb252ZXJ0
ZXI6OmFwcGVuZFZIRUFUYWJsZSk7CisgICAgYXBwZW5kVGFibGUoInZtdHgiLCAmU1ZHVG9PVEZG
b250Q29udmVydGVyOjphcHBlbmRWTVRYVGFibGUpOwogCiAgICAgQVNTRVJUKG51bVRhYmxlcyA9
PSBtX3RhYmxlc0FwcGVuZGVkQ291bnQpOwogCiAgICAgLy8gY2hlY2tTdW1BZGp1c3RtZW50OiAi
VG8gY29tcHV0ZTogc2V0IGl0IHRvIDAsIGNhbGN1bGF0ZSB0aGUgY2hlY2tzdW0gZm9yIHRoZSAn
aGVhZCcgdGFibGUgYW5kIHB1dCBpdCBpbiB0aGUgdGFibGUgZGlyZWN0b3J5LAogICAgIC8vIHN1
bSB0aGUgZW50aXJlIGZvbnQgYXMgdWludDMyLCB0aGVuIHN0b3JlIEIxQjBBRkJBIC0gc3VtLiBU
aGUgY2hlY2tzdW0gZm9yIHRoZSAnaGVhZCcgdGFibGUgd2lsbCBub3cgYmUgd3JvbmcuIFRoYXQg
aXMgT0suIgotICAgIHVpbnQzMl90IGNoZWNrc3VtQWRqdXN0bWVudCA9IDB4QjFCMEFGQkFVIC0g
Y2FsY3VsYXRlQ2hlY2tzdW0ocmVzdWx0LCAwLCByZXN1bHQuc2l6ZSgpKTsKLSAgICBvdmVyd3Jp
dGUzMihyZXN1bHQsIGhlYWRUYWJsZU9mZnNldCArIDgsIGNoZWNrc3VtQWRqdXN0bWVudCk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OworICAgIHVpbnQzMl90IGNoZWNrc3VtQWRqdXN0bWVudCA9IDB4
QjFCMEFGQkFVIC0gY2FsY3VsYXRlQ2hlY2tzdW0oMCwgbV9yZXN1bHQuc2l6ZSgpKTsKKyAgICBv
dmVyd3JpdGUzMihoZWFkVGFibGVPZmZzZXQgKyA4LCBjaGVja3N1bUFkanVzdG1lbnQpOwogfQog
CiBWZWN0b3I8Y2hhcj4gY29udmVydFNWR1RvT1RGRm9udChjb25zdCBTVkdGb250RWxlbWVudCYg
ZWxlbWVudCkKIHsKLSAgICByZXR1cm4gU1ZHVG9PVEZGb250Q29udmVydGVyKGVsZW1lbnQpLmNv
bnZlcnRTVkdUb09URkZvbnQoKTsKKyAgICBTVkdUb09URkZvbnRDb252ZXJ0ZXIgY29udmVydGVy
KGVsZW1lbnQpOworICAgIGNvbnZlcnRlci5jb252ZXJ0U1ZHVG9PVEZGb250KCk7CisgICAgcmV0
dXJuIGNvbnZlcnRlci5yZWxlYXNlUmVzdWx0KCk7CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238825</attachid>
            <date>2014-09-28 15:12:29 -0700</date>
            <delta_ts>2014-09-28 19:12:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137097-20140928151231.patch</filename>
            <type>text/plain</type>
            <size>59745</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjJkYjAxNWE1NWFkMmE4
YzQ3ODg3N2MyODQ0N2IxMjgwMTk0OWRjMC4uMzZhNmRiYWMzNzg1MTQ4ZDNiNTJhZTgyN2QzMjVj
MGViMDIzNWU4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDE0LTA5LTI4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1NWRyAtPiBP
VEYgQ29udmVydGVyXSBTdXBwb3J0IG5vbi1CTVAgY29kZXBvaW50cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MDk3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBoYXMgdHdvIHBpZWNl
czoKKworICAgICAgICAxKSBNb3ZlcyB3cml0ZTMyKCksIHdyaXRlMTYoKSwgb3ZlcndyaXRlMzIo
KSBhbmQgb3ZlcndyaXRlMTYoKSBpbnNpZGUgU1ZHVG9PVEZGb250Q29udmVydGVyLgorICAgICAg
ICBUaGlzIGlzIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBrZWVwIHBhc3NpbmcgYXJvdW5kIHJl
ZmVyZW5jZXMgdG8gbV9yZXN1bHQgZXZlcnl3aGVyZS4KKyAgICAgICAgSW5zdGVhZCwgcHV0IHRo
ZSBvdXRwdXQgdmVjdG9yIGluc2lkZSB0aGUgY2xhc3MgYXMgYW4gaW5zdGFuY2UgbWVtYmVyIHZh
cmlhYmxlLiBJbiBhZGRpdGlvbiwKKyAgICAgICAgcmVuYW1lIHdyaXRlMzIoKSBhbmQgd3JpdGUx
NigpIHRvIGFwcGVuZDMyKCkgYW5kIGFwcGVuZDE2KCkuCisKKyAgICAgICAgMikgQ2hhbmdlIHRo
ZSAiQ29kZXBvaW50IiB0eXBlZGVmIHRvIGJlIGEgU3RyaW5nLCBhbmQgcmVuYW1lIGl0IHRvIENv
ZGVwb2ludHMuIFRoaXMgaXMgc28gdGhhdAorICAgICAgICB3ZSBjYW4gaW1wbGVtZW50IGxpZ2F0
dXJlcyBsYXRlciBvbi4gVXBkYXRlIGFsbCB0aGUgcGxhY2VzIHRoYXQgdXNlIHRoaXMgdmFyaWFi
bGUgdG8gd29yayB3aXRoCisgICAgICAgIGEgU3RyaW5nIG9mIG11bHRpcGxlIGNvZGVwb2ludHMu
CisKKyAgICAgICAgVGhpcyBwYXRjaCB1cGRhdGVzIHRoZSBDTUFQIHRhYmxlIHRvIHVzZSBmb3Jt
YXQgMTIgaW5zdGVhZCBvZiBmb3JtYXQgNC4gSXQgY3VycmVudGx5IG9ubHkgbWFwcworICAgICAg
ICBzaW5nbGUgY29kZXBvaW50cyB0byBnbHlwaCBJRHMgYW5kIHNraXBzIGFsbCBtdWx0aS1jb2Rl
cG9pbnQgZ2x5cGhzLiBXZSB3aWxsIGltcGxlbWVudAorICAgICAgICBsaWdhdHVyZXMgaW4gYW5v
dGhlciBwYXRjaC4KKworICAgICAgICBUZXN0OiBzdmcvY3VzdG9tL2dseXBoLXNlbGVjdGlvbi1u
b24tYm1wLnN2ZworCisgICAgICAgICogc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6YXBwZW5kMzIpOiBBcHBlbmQgYSByZXN1bHQgdG8gYSBnaXZlbiB2
ZWN0b3IuIFRoaXMgaXMgZm9yIHRoZSBwYXRoIHRyYW5zY29kZXIuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OnJlbGVhc2VSZXN1bHQpOiBXVEY6Om1vdmUoKSdzIHRo
ZSByZXN1bHQuCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OkdseXBo
RGF0YTo6R2x5cGhEYXRhKTogVXBkYXRlIHRvIHRha2UgQ29kZXBvaW50cyBpbnN0ZWFkIG9mIENv
ZGVwb2ludC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5k
MzIpOiBQaWVjZSAxIGFib3ZlLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVy
dGVyOjphcHBlbmQxNik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29u
dmVydGVyOjphcHBlbmQ0Qnl0ZUNvZGUpOiBDb252ZW5pZW5jZSBmdW5jdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6b3ZlcndyaXRlMzIpOiBQaWVjZSAxIGFi
b3ZlLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjpvdmVyd3JpdGUx
Nik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBl
bmRDTUFQVGFibGUpOiBVcGRhdGUgdG8gZm9ybWF0IDEyLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VG9PVEZGb250Q29udmVydGVyOjphcHBlbmRIRUFEVGFibGUpOiBQYXNzaW5nIGluIGEgcmVzdWx0
IHZlY3RvciBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9P
VEZGb250Q29udmVydGVyOjphcHBlbmRISEVBVGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kSE1UWFRhYmxlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZE1BWFBUYWJsZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmROQU1F
VGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6
YXBwZW5kT1MyVGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENv
bnZlcnRlcjo6YXBwZW5kUE9TVFRhYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc1Zh
bGlkU3RyaW5nRm9yQ0ZGKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRD
b252ZXJ0ZXI6OmFwcGVuZENGRlZhbGlkU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZENGRlRhYmxlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFZPUkdUYWJsZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRWSEVBVGFi
bGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBw
ZW5kVk1UWFRhYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252
ZXJ0ZXI6OmFkZENvZGVwb2ludFJhbmdlcyk6IFVwZGF0ZSBmb3IgQ29kZXBvaW50cy4KKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkQ29kZXBvaW50cyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRHbHlwaE5hbWVz
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVu
ZEtFUk5TdWJ0YWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29u
dmVydGVyOjphcHBlbmRLRVJOVGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRl
Q0ZGRW5jb2RlZE51bWJlcik6IFBhc3NpbmcgaW4gYSByZXN1bHQgdmVjdG9yIGlzIG5vIGxvbmdl
ciBuZWNlc3NhcnkuCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFw
cGVuZEdseXBoRGF0YSk6IFVwZGF0ZSBmb3IgQ29kZXBvaW50cy4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6cHJvY2Vzc0dseXBoRWxlbWVudCk6IFVwZGF0ZSBmb3Ig
Q29kZXBvaW50cy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6Y29t
cGFyZUNvZGVwb2ludHNMZXhpY29ncmFwaGljYWxseSk6IENvbXBhcmluZyBDb2RlcG9pbnRzCisg
ICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OlNWR1RvT1RGRm9udENvbnZl
cnRlcik6IFVwZGF0ZSBmb3IgQ29kZXBvaW50cy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RG
Rm9udENvbnZlcnRlcjo6Y2FsY3VsYXRlQ2hlY2tzdW0pOiBQYXNzaW5nIGluIGEgcmVzdWx0IHZl
Y3RvciBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZG
b250Q29udmVydGVyOjphcHBlbmRUYWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VG9PVEZGb250Q29udmVydGVyOjpjb252ZXJ0U1ZHVG9PVEZGb250KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpjb252ZXJ0U1ZHVG9PVEZGb250KTogTW92ZSBvdXQgb2YgdGhlIHJlc3VsdCB2
ZWN0b3IuCisgICAgICAgIChXZWJDb3JlOjp3cml0ZTMyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OndyaXRlMTYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3ZlcndyaXRlMzIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kQ0ZGVmFsaWRTdHJpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNjb2RlR2x5cGhQYXRocyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVDaGVja3N1bSk6IERlbGV0ZWQuCisKIDIwMTQtMDkt
MjggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQuIE1vdmUgUmVuZGVyVGhlbWVHdGsuaCBmcm9tIHBsYXRmb3JtL2d0ayB0byBy
ZW5kZXJpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZGb250Q29u
dmVyc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5j
cHAKaW5kZXggN2ZhNjE2MWViZDU2YmM2OWQyMjcxYzZjZTUzMmQyNmU2NTVhYzgyZC4uZWUwNGFk
ZmY1YzQ4Y2Y1ZTY1NmE1ZjQ3NzIyNWM0OWVmM2U5MjZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcApAQCAtNDAsNTMgKzQwLDQyIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlMzIoVmVjdG9yPGNo
YXI+JiB2ZWN0b3IsIHVpbnQzMl90IHZhbHVlKQorc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZDMy
KFZlY3RvcjxjaGFyPiYgcmVzdWx0LCB1aW50MzJfdCB2YWx1ZSkKIHsKLSAgICB2ZWN0b3IuYXBw
ZW5kKHZhbHVlID4+IDI0KTsKLSAgICB2ZWN0b3IuYXBwZW5kKHZhbHVlID4+IDE2KTsKLSAgICB2
ZWN0b3IuYXBwZW5kKHZhbHVlID4+IDgpOwotICAgIHZlY3Rvci5hcHBlbmQodmFsdWUpOwotfQot
Ci1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGUxNihWZWN0b3I8Y2hhcj4mIHZlY3RvciwgdWludDE2
X3QgdmFsdWUpCi17Ci0gICAgdmVjdG9yLmFwcGVuZCh2YWx1ZSA+PiA4KTsKLSAgICB2ZWN0b3Iu
YXBwZW5kKHZhbHVlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG92ZXJ3cml0ZTMyKFZlY3Rv
cjxjaGFyPiYgdmVjdG9yLCB1bnNpZ25lZCBsb2NhdGlvbiwgdWludDMyX3QgdmFsdWUpCi17Ci0g
ICAgQVNTRVJUKHZlY3Rvci5zaXplKCkgPj0gbG9jYXRpb24gKyA0KTsKLSAgICAqKHZlY3Rvci5k
YXRhKCkgKyBsb2NhdGlvbikgPSB2YWx1ZSA+PiAyNDsKLSAgICAqKHZlY3Rvci5kYXRhKCkgKyBs
b2NhdGlvbiArIDEpID0gdmFsdWUgPj4gMTY7Ci0gICAgKih2ZWN0b3IuZGF0YSgpICsgbG9jYXRp
b24gKyAyKSA9IHZhbHVlID4+IDg7Ci0gICAgKih2ZWN0b3IuZGF0YSgpICsgbG9jYXRpb24gKyAz
KSA9IHZhbHVlOworICAgIHJlc3VsdC5hcHBlbmQodmFsdWUgPj4gMjQpOworICAgIHJlc3VsdC5h
cHBlbmQodmFsdWUgPj4gMTYpOworICAgIHJlc3VsdC5hcHBlbmQodmFsdWUgPj4gOCk7CisgICAg
cmVzdWx0LmFwcGVuZCh2YWx1ZSk7CiB9CiAKIGNsYXNzIFNWR1RvT1RGRm9udENvbnZlcnRlciB7
CiBwdWJsaWM6CiAgICAgU1ZHVG9PVEZGb250Q29udmVydGVyKGNvbnN0IFNWR0ZvbnRFbGVtZW50
Jik7Ci0gICAgVmVjdG9yPGNoYXI+IGNvbnZlcnRTVkdUb09URkZvbnQoKTsKKyAgICB2b2lkIGNv
bnZlcnRTVkdUb09URkZvbnQoKTsKKworICAgIFZlY3RvcjxjaGFyPiByZWxlYXNlUmVzdWx0KCkK
KyAgICB7CisgICAgICAgIHJldHVybiBXVEY6Om1vdmUobV9yZXN1bHQpOworICAgIH0KIAogcHJp
dmF0ZToKLSAgICB0eXBlZGVmIHVpbnQxNl90IFNJRDsgLy8gU3RyaW5nIElECi0gICAgdHlwZWRl
ZiBVQ2hhciBDb2RlcG9pbnQ7IC8vIEZJWE1FOiBPbmx5IHN1cHBvcnQgQk1QIGZvciBub3cKKyAg
ICB0eXBlZGVmIFN0cmluZyBDb2RlcG9pbnRzOwogICAgIHN0cnVjdCBHbHlwaERhdGEgewotICAg
ICAgICBHbHlwaERhdGEoVmVjdG9yPGNoYXI+IGNoYXJTdHJpbmcsIGNvbnN0IFNWR0dseXBoRWxl
bWVudCogZ2x5cGhFbGVtZW50LCBmbG9hdCBob3Jpem9udGFsQWR2YW5jZSwgZmxvYXQgdmVydGlj
YWxBZHZhbmNlLCBGbG9hdFJlY3QgYm91bmRpbmdCb3gsIENvZGVwb2ludCBjb2RlcG9pbnQpCisg
ICAgICAgIEdseXBoRGF0YShWZWN0b3I8Y2hhcj4gY2hhclN0cmluZywgY29uc3QgU1ZHR2x5cGhF
bGVtZW50KiBnbHlwaEVsZW1lbnQsIGZsb2F0IGhvcml6b250YWxBZHZhbmNlLCBmbG9hdCB2ZXJ0
aWNhbEFkdmFuY2UsIEZsb2F0UmVjdCBib3VuZGluZ0JveCwgY29uc3QgQ29kZXBvaW50cyYgY29k
ZXBvaW50cykKICAgICAgICAgICAgIDogYm91bmRpbmdCb3goYm91bmRpbmdCb3gpCiAgICAgICAg
ICAgICAsIGNoYXJTdHJpbmcoY2hhclN0cmluZykKKyAgICAgICAgICAgICwgY29kZXBvaW50cyhj
b2RlcG9pbnRzKQogICAgICAgICAgICAgLCBnbHlwaEVsZW1lbnQoZ2x5cGhFbGVtZW50KQogICAg
ICAgICAgICAgLCBob3Jpem9udGFsQWR2YW5jZShob3Jpem9udGFsQWR2YW5jZSkKICAgICAgICAg
ICAgICwgdmVydGljYWxBZHZhbmNlKHZlcnRpY2FsQWR2YW5jZSkKLSAgICAgICAgICAgICwgY29k
ZXBvaW50KGNvZGVwb2ludCkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIEZsb2F0UmVj
dCBib3VuZGluZ0JveDsKICAgICAgICAgVmVjdG9yPGNoYXI+IGNoYXJTdHJpbmc7CisgICAgICAg
IENvZGVwb2ludHMgY29kZXBvaW50czsKICAgICAgICAgY29uc3QgU1ZHR2x5cGhFbGVtZW50KiBn
bHlwaEVsZW1lbnQ7CiAgICAgICAgIGZsb2F0IGhvcml6b250YWxBZHZhbmNlOwogICAgICAgICBm
bG9hdCB2ZXJ0aWNhbEFkdmFuY2U7Ci0gICAgICAgIENvZGVwb2ludCBjb2RlcG9pbnQ7CiAgICAg
fTsKIAogICAgIHN0cnVjdCBLZXJuaW5nRGF0YSB7CkBAIC0xMDUsNDUgKzk0LDg2IEBAIHByaXZh
dGU6CiAgICAgICAgIGludDE2X3QgYWRqdXN0bWVudDsKICAgICB9OwogCisgICAgaW5saW5lIHZv
aWQgYXBwZW5kMzIodWludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBXZWJDb3JlOjphcHBl
bmQzMihtX3Jlc3VsdCwgdmFsdWUpOworICAgIH0KKworICAgIGlubGluZSB2b2lkIGFwcGVuZDE2
KHVpbnQxNl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9yZXN1bHQuYXBwZW5kKHZhbHVlID4+
IDgpOworICAgICAgICBtX3Jlc3VsdC5hcHBlbmQodmFsdWUpOworICAgIH0KKworICAgIGlubGlu
ZSB2b2lkIGFwcGVuZDRCeXRlQ29kZShjb25zdCBjaGFyIGNvZGVbNF0pCisgICAgeworICAgICAg
ICBtX3Jlc3VsdC5hcHBlbmQoY29kZVswXSk7CisgICAgICAgIG1fcmVzdWx0LmFwcGVuZChjb2Rl
WzFdKTsKKyAgICAgICAgbV9yZXN1bHQuYXBwZW5kKGNvZGVbMl0pOworICAgICAgICBtX3Jlc3Vs
dC5hcHBlbmQoY29kZVszXSk7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgb3ZlcndyaXRlMzIo
dW5zaWduZWQgbG9jYXRpb24sIHVpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fcmVzdWx0LnNpemUoKSA+PSBsb2NhdGlvbiArIDQpOworICAgICAgICBtX3Jlc3VsdFtsb2Nh
dGlvbl0gPSB2YWx1ZSA+PiAyNDsKKyAgICAgICAgbV9yZXN1bHRbbG9jYXRpb24gKyAxXSA9IHZh
bHVlID4+IDE2OworICAgICAgICBtX3Jlc3VsdFtsb2NhdGlvbiArIDJdID0gdmFsdWUgPj4gODsK
KyAgICAgICAgbV9yZXN1bHRbbG9jYXRpb24gKyAzXSA9IHZhbHVlOworICAgIH0KKworICAgIGlu
bGluZSB2b2lkIG92ZXJ3cml0ZTE2KHVuc2lnbmVkIGxvY2F0aW9uLCB1aW50MTZfdCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX3Jlc3VsdC5zaXplKCkgPj0gbG9jYXRpb24gKyAyKTsK
KyAgICAgICAgbV9yZXN1bHRbbG9jYXRpb25dID0gdmFsdWUgPj4gODsKKyAgICAgICAgbV9yZXN1
bHRbbG9jYXRpb24gKyAxXSA9IHZhbHVlOworICAgIH0KKwogICAgIHN0YXRpYyBjb25zdCBzaXpl
X3Qga1NORlRIZWFkZXJTaXplID0gMTI7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrRGlyZWN0
b3J5RW50cnlTaXplID0gMTY7CiAKKyAgICB1aW50MzJfdCBjYWxjdWxhdGVDaGVja3N1bShzaXpl
X3Qgc3RhcnRpbmdPZmZzZXQsIHNpemVfdCBlbmRpbmdPZmZzZXQpIGNvbnN0OwogCiAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBhcHBlbmRHbHlwaERhdGEoY29uc3QgVmVjdG9y
PGNoYXI+JiBwYXRoLCBjb25zdCBUKiBlbGVtZW50LCBmbG9hdCBob3Jpem9udGFsQWR2YW5jZSwg
ZmxvYXQgdmVydGljYWxBZHZhbmNlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBDb2Rl
cG9pbnQgY29kZXBvaW50KTsKKyAgICB2b2lkIGFwcGVuZEdseXBoRGF0YShjb25zdCBWZWN0b3I8
Y2hhcj4mIHBhdGgsIGNvbnN0IFQqIGVsZW1lbnQsIGZsb2F0IGhvcml6b250YWxBZHZhbmNlLCBm
bG9hdCB2ZXJ0aWNhbEFkdmFuY2UsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0
IENvZGVwb2ludHMmKTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHByb2Nl
c3NHbHlwaEVsZW1lbnQoY29uc3QgVCYgZWxlbWVudCwgZmxvYXQgZGVmYXVsdEhvcml6b250YWxB
ZHZhbmNlLCBmbG9hdCBkZWZhdWx0VmVydGljYWxBZHZhbmNlLCBDb2RlcG9pbnQsIGJvb2wmIGlu
aXRpYWxHbHlwaCk7Ci0KLSAgICB0eXBlZGVmIHZvaWQgKFNWR1RvT1RGRm9udENvbnZlcnRlcjo6
KkZvbnRBcHBlbmRpbmdGdW5jdGlvbikoVmVjdG9yPGNoYXI+ICYpIGNvbnN0OwotICAgIHZvaWQg
YXBwZW5kVGFibGUoY29uc3QgY2hhciBpZGVudGlmaWVyWzRdLCBWZWN0b3I8Y2hhcj4mLCBGb250
QXBwZW5kaW5nRnVuY3Rpb24pOwotICAgIHZvaWQgYXBwZW5kQ01BUFRhYmxlKFZlY3RvcjxjaGFy
PiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kSEVBRFRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0
OwotICAgIHZvaWQgYXBwZW5kSEhFQVRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAgIHZv
aWQgYXBwZW5kSE1UWFRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5k
VkhFQVRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kVk1UWFRhYmxl
KFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kS0VSTlRhYmxlKFZlY3Rvcjxj
aGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kTUFYUFRhYmxlKFZlY3RvcjxjaGFyPiYpIGNv
bnN0OwotICAgIHZvaWQgYXBwZW5kTkFNRVRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAg
IHZvaWQgYXBwZW5kT1MyVGFibGUoVmVjdG9yPGNoYXI+JikgY29uc3Q7Ci0gICAgdm9pZCBhcHBl
bmRQT1NUVGFibGUoVmVjdG9yPGNoYXI+JikgY29uc3Q7Ci0gICAgdm9pZCBhcHBlbmRDRkZUYWJs
ZShWZWN0b3I8Y2hhcj4mKSBjb25zdDsKLSAgICB2b2lkIGFwcGVuZFZPUkdUYWJsZShWZWN0b3I8
Y2hhcj4mKSBjb25zdDsKKyAgICB2b2lkIHByb2Nlc3NHbHlwaEVsZW1lbnQoY29uc3QgVCYgZWxl
bWVudCwgZmxvYXQgZGVmYXVsdEhvcml6b250YWxBZHZhbmNlLCBmbG9hdCBkZWZhdWx0VmVydGlj
YWxBZHZhbmNlLCBjb25zdCBDb2RlcG9pbnRzJiwgYm9vbCYgaW5pdGlhbEdseXBoKTsKKworICAg
IHR5cGVkZWYgdm9pZCAoU1ZHVG9PVEZGb250Q29udmVydGVyOjoqRm9udEFwcGVuZGluZ0Z1bmN0
aW9uKSgpOworICAgIHZvaWQgYXBwZW5kVGFibGUoY29uc3QgY2hhciBpZGVudGlmaWVyWzRdLCBG
b250QXBwZW5kaW5nRnVuY3Rpb24pOworICAgIHZvaWQgYXBwZW5kQ01BUFRhYmxlKCk7CisgICAg
dm9pZCBhcHBlbmRIRUFEVGFibGUoKTsKKyAgICB2b2lkIGFwcGVuZEhIRUFUYWJsZSgpOworICAg
IHZvaWQgYXBwZW5kSE1UWFRhYmxlKCk7CisgICAgdm9pZCBhcHBlbmRWSEVBVGFibGUoKTsKKyAg
ICB2b2lkIGFwcGVuZFZNVFhUYWJsZSgpOworICAgIHZvaWQgYXBwZW5kS0VSTlRhYmxlKCk7Cisg
ICAgdm9pZCBhcHBlbmRNQVhQVGFibGUoKTsKKyAgICB2b2lkIGFwcGVuZE5BTUVUYWJsZSgpOwor
ICAgIHZvaWQgYXBwZW5kT1MyVGFibGUoKTsKKyAgICB2b2lkIGFwcGVuZFBPU1RUYWJsZSgpOwor
ICAgIHZvaWQgYXBwZW5kQ0ZGVGFibGUoKTsKKyAgICB2b2lkIGFwcGVuZFZPUkdUYWJsZSgpOwor
CisgICAgc3RhdGljIGJvb2wgY29tcGFyZUNvZGVwb2ludHNMZXhpY29ncmFwaGljYWxseShjb25z
dCBHbHlwaERhdGEmLCBjb25zdCBHbHlwaERhdGEmKTsKKworICAgIHZvaWQgYXBwZW5kQ0ZGVmFs
aWRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAg
ICBWZWN0b3I8Y2hhcj4gdHJhbnNjb2RlR2x5cGhQYXRocyhmbG9hdCB3aWR0aCwgY29uc3QgVCYg
Z2x5cGhFbGVtZW50LCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdDsKIAotICAgIHZvaWQg
YWRkQ29kZXBvaW50UmFuZ2VzKGNvbnN0IFVuaWNvZGVSYW5nZXMmLCBIYXNoU2V0PHVpbnQxNl90
PiYgZ2x5cGhTZXQpIGNvbnN0OwotICAgIHZvaWQgYWRkQ29kZXBvaW50cyhjb25zdCBIYXNoU2V0
PFN0cmluZz4mIGNvZGVwb2ludHMsIEhhc2hTZXQ8dWludDE2X3Q+JiBnbHlwaFNldCkgY29uc3Q7
Ci0gICAgdm9pZCBhZGRHbHlwaE5hbWVzKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgZ2x5cGhOYW1l
cywgSGFzaFNldDx1aW50MTZfdD4mIGdseXBoU2V0KSBjb25zdDsKKyAgICB2b2lkIGFkZENvZGVw
b2ludFJhbmdlcyhjb25zdCBVbmljb2RlUmFuZ2VzJiwgSGFzaFNldDxHbHlwaD4mIGdseXBoU2V0
KSBjb25zdDsKKyAgICB2b2lkIGFkZENvZGVwb2ludHMoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBj
b2RlcG9pbnRzLCBIYXNoU2V0PEdseXBoPiYgZ2x5cGhTZXQpIGNvbnN0OworICAgIHZvaWQgYWRk
R2x5cGhOYW1lcyhjb25zdCBIYXNoU2V0PFN0cmluZz4mIGdseXBoTmFtZXMsIEhhc2hTZXQ8R2x5
cGg+JiBnbHlwaFNldCkgY29uc3Q7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgVmVj
dG9yPEtlcm5pbmdEYXRhPiBjb21wdXRlS2VybmluZ0RhdGEoYm9vbCAoVDo6KmJ1aWxkS2Vybmlu
Z1BhaXIpKFNWR0tlcm5pbmdQYWlyJikgY29uc3QpIGNvbnN0OwogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotICAgIHNpemVfdCBhcHBlbmRLRVJOU3VidGFibGUoVmVjdG9yPGNoYXI+JiByZXN1
bHQsIGJvb2wgKFQ6OipidWlsZEtlcm5pbmdQYWlyKShTVkdLZXJuaW5nUGFpciYpIGNvbnN0LCB1
aW50MTZfdCBjb3ZlcmFnZSkgY29uc3Q7CisgICAgc2l6ZV90IGFwcGVuZEtFUk5TdWJ0YWJsZShi
b29sIChUOjoqYnVpbGRLZXJuaW5nUGFpcikoU1ZHS2VybmluZ1BhaXImKSBjb25zdCwgdWludDE2
X3QgY292ZXJhZ2UpOwogCiAgICAgVmVjdG9yPEdseXBoRGF0YT4gbV9nbHlwaHM7CiAgICAgSGFz
aE1hcDxTdHJpbmcsIEdseXBoPiBtX2dseXBoTmFtZVRvSW5kZXhNYXA7IC8vIFNWRyAxLjE6ICJJ
dCBpcyByZWNvbW1lbmRlZCB0aGF0IGdseXBoIG5hbWVzIGJlIHVuaXF1ZSB3aXRoaW4gYSBmb250
LiIKLSAgICBIYXNoTWFwPENvZGVwb2ludCwgR2x5cGg+IG1fY29kZXBvaW50VG9JbmRleE1hcDsg
Ly8gRklYTUU6IFRoZXJlIG1pZ2h0IGJlIG1hbnkgZ2x5cGhzIHRoYXQgbWFwIHRvIGEgc2luZ2xl
IGNvZGVwb2ludC4KKyAgICBIYXNoTWFwPENvZGVwb2ludHMsIFZlY3RvcjxHbHlwaCwgMT4+IG1f
Y29kZXBvaW50c1RvSW5kaWNlc01hcDsKKyAgICBWZWN0b3I8Y2hhcj4gbV9yZXN1bHQ7CiAgICAg
RmxvYXRSZWN0IG1fYm91bmRpbmdCb3g7CiAgICAgY29uc3QgU1ZHRm9udEVsZW1lbnQmIG1fZm9u
dEVsZW1lbnQ7CiAgICAgY29uc3QgU1ZHRm9udEZhY2VFbGVtZW50KiBtX2ZvbnRGYWNlRWxlbWVu
dDsKQEAgLTE3NCw3MiArMjA0LDcxIEBAIHN0YXRpYyB1aW50MTZfdCBpbnRlZ3JhbExvZzIodWlu
dDE2X3QgeCkgewogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU1ZHVG9PVEZGb250Q29u
dmVydGVyOjphcHBlbmRDTUFQVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0Cit2b2lk
IFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kQ01BUFRhYmxlKCkKIHsKLSAgICBhdXRvIHN0
YXJ0aW5nT2Zmc2V0ID0gcmVzdWx0LnNpemUoKTsKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7Ci0g
ICAgd3JpdGUxNihyZXN1bHQsIDEpOyAvLyBOdW1iZXIgc3VidGFibGVzCisgICAgYXV0byBzdGFy
dGluZ09mZnNldCA9IG1fcmVzdWx0LnNpemUoKTsKKyAgICBhcHBlbmQxNigwKTsKKyAgICBhcHBl
bmQxNigxKTsgLy8gTnVtYmVyIHN1YnRhYmxlcwogCi0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAv
LyBVbmljb2RlCi0gICAgd3JpdGUxNihyZXN1bHQsIDMpOyAvLyBVbmljb2RlIHZlcnNpb24gMi4y
KwotICAgIHdyaXRlMzIocmVzdWx0LCByZXN1bHQuc2l6ZSgpIC0gc3RhcnRpbmdPZmZzZXQgKyBz
aXplb2YodWludDMyX3QpKTsgLy8gQnl0ZSBvZmZzZXQgb2Ygc3VidGFibGUKKyAgICBhcHBlbmQx
NigwKTsgLy8gVW5pY29kZQorICAgIGFwcGVuZDE2KDMpOyAvLyBVbmljb2RlIHZlcnNpb24gMi4y
KworICAgIGFwcGVuZDMyKG1fcmVzdWx0LnNpemUoKSAtIHN0YXJ0aW5nT2Zmc2V0ICsgc2l6ZW9m
KHVpbnQzMl90KSk7IC8vIEJ5dGUgb2Zmc2V0IG9mIHN1YnRhYmxlCiAKICAgICAvLyBCcmFpbmRl
YWQgc2NoZW1lOiBPbmUgc2VnbWVudCBmb3IgZWFjaCBjaGFyYWN0ZXIKICAgICBBU1NFUlQobV9n
bHlwaHMuc2l6ZSgpIDwgMHhGRkZGKTsKLSAgICB1aW50MTZfdCBzZWdDb3VudCA9IG1fZ2x5cGhz
LnNpemUoKSArIDE7Ci0gICAgd3JpdGUxNihyZXN1bHQsIDQpOyAvLyBGb3JtYXQ6IE9ubHkgc3Vw
cG9ydCB0aGUgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIGZvciBub3cKLSAgICB3cml0ZTE2KHJl
c3VsdCwgMjIgKyBtX2dseXBocy5zaXplKCkgKiAyKTsgLy8gbGVuZ3RoCi0gICAgd3JpdGUxNihy
ZXN1bHQsIDApOyAvLyBMYW5ndWFnZSBpbmRlcGVuZGVudAotICAgIHdyaXRlMTYocmVzdWx0LCAy
ICogc2VnQ291bnQpOyAvLyBzZWdDb3VudFgyOiAiMiB4IHNlZ0NvdW50IgotICAgIHVpbnQxNl90
IG9yaWdpbmFsU2VhcmNoUmFuZ2UgPSByb3VuZERvd25Ub1Bvd2VyT2ZUd28oc2VnQ291bnQpOwot
ICAgIHVpbnQxNl90IHNlYXJjaFJhbmdlID0gMiAqIG9yaWdpbmFsU2VhcmNoUmFuZ2U7IC8vIHNl
YXJjaFJhbmdlOiAiMiB4ICgyKipmbG9vcihsb2cyKHNlZ0NvdW50KSkpIgotICAgIHdyaXRlMTYo
cmVzdWx0LCBzZWFyY2hSYW5nZSk7Ci0gICAgd3JpdGUxNihyZXN1bHQsIGludGVncmFsTG9nMihv
cmlnaW5hbFNlYXJjaFJhbmdlKSk7IC8vIGVudHJ5U2VsZWN0b3I6ICJsb2cyKHNlYXJjaFJhbmdl
LzIpIgotICAgIHdyaXRlMTYocmVzdWx0LCAoMiAqIHNlZ0NvdW50KSAtIHNlYXJjaFJhbmdlKTsg
Ly8gcmFuZ2VTaGlmdDogIjIgeCBzZWdDb3VudCAtIHNlYXJjaFJhbmdlIgorICAgIGF1dG8gc3Vi
dGFibGVMb2NhdGlvbiA9IG1fcmVzdWx0LnNpemUoKTsKKyAgICBhcHBlbmQzMigxMiA8PCAxNik7
IC8vIEZvcm1hdCAxMgorICAgIGFwcGVuZDMyKDApOyAvLyBQbGFjZWhvbGRlciBmb3IgYnl0ZSBs
ZW5ndGgKKyAgICBhcHBlbmQzMigwKTsgLy8gTGFuZ3VhZ2UgaW5kZXBlbmRlbnQKKyAgICBhcHBl
bmQzMigwKTsgLy8gUGxhY2Vob2xkZXIgZm9yIG5Hcm91cHMKKworICAgIHVpbnQxNl90IG5Hcm91
cHMgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9nbHlwaHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgYXV0byYgZ2x5cGggPSBtX2dseXBoc1tpXTsKKyAgICAgICAgdW5zaWduZWQg
Y29kZXBvaW50U2l6ZSA9IDA7CisgICAgICAgIFVDaGFyMzIgY29kZXBvaW50OworICAgICAgICBp
ZiAoZ2x5cGguY29kZXBvaW50cy5pc051bGwoKSkKKyAgICAgICAgICAgIGNvZGVwb2ludCA9IDA7
CisgICAgICAgIGVsc2UgaWYgKGdseXBoLmNvZGVwb2ludHMuaXM4Qml0KCkpCisgICAgICAgICAg
ICBjb2RlcG9pbnQgPSBnbHlwaC5jb2RlcG9pbnRzW2NvZGVwb2ludFNpemUrK107CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIFUxNl9ORVhUKGdseXBoLmNvZGVwb2ludHMuY2hhcmFjdGVyczE2
KCksIGNvZGVwb2ludFNpemUsIGdseXBoLmNvZGVwb2ludHMubGVuZ3RoKCksIGNvZGVwb2ludCk7
CiAKLSAgICBmb3IgKGF1dG8mIGdseXBoIDogbV9nbHlwaHMpCi0gICAgICAgIHdyaXRlMTYocmVz
dWx0LCBnbHlwaC5jb2RlcG9pbnQpOyAvLyBFbmRDb2RlCi0gICAgd3JpdGUxNihyZXN1bHQsIDB4
RkZGRik7IC8vICJUbyBlbnN1cmUgdGhhdCB0aGUgc2VhcmNoIHdpbGwgdGVybWluYXRlLCB0aGUg
ZmluYWwgZW5kQ29kZSB2YWx1ZSBtdXN0IGJlIDB4RkZGRi4iCi0gICAgd3JpdGUxNihyZXN1bHQs
IDApOyAvLyBSZXNlcnZlZAotICAgIGZvciAoYXV0byYgZ2x5cGggOiBtX2dseXBocykKLSAgICAg
ICAgd3JpdGUxNihyZXN1bHQsIGdseXBoLmNvZGVwb2ludCk7IC8vIHN0YXJ0Q29kZQotICAgIHdy
aXRlMTYocmVzdWx0LCAweEZGRkYpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ds
eXBocy5zaXplKCk7ICsraSkgewotICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBjYW4g
YmUgIm5lZ2F0aXZlLCIgYnV0IHRoYXQgaXMgb2theSBiZWNhdXNlIHdyYXBwaW5nIGlzIGRlZmlu
ZWQgYW5kIGV4cGVjdGVkIGhlcmUKLSAgICAgICAgd3JpdGUxNihyZXN1bHQsIHN0YXRpY19jYXN0
PHVpbnQxNl90PihpKSAtIG1fZ2x5cGhzW2ldLmNvZGVwb2ludCk7IC8vIGlkRGVsdGEKKyAgICAg
ICAgLy8gRG9uJ3QgbWFwIGxpZ2F0dXJlcyBoZXJlLgorICAgICAgICBpZiAoZ2x5cGguY29kZXBv
aW50cy5sZW5ndGgoKSA+IGNvZGVwb2ludFNpemUpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBhcHBlbmQzMihjb2RlcG9pbnQpOyAvLyBzdGFydENoYXJDb2RlCisgICAgICAgIGFw
cGVuZDMyKGNvZGVwb2ludCk7IC8vIGVuZENoYXJDb2RlCisgICAgICAgIGFwcGVuZDMyKGkpOyAv
LyBzdGFydEdseXBoQ29kZQorICAgICAgICArK25Hcm91cHM7CiAgICAgfQotICAgIHdyaXRlMTYo
cmVzdWx0LCAxKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nbHlwaHMuc2l6ZSgp
OyArK2kpCi0gICAgICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gaWRSYW5nZU9mZnNldAotICAg
IHdyaXRlMTYocmVzdWx0LCAwKTsKKyAgICBvdmVyd3JpdGUzMihzdWJ0YWJsZUxvY2F0aW9uICsg
NCwgbV9yZXN1bHQuc2l6ZSgpIC0gc3VidGFibGVMb2NhdGlvbik7CisgICAgb3ZlcndyaXRlMzIo
c3VidGFibGVMb2NhdGlvbiArIDEyLCBuR3JvdXBzKTsKIH0KIAotdm9pZCBTVkdUb09URkZvbnRD
b252ZXJ0ZXI6OmFwcGVuZEhFQURUYWJsZShWZWN0b3I8Y2hhcj4mIHJlc3VsdCkgY29uc3QKK3Zv
aWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRIRUFEVGFibGUoKQogewotICAgIHdyaXRl
MzIocmVzdWx0LCAweDAwMDEwMDAwKTsgLy8gVmVyc2lvbgotICAgIHdyaXRlMzIocmVzdWx0LCAw
eDAwMDEwMDAwKTsgLy8gUmV2aXNpb24KLSAgICB3cml0ZTMyKHJlc3VsdCwgMCk7IC8vIENoZWNr
c3VtIGFkanVzdG1lbnQKLSAgICAvLyBNYWdpYyBudW1iZXIuICJTZXQgdG8gMHg1RjBGM0NGNSIK
LSAgICByZXN1bHQuYXBwZW5kKDB4NUYpOwotICAgIHJlc3VsdC5hcHBlbmQoMHgwRik7Ci0gICAg
cmVzdWx0LmFwcGVuZCgweDNDKTsKLSAgICByZXN1bHQuYXBwZW5kKC0weDBCKTsgLy8gV3JhcGFy
b3VuZAotICAgIHdyaXRlMTYocmVzdWx0LCAoMSA8PCA5KSB8IDEpOwotCi0gICAgd3JpdGUxNihy
ZXN1bHQsIG1fdW5pdHNQZXJFbSk7Ci0gICAgd3JpdGUzMihyZXN1bHQsIDApOyAvLyBGaXJzdCBo
YWxmIG9mIGNyZWF0aW9uIGRhdGUKLSAgICB3cml0ZTMyKHJlc3VsdCwgMCk7IC8vIExhc3QgaGFs
ZiBvZiBjcmVhdGlvbiBkYXRlCi0gICAgd3JpdGUzMihyZXN1bHQsIDApOyAvLyBGaXJzdCBoYWxm
IG9mIG1vZGlmaWNhdGlvbiBkYXRlCi0gICAgd3JpdGUzMihyZXN1bHQsIDApOyAvLyBMYXN0IGhh
bGYgb2YgbW9kaWZpY2F0aW9uIGRhdGUKLSAgICB3cml0ZTE2KHJlc3VsdCwgbV9ib3VuZGluZ0Jv
eC54KCkpOyAvLyBNaW5pbXVtIFgKLSAgICB3cml0ZTE2KHJlc3VsdCwgbV9ib3VuZGluZ0JveC55
KCkpOyAvLyBNaW5pbXVtIFkKLSAgICB3cml0ZTE2KHJlc3VsdCwgbV9ib3VuZGluZ0JveC5tYXhY
KCkpOyAvLyBNYXhpbXVtIFgKLSAgICB3cml0ZTE2KHJlc3VsdCwgbV9ib3VuZGluZ0JveC5tYXhZ
KCkpOyAvLyBNYXhpbXVtIFkKLSAgICB3cml0ZTE2KHJlc3VsdCwgKG1faXRhbGljID8gMSA8PCAx
IDogMCkgfCAobV93ZWlnaHQgPj0gNyA/IDEgOiAwKSk7Ci0gICAgd3JpdGUxNihyZXN1bHQsIDMp
OyAvLyBTbWFsbGVzdCByZWFkYWJsZSBzaXplIGluIHBpeGVscwotICAgIHdyaXRlMTYocmVzdWx0
LCAwKTsgLy8gTWlnaHQgY29udGFpbiBMVFIgb3IgUlRMIGdseXBocwotICAgIHdyaXRlMTYocmVz
dWx0LCAwKTsgLy8gU2hvcnQgb2Zmc2V0cyBpbiB0aGUgJ2xvY2EnIHRhYmxlLiBIb3dldmVyLCBP
VEYgZm9udHMgZG9uJ3QgaGF2ZSBhICdsb2NhJyB0YWJsZSBzbyB0aGlzIGlzIGlycmVsZXZhbnQK
LSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIEdseXBoIGRhdGEgZm9ybWF0CisgICAgYXBwZW5k
MzIoMHgwMDAxMDAwMCk7IC8vIFZlcnNpb24KKyAgICBhcHBlbmQzMigweDAwMDEwMDAwKTsgLy8g
UmV2aXNpb24KKyAgICBhcHBlbmQzMigwKTsgLy8gQ2hlY2tzdW0gYWRqdXN0bWVudAorICAgIGFw
cGVuZDMyKDB4NUYwRjNDRjUpOworICAgIGFwcGVuZDE2KCgxIDw8IDkpIHwgMSk7CisKKyAgICBh
cHBlbmQxNihtX3VuaXRzUGVyRW0pOworICAgIGFwcGVuZDMyKDApOyAvLyBGaXJzdCBoYWxmIG9m
IGNyZWF0aW9uIGRhdGUKKyAgICBhcHBlbmQzMigwKTsgLy8gTGFzdCBoYWxmIG9mIGNyZWF0aW9u
IGRhdGUKKyAgICBhcHBlbmQzMigwKTsgLy8gRmlyc3QgaGFsZiBvZiBtb2RpZmljYXRpb24gZGF0
ZQorICAgIGFwcGVuZDMyKDApOyAvLyBMYXN0IGhhbGYgb2YgbW9kaWZpY2F0aW9uIGRhdGUKKyAg
ICBhcHBlbmQxNihtX2JvdW5kaW5nQm94LngoKSk7IC8vIE1pbmltdW0gWAorICAgIGFwcGVuZDE2
KG1fYm91bmRpbmdCb3gueSgpKTsgLy8gTWluaW11bSBZCisgICAgYXBwZW5kMTYobV9ib3VuZGlu
Z0JveC5tYXhYKCkpOyAvLyBNYXhpbXVtIFgKKyAgICBhcHBlbmQxNihtX2JvdW5kaW5nQm94Lm1h
eFkoKSk7IC8vIE1heGltdW0gWQorICAgIGFwcGVuZDE2KChtX2l0YWxpYyA/IDEgPDwgMSA6IDAp
IHwgKG1fd2VpZ2h0ID49IDcgPyAxIDogMCkpOworICAgIGFwcGVuZDE2KDMpOyAvLyBTbWFsbGVz
dCByZWFkYWJsZSBzaXplIGluIHBpeGVscworICAgIGFwcGVuZDE2KDApOyAvLyBNaWdodCBjb250
YWluIExUUiBvciBSVEwgZ2x5cGhzCisgICAgYXBwZW5kMTYoMCk7IC8vIFNob3J0IG9mZnNldHMg
aW4gdGhlICdsb2NhJyB0YWJsZS4gSG93ZXZlciwgT1RGIGZvbnRzIGRvbid0IGhhdmUgYSAnbG9j
YScgdGFibGUgc28gdGhpcyBpcyBpcnJlbGV2YW50CisgICAgYXBwZW5kMTYoMCk7IC8vIEdseXBo
IGRhdGEgZm9ybWF0CiB9CiAKIC8vIEFzc3VtcHRpb246IFQyIGNhbiBob2xkIGV2ZXJ5IHZhbHVl
IHRoYXQgYSBUMSBjYW4gaG9sZApAQCAtMjUxLDEwICsyODAsMTAgQEAgc3RhdGljIGlubGluZSBU
MSBjbGFtcFRvKFQyIHgpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQxPih4KTsKIH0KIAotdm9p
ZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEhIRUFUYWJsZShWZWN0b3I8Y2hhcj4mIHJl
c3VsdCkgY29uc3QKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRISEVBVGFibGUo
KQogewotICAgIGludDE2X3QgYXNjZW50ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQxNl90Pjo6
bWF4KCk7Ci0gICAgaW50MTZfdCBkZXNjZW50ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQxNl90
Pjo6bWF4KCk7CisgICAgaW50MTZfdCBhc2NlbnQgPSBtX3VuaXRzUGVyRW07CisgICAgaW50MTZf
dCBkZXNjZW50ID0gMDsKICAgICBpZiAobV9mb250RmFjZUVsZW1lbnQpIHsKICAgICAgICAgYXNj
ZW50ID0gbV9mb250RmFjZUVsZW1lbnQtPmFzY2VudCgpOwogICAgICAgICBkZXNjZW50ID0gbV9m
b250RmFjZUVsZW1lbnQtPmRlc2NlbnQoKTsKQEAgLTI2OSw3MSArMjk4LDcxIEBAIHZvaWQgU1ZH
VG9PVEZGb250Q29udmVydGVyOjphcHBlbmRISEVBVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQp
IGNvbnN0CiAgICAgaWYgKCFkZXNjZW50KQogICAgICAgICBkZXNjZW50ID0gMTsKIAotICAgIHdy
aXRlMzIocmVzdWx0LCAweDAwMDEwMDAwKTsgLy8gVmVyc2lvbgotICAgIHdyaXRlMTYocmVzdWx0
LCBhc2NlbnQpOwotICAgIHdyaXRlMTYocmVzdWx0LCBkZXNjZW50KTsKKyAgICBhcHBlbmQzMigw
eDAwMDEwMDAwKTsgLy8gVmVyc2lvbgorICAgIGFwcGVuZDE2KGFzY2VudCk7CisgICAgYXBwZW5k
MTYoZGVzY2VudCk7CiAgICAgLy8gV2ViS2l0J3MgU1ZHIGNvZGVwYXRoIGhhcmRjb2RlcyB0aGUg
bGluZSBnYXAgdG8gYmUgMS8xMHRoIG9mIHRoZSBmb250IHNpemUgKHNlZSByMjk3MTkpLiBNYXRj
aGluZyB0aGF0CiAgICAgLy8gYWxsb3dzIHVzIHRvIGhhdmUgY29uc2lzdGVudCByZW5kZXJpbmdz
IGJldHdlZW4gdGhlIHR3byBwYXRocy4KLSAgICB3cml0ZTE2KHJlc3VsdCwgbV91bml0c1BlckVt
IC8gMTApOyAvLyBMaW5lIGdhcAotICAgIHdyaXRlMTYocmVzdWx0LCBjbGFtcFRvPHVpbnQxNl90
PihtX2FkdmFuY2VXaWR0aE1heCkpOwotICAgIHdyaXRlMTYocmVzdWx0LCBjbGFtcFRvPGludDE2
X3Q+KG1fYm91bmRpbmdCb3gueCgpKSk7IC8vIE1pbmltdW0gbGVmdCBzaWRlIGJlYXJpbmcKLSAg
ICB3cml0ZTE2KHJlc3VsdCwgY2xhbXBUbzxpbnQxNl90PihtX21pblJpZ2h0U2lkZUJlYXJpbmcp
KTsgLy8gTWluaW11bSByaWdodCBzaWRlIGJlYXJpbmcKLSAgICB3cml0ZTE2KHJlc3VsdCwgY2xh
bXBUbzxpbnQxNl90PihtX2JvdW5kaW5nQm94Lm1heFgoKSkpOyAvLyBYIG1heGltdW0gZXh0ZW50
CisgICAgYXBwZW5kMTYobV91bml0c1BlckVtIC8gMTApOyAvLyBMaW5lIGdhcAorICAgIGFwcGVu
ZDE2KGNsYW1wVG88dWludDE2X3Q+KG1fYWR2YW5jZVdpZHRoTWF4KSk7CisgICAgYXBwZW5kMTYo
Y2xhbXBUbzxpbnQxNl90PihtX2JvdW5kaW5nQm94LngoKSkpOyAvLyBNaW5pbXVtIGxlZnQgc2lk
ZSBiZWFyaW5nCisgICAgYXBwZW5kMTYoY2xhbXBUbzxpbnQxNl90PihtX21pblJpZ2h0U2lkZUJl
YXJpbmcpKTsgLy8gTWluaW11bSByaWdodCBzaWRlIGJlYXJpbmcKKyAgICBhcHBlbmQxNihjbGFt
cFRvPGludDE2X3Q+KG1fYm91bmRpbmdCb3gubWF4WCgpKSk7IC8vIFggbWF4aW11bSBleHRlbnQK
ICAgICAvLyBXZWJLaXQgZHJhd3MgdGhlIGNhcmV0Ci0gICAgd3JpdGUxNihyZXN1bHQsIDEpOyAv
LyBWZXJ0aWNhbCBjYXJldAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gVmVydGljYWwgY2Fy
ZXQKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vICJTZXQgdmFsdWUgdG8gMCBmb3Igbm9uLXNs
YW50ZWQgZm9udHMiCi0gICAgd3JpdGUzMihyZXN1bHQsIDApOyAvLyBSZXNlcnZlZAotICAgIHdy
aXRlMzIocmVzdWx0LCAwKTsgLy8gUmVzZXJ2ZWQKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8v
IEN1cnJlbnQgZm9ybWF0Ci0gICAgd3JpdGUxNihyZXN1bHQsIG1fZ2x5cGhzLnNpemUoKSk7IC8v
IE51bWJlciBvZiBhZHZhbmNlIHdpZHRocyBpbiBITVRYIHRhYmxlCisgICAgYXBwZW5kMTYoMSk7
IC8vIFZlcnRpY2FsIGNhcmV0CisgICAgYXBwZW5kMTYoMCk7IC8vIFZlcnRpY2FsIGNhcmV0Cisg
ICAgYXBwZW5kMTYoMCk7IC8vICJTZXQgdmFsdWUgdG8gMCBmb3Igbm9uLXNsYW50ZWQgZm9udHMi
CisgICAgYXBwZW5kMzIoMCk7IC8vIFJlc2VydmVkCisgICAgYXBwZW5kMzIoMCk7IC8vIFJlc2Vy
dmVkCisgICAgYXBwZW5kMTYoMCk7IC8vIEN1cnJlbnQgZm9ybWF0CisgICAgYXBwZW5kMTYobV9n
bHlwaHMuc2l6ZSgpKTsgLy8gTnVtYmVyIG9mIGFkdmFuY2Ugd2lkdGhzIGluIEhNVFggdGFibGUK
IH0KIAotdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEhNVFhUYWJsZShWZWN0b3I8
Y2hhcj4mIHJlc3VsdCkgY29uc3QKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRI
TVRYVGFibGUoKQogewogICAgIGZvciAoYXV0byYgZ2x5cGggOiBtX2dseXBocykgewotICAgICAg
ICB3cml0ZTE2KHJlc3VsdCwgY2xhbXBUbzx1aW50MTZfdD4oZ2x5cGguaG9yaXpvbnRhbEFkdmFu
Y2UpKTsKLSAgICAgICAgd3JpdGUxNihyZXN1bHQsIGNsYW1wVG88aW50MTZfdD4oZ2x5cGguYm91
bmRpbmdCb3gueCgpKSk7CisgICAgICAgIGFwcGVuZDE2KGNsYW1wVG88dWludDE2X3Q+KGdseXBo
Lmhvcml6b250YWxBZHZhbmNlKSk7CisgICAgICAgIGFwcGVuZDE2KGNsYW1wVG88aW50MTZfdD4o
Z2x5cGguYm91bmRpbmdCb3gueCgpKSk7CiAgICAgfQogfQogCi12b2lkIFNWR1RvT1RGRm9udENv
bnZlcnRlcjo6YXBwZW5kTUFYUFRhYmxlKFZlY3RvcjxjaGFyPiYgcmVzdWx0KSBjb25zdAordm9p
ZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZE1BWFBUYWJsZSgpCiB7Ci0gICAgd3JpdGUz
MihyZXN1bHQsIDB4MDAwMTAwMDApOyAvLyBWZXJzaW9uCi0gICAgd3JpdGUxNihyZXN1bHQsIG1f
Z2x5cGhzLnNpemUoKSk7Ci0gICAgd3JpdGUxNihyZXN1bHQsIDB4RkZGRik7IC8vIE1heGltdW0g
bnVtYmVyIG9mIHBvaW50cyBpbiBub24tY29tcG91bmQgZ2x5cGgKLSAgICB3cml0ZTE2KHJlc3Vs
dCwgMHhGRkZGKTsgLy8gTWF4aW11bSBudW1iZXIgb2YgY29udG91cnMgaW4gbm9uLWNvbXBvdW5k
IGdseXBoCi0gICAgd3JpdGUxNihyZXN1bHQsIDB4RkZGRik7IC8vIE1heGltdW0gbnVtYmVyIG9m
IHBvaW50cyBpbiBjb21wb3VuZCBnbHlwaAotICAgIHdyaXRlMTYocmVzdWx0LCAweEZGRkYpOyAv
LyBNYXhpbXVtIG51bWJlciBvZiBjb250b3VycyBpbiBjb21wb3VuZCBnbHlwaAotICAgIHdyaXRl
MTYocmVzdWx0LCAyKTsgLy8gTWF4aW11bSBudW1iZXIgb2Ygem9uZXMKLSAgICB3cml0ZTE2KHJl
c3VsdCwgMCk7IC8vIE1heGltdW0gbnVtYmVyIG9mIHBvaW50cyB1c2VkIGluIHpvbmUgMAotICAg
IHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gTWF4aW11bSBudW1iZXIgb2Ygc3RvcmFnZSBhcmVhIGxv
Y2F0aW9ucwotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gTWF4aW11bSBudW1iZXIgb2YgZnVu
Y3Rpb24gZGVmaW5pdGlvbnMKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIE1heGltdW0gbnVt
YmVyIG9mIGluc3RydWN0aW9uIGRlZmluaXRpb25zCi0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAv
LyBNYXhpbXVtIHN0YWNrIGRlcHRoCi0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBNYXhpbXVt
IHNpemUgb2YgaW5zdHJ1Y3Rpb25zCi0gICAgd3JpdGUxNihyZXN1bHQsIG1fZ2x5cGhzLnNpemUo
KSk7IC8vIE1heGltdW0gbnVtYmVyIG9mIGdseXBocyByZWZlcmVuY2VkIGF0IHRvcCBsZXZlbAot
ICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gTm8gY29tcG91bmQgZ2x5cGhzCisgICAgYXBwZW5k
MzIoMHgwMDAxMDAwMCk7IC8vIFZlcnNpb24KKyAgICBhcHBlbmQxNihtX2dseXBocy5zaXplKCkp
OworICAgIGFwcGVuZDE2KDB4RkZGRik7IC8vIE1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBpbiBu
b24tY29tcG91bmQgZ2x5cGgKKyAgICBhcHBlbmQxNigweEZGRkYpOyAvLyBNYXhpbXVtIG51bWJl
ciBvZiBjb250b3VycyBpbiBub24tY29tcG91bmQgZ2x5cGgKKyAgICBhcHBlbmQxNigweEZGRkYp
OyAvLyBNYXhpbXVtIG51bWJlciBvZiBwb2ludHMgaW4gY29tcG91bmQgZ2x5cGgKKyAgICBhcHBl
bmQxNigweEZGRkYpOyAvLyBNYXhpbXVtIG51bWJlciBvZiBjb250b3VycyBpbiBjb21wb3VuZCBn
bHlwaAorICAgIGFwcGVuZDE2KDIpOyAvLyBNYXhpbXVtIG51bWJlciBvZiB6b25lcworICAgIGFw
cGVuZDE2KDApOyAvLyBNYXhpbXVtIG51bWJlciBvZiBwb2ludHMgdXNlZCBpbiB6b25lIDAKKyAg
ICBhcHBlbmQxNigwKTsgLy8gTWF4aW11bSBudW1iZXIgb2Ygc3RvcmFnZSBhcmVhIGxvY2F0aW9u
cworICAgIGFwcGVuZDE2KDApOyAvLyBNYXhpbXVtIG51bWJlciBvZiBmdW5jdGlvbiBkZWZpbml0
aW9ucworICAgIGFwcGVuZDE2KDApOyAvLyBNYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbiBk
ZWZpbml0aW9ucworICAgIGFwcGVuZDE2KDApOyAvLyBNYXhpbXVtIHN0YWNrIGRlcHRoCisgICAg
YXBwZW5kMTYoMCk7IC8vIE1heGltdW0gc2l6ZSBvZiBpbnN0cnVjdGlvbnMKKyAgICBhcHBlbmQx
NihtX2dseXBocy5zaXplKCkpOyAvLyBNYXhpbXVtIG51bWJlciBvZiBnbHlwaHMgcmVmZXJlbmNl
ZCBhdCB0b3AgbGV2ZWwKKyAgICBhcHBlbmQxNigwKTsgLy8gTm8gY29tcG91bmQgZ2x5cGhzCiB9
CiAKLXZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmROQU1FVGFibGUoVmVjdG9yPGNo
YXI+JiByZXN1bHQpIGNvbnN0Cit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kTkFN
RVRhYmxlKCkKIHsKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIEZvcm1hdCBzZWxlY3Rvcgot
ICAgIHdyaXRlMTYocmVzdWx0LCAxKTsgLy8gTnVtYmVyIG9mIG5hbWUgcmVjb3JkcyBpbiB0YWJs
ZQotICAgIHdyaXRlMTYocmVzdWx0LCAxOCk7IC8vIE9mZnNldCBpbiBieXRlcyB0byB0aGUgYmVn
aW5uaW5nIG9mIG5hbWUgY2hhcmFjdGVyIHN0cmluZ3MKKyAgICBhcHBlbmQxNigwKTsgLy8gRm9y
bWF0IHNlbGVjdG9yCisgICAgYXBwZW5kMTYoMSk7IC8vIE51bWJlciBvZiBuYW1lIHJlY29yZHMg
aW4gdGFibGUKKyAgICBhcHBlbmQxNigxOCk7IC8vIE9mZnNldCBpbiBieXRlcyB0byB0aGUgYmVn
aW5uaW5nIG9mIG5hbWUgY2hhcmFjdGVyIHN0cmluZ3MKIAotICAgIHdyaXRlMTYocmVzdWx0LCAw
KTsgLy8gVW5pY29kZQotICAgIHdyaXRlMTYocmVzdWx0LCAzKTsgLy8gVW5pY29kZSB2ZXJzaW9u
IDIuMCBvciBsYXRlcgotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gTGFuZ3VhZ2UKLSAgICB3
cml0ZTE2KHJlc3VsdCwgMSk7IC8vIE5hbWUgaWRlbnRpZmllci4gMSA9IEZvbnQgZmFtaWx5Ci0g
ICAgd3JpdGUxNihyZXN1bHQsIG1fZm9udEZhbWlseS5sZW5ndGgoKSk7Ci0gICAgd3JpdGUxNihy
ZXN1bHQsIDApOyAvLyBPZmZzZXQgaW50byBuYW1lIGRhdGEKKyAgICBhcHBlbmQxNigwKTsgLy8g
VW5pY29kZQorICAgIGFwcGVuZDE2KDMpOyAvLyBVbmljb2RlIHZlcnNpb24gMi4wIG9yIGxhdGVy
CisgICAgYXBwZW5kMTYoMCk7IC8vIExhbmd1YWdlCisgICAgYXBwZW5kMTYoMSk7IC8vIE5hbWUg
aWRlbnRpZmllci4gMSA9IEZvbnQgZmFtaWx5CisgICAgYXBwZW5kMTYobV9mb250RmFtaWx5Lmxl
bmd0aCgpKTsKKyAgICBhcHBlbmQxNigwKTsgLy8gT2Zmc2V0IGludG8gbmFtZSBkYXRhCiAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9mb250RmFtaWx5Lmxlbmd0aCgpOyArK2kpCi0g
ICAgICAgIHdyaXRlMTYocmVzdWx0LCBtX2ZvbnRGYW1pbHlbaV0pOworICAgICAgICBhcHBlbmQx
NihtX2ZvbnRGYW1pbHlbaV0pOwogfQogCi12b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBw
ZW5kT1MyVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0Cit2b2lkIFNWR1RvT1RGRm9u
dENvbnZlcnRlcjo6YXBwZW5kT1MyVGFibGUoKQogewogICAgIGludDE2X3QgYXZlcmFnZUFkdmFu
Y2UgPSBtX3VuaXRzUGVyRW07CiAgICAgYXV0byYgYXR0cmlidXRlID0gbV9mb250RWxlbWVudC5m
YXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpob3Jpel9hZHZfeEF0dHIpOwpAQCAtMzQ3LDIzICsz
NzYsMjMgQEAgdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZE9TMlRhYmxlKFZlY3Rv
cjxjaGFyPiYgcmVzdWx0KSBjb25zdAogICAgICAgICAgICAgYXZlcmFnZUFkdmFuY2UgPSBjbGFt
cFRvPGludDE2X3Q+KHZhbHVlKTsKICAgICB9CiAKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8v
IFZlcnNpb24KLSAgICB3cml0ZTE2KHJlc3VsdCwgYXZlcmFnZUFkdmFuY2UpOwotICAgIHdyaXRl
MTYocmVzdWx0LCBtX3dlaWdodCk7IC8vIFdlaWdodCBjbGFzcwotICAgIHdyaXRlMTYocmVzdWx0
LCA1KTsgLy8gV2lkdGggY2xhc3MKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFByb3RlY3Rl
ZCBmb250CisgICAgYXBwZW5kMTYoMCk7IC8vIFZlcnNpb24KKyAgICBhcHBlbmQxNihhdmVyYWdl
QWR2YW5jZSk7CisgICAgYXBwZW5kMTYobV93ZWlnaHQpOyAvLyBXZWlnaHQgY2xhc3MKKyAgICBh
cHBlbmQxNig1KTsgLy8gV2lkdGggY2xhc3MKKyAgICBhcHBlbmQxNigwKTsgLy8gUHJvdGVjdGVk
IGZvbnQKICAgICAvLyBXZWJLaXQgaGFuZGxlcyB0aGVzZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNj
cmlwdHMKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFN1YnNjcmlwdCBYIFNpemUKLSAgICB3
cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFN1YnNjcmlwdCBZIFNpemUKLSAgICB3cml0ZTE2KHJlc3Vs
dCwgMCk7IC8vIFN1YnNjcmlwdCBYIE9mZnNldAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8g
U3Vic2NyaXB0IFkgT2Zmc2V0Ci0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBTdXBlcnNjcmlw
dCBYIFNpemUKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFN1cGVyc2NyaXB0IFkgU2l6ZQot
ICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gU3VwZXJzY3JpcHQgWCBPZmZzZXQKLSAgICB3cml0
ZTE2KHJlc3VsdCwgMCk7IC8vIFN1cGVyc2NyaXB0IFkgT2Zmc2V0Ci0gICAgd3JpdGUxNihyZXN1
bHQsIDApOyAvLyBTdHJpa2VvdXQgd2lkdGgKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFN0
cmlrZW91dCBQb3NpdGlvbgotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gTm8gY2xhc3NpZmlj
YXRpb24KKyAgICBhcHBlbmQxNigwKTsgLy8gU3Vic2NyaXB0IFggU2l6ZQorICAgIGFwcGVuZDE2
KDApOyAvLyBTdWJzY3JpcHQgWSBTaXplCisgICAgYXBwZW5kMTYoMCk7IC8vIFN1YnNjcmlwdCBY
IE9mZnNldAorICAgIGFwcGVuZDE2KDApOyAvLyBTdWJzY3JpcHQgWSBPZmZzZXQKKyAgICBhcHBl
bmQxNigwKTsgLy8gU3VwZXJzY3JpcHQgWCBTaXplCisgICAgYXBwZW5kMTYoMCk7IC8vIFN1cGVy
c2NyaXB0IFkgU2l6ZQorICAgIGFwcGVuZDE2KDApOyAvLyBTdXBlcnNjcmlwdCBYIE9mZnNldAor
ICAgIGFwcGVuZDE2KDApOyAvLyBTdXBlcnNjcmlwdCBZIE9mZnNldAorICAgIGFwcGVuZDE2KDAp
OyAvLyBTdHJpa2VvdXQgd2lkdGgKKyAgICBhcHBlbmQxNigwKTsgLy8gU3RyaWtlb3V0IFBvc2l0
aW9uCisgICAgYXBwZW5kMTYoMCk7IC8vIE5vIGNsYXNzaWZpY2F0aW9uCiAKICAgICBWZWN0b3I8
dW5zaWduZWQgY2hhcj4gc3BlY2lmaWVkUGFub3NlOwogICAgIGlmIChtX2ZvbnRGYWNlRWxlbWVu
dCkgewpAQCAtMzg1LDU3ICs0MTQsNTggQEAgdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFw
cGVuZE9TMlRhYmxlKFZlY3RvcjxjaGFyPiYgcmVzdWx0KSBjb25zdAogCiAgICAgaWYgKHNwZWNp
ZmllZFBhbm9zZS5zaXplKCkgPT0gMTApIHsKICAgICAgICAgZm9yIChjaGFyIGMgOiBzcGVjaWZp
ZWRQYW5vc2UpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGMpOworICAgICAgICAgICAgbV9y
ZXN1bHQuYXBwZW5kKGMpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgMTA7ICsraSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMCk7IC8vIFBBTk9TRTogQW55
CisgICAgICAgICAgICBtX3Jlc3VsdC5hcHBlbmQoMCk7IC8vIFBBTk9TRTogQW55CiAgICAgfQog
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpCi0gICAgICAgIHdyaXRlMzIocmVzdWx0
LCAwKTsgLy8gIkJpdCBhc3NpZ25tZW50cyBhcmUgcGVuZGluZy4gU2V0IHRvIDAiCi0gICAgd3Jp
dGUzMihyZXN1bHQsIDB4NTQ0QjQyNTcpOyAvLyBGb250IFZlbmRvci4gIldCS1QiCi0gICAgd3Jp
dGUxNihyZXN1bHQsIChtX3dlaWdodCA+PSA3ID8gMSA8PCA1IDogMCkgfCAobV9pdGFsaWMgPyAx
IDogMCkpOyAvLyBGb250IFBhdHRlcm5zLgotICAgIHdyaXRlMTYocmVzdWx0LCBtX2dseXBoc1sw
XS5jb2RlcG9pbnQpOyAvLyBGaXJzdCB1bmljb2RlIGluZGV4Ci0gICAgd3JpdGUxNihyZXN1bHQs
IG1fZ2x5cGhzW21fZ2x5cGhzLnNpemUoKSAtIDFdLmNvZGVwb2ludCk7IC8vIExhc3QgdW5pY29k
ZSBpbmRleAorICAgICAgICBhcHBlbmQzMigwKTsgLy8gIkJpdCBhc3NpZ25tZW50cyBhcmUgcGVu
ZGluZy4gU2V0IHRvIDAiCisgICAgYXBwZW5kMzIoMHg1NDRCNDI1Nyk7IC8vIEZvbnQgVmVuZG9y
LiAiV0JLVCIKKyAgICBhcHBlbmQxNigobV93ZWlnaHQgPj0gNyA/IDEgPDwgNSA6IDApIHwgKG1f
aXRhbGljID8gMSA6IDApKTsgLy8gRm9udCBQYXR0ZXJucy4KKyAgICBhcHBlbmQxNigwKTsgLy8g
Rmlyc3QgdW5pY29kZSBpbmRleAorICAgIGFwcGVuZDE2KDB4RkZGRik7IC8vIExhc3QgdW5pY29k
ZSBpbmRleAogfQogCi12b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kUE9TVFRhYmxl
KFZlY3RvcjxjaGFyPiYgcmVzdWx0KSBjb25zdAordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6
OmFwcGVuZFBPU1RUYWJsZSgpCiB7Ci0gICAgd3JpdGUzMihyZXN1bHQsIDB4MDAwMzAwMDApOyAv
LyBGb3JtYXQuIFByaW50aW5nIGlzIHVuZGVmaW5lZAotICAgIHdyaXRlMzIocmVzdWx0LCAwKTsg
Ly8gSXRhbGljIGFuZ2xlIGluIGRlZ3JlZXMKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFVu
ZGVybGluZSBwb3NpdGlvbgotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gVW5kZXJsaW5lIHRo
aWNrbmVzcwotICAgIHdyaXRlMzIocmVzdWx0LCAwKTsgLy8gTW9ub3NwYWNlZAotICAgIHdyaXRl
MzIocmVzdWx0LCAwKTsgLy8gIk1pbmltdW0gbWVtb3J5IHVzYWdlIHdoZW4gYSBUcnVlVHlwZSBm
b250IGlzIGRvd25sb2FkZWQgYXMgYSBUeXBlIDQyIGZvbnQiCi0gICAgd3JpdGUzMihyZXN1bHQs
IDApOyAvLyAiTWF4aW11bSBtZW1vcnkgdXNhZ2Ugd2hlbiBhIFRydWVUeXBlIGZvbnQgaXMgZG93
bmxvYWRlZCBhcyBhIFR5cGUgNDIgZm9udCIKLSAgICB3cml0ZTMyKHJlc3VsdCwgMCk7IC8vICJN
aW5pbXVtIG1lbW9yeSB1c2FnZSB3aGVuIGEgVHJ1ZVR5cGUgZm9udCBpcyBkb3dubG9hZGVkIGFz
IGEgVHlwZSAxIGZvbnQiCi0gICAgd3JpdGUzMihyZXN1bHQsIDApOyAvLyAiTWF4aW11bSBtZW1v
cnkgdXNhZ2Ugd2hlbiBhIFRydWVUeXBlIGZvbnQgaXMgZG93bmxvYWRlZCBhcyBhIFR5cGUgMSBm
b250IgorICAgIGFwcGVuZDMyKDB4MDAwMzAwMDApOyAvLyBGb3JtYXQuIFByaW50aW5nIGlzIHVu
ZGVmaW5lZAorICAgIGFwcGVuZDMyKDApOyAvLyBJdGFsaWMgYW5nbGUgaW4gZGVncmVlcworICAg
IGFwcGVuZDE2KDApOyAvLyBVbmRlcmxpbmUgcG9zaXRpb24KKyAgICBhcHBlbmQxNigwKTsgLy8g
VW5kZXJsaW5lIHRoaWNrbmVzcworICAgIGFwcGVuZDMyKDApOyAvLyBNb25vc3BhY2VkCisgICAg
YXBwZW5kMzIoMCk7IC8vICJNaW5pbXVtIG1lbW9yeSB1c2FnZSB3aGVuIGEgVHJ1ZVR5cGUgZm9u
dCBpcyBkb3dubG9hZGVkIGFzIGEgVHlwZSA0MiBmb250IgorICAgIGFwcGVuZDMyKDApOyAvLyAi
TWF4aW11bSBtZW1vcnkgdXNhZ2Ugd2hlbiBhIFRydWVUeXBlIGZvbnQgaXMgZG93bmxvYWRlZCBh
cyBhIFR5cGUgNDIgZm9udCIKKyAgICBhcHBlbmQzMigwKTsgLy8gIk1pbmltdW0gbWVtb3J5IHVz
YWdlIHdoZW4gYSBUcnVlVHlwZSBmb250IGlzIGRvd25sb2FkZWQgYXMgYSBUeXBlIDEgZm9udCIK
KyAgICBhcHBlbmQzMigwKTsgLy8gIk1heGltdW0gbWVtb3J5IHVzYWdlIHdoZW4gYSBUcnVlVHlw
ZSBmb250IGlzIGRvd25sb2FkZWQgYXMgYSBUeXBlIDEgZm9udCIKIH0KIAogc3RhdGljIGJvb2wg
aXNWYWxpZFN0cmluZ0ZvckNGRihjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKHN0
cmluZ1tpXSA8IDMzIHx8IHN0cmluZ1tpXSA+IDEyNikKKyAgICAgICAgYXV0byBjID0gc3RyaW5n
W2ldOworICAgICAgICBpZiAoYyA8IDMzIHx8IGMgPiAxMjYpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRD
RkZWYWxpZFN0cmluZyhWZWN0b3I8Y2hhcj4mIG91dHB1dCwgY29uc3QgU3RyaW5nJiBzdHJpbmcp
Cit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kQ0ZGVmFsaWRTdHJpbmcoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgQVNTRVJUKGlzVmFsaWRTdHJpbmdGb3JDRkYoc3RyaW5n
KSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKQot
ICAgICAgICBvdXRwdXQuYXBwZW5kKHN0cmluZ1tpXSk7CisgICAgICAgIG1fcmVzdWx0LmFwcGVu
ZChzdHJpbmdbaV0pOwogfQogCi12b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kQ0ZG
VGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0Cit2b2lkIFNWR1RvT1RGRm9udENvbnZl
cnRlcjo6YXBwZW5kQ0ZGVGFibGUoKQogewotICAgIGF1dG8gc3RhcnRpbmdPZmZzZXQgPSByZXN1
bHQuc2l6ZSgpOworICAgIGF1dG8gc3RhcnRpbmdPZmZzZXQgPSBtX3Jlc3VsdC5zaXplKCk7CiAg
ICAgLy8gSGVhZGVyCi0gICAgcmVzdWx0LmFwcGVuZCgxKTsgLy8gTWFqb3IgdmVyc2lvbgotICAg
IHJlc3VsdC5hcHBlbmQoMCk7IC8vIE1pbm9yIHZlcnNpb24KLSAgICByZXN1bHQuYXBwZW5kKDQp
OyAvLyBIZWFkZXIgc2l6ZQotICAgIHJlc3VsdC5hcHBlbmQoNCk7IC8vIE9mZnNldHMgd2l0aGlu
IENGRiB0YWJsZSBhcmUgNCBieXRlcyBsb25nCisgICAgbV9yZXN1bHQuYXBwZW5kKDEpOyAvLyBN
YWpvciB2ZXJzaW9uCisgICAgbV9yZXN1bHQuYXBwZW5kKDApOyAvLyBNaW5vciB2ZXJzaW9uCisg
ICAgbV9yZXN1bHQuYXBwZW5kKDQpOyAvLyBIZWFkZXIgc2l6ZQorICAgIG1fcmVzdWx0LmFwcGVu
ZCg0KTsgLy8gT2Zmc2V0cyB3aXRoaW4gQ0ZGIHRhYmxlIGFyZSA0IGJ5dGVzIGxvbmcKIAogICAg
IC8vIE5hbWUgSU5ERVgKICAgICBTdHJpbmcgZm9udE5hbWU7CkBAIC00NDUsMTEgKzQ3NSwxMSBA
QCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kQ0ZGVGFibGUoVmVjdG9yPGNoYXI+
JiByZXN1bHQpIGNvbnN0CiAgICAgICAgIGlmIChpc1ZhbGlkU3RyaW5nRm9yQ0ZGKHBvdGVudGlh
bEZvbnROYW1lKSkKICAgICAgICAgICAgIGZvbnROYW1lID0gcG90ZW50aWFsRm9udE5hbWU7CiAg
ICAgfQotICAgIHdyaXRlMTYocmVzdWx0LCAxKTsgLy8gSU5ERVggY29udGFpbnMgMSBlbGVtZW50
Ci0gICAgcmVzdWx0LmFwcGVuZCg0KTsgLy8gT2Zmc2V0cyBpbiB0aGlzIElOREVYIGFyZSA0IGJ5
dGVzIGxvbmcKLSAgICB3cml0ZTMyKHJlc3VsdCwgMSk7IC8vIDEtaW5kZXggb2Zmc2V0IG9mIG5h
bWUgZGF0YQotICAgIHdyaXRlMzIocmVzdWx0LCBmb250TmFtZS5sZW5ndGgoKSArIDEpOyAvLyAx
LWluZGV4IG9mZnNldCBqdXN0IHBhc3QgZW5kIG9mIG5hbWUgZGF0YQotICAgIGFwcGVuZENGRlZh
bGlkU3RyaW5nKHJlc3VsdCwgZm9udE5hbWUpOworICAgIGFwcGVuZDE2KDEpOyAvLyBJTkRFWCBj
b250YWlucyAxIGVsZW1lbnQKKyAgICBtX3Jlc3VsdC5hcHBlbmQoNCk7IC8vIE9mZnNldHMgaW4g
dGhpcyBJTkRFWCBhcmUgNCBieXRlcyBsb25nCisgICAgYXBwZW5kMzIoMSk7IC8vIDEtaW5kZXgg
b2Zmc2V0IG9mIG5hbWUgZGF0YQorICAgIGFwcGVuZDMyKGZvbnROYW1lLmxlbmd0aCgpICsgMSk7
IC8vIDEtaW5kZXggb2Zmc2V0IGp1c3QgcGFzdCBlbmQgb2YgbmFtZSBkYXRhCisgICAgYXBwZW5k
Q0ZGVmFsaWRTdHJpbmcoZm9udE5hbWUpOwogCiAgICAgU3RyaW5nIHdlaWdodDsKICAgICBpZiAo
bV9mb250RmFjZUVsZW1lbnQpIHsKQEAgLTQ2OSw5MSArNDk5LDkxIEBAIHZvaWQgU1ZHVG9PVEZG
b250Q29udmVydGVyOjphcHBlbmRDRkZUYWJsZShWZWN0b3I8Y2hhcj4mIHJlc3VsdCkgY29uc3QK
ICAgICBjb25zdCB1bnNpZ25lZCBzaXplT2ZUb3BJbmRleCA9IDQ1ICsgKHdlaWdodC5pc0VtcHR5
KCkgPyAwIDogNik7CiAKICAgICAvLyBUb3AgRElDVCBJTkRFWC4KLSAgICB3cml0ZTE2KHJlc3Vs
dCwgMSk7IC8vIElOREVYIGNvbnRhaW5zIDEgZWxlbWVudAotICAgIHJlc3VsdC5hcHBlbmQoNCk7
IC8vIE9mZnNldHMgaW4gdGhpcyBJTkRFWCBhcmUgNCBieXRlcyBsb25nCi0gICAgd3JpdGUzMihy
ZXN1bHQsIDEpOyAvLyAxLWluZGV4IG9mZnNldCBvZiBESUNUIGRhdGEKLSAgICB3cml0ZTMyKHJl
c3VsdCwgMSArIHNpemVPZlRvcEluZGV4KTsgLy8gMS1pbmRleCBvZmZzZXQganVzdCBwYXN0IGVu
ZCBvZiBESUNUIGRhdGEKKyAgICBhcHBlbmQxNigxKTsgLy8gSU5ERVggY29udGFpbnMgMSBlbGVt
ZW50CisgICAgbV9yZXN1bHQuYXBwZW5kKDQpOyAvLyBPZmZzZXRzIGluIHRoaXMgSU5ERVggYXJl
IDQgYnl0ZXMgbG9uZworICAgIGFwcGVuZDMyKDEpOyAvLyAxLWluZGV4IG9mZnNldCBvZiBESUNU
IGRhdGEKKyAgICBhcHBlbmQzMigxICsgc2l6ZU9mVG9wSW5kZXgpOyAvLyAxLWluZGV4IG9mZnNl
dCBqdXN0IHBhc3QgZW5kIG9mIERJQ1QgZGF0YQogCiAgICAgLy8gRElDVCBpbmZvcm1hdGlvbgog
I2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICB1bnNpZ25lZCB0b3BEaWN0U3RhcnQgPSByZXN1bHQu
c2l6ZSgpOworICAgIHVuc2lnbmVkIHRvcERpY3RTdGFydCA9IG1fcmVzdWx0LnNpemUoKTsKICNl
bmRpZgotICAgIHJlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsKLSAgICB3cml0ZTMyKHJlc3Vs
dCwgdXNlckRlZmluZWRTdHJpbmdTdGFydEluZGV4KTsKLSAgICByZXN1bHQuYXBwZW5kKGZ1bGxO
YW1lS2V5KTsKLSAgICByZXN1bHQuYXBwZW5kKG9wZXJhbmQzMkJpdCk7Ci0gICAgd3JpdGUzMihy
ZXN1bHQsIHVzZXJEZWZpbmVkU3RyaW5nU3RhcnRJbmRleCk7Ci0gICAgcmVzdWx0LmFwcGVuZChm
YW1pbHlOYW1lS2V5KTsKKyAgICBtX3Jlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsKKyAgICBh
cHBlbmQzMih1c2VyRGVmaW5lZFN0cmluZ1N0YXJ0SW5kZXgpOworICAgIG1fcmVzdWx0LmFwcGVu
ZChmdWxsTmFtZUtleSk7CisgICAgbV9yZXN1bHQuYXBwZW5kKG9wZXJhbmQzMkJpdCk7CisgICAg
YXBwZW5kMzIodXNlckRlZmluZWRTdHJpbmdTdGFydEluZGV4KTsKKyAgICBtX3Jlc3VsdC5hcHBl
bmQoZmFtaWx5TmFtZUtleSk7CiAgICAgaWYgKCF3ZWlnaHQuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IHJlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsKLSAgICAgICAgd3JpdGUzMihyZXN1bHQsIHVz
ZXJEZWZpbmVkU3RyaW5nU3RhcnRJbmRleCArIDEpOwotICAgICAgICByZXN1bHQuYXBwZW5kKHdl
aWdodEtleSk7CisgICAgICAgIG1fcmVzdWx0LmFwcGVuZChvcGVyYW5kMzJCaXQpOworICAgICAg
ICBhcHBlbmQzMih1c2VyRGVmaW5lZFN0cmluZ1N0YXJ0SW5kZXggKyAxKTsKKyAgICAgICAgbV9y
ZXN1bHQuYXBwZW5kKHdlaWdodEtleSk7CiAgICAgfQotICAgIHJlc3VsdC5hcHBlbmQob3BlcmFu
ZDMyQml0KTsKLSAgICB3cml0ZTMyKHJlc3VsdCwgY2xhbXBUbzxpbnQzMl90PihtX2JvdW5kaW5n
Qm94LngoKSkpOwotICAgIHJlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsKLSAgICB3cml0ZTMy
KHJlc3VsdCwgY2xhbXBUbzxpbnQzMl90PihtX2JvdW5kaW5nQm94Lm1heFgoKSkpOwotICAgIHJl
c3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsKLSAgICB3cml0ZTMyKHJlc3VsdCwgY2xhbXBUbzxp
bnQzMl90PihtX2JvdW5kaW5nQm94LnkoKSkpOwotICAgIHJlc3VsdC5hcHBlbmQob3BlcmFuZDMy
Qml0KTsKLSAgICB3cml0ZTMyKHJlc3VsdCwgY2xhbXBUbzxpbnQzMl90PihtX2JvdW5kaW5nQm94
Lm1heFkoKSkpOwotICAgIHJlc3VsdC5hcHBlbmQoZm9udEJCb3hLZXkpOwotICAgIHJlc3VsdC5h
cHBlbmQob3BlcmFuZDMyQml0KTsKLSAgICB1bnNpZ25lZCBjaGFyc2V0T2Zmc2V0TG9jYXRpb24g
PSByZXN1bHQuc2l6ZSgpOwotICAgIHdyaXRlMzIocmVzdWx0LCAwKTsgLy8gT2Zmc2V0IG9mIENo
YXJzZXQgaW5mby4gV2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlci4KLSAgICByZXN1bHQuYXBwZW5k
KGNoYXJzZXRJbmRleEtleSk7Ci0gICAgcmVzdWx0LmFwcGVuZChvcGVyYW5kMzJCaXQpOwotICAg
IHVuc2lnbmVkIGNoYXJzdHJpbmdzT2Zmc2V0TG9jYXRpb24gPSByZXN1bHQuc2l6ZSgpOwotICAg
IHdyaXRlMzIocmVzdWx0LCAwKTsgLy8gT2Zmc2V0IG9mIENoYXJTdHJpbmdzIElOREVYLiBXaWxs
IGJlIG92ZXJ3cml0dGVuIGxhdGVyLgotICAgIHJlc3VsdC5hcHBlbmQoY2hhcnN0cmluZ3NJbmRl
eEtleSk7Ci0gICAgQVNTRVJUKHJlc3VsdC5zaXplKCkgPT0gdG9wRGljdFN0YXJ0ICsgc2l6ZU9m
VG9wSW5kZXgpOworICAgIG1fcmVzdWx0LmFwcGVuZChvcGVyYW5kMzJCaXQpOworICAgIGFwcGVu
ZDMyKGNsYW1wVG88aW50MzJfdD4obV9ib3VuZGluZ0JveC54KCkpKTsKKyAgICBtX3Jlc3VsdC5h
cHBlbmQob3BlcmFuZDMyQml0KTsKKyAgICBhcHBlbmQzMihjbGFtcFRvPGludDMyX3Q+KG1fYm91
bmRpbmdCb3gubWF4WCgpKSk7CisgICAgbV9yZXN1bHQuYXBwZW5kKG9wZXJhbmQzMkJpdCk7Cisg
ICAgYXBwZW5kMzIoY2xhbXBUbzxpbnQzMl90PihtX2JvdW5kaW5nQm94LnkoKSkpOworICAgIG1f
cmVzdWx0LmFwcGVuZChvcGVyYW5kMzJCaXQpOworICAgIGFwcGVuZDMyKGNsYW1wVG88aW50MzJf
dD4obV9ib3VuZGluZ0JveC5tYXhZKCkpKTsKKyAgICBtX3Jlc3VsdC5hcHBlbmQoZm9udEJCb3hL
ZXkpOworICAgIG1fcmVzdWx0LmFwcGVuZChvcGVyYW5kMzJCaXQpOworICAgIHVuc2lnbmVkIGNo
YXJzZXRPZmZzZXRMb2NhdGlvbiA9IG1fcmVzdWx0LnNpemUoKTsKKyAgICBhcHBlbmQzMigwKTsg
Ly8gT2Zmc2V0IG9mIENoYXJzZXQgaW5mby4gV2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlci4KKyAg
ICBtX3Jlc3VsdC5hcHBlbmQoY2hhcnNldEluZGV4S2V5KTsKKyAgICBtX3Jlc3VsdC5hcHBlbmQo
b3BlcmFuZDMyQml0KTsKKyAgICB1bnNpZ25lZCBjaGFyc3RyaW5nc09mZnNldExvY2F0aW9uID0g
bV9yZXN1bHQuc2l6ZSgpOworICAgIGFwcGVuZDMyKDApOyAvLyBPZmZzZXQgb2YgQ2hhclN0cmlu
Z3MgSU5ERVguIFdpbGwgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIuCisgICAgbV9yZXN1bHQuYXBwZW5k
KGNoYXJzdHJpbmdzSW5kZXhLZXkpOworICAgIEFTU0VSVChtX3Jlc3VsdC5zaXplKCkgPT0gdG9w
RGljdFN0YXJ0ICsgc2l6ZU9mVG9wSW5kZXgpOwogCiAgICAgLy8gU3RyaW5nIElOREVYCi0gICAg
d3JpdGUxNihyZXN1bHQsIDEgKyAod2VpZ2h0LmlzRW1wdHkoKSA/IDAgOiAxKSk7IC8vIE51bWJl
ciBvZiBlbGVtZW50cyBpbiBJTkRFWAotICAgIHJlc3VsdC5hcHBlbmQoNCk7IC8vIE9mZnNldHMg
aW4gdGhpcyBJTkRFWCBhcmUgNCBieXRlcyBsb25nCisgICAgYXBwZW5kMTYoMSArICh3ZWlnaHQu
aXNFbXB0eSgpID8gMCA6IDEpKTsgLy8gTnVtYmVyIG9mIGVsZW1lbnRzIGluIElOREVYCisgICAg
bV9yZXN1bHQuYXBwZW5kKDQpOyAvLyBPZmZzZXRzIGluIHRoaXMgSU5ERVggYXJlIDQgYnl0ZXMg
bG9uZwogICAgIHVpbnQzMl90IG9mZnNldCA9IDE7Ci0gICAgd3JpdGUzMihyZXN1bHQsIG9mZnNl
dCk7CisgICAgYXBwZW5kMzIob2Zmc2V0KTsKICAgICBvZmZzZXQgKz0gZm9udE5hbWUubGVuZ3Ro
KCk7Ci0gICAgd3JpdGUzMihyZXN1bHQsIG9mZnNldCk7CisgICAgYXBwZW5kMzIob2Zmc2V0KTsK
ICAgICBpZiAoIXdlaWdodC5pc0VtcHR5KCkpIHsKICAgICAgICAgb2Zmc2V0ICs9IHdlaWdodC5s
ZW5ndGgoKTsKLSAgICAgICAgd3JpdGUzMihyZXN1bHQsIG9mZnNldCk7CisgICAgICAgIGFwcGVu
ZDMyKG9mZnNldCk7CiAgICAgfQotICAgIGFwcGVuZENGRlZhbGlkU3RyaW5nKHJlc3VsdCwgZm9u
dE5hbWUpOwotICAgIGFwcGVuZENGRlZhbGlkU3RyaW5nKHJlc3VsdCwgd2VpZ2h0KTsKKyAgICBh
cHBlbmRDRkZWYWxpZFN0cmluZyhmb250TmFtZSk7CisgICAgYXBwZW5kQ0ZGVmFsaWRTdHJpbmco
d2VpZ2h0KTsKIAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gRW1wdHkgc3Vicm91dGluZSBJ
TkRFWAorICAgIGFwcGVuZDE2KDApOyAvLyBFbXB0eSBzdWJyb3V0aW5lIElOREVYCiAKICAgICAv
LyBDaGFyc2V0IGluZm8KLSAgICBvdmVyd3JpdGUzMihyZXN1bHQsIGNoYXJzZXRPZmZzZXRMb2Nh
dGlvbiwgcmVzdWx0LnNpemUoKSAtIHN0YXJ0aW5nT2Zmc2V0KTsKLSAgICByZXN1bHQuYXBwZW5k
KDApOworICAgIG92ZXJ3cml0ZTMyKGNoYXJzZXRPZmZzZXRMb2NhdGlvbiwgbV9yZXN1bHQuc2l6
ZSgpIC0gc3RhcnRpbmdPZmZzZXQpOworICAgIG1fcmVzdWx0LmFwcGVuZCgwKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9nbHlwaHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHdyaXRl
MTYocmVzdWx0LCBpKTsKKyAgICAgICAgYXBwZW5kMTYoaSk7CiAKICAgICAvLyBDaGFyU3RyaW5n
cyBJTkRFWAotICAgIG92ZXJ3cml0ZTMyKHJlc3VsdCwgY2hhcnN0cmluZ3NPZmZzZXRMb2NhdGlv
biwgcmVzdWx0LnNpemUoKSAtIHN0YXJ0aW5nT2Zmc2V0KTsKLSAgICB3cml0ZTE2KHJlc3VsdCwg
bV9nbHlwaHMuc2l6ZSgpKTsKLSAgICByZXN1bHQuYXBwZW5kKDQpOyAvLyBPZmZzZXRzIGluIHRo
aXMgSU5ERVggYXJlIDQgYnl0ZXMgbG9uZworICAgIG92ZXJ3cml0ZTMyKGNoYXJzdHJpbmdzT2Zm
c2V0TG9jYXRpb24sIG1fcmVzdWx0LnNpemUoKSAtIHN0YXJ0aW5nT2Zmc2V0KTsKKyAgICBhcHBl
bmQxNihtX2dseXBocy5zaXplKCkpOworICAgIG1fcmVzdWx0LmFwcGVuZCg0KTsgLy8gT2Zmc2V0
cyBpbiB0aGlzIElOREVYIGFyZSA0IGJ5dGVzIGxvbmcKICAgICBvZmZzZXQgPSAxOwotICAgIHdy
aXRlMzIocmVzdWx0LCBvZmZzZXQpOworICAgIGFwcGVuZDMyKG9mZnNldCk7CiAgICAgZm9yIChh
dXRvJiBnbHlwaCA6IG1fZ2x5cGhzKSB7CiAgICAgICAgIG9mZnNldCArPSBnbHlwaC5jaGFyU3Ry
aW5nLnNpemUoKTsKLSAgICAgICAgd3JpdGUzMihyZXN1bHQsIG9mZnNldCk7CisgICAgICAgIGFw
cGVuZDMyKG9mZnNldCk7CiAgICAgfQogICAgIGZvciAoYXV0byYgZ2x5cGggOiBtX2dseXBocykK
LSAgICAgICAgcmVzdWx0LmFwcGVuZFZlY3RvcihnbHlwaC5jaGFyU3RyaW5nKTsKKyAgICAgICAg
bV9yZXN1bHQuYXBwZW5kVmVjdG9yKGdseXBoLmNoYXJTdHJpbmcpOwogfQogCi12b2lkIFNWR1Rv
T1RGRm9udENvbnZlcnRlcjo6YXBwZW5kVk9SR1RhYmxlKFZlY3RvcjxjaGFyPiYgcmVzdWx0KSBj
b25zdAordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFZPUkdUYWJsZSgpCiB7Ci0g
ICAgd3JpdGUxNihyZXN1bHQsIDEpOyAvLyBNYWpvciB2ZXJzaW9uCi0gICAgd3JpdGUxNihyZXN1
bHQsIDApOyAvLyBNaW5vciB2ZXJzaW9uCisgICAgYXBwZW5kMTYoMSk7IC8vIE1ham9yIHZlcnNp
b24KKyAgICBhcHBlbmQxNigwKTsgLy8gTWlub3IgdmVyc2lvbgogCiAgICAgYm9vbCBvazsKICAg
ICBpbnQxNl90IGRlZmF1bHRWZXJ0aWNhbE9yaWdpblkgPSBjbGFtcFRvPGludDE2X3Q+KG1fZm9u
dEVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6dmVydF9vcmlnaW5feUF0dHIpLnRv
SW50KCZvaykpOwogICAgIGlmICghb2sgJiYgbV9taXNzaW5nR2x5cGhFbGVtZW50KQogICAgICAg
ICBkZWZhdWx0VmVydGljYWxPcmlnaW5ZID0gY2xhbXBUbzxpbnQxNl90PihtX21pc3NpbmdHbHlw
aEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZlcnRfb3JpZ2luX3lBdHRyKS50
b0ludCgpKTsKLSAgICB3cml0ZTE2KHJlc3VsdCwgZGVmYXVsdFZlcnRpY2FsT3JpZ2luWSk7Cisg
ICAgYXBwZW5kMTYoZGVmYXVsdFZlcnRpY2FsT3JpZ2luWSk7CiAKICAgICBWZWN0b3I8c3RkOjpw
YWlyPHVpbnQxNl90LCBpbnQxNl90Pj4gb3JpZ2luczsKICAgICBmb3IgKHVpbnQxNl90IGkgPSAw
OyBpIDwgbV9nbHlwaHMuc2l6ZSgpOyArK2kpIHsKQEAgLTU2NywzOSArNTk3LDM5IEBAIHZvaWQg
U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRWT1JHVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1
bHQpIGNvbnN0CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgd3JpdGUxNihy
ZXN1bHQsIG9yaWdpbnMuc2l6ZSgpKTsKKyAgICBhcHBlbmQxNihvcmlnaW5zLnNpemUoKSk7CiAK
ICAgICBmb3IgKGF1dG8mIHAgOiBvcmlnaW5zKSB7Ci0gICAgICAgIHdyaXRlMTYocmVzdWx0LCBw
LmZpcnN0KTsKLSAgICAgICAgd3JpdGUxNihyZXN1bHQsIHAuc2Vjb25kKTsKKyAgICAgICAgYXBw
ZW5kMTYocC5maXJzdCk7CisgICAgICAgIGFwcGVuZDE2KHAuc2Vjb25kKTsKICAgICB9CiB9CiAK
LXZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRWSEVBVGFibGUoVmVjdG9yPGNoYXI+
JiByZXN1bHQpIGNvbnN0Cit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kVkhFQVRh
YmxlKCkKIHsKLSAgICB3cml0ZTMyKHJlc3VsdCwgMHgwMDAxMTAwMCk7IC8vIFZlcnNpb24KLSAg
ICB3cml0ZTE2KHJlc3VsdCwgbV91bml0c1BlckVtIC8gMik7IC8vIFZlcnRpY2FsIHR5cG9ncmFw
aGljIGFzY2VuZGVyICh2ZXJ0aWNhbCBiYXNlbGluZSB0byB0aGUgcmlnaHQpCi0gICAgd3JpdGUx
NihyZXN1bHQsIGNsYW1wVG88aW50MTZfdD4oLXN0YXRpY19jYXN0PGludD4obV91bml0c1BlckVt
IC8gMikpKTsgLy8gVmVydGljYWwgdHlwb2dyYXBoaWMgZGVzY2VuZGVyCi0gICAgd3JpdGUxNihy
ZXN1bHQsIG1fdW5pdHNQZXJFbSAvIDEwKTsgLy8gVmVydGljYWwgdHlwb2dyYXBoaWMgbGluZSBn
YXAKLSAgICB3cml0ZTE2KHJlc3VsdCwgY2xhbXBUbzxpbnQxNl90PihtX2FkdmFuY2VIZWlnaHRN
YXgpKTsKLSAgICB3cml0ZTE2KHJlc3VsdCwgY2xhbXBUbzxpbnQxNl90PihtX3VuaXRzUGVyRW0g
LSBtX2JvdW5kaW5nQm94Lm1heFkoKSkpOyAvLyBNaW5pbXVtIHRvcCBzaWRlIGJlYXJpbmcKLSAg
ICB3cml0ZTE2KHJlc3VsdCwgY2xhbXBUbzxpbnQxNl90PihtX2JvdW5kaW5nQm94LnkoKSkpOyAv
LyBNaW5pbXVtIGJvdHRvbSBzaWRlIGJlYXJpbmcKLSAgICB3cml0ZTE2KHJlc3VsdCwgY2xhbXBU
bzxpbnQxNl90PihtX3VuaXRzUGVyRW0gLSBtX2JvdW5kaW5nQm94LnkoKSkpOyAvLyBZIG1heGlt
dW0gZXh0ZW50CisgICAgYXBwZW5kMzIoMHgwMDAxMTAwMCk7IC8vIFZlcnNpb24KKyAgICBhcHBl
bmQxNihtX3VuaXRzUGVyRW0gLyAyKTsgLy8gVmVydGljYWwgdHlwb2dyYXBoaWMgYXNjZW5kZXIg
KHZlcnRpY2FsIGJhc2VsaW5lIHRvIHRoZSByaWdodCkKKyAgICBhcHBlbmQxNihjbGFtcFRvPGlu
dDE2X3Q+KC1zdGF0aWNfY2FzdDxpbnQ+KG1fdW5pdHNQZXJFbSAvIDIpKSk7IC8vIFZlcnRpY2Fs
IHR5cG9ncmFwaGljIGRlc2NlbmRlcgorICAgIGFwcGVuZDE2KG1fdW5pdHNQZXJFbSAvIDEwKTsg
Ly8gVmVydGljYWwgdHlwb2dyYXBoaWMgbGluZSBnYXAKKyAgICBhcHBlbmQxNihjbGFtcFRvPGlu
dDE2X3Q+KG1fYWR2YW5jZUhlaWdodE1heCkpOworICAgIGFwcGVuZDE2KGNsYW1wVG88aW50MTZf
dD4obV91bml0c1BlckVtIC0gbV9ib3VuZGluZ0JveC5tYXhZKCkpKTsgLy8gTWluaW11bSB0b3Ag
c2lkZSBiZWFyaW5nCisgICAgYXBwZW5kMTYoY2xhbXBUbzxpbnQxNl90PihtX2JvdW5kaW5nQm94
LnkoKSkpOyAvLyBNaW5pbXVtIGJvdHRvbSBzaWRlIGJlYXJpbmcKKyAgICBhcHBlbmQxNihjbGFt
cFRvPGludDE2X3Q+KG1fdW5pdHNQZXJFbSAtIG1fYm91bmRpbmdCb3gueSgpKSk7IC8vIFkgbWF4
aW11bSBleHRlbnQKICAgICAvLyBXZWJLaXQgZHJhd3MgdGhlIGNhcmV0Ci0gICAgd3JpdGUxNihy
ZXN1bHQsIDEpOyAvLyBWZXJ0aWNhbCBjYXJldAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8g
VmVydGljYWwgY2FyZXQKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vICJTZXQgdmFsdWUgdG8g
MCBmb3Igbm9uLXNsYW50ZWQgZm9udHMiCi0gICAgd3JpdGUzMihyZXN1bHQsIDApOyAvLyBSZXNl
cnZlZAotICAgIHdyaXRlMzIocmVzdWx0LCAwKTsgLy8gUmVzZXJ2ZWQKLSAgICB3cml0ZTE2KHJl
c3VsdCwgMCk7IC8vICJTZXQgdG8gMCIKLSAgICB3cml0ZTE2KHJlc3VsdCwgbV9nbHlwaHMuc2l6
ZSgpKTsgLy8gTnVtYmVyIG9mIGFkdmFuY2UgaGVpZ2h0cyBpbiBWTVRYIHRhYmxlCisgICAgYXBw
ZW5kMTYoMSk7IC8vIFZlcnRpY2FsIGNhcmV0CisgICAgYXBwZW5kMTYoMCk7IC8vIFZlcnRpY2Fs
IGNhcmV0CisgICAgYXBwZW5kMTYoMCk7IC8vICJTZXQgdmFsdWUgdG8gMCBmb3Igbm9uLXNsYW50
ZWQgZm9udHMiCisgICAgYXBwZW5kMzIoMCk7IC8vIFJlc2VydmVkCisgICAgYXBwZW5kMzIoMCk7
IC8vIFJlc2VydmVkCisgICAgYXBwZW5kMTYoMCk7IC8vICJTZXQgdG8gMCIKKyAgICBhcHBlbmQx
NihtX2dseXBocy5zaXplKCkpOyAvLyBOdW1iZXIgb2YgYWR2YW5jZSBoZWlnaHRzIGluIFZNVFgg
dGFibGUKIH0KIAotdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFZNVFhUYWJsZShW
ZWN0b3I8Y2hhcj4mIHJlc3VsdCkgY29uc3QKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjph
cHBlbmRWTVRYVGFibGUoKQogewogICAgIGZvciAoYXV0byYgZ2x5cGggOiBtX2dseXBocykgewot
ICAgICAgICB3cml0ZTE2KHJlc3VsdCwgY2xhbXBUbzx1aW50MTZfdD4oZ2x5cGgudmVydGljYWxB
ZHZhbmNlKSk7Ci0gICAgICAgIHdyaXRlMTYocmVzdWx0LCBjbGFtcFRvPGludDE2X3Q+KG1fdW5p
dHNQZXJFbSAtIGdseXBoLmJvdW5kaW5nQm94Lm1heFkoKSkpOyAvLyB0b3Agc2lkZSBiZWFyaW5n
CisgICAgICAgIGFwcGVuZDE2KGNsYW1wVG88dWludDE2X3Q+KGdseXBoLnZlcnRpY2FsQWR2YW5j
ZSkpOworICAgICAgICBhcHBlbmQxNihjbGFtcFRvPGludDE2X3Q+KG1fdW5pdHNQZXJFbSAtIGds
eXBoLmJvdW5kaW5nQm94Lm1heFkoKSkpOyAvLyB0b3Agc2lkZSBiZWFyaW5nCiAgICAgfQogfQog
CkBAIC02MDcsMTEgKzYzNywxNCBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkQ29k
ZXBvaW50UmFuZ2VzKGNvbnN0IFVuaWNvZGVSYW5nZXMmIHVuaWNvZGVSYW5nZQogewogICAgIGZv
ciAoYXV0byYgdW5pY29kZVJhbmdlIDogdW5pY29kZVJhbmdlcykgewogICAgICAgICBmb3IgKGF1
dG8gY29kZXBvaW50ID0gdW5pY29kZVJhbmdlLmZpcnN0OyBjb2RlcG9pbnQgPD0gdW5pY29kZVJh
bmdlLnNlY29uZDsgKytjb2RlcG9pbnQpIHsKLSAgICAgICAgICAgIGlmICghY29kZXBvaW50IHx8
IGNvZGVwb2ludCA+PSBzdGQ6Om51bWVyaWNfbGltaXRzPENvZGVwb2ludD46Om1heCgpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fY29k
ZXBvaW50VG9JbmRleE1hcC5maW5kKGNvZGVwb2ludCk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0
b3IgIT0gbV9jb2RlcG9pbnRUb0luZGV4TWFwLmVuZCgpKQotICAgICAgICAgICAgICAgIGdseXBo
U2V0LmFkZChpdGVyYXRvci0+dmFsdWUpOworICAgICAgICAgICAgVUNoYXIgYnVmZmVyWzJdOwor
ICAgICAgICAgICAgdWludDhfdCBsZW5ndGggPSAwOworICAgICAgICAgICAgVUJvb2wgZXJyb3Ig
PSBmYWxzZTsKKyAgICAgICAgICAgIFUxNl9BUFBFTkQoYnVmZmVyLCBsZW5ndGgsIDIsIGNvZGVw
b2ludCwgZXJyb3IpOworICAgICAgICAgICAgaWYgKCFlcnJvcikgeworICAgICAgICAgICAgICAg
IGZvciAoYXV0byBpbmRleCA6IG1fY29kZXBvaW50c1RvSW5kaWNlc01hcC5nZXQoU3RyaW5nKGJ1
ZmZlciwgbGVuZ3RoKSkpCisgICAgICAgICAgICAgICAgICAgIGdseXBoU2V0LmFkZChpbmRleCk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC02MTksMjYgKzY1MiwxMiBA
QCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkQ29kZXBvaW50UmFuZ2VzKGNvbnN0IFVu
aWNvZGVSYW5nZXMmIHVuaWNvZGVSYW5nZQogdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFk
ZENvZGVwb2ludHMoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBjb2RlcG9pbnRzLCBIYXNoU2V0PEds
eXBoPiYgZ2x5cGhTZXQpIGNvbnN0CiB7CiAgICAgZm9yIChhdXRvJiBjb2RlcG9pbnRTdHJpbmcg
OiBjb2RlcG9pbnRzKSB7Ci0gICAgICAgIGF1dG8gY29kZXBvaW50U3RyaW5nTGVuZ3RoID0gY29k
ZXBvaW50U3RyaW5nLmxlbmd0aCgpOwotICAgICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAgICAg
d2hpbGUgKGkgPCBjb2RlcG9pbnRTdHJpbmdMZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBDYW5vbmljYWxpemF0aW9uIG1pZ2h0IGJlIG5lY2Vzc2FyeQotICAgICAgICAgICAgVUNoYXIz
MiBjb2RlcG9pbnQ7Ci0gICAgICAgICAgICBpZiAoY29kZXBvaW50U3RyaW5nLmlzOEJpdCgpKQot
ICAgICAgICAgICAgICAgIGNvZGVwb2ludCA9IGNvZGVwb2ludFN0cmluZy5jaGFyYWN0ZXJzOCgp
W2krK107Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgVTE2X05FWFQoY29kZXBv
aW50U3RyaW5nLmNoYXJhY3RlcnMxNigpLCBpLCBjb2RlcG9pbnRTdHJpbmdMZW5ndGgsIGNvZGVw
b2ludCk7Ci0KLSAgICAgICAgICAgIGlmICghY29kZXBvaW50IHx8IGNvZGVwb2ludCA+PSBzdGQ6
Om51bWVyaWNfbGltaXRzPENvZGVwb2ludD46Om1heCgpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgYXV0byBpbmRleEl0ZXIgPSBtX2NvZGVwb2ludFRvSW5kZXhNYXAu
ZmluZChjb2RlcG9pbnQpOwotICAgICAgICAgICAgaWYgKGluZGV4SXRlciAhPSBtX2NvZGVwb2lu
dFRvSW5kZXhNYXAuZW5kKCkpCi0gICAgICAgICAgICAgICAgZ2x5cGhTZXQuYWRkKGluZGV4SXRl
ci0+dmFsdWUpOwotICAgICAgICB9CisgICAgICAgIGZvciAoYXV0byBpbmRleCA6IG1fY29kZXBv
aW50c1RvSW5kaWNlc01hcC5nZXQoY29kZXBvaW50U3RyaW5nKSkKKyAgICAgICAgICAgIGdseXBo
U2V0LmFkZChpbmRleCk7CiAgICAgfQogfQogCi12b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6
YWRkR2x5cGhOYW1lcyhjb25zdCBIYXNoU2V0PFN0cmluZz4mIGdseXBoTmFtZXMsIEhhc2hTZXQ8
dWludDE2X3Q+JiBnbHlwaFNldCkgY29uc3QKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjph
ZGRHbHlwaE5hbWVzKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgZ2x5cGhOYW1lcywgSGFzaFNldDxH
bHlwaD4mIGdseXBoU2V0KSBjb25zdAogewogICAgIGZvciAoYXV0byYgZ2x5cGhOYW1lIDogZ2x5
cGhOYW1lcykgewogICAgICAgICBhdXRvIGluZGV4SXRlciA9IG1fZ2x5cGhOYW1lVG9JbmRleE1h
cC5maW5kKGdseXBoTmFtZSk7CkBAIC02NzcsNyArNjk2LDcgQEAgYXV0byBTVkdUb09URkZvbnRD
b252ZXJ0ZXI6OmNvbXB1dGVLZXJuaW5nRGF0YShib29sIChUOjoqYnVpbGRLZXJuaW5nUGFpciko
U1ZHS2UKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zaXplX3QgU1ZHVG9PVEZGb250Q29u
dmVydGVyOjphcHBlbmRLRVJOU3VidGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQsIGJvb2wgKFQ6
OipidWlsZEtlcm5pbmdQYWlyKShTVkdLZXJuaW5nUGFpciYpIGNvbnN0LCB1aW50MTZfdCBjb3Zl
cmFnZSkgY29uc3QKK3NpemVfdCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEtFUk5TdWJ0
YWJsZShib29sIChUOjoqYnVpbGRLZXJuaW5nUGFpcikoU1ZHS2VybmluZ1BhaXImKSBjb25zdCwg
dWludDE2X3QgY292ZXJhZ2UpCiB7CiAgICAgVmVjdG9yPEtlcm5pbmdEYXRhPiBrZXJuaW5nRGF0
YSA9IGNvbXB1dGVLZXJuaW5nRGF0YTxUPihidWlsZEtlcm5pbmdQYWlyKTsKICAgICBzdGQ6OnNv
cnQoa2VybmluZ0RhdGEuYmVnaW4oKSwga2VybmluZ0RhdGEuZW5kKCkpOwpAQCAtNjg3LDUxICs3
MDYsNTEgQEAgc2l6ZV90IFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kS0VSTlN1YnRhYmxl
KFZlY3RvcjxjaGFyPiYgcmVzdWx0LCBib29sIChUOjoKICAgICAgICAgc2l6ZU9mS2VybmluZ0Rh
dGFUYWJsZSA9IDE0OwogICAgIH0KIAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gVmVyc2lv
biBvZiBzdWJ0YWJsZQotICAgIHdyaXRlMTYocmVzdWx0LCBzaXplT2ZLZXJuaW5nRGF0YVRhYmxl
KTsgLy8gTGVuZ3RoIG9mIHRoaXMgc3VidGFibGUKLSAgICB3cml0ZTE2KHJlc3VsdCwgY292ZXJh
Z2UpOyAvLyBUYWJsZSBjb3ZlcmFnZSBiaXRmaWVsZAorICAgIGFwcGVuZDE2KDApOyAvLyBWZXJz
aW9uIG9mIHN1YnRhYmxlCisgICAgYXBwZW5kMTYoc2l6ZU9mS2VybmluZ0RhdGFUYWJsZSk7IC8v
IExlbmd0aCBvZiB0aGlzIHN1YnRhYmxlCisgICAgYXBwZW5kMTYoY292ZXJhZ2UpOyAvLyBUYWJs
ZSBjb3ZlcmFnZSBiaXRmaWVsZAogCiAgICAgdWludDE2X3Qgcm91bmRlZE51bUtlcm5pbmdQYWly
cyA9IHJvdW5kRG93blRvUG93ZXJPZlR3byhrZXJuaW5nRGF0YS5zaXplKCkpOwogCi0gICAgd3Jp
dGUxNihyZXN1bHQsIGtlcm5pbmdEYXRhLnNpemUoKSk7Ci0gICAgd3JpdGUxNihyZXN1bHQsIHJv
dW5kZWROdW1LZXJuaW5nUGFpcnMgKiA2KTsgLy8gc2VhcmNoUmFuZ2U6ICJUaGUgbGFyZ2VzdCBw
b3dlciBvZiB0d28gbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBuUGFpcnMsIG11
bHRpcGxpZWQgYnkgdGhlIHNpemUgaW4gYnl0ZXMgb2YgYW4gZW50cnkgaW4gdGhlIHRhYmxlLiIK
LSAgICB3cml0ZTE2KHJlc3VsdCwgaW50ZWdyYWxMb2cyKHJvdW5kZWROdW1LZXJuaW5nUGFpcnMp
KTsgLy8gZW50cnlTZWxlY3RvcjogImxvZzIgb2YgdGhlIGxhcmdlc3QgcG93ZXIgb2YgdHdvIGxl
c3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2YgblBhaXJzLiIKLSAgICB3cml0ZTE2KHJl
c3VsdCwgKGtlcm5pbmdEYXRhLnNpemUoKSAtIHJvdW5kZWROdW1LZXJuaW5nUGFpcnMpICogNik7
IC8vIHJhbmdlU2hpZnQ6ICJUaGUgdmFsdWUgb2YgblBhaXJzIG1pbnVzIHRoZSBsYXJnZXN0IHBv
d2VyIG9mIHR3byBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gblBhaXJzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYW5kIHRoZW4gbXVsdGlwbGllZCBieSB0aGUgc2l6ZSBpbiBieXRlcyBvZiBhbiBlbnRyeSBp
biB0aGUgdGFibGUuIgorICAgIGFwcGVuZDE2KGtlcm5pbmdEYXRhLnNpemUoKSk7CisgICAgYXBw
ZW5kMTYocm91bmRlZE51bUtlcm5pbmdQYWlycyAqIDYpOyAvLyBzZWFyY2hSYW5nZTogIlRoZSBs
YXJnZXN0IHBvd2VyIG9mIHR3byBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIG5Q
YWlycywgbXVsdGlwbGllZCBieSB0aGUgc2l6ZSBpbiBieXRlcyBvZiBhbiBlbnRyeSBpbiB0aGUg
dGFibGUuIgorICAgIGFwcGVuZDE2KGludGVncmFsTG9nMihyb3VuZGVkTnVtS2VybmluZ1BhaXJz
KSk7IC8vIGVudHJ5U2VsZWN0b3I6ICJsb2cyIG9mIHRoZSBsYXJnZXN0IHBvd2VyIG9mIHR3byBs
ZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIG5QYWlycy4iCisgICAgYXBwZW5kMTYo
KGtlcm5pbmdEYXRhLnNpemUoKSAtIHJvdW5kZWROdW1LZXJuaW5nUGFpcnMpICogNik7IC8vIHJh
bmdlU2hpZnQ6ICJUaGUgdmFsdWUgb2YgblBhaXJzIG1pbnVzIHRoZSBsYXJnZXN0IHBvd2VyIG9m
IHR3byBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gblBhaXJzLAorICAgICAgICAvLyBhbmQgdGhlbiBt
dWx0aXBsaWVkIGJ5IHRoZSBzaXplIGluIGJ5dGVzIG9mIGFuIGVudHJ5IGluIHRoZSB0YWJsZS4i
CiAKICAgICBmb3IgKGF1dG8mIGtlcm5pbmdEYXRhIDoga2VybmluZ0RhdGEpIHsKLSAgICAgICAg
d3JpdGUxNihyZXN1bHQsIGtlcm5pbmdEYXRhLmdseXBoMSk7Ci0gICAgICAgIHdyaXRlMTYocmVz
dWx0LCBrZXJuaW5nRGF0YS5nbHlwaDIpOwotICAgICAgICB3cml0ZTE2KHJlc3VsdCwga2Vybmlu
Z0RhdGEuYWRqdXN0bWVudCk7CisgICAgICAgIGFwcGVuZDE2KGtlcm5pbmdEYXRhLmdseXBoMSk7
CisgICAgICAgIGFwcGVuZDE2KGtlcm5pbmdEYXRhLmdseXBoMik7CisgICAgICAgIGFwcGVuZDE2
KGtlcm5pbmdEYXRhLmFkanVzdG1lbnQpOwogICAgIH0KIAogICAgIHJldHVybiBzaXplT2ZLZXJu
aW5nRGF0YVRhYmxlOwogfQogCi12b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kS0VS
TlRhYmxlKFZlY3RvcjxjaGFyPiYgcmVzdWx0KSBjb25zdAordm9pZCBTVkdUb09URkZvbnRDb252
ZXJ0ZXI6OmFwcGVuZEtFUk5UYWJsZSgpCiB7Ci0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBW
ZXJzaW9uCi0gICAgd3JpdGUxNihyZXN1bHQsIDIpOyAvLyBOdW1iZXIgb2Ygc3VidGFibGVzCisg
ICAgYXBwZW5kMTYoMCk7IC8vIFZlcnNpb24KKyAgICBhcHBlbmQxNigyKTsgLy8gTnVtYmVyIG9m
IHN1YnRhYmxlcwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIGF1dG8gc3VidGFibGVzT2Zm
c2V0ID0gcmVzdWx0LnNpemUoKTsKKyAgICBhdXRvIHN1YnRhYmxlc09mZnNldCA9IG1fcmVzdWx0
LnNpemUoKTsKICNlbmRpZgogCi0gICAgc2l6ZV90IHNpemVPZkhvcml6b250YWxTdWJ0YWJsZSA9
IGFwcGVuZEtFUk5TdWJ0YWJsZTxTVkdIS2VybkVsZW1lbnQ+KHJlc3VsdCwgJlNWR0hLZXJuRWxl
bWVudDo6YnVpbGRIb3Jpem9udGFsS2VybmluZ1BhaXIsIDEpOwotICAgIEFTU0VSVF9VTlVTRUQo
c2l6ZU9mSG9yaXpvbnRhbFN1YnRhYmxlLCBzdWJ0YWJsZXNPZmZzZXQgKyBzaXplT2ZIb3Jpem9u
dGFsU3VidGFibGUgPT0gcmVzdWx0LnNpemUoKSk7Ci0gICAgc2l6ZV90IHNpemVPZlZlcnRpY2Fs
U3VidGFibGUgPSBhcHBlbmRLRVJOU3VidGFibGU8U1ZHVktlcm5FbGVtZW50PihyZXN1bHQsICZT
VkdWS2VybkVsZW1lbnQ6OmJ1aWxkVmVydGljYWxLZXJuaW5nUGFpciwgMCk7Ci0gICAgQVNTRVJU
X1VOVVNFRChzaXplT2ZWZXJ0aWNhbFN1YnRhYmxlLCBzdWJ0YWJsZXNPZmZzZXQgKyBzaXplT2ZI
b3Jpem9udGFsU3VidGFibGUgKyBzaXplT2ZWZXJ0aWNhbFN1YnRhYmxlID09IHJlc3VsdC5zaXpl
KCkpOworICAgIHNpemVfdCBzaXplT2ZIb3Jpem9udGFsU3VidGFibGUgPSBhcHBlbmRLRVJOU3Vi
dGFibGU8U1ZHSEtlcm5FbGVtZW50PigmU1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxL
ZXJuaW5nUGFpciwgMSk7CisgICAgQVNTRVJUX1VOVVNFRChzaXplT2ZIb3Jpem9udGFsU3VidGFi
bGUsIHN1YnRhYmxlc09mZnNldCArIHNpemVPZkhvcml6b250YWxTdWJ0YWJsZSA9PSBtX3Jlc3Vs
dC5zaXplKCkpOworICAgIHNpemVfdCBzaXplT2ZWZXJ0aWNhbFN1YnRhYmxlID0gYXBwZW5kS0VS
TlN1YnRhYmxlPFNWR1ZLZXJuRWxlbWVudD4oJlNWR1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNh
bEtlcm5pbmdQYWlyLCAwKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNpemVPZlZlcnRpY2FsU3VidGFi
bGUsIHN1YnRhYmxlc09mZnNldCArIHNpemVPZkhvcml6b250YWxTdWJ0YWJsZSArIHNpemVPZlZl
cnRpY2FsU3VidGFibGUgPT0gbV9yZXN1bHQuc2l6ZSgpKTsKIAogICAgIC8vIFdvcmsgYXJvdW5k
IGEgYnVnIGluIEFwcGxlJ3MgZm9udCBwYXJzZXIgYnkgYWRkaW5nIHNvbWUgcGFkZGluZyBieXRl
cy4gPHJkYXI6Ly9wcm9ibGVtLzE4NDAxOTAxPgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsg
KytpKQotICAgICAgICByZXN1bHQuYXBwZW5kKDApOworICAgICAgICBtX3Jlc3VsdC5hcHBlbmQo
MCk7CiB9CiAKIHN0YXRpYyB2b2lkIHdyaXRlQ0ZGRW5jb2RlZE51bWJlcihWZWN0b3I8Y2hhcj4m
IHZlY3RvciwgZmxvYXQgbnVtYmVyKQogewogICAgIGludCByYXcgPSBudW1iZXIgKiBwb3dmKDIs
IDE2KTsKICAgICB2ZWN0b3IuYXBwZW5kKC0xKTsgLy8gMHhGRgotICAgIHdyaXRlMzIodmVjdG9y
LCByYXcpOworICAgIGFwcGVuZDMyKHZlY3RvciwgcmF3KTsKIH0KIAogc3RhdGljIGNvbnN0IGNo
YXIgckxpbmVUbyA9IDB4MDU7CkBAIC04NzksMTkgKzg5OCwxOSBAQCBWZWN0b3I8Y2hhcj4gU1ZH
VG9PVEZGb250Q29udmVydGVyOjp0cmFuc2NvZGVHbHlwaFBhdGhzKGZsb2F0IHdpZHRoLCBjb25z
dCBUJiBnbAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXZvaWQgU1ZHVG9PVEZGb250Q29u
dmVydGVyOjphcHBlbmRHbHlwaERhdGEoY29uc3QgVmVjdG9yPGNoYXI+JiBwYXRoLCBjb25zdCBU
KiwgZmxvYXQgaG9yaXpvbnRhbEFkdmFuY2UsIGZsb2F0IHZlcnRpY2FsQWR2YW5jZSwgY29uc3Qg
RmxvYXRSZWN0JiBib3VuZGluZ0JveCwgQ29kZXBvaW50IGNvZGVwb2ludCkKK3ZvaWQgU1ZHVG9P
VEZGb250Q29udmVydGVyOjphcHBlbmRHbHlwaERhdGEoY29uc3QgVmVjdG9yPGNoYXI+JiBwYXRo
LCBjb25zdCBUKiwgZmxvYXQgaG9yaXpvbnRhbEFkdmFuY2UsIGZsb2F0IHZlcnRpY2FsQWR2YW5j
ZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCwgY29uc3QgQ29kZXBvaW50cyYgY29kZXBv
aW50cykKIHsKLSAgICBtX2dseXBocy5hcHBlbmQoR2x5cGhEYXRhKHBhdGgsIG51bGxwdHIsIGhv
cml6b250YWxBZHZhbmNlLCB2ZXJ0aWNhbEFkdmFuY2UsIGJvdW5kaW5nQm94LCBjb2RlcG9pbnQp
KTsKKyAgICBtX2dseXBocy5hcHBlbmQoR2x5cGhEYXRhKHBhdGgsIG51bGxwdHIsIGhvcml6b250
YWxBZHZhbmNlLCB2ZXJ0aWNhbEFkdmFuY2UsIGJvdW5kaW5nQm94LCBjb2RlcG9pbnRzKSk7CiB9
CiAKIHRlbXBsYXRlIDw+Ci12b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kR2x5cGhE
YXRhKGNvbnN0IFZlY3RvcjxjaGFyPiYgcGF0aCwgY29uc3QgU1ZHR2x5cGhFbGVtZW50KiBlbGVt
ZW50LCBmbG9hdCBob3Jpem9udGFsQWR2YW5jZSwgZmxvYXQgdmVydGljYWxBZHZhbmNlLCBjb25z
dCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBDb2RlcG9pbnQgY29kZXBvaW50KQordm9pZCBTVkdU
b09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEdseXBoRGF0YShjb25zdCBWZWN0b3I8Y2hhcj4mIHBh
dGgsIGNvbnN0IFNWR0dseXBoRWxlbWVudCogZWxlbWVudCwgZmxvYXQgaG9yaXpvbnRhbEFkdmFu
Y2UsIGZsb2F0IHZlcnRpY2FsQWR2YW5jZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCwg
Y29uc3QgQ29kZXBvaW50cyYgY29kZXBvaW50cykKIHsKLSAgICBtX2dseXBocy5hcHBlbmQoR2x5
cGhEYXRhKHBhdGgsIGVsZW1lbnQsIGhvcml6b250YWxBZHZhbmNlLCB2ZXJ0aWNhbEFkdmFuY2Us
IGJvdW5kaW5nQm94LCBjb2RlcG9pbnQpKTsKKyAgICBtX2dseXBocy5hcHBlbmQoR2x5cGhEYXRh
KHBhdGgsIGVsZW1lbnQsIGhvcml6b250YWxBZHZhbmNlLCB2ZXJ0aWNhbEFkdmFuY2UsIGJvdW5k
aW5nQm94LCBjb2RlcG9pbnRzKSk7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotdm9pZCBT
VkdUb09URkZvbnRDb252ZXJ0ZXI6OnByb2Nlc3NHbHlwaEVsZW1lbnQoY29uc3QgVCYgZWxlbWVu
dCwgZmxvYXQgZGVmYXVsdEhvcml6b250YWxBZHZhbmNlLCBmbG9hdCBkZWZhdWx0VmVydGljYWxB
ZHZhbmNlLCBDb2RlcG9pbnQgY29kZXBvaW50LCBib29sJiBpbml0aWFsR2x5cGgpCit2b2lkIFNW
R1RvT1RGRm9udENvbnZlcnRlcjo6cHJvY2Vzc0dseXBoRWxlbWVudChjb25zdCBUJiBlbGVtZW50
LCBmbG9hdCBkZWZhdWx0SG9yaXpvbnRhbEFkdmFuY2UsIGZsb2F0IGRlZmF1bHRWZXJ0aWNhbEFk
dmFuY2UsIGNvbnN0IENvZGVwb2ludHMmIGNvZGVwb2ludHMsIGJvb2wmIGluaXRpYWxHbHlwaCkK
IHsKICAgICBib29sIG9rOwogICAgIGZsb2F0IGhvcml6b250YWxBZHZhbmNlID0gZWxlbWVudC5m
YXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpob3Jpel9hZHZfeEF0dHIpLnRvRmxvYXQoJm9rKTsK
QEAgLTkxMiw3ICs5MzEsMzEgQEAgdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OnByb2Nlc3NH
bHlwaEVsZW1lbnQoY29uc3QgVCYgZWxlbWVudCwgZmxvYXQgZGVmYXVsdEgKICAgICBtX21pblJp
Z2h0U2lkZUJlYXJpbmcgPSBzdGQ6Om1pbihtX21pblJpZ2h0U2lkZUJlYXJpbmcsIGhvcml6b250
YWxBZHZhbmNlIC0gZ2x5cGhCb3VuZGluZ0JveC5tYXhYKCkpOwogICAgIGluaXRpYWxHbHlwaCA9
IGZhbHNlOwogCi0gICAgYXBwZW5kR2x5cGhEYXRhKHBhdGgsICZlbGVtZW50LCBob3Jpem9udGFs
QWR2YW5jZSwgdmVydGljYWxBZHZhbmNlLCBnbHlwaEJvdW5kaW5nQm94LCBjb2RlcG9pbnQpOwor
ICAgIGFwcGVuZEdseXBoRGF0YShwYXRoLCAmZWxlbWVudCwgaG9yaXpvbnRhbEFkdmFuY2UsIHZl
cnRpY2FsQWR2YW5jZSwgZ2x5cGhCb3VuZGluZ0JveCwgY29kZXBvaW50cyk7Cit9CisKK2Jvb2wg
U1ZHVG9PVEZGb250Q29udmVydGVyOjpjb21wYXJlQ29kZXBvaW50c0xleGljb2dyYXBoaWNhbGx5
KGNvbnN0IEdseXBoRGF0YSYgZGF0YTEsIGNvbnN0IEdseXBoRGF0YSYgZGF0YTIpCit7CisgICAg
dW5zaWduZWQgaTEgPSAwLCBpMiA9IDA7CisgICAgVUNoYXIzMiBjb2RlcG9pbnQxLCBjb2RlcG9p
bnQyOworICAgIHVuc2lnbmVkIGxlbmd0aDEgPSBkYXRhMS5jb2RlcG9pbnRzLmxlbmd0aCgpLCBs
ZW5ndGgyID0gZGF0YTIuY29kZXBvaW50cy5sZW5ndGgoKTsKKyAgICBmb3IgKCA7IGkxIDwgbGVu
Z3RoMSAmJiBpMiA8IGxlbmd0aDI7ICkgeworICAgICAgICBpZiAoZGF0YTEuY29kZXBvaW50cy5p
czhCaXQoKSkKKyAgICAgICAgICAgIGNvZGVwb2ludDEgPSBkYXRhMS5jb2RlcG9pbnRzW2kxKytd
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBVMTZfTkVYVChkYXRhMS5jb2RlcG9pbnRzLmNo
YXJhY3RlcnMxNigpLCBpMSwgbGVuZ3RoMSwgY29kZXBvaW50MSk7CisKKyAgICAgICAgaWYgKGRh
dGEyLmNvZGVwb2ludHMuaXM4Qml0KCkpCisgICAgICAgICAgICBjb2RlcG9pbnQyID0gZGF0YTEu
Y29kZXBvaW50c1tpMisrXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgVTE2X05FWFQoZGF0
YTIuY29kZXBvaW50cy5jaGFyYWN0ZXJzMTYoKSwgaTIsIGxlbmd0aDIsIGNvZGVwb2ludDIpOwor
CisgICAgICAgIGlmIChjb2RlcG9pbnQxIDwgY29kZXBvaW50MikKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBpZiAoY29kZXBvaW50MSA+IGNvZGVwb2ludDIpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBsZW5ndGgxIDwgbGVuZ3RoMjsKIH0K
IAogU1ZHVG9PVEZGb250Q29udmVydGVyOjpTVkdUb09URkZvbnRDb252ZXJ0ZXIoY29uc3QgU1ZH
Rm9udEVsZW1lbnQmIGZvbnRFbGVtZW50KQpAQCAtOTM1LDcgKzk3OCw3IEBAIFNWR1RvT1RGRm9u
dENvbnZlcnRlcjo6U1ZHVG9PVEZGb250Q29udmVydGVyKGNvbnN0IFNWR0ZvbnRFbGVtZW50JiBm
b250RWxlbWVudCkKICAgICAgICAgbV91bml0c1BlckVtID0gbV9mb250RmFjZUVsZW1lbnQtPnVu
aXRzUGVyRW0oKTsKIAogICAgIGlmIChtX21pc3NpbmdHbHlwaEVsZW1lbnQpCi0gICAgICAgIHBy
b2Nlc3NHbHlwaEVsZW1lbnQoKm1fbWlzc2luZ0dseXBoRWxlbWVudCwgZGVmYXVsdEhvcml6b250
YWxBZHZhbmNlLCBkZWZhdWx0VmVydGljYWxBZHZhbmNlLCAwLCBpbml0aWFsR2x5cGgpOworICAg
ICAgICBwcm9jZXNzR2x5cGhFbGVtZW50KCptX21pc3NpbmdHbHlwaEVsZW1lbnQsIGRlZmF1bHRI
b3Jpem9udGFsQWR2YW5jZSwgZGVmYXVsdFZlcnRpY2FsQWR2YW5jZSwgQ29kZXBvaW50cygpLCBp
bml0aWFsR2x5cGgpOwogICAgIGVsc2UgewogICAgICAgICBWZWN0b3I8Y2hhcj4gbm90ZGVmQ2hh
clN0cmluZzsKICAgICAgICAgd3JpdGVDRkZFbmNvZGVkTnVtYmVyKG5vdGRlZkNoYXJTdHJpbmcs
IG1fdW5pdHNQZXJFbSk7CkBAIC05NDMsMTQgKzk4NiwxNCBAQCBTVkdUb09URkZvbnRDb252ZXJ0
ZXI6OlNWR1RvT1RGRm9udENvbnZlcnRlcihjb25zdCBTVkdGb250RWxlbWVudCYgZm9udEVsZW1l
bnQpCiAgICAgICAgIHdyaXRlQ0ZGRW5jb2RlZE51bWJlcihub3RkZWZDaGFyU3RyaW5nLCAwKTsK
ICAgICAgICAgbm90ZGVmQ2hhclN0cmluZy5hcHBlbmQock1vdmVUbyk7CiAgICAgICAgIG5vdGRl
ZkNoYXJTdHJpbmcuYXBwZW5kKGVuZENoYXIpOwotICAgICAgICBtX2dseXBocy5hcHBlbmQoR2x5
cGhEYXRhKG5vdGRlZkNoYXJTdHJpbmcsIG51bGxwdHIsIG1fdW5pdHNQZXJFbSwgbV91bml0c1Bl
ckVtLCBGbG9hdFJlY3QoKSwgMCkpOworICAgICAgICBtX2dseXBocy5hcHBlbmQoR2x5cGhEYXRh
KG5vdGRlZkNoYXJTdHJpbmcsIG51bGxwdHIsIG1fdW5pdHNQZXJFbSwgbV91bml0c1BlckVtLCBG
bG9hdFJlY3QoKSwgQ29kZXBvaW50cygpKSk7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBnbHlw
aEVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxTVkdHbHlwaEVsZW1lbnQ+KG1fZm9udEVsZW1lbnQp
KSB7CiAgICAgICAgIGF1dG8mIHVuaWNvZGVBdHRyaWJ1dGUgPSBnbHlwaEVsZW1lbnQuZmFzdEdl
dEF0dHJpYnV0ZShTVkdOYW1lczo6dW5pY29kZUF0dHIpOwogICAgICAgICAvLyBPbmx5IHN1cHBv
cnQgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIHcvbyBsaWdhdHVyZXMgZm9yIG5vdwotICAgICAg
ICBpZiAodW5pY29kZUF0dHJpYnV0ZS5sZW5ndGgoKSA9PSAxKQotICAgICAgICAgICAgcHJvY2Vz
c0dseXBoRWxlbWVudChnbHlwaEVsZW1lbnQsIGRlZmF1bHRIb3Jpem9udGFsQWR2YW5jZSwgZGVm
YXVsdFZlcnRpY2FsQWR2YW5jZSwgdW5pY29kZUF0dHJpYnV0ZVswXSwgaW5pdGlhbEdseXBoKTsK
KyAgICAgICAgaWYgKCF1bmljb2RlQXR0cmlidXRlLmlzRW1wdHkoKSkgLy8gSWYgd2UgY2FuIG5l
dmVyIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBnbHlwaCwgaWdub3JlIGl0IGNvbXBsZXRlbHkKKyAg
ICAgICAgICAgIHByb2Nlc3NHbHlwaEVsZW1lbnQoZ2x5cGhFbGVtZW50LCBkZWZhdWx0SG9yaXpv
bnRhbEFkdmFuY2UsIGRlZmF1bHRWZXJ0aWNhbEFkdmFuY2UsIHVuaWNvZGVBdHRyaWJ1dGUsIGlu
aXRpYWxHbHlwaCk7CiAgICAgfQogCiAgICAgaWYgKG1fZ2x5cGhzLnNpemUoKSA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8R2x5cGg+OjptYXgoKSkgewpAQCAtOTU5LDE5ICsxMDAyLDE3IEBAIFNWR1Rv
T1RGRm9udENvbnZlcnRlcjo6U1ZHVG9PVEZGb250Q29udmVydGVyKGNvbnN0IFNWR0ZvbnRFbGVt
ZW50JiBmb250RWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0ZDo6c29y
dChtX2dseXBocy5iZWdpbigpLCBtX2dseXBocy5lbmQoKSwgW10oY29uc3QgR2x5cGhEYXRhJiBk
YXRhMSwgY29uc3QgR2x5cGhEYXRhJiBkYXRhMikgewotICAgICAgICByZXR1cm4gZGF0YTEuY29k
ZXBvaW50IDwgZGF0YTIuY29kZXBvaW50OwotICAgIH0pOworICAgIHN0ZDo6c29ydChtX2dseXBo
cy5iZWdpbigpLCBtX2dseXBocy5lbmQoKSwgJmNvbXBhcmVDb2RlcG9pbnRzTGV4aWNvZ3JhcGhp
Y2FsbHkpOwogCiAgICAgZm9yIChHbHlwaCBpID0gMDsgaSA8IG1fZ2x5cGhzLnNpemUoKTsgKytp
KSB7CiAgICAgICAgIEdseXBoRGF0YSYgZ2x5cGggPSBtX2dseXBoc1tpXTsKICAgICAgICAgaWYg
KGdseXBoLmdseXBoRWxlbWVudCkgewogICAgICAgICAgICAgYXV0byYgZ2x5cGhOYW1lID0gZ2x5
cGguZ2x5cGhFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpnbHlwaF9uYW1lQXR0
cik7Ci0gICAgICAgICAgICBpZiAoIWdseXBoTmFtZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBp
ZiAoIWdseXBoTmFtZS5pc051bGwoKSkKICAgICAgICAgICAgICAgICBtX2dseXBoTmFtZVRvSW5k
ZXhNYXAuYWRkKGdseXBoTmFtZSwgaSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGdseXBoLmNv
ZGVwb2ludCkKLSAgICAgICAgICAgIG1fY29kZXBvaW50VG9JbmRleE1hcC5hZGQoZ2x5cGguY29k
ZXBvaW50LCBpKTsKKyAgICAgICAgaWYgKCFnbHlwaC5jb2RlcG9pbnRzLmlzTnVsbCgpKQorICAg
ICAgICAgICAgbV9jb2RlcG9pbnRzVG9JbmRpY2VzTWFwLmFkZChnbHlwaC5jb2RlcG9pbnRzLCBW
ZWN0b3I8R2x5cGg+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoaSk7CiAgICAgfQogCiAgICAg
Ly8gRklYTUU6IEhhbmRsZSBjb21tYXMKQEAgLTEwMDYsOTMgKzEwNDcsOTIgQEAgc3RhdGljIGlu
bGluZSBib29sIGlzRm91ckJ5dGVBbGlnbmVkKHNpemVfdCB4KQogICAgIHJldHVybiAhKHggJiBz
aXplb2YodWludDMyX3QpLTEpOwogfQogCi1zdGF0aWMgdWludDMyX3QgY2FsY3VsYXRlQ2hlY2tz
dW0oY29uc3QgVmVjdG9yPGNoYXI+JiB0YWJsZSwgc2l6ZV90IHN0YXJ0aW5nT2Zmc2V0LCBzaXpl
X3QgZW5kaW5nT2Zmc2V0KQordWludDMyX3QgU1ZHVG9PVEZGb250Q29udmVydGVyOjpjYWxjdWxh
dGVDaGVja3N1bShzaXplX3Qgc3RhcnRpbmdPZmZzZXQsIHNpemVfdCBlbmRpbmdPZmZzZXQpIGNv
bnN0CiB7CiAgICAgQVNTRVJUKGlzRm91ckJ5dGVBbGlnbmVkKGVuZGluZ09mZnNldCAtIHN0YXJ0
aW5nT2Zmc2V0KSk7CiAgICAgdWludDMyX3Qgc3VtID0gMDsKICAgICBmb3IgKDsgc3RhcnRpbmdP
ZmZzZXQgPCBlbmRpbmdPZmZzZXQ7IHN0YXJ0aW5nT2Zmc2V0ICs9IDQpIHsKICAgICAgICAgLy8g
VGhlIHNwZWMgaXMgdW5jbGVhciB3aGV0aGVyIHRoaXMgaXMgYSBsaXR0bGUtZW5kaWFuIHN1bSBv
ciBhIGJpZy1lbmRpYW4gc3VtLiBDaG9vc2UgbGl0dGxlIGVuZGlhbi4KLSAgICAgICAgc3VtICs9
IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih0YWJsZVtzdGFydGluZ09mZnNldCArIDNdKSA8
PCAyNCkKLSAgICAgICAgICAgIHwgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHRhYmxlW3N0
YXJ0aW5nT2Zmc2V0ICsgMl0pIDw8IDE2KQotICAgICAgICAgICAgfCAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4odGFibGVbc3RhcnRpbmdPZmZzZXQgKyAxXSkgPDwgOCkKLSAgICAgICAgICAg
IHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odGFibGVbc3RhcnRpbmdPZmZzZXRdKTsKKyAg
ICAgICAgc3VtICs9IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihtX3Jlc3VsdFtzdGFydGlu
Z09mZnNldCArIDNdKSA8PCAyNCkKKyAgICAgICAgICAgIHwgKHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KG1fcmVzdWx0W3N0YXJ0aW5nT2Zmc2V0ICsgMl0pIDw8IDE2KQorICAgICAgICAgICAg
fCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obV9yZXN1bHRbc3RhcnRpbmdPZmZzZXQgKyAx
XSkgPDwgOCkKKyAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obV9yZXN1
bHRbc3RhcnRpbmdPZmZzZXRdKTsKICAgICB9CiAgICAgcmV0dXJuIHN1bTsKIH0KIAotdm9pZCBT
VkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFRhYmxlKGNvbnN0IGNoYXIgaWRlbnRpZmllcls0
XSwgVmVjdG9yPGNoYXI+JiBvdXRwdXQsIEZvbnRBcHBlbmRpbmdGdW5jdGlvbiBhcHBlbmRpbmdG
dW5jdGlvbikKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRUYWJsZShjb25zdCBj
aGFyIGlkZW50aWZpZXJbNF0sIEZvbnRBcHBlbmRpbmdGdW5jdGlvbiBhcHBlbmRpbmdGdW5jdGlv
bikKIHsKLSAgICBzaXplX3Qgb2Zmc2V0ID0gb3V0cHV0LnNpemUoKTsKKyAgICBzaXplX3Qgb2Zm
c2V0ID0gbV9yZXN1bHQuc2l6ZSgpOwogICAgIEFTU0VSVChpc0ZvdXJCeXRlQWxpZ25lZChvZmZz
ZXQpKTsKLSAgICAodGhpcy0+KmFwcGVuZGluZ0Z1bmN0aW9uKShvdXRwdXQpOwotICAgIHNpemVf
dCB1bnBhZGRlZFNpemUgPSBvdXRwdXQuc2l6ZSgpIC0gb2Zmc2V0OwotICAgIHdoaWxlICghaXNG
b3VyQnl0ZUFsaWduZWQob3V0cHV0LnNpemUoKSkpCi0gICAgICAgIG91dHB1dC5hcHBlbmQoMCk7
Ci0gICAgQVNTRVJUKGlzRm91ckJ5dGVBbGlnbmVkKG91dHB1dC5zaXplKCkpKTsKKyAgICAodGhp
cy0+KmFwcGVuZGluZ0Z1bmN0aW9uKSgpOworICAgIHNpemVfdCB1bnBhZGRlZFNpemUgPSBtX3Jl
c3VsdC5zaXplKCkgLSBvZmZzZXQ7CisgICAgd2hpbGUgKCFpc0ZvdXJCeXRlQWxpZ25lZChtX3Jl
c3VsdC5zaXplKCkpKQorICAgICAgICBtX3Jlc3VsdC5hcHBlbmQoMCk7CisgICAgQVNTRVJUKGlz
Rm91ckJ5dGVBbGlnbmVkKG1fcmVzdWx0LnNpemUoKSkpOwogICAgIHNpemVfdCBkaXJlY3RvcnlF
bnRyeU9mZnNldCA9IGtTTkZUSGVhZGVyU2l6ZSArIG1fdGFibGVzQXBwZW5kZWRDb3VudCAqIGtE
aXJlY3RvcnlFbnRyeVNpemU7Ci0gICAgb3V0cHV0W2RpcmVjdG9yeUVudHJ5T2Zmc2V0XSA9IGlk
ZW50aWZpZXJbMF07Ci0gICAgb3V0cHV0W2RpcmVjdG9yeUVudHJ5T2Zmc2V0ICsgMV0gPSBpZGVu
dGlmaWVyWzFdOwotICAgIG91dHB1dFtkaXJlY3RvcnlFbnRyeU9mZnNldCArIDJdID0gaWRlbnRp
ZmllclsyXTsKLSAgICBvdXRwdXRbZGlyZWN0b3J5RW50cnlPZmZzZXQgKyAzXSA9IGlkZW50aWZp
ZXJbM107Ci0gICAgb3ZlcndyaXRlMzIob3V0cHV0LCBkaXJlY3RvcnlFbnRyeU9mZnNldCArIDQs
IGNhbGN1bGF0ZUNoZWNrc3VtKG91dHB1dCwgb2Zmc2V0LCBvdXRwdXQuc2l6ZSgpKSk7Ci0gICAg
b3ZlcndyaXRlMzIob3V0cHV0LCBkaXJlY3RvcnlFbnRyeU9mZnNldCArIDgsIG9mZnNldCk7Ci0g
ICAgb3ZlcndyaXRlMzIob3V0cHV0LCBkaXJlY3RvcnlFbnRyeU9mZnNldCArIDEyLCB1bnBhZGRl
ZFNpemUpOworICAgIG1fcmVzdWx0W2RpcmVjdG9yeUVudHJ5T2Zmc2V0XSA9IGlkZW50aWZpZXJb
MF07CisgICAgbV9yZXN1bHRbZGlyZWN0b3J5RW50cnlPZmZzZXQgKyAxXSA9IGlkZW50aWZpZXJb
MV07CisgICAgbV9yZXN1bHRbZGlyZWN0b3J5RW50cnlPZmZzZXQgKyAyXSA9IGlkZW50aWZpZXJb
Ml07CisgICAgbV9yZXN1bHRbZGlyZWN0b3J5RW50cnlPZmZzZXQgKyAzXSA9IGlkZW50aWZpZXJb
M107CisgICAgb3ZlcndyaXRlMzIoZGlyZWN0b3J5RW50cnlPZmZzZXQgKyA0LCBjYWxjdWxhdGVD
aGVja3N1bShvZmZzZXQsIG1fcmVzdWx0LnNpemUoKSkpOworICAgIG92ZXJ3cml0ZTMyKGRpcmVj
dG9yeUVudHJ5T2Zmc2V0ICsgOCwgb2Zmc2V0KTsKKyAgICBvdmVyd3JpdGUzMihkaXJlY3RvcnlF
bnRyeU9mZnNldCArIDEyLCB1bnBhZGRlZFNpemUpOwogICAgICsrbV90YWJsZXNBcHBlbmRlZENv
dW50OwogfQogCi1WZWN0b3I8Y2hhcj4gU1ZHVG9PVEZGb250Q29udmVydGVyOjpjb252ZXJ0U1ZH
VG9PVEZGb250KCkKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjpjb252ZXJ0U1ZHVG9PVEZG
b250KCkKIHsKLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwogICAgIGlmICghbV9nbHlwaHMuc2l6
ZSgpKQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm47CiAKICAgICB1aW50
MTZfdCBudW1UYWJsZXMgPSAxMzsKICAgICB1aW50MTZfdCByb3VuZGVkTnVtVGFibGVzID0gcm91
bmREb3duVG9Qb3dlck9mVHdvKG51bVRhYmxlcyk7CiAgICAgdWludDE2X3Qgc2VhcmNoUmFuZ2Ug
PSByb3VuZGVkTnVtVGFibGVzICogMTY7IC8vIHNlYXJjaFJhbmdlOiAiKE1heGltdW0gcG93ZXIg
b2YgMiA8PSBudW1UYWJsZXMpIHggMTYuIgogCi0gICAgcmVzdWx0LmFwcGVuZCgnTycpOwotICAg
IHJlc3VsdC5hcHBlbmQoJ1QnKTsKLSAgICByZXN1bHQuYXBwZW5kKCdUJyk7Ci0gICAgcmVzdWx0
LmFwcGVuZCgnTycpOwotICAgIHdyaXRlMTYocmVzdWx0LCBudW1UYWJsZXMpOwotICAgIHdyaXRl
MTYocmVzdWx0LCBzZWFyY2hSYW5nZSk7Ci0gICAgd3JpdGUxNihyZXN1bHQsIGludGVncmFsTG9n
Mihyb3VuZGVkTnVtVGFibGVzKSk7IC8vIGVudHJ5U2VsZWN0b3I6ICJMb2cyKG1heGltdW0gcG93
ZXIgb2YgMiA8PSBudW1UYWJsZXMpLiIKLSAgICB3cml0ZTE2KHJlc3VsdCwgbnVtVGFibGVzICog
MTYgLSBzZWFyY2hSYW5nZSk7IC8vIHJhbmdlU2hpZnQ6ICJOdW1UYWJsZXMgeCAxNi1zZWFyY2hS
YW5nZS4iCisgICAgbV9yZXN1bHQuYXBwZW5kKCdPJyk7CisgICAgbV9yZXN1bHQuYXBwZW5kKCdU
Jyk7CisgICAgbV9yZXN1bHQuYXBwZW5kKCdUJyk7CisgICAgbV9yZXN1bHQuYXBwZW5kKCdPJyk7
CisgICAgYXBwZW5kMTYobnVtVGFibGVzKTsKKyAgICBhcHBlbmQxNihzZWFyY2hSYW5nZSk7Cisg
ICAgYXBwZW5kMTYoaW50ZWdyYWxMb2cyKHJvdW5kZWROdW1UYWJsZXMpKTsgLy8gZW50cnlTZWxl
Y3RvcjogIkxvZzIobWF4aW11bSBwb3dlciBvZiAyIDw9IG51bVRhYmxlcykuIgorICAgIGFwcGVu
ZDE2KG51bVRhYmxlcyAqIDE2IC0gc2VhcmNoUmFuZ2UpOyAvLyByYW5nZVNoaWZ0OiAiTnVtVGFi
bGVzIHggMTYtc2VhcmNoUmFuZ2UuIgogCi0gICAgQVNTRVJUKHJlc3VsdC5zaXplKCkgPT0ga1NO
RlRIZWFkZXJTaXplKTsKKyAgICBBU1NFUlQobV9yZXN1bHQuc2l6ZSgpID09IGtTTkZUSGVhZGVy
U2l6ZSk7CiAKICAgICAvLyBMZWF2ZSBzcGFjZSBmb3IgdGhlIERpcmVjdG9yeSBFbnRyaWVzCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBrRGlyZWN0b3J5RW50cnlTaXplICogbnVtVGFibGVz
OyArK2kpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoMCk7Ci0KLSAgICBhcHBlbmRUYWJsZSgiQ0ZG
ICIsIHJlc3VsdCwgJlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kQ0ZGVGFibGUpOwotICAg
IGFwcGVuZFRhYmxlKCJPUy8yIiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBl
bmRPUzJUYWJsZSk7Ci0gICAgYXBwZW5kVGFibGUoIlZPUkciLCByZXN1bHQsICZTVkdUb09URkZv
bnRDb252ZXJ0ZXI6OmFwcGVuZFZPUkdUYWJsZSk7Ci0gICAgYXBwZW5kVGFibGUoImNtYXAiLCBy
ZXN1bHQsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZENNQVBUYWJsZSk7Ci0gICAgYXV0
byBoZWFkVGFibGVPZmZzZXQgPSByZXN1bHQuc2l6ZSgpOwotICAgIGFwcGVuZFRhYmxlKCJoZWFk
IiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRIRUFEVGFibGUpOwotICAg
IGFwcGVuZFRhYmxlKCJoaGVhIiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBl
bmRISEVBVGFibGUpOwotICAgIGFwcGVuZFRhYmxlKCJobXR4IiwgcmVzdWx0LCAmU1ZHVG9PVEZG
b250Q29udmVydGVyOjphcHBlbmRITVRYVGFibGUpOwotICAgIGFwcGVuZFRhYmxlKCJrZXJuIiwg
cmVzdWx0LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRLRVJOVGFibGUpOwotICAgIGFw
cGVuZFRhYmxlKCJtYXhwIiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRN
QVhQVGFibGUpOwotICAgIGFwcGVuZFRhYmxlKCJuYW1lIiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250
Q29udmVydGVyOjphcHBlbmROQU1FVGFibGUpOwotICAgIGFwcGVuZFRhYmxlKCJwb3N0IiwgcmVz
dWx0LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRQT1NUVGFibGUpOwotICAgIGFwcGVu
ZFRhYmxlKCJ2aGVhIiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRWSEVB
VGFibGUpOwotICAgIGFwcGVuZFRhYmxlKCJ2bXR4IiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29u
dmVydGVyOjphcHBlbmRWTVRYVGFibGUpOworICAgICAgICBtX3Jlc3VsdC5hcHBlbmQoMCk7CisK
KyAgICBhcHBlbmRUYWJsZSgiQ0ZGICIsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZENG
RlRhYmxlKTsKKyAgICBhcHBlbmRUYWJsZSgiT1MvMiIsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6
OmFwcGVuZE9TMlRhYmxlKTsKKyAgICBhcHBlbmRUYWJsZSgiVk9SRyIsICZTVkdUb09URkZvbnRD
b252ZXJ0ZXI6OmFwcGVuZFZPUkdUYWJsZSk7CisgICAgYXBwZW5kVGFibGUoImNtYXAiLCAmU1ZH
VG9PVEZGb250Q29udmVydGVyOjphcHBlbmRDTUFQVGFibGUpOworICAgIGF1dG8gaGVhZFRhYmxl
T2Zmc2V0ID0gbV9yZXN1bHQuc2l6ZSgpOworICAgIGFwcGVuZFRhYmxlKCJoZWFkIiwgJlNWR1Rv
T1RGRm9udENvbnZlcnRlcjo6YXBwZW5kSEVBRFRhYmxlKTsKKyAgICBhcHBlbmRUYWJsZSgiaGhl
YSIsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEhIRUFUYWJsZSk7CisgICAgYXBwZW5k
VGFibGUoImhtdHgiLCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRITVRYVGFibGUpOwor
ICAgIGFwcGVuZFRhYmxlKCJrZXJuIiwgJlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kS0VS
TlRhYmxlKTsKKyAgICBhcHBlbmRUYWJsZSgibWF4cCIsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6
OmFwcGVuZE1BWFBUYWJsZSk7CisgICAgYXBwZW5kVGFibGUoIm5hbWUiLCAmU1ZHVG9PVEZGb250
Q29udmVydGVyOjphcHBlbmROQU1FVGFibGUpOworICAgIGFwcGVuZFRhYmxlKCJwb3N0IiwgJlNW
R1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kUE9TVFRhYmxlKTsKKyAgICBhcHBlbmRUYWJsZSgi
dmhlYSIsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFZIRUFUYWJsZSk7CisgICAgYXBw
ZW5kVGFibGUoInZtdHgiLCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRWTVRYVGFibGUp
OwogCiAgICAgQVNTRVJUKG51bVRhYmxlcyA9PSBtX3RhYmxlc0FwcGVuZGVkQ291bnQpOwogCiAg
ICAgLy8gY2hlY2tTdW1BZGp1c3RtZW50OiAiVG8gY29tcHV0ZTogc2V0IGl0IHRvIDAsIGNhbGN1
bGF0ZSB0aGUgY2hlY2tzdW0gZm9yIHRoZSAnaGVhZCcgdGFibGUgYW5kIHB1dCBpdCBpbiB0aGUg
dGFibGUgZGlyZWN0b3J5LAogICAgIC8vIHN1bSB0aGUgZW50aXJlIGZvbnQgYXMgdWludDMyLCB0
aGVuIHN0b3JlIEIxQjBBRkJBIC0gc3VtLiBUaGUgY2hlY2tzdW0gZm9yIHRoZSAnaGVhZCcgdGFi
bGUgd2lsbCBub3cgYmUgd3JvbmcuIFRoYXQgaXMgT0suIgotICAgIHVpbnQzMl90IGNoZWNrc3Vt
QWRqdXN0bWVudCA9IDB4QjFCMEFGQkFVIC0gY2FsY3VsYXRlQ2hlY2tzdW0ocmVzdWx0LCAwLCBy
ZXN1bHQuc2l6ZSgpKTsKLSAgICBvdmVyd3JpdGUzMihyZXN1bHQsIGhlYWRUYWJsZU9mZnNldCAr
IDgsIGNoZWNrc3VtQWRqdXN0bWVudCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHVpbnQz
Ml90IGNoZWNrc3VtQWRqdXN0bWVudCA9IDB4QjFCMEFGQkFVIC0gY2FsY3VsYXRlQ2hlY2tzdW0o
MCwgbV9yZXN1bHQuc2l6ZSgpKTsKKyAgICBvdmVyd3JpdGUzMihoZWFkVGFibGVPZmZzZXQgKyA4
LCBjaGVja3N1bUFkanVzdG1lbnQpOwogfQogCiBWZWN0b3I8Y2hhcj4gY29udmVydFNWR1RvT1RG
Rm9udChjb25zdCBTVkdGb250RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICByZXR1cm4gU1ZHVG9P
VEZGb250Q29udmVydGVyKGVsZW1lbnQpLmNvbnZlcnRTVkdUb09URkZvbnQoKTsKKyAgICBTVkdU
b09URkZvbnRDb252ZXJ0ZXIgY29udmVydGVyKGVsZW1lbnQpOworICAgIGNvbnZlcnRlci5jb252
ZXJ0U1ZHVG9PVEZGb250KCk7CisgICAgcmV0dXJuIGNvbnZlcnRlci5yZWxlYXNlUmVzdWx0KCk7
CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238834</attachid>
            <date>2014-09-28 19:12:14 -0700</date>
            <delta_ts>2014-10-03 12:14:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137097-20140928191214.patch</filename>
            <type>text/plain</type>
            <size>60109</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0MDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjJkYjAxNWE1NWFkMmE4
YzQ3ODg3N2MyODQ0N2IxMjgwMTk0OWRjMC4uMzZhNmRiYWMzNzg1MTQ4ZDNiNTJhZTgyN2QzMjVj
MGViMDIzNWU4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDE0LTA5LTI4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1NWRyAtPiBP
VEYgQ29udmVydGVyXSBTdXBwb3J0IG5vbi1CTVAgY29kZXBvaW50cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MDk3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBoYXMgdHdvIHBpZWNl
czoKKworICAgICAgICAxKSBNb3ZlcyB3cml0ZTMyKCksIHdyaXRlMTYoKSwgb3ZlcndyaXRlMzIo
KSBhbmQgb3ZlcndyaXRlMTYoKSBpbnNpZGUgU1ZHVG9PVEZGb250Q29udmVydGVyLgorICAgICAg
ICBUaGlzIGlzIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBrZWVwIHBhc3NpbmcgYXJvdW5kIHJl
ZmVyZW5jZXMgdG8gbV9yZXN1bHQgZXZlcnl3aGVyZS4KKyAgICAgICAgSW5zdGVhZCwgcHV0IHRo
ZSBvdXRwdXQgdmVjdG9yIGluc2lkZSB0aGUgY2xhc3MgYXMgYW4gaW5zdGFuY2UgbWVtYmVyIHZh
cmlhYmxlLiBJbiBhZGRpdGlvbiwKKyAgICAgICAgcmVuYW1lIHdyaXRlMzIoKSBhbmQgd3JpdGUx
NigpIHRvIGFwcGVuZDMyKCkgYW5kIGFwcGVuZDE2KCkuCisKKyAgICAgICAgMikgQ2hhbmdlIHRo
ZSAiQ29kZXBvaW50IiB0eXBlZGVmIHRvIGJlIGEgU3RyaW5nLCBhbmQgcmVuYW1lIGl0IHRvIENv
ZGVwb2ludHMuIFRoaXMgaXMgc28gdGhhdAorICAgICAgICB3ZSBjYW4gaW1wbGVtZW50IGxpZ2F0
dXJlcyBsYXRlciBvbi4gVXBkYXRlIGFsbCB0aGUgcGxhY2VzIHRoYXQgdXNlIHRoaXMgdmFyaWFi
bGUgdG8gd29yayB3aXRoCisgICAgICAgIGEgU3RyaW5nIG9mIG11bHRpcGxlIGNvZGVwb2ludHMu
CisKKyAgICAgICAgVGhpcyBwYXRjaCB1cGRhdGVzIHRoZSBDTUFQIHRhYmxlIHRvIHVzZSBmb3Jt
YXQgMTIgaW5zdGVhZCBvZiBmb3JtYXQgNC4gSXQgY3VycmVudGx5IG9ubHkgbWFwcworICAgICAg
ICBzaW5nbGUgY29kZXBvaW50cyB0byBnbHlwaCBJRHMgYW5kIHNraXBzIGFsbCBtdWx0aS1jb2Rl
cG9pbnQgZ2x5cGhzLiBXZSB3aWxsIGltcGxlbWVudAorICAgICAgICBsaWdhdHVyZXMgaW4gYW5v
dGhlciBwYXRjaC4KKworICAgICAgICBUZXN0OiBzdmcvY3VzdG9tL2dseXBoLXNlbGVjdGlvbi1u
b24tYm1wLnN2ZworCisgICAgICAgICogc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6YXBwZW5kMzIpOiBBcHBlbmQgYSByZXN1bHQgdG8gYSBnaXZlbiB2
ZWN0b3IuIFRoaXMgaXMgZm9yIHRoZSBwYXRoIHRyYW5zY29kZXIuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OnJlbGVhc2VSZXN1bHQpOiBXVEY6Om1vdmUoKSdzIHRo
ZSByZXN1bHQuCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OkdseXBo
RGF0YTo6R2x5cGhEYXRhKTogVXBkYXRlIHRvIHRha2UgQ29kZXBvaW50cyBpbnN0ZWFkIG9mIENv
ZGVwb2ludC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5k
MzIpOiBQaWVjZSAxIGFib3ZlLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVy
dGVyOjphcHBlbmQxNik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29u
dmVydGVyOjphcHBlbmQ0Qnl0ZUNvZGUpOiBDb252ZW5pZW5jZSBmdW5jdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6b3ZlcndyaXRlMzIpOiBQaWVjZSAxIGFi
b3ZlLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjpvdmVyd3JpdGUx
Nik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBl
bmRDTUFQVGFibGUpOiBVcGRhdGUgdG8gZm9ybWF0IDEyLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VG9PVEZGb250Q29udmVydGVyOjphcHBlbmRIRUFEVGFibGUpOiBQYXNzaW5nIGluIGEgcmVzdWx0
IHZlY3RvciBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9P
VEZGb250Q29udmVydGVyOjphcHBlbmRISEVBVGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kSE1UWFRhYmxlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZE1BWFBUYWJsZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmROQU1F
VGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6
YXBwZW5kT1MyVGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENv
bnZlcnRlcjo6YXBwZW5kUE9TVFRhYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc1Zh
bGlkU3RyaW5nRm9yQ0ZGKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRD
b252ZXJ0ZXI6OmFwcGVuZENGRlZhbGlkU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZENGRlRhYmxlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFZPUkdUYWJsZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRWSEVBVGFi
bGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBw
ZW5kVk1UWFRhYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252
ZXJ0ZXI6OmFkZENvZGVwb2ludFJhbmdlcyk6IFVwZGF0ZSBmb3IgQ29kZXBvaW50cy4KKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkQ29kZXBvaW50cyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRHbHlwaE5hbWVz
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVu
ZEtFUk5TdWJ0YWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29u
dmVydGVyOjphcHBlbmRLRVJOVGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OndyaXRl
Q0ZGRW5jb2RlZE51bWJlcik6IFBhc3NpbmcgaW4gYSByZXN1bHQgdmVjdG9yIGlzIG5vIGxvbmdl
ciBuZWNlc3NhcnkuCisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFw
cGVuZEdseXBoRGF0YSk6IFVwZGF0ZSBmb3IgQ29kZXBvaW50cy4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6cHJvY2Vzc0dseXBoRWxlbWVudCk6IFVwZGF0ZSBmb3Ig
Q29kZXBvaW50cy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6Y29t
cGFyZUNvZGVwb2ludHNMZXhpY29ncmFwaGljYWxseSk6IENvbXBhcmluZyBDb2RlcG9pbnRzCisg
ICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OlNWR1RvT1RGRm9udENvbnZl
cnRlcik6IFVwZGF0ZSBmb3IgQ29kZXBvaW50cy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RG
Rm9udENvbnZlcnRlcjo6Y2FsY3VsYXRlQ2hlY2tzdW0pOiBQYXNzaW5nIGluIGEgcmVzdWx0IHZl
Y3RvciBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZG
b250Q29udmVydGVyOjphcHBlbmRUYWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VG9PVEZGb250Q29udmVydGVyOjpjb252ZXJ0U1ZHVG9PVEZGb250KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpjb252ZXJ0U1ZHVG9PVEZGb250KTogTW92ZSBvdXQgb2YgdGhlIHJlc3VsdCB2
ZWN0b3IuCisgICAgICAgIChXZWJDb3JlOjp3cml0ZTMyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OndyaXRlMTYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b3ZlcndyaXRlMzIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kQ0ZGVmFsaWRTdHJpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNjb2RlR2x5cGhQYXRocyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGVDaGVja3N1bSk6IERlbGV0ZWQuCisKIDIwMTQtMDkt
MjggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQuIE1vdmUgUmVuZGVyVGhlbWVHdGsuaCBmcm9tIHBsYXRmb3JtL2d0ayB0byBy
ZW5kZXJpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZGb250Q29u
dmVyc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5j
cHAKaW5kZXggN2ZhNjE2MWViZDU2YmM2OWQyMjcxYzZjZTUzMmQyNmU2NTVhYzgyZC4uMzZmOTFh
NjkyM2Q5ODJkNzU4ZTBkYmIxYjk0ZWI1MDJlMGMxM2JiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcApAQCAtNDAsNTMgKzQwLDQyIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlMzIoVmVjdG9yPGNo
YXI+JiB2ZWN0b3IsIHVpbnQzMl90IHZhbHVlKQorc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZDMy
KFZlY3RvcjxjaGFyPiYgcmVzdWx0LCB1aW50MzJfdCB2YWx1ZSkKIHsKLSAgICB2ZWN0b3IuYXBw
ZW5kKHZhbHVlID4+IDI0KTsKLSAgICB2ZWN0b3IuYXBwZW5kKHZhbHVlID4+IDE2KTsKLSAgICB2
ZWN0b3IuYXBwZW5kKHZhbHVlID4+IDgpOwotICAgIHZlY3Rvci5hcHBlbmQodmFsdWUpOwotfQot
Ci1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGUxNihWZWN0b3I8Y2hhcj4mIHZlY3RvciwgdWludDE2
X3QgdmFsdWUpCi17Ci0gICAgdmVjdG9yLmFwcGVuZCh2YWx1ZSA+PiA4KTsKLSAgICB2ZWN0b3Iu
YXBwZW5kKHZhbHVlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG92ZXJ3cml0ZTMyKFZlY3Rv
cjxjaGFyPiYgdmVjdG9yLCB1bnNpZ25lZCBsb2NhdGlvbiwgdWludDMyX3QgdmFsdWUpCi17Ci0g
ICAgQVNTRVJUKHZlY3Rvci5zaXplKCkgPj0gbG9jYXRpb24gKyA0KTsKLSAgICAqKHZlY3Rvci5k
YXRhKCkgKyBsb2NhdGlvbikgPSB2YWx1ZSA+PiAyNDsKLSAgICAqKHZlY3Rvci5kYXRhKCkgKyBs
b2NhdGlvbiArIDEpID0gdmFsdWUgPj4gMTY7Ci0gICAgKih2ZWN0b3IuZGF0YSgpICsgbG9jYXRp
b24gKyAyKSA9IHZhbHVlID4+IDg7Ci0gICAgKih2ZWN0b3IuZGF0YSgpICsgbG9jYXRpb24gKyAz
KSA9IHZhbHVlOworICAgIHJlc3VsdC5hcHBlbmQodmFsdWUgPj4gMjQpOworICAgIHJlc3VsdC5h
cHBlbmQodmFsdWUgPj4gMTYpOworICAgIHJlc3VsdC5hcHBlbmQodmFsdWUgPj4gOCk7CisgICAg
cmVzdWx0LmFwcGVuZCh2YWx1ZSk7CiB9CiAKIGNsYXNzIFNWR1RvT1RGRm9udENvbnZlcnRlciB7
CiBwdWJsaWM6CiAgICAgU1ZHVG9PVEZGb250Q29udmVydGVyKGNvbnN0IFNWR0ZvbnRFbGVtZW50
Jik7Ci0gICAgVmVjdG9yPGNoYXI+IGNvbnZlcnRTVkdUb09URkZvbnQoKTsKKyAgICB2b2lkIGNv
bnZlcnRTVkdUb09URkZvbnQoKTsKKworICAgIFZlY3RvcjxjaGFyPiByZWxlYXNlUmVzdWx0KCkK
KyAgICB7CisgICAgICAgIHJldHVybiBXVEY6Om1vdmUobV9yZXN1bHQpOworICAgIH0KIAogcHJp
dmF0ZToKLSAgICB0eXBlZGVmIHVpbnQxNl90IFNJRDsgLy8gU3RyaW5nIElECi0gICAgdHlwZWRl
ZiBVQ2hhciBDb2RlcG9pbnQ7IC8vIEZJWE1FOiBPbmx5IHN1cHBvcnQgQk1QIGZvciBub3cKKyAg
ICB0eXBlZGVmIFN0cmluZyBDb2RlcG9pbnRzOwogICAgIHN0cnVjdCBHbHlwaERhdGEgewotICAg
ICAgICBHbHlwaERhdGEoVmVjdG9yPGNoYXI+IGNoYXJTdHJpbmcsIGNvbnN0IFNWR0dseXBoRWxl
bWVudCogZ2x5cGhFbGVtZW50LCBmbG9hdCBob3Jpem9udGFsQWR2YW5jZSwgZmxvYXQgdmVydGlj
YWxBZHZhbmNlLCBGbG9hdFJlY3QgYm91bmRpbmdCb3gsIENvZGVwb2ludCBjb2RlcG9pbnQpCisg
ICAgICAgIEdseXBoRGF0YShWZWN0b3I8Y2hhcj4gY2hhclN0cmluZywgY29uc3QgU1ZHR2x5cGhF
bGVtZW50KiBnbHlwaEVsZW1lbnQsIGZsb2F0IGhvcml6b250YWxBZHZhbmNlLCBmbG9hdCB2ZXJ0
aWNhbEFkdmFuY2UsIEZsb2F0UmVjdCBib3VuZGluZ0JveCwgY29uc3QgQ29kZXBvaW50cyYgY29k
ZXBvaW50cykKICAgICAgICAgICAgIDogYm91bmRpbmdCb3goYm91bmRpbmdCb3gpCiAgICAgICAg
ICAgICAsIGNoYXJTdHJpbmcoY2hhclN0cmluZykKKyAgICAgICAgICAgICwgY29kZXBvaW50cyhj
b2RlcG9pbnRzKQogICAgICAgICAgICAgLCBnbHlwaEVsZW1lbnQoZ2x5cGhFbGVtZW50KQogICAg
ICAgICAgICAgLCBob3Jpem9udGFsQWR2YW5jZShob3Jpem9udGFsQWR2YW5jZSkKICAgICAgICAg
ICAgICwgdmVydGljYWxBZHZhbmNlKHZlcnRpY2FsQWR2YW5jZSkKLSAgICAgICAgICAgICwgY29k
ZXBvaW50KGNvZGVwb2ludCkKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIEZsb2F0UmVj
dCBib3VuZGluZ0JveDsKICAgICAgICAgVmVjdG9yPGNoYXI+IGNoYXJTdHJpbmc7CisgICAgICAg
IENvZGVwb2ludHMgY29kZXBvaW50czsKICAgICAgICAgY29uc3QgU1ZHR2x5cGhFbGVtZW50KiBn
bHlwaEVsZW1lbnQ7CiAgICAgICAgIGZsb2F0IGhvcml6b250YWxBZHZhbmNlOwogICAgICAgICBm
bG9hdCB2ZXJ0aWNhbEFkdmFuY2U7Ci0gICAgICAgIENvZGVwb2ludCBjb2RlcG9pbnQ7CiAgICAg
fTsKIAogICAgIHN0cnVjdCBLZXJuaW5nRGF0YSB7CkBAIC0xMDUsNDUgKzk0LDg2IEBAIHByaXZh
dGU6CiAgICAgICAgIGludDE2X3QgYWRqdXN0bWVudDsKICAgICB9OwogCisgICAgaW5saW5lIHZv
aWQgYXBwZW5kMzIodWludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBXZWJDb3JlOjphcHBl
bmQzMihtX3Jlc3VsdCwgdmFsdWUpOworICAgIH0KKworICAgIGlubGluZSB2b2lkIGFwcGVuZDE2
KHVpbnQxNl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9yZXN1bHQuYXBwZW5kKHZhbHVlID4+
IDgpOworICAgICAgICBtX3Jlc3VsdC5hcHBlbmQodmFsdWUpOworICAgIH0KKworICAgIGlubGlu
ZSB2b2lkIGFwcGVuZDRCeXRlQ29kZShjb25zdCBjaGFyIGNvZGVbNF0pCisgICAgeworICAgICAg
ICBtX3Jlc3VsdC5hcHBlbmQoY29kZVswXSk7CisgICAgICAgIG1fcmVzdWx0LmFwcGVuZChjb2Rl
WzFdKTsKKyAgICAgICAgbV9yZXN1bHQuYXBwZW5kKGNvZGVbMl0pOworICAgICAgICBtX3Jlc3Vs
dC5hcHBlbmQoY29kZVszXSk7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgb3ZlcndyaXRlMzIo
dW5zaWduZWQgbG9jYXRpb24sIHVpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fcmVzdWx0LnNpemUoKSA+PSBsb2NhdGlvbiArIDQpOworICAgICAgICBtX3Jlc3VsdFtsb2Nh
dGlvbl0gPSB2YWx1ZSA+PiAyNDsKKyAgICAgICAgbV9yZXN1bHRbbG9jYXRpb24gKyAxXSA9IHZh
bHVlID4+IDE2OworICAgICAgICBtX3Jlc3VsdFtsb2NhdGlvbiArIDJdID0gdmFsdWUgPj4gODsK
KyAgICAgICAgbV9yZXN1bHRbbG9jYXRpb24gKyAzXSA9IHZhbHVlOworICAgIH0KKworICAgIGlu
bGluZSB2b2lkIG92ZXJ3cml0ZTE2KHVuc2lnbmVkIGxvY2F0aW9uLCB1aW50MTZfdCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX3Jlc3VsdC5zaXplKCkgPj0gbG9jYXRpb24gKyAyKTsK
KyAgICAgICAgbV9yZXN1bHRbbG9jYXRpb25dID0gdmFsdWUgPj4gODsKKyAgICAgICAgbV9yZXN1
bHRbbG9jYXRpb24gKyAxXSA9IHZhbHVlOworICAgIH0KKwogICAgIHN0YXRpYyBjb25zdCBzaXpl
X3Qga1NORlRIZWFkZXJTaXplID0gMTI7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBrRGlyZWN0
b3J5RW50cnlTaXplID0gMTY7CiAKKyAgICB1aW50MzJfdCBjYWxjdWxhdGVDaGVja3N1bShzaXpl
X3Qgc3RhcnRpbmdPZmZzZXQsIHNpemVfdCBlbmRpbmdPZmZzZXQpIGNvbnN0OwogCiAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBhcHBlbmRHbHlwaERhdGEoY29uc3QgVmVjdG9y
PGNoYXI+JiBwYXRoLCBjb25zdCBUKiBlbGVtZW50LCBmbG9hdCBob3Jpem9udGFsQWR2YW5jZSwg
ZmxvYXQgdmVydGljYWxBZHZhbmNlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBDb2Rl
cG9pbnQgY29kZXBvaW50KTsKKyAgICB2b2lkIGFwcGVuZEdseXBoRGF0YShjb25zdCBWZWN0b3I8
Y2hhcj4mIHBhdGgsIGNvbnN0IFQqIGVsZW1lbnQsIGZsb2F0IGhvcml6b250YWxBZHZhbmNlLCBm
bG9hdCB2ZXJ0aWNhbEFkdmFuY2UsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0
IENvZGVwb2ludHMmKTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHByb2Nl
c3NHbHlwaEVsZW1lbnQoY29uc3QgVCYgZWxlbWVudCwgZmxvYXQgZGVmYXVsdEhvcml6b250YWxB
ZHZhbmNlLCBmbG9hdCBkZWZhdWx0VmVydGljYWxBZHZhbmNlLCBDb2RlcG9pbnQsIGJvb2wmIGlu
aXRpYWxHbHlwaCk7Ci0KLSAgICB0eXBlZGVmIHZvaWQgKFNWR1RvT1RGRm9udENvbnZlcnRlcjo6
KkZvbnRBcHBlbmRpbmdGdW5jdGlvbikoVmVjdG9yPGNoYXI+ICYpIGNvbnN0OwotICAgIHZvaWQg
YXBwZW5kVGFibGUoY29uc3QgY2hhciBpZGVudGlmaWVyWzRdLCBWZWN0b3I8Y2hhcj4mLCBGb250
QXBwZW5kaW5nRnVuY3Rpb24pOwotICAgIHZvaWQgYXBwZW5kQ01BUFRhYmxlKFZlY3RvcjxjaGFy
PiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kSEVBRFRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0
OwotICAgIHZvaWQgYXBwZW5kSEhFQVRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAgIHZv
aWQgYXBwZW5kSE1UWFRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5k
VkhFQVRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kVk1UWFRhYmxl
KFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kS0VSTlRhYmxlKFZlY3Rvcjxj
aGFyPiYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kTUFYUFRhYmxlKFZlY3RvcjxjaGFyPiYpIGNv
bnN0OwotICAgIHZvaWQgYXBwZW5kTkFNRVRhYmxlKFZlY3RvcjxjaGFyPiYpIGNvbnN0OwotICAg
IHZvaWQgYXBwZW5kT1MyVGFibGUoVmVjdG9yPGNoYXI+JikgY29uc3Q7Ci0gICAgdm9pZCBhcHBl
bmRQT1NUVGFibGUoVmVjdG9yPGNoYXI+JikgY29uc3Q7Ci0gICAgdm9pZCBhcHBlbmRDRkZUYWJs
ZShWZWN0b3I8Y2hhcj4mKSBjb25zdDsKLSAgICB2b2lkIGFwcGVuZFZPUkdUYWJsZShWZWN0b3I8
Y2hhcj4mKSBjb25zdDsKKyAgICB2b2lkIHByb2Nlc3NHbHlwaEVsZW1lbnQoY29uc3QgVCYgZWxl
bWVudCwgZmxvYXQgZGVmYXVsdEhvcml6b250YWxBZHZhbmNlLCBmbG9hdCBkZWZhdWx0VmVydGlj
YWxBZHZhbmNlLCBjb25zdCBDb2RlcG9pbnRzJiwgYm9vbCYgaW5pdGlhbEdseXBoKTsKKworICAg
IHR5cGVkZWYgdm9pZCAoU1ZHVG9PVEZGb250Q29udmVydGVyOjoqRm9udEFwcGVuZGluZ0Z1bmN0
aW9uKSgpOworICAgIHZvaWQgYXBwZW5kVGFibGUoY29uc3QgY2hhciBpZGVudGlmaWVyWzRdLCBG
b250QXBwZW5kaW5nRnVuY3Rpb24pOworICAgIHZvaWQgYXBwZW5kQ01BUFRhYmxlKCk7CisgICAg
dm9pZCBhcHBlbmRIRUFEVGFibGUoKTsKKyAgICB2b2lkIGFwcGVuZEhIRUFUYWJsZSgpOworICAg
IHZvaWQgYXBwZW5kSE1UWFRhYmxlKCk7CisgICAgdm9pZCBhcHBlbmRWSEVBVGFibGUoKTsKKyAg
ICB2b2lkIGFwcGVuZFZNVFhUYWJsZSgpOworICAgIHZvaWQgYXBwZW5kS0VSTlRhYmxlKCk7Cisg
ICAgdm9pZCBhcHBlbmRNQVhQVGFibGUoKTsKKyAgICB2b2lkIGFwcGVuZE5BTUVUYWJsZSgpOwor
ICAgIHZvaWQgYXBwZW5kT1MyVGFibGUoKTsKKyAgICB2b2lkIGFwcGVuZFBPU1RUYWJsZSgpOwor
ICAgIHZvaWQgYXBwZW5kQ0ZGVGFibGUoKTsKKyAgICB2b2lkIGFwcGVuZFZPUkdUYWJsZSgpOwor
CisgICAgc3RhdGljIGJvb2wgY29tcGFyZUNvZGVwb2ludHNMZXhpY29ncmFwaGljYWxseShjb25z
dCBHbHlwaERhdGEmLCBjb25zdCBHbHlwaERhdGEmKTsKKworICAgIHZvaWQgYXBwZW5kQ0ZGVmFs
aWRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAg
ICBWZWN0b3I8Y2hhcj4gdHJhbnNjb2RlR2x5cGhQYXRocyhmbG9hdCB3aWR0aCwgY29uc3QgVCYg
Z2x5cGhFbGVtZW50LCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdDsKIAotICAgIHZvaWQg
YWRkQ29kZXBvaW50UmFuZ2VzKGNvbnN0IFVuaWNvZGVSYW5nZXMmLCBIYXNoU2V0PHVpbnQxNl90
PiYgZ2x5cGhTZXQpIGNvbnN0OwotICAgIHZvaWQgYWRkQ29kZXBvaW50cyhjb25zdCBIYXNoU2V0
PFN0cmluZz4mIGNvZGVwb2ludHMsIEhhc2hTZXQ8dWludDE2X3Q+JiBnbHlwaFNldCkgY29uc3Q7
Ci0gICAgdm9pZCBhZGRHbHlwaE5hbWVzKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgZ2x5cGhOYW1l
cywgSGFzaFNldDx1aW50MTZfdD4mIGdseXBoU2V0KSBjb25zdDsKKyAgICB2b2lkIGFkZENvZGVw
b2ludFJhbmdlcyhjb25zdCBVbmljb2RlUmFuZ2VzJiwgSGFzaFNldDxHbHlwaD4mIGdseXBoU2V0
KSBjb25zdDsKKyAgICB2b2lkIGFkZENvZGVwb2ludHMoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBj
b2RlcG9pbnRzLCBIYXNoU2V0PEdseXBoPiYgZ2x5cGhTZXQpIGNvbnN0OworICAgIHZvaWQgYWRk
R2x5cGhOYW1lcyhjb25zdCBIYXNoU2V0PFN0cmluZz4mIGdseXBoTmFtZXMsIEhhc2hTZXQ8R2x5
cGg+JiBnbHlwaFNldCkgY29uc3Q7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgVmVj
dG9yPEtlcm5pbmdEYXRhPiBjb21wdXRlS2VybmluZ0RhdGEoYm9vbCAoVDo6KmJ1aWxkS2Vybmlu
Z1BhaXIpKFNWR0tlcm5pbmdQYWlyJikgY29uc3QpIGNvbnN0OwogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotICAgIHNpemVfdCBhcHBlbmRLRVJOU3VidGFibGUoVmVjdG9yPGNoYXI+JiByZXN1
bHQsIGJvb2wgKFQ6OipidWlsZEtlcm5pbmdQYWlyKShTVkdLZXJuaW5nUGFpciYpIGNvbnN0LCB1
aW50MTZfdCBjb3ZlcmFnZSkgY29uc3Q7CisgICAgc2l6ZV90IGFwcGVuZEtFUk5TdWJ0YWJsZShi
b29sIChUOjoqYnVpbGRLZXJuaW5nUGFpcikoU1ZHS2VybmluZ1BhaXImKSBjb25zdCwgdWludDE2
X3QgY292ZXJhZ2UpOwogCiAgICAgVmVjdG9yPEdseXBoRGF0YT4gbV9nbHlwaHM7CiAgICAgSGFz
aE1hcDxTdHJpbmcsIEdseXBoPiBtX2dseXBoTmFtZVRvSW5kZXhNYXA7IC8vIFNWRyAxLjE6ICJJ
dCBpcyByZWNvbW1lbmRlZCB0aGF0IGdseXBoIG5hbWVzIGJlIHVuaXF1ZSB3aXRoaW4gYSBmb250
LiIKLSAgICBIYXNoTWFwPENvZGVwb2ludCwgR2x5cGg+IG1fY29kZXBvaW50VG9JbmRleE1hcDsg
Ly8gRklYTUU6IFRoZXJlIG1pZ2h0IGJlIG1hbnkgZ2x5cGhzIHRoYXQgbWFwIHRvIGEgc2luZ2xl
IGNvZGVwb2ludC4KKyAgICBIYXNoTWFwPENvZGVwb2ludHMsIFZlY3RvcjxHbHlwaCwgMT4+IG1f
Y29kZXBvaW50c1RvSW5kaWNlc01hcDsKKyAgICBWZWN0b3I8Y2hhcj4gbV9yZXN1bHQ7CiAgICAg
RmxvYXRSZWN0IG1fYm91bmRpbmdCb3g7CiAgICAgY29uc3QgU1ZHRm9udEVsZW1lbnQmIG1fZm9u
dEVsZW1lbnQ7CiAgICAgY29uc3QgU1ZHRm9udEZhY2VFbGVtZW50KiBtX2ZvbnRGYWNlRWxlbWVu
dDsKQEAgLTE3NCw3MiArMjA0LDczIEBAIHN0YXRpYyB1aW50MTZfdCBpbnRlZ3JhbExvZzIodWlu
dDE2X3QgeCkgewogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU1ZHVG9PVEZGb250Q29u
dmVydGVyOjphcHBlbmRDTUFQVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0Cit2b2lk
IFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kQ01BUFRhYmxlKCkKIHsKLSAgICBhdXRvIHN0
YXJ0aW5nT2Zmc2V0ID0gcmVzdWx0LnNpemUoKTsKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7Ci0g
ICAgd3JpdGUxNihyZXN1bHQsIDEpOyAvLyBOdW1iZXIgc3VidGFibGVzCisgICAgYXV0byBzdGFy
dGluZ09mZnNldCA9IG1fcmVzdWx0LnNpemUoKTsKKyAgICBhcHBlbmQxNigwKTsKKyAgICBhcHBl
bmQxNigxKTsgLy8gTnVtYmVyIHN1YnRhYmxlcwogCi0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAv
LyBVbmljb2RlCi0gICAgd3JpdGUxNihyZXN1bHQsIDMpOyAvLyBVbmljb2RlIHZlcnNpb24gMi4y
KwotICAgIHdyaXRlMzIocmVzdWx0LCByZXN1bHQuc2l6ZSgpIC0gc3RhcnRpbmdPZmZzZXQgKyBz
aXplb2YodWludDMyX3QpKTsgLy8gQnl0ZSBvZmZzZXQgb2Ygc3VidGFibGUKKyAgICBhcHBlbmQx
NigwKTsgLy8gVW5pY29kZQorICAgIGFwcGVuZDE2KDMpOyAvLyBVbmljb2RlIHZlcnNpb24gMi4y
KworICAgIGFwcGVuZDMyKG1fcmVzdWx0LnNpemUoKSAtIHN0YXJ0aW5nT2Zmc2V0ICsgc2l6ZW9m
KHVpbnQzMl90KSk7IC8vIEJ5dGUgb2Zmc2V0IG9mIHN1YnRhYmxlCiAKICAgICAvLyBCcmFpbmRl
YWQgc2NoZW1lOiBPbmUgc2VnbWVudCBmb3IgZWFjaCBjaGFyYWN0ZXIKICAgICBBU1NFUlQobV9n
bHlwaHMuc2l6ZSgpIDwgMHhGRkZGKTsKLSAgICB1aW50MTZfdCBzZWdDb3VudCA9IG1fZ2x5cGhz
LnNpemUoKSArIDE7Ci0gICAgd3JpdGUxNihyZXN1bHQsIDQpOyAvLyBGb3JtYXQ6IE9ubHkgc3Vw
cG9ydCB0aGUgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIGZvciBub3cKLSAgICB3cml0ZTE2KHJl
c3VsdCwgMjIgKyBtX2dseXBocy5zaXplKCkgKiAyKTsgLy8gbGVuZ3RoCi0gICAgd3JpdGUxNihy
ZXN1bHQsIDApOyAvLyBMYW5ndWFnZSBpbmRlcGVuZGVudAotICAgIHdyaXRlMTYocmVzdWx0LCAy
ICogc2VnQ291bnQpOyAvLyBzZWdDb3VudFgyOiAiMiB4IHNlZ0NvdW50IgotICAgIHVpbnQxNl90
IG9yaWdpbmFsU2VhcmNoUmFuZ2UgPSByb3VuZERvd25Ub1Bvd2VyT2ZUd28oc2VnQ291bnQpOwot
ICAgIHVpbnQxNl90IHNlYXJjaFJhbmdlID0gMiAqIG9yaWdpbmFsU2VhcmNoUmFuZ2U7IC8vIHNl
YXJjaFJhbmdlOiAiMiB4ICgyKipmbG9vcihsb2cyKHNlZ0NvdW50KSkpIgotICAgIHdyaXRlMTYo
cmVzdWx0LCBzZWFyY2hSYW5nZSk7Ci0gICAgd3JpdGUxNihyZXN1bHQsIGludGVncmFsTG9nMihv
cmlnaW5hbFNlYXJjaFJhbmdlKSk7IC8vIGVudHJ5U2VsZWN0b3I6ICJsb2cyKHNlYXJjaFJhbmdl
LzIpIgotICAgIHdyaXRlMTYocmVzdWx0LCAoMiAqIHNlZ0NvdW50KSAtIHNlYXJjaFJhbmdlKTsg
Ly8gcmFuZ2VTaGlmdDogIjIgeCBzZWdDb3VudCAtIHNlYXJjaFJhbmdlIgorICAgIGF1dG8gc3Vi
dGFibGVMb2NhdGlvbiA9IG1fcmVzdWx0LnNpemUoKTsKKyAgICBhcHBlbmQzMigxMiA8PCAxNik7
IC8vIEZvcm1hdCAxMgorICAgIGFwcGVuZDMyKDApOyAvLyBQbGFjZWhvbGRlciBmb3IgYnl0ZSBs
ZW5ndGgKKyAgICBhcHBlbmQzMigwKTsgLy8gTGFuZ3VhZ2UgaW5kZXBlbmRlbnQKKyAgICBhcHBl
bmQzMigwKTsgLy8gUGxhY2Vob2xkZXIgZm9yIG5Hcm91cHMKKworICAgIHVpbnQxNl90IG5Hcm91
cHMgPSAwOworICAgIFVDaGFyMzIgcHJldmlvdXNDb2RlcG9pbnQgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPFVDaGFyMzI+OjptYXgoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ2x5cGhz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIGdseXBoID0gbV9nbHlwaHNbaV07CisgICAg
ICAgIHVuc2lnbmVkIGNvZGVwb2ludFNpemUgPSAwOworICAgICAgICBVQ2hhcjMyIGNvZGVwb2lu
dDsKKyAgICAgICAgaWYgKGdseXBoLmNvZGVwb2ludHMuaXNOdWxsKCkpCisgICAgICAgICAgICBj
b2RlcG9pbnQgPSAwOworICAgICAgICBlbHNlIGlmIChnbHlwaC5jb2RlcG9pbnRzLmlzOEJpdCgp
KQorICAgICAgICAgICAgY29kZXBvaW50ID0gZ2x5cGguY29kZXBvaW50c1tjb2RlcG9pbnRTaXpl
KytdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBVMTZfTkVYVChnbHlwaC5jb2RlcG9pbnRz
LmNoYXJhY3RlcnMxNigpLCBjb2RlcG9pbnRTaXplLCBnbHlwaC5jb2RlcG9pbnRzLmxlbmd0aCgp
LCBjb2RlcG9pbnQpOwogCi0gICAgZm9yIChhdXRvJiBnbHlwaCA6IG1fZ2x5cGhzKQotICAgICAg
ICB3cml0ZTE2KHJlc3VsdCwgZ2x5cGguY29kZXBvaW50KTsgLy8gRW5kQ29kZQotICAgIHdyaXRl
MTYocmVzdWx0LCAweEZGRkYpOyAvLyAiVG8gZW5zdXJlIHRoYXQgdGhlIHNlYXJjaCB3aWxsIHRl
cm1pbmF0ZSwgdGhlIGZpbmFsIGVuZENvZGUgdmFsdWUgbXVzdCBiZSAweEZGRkYuIgotICAgIHdy
aXRlMTYocmVzdWx0LCAwKTsgLy8gUmVzZXJ2ZWQKLSAgICBmb3IgKGF1dG8mIGdseXBoIDogbV9n
bHlwaHMpCi0gICAgICAgIHdyaXRlMTYocmVzdWx0LCBnbHlwaC5jb2RlcG9pbnQpOyAvLyBzdGFy
dENvZGUKLSAgICB3cml0ZTE2KHJlc3VsdCwgMHhGRkZGKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9nbHlwaHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgLy8gTm90ZSB0aGF0IHRo
aXMgdmFsdWUgY2FuIGJlICJuZWdhdGl2ZSwiIGJ1dCB0aGF0IGlzIG9rYXkgYmVjYXVzZSB3cmFw
cGluZyBpcyBkZWZpbmVkIGFuZCBleHBlY3RlZCBoZXJlCi0gICAgICAgIHdyaXRlMTYocmVzdWx0
LCBzdGF0aWNfY2FzdDx1aW50MTZfdD4oaSkgLSBtX2dseXBoc1tpXS5jb2RlcG9pbnQpOyAvLyBp
ZERlbHRhCisgICAgICAgIC8vIERvbid0IG1hcCBsaWdhdHVyZXMgaGVyZS4KKyAgICAgICAgaWYg
KGdseXBoLmNvZGVwb2ludHMubGVuZ3RoKCkgPiBjb2RlcG9pbnRTaXplIHx8IGNvZGVwb2ludCA9
PSBwcmV2aW91c0NvZGVwb2ludCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGFw
cGVuZDMyKGNvZGVwb2ludCk7IC8vIHN0YXJ0Q2hhckNvZGUKKyAgICAgICAgYXBwZW5kMzIoY29k
ZXBvaW50KTsgLy8gZW5kQ2hhckNvZGUKKyAgICAgICAgYXBwZW5kMzIoaSk7IC8vIHN0YXJ0R2x5
cGhDb2RlCisgICAgICAgICsrbkdyb3VwczsKKyAgICAgICAgcHJldmlvdXNDb2RlcG9pbnQgPSBj
b2RlcG9pbnQ7CiAgICAgfQotICAgIHdyaXRlMTYocmVzdWx0LCAxKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9nbHlwaHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHdyaXRlMTYocmVz
dWx0LCAwKTsgLy8gaWRSYW5nZU9mZnNldAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsKKyAgICBv
dmVyd3JpdGUzMihzdWJ0YWJsZUxvY2F0aW9uICsgNCwgbV9yZXN1bHQuc2l6ZSgpIC0gc3VidGFi
bGVMb2NhdGlvbik7CisgICAgb3ZlcndyaXRlMzIoc3VidGFibGVMb2NhdGlvbiArIDEyLCBuR3Jv
dXBzKTsKIH0KIAotdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEhFQURUYWJsZShW
ZWN0b3I8Y2hhcj4mIHJlc3VsdCkgY29uc3QKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjph
cHBlbmRIRUFEVGFibGUoKQogewotICAgIHdyaXRlMzIocmVzdWx0LCAweDAwMDEwMDAwKTsgLy8g
VmVyc2lvbgotICAgIHdyaXRlMzIocmVzdWx0LCAweDAwMDEwMDAwKTsgLy8gUmV2aXNpb24KLSAg
ICB3cml0ZTMyKHJlc3VsdCwgMCk7IC8vIENoZWNrc3VtIGFkanVzdG1lbnQKLSAgICAvLyBNYWdp
YyBudW1iZXIuICJTZXQgdG8gMHg1RjBGM0NGNSIKLSAgICByZXN1bHQuYXBwZW5kKDB4NUYpOwot
ICAgIHJlc3VsdC5hcHBlbmQoMHgwRik7Ci0gICAgcmVzdWx0LmFwcGVuZCgweDNDKTsKLSAgICBy
ZXN1bHQuYXBwZW5kKC0weDBCKTsgLy8gV3JhcGFyb3VuZAotICAgIHdyaXRlMTYocmVzdWx0LCAo
MSA8PCA5KSB8IDEpOwotCi0gICAgd3JpdGUxNihyZXN1bHQsIG1fdW5pdHNQZXJFbSk7Ci0gICAg
d3JpdGUzMihyZXN1bHQsIDApOyAvLyBGaXJzdCBoYWxmIG9mIGNyZWF0aW9uIGRhdGUKLSAgICB3
cml0ZTMyKHJlc3VsdCwgMCk7IC8vIExhc3QgaGFsZiBvZiBjcmVhdGlvbiBkYXRlCi0gICAgd3Jp
dGUzMihyZXN1bHQsIDApOyAvLyBGaXJzdCBoYWxmIG9mIG1vZGlmaWNhdGlvbiBkYXRlCi0gICAg
d3JpdGUzMihyZXN1bHQsIDApOyAvLyBMYXN0IGhhbGYgb2YgbW9kaWZpY2F0aW9uIGRhdGUKLSAg
ICB3cml0ZTE2KHJlc3VsdCwgbV9ib3VuZGluZ0JveC54KCkpOyAvLyBNaW5pbXVtIFgKLSAgICB3
cml0ZTE2KHJlc3VsdCwgbV9ib3VuZGluZ0JveC55KCkpOyAvLyBNaW5pbXVtIFkKLSAgICB3cml0
ZTE2KHJlc3VsdCwgbV9ib3VuZGluZ0JveC5tYXhYKCkpOyAvLyBNYXhpbXVtIFgKLSAgICB3cml0
ZTE2KHJlc3VsdCwgbV9ib3VuZGluZ0JveC5tYXhZKCkpOyAvLyBNYXhpbXVtIFkKLSAgICB3cml0
ZTE2KHJlc3VsdCwgKG1faXRhbGljID8gMSA8PCAxIDogMCkgfCAobV93ZWlnaHQgPj0gNyA/IDEg
OiAwKSk7Ci0gICAgd3JpdGUxNihyZXN1bHQsIDMpOyAvLyBTbWFsbGVzdCByZWFkYWJsZSBzaXpl
IGluIHBpeGVscwotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gTWlnaHQgY29udGFpbiBMVFIg
b3IgUlRMIGdseXBocwotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gU2hvcnQgb2Zmc2V0cyBp
biB0aGUgJ2xvY2EnIHRhYmxlLiBIb3dldmVyLCBPVEYgZm9udHMgZG9uJ3QgaGF2ZSBhICdsb2Nh
JyB0YWJsZSBzbyB0aGlzIGlzIGlycmVsZXZhbnQKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8v
IEdseXBoIGRhdGEgZm9ybWF0CisgICAgYXBwZW5kMzIoMHgwMDAxMDAwMCk7IC8vIFZlcnNpb24K
KyAgICBhcHBlbmQzMigweDAwMDEwMDAwKTsgLy8gUmV2aXNpb24KKyAgICBhcHBlbmQzMigwKTsg
Ly8gQ2hlY2tzdW0gYWRqdXN0bWVudAorICAgIGFwcGVuZDMyKDB4NUYwRjNDRjUpOworICAgIGFw
cGVuZDE2KCgxIDw8IDkpIHwgMSk7CisKKyAgICBhcHBlbmQxNihtX3VuaXRzUGVyRW0pOworICAg
IGFwcGVuZDMyKDApOyAvLyBGaXJzdCBoYWxmIG9mIGNyZWF0aW9uIGRhdGUKKyAgICBhcHBlbmQz
MigwKTsgLy8gTGFzdCBoYWxmIG9mIGNyZWF0aW9uIGRhdGUKKyAgICBhcHBlbmQzMigwKTsgLy8g
Rmlyc3QgaGFsZiBvZiBtb2RpZmljYXRpb24gZGF0ZQorICAgIGFwcGVuZDMyKDApOyAvLyBMYXN0
IGhhbGYgb2YgbW9kaWZpY2F0aW9uIGRhdGUKKyAgICBhcHBlbmQxNihtX2JvdW5kaW5nQm94Lngo
KSk7IC8vIE1pbmltdW0gWAorICAgIGFwcGVuZDE2KG1fYm91bmRpbmdCb3gueSgpKTsgLy8gTWlu
aW11bSBZCisgICAgYXBwZW5kMTYobV9ib3VuZGluZ0JveC5tYXhYKCkpOyAvLyBNYXhpbXVtIFgK
KyAgICBhcHBlbmQxNihtX2JvdW5kaW5nQm94Lm1heFkoKSk7IC8vIE1heGltdW0gWQorICAgIGFw
cGVuZDE2KChtX2l0YWxpYyA/IDEgPDwgMSA6IDApIHwgKG1fd2VpZ2h0ID49IDcgPyAxIDogMCkp
OworICAgIGFwcGVuZDE2KDMpOyAvLyBTbWFsbGVzdCByZWFkYWJsZSBzaXplIGluIHBpeGVscwor
ICAgIGFwcGVuZDE2KDApOyAvLyBNaWdodCBjb250YWluIExUUiBvciBSVEwgZ2x5cGhzCisgICAg
YXBwZW5kMTYoMCk7IC8vIFNob3J0IG9mZnNldHMgaW4gdGhlICdsb2NhJyB0YWJsZS4gSG93ZXZl
ciwgT1RGIGZvbnRzIGRvbid0IGhhdmUgYSAnbG9jYScgdGFibGUgc28gdGhpcyBpcyBpcnJlbGV2
YW50CisgICAgYXBwZW5kMTYoMCk7IC8vIEdseXBoIGRhdGEgZm9ybWF0CiB9CiAKIC8vIEFzc3Vt
cHRpb246IFQyIGNhbiBob2xkIGV2ZXJ5IHZhbHVlIHRoYXQgYSBUMSBjYW4gaG9sZApAQCAtMjUx
LDEwICsyODIsMTAgQEAgc3RhdGljIGlubGluZSBUMSBjbGFtcFRvKFQyIHgpCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQxPih4KTsKIH0KIAotdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFw
cGVuZEhIRUFUYWJsZShWZWN0b3I8Y2hhcj4mIHJlc3VsdCkgY29uc3QKK3ZvaWQgU1ZHVG9PVEZG
b250Q29udmVydGVyOjphcHBlbmRISEVBVGFibGUoKQogewotICAgIGludDE2X3QgYXNjZW50ID0g
c3RkOjpudW1lcmljX2xpbWl0czxpbnQxNl90Pjo6bWF4KCk7Ci0gICAgaW50MTZfdCBkZXNjZW50
ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQxNl90Pjo6bWF4KCk7CisgICAgaW50MTZfdCBhc2Nl
bnQgPSBtX3VuaXRzUGVyRW07CisgICAgaW50MTZfdCBkZXNjZW50ID0gMDsKICAgICBpZiAobV9m
b250RmFjZUVsZW1lbnQpIHsKICAgICAgICAgYXNjZW50ID0gbV9mb250RmFjZUVsZW1lbnQtPmFz
Y2VudCgpOwogICAgICAgICBkZXNjZW50ID0gbV9mb250RmFjZUVsZW1lbnQtPmRlc2NlbnQoKTsK
QEAgLTI2OSw3MSArMzAwLDcxIEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRI
SEVBVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0CiAgICAgaWYgKCFkZXNjZW50KQog
ICAgICAgICBkZXNjZW50ID0gMTsKIAotICAgIHdyaXRlMzIocmVzdWx0LCAweDAwMDEwMDAwKTsg
Ly8gVmVyc2lvbgotICAgIHdyaXRlMTYocmVzdWx0LCBhc2NlbnQpOwotICAgIHdyaXRlMTYocmVz
dWx0LCBkZXNjZW50KTsKKyAgICBhcHBlbmQzMigweDAwMDEwMDAwKTsgLy8gVmVyc2lvbgorICAg
IGFwcGVuZDE2KGFzY2VudCk7CisgICAgYXBwZW5kMTYoZGVzY2VudCk7CiAgICAgLy8gV2ViS2l0
J3MgU1ZHIGNvZGVwYXRoIGhhcmRjb2RlcyB0aGUgbGluZSBnYXAgdG8gYmUgMS8xMHRoIG9mIHRo
ZSBmb250IHNpemUgKHNlZSByMjk3MTkpLiBNYXRjaGluZyB0aGF0CiAgICAgLy8gYWxsb3dzIHVz
IHRvIGhhdmUgY29uc2lzdGVudCByZW5kZXJpbmdzIGJldHdlZW4gdGhlIHR3byBwYXRocy4KLSAg
ICB3cml0ZTE2KHJlc3VsdCwgbV91bml0c1BlckVtIC8gMTApOyAvLyBMaW5lIGdhcAotICAgIHdy
aXRlMTYocmVzdWx0LCBjbGFtcFRvPHVpbnQxNl90PihtX2FkdmFuY2VXaWR0aE1heCkpOwotICAg
IHdyaXRlMTYocmVzdWx0LCBjbGFtcFRvPGludDE2X3Q+KG1fYm91bmRpbmdCb3gueCgpKSk7IC8v
IE1pbmltdW0gbGVmdCBzaWRlIGJlYXJpbmcKLSAgICB3cml0ZTE2KHJlc3VsdCwgY2xhbXBUbzxp
bnQxNl90PihtX21pblJpZ2h0U2lkZUJlYXJpbmcpKTsgLy8gTWluaW11bSByaWdodCBzaWRlIGJl
YXJpbmcKLSAgICB3cml0ZTE2KHJlc3VsdCwgY2xhbXBUbzxpbnQxNl90PihtX2JvdW5kaW5nQm94
Lm1heFgoKSkpOyAvLyBYIG1heGltdW0gZXh0ZW50CisgICAgYXBwZW5kMTYobV91bml0c1BlckVt
IC8gMTApOyAvLyBMaW5lIGdhcAorICAgIGFwcGVuZDE2KGNsYW1wVG88dWludDE2X3Q+KG1fYWR2
YW5jZVdpZHRoTWF4KSk7CisgICAgYXBwZW5kMTYoY2xhbXBUbzxpbnQxNl90PihtX2JvdW5kaW5n
Qm94LngoKSkpOyAvLyBNaW5pbXVtIGxlZnQgc2lkZSBiZWFyaW5nCisgICAgYXBwZW5kMTYoY2xh
bXBUbzxpbnQxNl90PihtX21pblJpZ2h0U2lkZUJlYXJpbmcpKTsgLy8gTWluaW11bSByaWdodCBz
aWRlIGJlYXJpbmcKKyAgICBhcHBlbmQxNihjbGFtcFRvPGludDE2X3Q+KG1fYm91bmRpbmdCb3gu
bWF4WCgpKSk7IC8vIFggbWF4aW11bSBleHRlbnQKICAgICAvLyBXZWJLaXQgZHJhd3MgdGhlIGNh
cmV0Ci0gICAgd3JpdGUxNihyZXN1bHQsIDEpOyAvLyBWZXJ0aWNhbCBjYXJldAotICAgIHdyaXRl
MTYocmVzdWx0LCAwKTsgLy8gVmVydGljYWwgY2FyZXQKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7
IC8vICJTZXQgdmFsdWUgdG8gMCBmb3Igbm9uLXNsYW50ZWQgZm9udHMiCi0gICAgd3JpdGUzMihy
ZXN1bHQsIDApOyAvLyBSZXNlcnZlZAotICAgIHdyaXRlMzIocmVzdWx0LCAwKTsgLy8gUmVzZXJ2
ZWQKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIEN1cnJlbnQgZm9ybWF0Ci0gICAgd3JpdGUx
NihyZXN1bHQsIG1fZ2x5cGhzLnNpemUoKSk7IC8vIE51bWJlciBvZiBhZHZhbmNlIHdpZHRocyBp
biBITVRYIHRhYmxlCisgICAgYXBwZW5kMTYoMSk7IC8vIFZlcnRpY2FsIGNhcmV0CisgICAgYXBw
ZW5kMTYoMCk7IC8vIFZlcnRpY2FsIGNhcmV0CisgICAgYXBwZW5kMTYoMCk7IC8vICJTZXQgdmFs
dWUgdG8gMCBmb3Igbm9uLXNsYW50ZWQgZm9udHMiCisgICAgYXBwZW5kMzIoMCk7IC8vIFJlc2Vy
dmVkCisgICAgYXBwZW5kMzIoMCk7IC8vIFJlc2VydmVkCisgICAgYXBwZW5kMTYoMCk7IC8vIEN1
cnJlbnQgZm9ybWF0CisgICAgYXBwZW5kMTYobV9nbHlwaHMuc2l6ZSgpKTsgLy8gTnVtYmVyIG9m
IGFkdmFuY2Ugd2lkdGhzIGluIEhNVFggdGFibGUKIH0KIAotdm9pZCBTVkdUb09URkZvbnRDb252
ZXJ0ZXI6OmFwcGVuZEhNVFhUYWJsZShWZWN0b3I8Y2hhcj4mIHJlc3VsdCkgY29uc3QKK3ZvaWQg
U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRITVRYVGFibGUoKQogewogICAgIGZvciAoYXV0
byYgZ2x5cGggOiBtX2dseXBocykgewotICAgICAgICB3cml0ZTE2KHJlc3VsdCwgY2xhbXBUbzx1
aW50MTZfdD4oZ2x5cGguaG9yaXpvbnRhbEFkdmFuY2UpKTsKLSAgICAgICAgd3JpdGUxNihyZXN1
bHQsIGNsYW1wVG88aW50MTZfdD4oZ2x5cGguYm91bmRpbmdCb3gueCgpKSk7CisgICAgICAgIGFw
cGVuZDE2KGNsYW1wVG88dWludDE2X3Q+KGdseXBoLmhvcml6b250YWxBZHZhbmNlKSk7CisgICAg
ICAgIGFwcGVuZDE2KGNsYW1wVG88aW50MTZfdD4oZ2x5cGguYm91bmRpbmdCb3gueCgpKSk7CiAg
ICAgfQogfQogCi12b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kTUFYUFRhYmxlKFZl
Y3RvcjxjaGFyPiYgcmVzdWx0KSBjb25zdAordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFw
cGVuZE1BWFBUYWJsZSgpCiB7Ci0gICAgd3JpdGUzMihyZXN1bHQsIDB4MDAwMTAwMDApOyAvLyBW
ZXJzaW9uCi0gICAgd3JpdGUxNihyZXN1bHQsIG1fZ2x5cGhzLnNpemUoKSk7Ci0gICAgd3JpdGUx
NihyZXN1bHQsIDB4RkZGRik7IC8vIE1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBpbiBub24tY29t
cG91bmQgZ2x5cGgKLSAgICB3cml0ZTE2KHJlc3VsdCwgMHhGRkZGKTsgLy8gTWF4aW11bSBudW1i
ZXIgb2YgY29udG91cnMgaW4gbm9uLWNvbXBvdW5kIGdseXBoCi0gICAgd3JpdGUxNihyZXN1bHQs
IDB4RkZGRik7IC8vIE1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBpbiBjb21wb3VuZCBnbHlwaAot
ICAgIHdyaXRlMTYocmVzdWx0LCAweEZGRkYpOyAvLyBNYXhpbXVtIG51bWJlciBvZiBjb250b3Vy
cyBpbiBjb21wb3VuZCBnbHlwaAotICAgIHdyaXRlMTYocmVzdWx0LCAyKTsgLy8gTWF4aW11bSBu
dW1iZXIgb2Ygem9uZXMKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIE1heGltdW0gbnVtYmVy
IG9mIHBvaW50cyB1c2VkIGluIHpvbmUgMAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gTWF4
aW11bSBudW1iZXIgb2Ygc3RvcmFnZSBhcmVhIGxvY2F0aW9ucwotICAgIHdyaXRlMTYocmVzdWx0
LCAwKTsgLy8gTWF4aW11bSBudW1iZXIgb2YgZnVuY3Rpb24gZGVmaW5pdGlvbnMKLSAgICB3cml0
ZTE2KHJlc3VsdCwgMCk7IC8vIE1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9uIGRlZmluaXRp
b25zCi0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBNYXhpbXVtIHN0YWNrIGRlcHRoCi0gICAg
d3JpdGUxNihyZXN1bHQsIDApOyAvLyBNYXhpbXVtIHNpemUgb2YgaW5zdHJ1Y3Rpb25zCi0gICAg
d3JpdGUxNihyZXN1bHQsIG1fZ2x5cGhzLnNpemUoKSk7IC8vIE1heGltdW0gbnVtYmVyIG9mIGds
eXBocyByZWZlcmVuY2VkIGF0IHRvcCBsZXZlbAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8g
Tm8gY29tcG91bmQgZ2x5cGhzCisgICAgYXBwZW5kMzIoMHgwMDAxMDAwMCk7IC8vIFZlcnNpb24K
KyAgICBhcHBlbmQxNihtX2dseXBocy5zaXplKCkpOworICAgIGFwcGVuZDE2KDB4RkZGRik7IC8v
IE1heGltdW0gbnVtYmVyIG9mIHBvaW50cyBpbiBub24tY29tcG91bmQgZ2x5cGgKKyAgICBhcHBl
bmQxNigweEZGRkYpOyAvLyBNYXhpbXVtIG51bWJlciBvZiBjb250b3VycyBpbiBub24tY29tcG91
bmQgZ2x5cGgKKyAgICBhcHBlbmQxNigweEZGRkYpOyAvLyBNYXhpbXVtIG51bWJlciBvZiBwb2lu
dHMgaW4gY29tcG91bmQgZ2x5cGgKKyAgICBhcHBlbmQxNigweEZGRkYpOyAvLyBNYXhpbXVtIG51
bWJlciBvZiBjb250b3VycyBpbiBjb21wb3VuZCBnbHlwaAorICAgIGFwcGVuZDE2KDIpOyAvLyBN
YXhpbXVtIG51bWJlciBvZiB6b25lcworICAgIGFwcGVuZDE2KDApOyAvLyBNYXhpbXVtIG51bWJl
ciBvZiBwb2ludHMgdXNlZCBpbiB6b25lIDAKKyAgICBhcHBlbmQxNigwKTsgLy8gTWF4aW11bSBu
dW1iZXIgb2Ygc3RvcmFnZSBhcmVhIGxvY2F0aW9ucworICAgIGFwcGVuZDE2KDApOyAvLyBNYXhp
bXVtIG51bWJlciBvZiBmdW5jdGlvbiBkZWZpbml0aW9ucworICAgIGFwcGVuZDE2KDApOyAvLyBN
YXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbiBkZWZpbml0aW9ucworICAgIGFwcGVuZDE2KDAp
OyAvLyBNYXhpbXVtIHN0YWNrIGRlcHRoCisgICAgYXBwZW5kMTYoMCk7IC8vIE1heGltdW0gc2l6
ZSBvZiBpbnN0cnVjdGlvbnMKKyAgICBhcHBlbmQxNihtX2dseXBocy5zaXplKCkpOyAvLyBNYXhp
bXVtIG51bWJlciBvZiBnbHlwaHMgcmVmZXJlbmNlZCBhdCB0b3AgbGV2ZWwKKyAgICBhcHBlbmQx
NigwKTsgLy8gTm8gY29tcG91bmQgZ2x5cGhzCiB9CiAKLXZvaWQgU1ZHVG9PVEZGb250Q29udmVy
dGVyOjphcHBlbmROQU1FVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0Cit2b2lkIFNW
R1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kTkFNRVRhYmxlKCkKIHsKLSAgICB3cml0ZTE2KHJl
c3VsdCwgMCk7IC8vIEZvcm1hdCBzZWxlY3RvcgotICAgIHdyaXRlMTYocmVzdWx0LCAxKTsgLy8g
TnVtYmVyIG9mIG5hbWUgcmVjb3JkcyBpbiB0YWJsZQotICAgIHdyaXRlMTYocmVzdWx0LCAxOCk7
IC8vIE9mZnNldCBpbiBieXRlcyB0byB0aGUgYmVnaW5uaW5nIG9mIG5hbWUgY2hhcmFjdGVyIHN0
cmluZ3MKKyAgICBhcHBlbmQxNigwKTsgLy8gRm9ybWF0IHNlbGVjdG9yCisgICAgYXBwZW5kMTYo
MSk7IC8vIE51bWJlciBvZiBuYW1lIHJlY29yZHMgaW4gdGFibGUKKyAgICBhcHBlbmQxNigxOCk7
IC8vIE9mZnNldCBpbiBieXRlcyB0byB0aGUgYmVnaW5uaW5nIG9mIG5hbWUgY2hhcmFjdGVyIHN0
cmluZ3MKIAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gVW5pY29kZQotICAgIHdyaXRlMTYo
cmVzdWx0LCAzKTsgLy8gVW5pY29kZSB2ZXJzaW9uIDIuMCBvciBsYXRlcgotICAgIHdyaXRlMTYo
cmVzdWx0LCAwKTsgLy8gTGFuZ3VhZ2UKLSAgICB3cml0ZTE2KHJlc3VsdCwgMSk7IC8vIE5hbWUg
aWRlbnRpZmllci4gMSA9IEZvbnQgZmFtaWx5Ci0gICAgd3JpdGUxNihyZXN1bHQsIG1fZm9udEZh
bWlseS5sZW5ndGgoKSk7Ci0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBPZmZzZXQgaW50byBu
YW1lIGRhdGEKKyAgICBhcHBlbmQxNigwKTsgLy8gVW5pY29kZQorICAgIGFwcGVuZDE2KDMpOyAv
LyBVbmljb2RlIHZlcnNpb24gMi4wIG9yIGxhdGVyCisgICAgYXBwZW5kMTYoMCk7IC8vIExhbmd1
YWdlCisgICAgYXBwZW5kMTYoMSk7IC8vIE5hbWUgaWRlbnRpZmllci4gMSA9IEZvbnQgZmFtaWx5
CisgICAgYXBwZW5kMTYobV9mb250RmFtaWx5Lmxlbmd0aCgpKTsKKyAgICBhcHBlbmQxNigwKTsg
Ly8gT2Zmc2V0IGludG8gbmFtZSBkYXRhCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9mb250RmFtaWx5Lmxlbmd0aCgpOyArK2kpCi0gICAgICAgIHdyaXRlMTYocmVzdWx0LCBtX2Zv
bnRGYW1pbHlbaV0pOworICAgICAgICBhcHBlbmQxNihtX2ZvbnRGYW1pbHlbaV0pOwogfQogCi12
b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kT1MyVGFibGUoVmVjdG9yPGNoYXI+JiBy
ZXN1bHQpIGNvbnN0Cit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kT1MyVGFibGUo
KQogewogICAgIGludDE2X3QgYXZlcmFnZUFkdmFuY2UgPSBtX3VuaXRzUGVyRW07CiAgICAgYXV0
byYgYXR0cmlidXRlID0gbV9mb250RWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpo
b3Jpel9hZHZfeEF0dHIpOwpAQCAtMzQ3LDIzICszNzgsMjMgQEAgdm9pZCBTVkdUb09URkZvbnRD
b252ZXJ0ZXI6OmFwcGVuZE9TMlRhYmxlKFZlY3RvcjxjaGFyPiYgcmVzdWx0KSBjb25zdAogICAg
ICAgICAgICAgYXZlcmFnZUFkdmFuY2UgPSBjbGFtcFRvPGludDE2X3Q+KHZhbHVlKTsKICAgICB9
CiAKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFZlcnNpb24KLSAgICB3cml0ZTE2KHJlc3Vs
dCwgYXZlcmFnZUFkdmFuY2UpOwotICAgIHdyaXRlMTYocmVzdWx0LCBtX3dlaWdodCk7IC8vIFdl
aWdodCBjbGFzcwotICAgIHdyaXRlMTYocmVzdWx0LCA1KTsgLy8gV2lkdGggY2xhc3MKLSAgICB3
cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFByb3RlY3RlZCBmb250CisgICAgYXBwZW5kMTYoMCk7IC8v
IFZlcnNpb24KKyAgICBhcHBlbmQxNihhdmVyYWdlQWR2YW5jZSk7CisgICAgYXBwZW5kMTYobV93
ZWlnaHQpOyAvLyBXZWlnaHQgY2xhc3MKKyAgICBhcHBlbmQxNig1KTsgLy8gV2lkdGggY2xhc3MK
KyAgICBhcHBlbmQxNigwKTsgLy8gUHJvdGVjdGVkIGZvbnQKICAgICAvLyBXZWJLaXQgaGFuZGxl
cyB0aGVzZSBzdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMKLSAgICB3cml0ZTE2KHJlc3VsdCwg
MCk7IC8vIFN1YnNjcmlwdCBYIFNpemUKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFN1YnNj
cmlwdCBZIFNpemUKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFN1YnNjcmlwdCBYIE9mZnNl
dAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gU3Vic2NyaXB0IFkgT2Zmc2V0Ci0gICAgd3Jp
dGUxNihyZXN1bHQsIDApOyAvLyBTdXBlcnNjcmlwdCBYIFNpemUKLSAgICB3cml0ZTE2KHJlc3Vs
dCwgMCk7IC8vIFN1cGVyc2NyaXB0IFkgU2l6ZQotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8g
U3VwZXJzY3JpcHQgWCBPZmZzZXQKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFN1cGVyc2Ny
aXB0IFkgT2Zmc2V0Ci0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBTdHJpa2VvdXQgd2lkdGgK
LSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFN0cmlrZW91dCBQb3NpdGlvbgotICAgIHdyaXRl
MTYocmVzdWx0LCAwKTsgLy8gTm8gY2xhc3NpZmljYXRpb24KKyAgICBhcHBlbmQxNigwKTsgLy8g
U3Vic2NyaXB0IFggU2l6ZQorICAgIGFwcGVuZDE2KDApOyAvLyBTdWJzY3JpcHQgWSBTaXplCisg
ICAgYXBwZW5kMTYoMCk7IC8vIFN1YnNjcmlwdCBYIE9mZnNldAorICAgIGFwcGVuZDE2KDApOyAv
LyBTdWJzY3JpcHQgWSBPZmZzZXQKKyAgICBhcHBlbmQxNigwKTsgLy8gU3VwZXJzY3JpcHQgWCBT
aXplCisgICAgYXBwZW5kMTYoMCk7IC8vIFN1cGVyc2NyaXB0IFkgU2l6ZQorICAgIGFwcGVuZDE2
KDApOyAvLyBTdXBlcnNjcmlwdCBYIE9mZnNldAorICAgIGFwcGVuZDE2KDApOyAvLyBTdXBlcnNj
cmlwdCBZIE9mZnNldAorICAgIGFwcGVuZDE2KDApOyAvLyBTdHJpa2VvdXQgd2lkdGgKKyAgICBh
cHBlbmQxNigwKTsgLy8gU3RyaWtlb3V0IFBvc2l0aW9uCisgICAgYXBwZW5kMTYoMCk7IC8vIE5v
IGNsYXNzaWZpY2F0aW9uCiAKICAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gc3BlY2lmaWVkUGFu
b3NlOwogICAgIGlmIChtX2ZvbnRGYWNlRWxlbWVudCkgewpAQCAtMzg1LDU3ICs0MTYsNTggQEAg
dm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZE9TMlRhYmxlKFZlY3RvcjxjaGFyPiYg
cmVzdWx0KSBjb25zdAogCiAgICAgaWYgKHNwZWNpZmllZFBhbm9zZS5zaXplKCkgPT0gMTApIHsK
ICAgICAgICAgZm9yIChjaGFyIGMgOiBzcGVjaWZpZWRQYW5vc2UpCi0gICAgICAgICAgICByZXN1
bHQuYXBwZW5kKGMpOworICAgICAgICAgICAgbV9yZXN1bHQuYXBwZW5kKGMpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkKLSAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoMCk7IC8vIFBBTk9TRTogQW55CisgICAgICAgICAgICBtX3Jlc3VsdC5hcHBl
bmQoMCk7IC8vIFBBTk9TRTogQW55CiAgICAgfQogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0
OyArK2kpCi0gICAgICAgIHdyaXRlMzIocmVzdWx0LCAwKTsgLy8gIkJpdCBhc3NpZ25tZW50cyBh
cmUgcGVuZGluZy4gU2V0IHRvIDAiCi0gICAgd3JpdGUzMihyZXN1bHQsIDB4NTQ0QjQyNTcpOyAv
LyBGb250IFZlbmRvci4gIldCS1QiCi0gICAgd3JpdGUxNihyZXN1bHQsIChtX3dlaWdodCA+PSA3
ID8gMSA8PCA1IDogMCkgfCAobV9pdGFsaWMgPyAxIDogMCkpOyAvLyBGb250IFBhdHRlcm5zLgot
ICAgIHdyaXRlMTYocmVzdWx0LCBtX2dseXBoc1swXS5jb2RlcG9pbnQpOyAvLyBGaXJzdCB1bmlj
b2RlIGluZGV4Ci0gICAgd3JpdGUxNihyZXN1bHQsIG1fZ2x5cGhzW21fZ2x5cGhzLnNpemUoKSAt
IDFdLmNvZGVwb2ludCk7IC8vIExhc3QgdW5pY29kZSBpbmRleAorICAgICAgICBhcHBlbmQzMigw
KTsgLy8gIkJpdCBhc3NpZ25tZW50cyBhcmUgcGVuZGluZy4gU2V0IHRvIDAiCisgICAgYXBwZW5k
MzIoMHg1NDRCNDI1Nyk7IC8vIEZvbnQgVmVuZG9yLiAiV0JLVCIKKyAgICBhcHBlbmQxNigobV93
ZWlnaHQgPj0gNyA/IDEgPDwgNSA6IDApIHwgKG1faXRhbGljID8gMSA6IDApKTsgLy8gRm9udCBQ
YXR0ZXJucy4KKyAgICBhcHBlbmQxNigwKTsgLy8gRmlyc3QgdW5pY29kZSBpbmRleAorICAgIGFw
cGVuZDE2KDB4RkZGRik7IC8vIExhc3QgdW5pY29kZSBpbmRleAogfQogCi12b2lkIFNWR1RvT1RG
Rm9udENvbnZlcnRlcjo6YXBwZW5kUE9TVFRhYmxlKFZlY3RvcjxjaGFyPiYgcmVzdWx0KSBjb25z
dAordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFBPU1RUYWJsZSgpCiB7Ci0gICAg
d3JpdGUzMihyZXN1bHQsIDB4MDAwMzAwMDApOyAvLyBGb3JtYXQuIFByaW50aW5nIGlzIHVuZGVm
aW5lZAotICAgIHdyaXRlMzIocmVzdWx0LCAwKTsgLy8gSXRhbGljIGFuZ2xlIGluIGRlZ3JlZXMK
LSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vIFVuZGVybGluZSBwb3NpdGlvbgotICAgIHdyaXRl
MTYocmVzdWx0LCAwKTsgLy8gVW5kZXJsaW5lIHRoaWNrbmVzcwotICAgIHdyaXRlMzIocmVzdWx0
LCAwKTsgLy8gTW9ub3NwYWNlZAotICAgIHdyaXRlMzIocmVzdWx0LCAwKTsgLy8gIk1pbmltdW0g
bWVtb3J5IHVzYWdlIHdoZW4gYSBUcnVlVHlwZSBmb250IGlzIGRvd25sb2FkZWQgYXMgYSBUeXBl
IDQyIGZvbnQiCi0gICAgd3JpdGUzMihyZXN1bHQsIDApOyAvLyAiTWF4aW11bSBtZW1vcnkgdXNh
Z2Ugd2hlbiBhIFRydWVUeXBlIGZvbnQgaXMgZG93bmxvYWRlZCBhcyBhIFR5cGUgNDIgZm9udCIK
LSAgICB3cml0ZTMyKHJlc3VsdCwgMCk7IC8vICJNaW5pbXVtIG1lbW9yeSB1c2FnZSB3aGVuIGEg
VHJ1ZVR5cGUgZm9udCBpcyBkb3dubG9hZGVkIGFzIGEgVHlwZSAxIGZvbnQiCi0gICAgd3JpdGUz
MihyZXN1bHQsIDApOyAvLyAiTWF4aW11bSBtZW1vcnkgdXNhZ2Ugd2hlbiBhIFRydWVUeXBlIGZv
bnQgaXMgZG93bmxvYWRlZCBhcyBhIFR5cGUgMSBmb250IgorICAgIGFwcGVuZDMyKDB4MDAwMzAw
MDApOyAvLyBGb3JtYXQuIFByaW50aW5nIGlzIHVuZGVmaW5lZAorICAgIGFwcGVuZDMyKDApOyAv
LyBJdGFsaWMgYW5nbGUgaW4gZGVncmVlcworICAgIGFwcGVuZDE2KDApOyAvLyBVbmRlcmxpbmUg
cG9zaXRpb24KKyAgICBhcHBlbmQxNigwKTsgLy8gVW5kZXJsaW5lIHRoaWNrbmVzcworICAgIGFw
cGVuZDMyKDApOyAvLyBNb25vc3BhY2VkCisgICAgYXBwZW5kMzIoMCk7IC8vICJNaW5pbXVtIG1l
bW9yeSB1c2FnZSB3aGVuIGEgVHJ1ZVR5cGUgZm9udCBpcyBkb3dubG9hZGVkIGFzIGEgVHlwZSA0
MiBmb250IgorICAgIGFwcGVuZDMyKDApOyAvLyAiTWF4aW11bSBtZW1vcnkgdXNhZ2Ugd2hlbiBh
IFRydWVUeXBlIGZvbnQgaXMgZG93bmxvYWRlZCBhcyBhIFR5cGUgNDIgZm9udCIKKyAgICBhcHBl
bmQzMigwKTsgLy8gIk1pbmltdW0gbWVtb3J5IHVzYWdlIHdoZW4gYSBUcnVlVHlwZSBmb250IGlz
IGRvd25sb2FkZWQgYXMgYSBUeXBlIDEgZm9udCIKKyAgICBhcHBlbmQzMigwKTsgLy8gIk1heGlt
dW0gbWVtb3J5IHVzYWdlIHdoZW4gYSBUcnVlVHlwZSBmb250IGlzIGRvd25sb2FkZWQgYXMgYSBU
eXBlIDEgZm9udCIKIH0KIAogc3RhdGljIGJvb2wgaXNWYWxpZFN0cmluZ0ZvckNGRihjb25zdCBT
dHJpbmcmIHN0cmluZykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RyaW5nLmxl
bmd0aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKHN0cmluZ1tpXSA8IDMzIHx8IHN0cmluZ1tpXSA+
IDEyNikKKyAgICAgICAgYXV0byBjID0gc3RyaW5nW2ldOworICAgICAgICBpZiAoYyA8IDMzIHx8
IGMgPiAxMjYpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0
cnVlOwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRDRkZWYWxpZFN0cmluZyhWZWN0b3I8Y2hhcj4m
IG91dHB1dCwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRl
cjo6YXBwZW5kQ0ZGVmFsaWRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgQVNT
RVJUKGlzVmFsaWRTdHJpbmdGb3JDRkYoc3RyaW5nKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKQotICAgICAgICBvdXRwdXQuYXBwZW5kKHN0cmlu
Z1tpXSk7CisgICAgICAgIG1fcmVzdWx0LmFwcGVuZChzdHJpbmdbaV0pOwogfQogCi12b2lkIFNW
R1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kQ0ZGVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQp
IGNvbnN0Cit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kQ0ZGVGFibGUoKQogewot
ICAgIGF1dG8gc3RhcnRpbmdPZmZzZXQgPSByZXN1bHQuc2l6ZSgpOworICAgIGF1dG8gc3RhcnRp
bmdPZmZzZXQgPSBtX3Jlc3VsdC5zaXplKCk7CiAgICAgLy8gSGVhZGVyCi0gICAgcmVzdWx0LmFw
cGVuZCgxKTsgLy8gTWFqb3IgdmVyc2lvbgotICAgIHJlc3VsdC5hcHBlbmQoMCk7IC8vIE1pbm9y
IHZlcnNpb24KLSAgICByZXN1bHQuYXBwZW5kKDQpOyAvLyBIZWFkZXIgc2l6ZQotICAgIHJlc3Vs
dC5hcHBlbmQoNCk7IC8vIE9mZnNldHMgd2l0aGluIENGRiB0YWJsZSBhcmUgNCBieXRlcyBsb25n
CisgICAgbV9yZXN1bHQuYXBwZW5kKDEpOyAvLyBNYWpvciB2ZXJzaW9uCisgICAgbV9yZXN1bHQu
YXBwZW5kKDApOyAvLyBNaW5vciB2ZXJzaW9uCisgICAgbV9yZXN1bHQuYXBwZW5kKDQpOyAvLyBI
ZWFkZXIgc2l6ZQorICAgIG1fcmVzdWx0LmFwcGVuZCg0KTsgLy8gT2Zmc2V0cyB3aXRoaW4gQ0ZG
IHRhYmxlIGFyZSA0IGJ5dGVzIGxvbmcKIAogICAgIC8vIE5hbWUgSU5ERVgKICAgICBTdHJpbmcg
Zm9udE5hbWU7CkBAIC00NDUsMTEgKzQ3NywxMSBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRl
cjo6YXBwZW5kQ0ZGVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0CiAgICAgICAgIGlm
IChpc1ZhbGlkU3RyaW5nRm9yQ0ZGKHBvdGVudGlhbEZvbnROYW1lKSkKICAgICAgICAgICAgIGZv
bnROYW1lID0gcG90ZW50aWFsRm9udE5hbWU7CiAgICAgfQotICAgIHdyaXRlMTYocmVzdWx0LCAx
KTsgLy8gSU5ERVggY29udGFpbnMgMSBlbGVtZW50Ci0gICAgcmVzdWx0LmFwcGVuZCg0KTsgLy8g
T2Zmc2V0cyBpbiB0aGlzIElOREVYIGFyZSA0IGJ5dGVzIGxvbmcKLSAgICB3cml0ZTMyKHJlc3Vs
dCwgMSk7IC8vIDEtaW5kZXggb2Zmc2V0IG9mIG5hbWUgZGF0YQotICAgIHdyaXRlMzIocmVzdWx0
LCBmb250TmFtZS5sZW5ndGgoKSArIDEpOyAvLyAxLWluZGV4IG9mZnNldCBqdXN0IHBhc3QgZW5k
IG9mIG5hbWUgZGF0YQotICAgIGFwcGVuZENGRlZhbGlkU3RyaW5nKHJlc3VsdCwgZm9udE5hbWUp
OworICAgIGFwcGVuZDE2KDEpOyAvLyBJTkRFWCBjb250YWlucyAxIGVsZW1lbnQKKyAgICBtX3Jl
c3VsdC5hcHBlbmQoNCk7IC8vIE9mZnNldHMgaW4gdGhpcyBJTkRFWCBhcmUgNCBieXRlcyBsb25n
CisgICAgYXBwZW5kMzIoMSk7IC8vIDEtaW5kZXggb2Zmc2V0IG9mIG5hbWUgZGF0YQorICAgIGFw
cGVuZDMyKGZvbnROYW1lLmxlbmd0aCgpICsgMSk7IC8vIDEtaW5kZXggb2Zmc2V0IGp1c3QgcGFz
dCBlbmQgb2YgbmFtZSBkYXRhCisgICAgYXBwZW5kQ0ZGVmFsaWRTdHJpbmcoZm9udE5hbWUpOwog
CiAgICAgU3RyaW5nIHdlaWdodDsKICAgICBpZiAobV9mb250RmFjZUVsZW1lbnQpIHsKQEAgLTQ2
OSw5MSArNTAxLDkxIEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRDRkZUYWJs
ZShWZWN0b3I8Y2hhcj4mIHJlc3VsdCkgY29uc3QKICAgICBjb25zdCB1bnNpZ25lZCBzaXplT2ZU
b3BJbmRleCA9IDQ1ICsgKHdlaWdodC5pc0VtcHR5KCkgPyAwIDogNik7CiAKICAgICAvLyBUb3Ag
RElDVCBJTkRFWC4KLSAgICB3cml0ZTE2KHJlc3VsdCwgMSk7IC8vIElOREVYIGNvbnRhaW5zIDEg
ZWxlbWVudAotICAgIHJlc3VsdC5hcHBlbmQoNCk7IC8vIE9mZnNldHMgaW4gdGhpcyBJTkRFWCBh
cmUgNCBieXRlcyBsb25nCi0gICAgd3JpdGUzMihyZXN1bHQsIDEpOyAvLyAxLWluZGV4IG9mZnNl
dCBvZiBESUNUIGRhdGEKLSAgICB3cml0ZTMyKHJlc3VsdCwgMSArIHNpemVPZlRvcEluZGV4KTsg
Ly8gMS1pbmRleCBvZmZzZXQganVzdCBwYXN0IGVuZCBvZiBESUNUIGRhdGEKKyAgICBhcHBlbmQx
NigxKTsgLy8gSU5ERVggY29udGFpbnMgMSBlbGVtZW50CisgICAgbV9yZXN1bHQuYXBwZW5kKDQp
OyAvLyBPZmZzZXRzIGluIHRoaXMgSU5ERVggYXJlIDQgYnl0ZXMgbG9uZworICAgIGFwcGVuZDMy
KDEpOyAvLyAxLWluZGV4IG9mZnNldCBvZiBESUNUIGRhdGEKKyAgICBhcHBlbmQzMigxICsgc2l6
ZU9mVG9wSW5kZXgpOyAvLyAxLWluZGV4IG9mZnNldCBqdXN0IHBhc3QgZW5kIG9mIERJQ1QgZGF0
YQogCiAgICAgLy8gRElDVCBpbmZvcm1hdGlvbgogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICB1
bnNpZ25lZCB0b3BEaWN0U3RhcnQgPSByZXN1bHQuc2l6ZSgpOworICAgIHVuc2lnbmVkIHRvcERp
Y3RTdGFydCA9IG1fcmVzdWx0LnNpemUoKTsKICNlbmRpZgotICAgIHJlc3VsdC5hcHBlbmQob3Bl
cmFuZDMyQml0KTsKLSAgICB3cml0ZTMyKHJlc3VsdCwgdXNlckRlZmluZWRTdHJpbmdTdGFydElu
ZGV4KTsKLSAgICByZXN1bHQuYXBwZW5kKGZ1bGxOYW1lS2V5KTsKLSAgICByZXN1bHQuYXBwZW5k
KG9wZXJhbmQzMkJpdCk7Ci0gICAgd3JpdGUzMihyZXN1bHQsIHVzZXJEZWZpbmVkU3RyaW5nU3Rh
cnRJbmRleCk7Ci0gICAgcmVzdWx0LmFwcGVuZChmYW1pbHlOYW1lS2V5KTsKKyAgICBtX3Jlc3Vs
dC5hcHBlbmQob3BlcmFuZDMyQml0KTsKKyAgICBhcHBlbmQzMih1c2VyRGVmaW5lZFN0cmluZ1N0
YXJ0SW5kZXgpOworICAgIG1fcmVzdWx0LmFwcGVuZChmdWxsTmFtZUtleSk7CisgICAgbV9yZXN1
bHQuYXBwZW5kKG9wZXJhbmQzMkJpdCk7CisgICAgYXBwZW5kMzIodXNlckRlZmluZWRTdHJpbmdT
dGFydEluZGV4KTsKKyAgICBtX3Jlc3VsdC5hcHBlbmQoZmFtaWx5TmFtZUtleSk7CiAgICAgaWYg
KCF3ZWlnaHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0
KTsKLSAgICAgICAgd3JpdGUzMihyZXN1bHQsIHVzZXJEZWZpbmVkU3RyaW5nU3RhcnRJbmRleCAr
IDEpOwotICAgICAgICByZXN1bHQuYXBwZW5kKHdlaWdodEtleSk7CisgICAgICAgIG1fcmVzdWx0
LmFwcGVuZChvcGVyYW5kMzJCaXQpOworICAgICAgICBhcHBlbmQzMih1c2VyRGVmaW5lZFN0cmlu
Z1N0YXJ0SW5kZXggKyAxKTsKKyAgICAgICAgbV9yZXN1bHQuYXBwZW5kKHdlaWdodEtleSk7CiAg
ICAgfQotICAgIHJlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsKLSAgICB3cml0ZTMyKHJlc3Vs
dCwgY2xhbXBUbzxpbnQzMl90PihtX2JvdW5kaW5nQm94LngoKSkpOwotICAgIHJlc3VsdC5hcHBl
bmQob3BlcmFuZDMyQml0KTsKLSAgICB3cml0ZTMyKHJlc3VsdCwgY2xhbXBUbzxpbnQzMl90Piht
X2JvdW5kaW5nQm94Lm1heFgoKSkpOwotICAgIHJlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsK
LSAgICB3cml0ZTMyKHJlc3VsdCwgY2xhbXBUbzxpbnQzMl90PihtX2JvdW5kaW5nQm94LnkoKSkp
OwotICAgIHJlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsKLSAgICB3cml0ZTMyKHJlc3VsdCwg
Y2xhbXBUbzxpbnQzMl90PihtX2JvdW5kaW5nQm94Lm1heFkoKSkpOwotICAgIHJlc3VsdC5hcHBl
bmQoZm9udEJCb3hLZXkpOwotICAgIHJlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsKLSAgICB1
bnNpZ25lZCBjaGFyc2V0T2Zmc2V0TG9jYXRpb24gPSByZXN1bHQuc2l6ZSgpOwotICAgIHdyaXRl
MzIocmVzdWx0LCAwKTsgLy8gT2Zmc2V0IG9mIENoYXJzZXQgaW5mby4gV2lsbCBiZSBvdmVyd3Jp
dHRlbiBsYXRlci4KLSAgICByZXN1bHQuYXBwZW5kKGNoYXJzZXRJbmRleEtleSk7Ci0gICAgcmVz
dWx0LmFwcGVuZChvcGVyYW5kMzJCaXQpOwotICAgIHVuc2lnbmVkIGNoYXJzdHJpbmdzT2Zmc2V0
TG9jYXRpb24gPSByZXN1bHQuc2l6ZSgpOwotICAgIHdyaXRlMzIocmVzdWx0LCAwKTsgLy8gT2Zm
c2V0IG9mIENoYXJTdHJpbmdzIElOREVYLiBXaWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgotICAg
IHJlc3VsdC5hcHBlbmQoY2hhcnN0cmluZ3NJbmRleEtleSk7Ci0gICAgQVNTRVJUKHJlc3VsdC5z
aXplKCkgPT0gdG9wRGljdFN0YXJ0ICsgc2l6ZU9mVG9wSW5kZXgpOworICAgIG1fcmVzdWx0LmFw
cGVuZChvcGVyYW5kMzJCaXQpOworICAgIGFwcGVuZDMyKGNsYW1wVG88aW50MzJfdD4obV9ib3Vu
ZGluZ0JveC54KCkpKTsKKyAgICBtX3Jlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsKKyAgICBh
cHBlbmQzMihjbGFtcFRvPGludDMyX3Q+KG1fYm91bmRpbmdCb3gubWF4WCgpKSk7CisgICAgbV9y
ZXN1bHQuYXBwZW5kKG9wZXJhbmQzMkJpdCk7CisgICAgYXBwZW5kMzIoY2xhbXBUbzxpbnQzMl90
PihtX2JvdW5kaW5nQm94LnkoKSkpOworICAgIG1fcmVzdWx0LmFwcGVuZChvcGVyYW5kMzJCaXQp
OworICAgIGFwcGVuZDMyKGNsYW1wVG88aW50MzJfdD4obV9ib3VuZGluZ0JveC5tYXhZKCkpKTsK
KyAgICBtX3Jlc3VsdC5hcHBlbmQoZm9udEJCb3hLZXkpOworICAgIG1fcmVzdWx0LmFwcGVuZChv
cGVyYW5kMzJCaXQpOworICAgIHVuc2lnbmVkIGNoYXJzZXRPZmZzZXRMb2NhdGlvbiA9IG1fcmVz
dWx0LnNpemUoKTsKKyAgICBhcHBlbmQzMigwKTsgLy8gT2Zmc2V0IG9mIENoYXJzZXQgaW5mby4g
V2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlci4KKyAgICBtX3Jlc3VsdC5hcHBlbmQoY2hhcnNldElu
ZGV4S2V5KTsKKyAgICBtX3Jlc3VsdC5hcHBlbmQob3BlcmFuZDMyQml0KTsKKyAgICB1bnNpZ25l
ZCBjaGFyc3RyaW5nc09mZnNldExvY2F0aW9uID0gbV9yZXN1bHQuc2l6ZSgpOworICAgIGFwcGVu
ZDMyKDApOyAvLyBPZmZzZXQgb2YgQ2hhclN0cmluZ3MgSU5ERVguIFdpbGwgYmUgb3ZlcndyaXR0
ZW4gbGF0ZXIuCisgICAgbV9yZXN1bHQuYXBwZW5kKGNoYXJzdHJpbmdzSW5kZXhLZXkpOworICAg
IEFTU0VSVChtX3Jlc3VsdC5zaXplKCkgPT0gdG9wRGljdFN0YXJ0ICsgc2l6ZU9mVG9wSW5kZXgp
OwogCiAgICAgLy8gU3RyaW5nIElOREVYCi0gICAgd3JpdGUxNihyZXN1bHQsIDEgKyAod2VpZ2h0
LmlzRW1wdHkoKSA/IDAgOiAxKSk7IC8vIE51bWJlciBvZiBlbGVtZW50cyBpbiBJTkRFWAotICAg
IHJlc3VsdC5hcHBlbmQoNCk7IC8vIE9mZnNldHMgaW4gdGhpcyBJTkRFWCBhcmUgNCBieXRlcyBs
b25nCisgICAgYXBwZW5kMTYoMSArICh3ZWlnaHQuaXNFbXB0eSgpID8gMCA6IDEpKTsgLy8gTnVt
YmVyIG9mIGVsZW1lbnRzIGluIElOREVYCisgICAgbV9yZXN1bHQuYXBwZW5kKDQpOyAvLyBPZmZz
ZXRzIGluIHRoaXMgSU5ERVggYXJlIDQgYnl0ZXMgbG9uZwogICAgIHVpbnQzMl90IG9mZnNldCA9
IDE7Ci0gICAgd3JpdGUzMihyZXN1bHQsIG9mZnNldCk7CisgICAgYXBwZW5kMzIob2Zmc2V0KTsK
ICAgICBvZmZzZXQgKz0gZm9udE5hbWUubGVuZ3RoKCk7Ci0gICAgd3JpdGUzMihyZXN1bHQsIG9m
ZnNldCk7CisgICAgYXBwZW5kMzIob2Zmc2V0KTsKICAgICBpZiAoIXdlaWdodC5pc0VtcHR5KCkp
IHsKICAgICAgICAgb2Zmc2V0ICs9IHdlaWdodC5sZW5ndGgoKTsKLSAgICAgICAgd3JpdGUzMihy
ZXN1bHQsIG9mZnNldCk7CisgICAgICAgIGFwcGVuZDMyKG9mZnNldCk7CiAgICAgfQotICAgIGFw
cGVuZENGRlZhbGlkU3RyaW5nKHJlc3VsdCwgZm9udE5hbWUpOwotICAgIGFwcGVuZENGRlZhbGlk
U3RyaW5nKHJlc3VsdCwgd2VpZ2h0KTsKKyAgICBhcHBlbmRDRkZWYWxpZFN0cmluZyhmb250TmFt
ZSk7CisgICAgYXBwZW5kQ0ZGVmFsaWRTdHJpbmcod2VpZ2h0KTsKIAotICAgIHdyaXRlMTYocmVz
dWx0LCAwKTsgLy8gRW1wdHkgc3Vicm91dGluZSBJTkRFWAorICAgIGFwcGVuZDE2KDApOyAvLyBF
bXB0eSBzdWJyb3V0aW5lIElOREVYCiAKICAgICAvLyBDaGFyc2V0IGluZm8KLSAgICBvdmVyd3Jp
dGUzMihyZXN1bHQsIGNoYXJzZXRPZmZzZXRMb2NhdGlvbiwgcmVzdWx0LnNpemUoKSAtIHN0YXJ0
aW5nT2Zmc2V0KTsKLSAgICByZXN1bHQuYXBwZW5kKDApOworICAgIG92ZXJ3cml0ZTMyKGNoYXJz
ZXRPZmZzZXRMb2NhdGlvbiwgbV9yZXN1bHQuc2l6ZSgpIC0gc3RhcnRpbmdPZmZzZXQpOworICAg
IG1fcmVzdWx0LmFwcGVuZCgwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9nbHlw
aHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHdyaXRlMTYocmVzdWx0LCBpKTsKKyAgICAgICAgYXBw
ZW5kMTYoaSk7CiAKICAgICAvLyBDaGFyU3RyaW5ncyBJTkRFWAotICAgIG92ZXJ3cml0ZTMyKHJl
c3VsdCwgY2hhcnN0cmluZ3NPZmZzZXRMb2NhdGlvbiwgcmVzdWx0LnNpemUoKSAtIHN0YXJ0aW5n
T2Zmc2V0KTsKLSAgICB3cml0ZTE2KHJlc3VsdCwgbV9nbHlwaHMuc2l6ZSgpKTsKLSAgICByZXN1
bHQuYXBwZW5kKDQpOyAvLyBPZmZzZXRzIGluIHRoaXMgSU5ERVggYXJlIDQgYnl0ZXMgbG9uZwor
ICAgIG92ZXJ3cml0ZTMyKGNoYXJzdHJpbmdzT2Zmc2V0TG9jYXRpb24sIG1fcmVzdWx0LnNpemUo
KSAtIHN0YXJ0aW5nT2Zmc2V0KTsKKyAgICBhcHBlbmQxNihtX2dseXBocy5zaXplKCkpOworICAg
IG1fcmVzdWx0LmFwcGVuZCg0KTsgLy8gT2Zmc2V0cyBpbiB0aGlzIElOREVYIGFyZSA0IGJ5dGVz
IGxvbmcKICAgICBvZmZzZXQgPSAxOwotICAgIHdyaXRlMzIocmVzdWx0LCBvZmZzZXQpOworICAg
IGFwcGVuZDMyKG9mZnNldCk7CiAgICAgZm9yIChhdXRvJiBnbHlwaCA6IG1fZ2x5cGhzKSB7CiAg
ICAgICAgIG9mZnNldCArPSBnbHlwaC5jaGFyU3RyaW5nLnNpemUoKTsKLSAgICAgICAgd3JpdGUz
MihyZXN1bHQsIG9mZnNldCk7CisgICAgICAgIGFwcGVuZDMyKG9mZnNldCk7CiAgICAgfQogICAg
IGZvciAoYXV0byYgZ2x5cGggOiBtX2dseXBocykKLSAgICAgICAgcmVzdWx0LmFwcGVuZFZlY3Rv
cihnbHlwaC5jaGFyU3RyaW5nKTsKKyAgICAgICAgbV9yZXN1bHQuYXBwZW5kVmVjdG9yKGdseXBo
LmNoYXJTdHJpbmcpOwogfQogCi12b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kVk9S
R1RhYmxlKFZlY3RvcjxjaGFyPiYgcmVzdWx0KSBjb25zdAordm9pZCBTVkdUb09URkZvbnRDb252
ZXJ0ZXI6OmFwcGVuZFZPUkdUYWJsZSgpCiB7Ci0gICAgd3JpdGUxNihyZXN1bHQsIDEpOyAvLyBN
YWpvciB2ZXJzaW9uCi0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBNaW5vciB2ZXJzaW9uCisg
ICAgYXBwZW5kMTYoMSk7IC8vIE1ham9yIHZlcnNpb24KKyAgICBhcHBlbmQxNigwKTsgLy8gTWlu
b3IgdmVyc2lvbgogCiAgICAgYm9vbCBvazsKICAgICBpbnQxNl90IGRlZmF1bHRWZXJ0aWNhbE9y
aWdpblkgPSBjbGFtcFRvPGludDE2X3Q+KG1fZm9udEVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShT
VkdOYW1lczo6dmVydF9vcmlnaW5feUF0dHIpLnRvSW50KCZvaykpOwogICAgIGlmICghb2sgJiYg
bV9taXNzaW5nR2x5cGhFbGVtZW50KQogICAgICAgICBkZWZhdWx0VmVydGljYWxPcmlnaW5ZID0g
Y2xhbXBUbzxpbnQxNl90PihtX21pc3NpbmdHbHlwaEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUo
U1ZHTmFtZXM6OnZlcnRfb3JpZ2luX3lBdHRyKS50b0ludCgpKTsKLSAgICB3cml0ZTE2KHJlc3Vs
dCwgZGVmYXVsdFZlcnRpY2FsT3JpZ2luWSk7CisgICAgYXBwZW5kMTYoZGVmYXVsdFZlcnRpY2Fs
T3JpZ2luWSk7CiAKICAgICBWZWN0b3I8c3RkOjpwYWlyPHVpbnQxNl90LCBpbnQxNl90Pj4gb3Jp
Z2luczsKICAgICBmb3IgKHVpbnQxNl90IGkgPSAwOyBpIDwgbV9nbHlwaHMuc2l6ZSgpOyArK2kp
IHsKQEAgLTU2NywzOSArNTk5LDM5IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBl
bmRWT1JHVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgd3JpdGUxNihyZXN1bHQsIG9yaWdpbnMuc2l6ZSgpKTsKKyAg
ICBhcHBlbmQxNihvcmlnaW5zLnNpemUoKSk7CiAKICAgICBmb3IgKGF1dG8mIHAgOiBvcmlnaW5z
KSB7Ci0gICAgICAgIHdyaXRlMTYocmVzdWx0LCBwLmZpcnN0KTsKLSAgICAgICAgd3JpdGUxNihy
ZXN1bHQsIHAuc2Vjb25kKTsKKyAgICAgICAgYXBwZW5kMTYocC5maXJzdCk7CisgICAgICAgIGFw
cGVuZDE2KHAuc2Vjb25kKTsKICAgICB9CiB9CiAKLXZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVy
OjphcHBlbmRWSEVBVGFibGUoVmVjdG9yPGNoYXI+JiByZXN1bHQpIGNvbnN0Cit2b2lkIFNWR1Rv
T1RGRm9udENvbnZlcnRlcjo6YXBwZW5kVkhFQVRhYmxlKCkKIHsKLSAgICB3cml0ZTMyKHJlc3Vs
dCwgMHgwMDAxMTAwMCk7IC8vIFZlcnNpb24KLSAgICB3cml0ZTE2KHJlc3VsdCwgbV91bml0c1Bl
ckVtIC8gMik7IC8vIFZlcnRpY2FsIHR5cG9ncmFwaGljIGFzY2VuZGVyICh2ZXJ0aWNhbCBiYXNl
bGluZSB0byB0aGUgcmlnaHQpCi0gICAgd3JpdGUxNihyZXN1bHQsIGNsYW1wVG88aW50MTZfdD4o
LXN0YXRpY19jYXN0PGludD4obV91bml0c1BlckVtIC8gMikpKTsgLy8gVmVydGljYWwgdHlwb2dy
YXBoaWMgZGVzY2VuZGVyCi0gICAgd3JpdGUxNihyZXN1bHQsIG1fdW5pdHNQZXJFbSAvIDEwKTsg
Ly8gVmVydGljYWwgdHlwb2dyYXBoaWMgbGluZSBnYXAKLSAgICB3cml0ZTE2KHJlc3VsdCwgY2xh
bXBUbzxpbnQxNl90PihtX2FkdmFuY2VIZWlnaHRNYXgpKTsKLSAgICB3cml0ZTE2KHJlc3VsdCwg
Y2xhbXBUbzxpbnQxNl90PihtX3VuaXRzUGVyRW0gLSBtX2JvdW5kaW5nQm94Lm1heFkoKSkpOyAv
LyBNaW5pbXVtIHRvcCBzaWRlIGJlYXJpbmcKLSAgICB3cml0ZTE2KHJlc3VsdCwgY2xhbXBUbzxp
bnQxNl90PihtX2JvdW5kaW5nQm94LnkoKSkpOyAvLyBNaW5pbXVtIGJvdHRvbSBzaWRlIGJlYXJp
bmcKLSAgICB3cml0ZTE2KHJlc3VsdCwgY2xhbXBUbzxpbnQxNl90PihtX3VuaXRzUGVyRW0gLSBt
X2JvdW5kaW5nQm94LnkoKSkpOyAvLyBZIG1heGltdW0gZXh0ZW50CisgICAgYXBwZW5kMzIoMHgw
MDAxMTAwMCk7IC8vIFZlcnNpb24KKyAgICBhcHBlbmQxNihtX3VuaXRzUGVyRW0gLyAyKTsgLy8g
VmVydGljYWwgdHlwb2dyYXBoaWMgYXNjZW5kZXIgKHZlcnRpY2FsIGJhc2VsaW5lIHRvIHRoZSBy
aWdodCkKKyAgICBhcHBlbmQxNihjbGFtcFRvPGludDE2X3Q+KC1zdGF0aWNfY2FzdDxpbnQ+KG1f
dW5pdHNQZXJFbSAvIDIpKSk7IC8vIFZlcnRpY2FsIHR5cG9ncmFwaGljIGRlc2NlbmRlcgorICAg
IGFwcGVuZDE2KG1fdW5pdHNQZXJFbSAvIDEwKTsgLy8gVmVydGljYWwgdHlwb2dyYXBoaWMgbGlu
ZSBnYXAKKyAgICBhcHBlbmQxNihjbGFtcFRvPGludDE2X3Q+KG1fYWR2YW5jZUhlaWdodE1heCkp
OworICAgIGFwcGVuZDE2KGNsYW1wVG88aW50MTZfdD4obV91bml0c1BlckVtIC0gbV9ib3VuZGlu
Z0JveC5tYXhZKCkpKTsgLy8gTWluaW11bSB0b3Agc2lkZSBiZWFyaW5nCisgICAgYXBwZW5kMTYo
Y2xhbXBUbzxpbnQxNl90PihtX2JvdW5kaW5nQm94LnkoKSkpOyAvLyBNaW5pbXVtIGJvdHRvbSBz
aWRlIGJlYXJpbmcKKyAgICBhcHBlbmQxNihjbGFtcFRvPGludDE2X3Q+KG1fdW5pdHNQZXJFbSAt
IG1fYm91bmRpbmdCb3gueSgpKSk7IC8vIFkgbWF4aW11bSBleHRlbnQKICAgICAvLyBXZWJLaXQg
ZHJhd3MgdGhlIGNhcmV0Ci0gICAgd3JpdGUxNihyZXN1bHQsIDEpOyAvLyBWZXJ0aWNhbCBjYXJl
dAotICAgIHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gVmVydGljYWwgY2FyZXQKLSAgICB3cml0ZTE2
KHJlc3VsdCwgMCk7IC8vICJTZXQgdmFsdWUgdG8gMCBmb3Igbm9uLXNsYW50ZWQgZm9udHMiCi0g
ICAgd3JpdGUzMihyZXN1bHQsIDApOyAvLyBSZXNlcnZlZAotICAgIHdyaXRlMzIocmVzdWx0LCAw
KTsgLy8gUmVzZXJ2ZWQKLSAgICB3cml0ZTE2KHJlc3VsdCwgMCk7IC8vICJTZXQgdG8gMCIKLSAg
ICB3cml0ZTE2KHJlc3VsdCwgbV9nbHlwaHMuc2l6ZSgpKTsgLy8gTnVtYmVyIG9mIGFkdmFuY2Ug
aGVpZ2h0cyBpbiBWTVRYIHRhYmxlCisgICAgYXBwZW5kMTYoMSk7IC8vIFZlcnRpY2FsIGNhcmV0
CisgICAgYXBwZW5kMTYoMCk7IC8vIFZlcnRpY2FsIGNhcmV0CisgICAgYXBwZW5kMTYoMCk7IC8v
ICJTZXQgdmFsdWUgdG8gMCBmb3Igbm9uLXNsYW50ZWQgZm9udHMiCisgICAgYXBwZW5kMzIoMCk7
IC8vIFJlc2VydmVkCisgICAgYXBwZW5kMzIoMCk7IC8vIFJlc2VydmVkCisgICAgYXBwZW5kMTYo
MCk7IC8vICJTZXQgdG8gMCIKKyAgICBhcHBlbmQxNihtX2dseXBocy5zaXplKCkpOyAvLyBOdW1i
ZXIgb2YgYWR2YW5jZSBoZWlnaHRzIGluIFZNVFggdGFibGUKIH0KIAotdm9pZCBTVkdUb09URkZv
bnRDb252ZXJ0ZXI6OmFwcGVuZFZNVFhUYWJsZShWZWN0b3I8Y2hhcj4mIHJlc3VsdCkgY29uc3QK
K3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRWTVRYVGFibGUoKQogewogICAgIGZv
ciAoYXV0byYgZ2x5cGggOiBtX2dseXBocykgewotICAgICAgICB3cml0ZTE2KHJlc3VsdCwgY2xh
bXBUbzx1aW50MTZfdD4oZ2x5cGgudmVydGljYWxBZHZhbmNlKSk7Ci0gICAgICAgIHdyaXRlMTYo
cmVzdWx0LCBjbGFtcFRvPGludDE2X3Q+KG1fdW5pdHNQZXJFbSAtIGdseXBoLmJvdW5kaW5nQm94
Lm1heFkoKSkpOyAvLyB0b3Agc2lkZSBiZWFyaW5nCisgICAgICAgIGFwcGVuZDE2KGNsYW1wVG88
dWludDE2X3Q+KGdseXBoLnZlcnRpY2FsQWR2YW5jZSkpOworICAgICAgICBhcHBlbmQxNihjbGFt
cFRvPGludDE2X3Q+KG1fdW5pdHNQZXJFbSAtIGdseXBoLmJvdW5kaW5nQm94Lm1heFkoKSkpOyAv
LyB0b3Agc2lkZSBiZWFyaW5nCiAgICAgfQogfQogCkBAIC02MDcsMTEgKzYzOSwxNCBAQCB2b2lk
IFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkQ29kZXBvaW50UmFuZ2VzKGNvbnN0IFVuaWNvZGVS
YW5nZXMmIHVuaWNvZGVSYW5nZQogewogICAgIGZvciAoYXV0byYgdW5pY29kZVJhbmdlIDogdW5p
Y29kZVJhbmdlcykgewogICAgICAgICBmb3IgKGF1dG8gY29kZXBvaW50ID0gdW5pY29kZVJhbmdl
LmZpcnN0OyBjb2RlcG9pbnQgPD0gdW5pY29kZVJhbmdlLnNlY29uZDsgKytjb2RlcG9pbnQpIHsK
LSAgICAgICAgICAgIGlmICghY29kZXBvaW50IHx8IGNvZGVwb2ludCA+PSBzdGQ6Om51bWVyaWNf
bGltaXRzPENvZGVwb2ludD46Om1heCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fY29kZXBvaW50VG9JbmRleE1hcC5maW5kKGNvZGVw
b2ludCk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbV9jb2RlcG9pbnRUb0luZGV4TWFw
LmVuZCgpKQotICAgICAgICAgICAgICAgIGdseXBoU2V0LmFkZChpdGVyYXRvci0+dmFsdWUpOwor
ICAgICAgICAgICAgVUNoYXIgYnVmZmVyWzJdOworICAgICAgICAgICAgdWludDhfdCBsZW5ndGgg
PSAwOworICAgICAgICAgICAgVUJvb2wgZXJyb3IgPSBmYWxzZTsKKyAgICAgICAgICAgIFUxNl9B
UFBFTkQoYnVmZmVyLCBsZW5ndGgsIDIsIGNvZGVwb2ludCwgZXJyb3IpOworICAgICAgICAgICAg
aWYgKCFlcnJvcikgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byBpbmRleCA6IG1fY29kZXBv
aW50c1RvSW5kaWNlc01hcC5nZXQoU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKSkpCisgICAgICAgICAg
ICAgICAgICAgIGdseXBoU2V0LmFkZChpbmRleCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC02MTksMjYgKzY1NCwxMiBAQCB2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRl
cjo6YWRkQ29kZXBvaW50UmFuZ2VzKGNvbnN0IFVuaWNvZGVSYW5nZXMmIHVuaWNvZGVSYW5nZQog
dm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFkZENvZGVwb2ludHMoY29uc3QgSGFzaFNldDxT
dHJpbmc+JiBjb2RlcG9pbnRzLCBIYXNoU2V0PEdseXBoPiYgZ2x5cGhTZXQpIGNvbnN0CiB7CiAg
ICAgZm9yIChhdXRvJiBjb2RlcG9pbnRTdHJpbmcgOiBjb2RlcG9pbnRzKSB7Ci0gICAgICAgIGF1
dG8gY29kZXBvaW50U3RyaW5nTGVuZ3RoID0gY29kZXBvaW50U3RyaW5nLmxlbmd0aCgpOwotICAg
ICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAgICAgd2hpbGUgKGkgPCBjb2RlcG9pbnRTdHJpbmdM
ZW5ndGgpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBDYW5vbmljYWxpemF0aW9uIG1pZ2h0IGJl
IG5lY2Vzc2FyeQotICAgICAgICAgICAgVUNoYXIzMiBjb2RlcG9pbnQ7Ci0gICAgICAgICAgICBp
ZiAoY29kZXBvaW50U3RyaW5nLmlzOEJpdCgpKQotICAgICAgICAgICAgICAgIGNvZGVwb2ludCA9
IGNvZGVwb2ludFN0cmluZy5jaGFyYWN0ZXJzOCgpW2krK107Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgVTE2X05FWFQoY29kZXBvaW50U3RyaW5nLmNoYXJhY3RlcnMxNigpLCBp
LCBjb2RlcG9pbnRTdHJpbmdMZW5ndGgsIGNvZGVwb2ludCk7Ci0KLSAgICAgICAgICAgIGlmICgh
Y29kZXBvaW50IHx8IGNvZGVwb2ludCA+PSBzdGQ6Om51bWVyaWNfbGltaXRzPENvZGVwb2ludD46
Om1heCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYXV0byBpbmRl
eEl0ZXIgPSBtX2NvZGVwb2ludFRvSW5kZXhNYXAuZmluZChjb2RlcG9pbnQpOwotICAgICAgICAg
ICAgaWYgKGluZGV4SXRlciAhPSBtX2NvZGVwb2ludFRvSW5kZXhNYXAuZW5kKCkpCi0gICAgICAg
ICAgICAgICAgZ2x5cGhTZXQuYWRkKGluZGV4SXRlci0+dmFsdWUpOwotICAgICAgICB9CisgICAg
ICAgIGZvciAoYXV0byBpbmRleCA6IG1fY29kZXBvaW50c1RvSW5kaWNlc01hcC5nZXQoY29kZXBv
aW50U3RyaW5nKSkKKyAgICAgICAgICAgIGdseXBoU2V0LmFkZChpbmRleCk7CiAgICAgfQogfQog
Ci12b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YWRkR2x5cGhOYW1lcyhjb25zdCBIYXNoU2V0
PFN0cmluZz4mIGdseXBoTmFtZXMsIEhhc2hTZXQ8dWludDE2X3Q+JiBnbHlwaFNldCkgY29uc3QK
K3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphZGRHbHlwaE5hbWVzKGNvbnN0IEhhc2hTZXQ8
U3RyaW5nPiYgZ2x5cGhOYW1lcywgSGFzaFNldDxHbHlwaD4mIGdseXBoU2V0KSBjb25zdAogewog
ICAgIGZvciAoYXV0byYgZ2x5cGhOYW1lIDogZ2x5cGhOYW1lcykgewogICAgICAgICBhdXRvIGlu
ZGV4SXRlciA9IG1fZ2x5cGhOYW1lVG9JbmRleE1hcC5maW5kKGdseXBoTmFtZSk7CkBAIC02Nzcs
NyArNjk4LDcgQEAgYXV0byBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmNvbXB1dGVLZXJuaW5nRGF0
YShib29sIChUOjoqYnVpbGRLZXJuaW5nUGFpcikoU1ZHS2UKIH0KIAogdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci1zaXplX3QgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRLRVJOU3VidGFibGUo
VmVjdG9yPGNoYXI+JiByZXN1bHQsIGJvb2wgKFQ6OipidWlsZEtlcm5pbmdQYWlyKShTVkdLZXJu
aW5nUGFpciYpIGNvbnN0LCB1aW50MTZfdCBjb3ZlcmFnZSkgY29uc3QKK3NpemVfdCBTVkdUb09U
RkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEtFUk5TdWJ0YWJsZShib29sIChUOjoqYnVpbGRLZXJuaW5n
UGFpcikoU1ZHS2VybmluZ1BhaXImKSBjb25zdCwgdWludDE2X3QgY292ZXJhZ2UpCiB7CiAgICAg
VmVjdG9yPEtlcm5pbmdEYXRhPiBrZXJuaW5nRGF0YSA9IGNvbXB1dGVLZXJuaW5nRGF0YTxUPihi
dWlsZEtlcm5pbmdQYWlyKTsKICAgICBzdGQ6OnNvcnQoa2VybmluZ0RhdGEuYmVnaW4oKSwga2Vy
bmluZ0RhdGEuZW5kKCkpOwpAQCAtNjg3LDUxICs3MDgsNTEgQEAgc2l6ZV90IFNWR1RvT1RGRm9u
dENvbnZlcnRlcjo6YXBwZW5kS0VSTlN1YnRhYmxlKFZlY3RvcjxjaGFyPiYgcmVzdWx0LCBib29s
IChUOjoKICAgICAgICAgc2l6ZU9mS2VybmluZ0RhdGFUYWJsZSA9IDE0OwogICAgIH0KIAotICAg
IHdyaXRlMTYocmVzdWx0LCAwKTsgLy8gVmVyc2lvbiBvZiBzdWJ0YWJsZQotICAgIHdyaXRlMTYo
cmVzdWx0LCBzaXplT2ZLZXJuaW5nRGF0YVRhYmxlKTsgLy8gTGVuZ3RoIG9mIHRoaXMgc3VidGFi
bGUKLSAgICB3cml0ZTE2KHJlc3VsdCwgY292ZXJhZ2UpOyAvLyBUYWJsZSBjb3ZlcmFnZSBiaXRm
aWVsZAorICAgIGFwcGVuZDE2KDApOyAvLyBWZXJzaW9uIG9mIHN1YnRhYmxlCisgICAgYXBwZW5k
MTYoc2l6ZU9mS2VybmluZ0RhdGFUYWJsZSk7IC8vIExlbmd0aCBvZiB0aGlzIHN1YnRhYmxlCisg
ICAgYXBwZW5kMTYoY292ZXJhZ2UpOyAvLyBUYWJsZSBjb3ZlcmFnZSBiaXRmaWVsZAogCiAgICAg
dWludDE2X3Qgcm91bmRlZE51bUtlcm5pbmdQYWlycyA9IHJvdW5kRG93blRvUG93ZXJPZlR3byhr
ZXJuaW5nRGF0YS5zaXplKCkpOwogCi0gICAgd3JpdGUxNihyZXN1bHQsIGtlcm5pbmdEYXRhLnNp
emUoKSk7Ci0gICAgd3JpdGUxNihyZXN1bHQsIHJvdW5kZWROdW1LZXJuaW5nUGFpcnMgKiA2KTsg
Ly8gc2VhcmNoUmFuZ2U6ICJUaGUgbGFyZ2VzdCBwb3dlciBvZiB0d28gbGVzcyB0aGFuIG9yIGVx
dWFsIHRvIHRoZSB2YWx1ZSBvZiBuUGFpcnMsIG11bHRpcGxpZWQgYnkgdGhlIHNpemUgaW4gYnl0
ZXMgb2YgYW4gZW50cnkgaW4gdGhlIHRhYmxlLiIKLSAgICB3cml0ZTE2KHJlc3VsdCwgaW50ZWdy
YWxMb2cyKHJvdW5kZWROdW1LZXJuaW5nUGFpcnMpKTsgLy8gZW50cnlTZWxlY3RvcjogImxvZzIg
b2YgdGhlIGxhcmdlc3QgcG93ZXIgb2YgdHdvIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFs
dWUgb2YgblBhaXJzLiIKLSAgICB3cml0ZTE2KHJlc3VsdCwgKGtlcm5pbmdEYXRhLnNpemUoKSAt
IHJvdW5kZWROdW1LZXJuaW5nUGFpcnMpICogNik7IC8vIHJhbmdlU2hpZnQ6ICJUaGUgdmFsdWUg
b2YgblBhaXJzIG1pbnVzIHRoZSBsYXJnZXN0IHBvd2VyIG9mIHR3byBsZXNzIHRoYW4gb3IgZXF1
YWwgdG8gblBhaXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZW4gbXVsdGlwbGllZCBieSB0
aGUgc2l6ZSBpbiBieXRlcyBvZiBhbiBlbnRyeSBpbiB0aGUgdGFibGUuIgorICAgIGFwcGVuZDE2
KGtlcm5pbmdEYXRhLnNpemUoKSk7CisgICAgYXBwZW5kMTYocm91bmRlZE51bUtlcm5pbmdQYWly
cyAqIDYpOyAvLyBzZWFyY2hSYW5nZTogIlRoZSBsYXJnZXN0IHBvd2VyIG9mIHR3byBsZXNzIHRo
YW4gb3IgZXF1YWwgdG8gdGhlIHZhbHVlIG9mIG5QYWlycywgbXVsdGlwbGllZCBieSB0aGUgc2l6
ZSBpbiBieXRlcyBvZiBhbiBlbnRyeSBpbiB0aGUgdGFibGUuIgorICAgIGFwcGVuZDE2KGludGVn
cmFsTG9nMihyb3VuZGVkTnVtS2VybmluZ1BhaXJzKSk7IC8vIGVudHJ5U2VsZWN0b3I6ICJsb2cy
IG9mIHRoZSBsYXJnZXN0IHBvd2VyIG9mIHR3byBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHZh
bHVlIG9mIG5QYWlycy4iCisgICAgYXBwZW5kMTYoKGtlcm5pbmdEYXRhLnNpemUoKSAtIHJvdW5k
ZWROdW1LZXJuaW5nUGFpcnMpICogNik7IC8vIHJhbmdlU2hpZnQ6ICJUaGUgdmFsdWUgb2YgblBh
aXJzIG1pbnVzIHRoZSBsYXJnZXN0IHBvd2VyIG9mIHR3byBsZXNzIHRoYW4gb3IgZXF1YWwgdG8g
blBhaXJzLAorICAgICAgICAvLyBhbmQgdGhlbiBtdWx0aXBsaWVkIGJ5IHRoZSBzaXplIGluIGJ5
dGVzIG9mIGFuIGVudHJ5IGluIHRoZSB0YWJsZS4iCiAKICAgICBmb3IgKGF1dG8mIGtlcm5pbmdE
YXRhIDoga2VybmluZ0RhdGEpIHsKLSAgICAgICAgd3JpdGUxNihyZXN1bHQsIGtlcm5pbmdEYXRh
LmdseXBoMSk7Ci0gICAgICAgIHdyaXRlMTYocmVzdWx0LCBrZXJuaW5nRGF0YS5nbHlwaDIpOwot
ICAgICAgICB3cml0ZTE2KHJlc3VsdCwga2VybmluZ0RhdGEuYWRqdXN0bWVudCk7CisgICAgICAg
IGFwcGVuZDE2KGtlcm5pbmdEYXRhLmdseXBoMSk7CisgICAgICAgIGFwcGVuZDE2KGtlcm5pbmdE
YXRhLmdseXBoMik7CisgICAgICAgIGFwcGVuZDE2KGtlcm5pbmdEYXRhLmFkanVzdG1lbnQpOwog
ICAgIH0KIAogICAgIHJldHVybiBzaXplT2ZLZXJuaW5nRGF0YVRhYmxlOwogfQogCi12b2lkIFNW
R1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kS0VSTlRhYmxlKFZlY3RvcjxjaGFyPiYgcmVzdWx0
KSBjb25zdAordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEtFUk5UYWJsZSgpCiB7
Ci0gICAgd3JpdGUxNihyZXN1bHQsIDApOyAvLyBWZXJzaW9uCi0gICAgd3JpdGUxNihyZXN1bHQs
IDIpOyAvLyBOdW1iZXIgb2Ygc3VidGFibGVzCisgICAgYXBwZW5kMTYoMCk7IC8vIFZlcnNpb24K
KyAgICBhcHBlbmQxNigyKTsgLy8gTnVtYmVyIG9mIHN1YnRhYmxlcwogCiAjaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgIGF1dG8gc3VidGFibGVzT2Zmc2V0ID0gcmVzdWx0LnNpemUoKTsKKyAgICBh
dXRvIHN1YnRhYmxlc09mZnNldCA9IG1fcmVzdWx0LnNpemUoKTsKICNlbmRpZgogCi0gICAgc2l6
ZV90IHNpemVPZkhvcml6b250YWxTdWJ0YWJsZSA9IGFwcGVuZEtFUk5TdWJ0YWJsZTxTVkdIS2Vy
bkVsZW1lbnQ+KHJlc3VsdCwgJlNWR0hLZXJuRWxlbWVudDo6YnVpbGRIb3Jpem9udGFsS2Vybmlu
Z1BhaXIsIDEpOwotICAgIEFTU0VSVF9VTlVTRUQoc2l6ZU9mSG9yaXpvbnRhbFN1YnRhYmxlLCBz
dWJ0YWJsZXNPZmZzZXQgKyBzaXplT2ZIb3Jpem9udGFsU3VidGFibGUgPT0gcmVzdWx0LnNpemUo
KSk7Ci0gICAgc2l6ZV90IHNpemVPZlZlcnRpY2FsU3VidGFibGUgPSBhcHBlbmRLRVJOU3VidGFi
bGU8U1ZHVktlcm5FbGVtZW50PihyZXN1bHQsICZTVkdWS2VybkVsZW1lbnQ6OmJ1aWxkVmVydGlj
YWxLZXJuaW5nUGFpciwgMCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzaXplT2ZWZXJ0aWNhbFN1YnRh
YmxlLCBzdWJ0YWJsZXNPZmZzZXQgKyBzaXplT2ZIb3Jpem9udGFsU3VidGFibGUgKyBzaXplT2ZW
ZXJ0aWNhbFN1YnRhYmxlID09IHJlc3VsdC5zaXplKCkpOworICAgIHNpemVfdCBzaXplT2ZIb3Jp
em9udGFsU3VidGFibGUgPSBhcHBlbmRLRVJOU3VidGFibGU8U1ZHSEtlcm5FbGVtZW50PigmU1ZH
SEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5nUGFpciwgMSk7CisgICAgQVNTRVJU
X1VOVVNFRChzaXplT2ZIb3Jpem9udGFsU3VidGFibGUsIHN1YnRhYmxlc09mZnNldCArIHNpemVP
Zkhvcml6b250YWxTdWJ0YWJsZSA9PSBtX3Jlc3VsdC5zaXplKCkpOworICAgIHNpemVfdCBzaXpl
T2ZWZXJ0aWNhbFN1YnRhYmxlID0gYXBwZW5kS0VSTlN1YnRhYmxlPFNWR1ZLZXJuRWxlbWVudD4o
JlNWR1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtlcm5pbmdQYWlyLCAwKTsKKyAgICBBU1NF
UlRfVU5VU0VEKHNpemVPZlZlcnRpY2FsU3VidGFibGUsIHN1YnRhYmxlc09mZnNldCArIHNpemVP
Zkhvcml6b250YWxTdWJ0YWJsZSArIHNpemVPZlZlcnRpY2FsU3VidGFibGUgPT0gbV9yZXN1bHQu
c2l6ZSgpKTsKIAogICAgIC8vIFdvcmsgYXJvdW5kIGEgYnVnIGluIEFwcGxlJ3MgZm9udCBwYXJz
ZXIgYnkgYWRkaW5nIHNvbWUgcGFkZGluZyBieXRlcy4gPHJkYXI6Ly9wcm9ibGVtLzE4NDAxOTAx
PgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgKytpKQotICAgICAgICByZXN1bHQuYXBwZW5k
KDApOworICAgICAgICBtX3Jlc3VsdC5hcHBlbmQoMCk7CiB9CiAKIHN0YXRpYyB2b2lkIHdyaXRl
Q0ZGRW5jb2RlZE51bWJlcihWZWN0b3I8Y2hhcj4mIHZlY3RvciwgZmxvYXQgbnVtYmVyKQogewog
ICAgIGludCByYXcgPSBudW1iZXIgKiBwb3dmKDIsIDE2KTsKICAgICB2ZWN0b3IuYXBwZW5kKC0x
KTsgLy8gMHhGRgotICAgIHdyaXRlMzIodmVjdG9yLCByYXcpOworICAgIGFwcGVuZDMyKHZlY3Rv
ciwgcmF3KTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgckxpbmVUbyA9IDB4MDU7CkBAIC04Nzks
MTkgKzkwMCwxOSBAQCBWZWN0b3I8Y2hhcj4gU1ZHVG9PVEZGb250Q29udmVydGVyOjp0cmFuc2Nv
ZGVHbHlwaFBhdGhzKGZsb2F0IHdpZHRoLCBjb25zdCBUJiBnbAogfQogCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KLXZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRHbHlwaERhdGEoY29u
c3QgVmVjdG9yPGNoYXI+JiBwYXRoLCBjb25zdCBUKiwgZmxvYXQgaG9yaXpvbnRhbEFkdmFuY2Us
IGZsb2F0IHZlcnRpY2FsQWR2YW5jZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCwgQ29k
ZXBvaW50IGNvZGVwb2ludCkKK3ZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRHbHlw
aERhdGEoY29uc3QgVmVjdG9yPGNoYXI+JiBwYXRoLCBjb25zdCBUKiwgZmxvYXQgaG9yaXpvbnRh
bEFkdmFuY2UsIGZsb2F0IHZlcnRpY2FsQWR2YW5jZSwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGlu
Z0JveCwgY29uc3QgQ29kZXBvaW50cyYgY29kZXBvaW50cykKIHsKLSAgICBtX2dseXBocy5hcHBl
bmQoR2x5cGhEYXRhKHBhdGgsIG51bGxwdHIsIGhvcml6b250YWxBZHZhbmNlLCB2ZXJ0aWNhbEFk
dmFuY2UsIGJvdW5kaW5nQm94LCBjb2RlcG9pbnQpKTsKKyAgICBtX2dseXBocy5hcHBlbmQoR2x5
cGhEYXRhKHBhdGgsIG51bGxwdHIsIGhvcml6b250YWxBZHZhbmNlLCB2ZXJ0aWNhbEFkdmFuY2Us
IGJvdW5kaW5nQm94LCBjb2RlcG9pbnRzKSk7CiB9CiAKIHRlbXBsYXRlIDw+Ci12b2lkIFNWR1Rv
T1RGRm9udENvbnZlcnRlcjo6YXBwZW5kR2x5cGhEYXRhKGNvbnN0IFZlY3RvcjxjaGFyPiYgcGF0
aCwgY29uc3QgU1ZHR2x5cGhFbGVtZW50KiBlbGVtZW50LCBmbG9hdCBob3Jpem9udGFsQWR2YW5j
ZSwgZmxvYXQgdmVydGljYWxBZHZhbmNlLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94LCBD
b2RlcG9pbnQgY29kZXBvaW50KQordm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEds
eXBoRGF0YShjb25zdCBWZWN0b3I8Y2hhcj4mIHBhdGgsIGNvbnN0IFNWR0dseXBoRWxlbWVudCog
ZWxlbWVudCwgZmxvYXQgaG9yaXpvbnRhbEFkdmFuY2UsIGZsb2F0IHZlcnRpY2FsQWR2YW5jZSwg
Y29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCwgY29uc3QgQ29kZXBvaW50cyYgY29kZXBvaW50
cykKIHsKLSAgICBtX2dseXBocy5hcHBlbmQoR2x5cGhEYXRhKHBhdGgsIGVsZW1lbnQsIGhvcml6
b250YWxBZHZhbmNlLCB2ZXJ0aWNhbEFkdmFuY2UsIGJvdW5kaW5nQm94LCBjb2RlcG9pbnQpKTsK
KyAgICBtX2dseXBocy5hcHBlbmQoR2x5cGhEYXRhKHBhdGgsIGVsZW1lbnQsIGhvcml6b250YWxB
ZHZhbmNlLCB2ZXJ0aWNhbEFkdmFuY2UsIGJvdW5kaW5nQm94LCBjb2RlcG9pbnRzKSk7CiB9CiAK
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OnByb2Nl
c3NHbHlwaEVsZW1lbnQoY29uc3QgVCYgZWxlbWVudCwgZmxvYXQgZGVmYXVsdEhvcml6b250YWxB
ZHZhbmNlLCBmbG9hdCBkZWZhdWx0VmVydGljYWxBZHZhbmNlLCBDb2RlcG9pbnQgY29kZXBvaW50
LCBib29sJiBpbml0aWFsR2x5cGgpCit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6cHJvY2Vz
c0dseXBoRWxlbWVudChjb25zdCBUJiBlbGVtZW50LCBmbG9hdCBkZWZhdWx0SG9yaXpvbnRhbEFk
dmFuY2UsIGZsb2F0IGRlZmF1bHRWZXJ0aWNhbEFkdmFuY2UsIGNvbnN0IENvZGVwb2ludHMmIGNv
ZGVwb2ludHMsIGJvb2wmIGluaXRpYWxHbHlwaCkKIHsKICAgICBib29sIG9rOwogICAgIGZsb2F0
IGhvcml6b250YWxBZHZhbmNlID0gZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpo
b3Jpel9hZHZfeEF0dHIpLnRvRmxvYXQoJm9rKTsKQEAgLTkxMiw3ICs5MzMsMzUgQEAgdm9pZCBT
VkdUb09URkZvbnRDb252ZXJ0ZXI6OnByb2Nlc3NHbHlwaEVsZW1lbnQoY29uc3QgVCYgZWxlbWVu
dCwgZmxvYXQgZGVmYXVsdEgKICAgICBtX21pblJpZ2h0U2lkZUJlYXJpbmcgPSBzdGQ6Om1pbiht
X21pblJpZ2h0U2lkZUJlYXJpbmcsIGhvcml6b250YWxBZHZhbmNlIC0gZ2x5cGhCb3VuZGluZ0Jv
eC5tYXhYKCkpOwogICAgIGluaXRpYWxHbHlwaCA9IGZhbHNlOwogCi0gICAgYXBwZW5kR2x5cGhE
YXRhKHBhdGgsICZlbGVtZW50LCBob3Jpem9udGFsQWR2YW5jZSwgdmVydGljYWxBZHZhbmNlLCBn
bHlwaEJvdW5kaW5nQm94LCBjb2RlcG9pbnQpOworICAgIGFwcGVuZEdseXBoRGF0YShwYXRoLCAm
ZWxlbWVudCwgaG9yaXpvbnRhbEFkdmFuY2UsIHZlcnRpY2FsQWR2YW5jZSwgZ2x5cGhCb3VuZGlu
Z0JveCwgY29kZXBvaW50cyk7Cit9CisKK2Jvb2wgU1ZHVG9PVEZGb250Q29udmVydGVyOjpjb21w
YXJlQ29kZXBvaW50c0xleGljb2dyYXBoaWNhbGx5KGNvbnN0IEdseXBoRGF0YSYgZGF0YTEsIGNv
bnN0IEdseXBoRGF0YSYgZGF0YTIpCit7CisgICAgdW5zaWduZWQgaTEgPSAwLCBpMiA9IDA7Cisg
ICAgVUNoYXIzMiBjb2RlcG9pbnQxLCBjb2RlcG9pbnQyOworICAgIHVuc2lnbmVkIGxlbmd0aDEg
PSBkYXRhMS5jb2RlcG9pbnRzLmxlbmd0aCgpLCBsZW5ndGgyID0gZGF0YTIuY29kZXBvaW50cy5s
ZW5ndGgoKTsKKyAgICBmb3IgKCA7IGkxIDwgbGVuZ3RoMSAmJiBpMiA8IGxlbmd0aDI7ICkgewor
ICAgICAgICBpZiAoZGF0YTEuY29kZXBvaW50cy5pczhCaXQoKSkKKyAgICAgICAgICAgIGNvZGVw
b2ludDEgPSBkYXRhMS5jb2RlcG9pbnRzW2kxKytdOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBVMTZfTkVYVChkYXRhMS5jb2RlcG9pbnRzLmNoYXJhY3RlcnMxNigpLCBpMSwgbGVuZ3RoMSwg
Y29kZXBvaW50MSk7CisKKyAgICAgICAgaWYgKGRhdGEyLmNvZGVwb2ludHMuaXM4Qml0KCkpCisg
ICAgICAgICAgICBjb2RlcG9pbnQyID0gZGF0YTIuY29kZXBvaW50c1tpMisrXTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgVTE2X05FWFQoZGF0YTIuY29kZXBvaW50cy5jaGFyYWN0ZXJzMTYo
KSwgaTIsIGxlbmd0aDIsIGNvZGVwb2ludDIpOworCisgICAgICAgIGlmIChjb2RlcG9pbnQxIDwg
Y29kZXBvaW50MikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoY29kZXBv
aW50MSA+IGNvZGVwb2ludDIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKGxlbmd0aDEgPT0gbGVuZ3RoMiAmJiBkYXRhMS5nbHlwaEVsZW1lbnQKKyAgICAgICAg
JiYgZXF1YWxJZ25vcmluZ0Nhc2UoZGF0YTEuZ2x5cGhFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRl
KFNWR05hbWVzOjphcmFiaWNfZm9ybUF0dHIpLCBTdHJpbmcoImlzb2xhdGVkIiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
bGVuZ3RoMSA8IGxlbmd0aDI7CiB9CiAKIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6U1ZHVG9PVEZG
b250Q29udmVydGVyKGNvbnN0IFNWR0ZvbnRFbGVtZW50JiBmb250RWxlbWVudCkKQEAgLTkzNSw3
ICs5ODQsNyBAQCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OlNWR1RvT1RGRm9udENvbnZlcnRlcihj
b25zdCBTVkdGb250RWxlbWVudCYgZm9udEVsZW1lbnQpCiAgICAgICAgIG1fdW5pdHNQZXJFbSA9
IG1fZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCk7CiAKICAgICBpZiAobV9taXNzaW5nR2x5
cGhFbGVtZW50KQotICAgICAgICBwcm9jZXNzR2x5cGhFbGVtZW50KCptX21pc3NpbmdHbHlwaEVs
ZW1lbnQsIGRlZmF1bHRIb3Jpem9udGFsQWR2YW5jZSwgZGVmYXVsdFZlcnRpY2FsQWR2YW5jZSwg
MCwgaW5pdGlhbEdseXBoKTsKKyAgICAgICAgcHJvY2Vzc0dseXBoRWxlbWVudCgqbV9taXNzaW5n
R2x5cGhFbGVtZW50LCBkZWZhdWx0SG9yaXpvbnRhbEFkdmFuY2UsIGRlZmF1bHRWZXJ0aWNhbEFk
dmFuY2UsIENvZGVwb2ludHMoKSwgaW5pdGlhbEdseXBoKTsKICAgICBlbHNlIHsKICAgICAgICAg
VmVjdG9yPGNoYXI+IG5vdGRlZkNoYXJTdHJpbmc7CiAgICAgICAgIHdyaXRlQ0ZGRW5jb2RlZE51
bWJlcihub3RkZWZDaGFyU3RyaW5nLCBtX3VuaXRzUGVyRW0pOwpAQCAtOTQzLDE0ICs5OTIsMTQg
QEAgU1ZHVG9PVEZGb250Q29udmVydGVyOjpTVkdUb09URkZvbnRDb252ZXJ0ZXIoY29uc3QgU1ZH
Rm9udEVsZW1lbnQmIGZvbnRFbGVtZW50KQogICAgICAgICB3cml0ZUNGRkVuY29kZWROdW1iZXIo
bm90ZGVmQ2hhclN0cmluZywgMCk7CiAgICAgICAgIG5vdGRlZkNoYXJTdHJpbmcuYXBwZW5kKHJN
b3ZlVG8pOwogICAgICAgICBub3RkZWZDaGFyU3RyaW5nLmFwcGVuZChlbmRDaGFyKTsKLSAgICAg
ICAgbV9nbHlwaHMuYXBwZW5kKEdseXBoRGF0YShub3RkZWZDaGFyU3RyaW5nLCBudWxscHRyLCBt
X3VuaXRzUGVyRW0sIG1fdW5pdHNQZXJFbSwgRmxvYXRSZWN0KCksIDApKTsKKyAgICAgICAgbV9n
bHlwaHMuYXBwZW5kKEdseXBoRGF0YShub3RkZWZDaGFyU3RyaW5nLCBudWxscHRyLCBtX3VuaXRz
UGVyRW0sIG1fdW5pdHNQZXJFbSwgRmxvYXRSZWN0KCksIENvZGVwb2ludHMoKSkpOwogICAgIH0K
IAogICAgIGZvciAoYXV0byYgZ2x5cGhFbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8U1ZHR2x5cGhF
bGVtZW50PihtX2ZvbnRFbGVtZW50KSkgewogICAgICAgICBhdXRvJiB1bmljb2RlQXR0cmlidXRl
ID0gZ2x5cGhFbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnVuaWNvZGVBdHRyKTsK
ICAgICAgICAgLy8gT25seSBzdXBwb3J0IEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZSB3L28gbGln
YXR1cmVzIGZvciBub3cKLSAgICAgICAgaWYgKHVuaWNvZGVBdHRyaWJ1dGUubGVuZ3RoKCkgPT0g
MSkKLSAgICAgICAgICAgIHByb2Nlc3NHbHlwaEVsZW1lbnQoZ2x5cGhFbGVtZW50LCBkZWZhdWx0
SG9yaXpvbnRhbEFkdmFuY2UsIGRlZmF1bHRWZXJ0aWNhbEFkdmFuY2UsIHVuaWNvZGVBdHRyaWJ1
dGVbMF0sIGluaXRpYWxHbHlwaCk7CisgICAgICAgIGlmICghdW5pY29kZUF0dHJpYnV0ZS5pc0Vt
cHR5KCkpIC8vIElmIHdlIGNhbiBuZXZlciBhY3R1YWxseSB0cmlnZ2VyIHRoaXMgZ2x5cGgsIGln
bm9yZSBpdCBjb21wbGV0ZWx5CisgICAgICAgICAgICBwcm9jZXNzR2x5cGhFbGVtZW50KGdseXBo
RWxlbWVudCwgZGVmYXVsdEhvcml6b250YWxBZHZhbmNlLCBkZWZhdWx0VmVydGljYWxBZHZhbmNl
LCB1bmljb2RlQXR0cmlidXRlLCBpbml0aWFsR2x5cGgpOwogICAgIH0KIAogICAgIGlmIChtX2ds
eXBocy5zaXplKCkgPiBzdGQ6Om51bWVyaWNfbGltaXRzPEdseXBoPjo6bWF4KCkpIHsKQEAgLTk1
OSwxOSArMTAwOCwxNyBAQCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OlNWR1RvT1RGRm9udENvbnZl
cnRlcihjb25zdCBTVkdGb250RWxlbWVudCYgZm9udEVsZW1lbnQpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBzdGQ6OnNvcnQobV9nbHlwaHMuYmVnaW4oKSwgbV9nbHlwaHMuZW5kKCks
IFtdKGNvbnN0IEdseXBoRGF0YSYgZGF0YTEsIGNvbnN0IEdseXBoRGF0YSYgZGF0YTIpIHsKLSAg
ICAgICAgcmV0dXJuIGRhdGExLmNvZGVwb2ludCA8IGRhdGEyLmNvZGVwb2ludDsKLSAgICB9KTsK
KyAgICBzdGQ6OnNvcnQobV9nbHlwaHMuYmVnaW4oKSwgbV9nbHlwaHMuZW5kKCksICZjb21wYXJl
Q29kZXBvaW50c0xleGljb2dyYXBoaWNhbGx5KTsKIAogICAgIGZvciAoR2x5cGggaSA9IDA7IGkg
PCBtX2dseXBocy5zaXplKCk7ICsraSkgewogICAgICAgICBHbHlwaERhdGEmIGdseXBoID0gbV9n
bHlwaHNbaV07CiAgICAgICAgIGlmIChnbHlwaC5nbHlwaEVsZW1lbnQpIHsKICAgICAgICAgICAg
IGF1dG8mIGdseXBoTmFtZSA9IGdseXBoLmdseXBoRWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShT
VkdOYW1lczo6Z2x5cGhfbmFtZUF0dHIpOwotICAgICAgICAgICAgaWYgKCFnbHlwaE5hbWUuaXNF
bXB0eSgpKQorICAgICAgICAgICAgaWYgKCFnbHlwaE5hbWUuaXNOdWxsKCkpCiAgICAgICAgICAg
ICAgICAgbV9nbHlwaE5hbWVUb0luZGV4TWFwLmFkZChnbHlwaE5hbWUsIGkpOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChnbHlwaC5jb2RlcG9pbnQpCi0gICAgICAgICAgICBtX2NvZGVwb2ludFRv
SW5kZXhNYXAuYWRkKGdseXBoLmNvZGVwb2ludCwgaSk7CisgICAgICAgIGlmICghZ2x5cGguY29k
ZXBvaW50cy5pc051bGwoKSkKKyAgICAgICAgICAgIG1fY29kZXBvaW50c1RvSW5kaWNlc01hcC5h
ZGQoZ2x5cGguY29kZXBvaW50cywgVmVjdG9yPEdseXBoPigpKS5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKGkpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBIYW5kbGUgY29tbWFzCkBAIC0xMDA2LDkz
ICsxMDUzLDkyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0ZvdXJCeXRlQWxpZ25lZChzaXplX3Qg
eCkKICAgICByZXR1cm4gISh4ICYgc2l6ZW9mKHVpbnQzMl90KS0xKTsKIH0KIAotc3RhdGljIHVp
bnQzMl90IGNhbGN1bGF0ZUNoZWNrc3VtKGNvbnN0IFZlY3RvcjxjaGFyPiYgdGFibGUsIHNpemVf
dCBzdGFydGluZ09mZnNldCwgc2l6ZV90IGVuZGluZ09mZnNldCkKK3VpbnQzMl90IFNWR1RvT1RG
Rm9udENvbnZlcnRlcjo6Y2FsY3VsYXRlQ2hlY2tzdW0oc2l6ZV90IHN0YXJ0aW5nT2Zmc2V0LCBz
aXplX3QgZW5kaW5nT2Zmc2V0KSBjb25zdAogewogICAgIEFTU0VSVChpc0ZvdXJCeXRlQWxpZ25l
ZChlbmRpbmdPZmZzZXQgLSBzdGFydGluZ09mZnNldCkpOwogICAgIHVpbnQzMl90IHN1bSA9IDA7
CiAgICAgZm9yICg7IHN0YXJ0aW5nT2Zmc2V0IDwgZW5kaW5nT2Zmc2V0OyBzdGFydGluZ09mZnNl
dCArPSA0KSB7CiAgICAgICAgIC8vIFRoZSBzcGVjIGlzIHVuY2xlYXIgd2hldGhlciB0aGlzIGlz
IGEgbGl0dGxlLWVuZGlhbiBzdW0gb3IgYSBiaWctZW5kaWFuIHN1bS4gQ2hvb3NlIGxpdHRsZSBl
bmRpYW4uCi0gICAgICAgIHN1bSArPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odGFibGVb
c3RhcnRpbmdPZmZzZXQgKyAzXSkgPDwgMjQpCi0gICAgICAgICAgICB8IChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPih0YWJsZVtzdGFydGluZ09mZnNldCArIDJdKSA8PCAxNikKLSAgICAgICAg
ICAgIHwgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHRhYmxlW3N0YXJ0aW5nT2Zmc2V0ICsg
MV0pIDw8IDgpCi0gICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHRhYmxl
W3N0YXJ0aW5nT2Zmc2V0XSk7CisgICAgICAgIHN1bSArPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4obV9yZXN1bHRbc3RhcnRpbmdPZmZzZXQgKyAzXSkgPDwgMjQpCisgICAgICAgICAgICB8
IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihtX3Jlc3VsdFtzdGFydGluZ09mZnNldCArIDJd
KSA8PCAxNikKKyAgICAgICAgICAgIHwgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KG1fcmVz
dWx0W3N0YXJ0aW5nT2Zmc2V0ICsgMV0pIDw8IDgpCisgICAgICAgICAgICB8IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KG1fcmVzdWx0W3N0YXJ0aW5nT2Zmc2V0XSk7CiAgICAgfQogICAgIHJl
dHVybiBzdW07CiB9CiAKLXZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRUYWJsZShj
b25zdCBjaGFyIGlkZW50aWZpZXJbNF0sIFZlY3RvcjxjaGFyPiYgb3V0cHV0LCBGb250QXBwZW5k
aW5nRnVuY3Rpb24gYXBwZW5kaW5nRnVuY3Rpb24pCit2b2lkIFNWR1RvT1RGRm9udENvbnZlcnRl
cjo6YXBwZW5kVGFibGUoY29uc3QgY2hhciBpZGVudGlmaWVyWzRdLCBGb250QXBwZW5kaW5nRnVu
Y3Rpb24gYXBwZW5kaW5nRnVuY3Rpb24pCiB7Ci0gICAgc2l6ZV90IG9mZnNldCA9IG91dHB1dC5z
aXplKCk7CisgICAgc2l6ZV90IG9mZnNldCA9IG1fcmVzdWx0LnNpemUoKTsKICAgICBBU1NFUlQo
aXNGb3VyQnl0ZUFsaWduZWQob2Zmc2V0KSk7Ci0gICAgKHRoaXMtPiphcHBlbmRpbmdGdW5jdGlv
bikob3V0cHV0KTsKLSAgICBzaXplX3QgdW5wYWRkZWRTaXplID0gb3V0cHV0LnNpemUoKSAtIG9m
ZnNldDsKLSAgICB3aGlsZSAoIWlzRm91ckJ5dGVBbGlnbmVkKG91dHB1dC5zaXplKCkpKQotICAg
ICAgICBvdXRwdXQuYXBwZW5kKDApOwotICAgIEFTU0VSVChpc0ZvdXJCeXRlQWxpZ25lZChvdXRw
dXQuc2l6ZSgpKSk7CisgICAgKHRoaXMtPiphcHBlbmRpbmdGdW5jdGlvbikoKTsKKyAgICBzaXpl
X3QgdW5wYWRkZWRTaXplID0gbV9yZXN1bHQuc2l6ZSgpIC0gb2Zmc2V0OworICAgIHdoaWxlICgh
aXNGb3VyQnl0ZUFsaWduZWQobV9yZXN1bHQuc2l6ZSgpKSkKKyAgICAgICAgbV9yZXN1bHQuYXBw
ZW5kKDApOworICAgIEFTU0VSVChpc0ZvdXJCeXRlQWxpZ25lZChtX3Jlc3VsdC5zaXplKCkpKTsK
ICAgICBzaXplX3QgZGlyZWN0b3J5RW50cnlPZmZzZXQgPSBrU05GVEhlYWRlclNpemUgKyBtX3Rh
Ymxlc0FwcGVuZGVkQ291bnQgKiBrRGlyZWN0b3J5RW50cnlTaXplOwotICAgIG91dHB1dFtkaXJl
Y3RvcnlFbnRyeU9mZnNldF0gPSBpZGVudGlmaWVyWzBdOwotICAgIG91dHB1dFtkaXJlY3RvcnlF
bnRyeU9mZnNldCArIDFdID0gaWRlbnRpZmllclsxXTsKLSAgICBvdXRwdXRbZGlyZWN0b3J5RW50
cnlPZmZzZXQgKyAyXSA9IGlkZW50aWZpZXJbMl07Ci0gICAgb3V0cHV0W2RpcmVjdG9yeUVudHJ5
T2Zmc2V0ICsgM10gPSBpZGVudGlmaWVyWzNdOwotICAgIG92ZXJ3cml0ZTMyKG91dHB1dCwgZGly
ZWN0b3J5RW50cnlPZmZzZXQgKyA0LCBjYWxjdWxhdGVDaGVja3N1bShvdXRwdXQsIG9mZnNldCwg
b3V0cHV0LnNpemUoKSkpOwotICAgIG92ZXJ3cml0ZTMyKG91dHB1dCwgZGlyZWN0b3J5RW50cnlP
ZmZzZXQgKyA4LCBvZmZzZXQpOwotICAgIG92ZXJ3cml0ZTMyKG91dHB1dCwgZGlyZWN0b3J5RW50
cnlPZmZzZXQgKyAxMiwgdW5wYWRkZWRTaXplKTsKKyAgICBtX3Jlc3VsdFtkaXJlY3RvcnlFbnRy
eU9mZnNldF0gPSBpZGVudGlmaWVyWzBdOworICAgIG1fcmVzdWx0W2RpcmVjdG9yeUVudHJ5T2Zm
c2V0ICsgMV0gPSBpZGVudGlmaWVyWzFdOworICAgIG1fcmVzdWx0W2RpcmVjdG9yeUVudHJ5T2Zm
c2V0ICsgMl0gPSBpZGVudGlmaWVyWzJdOworICAgIG1fcmVzdWx0W2RpcmVjdG9yeUVudHJ5T2Zm
c2V0ICsgM10gPSBpZGVudGlmaWVyWzNdOworICAgIG92ZXJ3cml0ZTMyKGRpcmVjdG9yeUVudHJ5
T2Zmc2V0ICsgNCwgY2FsY3VsYXRlQ2hlY2tzdW0ob2Zmc2V0LCBtX3Jlc3VsdC5zaXplKCkpKTsK
KyAgICBvdmVyd3JpdGUzMihkaXJlY3RvcnlFbnRyeU9mZnNldCArIDgsIG9mZnNldCk7CisgICAg
b3ZlcndyaXRlMzIoZGlyZWN0b3J5RW50cnlPZmZzZXQgKyAxMiwgdW5wYWRkZWRTaXplKTsKICAg
ICArK21fdGFibGVzQXBwZW5kZWRDb3VudDsKIH0KIAotVmVjdG9yPGNoYXI+IFNWR1RvT1RGRm9u
dENvbnZlcnRlcjo6Y29udmVydFNWR1RvT1RGRm9udCgpCit2b2lkIFNWR1RvT1RGRm9udENvbnZl
cnRlcjo6Y29udmVydFNWR1RvT1RGRm9udCgpCiB7Ci0gICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsK
ICAgICBpZiAoIW1fZ2x5cGhzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgcmV0dXJuOwogCiAgICAgdWludDE2X3QgbnVtVGFibGVzID0gMTM7CiAgICAgdWludDE2X3Qg
cm91bmRlZE51bVRhYmxlcyA9IHJvdW5kRG93blRvUG93ZXJPZlR3byhudW1UYWJsZXMpOwogICAg
IHVpbnQxNl90IHNlYXJjaFJhbmdlID0gcm91bmRlZE51bVRhYmxlcyAqIDE2OyAvLyBzZWFyY2hS
YW5nZTogIihNYXhpbXVtIHBvd2VyIG9mIDIgPD0gbnVtVGFibGVzKSB4IDE2LiIKIAotICAgIHJl
c3VsdC5hcHBlbmQoJ08nKTsKLSAgICByZXN1bHQuYXBwZW5kKCdUJyk7Ci0gICAgcmVzdWx0LmFw
cGVuZCgnVCcpOwotICAgIHJlc3VsdC5hcHBlbmQoJ08nKTsKLSAgICB3cml0ZTE2KHJlc3VsdCwg
bnVtVGFibGVzKTsKLSAgICB3cml0ZTE2KHJlc3VsdCwgc2VhcmNoUmFuZ2UpOwotICAgIHdyaXRl
MTYocmVzdWx0LCBpbnRlZ3JhbExvZzIocm91bmRlZE51bVRhYmxlcykpOyAvLyBlbnRyeVNlbGVj
dG9yOiAiTG9nMihtYXhpbXVtIHBvd2VyIG9mIDIgPD0gbnVtVGFibGVzKS4iCi0gICAgd3JpdGUx
NihyZXN1bHQsIG51bVRhYmxlcyAqIDE2IC0gc2VhcmNoUmFuZ2UpOyAvLyByYW5nZVNoaWZ0OiAi
TnVtVGFibGVzIHggMTYtc2VhcmNoUmFuZ2UuIgorICAgIG1fcmVzdWx0LmFwcGVuZCgnTycpOwor
ICAgIG1fcmVzdWx0LmFwcGVuZCgnVCcpOworICAgIG1fcmVzdWx0LmFwcGVuZCgnVCcpOworICAg
IG1fcmVzdWx0LmFwcGVuZCgnTycpOworICAgIGFwcGVuZDE2KG51bVRhYmxlcyk7CisgICAgYXBw
ZW5kMTYoc2VhcmNoUmFuZ2UpOworICAgIGFwcGVuZDE2KGludGVncmFsTG9nMihyb3VuZGVkTnVt
VGFibGVzKSk7IC8vIGVudHJ5U2VsZWN0b3I6ICJMb2cyKG1heGltdW0gcG93ZXIgb2YgMiA8PSBu
dW1UYWJsZXMpLiIKKyAgICBhcHBlbmQxNihudW1UYWJsZXMgKiAxNiAtIHNlYXJjaFJhbmdlKTsg
Ly8gcmFuZ2VTaGlmdDogIk51bVRhYmxlcyB4IDE2LXNlYXJjaFJhbmdlLiIKIAotICAgIEFTU0VS
VChyZXN1bHQuc2l6ZSgpID09IGtTTkZUSGVhZGVyU2l6ZSk7CisgICAgQVNTRVJUKG1fcmVzdWx0
LnNpemUoKSA9PSBrU05GVEhlYWRlclNpemUpOwogCiAgICAgLy8gTGVhdmUgc3BhY2UgZm9yIHRo
ZSBEaXJlY3RvcnkgRW50cmllcwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga0RpcmVjdG9y
eUVudHJ5U2l6ZSAqIG51bVRhYmxlczsgKytpKQotICAgICAgICByZXN1bHQuYXBwZW5kKDApOwot
Ci0gICAgYXBwZW5kVGFibGUoIkNGRiAiLCByZXN1bHQsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6
OmFwcGVuZENGRlRhYmxlKTsKLSAgICBhcHBlbmRUYWJsZSgiT1MvMiIsIHJlc3VsdCwgJlNWR1Rv
T1RGRm9udENvbnZlcnRlcjo6YXBwZW5kT1MyVGFibGUpOwotICAgIGFwcGVuZFRhYmxlKCJWT1JH
IiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRWT1JHVGFibGUpOwotICAg
IGFwcGVuZFRhYmxlKCJjbWFwIiwgcmVzdWx0LCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBl
bmRDTUFQVGFibGUpOwotICAgIGF1dG8gaGVhZFRhYmxlT2Zmc2V0ID0gcmVzdWx0LnNpemUoKTsK
LSAgICBhcHBlbmRUYWJsZSgiaGVhZCIsIHJlc3VsdCwgJlNWR1RvT1RGRm9udENvbnZlcnRlcjo6
YXBwZW5kSEVBRFRhYmxlKTsKLSAgICBhcHBlbmRUYWJsZSgiaGhlYSIsIHJlc3VsdCwgJlNWR1Rv
T1RGRm9udENvbnZlcnRlcjo6YXBwZW5kSEhFQVRhYmxlKTsKLSAgICBhcHBlbmRUYWJsZSgiaG10
eCIsIHJlc3VsdCwgJlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kSE1UWFRhYmxlKTsKLSAg
ICBhcHBlbmRUYWJsZSgia2VybiIsIHJlc3VsdCwgJlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBw
ZW5kS0VSTlRhYmxlKTsKLSAgICBhcHBlbmRUYWJsZSgibWF4cCIsIHJlc3VsdCwgJlNWR1RvT1RG
Rm9udENvbnZlcnRlcjo6YXBwZW5kTUFYUFRhYmxlKTsKLSAgICBhcHBlbmRUYWJsZSgibmFtZSIs
IHJlc3VsdCwgJlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kTkFNRVRhYmxlKTsKLSAgICBh
cHBlbmRUYWJsZSgicG9zdCIsIHJlc3VsdCwgJlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5k
UE9TVFRhYmxlKTsKLSAgICBhcHBlbmRUYWJsZSgidmhlYSIsIHJlc3VsdCwgJlNWR1RvT1RGRm9u
dENvbnZlcnRlcjo6YXBwZW5kVkhFQVRhYmxlKTsKLSAgICBhcHBlbmRUYWJsZSgidm10eCIsIHJl
c3VsdCwgJlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kVk1UWFRhYmxlKTsKKyAgICAgICAg
bV9yZXN1bHQuYXBwZW5kKDApOworCisgICAgYXBwZW5kVGFibGUoIkNGRiAiLCAmU1ZHVG9PVEZG
b250Q29udmVydGVyOjphcHBlbmRDRkZUYWJsZSk7CisgICAgYXBwZW5kVGFibGUoIk9TLzIiLCAm
U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRPUzJUYWJsZSk7CisgICAgYXBwZW5kVGFibGUo
IlZPUkciLCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRWT1JHVGFibGUpOworICAgIGFw
cGVuZFRhYmxlKCJjbWFwIiwgJlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kQ01BUFRhYmxl
KTsKKyAgICBhdXRvIGhlYWRUYWJsZU9mZnNldCA9IG1fcmVzdWx0LnNpemUoKTsKKyAgICBhcHBl
bmRUYWJsZSgiaGVhZCIsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZEhFQURUYWJsZSk7
CisgICAgYXBwZW5kVGFibGUoImhoZWEiLCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRI
SEVBVGFibGUpOworICAgIGFwcGVuZFRhYmxlKCJobXR4IiwgJlNWR1RvT1RGRm9udENvbnZlcnRl
cjo6YXBwZW5kSE1UWFRhYmxlKTsKKyAgICBhcHBlbmRUYWJsZSgia2VybiIsICZTVkdUb09URkZv
bnRDb252ZXJ0ZXI6OmFwcGVuZEtFUk5UYWJsZSk7CisgICAgYXBwZW5kVGFibGUoIm1heHAiLCAm
U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRNQVhQVGFibGUpOworICAgIGFwcGVuZFRhYmxl
KCJuYW1lIiwgJlNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kTkFNRVRhYmxlKTsKKyAgICBh
cHBlbmRUYWJsZSgicG9zdCIsICZTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFBPU1RUYWJs
ZSk7CisgICAgYXBwZW5kVGFibGUoInZoZWEiLCAmU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBl
bmRWSEVBVGFibGUpOworICAgIGFwcGVuZFRhYmxlKCJ2bXR4IiwgJlNWR1RvT1RGRm9udENvbnZl
cnRlcjo6YXBwZW5kVk1UWFRhYmxlKTsKIAogICAgIEFTU0VSVChudW1UYWJsZXMgPT0gbV90YWJs
ZXNBcHBlbmRlZENvdW50KTsKIAogICAgIC8vIGNoZWNrU3VtQWRqdXN0bWVudDogIlRvIGNvbXB1
dGU6IHNldCBpdCB0byAwLCBjYWxjdWxhdGUgdGhlIGNoZWNrc3VtIGZvciB0aGUgJ2hlYWQnIHRh
YmxlIGFuZCBwdXQgaXQgaW4gdGhlIHRhYmxlIGRpcmVjdG9yeSwKICAgICAvLyBzdW0gdGhlIGVu
dGlyZSBmb250IGFzIHVpbnQzMiwgdGhlbiBzdG9yZSBCMUIwQUZCQSAtIHN1bS4gVGhlIGNoZWNr
c3VtIGZvciB0aGUgJ2hlYWQnIHRhYmxlIHdpbGwgbm93IGJlIHdyb25nLiBUaGF0IGlzIE9LLiIK
LSAgICB1aW50MzJfdCBjaGVja3N1bUFkanVzdG1lbnQgPSAweEIxQjBBRkJBVSAtIGNhbGN1bGF0
ZUNoZWNrc3VtKHJlc3VsdCwgMCwgcmVzdWx0LnNpemUoKSk7Ci0gICAgb3ZlcndyaXRlMzIocmVz
dWx0LCBoZWFkVGFibGVPZmZzZXQgKyA4LCBjaGVja3N1bUFkanVzdG1lbnQpOwotCi0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB1aW50MzJfdCBjaGVja3N1bUFkanVzdG1lbnQgPSAweEIxQjBBRkJB
VSAtIGNhbGN1bGF0ZUNoZWNrc3VtKDAsIG1fcmVzdWx0LnNpemUoKSk7CisgICAgb3ZlcndyaXRl
MzIoaGVhZFRhYmxlT2Zmc2V0ICsgOCwgY2hlY2tzdW1BZGp1c3RtZW50KTsKIH0KIAogVmVjdG9y
PGNoYXI+IGNvbnZlcnRTVkdUb09URkZvbnQoY29uc3QgU1ZHRm9udEVsZW1lbnQmIGVsZW1lbnQp
CiB7Ci0gICAgcmV0dXJuIFNWR1RvT1RGRm9udENvbnZlcnRlcihlbGVtZW50KS5jb252ZXJ0U1ZH
VG9PVEZGb250KCk7CisgICAgU1ZHVG9PVEZGb250Q29udmVydGVyIGNvbnZlcnRlcihlbGVtZW50
KTsKKyAgICBjb252ZXJ0ZXIuY29udmVydFNWR1RvT1RGRm9udCgpOworICAgIHJldHVybiBjb252
ZXJ0ZXIucmVsZWFzZVJlc3VsdCgpOwogfQogCiB9Cg==
</data>
<flag name="review"
          id="263556"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>