<?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>190312</bug_id>
          
          <creation_ts>2018-10-05 07:48:46 -0700</creation_ts>
          <short_desc>Prewarm FontDatabase on process swap</short_desc>
          <delta_ts>2018-10-09 02:15:23 -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>Page Loading</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1466685</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-10-05 07:48:46 -0700</bug_when>
    <thetext>Prewarm process using cached information about the fonts the page likely needs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466693</commentid>
    <comment_count>1</comment_count>
      <attachid>351675</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-10-05 08:44:24 -0700</bug_when>
    <thetext>Created attachment 351675
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466724</commentid>
    <comment_count>2</comment_count>
      <attachid>351675</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-10-05 11:13:46 -0700</bug_when>
    <thetext>Comment on attachment 351675
patch

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

&gt; Source/WebCore/page/PrewarmInformation.h:52
&gt; +        return { };

std::nullopt

&gt; Source/WebKit/UIProcess/WebProcessPool.h:702
&gt; +    HashMap&lt;String, std::unique_ptr&lt;WebCore::PrewarmInformation&gt;&gt; m_prewarmInformationForRegistrableDomain;

It seems like the map should not have unique_ptr values.  Why not HashMap&lt;String, WebCore::PrewarmInformation&gt;?

&gt; Source/WebKit/WebProcess/WebProcess.h:252
&gt;      void prewarm();
&gt; +    void prewarmWithDomainInformation(const WebCore::PrewarmInformation&amp;);

Do we need both of these?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466743</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-10-05 11:35:57 -0700</bug_when>
    <thetext>&gt; It seems like the map should not have unique_ptr values.  Why not
&gt; HashMap&lt;String, WebCore::PrewarmInformation&gt;?

Complex structures as map values are a bad idea as rehashing can involve lots of copying. PrewarmInformation is not that complex yet but the idea is for it to be expandable.

&gt; &gt; Source/WebKit/WebProcess/WebProcess.h:252
&gt; &gt;      void prewarm();
&gt; &gt; +    void prewarmWithDomainInformation(const WebCore::PrewarmInformation&amp;);
&gt; 
&gt; Do we need both of these?

First one is for general prewarming that doesn&apos;t require any context and is done right after process creation. The seconds one requires we know the domain and happens on the first page load in the process.

Some renaming might be good to clarify this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466745</commentid>
    <comment_count>4</comment_count>
      <attachid>351675</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-10-05 11:42:16 -0700</bug_when>
    <thetext>Comment on attachment 351675
patch

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

&gt; Source/WebKit/UIProcess/WebProcessPool.cpp:2268
&gt; +    auto&amp; value = m_prewarmInformationForRegistrableDomain.ensure(registrableDomain, [] {
&gt; +        return std::make_unique&lt;WebCore::PrewarmInformation&gt;();
&gt; +    }).iterator-&gt;value;
&gt; +
&gt; +    *value = prewarmInformation;

I agree with using std::unique_ptr for the key now, but could we call set instead of ensure, creating an empty structure, then copying values into it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467005</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-10-08 00:51:28 -0700</bug_when>
    <thetext>&gt; I agree with using std::unique_ptr for the key now, but could we call set
&gt; instead of ensure, creating an empty structure, then copying values into it?

I don&apos;t see how that would be better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467010</commentid>
    <comment_count>6</comment_count>
      <attachid>351764</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-10-08 02:25:08 -0700</bug_when>
    <thetext>Created attachment 351764
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467011</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-10-08 02:26:05 -0700</bug_when>
    <thetext>&gt; std::nullopt

Why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467016</commentid>
    <comment_count>8</comment_count>
      <attachid>351766</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-10-08 03:44:14 -0700</bug_when>
    <thetext>Created attachment 351766
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467019</commentid>
    <comment_count>9</comment_count>
      <attachid>351768</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-10-08 04:11:52 -0700</bug_when>
    <thetext>Created attachment 351768
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467056</commentid>
    <comment_count>10</comment_count>
      <attachid>351768</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-10-08 09:23:35 -0700</bug_when>
    <thetext>Comment on attachment 351768
patch

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

r=me

&gt; Source/WebKit/UIProcess/WebProcessPool.h:702
&gt; +    HashMap&lt;String, std::unique_ptr&lt;WebCore::PrewarmInformation&gt;&gt; m_prewarmInformationForRegistrableDomain;

It seems we use PerRegistrableDomain naming above, let&apos;s be consistent?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467361</commentid>
    <comment_count>11</comment_count>
      <attachid>351869</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-10-09 00:52:57 -0700</bug_when>
    <thetext>Created attachment 351869
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467368</commentid>
    <comment_count>12</comment_count>
      <attachid>351869</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-09 02:14:44 -0700</bug_when>
    <thetext>Comment on attachment 351869
patch

Clearing flags on attachment: 351869

Committed r236959: &lt;https://trac.webkit.org/changeset/236959&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467369</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-09 02:14:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467370</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-09 02:15:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/45120617&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351675</attachid>
            <date>2018-10-05 08:44:24 -0700</date>
            <delta_ts>2018-10-08 02:25:08 -0700</delta_ts>
            <desc>patch</desc>
            <filename>prewarm-font-domain-8.patch</filename>
            <type>text/plain</type>
            <size>25450</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNjc4NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDE4LTEwLTA1ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBQcmV3YXJtIEZvbnREYXRhYmFz
ZSBvbiBwcm9jZXNzIHN3YXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5MDMxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEltcGxlbWVudCBiYXNpYyBwcmV3YXJtaW5nIG9mIEZvbnREYXRhYmFzZS4gV2hl
biB0aGUgZG9tYWluIG9mIHRoZSBmaXJzdCBwYWdlIGxvYWQgb24KKyAgICAgICAgYSBuZXcgcHJv
Y2VzcyBpcyBrbm93biB3ZSBwYXNzIHRoZSBsaXN0IG9mIGZvbnQgZmFtaWxpZXMgcHJldmlvdXMg
dXNlZCBieSB0aGF0IGRvbWFpbiB0byB0aGUKKyAgICAgICAgcHJvY2Vzcy4gVGhpcyBpcyB1c2Vk
IHRvIHByZXdhcm0gQ29yZVRleHQgZm9udCBkYXRhYmFzZS4gSW5pdGlhbGl6YXRpb24gKHdoaWNo
IGludm9sdmVzIGxvdHMgb2YKKyAgICAgICAgYmxvY2tpbmcgSVBDKSBoYXBwZW5zIG91dHNpZGUg
dGhlIG1haW4gdGhyZWFkIHNvIHRoZSBmb250cyBhcmUgcmVhZHkgdG8gdXNlIHdoZW4gbmVlZGVk
LgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIHBhZ2UvUHJld2FybUluZm9ybWF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UHJld2FybUluZm9ybWF0aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UHJl
d2FybUluZm9ybWF0aW9uOjpkZWNvZGUpOgorCisgICAgICAgIEFkZCBkYXRhIHN0cnVjdHVyZSBm
b3IgcHJld2FybSBpbmZvcm1hdGlvbiB3aXRoIGVuY29kZS9kZWNvZGUgc3VwcG9ydC4KKworICAg
ICAgICAqIHBhZ2UvUHJvY2Vzc1dhcm1pbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vz
c1dhcm1pbmc6OmNvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UHJvY2Vzc1dhcm1pbmc6OnByZXdhcm1XaXRoSW5mb3JtYXRpb24pOgorCisgICAgICAgIFByZXdh
cm1pbmcgaW50ZXJmYWNlIHRvIGJlIHVzZWQgZnJvbSBXZWJLaXQuCisKKyAgICAgICAgKiBwYWdl
L1Byb2Nlc3NXYXJtaW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y29sbGVjdFByZXdhcm1JbmZvcm1h
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnByZXdhcm0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnREYXRhYmFzZTo6Y29sbGVjdGlvbkZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250RGF0YWJhc2U6OmZvbnRGb3JQb3N0U2NyaXB0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250RGF0YWJhc2U6OmNsZWFyKToKKworICAgICAgICBBZGQgbXV0ZXggZm9yIHRocmVhZCBzYWZl
IGFjY2Vzcy4KKworICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y29sbGVjdFByZXdhcm1JbmZv
cm1hdGlvbiBjb25zdCk6CisKKyAgICAgICAgQ29sbGVjdCBmb250IGZhbWlsaWVzIHNlZW4gYnkg
dGhpcyBwcm9jZXNzLgorCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnByZXdhcm0pOgor
CisgICAgICAgIFByZXdhcm0gRm9udERhdGFiYXNlIGluIGEgZGlzcGF0Y2ggcXVldWUuCisKIDIw
MTgtMTAtMDIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ29w
eWluZyBjb250ZW50IHdpdGggc2hhZG93IERPTSBkb2Vzbid0IGNvcHkgYW55IGNvbnRlbnRzCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyMzY3ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ3NTcsNiArNDc1Nyw3IEBACiAJ
CUU0NEI0QkI0MTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NEI0QkIyMTQxNjUwRDcwMDJC
MUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCAqLzsgfTsKIAkJRTQ0RkExODUxQkNBNkI1QTAwOTFC
NkVGIC8qIENvbXBvc2VkVHJlZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDRGQTE4NDFCQ0E2QjVBMDA5MUI2RUYgLyogQ29tcG9zZWRU
cmVlSXRlcmF0b3IuaCAqLzsgfTsKIAkJRTQ1MzIyQUMxNDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVj
dG9yUXVlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0NTMyMkFBMTQwQ0UyNjcwMDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmggKi87IH07CisJCUU0
NjA1RkVDMjE2NjQ4MDkwMEU1MzA0NiAvKiBQcmV3YXJtSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjA1RkVBMjE2NjQ4MDgwMEU1
MzA0NiAvKiBQcmV3YXJtSW5mb3JtYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDYxODAyRDFDOEREMjkwMDAyNkMwMkMgLyogU3R5bGVS
ZWxhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0NjE4MDJDMUM4REQyOTAwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICovOyB9OwogCQlF
NDYxRDY1RjFCQjBDODBEMDBDQjU2NDUgLyogU3R5bGVTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2MUQ2NUUxQkIwQzgwRDAwQ0I1NjQ1IC8q
IFN0eWxlU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlFNDYyQTRBMTExM0U3MUJFMDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDYyQTRBMDExM0U3MUJF
MDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0NDI5LDYgKzE0NDMwLDcgQEAKIAkJRTQ1MzkwMzQwRUFG
RDYzNzAwMzY5NUM4IC8qIFNjcm9sbFZpZXdJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBTY3JvbGxWaWV3SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNDUzOTAzQzBFQUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2lkZ2V0SU9TLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNDUzOTBBRDBFQUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVt
b3J5SU9TLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5c3RlbU1l
bW9yeUlPUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NjA1RkVBMjE2NjQ4
MDgwMEU1MzA0NiAvKiBQcmV3YXJtSW5mb3JtYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUHJld2FybUluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0NjE4MDJDMUM4REQyOTAwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZVJlbGF0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFNDYxODAyRTFDOERENEQyMDAyNkMwMkMgLyogU3R5bGVSZWxh
dGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSZWxh
dGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDYxRDY1QzFCQjBDN0Yw
MDBDQjU2NDUgLyogU3R5bGVTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTdHlsZVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5
NTMwLDYgKzE5NTMyLDcgQEAKIAkJCQk1Q0ZDNDM0RTE5MjQwNkE5MDBBMEQzQjUgLyogUG9pbnRl
ckxvY2tDb250cm9sbGVyLmNwcCAqLywKIAkJCQk1Q0ZDNDM0RjE5MjQwNkE5MDBBMEQzQjUgLyog
UG9pbnRlckxvY2tDb250cm9sbGVyLmggKi8sCiAJCQkJMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNB
IC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi8sCisJCQkJRTQ2MDVGRUEyMTY2NDgwODAwRTUz
MDQ2IC8qIFByZXdhcm1JbmZvcm1hdGlvbi5oICovLAogCQkJCUI3NzZENDNDMTEwNDUyNzUwMEJF
QjBFQyAvKiBQcmludENvbnRleHQuY3BwICovLAogCQkJCUI3NzZENDNBMTEwNDUyNUQwMEJFQjBF
QyAvKiBQcmludENvbnRleHQuaCAqLywKIAkJCQlFNDIwNTAxNjIxNDE5MDFCMDA2NkVGM0IgLyog
UHJvY2Vzc1dhcm1pbmcuY3BwICovLApAQCAtMjc1NTksNiArMjc1NjIsNyBAQAogCQkJCUNFNzk5
Rjk4MUM2QTQ2QkMwMDk3QjUxOCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDRTc5OUZBQzFDNkE1MDY2MDA5N0I1MTggLyogQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFE
MDE1Q0EwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlFNDYwNUZFQzIxNjY0ODA5MDBFNTMwNDYgLyogUHJld2FybUluZm9ybWF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5NzYyN0I4RTE0RkIzQ0VFMDAyQ0RDQTEgLyogQ29udGV4dERlc3RydWN0
aW9uT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQjZBMEU2MEIwQkNBNUMwMEY1MDI3
QSAvKiBDb250ZXh0TWVudS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDY1QUQ0RjUwQjBDMkVEQTAw
NUEyQjFEIC8qIENvbnRleHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUHJld2FybUluZm9ybWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9QcmV3YXJtSW5mb3JtYXRpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1ByZXdhcm1JbmZvcm1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZvbnRD
YWNoZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgUHJld2FybUluZm9ybWF0
aW9uIHsKKyAgICBGb250UHJld2FybUluZm9ybWF0aW9uIGZvbnQ7CisKKyAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UHJld2FybUluZm9ybWF0aW9uPiBk
ZWNvZGUoRGVjb2RlciYpOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgUHJl
d2FybUluZm9ybWF0aW9uOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBl
bmNvZGVyIDw8IGZvbnQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlv
bmFsPFByZXdhcm1JbmZvcm1hdGlvbj4gUHJld2FybUluZm9ybWF0aW9uOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICBQcmV3YXJtSW5mb3JtYXRpb24gcHJld2FybUluZm87CisgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShwcmV3YXJtSW5mby5mb250KSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIHJldHVybiBwcmV3YXJtSW5mbzsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9Qcm9jZXNzV2FybWluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9Qcm9jZXNzV2FybWluZy5jcHAJKHJldmlzaW9uIDIzNjc4NykKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUHJvY2Vzc1dhcm1pbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw0ICs3Niwx
NiBAQCB2b2lkIFByb2Nlc3NXYXJtaW5nOjpwcmV3YXJtKCkKICNlbmRpZgogfQogCitXZWJDb3Jl
OjpQcmV3YXJtSW5mb3JtYXRpb24gUHJvY2Vzc1dhcm1pbmc6OmNvbGxlY3RQcmV3YXJtSW5mb3Jt
YXRpb24oKQoreworICAgIFByZXdhcm1JbmZvcm1hdGlvbiBpbmZvOworICAgIGluZm8uZm9udCA9
IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuY29sbGVjdFByZXdhcm1JbmZvcm1hdGlvbigpOworICAg
IHJldHVybiBpbmZvOworfQorCit2b2lkIFByb2Nlc3NXYXJtaW5nOjpwcmV3YXJtV2l0aEluZm9y
bWF0aW9uKGNvbnN0IFByZXdhcm1JbmZvcm1hdGlvbiYgcHJld2FybUluZm8pCit7CisgICAgRm9u
dENhY2hlOjpzaW5nbGV0b24oKS5wcmV3YXJtKHByZXdhcm1JbmZvLmZvbnQpOworfQorCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Byb2Nlc3NXYXJtaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9Qcm9jZXNzV2FybWluZy5oCShyZXZpc2lvbiAyMzY3ODcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Byb2Nlc3NXYXJtaW5nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDEyICsyNSwxNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIlByZXdhcm1JbmZv
cm1hdGlvbi5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFdFQkNPUkVfRVhQT1JU
IFByb2Nlc3NXYXJtaW5nIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplTmFt
ZXMoKTsKICAgICBzdGF0aWMgdm9pZCBwcmV3YXJtKCk7CisKKyAgICBzdGF0aWMgUHJld2FybUlu
Zm9ybWF0aW9uIGNvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oKTsKKyAgICBzdGF0aWMgdm9pZCBw
cmV3YXJtV2l0aEluZm9ybWF0aW9uKGNvbnN0IFByZXdhcm1JbmZvcm1hdGlvbiYpOwogfTsKIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
Y3BwCShyZXZpc2lvbiAyMzY3ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODIsNiArNDgyLDE2IEBAIHZvaWQg
Rm9udENhY2hlOjppbnZhbGlkYXRlKCkKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKKworRm9u
dFByZXdhcm1JbmZvcm1hdGlvbiBGb250Q2FjaGU6OmNvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24o
KSBjb25zdAoreworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgRm9udENhY2hlOjpwcmV3YXJt
KGNvbnN0IEZvbnRQcmV3YXJtSW5mb3JtYXRpb24mKQoreworfQorCiBSZWZQdHI8Rm9udD4gRm9u
dENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNT
dHJpbmcmKQogewogICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHJldmlzaW9uIDIzNjc4NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVl
dWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTY3LDYgKzY4LDggQEAgdHlwZWRlZiBJTUxhbmdG
b250TGluayBJTUxhbmdGb250TGlua1R5cAogI2VuZGlmCiAjZW5kaWYKIAordXNpbmcgRm9udFBy
ZXdhcm1JbmZvcm1hdGlvbiA9IFZlY3RvcjxTdHJpbmc+OworCiAvLyBUaGlzIGtleSBjb250YWlu
cyB0aGUgRm9udERlc2NyaXB0aW9uIGZpZWxkcyBvdGhlciB0aGFuIGZhbWlseSB0aGF0IG1hdHRl
ciB3aGVuIGZldGNoaW5nIEZvbnREYXRhcyAocGxhdGZvcm0gZm9udHMpLgogc3RydWN0IEZvbnRE
ZXNjcmlwdGlvbktleSB7CiAgICAgRm9udERlc2NyaXB0aW9uS2V5KCkgPSBkZWZhdWx0OwpAQCAt
MjM1LDYgKzIzOCw5IEBAIHB1YmxpYzoKICAgICBib29sIHNob3VsZE1vY2tCb2xkU3lzdGVtRm9u
dEZvckFjY2Vzc2liaWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE1vY2tCb2xkU3lzdGVt
Rm9udEZvckFjY2Vzc2liaWxpdHk7IH0KICAgICB2b2lkIHNldFNob3VsZE1vY2tCb2xkU3lzdGVt
Rm9udEZvckFjY2Vzc2liaWxpdHkoYm9vbCBzaG91bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JBY2Nl
c3NpYmlsaXR5KSB7IG1fc2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9yQWNjZXNzaWJpbGl0eSA9
IHNob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHk7IH0KIAorICAgIEZvbnRQ
cmV3YXJtSW5mb3JtYXRpb24gY29sbGVjdFByZXdhcm1JbmZvcm1hdGlvbigpIGNvbnN0OworICAg
IHZvaWQgcHJld2FybShjb25zdCBGb250UHJld2FybUluZm9ybWF0aW9uJik7CisKIHByaXZhdGU6
CiAgICAgRm9udENhY2hlKCk7CiAgICAgfkZvbnRDYWNoZSgpID0gZGVsZXRlOwpAQCAtMjU4LDYg
KzI2NCw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZv
ckFjY2Vzc2liaWxpdHkgeyBmYWxzZSB9OwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgSGFz
aFNldDxTdHJpbmc+IG1fc2VlbkZhbWlsaWVzRm9yUHJld2FybWluZzsKKyAgICBSZWZQdHI8V29y
a1F1ZXVlPiBtX3ByZXdhcm1RdWV1ZTsKKwogICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENv
bnRyb2xsZXI7CiAjZW5kaWYKICAgICBmcmllbmQgY2xhc3MgRm9udDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fj
aGVDb3JlVGV4dC5jcHAJKHJldmlzaW9uIDIzNjc4NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODg2LDYgKzg4Niw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEluc3RhbGxlZEZvbnRGYW1p
bHkmIGNvbGxlY3Rpb25Gb3JGYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogICAgIHsK
KyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2tlcihtX2Rlc2NyaXB0b3JNYXBMb2Nr
KTsKKwogICAgICAgICBhdXRvIGZvbGRlZCA9IGZhbWlseU5hbWUuZm9sZENhc2UoKTsKICAgICAg
ICAgcmV0dXJuIG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzLmVuc3VyZShmb2xkZWQsIFsm
XSB7CiAgICAgICAgICAgICBhdXRvIGZhbWlseU5hbWVTdHJpbmcgPSBmb2xkZWQuY3JlYXRlQ0ZT
dHJpbmcoKTsKQEAgLTkxMCw2ICs5MTIsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBJbnN0YWxs
ZWRGb250JiBmb250Rm9yUG9zdFNjcmlwdE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwb3N0U2Ny
aXB0TmFtZSkKICAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrZXIobV9k
ZXNjcmlwdG9yTWFwTG9jayk7CisKICAgICAgICAgY29uc3QgYXV0byYgZm9sZGVkID0gRm9udENh
c2NhZGVEZXNjcmlwdGlvbjo6Zm9sZGVkRmFtaWx5TmFtZShwb3N0U2NyaXB0TmFtZSk7CiAgICAg
ICAgIHJldHVybiBtX3Bvc3RTY3JpcHROYW1lVG9Gb250RGVzY3JpcHRvcnMuZW5zdXJlKGZvbGRl
ZCwgWyZdIHsKICAgICAgICAgICAgIGF1dG8gcG9zdFNjcmlwdE5hbWVTdHJpbmcgPSBmb2xkZWQu
Y3JlYXRlQ0ZTdHJpbmcoKTsKQEAgLTkzMSw2ICs5MzUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGNsZWFyKCkKICAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrZXIobV9k
ZXNjcmlwdG9yTWFwTG9jayk7CisKICAgICAgICAgbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRv
cnMuY2xlYXIoKTsKICAgICAgICAgbV9wb3N0U2NyaXB0TmFtZVRvRm9udERlc2NyaXB0b3JzLmNs
ZWFyKCk7CiAgICAgfQpAQCAtOTQzLDYgKzk0OSw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0K
IAorICAgIExvY2sgbV9kZXNjcmlwdG9yTWFwTG9jazsKICAgICBIYXNoTWFwPFN0cmluZywgSW5z
dGFsbGVkRm9udEZhbWlseT4gbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnM7CiAgICAgSGFz
aE1hcDxTdHJpbmcsIEluc3RhbGxlZEZvbnQ+IG1fcG9zdFNjcmlwdE5hbWVUb0ZvbnREZXNjcmlw
dG9yczsKICAgICBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBtX2FsbG93VXNlckluc3RhbGxlZEZv
bnRzOwpAQCAtMTI2MSw2ICsxMjY4LDkgQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURh
dGE+IEZvbnRDYQogICAgIGlmICghZm9udCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAg
ICBpZiAoZm9udERlc2NyaXB0aW9uLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkgPT0g
QWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKQorICAgICAgICBtX3NlZW5GYW1pbGllc0ZvclBy
ZXdhcm1pbmcuYWRkKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZvbGRlZEZhbWlseU5hbWUoZmFt
aWx5KSk7CisKICAgICBib29sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY09ibGlxdWU7CiAgICAg
c3RkOjp0aWUoc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSkgPSBjb21wdXRlTmVjZXNz
YXJ5U3ludGhlc2lzKGZvbnQuZ2V0KCksIGZvbnREZXNjcmlwdGlvbikuYm9sZE9ibGlxdWVQYWly
KCk7CiAKQEAgLTE0OTksNCArMTUwOSwyOSBAQCBSZWY8Rm9udD4gRm9udENhY2hlOjpsYXN0UmVz
b3J0RmFsbGJhY2tGCiAgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRh
KTsKIH0KIAorRm9udFByZXdhcm1JbmZvcm1hdGlvbiBGb250Q2FjaGU6OmNvbGxlY3RQcmV3YXJt
SW5mb3JtYXRpb24oKSBjb25zdAoreworICAgIEZvbnRQcmV3YXJtSW5mb3JtYXRpb24gZm9udFBy
ZXdhcm1JbmZvcm1hdGlvbjsKKyAgICBmb250UHJld2FybUluZm9ybWF0aW9uID0gY29weVRvVmVj
dG9yKG1fc2VlbkZhbWlsaWVzRm9yUHJld2FybWluZyk7CisgICAgcmV0dXJuIGZvbnRQcmV3YXJt
SW5mb3JtYXRpb247Cit9CisKK3ZvaWQgRm9udENhY2hlOjpwcmV3YXJtKGNvbnN0IEZvbnRQcmV3
YXJtSW5mb3JtYXRpb24mIGZvbnRQcmV3YXJtSW5mb3JtYXRpb24pCit7CisgICAgYXV0byYgZmFt
aWxpZXMgPSBmb250UHJld2FybUluZm9ybWF0aW9uOworCisgICAgaWYgKGZhbWlsaWVzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3ByZXdhcm1RdWV1ZSkKKyAgICAg
ICAgbV9wcmV3YXJtUXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgiV2ViS2l0IGZvbnQgcHJld2Fy
bSBxdWV1ZSIpOworCisgICAgYXV0byYgZGF0YWJhc2UgPSBGb250RGF0YWJhc2U6OnNpbmdsZXRv
bkRpc2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7CisKKyAgICBtX3ByZXdhcm1RdWV1ZS0+
ZGlzcGF0Y2goWyZkYXRhYmFzZSwgZmFtaWxpZXMgPSBmYW1pbGllcy5pc29sYXRlZENvcHkoKV0g
eworICAgICAgICBmb3IgKGF1dG8mIGZhbWlseSA6IGZhbWlsaWVzKQorICAgICAgICAgICAgZGF0
YWJhc2UuY29sbGVjdGlvbkZvckZhbWlseShmYW1pbHkpOworICAgIH0pOworfQorCiB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwkocmV2aXNpb24gMjM2ODczKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw0MCBAQAorMjAxOC0xMC0wNSAgQW50dGkgS29pdmlzdG8g
IDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUHJld2FybSBGb250RGF0YWJhc2Ugb24gcHJv
Y2VzcyBzd2FwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTAzMTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgbWVjaGFuaXNtIGZvciBjYWNoaW5nIHByZXdhcm0gaW5mb3JtYXRpb24gcGVyIGRvbWFp
biBvbiBVSSBwcm9jZXNzIHNpZGUuIFRoaXMgaW5mb3JtYXRpb24KKyAgICAgICAgaXMgdGhlbiBw
YXNzZWQgdG8gbmV3bHkgaW5pdGlhbGl6ZWQgd2ViIHByb2Nlc3NlcyB0aGF0IGFyZSBiZWluZyB1
c2VkIGZvciB0aGUgc2FtZSBkb21haW4uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NGb3JOYXZpZ2F0aW9uSW50ZXJuYWwpOgor
CisgICAgICAgIFBhc3MgcHJld2FybSBpbmZvcm1hdGlvbiBvbiBwcm9jZXNzIHN3YXAgdG8gdGhl
IG5ldyBwcm9jZXNzLgorCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkaWRDb2xs
ZWN0UHJld2FybUluZm9ybWF0aW9uKToKKworICAgICAgICBVSSBwcm9jZXNzIHNpZGUgY2FjaGUu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1By
b3h5OjpkaWRDb2xsZWN0UHJld2FybUluZm9ybWF0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5t
ZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6ZGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKToKKworICAgICAgICBDb2xsZWN0IGFuZCBjYWNo
ZSBwcmV3YXJtIGluZm9ybWF0aW9uIGZvciB0aGUgcHJldmlvdXMgcHJvY2VzcyBvbiBwcm9jZXNz
IHN3YXAuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzOjpwcmV3YXJtV2l0aERvbWFpbkluZm9ybWF0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6c2VuZFByZXdhcm1JbmZvcm1hdGlvbik6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLm1lc3NhZ2VzLmluOgorCiAyMDE4LTEwLTA1ICBaYWNoIExpICA8emFjaGxpQGFwcGxlLmNv
bT4KIAogICAgICAgICBFeHBvc2Ugd2hldGhlciBXS1dlYlByb2Nlc3NQbHVnSW5Ob2RlSGFuZGxl
IGlzIGEgc2VsZWN0IGVsZW1lbnQgdG8gY2xpZW50cwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDIzNjc4NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNiArMTkwLDcgQEAg
c3RydWN0IEV4Y2VwdGlvbkRldGFpbHM7CiBzdHJ1Y3QgRmlsZUNob29zZXJTZXR0aW5nczsKIHN0
cnVjdCBHbG9iYWxXaW5kb3dJZGVudGlmaWVyOwogc3RydWN0IE1lZGlhU3RyZWFtUmVxdWVzdDsK
K3N0cnVjdCBQcmV3YXJtSW5mb3JtYXRpb247CiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOwog
c3RydWN0IFNoYXJlRGF0YTsKIHN0cnVjdCBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2U7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCShyZXZpc2lvbiAy
MzY3ODcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtT
dG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NXYXJt
aW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1VSTFBhcnNlci5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KQEAgLTIxNzMs
OCArMjE3NCwxNCBAQCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9jZXNzUG9vbDo6cHJvCiAg
ICAgfQogCiAgICAgYWN0aW9uID0gUG9saWN5QWN0aW9uOjpTdXNwZW5kOwotICAgIGlmIChSZWZQ
dHI8V2ViUHJvY2Vzc1Byb3h5PiBwcm9jZXNzID0gdHJ5VGFrZVByZXdhcm1lZFByb2Nlc3MocGFn
ZS53ZWJzaXRlRGF0YVN0b3JlKCkpKQorCisgICAgaWYgKFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+
IHByb2Nlc3MgPSB0cnlUYWtlUHJld2FybWVkUHJvY2VzcyhwYWdlLndlYnNpdGVEYXRhU3RvcmUo
KSkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHByZXdhcm1JbmZvcm1hdGlvbiA9IG1fcHJld2FybUlu
Zm9ybWF0aW9uRm9yUmVnaXN0cmFibGVEb21haW4uZ2V0KHRvUmVnaXN0cmFibGVEb21haW4odGFy
Z2V0VVJMKSkpCisgICAgICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpQcmV3YXJtV2l0aERvbWFpbkluZm9ybWF0aW9uKCpwcmV3YXJtSW5mb3JtYXRpb24pLCAwKTsK
KwogICAgICAgICByZXR1cm4gcHJvY2Vzcy5yZWxlYXNlTm9uTnVsbCgpOworICAgIH0KKwogICAg
IHJldHVybiBjcmVhdGVOZXdXZWJQcm9jZXNzKHBhZ2Uud2Vic2l0ZURhdGFTdG9yZSgpKTsKIH0K
IApAQCAtMjI0OCw0ICsyMjU1LDE3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmREaXNwbGF5
Q29uZmlndXIKICNlbmRpZgogfQogCit2b2lkIFdlYlByb2Nlc3NQb29sOjpkaWRDb2xsZWN0UHJl
d2FybUluZm9ybWF0aW9uKGNvbnN0IFN0cmluZyYgcmVnaXN0cmFibGVEb21haW4sIGNvbnN0IFdl
YkNvcmU6OlByZXdhcm1JbmZvcm1hdGlvbiYgcHJld2FybUluZm9ybWF0aW9uKQoreworICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgbWF4aW11bVNpemVUb1ByZXZlbnRVbmxpbWl0ZWRHcm93dGggPSAx
MDA7CisgICAgaWYgKG1fcHJld2FybUluZm9ybWF0aW9uRm9yUmVnaXN0cmFibGVEb21haW4uc2l6
ZSgpID09IG1heGltdW1TaXplVG9QcmV2ZW50VW5saW1pdGVkR3Jvd3RoKQorICAgICAgICBtX3By
ZXdhcm1JbmZvcm1hdGlvbkZvclJlZ2lzdHJhYmxlRG9tYWluLnJlbW92ZShtX3ByZXdhcm1JbmZv
cm1hdGlvbkZvclJlZ2lzdHJhYmxlRG9tYWluLmJlZ2luKCkpOworCisgICAgYXV0byYgdmFsdWUg
PSBtX3ByZXdhcm1JbmZvcm1hdGlvbkZvclJlZ2lzdHJhYmxlRG9tYWluLmVuc3VyZShyZWdpc3Ry
YWJsZURvbWFpbiwgW10geworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3Jl
OjpQcmV3YXJtSW5mb3JtYXRpb24+KCk7CisgICAgfSkuaXRlcmF0b3ItPnZhbHVlOworCisgICAg
KnZhbHVlID0gcHJld2FybUluZm9ybWF0aW9uOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkocmV2aXNpb24g
MjM2Nzg3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAkod29y
a2luZyBjb3B5KQpAQCAtNDQ0LDYgKzQ0NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHVucmVnaXN0
ZXJTdXNwZW5kZWRQYWdlUHJveHkoU3VzcGVuZGVkUGFnZVByb3h5Jik7CiAgICAgdm9pZCBkaWRS
ZWFjaEdvb2RUaW1lVG9QcmV3YXJtKCk7CiAKKyAgICB2b2lkIGRpZENvbGxlY3RQcmV3YXJtSW5m
b3JtYXRpb24oY29uc3QgU3RyaW5nJiByZWdpc3RyYWJsZURvbWFpbiwgY29uc3QgV2ViQ29yZTo6
UHJld2FybUluZm9ybWF0aW9uJik7CisKICAgICB2b2lkIHNjcmVlblByb3BlcnRpZXNTdGF0ZUNo
YW5nZWQoKTsKIAogICAgIHZvaWQgYWRkTW9ja01lZGlhRGV2aWNlKGNvbnN0IFdlYkNvcmU6Ok1v
Y2tNZWRpYURldmljZSYpOwpAQCAtNjk2LDYgKzY5OCw4IEBAIHByaXZhdGU6CiAKICAgICBIYXNo
TWFwPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSwgVmVjdG9yPFN1c3BlbmRlZFBhZ2VQcm94
eSo+PiBtX3N1c3BlbmRlZFBhZ2VzOwogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8V2ViUHJv
Y2Vzc1Byb3h5Pj4gbV9zd2FwcGVkUHJvY2Vzc2VzUGVyUmVnaXN0cmFibGVEb21haW47CisKKyAg
ICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlByZXdhcm1JbmZvcm1h
dGlvbj4+IG1fcHJld2FybUluZm9ybWF0aW9uRm9yUmVnaXN0cmFibGVEb21haW47CiB9OwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyMzY3ODcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMzLDYgKzE0MzMs
MTEgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OmRpZENoZWNrUHJvY2Vzc0xvYwogICAgIGNhbGxi
YWNrKGlzTG9jYWxseVJlYWNoYWJsZSA/IE1lc3NhZ2VQb3J0Q2hhbm5lbFByb3ZpZGVyOjpIYXNB
Y3Rpdml0eTo6WWVzIDogTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5OjpO
byk7CiB9CiAKK3ZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRDb2xsZWN0UHJld2FybUluZm9ybWF0
aW9uKGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBXZWJDb3JlOjpQcmV3YXJtSW5mb3JtYXRp
b24mIHByZXdhcm1JbmZvcm1hdGlvbikKK3sKKyAgICBwcm9jZXNzUG9vbCgpLmRpZENvbGxlY3RQ
cmV3YXJtSW5mb3JtYXRpb24oZG9tYWluLCBwcmV3YXJtSW5mb3JtYXRpb24pOworfQorCiAjaWYg
UExBVEZPUk0oV0FUQ0hPUykKIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OnRha2VCYWNrZ3JvdW5k
QWN0aXZpdHlUb2tlbkZvckZ1bGxzY3JlZW5JbnB1dCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjM2Nzg3KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNCw2
ICszMTQsOCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBjYW5UZXJtaW5hdGVDaGlsZFByb2Nlc3Mo
KTsKIAorICAgIHZvaWQgZGlkQ29sbGVjdFByZXdhcm1JbmZvcm1hdGlvbihjb25zdCBTdHJpbmcm
IGRvbWFpbiwgY29uc3QgV2ViQ29yZTo6UHJld2FybUluZm9ybWF0aW9uJik7CisKICAgICB2b2lk
IGxvZ0RpYWdub3N0aWNNZXNzYWdlRm9yUmVzb3VyY2VMaW1pdFRlcm1pbmF0aW9uKGNvbnN0IFN0
cmluZyYgbGltaXRLZXkpOwogCiAgICAgZW51bSBjbGFzcyBJc1dlYWsgeyBObywgWWVzIH07Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lm1l
c3NhZ2VzLmluCShyZXZpc2lvbiAyMzY3ODcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDgg
QEAgbWVzc2FnZXMgLT4gV2ViUHJvY2Vzc1Byb3h5IExlZ2FjeVJlY2VpdgogICAgIERpZERlbGl2
ZXJNZXNzYWdlUG9ydE1lc3NhZ2VzKHVpbnQ2NF90IG1lc3NhZ2VCYXRjaElkZW50aWZpZXIpCiAg
ICAgRGlkQ2hlY2tQcm9jZXNzTG9jYWxQb3J0Rm9yQWN0aXZpdHkodWludDY0X3QgY2FsbGJhY2tJ
ZGVudGlmaWVyLCBib29sIGlzTG9jYWxseVJlYWNoYWJsZSkKIAorICAgIERpZENvbGxlY3RQcmV3
YXJtSW5mb3JtYXRpb24oU3RyaW5nIGRvbWFpbiwgc3RydWN0IFdlYkNvcmU6OlByZXdhcm1JbmZv
cm1hdGlvbiBwcmV3YXJtSW5mb3JtYXRpb24pCisKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBD
YWNoZU1lZGlhTUlNRVR5cGVzKFZlY3RvcjxTdHJpbmc+IHR5cGVzKQogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAyMzY3ODcpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQyNSw2ICs0MjUsMTEgQEAgdm9pZCBXZWJQcm9jZXNzOjpwcmV3YXJtKCkKICAgICBXZWJD
b3JlOjpQcm9jZXNzV2FybWluZzo6cHJld2FybSgpOwogfQogCit2b2lkIFdlYlByb2Nlc3M6OnBy
ZXdhcm1XaXRoRG9tYWluSW5mb3JtYXRpb24oY29uc3QgV2ViQ29yZTo6UHJld2FybUluZm9ybWF0
aW9uJiBwcmV3YXJtSW5mb3JtYXRpb24pCit7CisgICAgV2ViQ29yZTo6UHJvY2Vzc1dhcm1pbmc6
OnByZXdhcm1XaXRoSW5mb3JtYXRpb24ocHJld2FybUluZm9ybWF0aW9uKTsKK30KKwogdm9pZCBX
ZWJQcm9jZXNzOjpyZWdpc3RlclVSTFNjaGVtZUFzRW1wdHlEb2N1bWVudChjb25zdCBTdHJpbmcm
IHVybFNjaGVtZSkKIHsKICAgICBTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Vt
cHR5RG9jdW1lbnQodXJsU2NoZW1lKTsKQEAgLTE0NTksNiArMTQ2NCwxMyBAQCB2b2lkIFdlYlBy
b2Nlc3M6OnByb2Nlc3NEaWRSZXN1bWUoKQogI2VuZGlmCiB9CiAKK3ZvaWQgV2ViUHJvY2Vzczo6
c2VuZFByZXdhcm1JbmZvcm1hdGlvbihjb25zdCBTdHJpbmcmIHJlZ2lzdHJhYmxlRG9tYWluKQor
eworICAgIGlmIChyZWdpc3RyYWJsZURvbWFpbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KyAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
UHJveHk6OkRpZENvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24ocmVnaXN0cmFibGVEb21haW4sIFdl
YkNvcmU6OlByb2Nlc3NXYXJtaW5nOjpjb2xsZWN0UHJld2FybUluZm9ybWF0aW9uKCkpLCAwKTsK
K30KKwogdm9pZCBXZWJQcm9jZXNzOjpwYWdlRGlkRW50ZXJXaW5kb3codWludDY0X3QgcGFnZUlE
KQogewogICAgIG1fcGFnZXNJbldpbmRvd3MuYWRkKHBhZ2VJRCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHJldmlzaW9uIDIzNjc4NykKKysrIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcg
QEAgc3RydWN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllcjsKIHN0cnVjdCBNZXNzYWdlV2l0aE1lc3Nh
Z2VQb3J0czsKIHN0cnVjdCBNb2NrTWVkaWFEZXZpY2U7CiBzdHJ1Y3QgUGx1Z2luSW5mbzsKK3N0
cnVjdCBQcmV3YXJtSW5mb3JtYXRpb247CiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOwogc3Ry
dWN0IFNvdXBOZXR3b3JrUHJveHlTZXR0aW5nczsKIApAQCAtMjAwLDYgKzIwMSw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGNhbmNlbFByZXBhcmVUb1N1c3BlbmQoKTsKICAgICB2b2lkIHByb2Nlc3NE
aWRSZXN1bWUoKTsKIAorICAgIHZvaWQgc2VuZFByZXdhcm1JbmZvcm1hdGlvbihjb25zdCBTdHJp
bmcmIHJlZ2lzdHJhYmxlRG9tYWluKTsKKwogI2lmIFBMQVRGT1JNKElPUykKICAgICB2b2lkIHJl
c2V0QWxsR2VvbG9jYXRpb25QZXJtaXNzaW9ucygpOwogI2VuZGlmCkBAIC0yNDYsNiArMjQ5LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmKTsKIAogICAgIHZvaWQgcHJld2FybSgpOworICAgIHZv
aWQgcHJld2FybVdpdGhEb21haW5JbmZvcm1hdGlvbihjb25zdCBXZWJDb3JlOjpQcmV3YXJtSW5m
b3JtYXRpb24mKTsKIAogI2lmIFVTRShPU19TVEFURSkKICAgICB2b2lkIHJlZ2lzdGVyV2l0aFN0
YXRlRHVtcGVyKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5t
ZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjM2Nzg3KQorKysgU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3
LDggQEAgbWVzc2FnZXMgLT4gV2ViUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAgQ3JlYXRl
V2ViUGFnZSh1aW50NjRfdCBuZXdQYWdlSUQsIHN0cnVjdCBXZWJLaXQ6OldlYlBhZ2VDcmVhdGlv
blBhcmFtZXRlcnMgcGFnZUNyZWF0aW9uUGFyYW1ldGVycykKIAogICAgIFByZXdhcm0oKTsKLSAK
KyAgICBQcmV3YXJtV2l0aERvbWFpbkluZm9ybWF0aW9uKHN0cnVjdCBXZWJDb3JlOjpQcmV3YXJt
SW5mb3JtYXRpb24gcHJld2FybUluZm9ybWF0aW9uKQorCiAgICAgIyBHbG9iYWwgcHJlZmVyZW5j
ZXMuCiAgICAgU2V0Q2FjaGVNb2RlbCh1aW50MzJfdCBjYWNoZU1vZGVsKQogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjM2
Nzg3KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNTMsOSArMTE1MywxMiBAQCB2b2lkIFdlYlBhZ2U6OmNsb3NlKCkK
ICAgICBtX2lzQ2xvc2VkID0gdHJ1ZTsKIAogICAgIC8vIElmIHRoZXJlIGlzIHN0aWxsIG5vIFVS
TCwgdGhlbiB3ZSBuZXZlciBsb2FkZWQgYW55dGhpbmcgaW4gdGhpcyBwYWdlLCBzbyBub3RoaW5n
IHRvIHJlcG9ydC4KLSAgICBpZiAoIW1haW5XZWJGcmFtZSgpLT51cmwoKS5pc0VtcHR5KCkpCisg
ICAgaWYgKCFtYWluV2ViRnJhbWUoKS0+dXJsKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIHJlcG9y
dFVzZWRGZWF0dXJlcygpOwogCisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnNlbmRQ
cmV3YXJtSW5mb3JtYXRpb24odG9SZWdpc3RyYWJsZURvbWFpbihtYWluV2ViRnJhbWUoKS0+dXJs
KCkpKTsKKyAgICB9CisKICAgICBpZiAocGFnZUdyb3VwKCktPmlzVmlzaWJsZVRvSW5qZWN0ZWRC
dW5kbGUoKSAmJiBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5pbmplY3RlZEJ1bmRsZSgpKQogICAg
ICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5pbmplY3RlZEJ1bmRsZSgpLT53aWxsRGVzdHJv
eVBhZ2UodGhpcyk7CiAKQEAgLTI4NDIsNiArMjg0NSw4IEBAIHZvaWQgV2ViUGFnZTo6ZGlkUmVj
ZWl2ZVBvbGljeURlY2lzaW9uKHUKICAgICBpZiAocG9saWN5QWN0aW9uID09IFBvbGljeUFjdGlv
bjo6U3VzcGVuZCkgewogICAgICAgICBBU1NFUlQoZnJhbWUgPT0gbV9tYWluRnJhbWUpOwogICAg
ICAgICBzZXRJc1N1c3BlbmRlZCh0cnVlKTsKKworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5zZW5kUHJld2FybUluZm9ybWF0aW9uKHRvUmVnaXN0cmFibGVEb21haW4obWFpbldlYkZy
YW1lKCktPnVybCgpKSk7CiAgICAgfQogICAgIGZyYW1lLT5kaWRSZWNlaXZlUG9saWN5RGVjaXNp
b24obGlzdGVuZXJJRCwgcG9saWN5QWN0aW9uLCBuYXZpZ2F0aW9uSUQsIGRvd25sb2FkSUQsIFdU
Rk1vdmUod2Vic2l0ZVBvbGljaWVzKSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351764</attachid>
            <date>2018-10-08 02:25:08 -0700</date>
            <delta_ts>2018-10-08 03:44:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>prewarm-font-domain-9.patch</filename>
            <type>text/plain</type>
            <size>26445</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDE4LTEwLTA4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBQcmV3YXJtIEZvbnREYXRhYmFz
ZSBvbiBwcm9jZXNzIHN3YXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5MDMxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEltcGxlbWVudCBiYXNpYyBwcmV3YXJtaW5nIG9mIEZvbnREYXRhYmFzZS4gV2hl
biB0aGUgZG9tYWluIG9mIHRoZSBmaXJzdCBwYWdlIGxvYWQgb24KKyAgICAgICAgYSBuZXcgcHJv
Y2VzcyBpcyBrbm93biB3ZSBwYXNzIHRoZSBsaXN0IG9mIGZvbnQgZmFtaWxpZXMgcHJldmlvdXMg
dXNlZCBieSB0aGF0IGRvbWFpbiB0byB0aGUKKyAgICAgICAgcHJvY2Vzcy4gVGhpcyBpcyB1c2Vk
IHRvIHByZXdhcm0gQ29yZVRleHQgZm9udCBkYXRhYmFzZS4gSW5pdGlhbGl6YXRpb24gKHdoaWNo
IGludm9sdmVzIGxvdHMgb2YKKyAgICAgICAgYmxvY2tpbmcgSVBDKSBoYXBwZW5zIG91dHNpZGUg
dGhlIG1haW4gdGhyZWFkIHNvIHRoZSBmb250cyBhcmUgcmVhZHkgdG8gdXNlIHdoZW4gbmVlZGVk
LgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIHBhZ2UvUHJld2FybUluZm9ybWF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UHJld2FybUluZm9ybWF0aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UHJl
d2FybUluZm9ybWF0aW9uOjpkZWNvZGUpOgorCisgICAgICAgIEFkZCBkYXRhIHN0cnVjdHVyZSBm
b3IgcHJld2FybSBpbmZvcm1hdGlvbiB3aXRoIGVuY29kZS9kZWNvZGUgc3VwcG9ydC4KKworICAg
ICAgICAqIHBhZ2UvUHJvY2Vzc1dhcm1pbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vz
c1dhcm1pbmc6OmNvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UHJvY2Vzc1dhcm1pbmc6OnByZXdhcm1XaXRoSW5mb3JtYXRpb24pOgorCisgICAgICAgIFByZXdh
cm1pbmcgaW50ZXJmYWNlIHRvIGJlIHVzZWQgZnJvbSBXZWJLaXQuCisKKyAgICAgICAgKiBwYWdl
L1Byb2Nlc3NXYXJtaW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y29sbGVjdFByZXdhcm1JbmZvcm1h
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnByZXdhcm0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnREYXRhYmFzZTo6Y29sbGVjdGlvbkZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250RGF0YWJhc2U6OmZvbnRGb3JQb3N0U2NyaXB0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250RGF0YWJhc2U6OmNsZWFyKToKKworICAgICAgICBBZGQgbXV0ZXggZm9yIHRocmVhZCBzYWZl
IGFjY2Vzcy4KKworICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y29sbGVjdFByZXdhcm1JbmZv
cm1hdGlvbiBjb25zdCk6CisKKyAgICAgICAgQ29sbGVjdCBmb250IGZhbWlsaWVzIHNlZW4gYnkg
dGhpcyBwcm9jZXNzLgorCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnByZXdhcm0pOgor
CisgICAgICAgIFByZXdhcm0gRm9udERhdGFiYXNlIGluIGEgZGlzcGF0Y2ggcXVldWUuCisKIDIw
MTgtMTAtMDcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXhl
ZCBidWlsZGluZyB3aXRoIHRoZSBsYXRlc3QgbWFjT1MgU0RLCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzY5
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3NTksNiArNDc1OSw3IEBACiAJCUU0NEI0QkI0MTQxNjUwRDcw
MDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0NEI0QkIyMTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNo
ZWNrZXIuaCAqLzsgfTsKIAkJRTQ0RkExODUxQkNBNkI1QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJl
ZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDRGQTE4NDFCQ0E2QjVBMDA5MUI2RUYgLyogQ29tcG9zZWRUcmVlSXRlcmF0b3IuaCAqLzsg
fTsKIAkJRTQ1MzIyQUMxNDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVjdG9yUXVlcnkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTMyMkFBMTQwQ0UyNjcw
MDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmggKi87IH07CisJCUU0NjA1RkVDMjE2NjQ4MDkwMEU1
MzA0NiAvKiBQcmV3YXJtSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjA1RkVBMjE2NjQ4MDgwMEU1MzA0NiAvKiBQcmV3YXJtSW5m
b3JtYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFNDYxODAyRDFDOEREMjkwMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjE4MDJDMUM4REQyOTAw
MDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICovOyB9OwogCQlFNDYxRDY1RjFCQjBDODBEMDBD
QjU2NDUgLyogU3R5bGVTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ2MUQ2NUUxQkIwQzgwRDAwQ0I1NjQ1IC8qIFN0eWxlU2NvcGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDYyQTRBMTEx
M0U3MUJFMDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDYyQTRBMDExM0U3MUJFMDA0QTQyMjAgLyogSW50UG9p
bnRIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTE0NDM5LDYgKzE0NDQwLDcgQEAKIAkJRTQ1MzkwMzQwRUFGRDYzNzAwMzY5NUM4IC8qIFNj
cm9sbFZpZXdJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBT
Y3JvbGxWaWV3SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDUzOTAzQzBF
QUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2lkZ2V0SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDUzOTBBRDBFQUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVtb3J5SU9TLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5c3RlbU1lbW9yeUlPUy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NjA1RkVBMjE2NjQ4MDgwMEU1MzA0NiAvKiBQcmV3
YXJtSW5mb3JtYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJld2Fy
bUluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NjE4MDJDMUM4
REQyOTAwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdHlsZVJlbGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDYxODAyRTFDOERENEQyMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSZWxhdGlvbnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNDYxRDY1QzFCQjBDN0YwMDBDQjU2NDUgLyogU3R5bGVT
Y29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZVNjb3Bl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NTQ0LDYgKzE5NTQ2LDcgQEAK
IAkJCQk1Q0ZDNDM0RTE5MjQwNkE5MDBBMEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9sbGVyLmNw
cCAqLywKIAkJCQk1Q0ZDNDM0RjE5MjQwNkE5MDBBMEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9s
bGVyLmggKi8sCiAJCQkJMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3BlbmluZ09i
c2VydmVyLmggKi8sCisJCQkJRTQ2MDVGRUEyMTY2NDgwODAwRTUzMDQ2IC8qIFByZXdhcm1JbmZv
cm1hdGlvbi5oICovLAogCQkJCUI3NzZENDNDMTEwNDUyNzUwMEJFQjBFQyAvKiBQcmludENvbnRl
eHQuY3BwICovLAogCQkJCUI3NzZENDNBMTEwNDUyNUQwMEJFQjBFQyAvKiBQcmludENvbnRleHQu
aCAqLywKIAkJCQlFNDIwNTAxNjIxNDE5MDFCMDA2NkVGM0IgLyogUHJvY2Vzc1dhcm1pbmcuY3Bw
ICovLApAQCAtMjc1NzgsNiArMjc1ODEsNyBAQAogCQkJCUNFNzk5Rjk4MUM2QTQ2QkMwMDk3QjUx
OCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDRTc5OUZBQzFDNkE1MDY2MDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdERpcmVjdGl2ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFEMDE1Q0EwRjRCNUM3MTAwNEE2
NjJGIC8qIENvbnRlbnRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDYwNUZFQzIxNjY0ODA5
MDBFNTMwNDYgLyogUHJld2FybUluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzYy
N0I4RTE0RkIzQ0VFMDAyQ0RDQTEgLyogQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzQjZBMEU2MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDY1QUQ0RjUwQjBDMkVEQTAwNUEyQjFEIC8qIENvbnRleHRN
ZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJl
d2FybUluZm9ybWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QcmV3
YXJtSW5mb3JtYXRpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1By
ZXdhcm1JbmZvcm1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgUHJld2FybUluZm9ybWF0aW9uIHsKKyAgICBGb250UHJl
d2FybUluZm9ybWF0aW9uIGZvbnQ7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8UHJld2FybUluZm9ybWF0aW9uPiBkZWNvZGUoRGVjb2RlciYpOwor
fTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgUHJld2FybUluZm9ybWF0aW9uOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IGZvbnQ7Cit9
CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFByZXdhcm1JbmZvcm1h
dGlvbj4gUHJld2FybUluZm9ybWF0aW9uOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBQcmV3YXJtSW5mb3JtYXRpb24gcHJld2FybUluZm87CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShwcmV3YXJtSW5mby5mb250KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBw
cmV3YXJtSW5mbzsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Qcm9jZXNzV2Fy
bWluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Qcm9jZXNzV2FybWlu
Zy5jcHAJKHJldmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJvY2Vzc1dh
cm1pbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgUHJvY2Vzc1dh
cm1pbmc6OmluaXRpYWxpemVOYW1lcygpCiAgICAgV2ViS2l0Rm9udEZhbWlseU5hbWVzOjppbml0
KCk7CiB9CiAgICAgCi12b2lkIFByb2Nlc3NXYXJtaW5nOjpwcmV3YXJtKCkKK3ZvaWQgUHJvY2Vz
c1dhcm1pbmc6OnByZXdhcm1HbG9iYWxseSgpCiB7CiAgICAgaW5pdGlhbGl6ZU5hbWVzKCk7CiAg
ICAgCkBAIC03Niw0ICs3NiwxNiBAQCB2b2lkIFByb2Nlc3NXYXJtaW5nOjpwcmV3YXJtKCkKICNl
bmRpZgogfQogCitXZWJDb3JlOjpQcmV3YXJtSW5mb3JtYXRpb24gUHJvY2Vzc1dhcm1pbmc6OmNv
bGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oKQoreworICAgIFByZXdhcm1JbmZvcm1hdGlvbiBpbmZv
OworICAgIGluZm8uZm9udCA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuY29sbGVjdFByZXdhcm1J
bmZvcm1hdGlvbigpOworICAgIHJldHVybiBpbmZvOworfQorCit2b2lkIFByb2Nlc3NXYXJtaW5n
OjpwcmV3YXJtV2l0aEluZm9ybWF0aW9uKGNvbnN0IFByZXdhcm1JbmZvcm1hdGlvbiYgcHJld2Fy
bUluZm8pCit7CisgICAgRm9udENhY2hlOjpzaW5nbGV0b24oKS5wcmV3YXJtKHByZXdhcm1JbmZv
LmZvbnQpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Byb2Nlc3NXYXJtaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Qcm9jZXNzV2FybWluZy5oCShy
ZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Byb2Nlc3NXYXJtaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsyNSwxNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIlByZXdhcm1JbmZvcm1hdGlvbi5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFdFQkNPUkVfRVhQT1JUIFByb2Nlc3NXYXJtaW5nIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
dm9pZCBpbml0aWFsaXplTmFtZXMoKTsKLSAgICBzdGF0aWMgdm9pZCBwcmV3YXJtKCk7CisgICAg
c3RhdGljIHZvaWQgcHJld2FybUdsb2JhbGx5KCk7CisKKyAgICBzdGF0aWMgUHJld2FybUluZm9y
bWF0aW9uIGNvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oKTsKKyAgICBzdGF0aWMgdm9pZCBwcmV3
YXJtV2l0aEluZm9ybWF0aW9uKGNvbnN0IFByZXdhcm1JbmZvcm1hdGlvbiYpOwogfTsKIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3Bw
CShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODIsNiArNDgyLDE2IEBAIHZvaWQgRm9u
dENhY2hlOjppbnZhbGlkYXRlKCkKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKKworRm9udFBy
ZXdhcm1JbmZvcm1hdGlvbiBGb250Q2FjaGU6OmNvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oKSBj
b25zdAoreworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgRm9udENhY2hlOjpwcmV3YXJtKGNv
bnN0IEZvbnRQcmV3YXJtSW5mb3JtYXRpb24mKQoreworfQorCiBSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJp
bmcmKQogewogICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHJldmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTY3LDYgKzY4LDggQEAgdHlwZWRlZiBJTUxhbmdGb250
TGluayBJTUxhbmdGb250TGlua1R5cAogI2VuZGlmCiAjZW5kaWYKIAordXNpbmcgRm9udFByZXdh
cm1JbmZvcm1hdGlvbiA9IFZlY3RvcjxTdHJpbmc+OworCiAvLyBUaGlzIGtleSBjb250YWlucyB0
aGUgRm9udERlc2NyaXB0aW9uIGZpZWxkcyBvdGhlciB0aGFuIGZhbWlseSB0aGF0IG1hdHRlciB3
aGVuIGZldGNoaW5nIEZvbnREYXRhcyAocGxhdGZvcm0gZm9udHMpLgogc3RydWN0IEZvbnREZXNj
cmlwdGlvbktleSB7CiAgICAgRm9udERlc2NyaXB0aW9uS2V5KCkgPSBkZWZhdWx0OwpAQCAtMjM1
LDYgKzIzOCw5IEBAIHB1YmxpYzoKICAgICBib29sIHNob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZv
ckFjY2Vzc2liaWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE1vY2tCb2xkU3lzdGVtRm9u
dEZvckFjY2Vzc2liaWxpdHk7IH0KICAgICB2b2lkIHNldFNob3VsZE1vY2tCb2xkU3lzdGVtRm9u
dEZvckFjY2Vzc2liaWxpdHkoYm9vbCBzaG91bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JBY2Nlc3Np
YmlsaXR5KSB7IG1fc2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9yQWNjZXNzaWJpbGl0eSA9IHNo
b3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHk7IH0KIAorICAgIEZvbnRQcmV3
YXJtSW5mb3JtYXRpb24gY29sbGVjdFByZXdhcm1JbmZvcm1hdGlvbigpIGNvbnN0OworICAgIHZv
aWQgcHJld2FybShjb25zdCBGb250UHJld2FybUluZm9ybWF0aW9uJik7CisKIHByaXZhdGU6CiAg
ICAgRm9udENhY2hlKCk7CiAgICAgfkZvbnRDYWNoZSgpID0gZGVsZXRlOwpAQCAtMjU4LDYgKzI2
NCw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFj
Y2Vzc2liaWxpdHkgeyBmYWxzZSB9OwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgSGFzaFNl
dDxTdHJpbmc+IG1fc2VlbkZhbWlsaWVzRm9yUHJld2FybWluZzsKKyAgICBSZWZQdHI8V29ya1F1
ZXVlPiBtX3ByZXdhcm1RdWV1ZTsKKwogICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENvbnRy
b2xsZXI7CiAjZW5kaWYKICAgICBmcmllbmQgY2xhc3MgRm9udDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVD
b3JlVGV4dC5jcHAJKHJldmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODg2LDYgKzg4Niw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEluc3RhbGxlZEZvbnRGYW1pbHkm
IGNvbGxlY3Rpb25Gb3JGYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogICAgIHsKKyAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2tlcihtX2Rlc2NyaXB0b3JNYXBMb2NrKTsK
KwogICAgICAgICBhdXRvIGZvbGRlZCA9IGZhbWlseU5hbWUuZm9sZENhc2UoKTsKICAgICAgICAg
cmV0dXJuIG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzLmVuc3VyZShmb2xkZWQsIFsmXSB7
CiAgICAgICAgICAgICBhdXRvIGZhbWlseU5hbWVTdHJpbmcgPSBmb2xkZWQuY3JlYXRlQ0ZTdHJp
bmcoKTsKQEAgLTkxMCw2ICs5MTIsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBJbnN0YWxsZWRG
b250JiBmb250Rm9yUG9zdFNjcmlwdE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwb3N0U2NyaXB0
TmFtZSkKICAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrZXIobV9kZXNj
cmlwdG9yTWFwTG9jayk7CisKICAgICAgICAgY29uc3QgYXV0byYgZm9sZGVkID0gRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6Zm9sZGVkRmFtaWx5TmFtZShwb3N0U2NyaXB0TmFtZSk7CiAgICAgICAg
IHJldHVybiBtX3Bvc3RTY3JpcHROYW1lVG9Gb250RGVzY3JpcHRvcnMuZW5zdXJlKGZvbGRlZCwg
WyZdIHsKICAgICAgICAgICAgIGF1dG8gcG9zdFNjcmlwdE5hbWVTdHJpbmcgPSBmb2xkZWQuY3Jl
YXRlQ0ZTdHJpbmcoKTsKQEAgLTkzMSw2ICs5MzUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNs
ZWFyKCkKICAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrZXIobV9kZXNj
cmlwdG9yTWFwTG9jayk7CisKICAgICAgICAgbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnMu
Y2xlYXIoKTsKICAgICAgICAgbV9wb3N0U2NyaXB0TmFtZVRvRm9udERlc2NyaXB0b3JzLmNsZWFy
KCk7CiAgICAgfQpAQCAtOTQzLDYgKzk0OSw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAor
ICAgIExvY2sgbV9kZXNjcmlwdG9yTWFwTG9jazsKICAgICBIYXNoTWFwPFN0cmluZywgSW5zdGFs
bGVkRm9udEZhbWlseT4gbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnM7CiAgICAgSGFzaE1h
cDxTdHJpbmcsIEluc3RhbGxlZEZvbnQ+IG1fcG9zdFNjcmlwdE5hbWVUb0ZvbnREZXNjcmlwdG9y
czsKICAgICBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBtX2FsbG93VXNlckluc3RhbGxlZEZvbnRz
OwpAQCAtMTI2MSw2ICsxMjY4LDkgQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+
IEZvbnRDYQogICAgIGlmICghZm9udCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBp
ZiAoZm9udERlc2NyaXB0aW9uLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkgPT0gQWxs
b3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKQorICAgICAgICBtX3NlZW5GYW1pbGllc0ZvclByZXdh
cm1pbmcuYWRkKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZvbGRlZEZhbWlseU5hbWUoZmFtaWx5
KSk7CisKICAgICBib29sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY09ibGlxdWU7CiAgICAgc3Rk
Ojp0aWUoc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSkgPSBjb21wdXRlTmVjZXNzYXJ5
U3ludGhlc2lzKGZvbnQuZ2V0KCksIGZvbnREZXNjcmlwdGlvbikuYm9sZE9ibGlxdWVQYWlyKCk7
CiAKQEAgLTE0OTksNCArMTUwOSwyOSBAQCBSZWY8Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0
RmFsbGJhY2tGCiAgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKTsK
IH0KIAorRm9udFByZXdhcm1JbmZvcm1hdGlvbiBGb250Q2FjaGU6OmNvbGxlY3RQcmV3YXJtSW5m
b3JtYXRpb24oKSBjb25zdAoreworICAgIEZvbnRQcmV3YXJtSW5mb3JtYXRpb24gZm9udFByZXdh
cm1JbmZvcm1hdGlvbjsKKyAgICBmb250UHJld2FybUluZm9ybWF0aW9uID0gY29weVRvVmVjdG9y
KG1fc2VlbkZhbWlsaWVzRm9yUHJld2FybWluZyk7CisgICAgcmV0dXJuIGZvbnRQcmV3YXJtSW5m
b3JtYXRpb247Cit9CisKK3ZvaWQgRm9udENhY2hlOjpwcmV3YXJtKGNvbnN0IEZvbnRQcmV3YXJt
SW5mb3JtYXRpb24mIGZvbnRQcmV3YXJtSW5mb3JtYXRpb24pCit7CisgICAgYXV0byYgZmFtaWxp
ZXMgPSBmb250UHJld2FybUluZm9ybWF0aW9uOworCisgICAgaWYgKGZhbWlsaWVzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3ByZXdhcm1RdWV1ZSkKKyAgICAgICAg
bV9wcmV3YXJtUXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgiV2ViS2l0IGZvbnQgcHJld2FybSBx
dWV1ZSIpOworCisgICAgYXV0byYgZGF0YWJhc2UgPSBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRp
c2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7CisKKyAgICBtX3ByZXdhcm1RdWV1ZS0+ZGlz
cGF0Y2goWyZkYXRhYmFzZSwgZmFtaWxpZXMgPSBmYW1pbGllcy5pc29sYXRlZENvcHkoKV0gewor
ICAgICAgICBmb3IgKGF1dG8mIGZhbWlseSA6IGZhbWlsaWVzKQorICAgICAgICAgICAgZGF0YWJh
c2UuY29sbGVjdGlvbkZvckZhbWlseShmYW1pbHkpOworICAgIH0pOworfQorCiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwkocmV2aXNpb24gMjM2OTExKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw0NCBAQAorMjAxOC0xMC0wOCAgQW50dGkgS29pdmlzdG8gIDxh
bnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUHJld2FybSBGb250RGF0YWJhc2Ugb24gcHJvY2Vz
cyBzd2FwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTAzMTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgbWVjaGFuaXNtIGZvciBjYWNoaW5nIHByZXdhcm0gaW5mb3JtYXRpb24gcGVyIGRvbWFpbiBv
biBVSSBwcm9jZXNzIHNpZGUuIFRoaXMgaW5mb3JtYXRpb24KKyAgICAgICAgaXMgdGhlbiBwYXNz
ZWQgdG8gbmV3bHkgaW5pdGlhbGl6ZWQgd2ViIHByb2Nlc3NlcyB0aGF0IGFyZSBiZWluZyB1c2Vk
IGZvciB0aGUgc2FtZSBkb21haW4uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NGb3JOYXZpZ2F0aW9uSW50ZXJuYWwpOgorCisg
ICAgICAgIFBhc3MgcHJld2FybSBpbmZvcm1hdGlvbiBvbiBwcm9jZXNzIHN3YXAgdG8gdGhlIG5l
dyBwcm9jZXNzLgorCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkaWRDb2xsZWN0
UHJld2FybUluZm9ybWF0aW9uKToKKworICAgICAgICBVSSBwcm9jZXNzIHNpZGUgY2FjaGUuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5
OjpkaWRDb2xsZWN0UHJld2FybUluZm9ybWF0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNz
YWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
ZGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKToKKworICAgICAgICBDb2xsZWN0IGFuZCBjYWNoZSBw
cmV3YXJtIGluZm9ybWF0aW9uIGZvciB0aGUgcHJldmlvdXMgcHJvY2VzcyBvbiBwcm9jZXNzIHN3
YXAuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzOjpwcmV3YXJtR2xvYmFsbHkpOgorCisgICAgICAgIFJlbmFtZWQgZm9y
IGNsYXJpdHkuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cHJld2FybVdpdGhEb21h
aW5JbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnNlbmRQcmV3YXJt
SW5mb3JtYXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKwogMjAxOC0xMC0wNyAgRGFu
IEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFRyaWVkIHRvIGZpeCBIQVZF
KExJTktfUFJFVklFVykgaU9TIGJ1aWxkcy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDYgKzE5MCw3IEBAIHN0cnVj
dCBFeGNlcHRpb25EZXRhaWxzOwogc3RydWN0IEZpbGVDaG9vc2VyU2V0dGluZ3M7CiBzdHJ1Y3Qg
R2xvYmFsV2luZG93SWRlbnRpZmllcjsKIHN0cnVjdCBNZWRpYVN0cmVhbVJlcXVlc3Q7CitzdHJ1
Y3QgUHJld2FybUluZm9ybWF0aW9uOwogc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKIHN0cnVj
dCBTaGFyZURhdGE7CiBzdHJ1Y3QgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlOwpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkocmV2aXNpb24gMjM2OTEx
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NSw2ICs4NSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFn
ZVNlc3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Qcm9jZXNzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzV2FybWluZy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9VUkxQYXJzZXIuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CkBAIC03MzYsNyArNzM3
LDcgQEAgV2ViUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlTgogICAgICAgICBB
U1NFUlQoIW1fcHJld2FybWVkUHJvY2Vzcyk7CiAgICAgICAgIG1fcHJld2FybWVkUHJvY2VzcyA9
ICZwcm9jZXNzOwogICAgICAgICAKLSAgICAgICAgbV9wcmV3YXJtZWRQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzOjpQcmV3YXJtKCksIDApOworICAgICAgICBtX3ByZXdhcm1lZFBy
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlByZXdhcm1HbG9iYWxseSgpLCAwKTsK
ICAgICB9CiAKICAgICBpZiAobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzVGVybWluYXRpb25UaW1l
ci5pc0FjdGl2ZSgpKQpAQCAtMjE3Myw4ICsyMTc0LDE0IEBAIFJlZjxXZWJQcm9jZXNzUHJveHk+
IFdlYlByb2Nlc3NQb29sOjpwcm8KICAgICB9CiAKICAgICBhY3Rpb24gPSBQb2xpY3lBY3Rpb246
OlN1c3BlbmQ7Ci0gICAgaWYgKFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IHByb2Nlc3MgPSB0cnlU
YWtlUHJld2FybWVkUHJvY2VzcyhwYWdlLndlYnNpdGVEYXRhU3RvcmUoKSkpCisKKyAgICBpZiAo
UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzcyA9IHRyeVRha2VQcmV3YXJtZWRQcm9jZXNz
KHBhZ2Uud2Vic2l0ZURhdGFTdG9yZSgpKSkgeworICAgICAgICBpZiAoYXV0byogcHJld2FybUlu
Zm9ybWF0aW9uID0gbV9wcmV3YXJtSW5mb3JtYXRpb25Gb3JSZWdpc3RyYWJsZURvbWFpbi5nZXQo
dG9SZWdpc3RyYWJsZURvbWFpbih0YXJnZXRVUkwpKSkKKyAgICAgICAgICAgIHByb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlByZXdhcm1XaXRoRG9tYWluSW5mb3JtYXRpb24oKnBy
ZXdhcm1JbmZvcm1hdGlvbiksIDApOworCiAgICAgICAgIHJldHVybiBwcm9jZXNzLnJlbGVhc2VO
b25OdWxsKCk7CisgICAgfQorCiAgICAgcmV0dXJuIGNyZWF0ZU5ld1dlYlByb2Nlc3MocGFnZS53
ZWJzaXRlRGF0YVN0b3JlKCkpOwogfQogCkBAIC0yMjQ4LDQgKzIyNTUsMTcgQEAgdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2VuZERpc3BsYXlDb25maWd1cgogI2VuZGlmCiB9CiAKK3ZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmRpZENvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oY29uc3QgU3RyaW5nJiByZWdp
c3RyYWJsZURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UHJld2FybUluZm9ybWF0aW9uJiBwcmV3YXJt
SW5mb3JtYXRpb24pCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhpbXVtU2l6ZVRvUHJl
dmVudFVubGltaXRlZEdyb3d0aCA9IDEwMDsKKyAgICBpZiAobV9wcmV3YXJtSW5mb3JtYXRpb25G
b3JSZWdpc3RyYWJsZURvbWFpbi5zaXplKCkgPT0gbWF4aW11bVNpemVUb1ByZXZlbnRVbmxpbWl0
ZWRHcm93dGgpCisgICAgICAgIG1fcHJld2FybUluZm9ybWF0aW9uRm9yUmVnaXN0cmFibGVEb21h
aW4ucmVtb3ZlKG1fcHJld2FybUluZm9ybWF0aW9uRm9yUmVnaXN0cmFibGVEb21haW4uYmVnaW4o
KSk7CisKKyAgICBhdXRvJiB2YWx1ZSA9IG1fcHJld2FybUluZm9ybWF0aW9uRm9yUmVnaXN0cmFi
bGVEb21haW4uZW5zdXJlKHJlZ2lzdHJhYmxlRG9tYWluLCBbXSB7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlByZXdhcm1JbmZvcm1hdGlvbj4oKTsKKyAgICB9KS5p
dGVyYXRvci0+dmFsdWU7CisKKyAgICAqdmFsdWUgPSBwcmV3YXJtSW5mb3JtYXRpb247Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUG9vbC5oCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDQsNiArNDQ0LDggQEAgcHVi
bGljOgogICAgIHZvaWQgdW5yZWdpc3RlclN1c3BlbmRlZFBhZ2VQcm94eShTdXNwZW5kZWRQYWdl
UHJveHkmKTsKICAgICB2b2lkIGRpZFJlYWNoR29vZFRpbWVUb1ByZXdhcm0oKTsKIAorICAgIHZv
aWQgZGlkQ29sbGVjdFByZXdhcm1JbmZvcm1hdGlvbihjb25zdCBTdHJpbmcmIHJlZ2lzdHJhYmxl
RG9tYWluLCBjb25zdCBXZWJDb3JlOjpQcmV3YXJtSW5mb3JtYXRpb24mKTsKKwogICAgIHZvaWQg
c2NyZWVuUHJvcGVydGllc1N0YXRlQ2hhbmdlZCgpOwogCiAgICAgdm9pZCBhZGRNb2NrTWVkaWFE
ZXZpY2UoY29uc3QgV2ViQ29yZTo6TW9ja01lZGlhRGV2aWNlJik7CkBAIC02OTYsNiArNjk4LDgg
QEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhLCBW
ZWN0b3I8U3VzcGVuZGVkUGFnZVByb3h5Kj4+IG1fc3VzcGVuZGVkUGFnZXM7CiAgICAgSGFzaE1h
cDxTdHJpbmcsIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+PiBtX3N3YXBwZWRQcm9jZXNzZXNQZXJS
ZWdpc3RyYWJsZURvbWFpbjsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6UHJld2FybUluZm9ybWF0aW9uPj4gbV9wcmV3YXJtSW5mb3JtYXRpb25Gb3JSZWdp
c3RyYWJsZURvbWFpbjsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDIzNjkxMSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0MzMsNiArMTQzMywxMSBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkQ2hl
Y2tQcm9jZXNzTG9jCiAgICAgY2FsbGJhY2soaXNMb2NhbGx5UmVhY2hhYmxlID8gTWVzc2FnZVBv
cnRDaGFubmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5OjpZZXMgOiBNZXNzYWdlUG9ydENoYW5uZWxQ
cm92aWRlcjo6SGFzQWN0aXZpdHk6Ok5vKTsKIH0KIAordm9pZCBXZWJQcm9jZXNzUHJveHk6OmRp
ZENvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFdl
YkNvcmU6OlByZXdhcm1JbmZvcm1hdGlvbiYgcHJld2FybUluZm9ybWF0aW9uKQoreworICAgIHBy
b2Nlc3NQb29sKCkuZGlkQ29sbGVjdFByZXdhcm1JbmZvcm1hdGlvbihkb21haW4sIHByZXdhcm1J
bmZvcm1hdGlvbik7Cit9CisKICNpZiBQTEFURk9STShXQVRDSE9TKQogCiB2b2lkIFdlYlByb2Nl
c3NQcm94eTo6dGFrZUJhY2tncm91bmRBY3Rpdml0eVRva2VuRm9yRnVsbHNjcmVlbklucHV0KCkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCShyZXZpc2lv
biAyMzY5MTEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAko
d29ya2luZyBjb3B5KQpAQCAtMzE0LDYgKzMxNCw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIGNh
blRlcm1pbmF0ZUNoaWxkUHJvY2VzcygpOwogCisgICAgdm9pZCBkaWRDb2xsZWN0UHJld2FybUlu
Zm9ybWF0aW9uKGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBXZWJDb3JlOjpQcmV3YXJtSW5m
b3JtYXRpb24mKTsKKwogICAgIHZvaWQgbG9nRGlhZ25vc3RpY01lc3NhZ2VGb3JSZXNvdXJjZUxp
bWl0VGVybWluYXRpb24oY29uc3QgU3RyaW5nJiBsaW1pdEtleSk7CiAKICAgICBlbnVtIGNsYXNz
IElzV2VhayB7IE5vLCBZZXMgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDIzNjkxMSkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBAQCBtZXNzYWdlcyAtPiBXZWJQcm9jZXNzUHJveHkgTGVn
YWN5UmVjZWl2CiAgICAgRGlkRGVsaXZlck1lc3NhZ2VQb3J0TWVzc2FnZXModWludDY0X3QgbWVz
c2FnZUJhdGNoSWRlbnRpZmllcikKICAgICBEaWRDaGVja1Byb2Nlc3NMb2NhbFBvcnRGb3JBY3Rp
dml0eSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGJvb2wgaXNMb2NhbGx5UmVhY2hhYmxl
KQogCisgICAgRGlkQ29sbGVjdFByZXdhcm1JbmZvcm1hdGlvbihTdHJpbmcgZG9tYWluLCBzdHJ1
Y3QgV2ViQ29yZTo6UHJld2FybUluZm9ybWF0aW9uIHByZXdhcm1JbmZvcm1hdGlvbikKKwogI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgIENhY2hlTWVkaWFNSU1FVHlwZXMoVmVjdG9yPFN0cmluZz4g
dHlwZXMpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5j
cHAJKHJldmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIwLDkgKzQyMCwxNCBAQCB2b2lkIFdlYlByb2Nl
c3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKFdlCiAgICAgUkVMRUFTRV9MT0coUHJvY2VzcywgIiVw
IC0gV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3M6IFByZXNlbnRpbmcgcHJvY2VzcyA9
ICVkIiwgdGhpcywgV2ViQ29yZTo6cHJlc2VudGluZ0FwcGxpY2F0aW9uUElEKCkpOwogfQogCi12
b2lkIFdlYlByb2Nlc3M6OnByZXdhcm0oKQordm9pZCBXZWJQcm9jZXNzOjpwcmV3YXJtR2xvYmFs
bHkoKQogewotICAgIFdlYkNvcmU6OlByb2Nlc3NXYXJtaW5nOjpwcmV3YXJtKCk7CisgICAgV2Vi
Q29yZTo6UHJvY2Vzc1dhcm1pbmc6OnByZXdhcm1HbG9iYWxseSgpOworfQorCit2b2lkIFdlYlBy
b2Nlc3M6OnByZXdhcm1XaXRoRG9tYWluSW5mb3JtYXRpb24oY29uc3QgV2ViQ29yZTo6UHJld2Fy
bUluZm9ybWF0aW9uJiBwcmV3YXJtSW5mb3JtYXRpb24pCit7CisgICAgV2ViQ29yZTo6UHJvY2Vz
c1dhcm1pbmc6OnByZXdhcm1XaXRoSW5mb3JtYXRpb24ocHJld2FybUluZm9ybWF0aW9uKTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzOjpyZWdpc3RlclVSTFNjaGVtZUFzRW1wdHlEb2N1bWVudChjb25z
dCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE0NTksNiArMTQ2NCwxMyBAQCB2b2lkIFdlYlByb2Nl
c3M6OnByb2Nlc3NEaWRSZXN1bWUoKQogI2VuZGlmCiB9CiAKK3ZvaWQgV2ViUHJvY2Vzczo6c2Vu
ZFByZXdhcm1JbmZvcm1hdGlvbihjb25zdCBTdHJpbmcmIHJlZ2lzdHJhYmxlRG9tYWluKQorewor
ICAgIGlmIChyZWdpc3RyYWJsZURvbWFpbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJv
eHk6OkRpZENvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24ocmVnaXN0cmFibGVEb21haW4sIFdlYkNv
cmU6OlByb2Nlc3NXYXJtaW5nOjpjb2xsZWN0UHJld2FybUluZm9ybWF0aW9uKCkpLCAwKTsKK30K
Kwogdm9pZCBXZWJQcm9jZXNzOjpwYWdlRGlkRW50ZXJXaW5kb3codWludDY0X3QgcGFnZUlEKQog
ewogICAgIG1fcGFnZXNJbldpbmRvd3MuYWRkKHBhZ2VJRCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHJldmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAg
c3RydWN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllcjsKIHN0cnVjdCBNZXNzYWdlV2l0aE1lc3NhZ2VQ
b3J0czsKIHN0cnVjdCBNb2NrTWVkaWFEZXZpY2U7CiBzdHJ1Y3QgUGx1Z2luSW5mbzsKK3N0cnVj
dCBQcmV3YXJtSW5mb3JtYXRpb247CiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOwogc3RydWN0
IFNvdXBOZXR3b3JrUHJveHlTZXR0aW5nczsKIApAQCAtMjAwLDYgKzIwMSw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNhbmNlbFByZXBhcmVUb1N1c3BlbmQoKTsKICAgICB2b2lkIHByb2Nlc3NEaWRS
ZXN1bWUoKTsKIAorICAgIHZvaWQgc2VuZFByZXdhcm1JbmZvcm1hdGlvbihjb25zdCBTdHJpbmcm
IHJlZ2lzdHJhYmxlRG9tYWluKTsKKwogI2lmIFBMQVRGT1JNKElPUykKICAgICB2b2lkIHJlc2V0
QWxsR2VvbG9jYXRpb25QZXJtaXNzaW9ucygpOwogI2VuZGlmCkBAIC0yNDUsNyArMjQ4LDggQEAg
cHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMmJik7CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKFdl
YlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJik7CiAKLSAgICB2b2lkIHByZXdhcm0oKTsKKyAg
ICB2b2lkIHByZXdhcm1HbG9iYWxseSgpOworICAgIHZvaWQgcHJld2FybVdpdGhEb21haW5JbmZv
cm1hdGlvbihjb25zdCBXZWJDb3JlOjpQcmV3YXJtSW5mb3JtYXRpb24mKTsKIAogI2lmIFVTRShP
U19TVEFURSkKICAgICB2b2lkIHJlZ2lzdGVyV2l0aFN0YXRlRHVtcGVyKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNp
b24gMjM2OTExKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2Fn
ZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDkgQEAgbWVzc2FnZXMgLT4gV2ViUHJv
Y2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAgIyBDcmVhdGUgYSBuZXcgcGFnZS4KICAgICBDcmVh
dGVXZWJQYWdlKHVpbnQ2NF90IG5ld1BhZ2VJRCwgc3RydWN0IFdlYktpdDo6V2ViUGFnZUNyZWF0
aW9uUGFyYW1ldGVycyBwYWdlQ3JlYXRpb25QYXJhbWV0ZXJzKQogCi0gICAgUHJld2FybSgpOwot
IAorICAgIFByZXdhcm1HbG9iYWxseSgpOworICAgIFByZXdhcm1XaXRoRG9tYWluSW5mb3JtYXRp
b24oc3RydWN0IFdlYkNvcmU6OlByZXdhcm1JbmZvcm1hdGlvbiBwcmV3YXJtSW5mb3JtYXRpb24p
CisKICAgICAjIEdsb2JhbCBwcmVmZXJlbmNlcy4KICAgICBTZXRDYWNoZU1vZGVsKHVpbnQzMl90
IGNhY2hlTW9kZWwpCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3Myw5ICsxMTczLDEy
IEBAIHZvaWQgV2ViUGFnZTo6Y2xvc2UoKQogICAgIG1faXNDbG9zZWQgPSB0cnVlOwogCiAgICAg
Ly8gSWYgdGhlcmUgaXMgc3RpbGwgbm8gVVJMLCB0aGVuIHdlIG5ldmVyIGxvYWRlZCBhbnl0aGlu
ZyBpbiB0aGlzIHBhZ2UsIHNvIG5vdGhpbmcgdG8gcmVwb3J0LgotICAgIGlmICghbWFpbldlYkZy
YW1lKCktPnVybCgpLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1haW5XZWJGcmFtZSgpLT51cmwoKS5p
c0VtcHR5KCkpIHsKICAgICAgICAgcmVwb3J0VXNlZEZlYXR1cmVzKCk7CiAKKyAgICAgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuc2VuZFByZXdhcm1JbmZvcm1hdGlvbih0b1JlZ2lzdHJhYmxl
RG9tYWluKG1haW5XZWJGcmFtZSgpLT51cmwoKSkpOworICAgIH0KKwogICAgIGlmIChwYWdlR3Jv
dXAoKS0+aXNWaXNpYmxlVG9JbmplY3RlZEJ1bmRsZSgpICYmIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLmluamVjdGVkQnVuZGxlKCkpCiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmlu
amVjdGVkQnVuZGxlKCktPndpbGxEZXN0cm95UGFnZSh0aGlzKTsKIApAQCAtMjg3Myw2ICsyODc2
LDggQEAgdm9pZCBXZWJQYWdlOjpkaWRSZWNlaXZlUG9saWN5RGVjaXNpb24odQogICAgIGlmIChw
b2xpY3lBY3Rpb24gPT0gUG9saWN5QWN0aW9uOjpTdXNwZW5kKSB7CiAgICAgICAgIEFTU0VSVChm
cmFtZSA9PSBtX21haW5GcmFtZSk7CiAgICAgICAgIHNldElzU3VzcGVuZGVkKHRydWUpOworCisg
ICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnNlbmRQcmV3YXJtSW5mb3JtYXRpb24odG9S
ZWdpc3RyYWJsZURvbWFpbihtYWluV2ViRnJhbWUoKS0+dXJsKCkpKTsKICAgICB9CiAgICAgZnJh
bWUtPmRpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbihsaXN0ZW5lcklELCBwb2xpY3lBY3Rpb24sIG5h
dmlnYXRpb25JRCwgZG93bmxvYWRJRCwgV1RGTW92ZSh3ZWJzaXRlUG9saWNpZXMpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351766</attachid>
            <date>2018-10-08 03:44:14 -0700</date>
            <delta_ts>2018-10-08 04:11:52 -0700</delta_ts>
            <desc>patch</desc>
            <filename>prewarm-font-domain-10.patch</filename>
            <type>text/plain</type>
            <size>26460</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDE4LTEwLTA4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBQcmV3YXJtIEZvbnREYXRhYmFz
ZSBvbiBwcm9jZXNzIHN3YXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5MDMxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEltcGxlbWVudCBiYXNpYyBwcmV3YXJtaW5nIG9mIEZvbnREYXRhYmFzZS4gV2hl
biB0aGUgZG9tYWluIG9mIHRoZSBmaXJzdCBwYWdlIGxvYWQgb24KKyAgICAgICAgYSBuZXcgcHJv
Y2VzcyBpcyBrbm93biB3ZSBwYXNzIHRoZSBsaXN0IG9mIGZvbnQgZmFtaWxpZXMgcHJldmlvdXMg
dXNlZCBieSB0aGF0IGRvbWFpbiB0byB0aGUKKyAgICAgICAgcHJvY2Vzcy4gVGhpcyBpcyB1c2Vk
IHRvIHByZXdhcm0gQ29yZVRleHQgZm9udCBkYXRhYmFzZS4gSW5pdGlhbGl6YXRpb24gKHdoaWNo
IGludm9sdmVzIGxvdHMgb2YKKyAgICAgICAgYmxvY2tpbmcgSVBDKSBoYXBwZW5zIG91dHNpZGUg
dGhlIG1haW4gdGhyZWFkIHNvIHRoZSBmb250cyBhcmUgcmVhZHkgdG8gdXNlIHdoZW4gbmVlZGVk
LgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIHBhZ2UvUHJld2FybUluZm9ybWF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UHJld2FybUluZm9ybWF0aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UHJl
d2FybUluZm9ybWF0aW9uOjpkZWNvZGUpOgorCisgICAgICAgIEFkZCBkYXRhIHN0cnVjdHVyZSBm
b3IgcHJld2FybSBpbmZvcm1hdGlvbiB3aXRoIGVuY29kZS9kZWNvZGUgc3VwcG9ydC4KKworICAg
ICAgICAqIHBhZ2UvUHJvY2Vzc1dhcm1pbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vz
c1dhcm1pbmc6OmNvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UHJvY2Vzc1dhcm1pbmc6OnByZXdhcm1XaXRoSW5mb3JtYXRpb24pOgorCisgICAgICAgIFByZXdh
cm1pbmcgaW50ZXJmYWNlIHRvIGJlIHVzZWQgZnJvbSBXZWJLaXQuCisKKyAgICAgICAgKiBwYWdl
L1Byb2Nlc3NXYXJtaW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y29sbGVjdFByZXdhcm1JbmZvcm1h
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnByZXdhcm0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnREYXRhYmFzZTo6Y29sbGVjdGlvbkZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250RGF0YWJhc2U6OmZvbnRGb3JQb3N0U2NyaXB0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250RGF0YWJhc2U6OmNsZWFyKToKKworICAgICAgICBBZGQgbXV0ZXggZm9yIHRocmVhZCBzYWZl
IGFjY2Vzcy4KKworICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y29sbGVjdFByZXdhcm1JbmZv
cm1hdGlvbiBjb25zdCk6CisKKyAgICAgICAgQ29sbGVjdCBmb250IGZhbWlsaWVzIHNlZW4gYnkg
dGhpcyBwcm9jZXNzLgorCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnByZXdhcm0pOgor
CisgICAgICAgIFByZXdhcm0gRm9udERhdGFiYXNlIGluIGEgZGlzcGF0Y2ggcXVldWUuCisKIDIw
MTgtMTAtMDcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXhl
ZCBidWlsZGluZyB3aXRoIHRoZSBsYXRlc3QgbWFjT1MgU0RLCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzY5
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3NTksNiArNDc1OSw3IEBACiAJCUU0NEI0QkI0MTQxNjUwRDcw
MDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0NEI0QkIyMTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNo
ZWNrZXIuaCAqLzsgfTsKIAkJRTQ0RkExODUxQkNBNkI1QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJl
ZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDRGQTE4NDFCQ0E2QjVBMDA5MUI2RUYgLyogQ29tcG9zZWRUcmVlSXRlcmF0b3IuaCAqLzsg
fTsKIAkJRTQ1MzIyQUMxNDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVjdG9yUXVlcnkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTMyMkFBMTQwQ0UyNjcw
MDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmggKi87IH07CisJCUU0NjA1RkVDMjE2NjQ4MDkwMEU1
MzA0NiAvKiBQcmV3YXJtSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjA1RkVBMjE2NjQ4MDgwMEU1MzA0NiAvKiBQcmV3YXJtSW5m
b3JtYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFNDYxODAyRDFDOEREMjkwMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjE4MDJDMUM4REQyOTAw
MDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICovOyB9OwogCQlFNDYxRDY1RjFCQjBDODBEMDBD
QjU2NDUgLyogU3R5bGVTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ2MUQ2NUUxQkIwQzgwRDAwQ0I1NjQ1IC8qIFN0eWxlU2NvcGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDYyQTRBMTEx
M0U3MUJFMDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDYyQTRBMDExM0U3MUJFMDA0QTQyMjAgLyogSW50UG9p
bnRIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTE0NDM5LDYgKzE0NDQwLDcgQEAKIAkJRTQ1MzkwMzQwRUFGRDYzNzAwMzY5NUM4IC8qIFNj
cm9sbFZpZXdJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBT
Y3JvbGxWaWV3SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDUzOTAzQzBF
QUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2lkZ2V0SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDUzOTBBRDBFQUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVtb3J5SU9TLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5c3RlbU1lbW9yeUlPUy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NjA1RkVBMjE2NjQ4MDgwMEU1MzA0NiAvKiBQcmV3
YXJtSW5mb3JtYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJld2Fy
bUluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NjE4MDJDMUM4
REQyOTAwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdHlsZVJlbGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDYxODAyRTFDOERENEQyMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSZWxhdGlvbnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNDYxRDY1QzFCQjBDN0YwMDBDQjU2NDUgLyogU3R5bGVT
Y29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZVNjb3Bl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NTQ0LDYgKzE5NTQ2LDcgQEAK
IAkJCQk1Q0ZDNDM0RTE5MjQwNkE5MDBBMEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9sbGVyLmNw
cCAqLywKIAkJCQk1Q0ZDNDM0RjE5MjQwNkE5MDBBMEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9s
bGVyLmggKi8sCiAJCQkJMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3BlbmluZ09i
c2VydmVyLmggKi8sCisJCQkJRTQ2MDVGRUEyMTY2NDgwODAwRTUzMDQ2IC8qIFByZXdhcm1JbmZv
cm1hdGlvbi5oICovLAogCQkJCUI3NzZENDNDMTEwNDUyNzUwMEJFQjBFQyAvKiBQcmludENvbnRl
eHQuY3BwICovLAogCQkJCUI3NzZENDNBMTEwNDUyNUQwMEJFQjBFQyAvKiBQcmludENvbnRleHQu
aCAqLywKIAkJCQlFNDIwNTAxNjIxNDE5MDFCMDA2NkVGM0IgLyogUHJvY2Vzc1dhcm1pbmcuY3Bw
ICovLApAQCAtMjc1NzgsNiArMjc1ODEsNyBAQAogCQkJCUNFNzk5Rjk4MUM2QTQ2QkMwMDk3QjUx
OCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDRTc5OUZBQzFDNkE1MDY2MDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdERpcmVjdGl2ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFEMDE1Q0EwRjRCNUM3MTAwNEE2
NjJGIC8qIENvbnRlbnRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDYwNUZFQzIxNjY0ODA5
MDBFNTMwNDYgLyogUHJld2FybUluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzYy
N0I4RTE0RkIzQ0VFMDAyQ0RDQTEgLyogQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzQjZBMEU2MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDY1QUQ0RjUwQjBDMkVEQTAwNUEyQjFEIC8qIENvbnRleHRN
ZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJl
d2FybUluZm9ybWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QcmV3
YXJtSW5mb3JtYXRpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1By
ZXdhcm1JbmZvcm1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgV0VCQ09SRV9FWFBPUlQgUHJld2FybUluZm9ybWF0aW9u
IHsKKyAgICBGb250UHJld2FybUluZm9ybWF0aW9uIGZvbnQ7CisKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UHJld2FybUluZm9ybWF0aW9uPiBkZWNv
ZGUoRGVjb2RlciYpOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgUHJld2Fy
bUluZm9ybWF0aW9uOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNv
ZGVyIDw8IGZvbnQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFs
PFByZXdhcm1JbmZvcm1hdGlvbj4gUHJld2FybUluZm9ybWF0aW9uOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK3sKKyAgICBQcmV3YXJtSW5mb3JtYXRpb24gcHJld2FybUluZm87CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShwcmV3YXJtSW5mby5mb250KSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIHJldHVybiBwcmV3YXJtSW5mbzsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9Qcm9jZXNzV2FybWluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9Qcm9jZXNzV2FybWluZy5jcHAJKHJldmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUHJvY2Vzc1dhcm1pbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBA
IHZvaWQgUHJvY2Vzc1dhcm1pbmc6OmluaXRpYWxpemVOYW1lcygpCiAgICAgV2ViS2l0Rm9udEZh
bWlseU5hbWVzOjppbml0KCk7CiB9CiAgICAgCi12b2lkIFByb2Nlc3NXYXJtaW5nOjpwcmV3YXJt
KCkKK3ZvaWQgUHJvY2Vzc1dhcm1pbmc6OnByZXdhcm1HbG9iYWxseSgpCiB7CiAgICAgaW5pdGlh
bGl6ZU5hbWVzKCk7CiAgICAgCkBAIC03Niw0ICs3NiwxNiBAQCB2b2lkIFByb2Nlc3NXYXJtaW5n
OjpwcmV3YXJtKCkKICNlbmRpZgogfQogCitXZWJDb3JlOjpQcmV3YXJtSW5mb3JtYXRpb24gUHJv
Y2Vzc1dhcm1pbmc6OmNvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oKQoreworICAgIFByZXdhcm1J
bmZvcm1hdGlvbiBpbmZvOworICAgIGluZm8uZm9udCA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCku
Y29sbGVjdFByZXdhcm1JbmZvcm1hdGlvbigpOworICAgIHJldHVybiBpbmZvOworfQorCit2b2lk
IFByb2Nlc3NXYXJtaW5nOjpwcmV3YXJtV2l0aEluZm9ybWF0aW9uKGNvbnN0IFByZXdhcm1JbmZv
cm1hdGlvbiYgcHJld2FybUluZm8pCit7CisgICAgRm9udENhY2hlOjpzaW5nbGV0b24oKS5wcmV3
YXJtKHByZXdhcm1JbmZvLmZvbnQpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L1Byb2Nlc3NXYXJtaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Qcm9j
ZXNzV2FybWluZy5oCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1By
b2Nlc3NXYXJtaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsyNSwxNyBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIlByZXdhcm1JbmZvcm1hdGlvbi5oIgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFByb2Nlc3NXYXJtaW5nIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplTmFtZXMoKTsKLSAgICBzdGF0aWMgdm9pZCBw
cmV3YXJtKCk7CisgICAgc3RhdGljIHZvaWQgcHJld2FybUdsb2JhbGx5KCk7CisKKyAgICBzdGF0
aWMgUHJld2FybUluZm9ybWF0aW9uIGNvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oKTsKKyAgICBz
dGF0aWMgdm9pZCBwcmV3YXJtV2l0aEluZm9ybWF0aW9uKGNvbnN0IFByZXdhcm1JbmZvcm1hdGlv
biYpOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FjaGUuY3BwCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODIsNiArNDgy
LDE2IEBAIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlKCkKIH0KIAogI2lmICFQTEFURk9STShD
T0NPQSkKKworRm9udFByZXdhcm1JbmZvcm1hdGlvbiBGb250Q2FjaGU6OmNvbGxlY3RQcmV3YXJt
SW5mb3JtYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgRm9udENh
Y2hlOjpwcmV3YXJtKGNvbnN0IEZvbnRQcmV3YXJtSW5mb3JtYXRpb24mKQoreworfQorCiBSZWZQ
dHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBj
b25zdCBBdG9taWNTdHJpbmcmKQogewogICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHJldmlzaW9uIDIzNjkx
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi9Xb3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTY3LDYgKzY4LDggQEAgdHlw
ZWRlZiBJTUxhbmdGb250TGluayBJTUxhbmdGb250TGlua1R5cAogI2VuZGlmCiAjZW5kaWYKIAor
dXNpbmcgRm9udFByZXdhcm1JbmZvcm1hdGlvbiA9IFZlY3RvcjxTdHJpbmc+OworCiAvLyBUaGlz
IGtleSBjb250YWlucyB0aGUgRm9udERlc2NyaXB0aW9uIGZpZWxkcyBvdGhlciB0aGFuIGZhbWls
eSB0aGF0IG1hdHRlciB3aGVuIGZldGNoaW5nIEZvbnREYXRhcyAocGxhdGZvcm0gZm9udHMpLgog
c3RydWN0IEZvbnREZXNjcmlwdGlvbktleSB7CiAgICAgRm9udERlc2NyaXB0aW9uS2V5KCkgPSBk
ZWZhdWx0OwpAQCAtMjM1LDYgKzIzOCw5IEBAIHB1YmxpYzoKICAgICBib29sIHNob3VsZE1vY2tC
b2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE1v
Y2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHk7IH0KICAgICB2b2lkIHNldFNob3VsZE1v
Y2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkoYm9vbCBzaG91bGRNb2NrQm9sZFN5c3Rl
bUZvbnRGb3JBY2Nlc3NpYmlsaXR5KSB7IG1fc2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9yQWNj
ZXNzaWJpbGl0eSA9IHNob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHk7IH0K
IAorICAgIEZvbnRQcmV3YXJtSW5mb3JtYXRpb24gY29sbGVjdFByZXdhcm1JbmZvcm1hdGlvbigp
IGNvbnN0OworICAgIHZvaWQgcHJld2FybShjb25zdCBGb250UHJld2FybUluZm9ybWF0aW9uJik7
CisKIHByaXZhdGU6CiAgICAgRm9udENhY2hlKCk7CiAgICAgfkZvbnRDYWNoZSgpID0gZGVsZXRl
OwpAQCAtMjU4LDYgKzI2NCw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZE1vY2tCb2xk
U3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkgeyBmYWxzZSB9OwogCiAjaWYgUExBVEZPUk0oQ09D
T0EpCisgICAgSGFzaFNldDxTdHJpbmc+IG1fc2VlbkZhbWlsaWVzRm9yUHJld2FybWluZzsKKyAg
ICBSZWZQdHI8V29ya1F1ZXVlPiBtX3ByZXdhcm1RdWV1ZTsKKwogICAgIGZyaWVuZCBjbGFzcyBD
b21wbGV4VGV4dENvbnRyb2xsZXI7CiAjZW5kaWYKICAgICBmcmllbmQgY2xhc3MgRm9udDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVU
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAJKHJldmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODg2LDYgKzg4Niw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEluc3Rh
bGxlZEZvbnRGYW1pbHkmIGNvbGxlY3Rpb25Gb3JGYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHlO
YW1lKQogICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2tlcihtX2Rlc2Ny
aXB0b3JNYXBMb2NrKTsKKwogICAgICAgICBhdXRvIGZvbGRlZCA9IGZhbWlseU5hbWUuZm9sZENh
c2UoKTsKICAgICAgICAgcmV0dXJuIG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzLmVuc3Vy
ZShmb2xkZWQsIFsmXSB7CiAgICAgICAgICAgICBhdXRvIGZhbWlseU5hbWVTdHJpbmcgPSBmb2xk
ZWQuY3JlYXRlQ0ZTdHJpbmcoKTsKQEAgLTkxMCw2ICs5MTIsOCBAQCBwdWJsaWM6CiAKICAgICBj
b25zdCBJbnN0YWxsZWRGb250JiBmb250Rm9yUG9zdFNjcmlwdE5hbWUoY29uc3QgQXRvbWljU3Ry
aW5nJiBwb3N0U2NyaXB0TmFtZSkKICAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2Nr
PiBsb2NrZXIobV9kZXNjcmlwdG9yTWFwTG9jayk7CisKICAgICAgICAgY29uc3QgYXV0byYgZm9s
ZGVkID0gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Zm9sZGVkRmFtaWx5TmFtZShwb3N0U2NyaXB0
TmFtZSk7CiAgICAgICAgIHJldHVybiBtX3Bvc3RTY3JpcHROYW1lVG9Gb250RGVzY3JpcHRvcnMu
ZW5zdXJlKGZvbGRlZCwgWyZdIHsKICAgICAgICAgICAgIGF1dG8gcG9zdFNjcmlwdE5hbWVTdHJp
bmcgPSBmb2xkZWQuY3JlYXRlQ0ZTdHJpbmcoKTsKQEAgLTkzMSw2ICs5MzUsOCBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2Nr
PiBsb2NrZXIobV9kZXNjcmlwdG9yTWFwTG9jayk7CisKICAgICAgICAgbV9mYW1pbHlOYW1lVG9G
b250RGVzY3JpcHRvcnMuY2xlYXIoKTsKICAgICAgICAgbV9wb3N0U2NyaXB0TmFtZVRvRm9udERl
c2NyaXB0b3JzLmNsZWFyKCk7CiAgICAgfQpAQCAtOTQzLDYgKzk0OSw3IEBAIHByaXZhdGU6CiAg
ICAgewogICAgIH0KIAorICAgIExvY2sgbV9kZXNjcmlwdG9yTWFwTG9jazsKICAgICBIYXNoTWFw
PFN0cmluZywgSW5zdGFsbGVkRm9udEZhbWlseT4gbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRv
cnM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIEluc3RhbGxlZEZvbnQ+IG1fcG9zdFNjcmlwdE5hbWVU
b0ZvbnREZXNjcmlwdG9yczsKICAgICBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBtX2FsbG93VXNl
ckluc3RhbGxlZEZvbnRzOwpAQCAtMTI2MSw2ICsxMjY4LDkgQEAgc3RkOjp1bmlxdWVfcHRyPEZv
bnRQbGF0Zm9ybURhdGE+IEZvbnRDYQogICAgIGlmICghZm9udCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKKyAgICBpZiAoZm9udERlc2NyaXB0aW9uLnNob3VsZEFsbG93VXNlckluc3RhbGxl
ZEZvbnRzKCkgPT0gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKQorICAgICAgICBtX3NlZW5G
YW1pbGllc0ZvclByZXdhcm1pbmcuYWRkKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZvbGRlZEZh
bWlseU5hbWUoZmFtaWx5KSk7CisKICAgICBib29sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY09i
bGlxdWU7CiAgICAgc3RkOjp0aWUoc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSkgPSBj
b21wdXRlTmVjZXNzYXJ5U3ludGhlc2lzKGZvbnQuZ2V0KCksIGZvbnREZXNjcmlwdGlvbikuYm9s
ZE9ibGlxdWVQYWlyKCk7CiAKQEAgLTE0OTksNCArMTUwOSwyOSBAQCBSZWY8Rm9udD4gRm9udENh
Y2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGCiAgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEo
cGxhdGZvcm1EYXRhKTsKIH0KIAorRm9udFByZXdhcm1JbmZvcm1hdGlvbiBGb250Q2FjaGU6OmNv
bGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oKSBjb25zdAoreworICAgIEZvbnRQcmV3YXJtSW5mb3Jt
YXRpb24gZm9udFByZXdhcm1JbmZvcm1hdGlvbjsKKyAgICBmb250UHJld2FybUluZm9ybWF0aW9u
ID0gY29weVRvVmVjdG9yKG1fc2VlbkZhbWlsaWVzRm9yUHJld2FybWluZyk7CisgICAgcmV0dXJu
IGZvbnRQcmV3YXJtSW5mb3JtYXRpb247Cit9CisKK3ZvaWQgRm9udENhY2hlOjpwcmV3YXJtKGNv
bnN0IEZvbnRQcmV3YXJtSW5mb3JtYXRpb24mIGZvbnRQcmV3YXJtSW5mb3JtYXRpb24pCit7Cisg
ICAgYXV0byYgZmFtaWxpZXMgPSBmb250UHJld2FybUluZm9ybWF0aW9uOworCisgICAgaWYgKGZh
bWlsaWVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3ByZXdhcm1R
dWV1ZSkKKyAgICAgICAgbV9wcmV3YXJtUXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgiV2ViS2l0
IGZvbnQgcHJld2FybSBxdWV1ZSIpOworCisgICAgYXV0byYgZGF0YWJhc2UgPSBGb250RGF0YWJh
c2U6OnNpbmdsZXRvbkRpc2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7CisKKyAgICBtX3By
ZXdhcm1RdWV1ZS0+ZGlzcGF0Y2goWyZkYXRhYmFzZSwgZmFtaWxpZXMgPSBmYW1pbGllcy5pc29s
YXRlZENvcHkoKV0geworICAgICAgICBmb3IgKGF1dG8mIGZhbWlseSA6IGZhbWlsaWVzKQorICAg
ICAgICAgICAgZGF0YWJhc2UuY29sbGVjdGlvbkZvckZhbWlseShmYW1pbHkpOworICAgIH0pOwor
fQorCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjM2OTExKQorKysgU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NCBAQAorMjAxOC0xMC0wOCAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUHJld2FybSBGb250RGF0
YWJhc2Ugb24gcHJvY2VzcyBzd2FwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTAzMTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgbWVjaGFuaXNtIGZvciBjYWNoaW5nIHByZXdhcm0gaW5mb3JtYXRp
b24gcGVyIGRvbWFpbiBvbiBVSSBwcm9jZXNzIHNpZGUuIFRoaXMgaW5mb3JtYXRpb24KKyAgICAg
ICAgaXMgdGhlbiBwYXNzZWQgdG8gbmV3bHkgaW5pdGlhbGl6ZWQgd2ViIHByb2Nlc3NlcyB0aGF0
IGFyZSBiZWluZyB1c2VkIGZvciB0aGUgc2FtZSBkb21haW4uCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NGb3JOYXZpZ2F0aW9u
SW50ZXJuYWwpOgorCisgICAgICAgIFBhc3MgcHJld2FybSBpbmZvcm1hdGlvbiBvbiBwcm9jZXNz
IHN3YXAgdG8gdGhlIG5ldyBwcm9jZXNzLgorCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpkaWRDb2xsZWN0UHJld2FybUluZm9ybWF0aW9uKToKKworICAgICAgICBVSSBwcm9jZXNz
IHNpZGUgY2FjaGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpkaWRDb2xsZWN0UHJld2FybUluZm9ybWF0aW9uKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNsb3NlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6ZGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKToKKworICAgICAgICBDb2xs
ZWN0IGFuZCBjYWNoZSBwcmV3YXJtIGluZm9ybWF0aW9uIGZvciB0aGUgcHJldmlvdXMgcHJvY2Vz
cyBvbiBwcm9jZXNzIHN3YXAuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwcmV3YXJtR2xvYmFsbHkpOgorCisgICAg
ICAgIFJlbmFtZWQgZm9yIGNsYXJpdHkuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6
cHJld2FybVdpdGhEb21haW5JbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OnNlbmRQcmV3YXJtSW5mb3JtYXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKwog
MjAxOC0xMC0wNyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFRy
aWVkIHRvIGZpeCBIQVZFKExJTktfUFJFVklFVykgaU9TIGJ1aWxkcy4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDYg
KzE5MCw3IEBAIHN0cnVjdCBFeGNlcHRpb25EZXRhaWxzOwogc3RydWN0IEZpbGVDaG9vc2VyU2V0
dGluZ3M7CiBzdHJ1Y3QgR2xvYmFsV2luZG93SWRlbnRpZmllcjsKIHN0cnVjdCBNZWRpYVN0cmVh
bVJlcXVlc3Q7CitzdHJ1Y3QgUHJld2FybUluZm9ybWF0aW9uOwogc3RydWN0IFNlY3VyaXR5T3Jp
Z2luRGF0YTsKIHN0cnVjdCBTaGFyZURhdGE7CiBzdHJ1Y3QgVGV4dEFsdGVybmF0aXZlV2l0aFJh
bmdlOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAko
cmV2aXNpb24gMjM2OTExKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtU2Ny
ZWVuLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Q
cm9jZXNzV2FybWluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9VUkxQYXJzZXIuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+
CkBAIC03MzYsNyArNzM3LDcgQEAgV2ViUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3Jl
YXRlTgogICAgICAgICBBU1NFUlQoIW1fcHJld2FybWVkUHJvY2Vzcyk7CiAgICAgICAgIG1fcHJl
d2FybWVkUHJvY2VzcyA9ICZwcm9jZXNzOwogICAgICAgICAKLSAgICAgICAgbV9wcmV3YXJtZWRQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpQcmV3YXJtKCksIDApOworICAgICAg
ICBtX3ByZXdhcm1lZFByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlByZXdhcm1H
bG9iYWxseSgpLCAwKTsKICAgICB9CiAKICAgICBpZiAobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
VGVybWluYXRpb25UaW1lci5pc0FjdGl2ZSgpKQpAQCAtMjE3Myw4ICsyMTc0LDE0IEBAIFJlZjxX
ZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjpwcm8KICAgICB9CiAKICAgICBhY3Rpb24g
PSBQb2xpY3lBY3Rpb246OlN1c3BlbmQ7Ci0gICAgaWYgKFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+
IHByb2Nlc3MgPSB0cnlUYWtlUHJld2FybWVkUHJvY2VzcyhwYWdlLndlYnNpdGVEYXRhU3RvcmUo
KSkpCisKKyAgICBpZiAoUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzcyA9IHRyeVRha2VQ
cmV3YXJtZWRQcm9jZXNzKHBhZ2Uud2Vic2l0ZURhdGFTdG9yZSgpKSkgeworICAgICAgICBpZiAo
YXV0byogcHJld2FybUluZm9ybWF0aW9uID0gbV9wcmV3YXJtSW5mb3JtYXRpb25Gb3JSZWdpc3Ry
YWJsZURvbWFpbi5nZXQodG9SZWdpc3RyYWJsZURvbWFpbih0YXJnZXRVUkwpKSkKKyAgICAgICAg
ICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlByZXdhcm1XaXRoRG9tYWlu
SW5mb3JtYXRpb24oKnByZXdhcm1JbmZvcm1hdGlvbiksIDApOworCiAgICAgICAgIHJldHVybiBw
cm9jZXNzLnJlbGVhc2VOb25OdWxsKCk7CisgICAgfQorCiAgICAgcmV0dXJuIGNyZWF0ZU5ld1dl
YlByb2Nlc3MocGFnZS53ZWJzaXRlRGF0YVN0b3JlKCkpOwogfQogCkBAIC0yMjQ4LDQgKzIyNTUs
MTcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZERpc3BsYXlDb25maWd1cgogI2VuZGlmCiB9
CiAKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZENvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oY29u
c3QgU3RyaW5nJiByZWdpc3RyYWJsZURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UHJld2FybUluZm9y
bWF0aW9uJiBwcmV3YXJtSW5mb3JtYXRpb24pCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBt
YXhpbXVtU2l6ZVRvUHJldmVudFVubGltaXRlZEdyb3d0aCA9IDEwMDsKKyAgICBpZiAobV9wcmV3
YXJtSW5mb3JtYXRpb25Gb3JSZWdpc3RyYWJsZURvbWFpbi5zaXplKCkgPT0gbWF4aW11bVNpemVU
b1ByZXZlbnRVbmxpbWl0ZWRHcm93dGgpCisgICAgICAgIG1fcHJld2FybUluZm9ybWF0aW9uRm9y
UmVnaXN0cmFibGVEb21haW4ucmVtb3ZlKG1fcHJld2FybUluZm9ybWF0aW9uRm9yUmVnaXN0cmFi
bGVEb21haW4uYmVnaW4oKSk7CisKKyAgICBhdXRvJiB2YWx1ZSA9IG1fcHJld2FybUluZm9ybWF0
aW9uRm9yUmVnaXN0cmFibGVEb21haW4uZW5zdXJlKHJlZ2lzdHJhYmxlRG9tYWluLCBbXSB7Cisg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlByZXdhcm1JbmZvcm1hdGlv
bj4oKTsKKyAgICB9KS5pdGVyYXRvci0+dmFsdWU7CisKKyAgICAqdmFsdWUgPSBwcmV3YXJtSW5m
b3JtYXRpb247Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDQs
NiArNDQ0LDggQEAgcHVibGljOgogICAgIHZvaWQgdW5yZWdpc3RlclN1c3BlbmRlZFBhZ2VQcm94
eShTdXNwZW5kZWRQYWdlUHJveHkmKTsKICAgICB2b2lkIGRpZFJlYWNoR29vZFRpbWVUb1ByZXdh
cm0oKTsKIAorICAgIHZvaWQgZGlkQ29sbGVjdFByZXdhcm1JbmZvcm1hdGlvbihjb25zdCBTdHJp
bmcmIHJlZ2lzdHJhYmxlRG9tYWluLCBjb25zdCBXZWJDb3JlOjpQcmV3YXJtSW5mb3JtYXRpb24m
KTsKKwogICAgIHZvaWQgc2NyZWVuUHJvcGVydGllc1N0YXRlQ2hhbmdlZCgpOwogCiAgICAgdm9p
ZCBhZGRNb2NrTWVkaWFEZXZpY2UoY29uc3QgV2ViQ29yZTo6TW9ja01lZGlhRGV2aWNlJik7CkBA
IC02OTYsNiArNjk4LDggQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8V2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhLCBWZWN0b3I8U3VzcGVuZGVkUGFnZVByb3h5Kj4+IG1fc3VzcGVuZGVkUGFn
ZXM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+PiBtX3N3YXBw
ZWRQcm9jZXNzZXNQZXJSZWdpc3RyYWJsZURvbWFpbjsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UHJld2FybUluZm9ybWF0aW9uPj4gbV9wcmV3YXJtSW5m
b3JtYXRpb25Gb3JSZWdpc3RyYWJsZURvbWFpbjsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHJl
dmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MzMsNiArMTQzMywxMSBAQCB2b2lkIFdlYlByb2Nl
c3NQcm94eTo6ZGlkQ2hlY2tQcm9jZXNzTG9jCiAgICAgY2FsbGJhY2soaXNMb2NhbGx5UmVhY2hh
YmxlID8gTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5OjpZZXMgOiBNZXNz
YWdlUG9ydENoYW5uZWxQcm92aWRlcjo6SGFzQWN0aXZpdHk6Ok5vKTsKIH0KIAordm9pZCBXZWJQ
cm9jZXNzUHJveHk6OmRpZENvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oY29uc3QgU3RyaW5nJiBk
b21haW4sIGNvbnN0IFdlYkNvcmU6OlByZXdhcm1JbmZvcm1hdGlvbiYgcHJld2FybUluZm9ybWF0
aW9uKQoreworICAgIHByb2Nlc3NQb29sKCkuZGlkQ29sbGVjdFByZXdhcm1JbmZvcm1hdGlvbihk
b21haW4sIHByZXdhcm1JbmZvcm1hdGlvbik7Cit9CisKICNpZiBQTEFURk9STShXQVRDSE9TKQog
CiB2b2lkIFdlYlByb2Nlc3NQcm94eTo6dGFrZUJhY2tncm91bmRBY3Rpdml0eVRva2VuRm9yRnVs
bHNjcmVlbklucHV0KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5oCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzE0LDYgKzMxNCw4IEBAIHByaXZhdGU6
CiAKICAgICBib29sIGNhblRlcm1pbmF0ZUNoaWxkUHJvY2VzcygpOwogCisgICAgdm9pZCBkaWRD
b2xsZWN0UHJld2FybUluZm9ybWF0aW9uKGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBXZWJD
b3JlOjpQcmV3YXJtSW5mb3JtYXRpb24mKTsKKwogICAgIHZvaWQgbG9nRGlhZ25vc3RpY01lc3Nh
Z2VGb3JSZXNvdXJjZUxpbWl0VGVybWluYXRpb24oY29uc3QgU3RyaW5nJiBsaW1pdEtleSk7CiAK
ICAgICBlbnVtIGNsYXNzIElzV2VhayB7IE5vLCBZZXMgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9u
IDIzNjkxMSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNz
YWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBAQCBtZXNzYWdlcyAtPiBXZWJQ
cm9jZXNzUHJveHkgTGVnYWN5UmVjZWl2CiAgICAgRGlkRGVsaXZlck1lc3NhZ2VQb3J0TWVzc2Fn
ZXModWludDY0X3QgbWVzc2FnZUJhdGNoSWRlbnRpZmllcikKICAgICBEaWRDaGVja1Byb2Nlc3NM
b2NhbFBvcnRGb3JBY3Rpdml0eSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGJvb2wgaXNM
b2NhbGx5UmVhY2hhYmxlKQogCisgICAgRGlkQ29sbGVjdFByZXdhcm1JbmZvcm1hdGlvbihTdHJp
bmcgZG9tYWluLCBzdHJ1Y3QgV2ViQ29yZTo6UHJld2FybUluZm9ybWF0aW9uIHByZXdhcm1JbmZv
cm1hdGlvbikKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIENhY2hlTWVkaWFNSU1FVHlwZXMo
VmVjdG9yPFN0cmluZz4gdHlwZXMpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIwLDkgKzQyMCwxNCBA
QCB2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKFdlCiAgICAgUkVMRUFTRV9M
T0coUHJvY2VzcywgIiVwIC0gV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3M6IFByZXNl
bnRpbmcgcHJvY2VzcyA9ICVkIiwgdGhpcywgV2ViQ29yZTo6cHJlc2VudGluZ0FwcGxpY2F0aW9u
UElEKCkpOwogfQogCi12b2lkIFdlYlByb2Nlc3M6OnByZXdhcm0oKQordm9pZCBXZWJQcm9jZXNz
OjpwcmV3YXJtR2xvYmFsbHkoKQogewotICAgIFdlYkNvcmU6OlByb2Nlc3NXYXJtaW5nOjpwcmV3
YXJtKCk7CisgICAgV2ViQ29yZTo6UHJvY2Vzc1dhcm1pbmc6OnByZXdhcm1HbG9iYWxseSgpOwor
fQorCit2b2lkIFdlYlByb2Nlc3M6OnByZXdhcm1XaXRoRG9tYWluSW5mb3JtYXRpb24oY29uc3Qg
V2ViQ29yZTo6UHJld2FybUluZm9ybWF0aW9uJiBwcmV3YXJtSW5mb3JtYXRpb24pCit7CisgICAg
V2ViQ29yZTo6UHJvY2Vzc1dhcm1pbmc6OnByZXdhcm1XaXRoSW5mb3JtYXRpb24ocHJld2FybUlu
Zm9ybWF0aW9uKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzOjpyZWdpc3RlclVSTFNjaGVtZUFzRW1w
dHlEb2N1bWVudChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE0NTksNiArMTQ2NCwxMyBA
QCB2b2lkIFdlYlByb2Nlc3M6OnByb2Nlc3NEaWRSZXN1bWUoKQogI2VuZGlmCiB9CiAKK3ZvaWQg
V2ViUHJvY2Vzczo6c2VuZFByZXdhcm1JbmZvcm1hdGlvbihjb25zdCBTdHJpbmcmIHJlZ2lzdHJh
YmxlRG9tYWluKQoreworICAgIGlmIChyZWdpc3RyYWJsZURvbWFpbi5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzUHJveHk6OkRpZENvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24ocmVnaXN0cmFi
bGVEb21haW4sIFdlYkNvcmU6OlByb2Nlc3NXYXJtaW5nOjpjb2xsZWN0UHJld2FybUluZm9ybWF0
aW9uKCkpLCAwKTsKK30KKwogdm9pZCBXZWJQcm9jZXNzOjpwYWdlRGlkRW50ZXJXaW5kb3codWlu
dDY0X3QgcGFnZUlEKQogewogICAgIG1fcGFnZXNJbldpbmRvd3MuYWRkKHBhZ2VJRCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHJldmlzaW9uIDIzNjkxMSkKKysr
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDYgKzcxLDcgQEAgc3RydWN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllcjsKIHN0cnVjdCBNZXNz
YWdlV2l0aE1lc3NhZ2VQb3J0czsKIHN0cnVjdCBNb2NrTWVkaWFEZXZpY2U7CiBzdHJ1Y3QgUGx1
Z2luSW5mbzsKK3N0cnVjdCBQcmV3YXJtSW5mb3JtYXRpb247CiBzdHJ1Y3QgU2VjdXJpdHlPcmln
aW5EYXRhOwogc3RydWN0IFNvdXBOZXR3b3JrUHJveHlTZXR0aW5nczsKIApAQCAtMjAwLDYgKzIw
MSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbmNlbFByZXBhcmVUb1N1c3BlbmQoKTsKICAgICB2
b2lkIHByb2Nlc3NEaWRSZXN1bWUoKTsKIAorICAgIHZvaWQgc2VuZFByZXdhcm1JbmZvcm1hdGlv
bihjb25zdCBTdHJpbmcmIHJlZ2lzdHJhYmxlRG9tYWluKTsKKwogI2lmIFBMQVRGT1JNKElPUykK
ICAgICB2b2lkIHJlc2V0QWxsR2VvbG9jYXRpb25QZXJtaXNzaW9ucygpOwogI2VuZGlmCkBAIC0y
NDUsNyArMjQ4LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVXZWJQcm9jZXNzKFdl
YlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJik7CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxp
emVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJik7CiAKLSAgICB2b2lk
IHByZXdhcm0oKTsKKyAgICB2b2lkIHByZXdhcm1HbG9iYWxseSgpOworICAgIHZvaWQgcHJld2Fy
bVdpdGhEb21haW5JbmZvcm1hdGlvbihjb25zdCBXZWJDb3JlOjpQcmV3YXJtSW5mb3JtYXRpb24m
KTsKIAogI2lmIFVTRShPU19TVEFURSkKICAgICB2b2lkIHJlZ2lzdGVyV2l0aFN0YXRlRHVtcGVy
KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5p
bgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNz
YWdlcy5pbgkocmV2aXNpb24gMjM2OTExKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDkgQEAgbWVz
c2FnZXMgLT4gV2ViUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAgIyBDcmVhdGUgYSBuZXcg
cGFnZS4KICAgICBDcmVhdGVXZWJQYWdlKHVpbnQ2NF90IG5ld1BhZ2VJRCwgc3RydWN0IFdlYktp
dDo6V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyBwYWdlQ3JlYXRpb25QYXJhbWV0ZXJzKQogCi0g
ICAgUHJld2FybSgpOwotIAorICAgIFByZXdhcm1HbG9iYWxseSgpOworICAgIFByZXdhcm1XaXRo
RG9tYWluSW5mb3JtYXRpb24oc3RydWN0IFdlYkNvcmU6OlByZXdhcm1JbmZvcm1hdGlvbiBwcmV3
YXJtSW5mb3JtYXRpb24pCisKICAgICAjIEdsb2JhbCBwcmVmZXJlbmNlcy4KICAgICBTZXRDYWNo
ZU1vZGVsKHVpbnQzMl90IGNhY2hlTW9kZWwpCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE3Myw5ICsxMTczLDEyIEBAIHZvaWQgV2ViUGFnZTo6Y2xvc2UoKQogICAgIG1faXNDbG9zZWQg
PSB0cnVlOwogCiAgICAgLy8gSWYgdGhlcmUgaXMgc3RpbGwgbm8gVVJMLCB0aGVuIHdlIG5ldmVy
IGxvYWRlZCBhbnl0aGluZyBpbiB0aGlzIHBhZ2UsIHNvIG5vdGhpbmcgdG8gcmVwb3J0LgotICAg
IGlmICghbWFpbldlYkZyYW1lKCktPnVybCgpLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1haW5XZWJG
cmFtZSgpLT51cmwoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgcmVwb3J0VXNlZEZlYXR1cmVzKCk7
CiAKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2VuZFByZXdhcm1JbmZvcm1hdGlv
bih0b1JlZ2lzdHJhYmxlRG9tYWluKG1haW5XZWJGcmFtZSgpLT51cmwoKSkpOworICAgIH0KKwog
ICAgIGlmIChwYWdlR3JvdXAoKS0+aXNWaXNpYmxlVG9JbmplY3RlZEJ1bmRsZSgpICYmIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxlKCkpCiAgICAgICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxlKCktPndpbGxEZXN0cm95UGFnZSh0aGlzKTsKIApA
QCAtMjg3Myw2ICsyODc2LDggQEAgdm9pZCBXZWJQYWdlOjpkaWRSZWNlaXZlUG9saWN5RGVjaXNp
b24odQogICAgIGlmIChwb2xpY3lBY3Rpb24gPT0gUG9saWN5QWN0aW9uOjpTdXNwZW5kKSB7CiAg
ICAgICAgIEFTU0VSVChmcmFtZSA9PSBtX21haW5GcmFtZSk7CiAgICAgICAgIHNldElzU3VzcGVu
ZGVkKHRydWUpOworCisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnNlbmRQcmV3YXJt
SW5mb3JtYXRpb24odG9SZWdpc3RyYWJsZURvbWFpbihtYWluV2ViRnJhbWUoKS0+dXJsKCkpKTsK
ICAgICB9CiAgICAgZnJhbWUtPmRpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbihsaXN0ZW5lcklELCBw
b2xpY3lBY3Rpb24sIG5hdmlnYXRpb25JRCwgZG93bmxvYWRJRCwgV1RGTW92ZSh3ZWJzaXRlUG9s
aWNpZXMpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351768</attachid>
            <date>2018-10-08 04:11:52 -0700</date>
            <delta_ts>2018-10-09 00:52:57 -0700</delta_ts>
            <desc>patch</desc>
            <filename>prewarm-font-domain-11.patch</filename>
            <type>text/plain</type>
            <size>26727</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDE4LTEwLTA4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBQcmV3YXJtIEZvbnREYXRhYmFz
ZSBvbiBwcm9jZXNzIHN3YXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5MDMxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEltcGxlbWVudCBiYXNpYyBwcmV3YXJtaW5nIG9mIEZvbnREYXRhYmFzZS4gV2hl
biB0aGUgZG9tYWluIG9mIHRoZSBmaXJzdCBwYWdlIGxvYWQgb24KKyAgICAgICAgYSBuZXcgcHJv
Y2VzcyBpcyBrbm93biB3ZSBwYXNzIHRoZSBsaXN0IG9mIGZvbnQgZmFtaWxpZXMgcHJldmlvdXMg
dXNlZCBieSB0aGF0IGRvbWFpbiB0byB0aGUKKyAgICAgICAgcHJvY2Vzcy4gVGhpcyBpcyB1c2Vk
IHRvIHByZXdhcm0gQ29yZVRleHQgZm9udCBkYXRhYmFzZS4gSW5pdGlhbGl6YXRpb24gKHdoaWNo
IGludm9sdmVzIGxvdHMgb2YKKyAgICAgICAgYmxvY2tpbmcgSVBDKSBoYXBwZW5zIG91dHNpZGUg
dGhlIG1haW4gdGhyZWFkIHNvIHRoZSBmb250cyBhcmUgcmVhZHkgdG8gdXNlIHdoZW4gbmVlZGVk
LgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIHBhZ2UvUHJld2FybUluZm9ybWF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UHJld2FybUluZm9ybWF0aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UHJl
d2FybUluZm9ybWF0aW9uOjpkZWNvZGUpOgorCisgICAgICAgIEFkZCBkYXRhIHN0cnVjdHVyZSBm
b3IgcHJld2FybSBpbmZvcm1hdGlvbiB3aXRoIGVuY29kZS9kZWNvZGUgc3VwcG9ydC4KKworICAg
ICAgICAqIHBhZ2UvUHJvY2Vzc1dhcm1pbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vz
c1dhcm1pbmc6OmNvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UHJvY2Vzc1dhcm1pbmc6OnByZXdhcm1XaXRoSW5mb3JtYXRpb24pOgorCisgICAgICAgIFByZXdh
cm1pbmcgaW50ZXJmYWNlIHRvIGJlIHVzZWQgZnJvbSBXZWJLaXQuCisKKyAgICAgICAgKiBwYWdl
L1Byb2Nlc3NXYXJtaW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y29sbGVjdFByZXdhcm1JbmZvcm1h
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnByZXdhcm0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnREYXRhYmFzZTo6Y29sbGVjdGlvbkZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250RGF0YWJhc2U6OmZvbnRGb3JQb3N0U2NyaXB0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250RGF0YWJhc2U6OmNsZWFyKToKKworICAgICAgICBBZGQgbXV0ZXggZm9yIHRocmVhZCBzYWZl
IGFjY2Vzcy4KKworICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZv
cm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y29sbGVjdFByZXdhcm1JbmZv
cm1hdGlvbiBjb25zdCk6CisKKyAgICAgICAgQ29sbGVjdCBmb250IGZhbWlsaWVzIHNlZW4gYnkg
dGhpcyBwcm9jZXNzLgorCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnByZXdhcm0pOgor
CisgICAgICAgIFByZXdhcm0gRm9udERhdGFiYXNlIGluIGEgZGlzcGF0Y2ggcXVldWUuCisKIDIw
MTgtMTAtMDcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXhl
ZCBidWlsZGluZyB3aXRoIHRoZSBsYXRlc3QgbWFjT1MgU0RLCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzY5
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3NTksNiArNDc1OSw3IEBACiAJCUU0NEI0QkI0MTQxNjUwRDcw
MDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0NEI0QkIyMTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNo
ZWNrZXIuaCAqLzsgfTsKIAkJRTQ0RkExODUxQkNBNkI1QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJl
ZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNDRGQTE4NDFCQ0E2QjVBMDA5MUI2RUYgLyogQ29tcG9zZWRUcmVlSXRlcmF0b3IuaCAqLzsg
fTsKIAkJRTQ1MzIyQUMxNDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVjdG9yUXVlcnkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTMyMkFBMTQwQ0UyNjcw
MDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmggKi87IH07CisJCUU0NjA1RkVDMjE2NjQ4MDkwMEU1
MzA0NiAvKiBQcmV3YXJtSW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjA1RkVBMjE2NjQ4MDgwMEU1MzA0NiAvKiBQcmV3YXJtSW5m
b3JtYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFNDYxODAyRDFDOEREMjkwMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjE4MDJDMUM4REQyOTAw
MDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICovOyB9OwogCQlFNDYxRDY1RjFCQjBDODBEMDBD
QjU2NDUgLyogU3R5bGVTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTQ2MUQ2NUUxQkIwQzgwRDAwQ0I1NjQ1IC8qIFN0eWxlU2NvcGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDYyQTRBMTEx
M0U3MUJFMDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDYyQTRBMDExM0U3MUJFMDA0QTQyMjAgLyogSW50UG9p
bnRIYXNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTE0NDM5LDYgKzE0NDQwLDcgQEAKIAkJRTQ1MzkwMzQwRUFGRDYzNzAwMzY5NUM4IC8qIFNj
cm9sbFZpZXdJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBT
Y3JvbGxWaWV3SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDUzOTAzQzBF
QUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2lkZ2V0SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDUzOTBBRDBFQUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVtb3J5SU9TLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5c3RlbU1lbW9yeUlPUy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NjA1RkVBMjE2NjQ4MDgwMEU1MzA0NiAvKiBQcmV3
YXJtSW5mb3JtYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJld2Fy
bUluZm9ybWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NjE4MDJDMUM4
REQyOTAwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdHlsZVJlbGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDYxODAyRTFDOERENEQyMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSZWxhdGlvbnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNDYxRDY1QzFCQjBDN0YwMDBDQjU2NDUgLyogU3R5bGVT
Y29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZVNjb3Bl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NTQ0LDYgKzE5NTQ2LDcgQEAK
IAkJCQk1Q0ZDNDM0RTE5MjQwNkE5MDBBMEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9sbGVyLmNw
cCAqLywKIAkJCQk1Q0ZDNDM0RjE5MjQwNkE5MDBBMEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9s
bGVyLmggKi8sCiAJCQkJMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3BlbmluZ09i
c2VydmVyLmggKi8sCisJCQkJRTQ2MDVGRUEyMTY2NDgwODAwRTUzMDQ2IC8qIFByZXdhcm1JbmZv
cm1hdGlvbi5oICovLAogCQkJCUI3NzZENDNDMTEwNDUyNzUwMEJFQjBFQyAvKiBQcmludENvbnRl
eHQuY3BwICovLAogCQkJCUI3NzZENDNBMTEwNDUyNUQwMEJFQjBFQyAvKiBQcmludENvbnRleHQu
aCAqLywKIAkJCQlFNDIwNTAxNjIxNDE5MDFCMDA2NkVGM0IgLyogUHJvY2Vzc1dhcm1pbmcuY3Bw
ICovLApAQCAtMjc1NzgsNiArMjc1ODEsNyBAQAogCQkJCUNFNzk5Rjk4MUM2QTQ2QkMwMDk3QjUx
OCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDRTc5OUZBQzFDNkE1MDY2MDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNl
TGlzdERpcmVjdGl2ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFEMDE1Q0EwRjRCNUM3MTAwNEE2
NjJGIC8qIENvbnRlbnRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDYwNUZFQzIxNjY0ODA5
MDBFNTMwNDYgLyogUHJld2FybUluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzYy
N0I4RTE0RkIzQ0VFMDAyQ0RDQTEgLyogQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzQjZBMEU2MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDY1QUQ0RjUwQjBDMkVEQTAwNUEyQjFEIC8qIENvbnRleHRN
ZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJl
d2FybUluZm9ybWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QcmV3
YXJtSW5mb3JtYXRpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1By
ZXdhcm1JbmZvcm1hdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgV0VCQ09SRV9FWFBPUlQgUHJld2FybUluZm9ybWF0aW9u
IHsKKyAgICBGb250UHJld2FybUluZm9ybWF0aW9uIGZvbnQ7CisKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8UHJld2FybUluZm9ybWF0aW9uPiBkZWNv
ZGUoRGVjb2RlciYpOworfTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgUHJld2Fy
bUluZm9ybWF0aW9uOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNv
ZGVyIDw8IGZvbnQ7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFs
PFByZXdhcm1JbmZvcm1hdGlvbj4gUHJld2FybUluZm9ybWF0aW9uOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKK3sKKyAgICBQcmV3YXJtSW5mb3JtYXRpb24gcHJld2FybUluZm87CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShwcmV3YXJtSW5mby5mb250KSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIHJldHVybiBwcmV3YXJtSW5mbzsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9Qcm9jZXNzV2FybWluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9Qcm9jZXNzV2FybWluZy5jcHAJKHJldmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUHJvY2Vzc1dhcm1pbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBA
IHZvaWQgUHJvY2Vzc1dhcm1pbmc6OmluaXRpYWxpemVOYW1lcygpCiAgICAgV2ViS2l0Rm9udEZh
bWlseU5hbWVzOjppbml0KCk7CiB9CiAgICAgCi12b2lkIFByb2Nlc3NXYXJtaW5nOjpwcmV3YXJt
KCkKK3ZvaWQgUHJvY2Vzc1dhcm1pbmc6OnByZXdhcm1HbG9iYWxseSgpCiB7CiAgICAgaW5pdGlh
bGl6ZU5hbWVzKCk7CiAgICAgCkBAIC03Niw0ICs3NiwxNiBAQCB2b2lkIFByb2Nlc3NXYXJtaW5n
OjpwcmV3YXJtKCkKICNlbmRpZgogfQogCitXZWJDb3JlOjpQcmV3YXJtSW5mb3JtYXRpb24gUHJv
Y2Vzc1dhcm1pbmc6OmNvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oKQoreworICAgIFByZXdhcm1J
bmZvcm1hdGlvbiBpbmZvOworICAgIGluZm8uZm9udCA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCku
Y29sbGVjdFByZXdhcm1JbmZvcm1hdGlvbigpOworICAgIHJldHVybiBpbmZvOworfQorCit2b2lk
IFByb2Nlc3NXYXJtaW5nOjpwcmV3YXJtV2l0aEluZm9ybWF0aW9uKGNvbnN0IFByZXdhcm1JbmZv
cm1hdGlvbiYgcHJld2FybUluZm8pCit7CisgICAgRm9udENhY2hlOjpzaW5nbGV0b24oKS5wcmV3
YXJtKHByZXdhcm1JbmZvLmZvbnQpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L1Byb2Nlc3NXYXJtaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Qcm9j
ZXNzV2FybWluZy5oCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1By
b2Nlc3NXYXJtaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsyNSwxNyBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIlByZXdhcm1JbmZvcm1hdGlvbi5oIgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFByb2Nlc3NXYXJtaW5nIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplTmFtZXMoKTsKLSAgICBzdGF0aWMgdm9pZCBw
cmV3YXJtKCk7CisgICAgc3RhdGljIHZvaWQgcHJld2FybUdsb2JhbGx5KCk7CisKKyAgICBzdGF0
aWMgUHJld2FybUluZm9ybWF0aW9uIGNvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oKTsKKyAgICBz
dGF0aWMgdm9pZCBwcmV3YXJtV2l0aEluZm9ybWF0aW9uKGNvbnN0IFByZXdhcm1JbmZvcm1hdGlv
biYpOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FjaGUuY3BwCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODIsNiArNDgy
LDE2IEBAIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlKCkKIH0KIAogI2lmICFQTEFURk9STShD
T0NPQSkKKworRm9udFByZXdhcm1JbmZvcm1hdGlvbiBGb250Q2FjaGU6OmNvbGxlY3RQcmV3YXJt
SW5mb3JtYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgRm9udENh
Y2hlOjpwcmV3YXJtKGNvbnN0IEZvbnRQcmV3YXJtSW5mb3JtYXRpb24mKQoreworfQorCiBSZWZQ
dHI8Rm9udD4gRm9udENhY2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBj
b25zdCBBdG9taWNTdHJpbmcmKQogewogICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHJldmlzaW9uIDIzNjkx
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi9Xb3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTY3LDYgKzY4LDggQEAgdHlw
ZWRlZiBJTUxhbmdGb250TGluayBJTUxhbmdGb250TGlua1R5cAogI2VuZGlmCiAjZW5kaWYKIAor
dXNpbmcgRm9udFByZXdhcm1JbmZvcm1hdGlvbiA9IFZlY3RvcjxTdHJpbmc+OworCiAvLyBUaGlz
IGtleSBjb250YWlucyB0aGUgRm9udERlc2NyaXB0aW9uIGZpZWxkcyBvdGhlciB0aGFuIGZhbWls
eSB0aGF0IG1hdHRlciB3aGVuIGZldGNoaW5nIEZvbnREYXRhcyAocGxhdGZvcm0gZm9udHMpLgog
c3RydWN0IEZvbnREZXNjcmlwdGlvbktleSB7CiAgICAgRm9udERlc2NyaXB0aW9uS2V5KCkgPSBk
ZWZhdWx0OwpAQCAtMjM1LDYgKzIzOCw5IEBAIHB1YmxpYzoKICAgICBib29sIHNob3VsZE1vY2tC
b2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE1v
Y2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHk7IH0KICAgICB2b2lkIHNldFNob3VsZE1v
Y2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkoYm9vbCBzaG91bGRNb2NrQm9sZFN5c3Rl
bUZvbnRGb3JBY2Nlc3NpYmlsaXR5KSB7IG1fc2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9yQWNj
ZXNzaWJpbGl0eSA9IHNob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHk7IH0K
IAorICAgIEZvbnRQcmV3YXJtSW5mb3JtYXRpb24gY29sbGVjdFByZXdhcm1JbmZvcm1hdGlvbigp
IGNvbnN0OworICAgIHZvaWQgcHJld2FybShjb25zdCBGb250UHJld2FybUluZm9ybWF0aW9uJik7
CisKIHByaXZhdGU6CiAgICAgRm9udENhY2hlKCk7CiAgICAgfkZvbnRDYWNoZSgpID0gZGVsZXRl
OwpAQCAtMjU4LDYgKzI2NCw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZE1vY2tCb2xk
U3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHkgeyBmYWxzZSB9OwogCiAjaWYgUExBVEZPUk0oQ09D
T0EpCisgICAgSGFzaFNldDxTdHJpbmc+IG1fc2VlbkZhbWlsaWVzRm9yUHJld2FybWluZzsKKyAg
ICBSZWZQdHI8V29ya1F1ZXVlPiBtX3ByZXdhcm1RdWV1ZTsKKwogICAgIGZyaWVuZCBjbGFzcyBD
b21wbGV4VGV4dENvbnRyb2xsZXI7CiAjZW5kaWYKICAgICBmcmllbmQgY2xhc3MgRm9udDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVU
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAJKHJldmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODg2LDYgKzg4Niw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEluc3Rh
bGxlZEZvbnRGYW1pbHkmIGNvbGxlY3Rpb25Gb3JGYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHlO
YW1lKQogICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2tlcihtX2Rlc2Ny
aXB0b3JNYXBMb2NrKTsKKwogICAgICAgICBhdXRvIGZvbGRlZCA9IGZhbWlseU5hbWUuZm9sZENh
c2UoKTsKICAgICAgICAgcmV0dXJuIG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzLmVuc3Vy
ZShmb2xkZWQsIFsmXSB7CiAgICAgICAgICAgICBhdXRvIGZhbWlseU5hbWVTdHJpbmcgPSBmb2xk
ZWQuY3JlYXRlQ0ZTdHJpbmcoKTsKQEAgLTkxMCw2ICs5MTIsOCBAQCBwdWJsaWM6CiAKICAgICBj
b25zdCBJbnN0YWxsZWRGb250JiBmb250Rm9yUG9zdFNjcmlwdE5hbWUoY29uc3QgQXRvbWljU3Ry
aW5nJiBwb3N0U2NyaXB0TmFtZSkKICAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2Nr
PiBsb2NrZXIobV9kZXNjcmlwdG9yTWFwTG9jayk7CisKICAgICAgICAgY29uc3QgYXV0byYgZm9s
ZGVkID0gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Zm9sZGVkRmFtaWx5TmFtZShwb3N0U2NyaXB0
TmFtZSk7CiAgICAgICAgIHJldHVybiBtX3Bvc3RTY3JpcHROYW1lVG9Gb250RGVzY3JpcHRvcnMu
ZW5zdXJlKGZvbGRlZCwgWyZdIHsKICAgICAgICAgICAgIGF1dG8gcG9zdFNjcmlwdE5hbWVTdHJp
bmcgPSBmb2xkZWQuY3JlYXRlQ0ZTdHJpbmcoKTsKQEAgLTkzMSw2ICs5MzUsOCBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2Nr
PiBsb2NrZXIobV9kZXNjcmlwdG9yTWFwTG9jayk7CisKICAgICAgICAgbV9mYW1pbHlOYW1lVG9G
b250RGVzY3JpcHRvcnMuY2xlYXIoKTsKICAgICAgICAgbV9wb3N0U2NyaXB0TmFtZVRvRm9udERl
c2NyaXB0b3JzLmNsZWFyKCk7CiAgICAgfQpAQCAtOTQzLDYgKzk0OSw3IEBAIHByaXZhdGU6CiAg
ICAgewogICAgIH0KIAorICAgIExvY2sgbV9kZXNjcmlwdG9yTWFwTG9jazsKICAgICBIYXNoTWFw
PFN0cmluZywgSW5zdGFsbGVkRm9udEZhbWlseT4gbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRv
cnM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIEluc3RhbGxlZEZvbnQ+IG1fcG9zdFNjcmlwdE5hbWVU
b0ZvbnREZXNjcmlwdG9yczsKICAgICBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBtX2FsbG93VXNl
ckluc3RhbGxlZEZvbnRzOwpAQCAtMTI2MSw2ICsxMjY4LDkgQEAgc3RkOjp1bmlxdWVfcHRyPEZv
bnRQbGF0Zm9ybURhdGE+IEZvbnRDYQogICAgIGlmICghZm9udCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKKyAgICBpZiAoZm9udERlc2NyaXB0aW9uLnNob3VsZEFsbG93VXNlckluc3RhbGxl
ZEZvbnRzKCkgPT0gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKQorICAgICAgICBtX3NlZW5G
YW1pbGllc0ZvclByZXdhcm1pbmcuYWRkKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZvbGRlZEZh
bWlseU5hbWUoZmFtaWx5KSk7CisKICAgICBib29sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY09i
bGlxdWU7CiAgICAgc3RkOjp0aWUoc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSkgPSBj
b21wdXRlTmVjZXNzYXJ5U3ludGhlc2lzKGZvbnQuZ2V0KCksIGZvbnREZXNjcmlwdGlvbikuYm9s
ZE9ibGlxdWVQYWlyKCk7CiAKQEAgLTE0OTksNCArMTUwOSwyOSBAQCBSZWY8Rm9udD4gRm9udENh
Y2hlOjpsYXN0UmVzb3J0RmFsbGJhY2tGCiAgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEo
cGxhdGZvcm1EYXRhKTsKIH0KIAorRm9udFByZXdhcm1JbmZvcm1hdGlvbiBGb250Q2FjaGU6OmNv
bGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oKSBjb25zdAoreworICAgIEZvbnRQcmV3YXJtSW5mb3Jt
YXRpb24gZm9udFByZXdhcm1JbmZvcm1hdGlvbjsKKyAgICBmb250UHJld2FybUluZm9ybWF0aW9u
ID0gY29weVRvVmVjdG9yKG1fc2VlbkZhbWlsaWVzRm9yUHJld2FybWluZyk7CisgICAgcmV0dXJu
IGZvbnRQcmV3YXJtSW5mb3JtYXRpb247Cit9CisKK3ZvaWQgRm9udENhY2hlOjpwcmV3YXJtKGNv
bnN0IEZvbnRQcmV3YXJtSW5mb3JtYXRpb24mIGZvbnRQcmV3YXJtSW5mb3JtYXRpb24pCit7Cisg
ICAgYXV0byYgZmFtaWxpZXMgPSBmb250UHJld2FybUluZm9ybWF0aW9uOworCisgICAgaWYgKGZh
bWlsaWVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3ByZXdhcm1R
dWV1ZSkKKyAgICAgICAgbV9wcmV3YXJtUXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgiV2ViS2l0
IGZvbnQgcHJld2FybSBxdWV1ZSIpOworCisgICAgYXV0byYgZGF0YWJhc2UgPSBGb250RGF0YWJh
c2U6OnNpbmdsZXRvbkRpc2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7CisKKyAgICBtX3By
ZXdhcm1RdWV1ZS0+ZGlzcGF0Y2goWyZkYXRhYmFzZSwgZmFtaWxpZXMgPSBmYW1pbGllcy5pc29s
YXRlZENvcHkoKV0geworICAgICAgICBmb3IgKGF1dG8mIGZhbWlseSA6IGZhbWlsaWVzKQorICAg
ICAgICAgICAgZGF0YWJhc2UuY29sbGVjdGlvbkZvckZhbWlseShmYW1pbHkpOworICAgIH0pOwor
fQorCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjM2OTExKQorKysgU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NCBAQAorMjAxOC0xMC0wOCAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUHJld2FybSBGb250RGF0
YWJhc2Ugb24gcHJvY2VzcyBzd2FwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTAzMTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgbWVjaGFuaXNtIGZvciBjYWNoaW5nIHByZXdhcm0gaW5mb3JtYXRp
b24gcGVyIGRvbWFpbiBvbiBVSSBwcm9jZXNzIHNpZGUuIFRoaXMgaW5mb3JtYXRpb24KKyAgICAg
ICAgaXMgdGhlbiBwYXNzZWQgdG8gbmV3bHkgaW5pdGlhbGl6ZWQgd2ViIHByb2Nlc3NlcyB0aGF0
IGFyZSBiZWluZyB1c2VkIGZvciB0aGUgc2FtZSBkb21haW4uCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NGb3JOYXZpZ2F0aW9u
SW50ZXJuYWwpOgorCisgICAgICAgIFBhc3MgcHJld2FybSBpbmZvcm1hdGlvbiBvbiBwcm9jZXNz
IHN3YXAgdG8gdGhlIG5ldyBwcm9jZXNzLgorCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sOjpkaWRDb2xsZWN0UHJld2FybUluZm9ybWF0aW9uKToKKworICAgICAgICBVSSBwcm9jZXNz
IHNpZGUgY2FjaGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJvY2Vzc1Byb3h5OjpkaWRDb2xsZWN0UHJld2FybUluZm9ybWF0aW9uKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNsb3NlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6ZGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKToKKworICAgICAgICBDb2xs
ZWN0IGFuZCBjYWNoZSBwcmV3YXJtIGluZm9ybWF0aW9uIGZvciB0aGUgcHJldmlvdXMgcHJvY2Vz
cyBvbiBwcm9jZXNzIHN3YXAuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjpwcmV3YXJtR2xvYmFsbHkpOgorCisgICAg
ICAgIFJlbmFtZWQgZm9yIGNsYXJpdHkuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6
cHJld2FybVdpdGhEb21haW5JbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OnNlbmRQcmV3YXJtSW5mb3JtYXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKwog
MjAxOC0xMC0wNyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFRy
aWVkIHRvIGZpeCBIQVZFKExJTktfUFJFVklFVykgaU9TIGJ1aWxkcy4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDYg
KzE5MCw3IEBAIHN0cnVjdCBFeGNlcHRpb25EZXRhaWxzOwogc3RydWN0IEZpbGVDaG9vc2VyU2V0
dGluZ3M7CiBzdHJ1Y3QgR2xvYmFsV2luZG93SWRlbnRpZmllcjsKIHN0cnVjdCBNZWRpYVN0cmVh
bVJlcXVlc3Q7CitzdHJ1Y3QgUHJld2FybUluZm9ybWF0aW9uOwogc3RydWN0IFNlY3VyaXR5T3Jp
Z2luRGF0YTsKIHN0cnVjdCBTaGFyZURhdGE7CiBzdHJ1Y3QgVGV4dEFsdGVybmF0aXZlV2l0aFJh
bmdlOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAko
cmV2aXNpb24gMjM2OTExKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw3IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtU2Ny
ZWVuLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Q
cm9jZXNzV2FybWluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9VUkxQYXJzZXIuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+
CkBAIC03MzYsNyArNzM3LDcgQEAgV2ViUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3Jl
YXRlTgogICAgICAgICBBU1NFUlQoIW1fcHJld2FybWVkUHJvY2Vzcyk7CiAgICAgICAgIG1fcHJl
d2FybWVkUHJvY2VzcyA9ICZwcm9jZXNzOwogICAgICAgICAKLSAgICAgICAgbV9wcmV3YXJtZWRQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpQcmV3YXJtKCksIDApOworICAgICAg
ICBtX3ByZXdhcm1lZFByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlByZXdhcm1H
bG9iYWxseSgpLCAwKTsKICAgICB9CiAKICAgICBpZiAobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
VGVybWluYXRpb25UaW1lci5pc0FjdGl2ZSgpKQpAQCAtMjE3Myw4ICsyMTc0LDE0IEBAIFJlZjxX
ZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjpwcm8KICAgICB9CiAKICAgICBhY3Rpb24g
PSBQb2xpY3lBY3Rpb246OlN1c3BlbmQ7Ci0gICAgaWYgKFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+
IHByb2Nlc3MgPSB0cnlUYWtlUHJld2FybWVkUHJvY2VzcyhwYWdlLndlYnNpdGVEYXRhU3RvcmUo
KSkpCisKKyAgICBpZiAoUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzcyA9IHRyeVRha2VQ
cmV3YXJtZWRQcm9jZXNzKHBhZ2Uud2Vic2l0ZURhdGFTdG9yZSgpKSkgeworICAgICAgICBpZiAo
YXV0byogcHJld2FybUluZm9ybWF0aW9uID0gbV9wcmV3YXJtSW5mb3JtYXRpb25Gb3JSZWdpc3Ry
YWJsZURvbWFpbi5nZXQodG9SZWdpc3RyYWJsZURvbWFpbih0YXJnZXRVUkwpKSkKKyAgICAgICAg
ICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlByZXdhcm1XaXRoRG9tYWlu
SW5mb3JtYXRpb24oKnByZXdhcm1JbmZvcm1hdGlvbiksIDApOworCiAgICAgICAgIHJldHVybiBw
cm9jZXNzLnJlbGVhc2VOb25OdWxsKCk7CisgICAgfQorCiAgICAgcmV0dXJuIGNyZWF0ZU5ld1dl
YlByb2Nlc3MocGFnZS53ZWJzaXRlRGF0YVN0b3JlKCkpOwogfQogCkBAIC0yMjQ4LDQgKzIyNTUs
MTcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZERpc3BsYXlDb25maWd1cgogI2VuZGlmCiB9
CiAKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZENvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oY29u
c3QgU3RyaW5nJiByZWdpc3RyYWJsZURvbWFpbiwgY29uc3QgV2ViQ29yZTo6UHJld2FybUluZm9y
bWF0aW9uJiBwcmV3YXJtSW5mb3JtYXRpb24pCit7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBt
YXhpbXVtU2l6ZVRvUHJldmVudFVubGltaXRlZEdyb3d0aCA9IDEwMDsKKyAgICBpZiAobV9wcmV3
YXJtSW5mb3JtYXRpb25Gb3JSZWdpc3RyYWJsZURvbWFpbi5zaXplKCkgPT0gbWF4aW11bVNpemVU
b1ByZXZlbnRVbmxpbWl0ZWRHcm93dGgpCisgICAgICAgIG1fcHJld2FybUluZm9ybWF0aW9uRm9y
UmVnaXN0cmFibGVEb21haW4ucmVtb3ZlKG1fcHJld2FybUluZm9ybWF0aW9uRm9yUmVnaXN0cmFi
bGVEb21haW4uYmVnaW4oKSk7CisKKyAgICBhdXRvJiB2YWx1ZSA9IG1fcHJld2FybUluZm9ybWF0
aW9uRm9yUmVnaXN0cmFibGVEb21haW4uZW5zdXJlKHJlZ2lzdHJhYmxlRG9tYWluLCBbXSB7Cisg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlByZXdhcm1JbmZvcm1hdGlv
bj4oKTsKKyAgICB9KS5pdGVyYXRvci0+dmFsdWU7CisKKyAgICAqdmFsdWUgPSBwcmV3YXJtSW5m
b3JtYXRpb247Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDQs
NiArNDQ0LDggQEAgcHVibGljOgogICAgIHZvaWQgdW5yZWdpc3RlclN1c3BlbmRlZFBhZ2VQcm94
eShTdXNwZW5kZWRQYWdlUHJveHkmKTsKICAgICB2b2lkIGRpZFJlYWNoR29vZFRpbWVUb1ByZXdh
cm0oKTsKIAorICAgIHZvaWQgZGlkQ29sbGVjdFByZXdhcm1JbmZvcm1hdGlvbihjb25zdCBTdHJp
bmcmIHJlZ2lzdHJhYmxlRG9tYWluLCBjb25zdCBXZWJDb3JlOjpQcmV3YXJtSW5mb3JtYXRpb24m
KTsKKwogICAgIHZvaWQgc2NyZWVuUHJvcGVydGllc1N0YXRlQ2hhbmdlZCgpOwogCiAgICAgdm9p
ZCBhZGRNb2NrTWVkaWFEZXZpY2UoY29uc3QgV2ViQ29yZTo6TW9ja01lZGlhRGV2aWNlJik7CkBA
IC02OTYsNiArNjk4LDggQEAgcHJpdmF0ZToKIAogICAgIEhhc2hNYXA8V2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhLCBWZWN0b3I8U3VzcGVuZGVkUGFnZVByb3h5Kj4+IG1fc3VzcGVuZGVkUGFn
ZXM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+PiBtX3N3YXBw
ZWRQcm9jZXNzZXNQZXJSZWdpc3RyYWJsZURvbWFpbjsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UHJld2FybUluZm9ybWF0aW9uPj4gbV9wcmV3YXJtSW5m
b3JtYXRpb25Gb3JSZWdpc3RyYWJsZURvbWFpbjsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHJl
dmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJXZWJzaXRl
RGF0YS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhRmV0Y2hPcHRpb24uaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUHJld2Fy
bUluZm9ybWF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QdWJsaWNTdWZmaXguaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1N1ZGRlblRlcm1pbmF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9VUkwu
aD4KQEAgLTE0MzMsNiArMTQzNCwxMSBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlkQ2hlY2tQ
cm9jZXNzTG9jCiAgICAgY2FsbGJhY2soaXNMb2NhbGx5UmVhY2hhYmxlID8gTWVzc2FnZVBvcnRD
aGFubmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5OjpZZXMgOiBNZXNzYWdlUG9ydENoYW5uZWxQcm92
aWRlcjo6SGFzQWN0aXZpdHk6Ok5vKTsKIH0KIAordm9pZCBXZWJQcm9jZXNzUHJveHk6OmRpZENv
bGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFdlYkNv
cmU6OlByZXdhcm1JbmZvcm1hdGlvbiYgcHJld2FybUluZm9ybWF0aW9uKQoreworICAgIHByb2Nl
c3NQb29sKCkuZGlkQ29sbGVjdFByZXdhcm1JbmZvcm1hdGlvbihkb21haW4sIHByZXdhcm1JbmZv
cm1hdGlvbik7Cit9CisKICNpZiBQTEFURk9STShXQVRDSE9TKQogCiB2b2lkIFdlYlByb2Nlc3NQ
cm94eTo6dGFrZUJhY2tncm91bmRBY3Rpdml0eVRva2VuRm9yRnVsbHNjcmVlbklucHV0KCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCShyZXZpc2lvbiAy
MzY5MTEpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAkod29y
a2luZyBjb3B5KQpAQCAtMzE0LDYgKzMxNCw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIGNhblRl
cm1pbmF0ZUNoaWxkUHJvY2VzcygpOwogCisgICAgdm9pZCBkaWRDb2xsZWN0UHJld2FybUluZm9y
bWF0aW9uKGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBXZWJDb3JlOjpQcmV3YXJtSW5mb3Jt
YXRpb24mKTsKKwogICAgIHZvaWQgbG9nRGlhZ25vc3RpY01lc3NhZ2VGb3JSZXNvdXJjZUxpbWl0
VGVybWluYXRpb24oY29uc3QgU3RyaW5nJiBsaW1pdEtleSk7CiAKICAgICBlbnVtIGNsYXNzIElz
V2VhayB7IE5vLCBZZXMgfTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDIzNjkxMSkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBj
b3B5KQpAQCAtNjQsNiArNjQsOCBAQCBtZXNzYWdlcyAtPiBXZWJQcm9jZXNzUHJveHkgTGVnYWN5
UmVjZWl2CiAgICAgRGlkRGVsaXZlck1lc3NhZ2VQb3J0TWVzc2FnZXModWludDY0X3QgbWVzc2Fn
ZUJhdGNoSWRlbnRpZmllcikKICAgICBEaWRDaGVja1Byb2Nlc3NMb2NhbFBvcnRGb3JBY3Rpdml0
eSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGJvb2wgaXNMb2NhbGx5UmVhY2hhYmxlKQog
CisgICAgRGlkQ29sbGVjdFByZXdhcm1JbmZvcm1hdGlvbihTdHJpbmcgZG9tYWluLCBzdHJ1Y3Qg
V2ViQ29yZTo6UHJld2FybUluZm9ybWF0aW9uIHByZXdhcm1JbmZvcm1hdGlvbikKKwogI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgIENhY2hlTWVkaWFNSU1FVHlwZXMoVmVjdG9yPFN0cmluZz4gdHlw
ZXMpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJ
KHJldmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIwLDkgKzQyMCwxNCBAQCB2b2lkIFdlYlByb2Nlc3M6
OmluaXRpYWxpemVXZWJQcm9jZXNzKFdlCiAgICAgUkVMRUFTRV9MT0coUHJvY2VzcywgIiVwIC0g
V2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3M6IFByZXNlbnRpbmcgcHJvY2VzcyA9ICVk
IiwgdGhpcywgV2ViQ29yZTo6cHJlc2VudGluZ0FwcGxpY2F0aW9uUElEKCkpOwogfQogCi12b2lk
IFdlYlByb2Nlc3M6OnByZXdhcm0oKQordm9pZCBXZWJQcm9jZXNzOjpwcmV3YXJtR2xvYmFsbHko
KQogewotICAgIFdlYkNvcmU6OlByb2Nlc3NXYXJtaW5nOjpwcmV3YXJtKCk7CisgICAgV2ViQ29y
ZTo6UHJvY2Vzc1dhcm1pbmc6OnByZXdhcm1HbG9iYWxseSgpOworfQorCit2b2lkIFdlYlByb2Nl
c3M6OnByZXdhcm1XaXRoRG9tYWluSW5mb3JtYXRpb24oY29uc3QgV2ViQ29yZTo6UHJld2FybUlu
Zm9ybWF0aW9uJiBwcmV3YXJtSW5mb3JtYXRpb24pCit7CisgICAgV2ViQ29yZTo6UHJvY2Vzc1dh
cm1pbmc6OnByZXdhcm1XaXRoSW5mb3JtYXRpb24ocHJld2FybUluZm9ybWF0aW9uKTsKIH0KIAog
dm9pZCBXZWJQcm9jZXNzOjpyZWdpc3RlclVSTFNjaGVtZUFzRW1wdHlEb2N1bWVudChjb25zdCBT
dHJpbmcmIHVybFNjaGVtZSkKQEAgLTE0NTksNiArMTQ2NCwxMyBAQCB2b2lkIFdlYlByb2Nlc3M6
OnByb2Nlc3NEaWRSZXN1bWUoKQogI2VuZGlmCiB9CiAKK3ZvaWQgV2ViUHJvY2Vzczo6c2VuZFBy
ZXdhcm1JbmZvcm1hdGlvbihjb25zdCBTdHJpbmcmIHJlZ2lzdHJhYmxlRG9tYWluKQoreworICAg
IGlmIChyZWdpc3RyYWJsZURvbWFpbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBw
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6
OkRpZENvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24ocmVnaXN0cmFibGVEb21haW4sIFdlYkNvcmU6
OlByb2Nlc3NXYXJtaW5nOjpjb2xsZWN0UHJld2FybUluZm9ybWF0aW9uKCkpLCAwKTsKK30KKwog
dm9pZCBXZWJQcm9jZXNzOjpwYWdlRGlkRW50ZXJXaW5kb3codWludDY0X3QgcGFnZUlEKQogewog
ICAgIG1fcGFnZXNJbldpbmRvd3MuYWRkKHBhZ2VJRCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmgJKHJldmlzaW9uIDIzNjkxMSkKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAgc3Ry
dWN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllcjsKIHN0cnVjdCBNZXNzYWdlV2l0aE1lc3NhZ2VQb3J0
czsKIHN0cnVjdCBNb2NrTWVkaWFEZXZpY2U7CiBzdHJ1Y3QgUGx1Z2luSW5mbzsKK3N0cnVjdCBQ
cmV3YXJtSW5mb3JtYXRpb247CiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOwogc3RydWN0IFNv
dXBOZXR3b3JrUHJveHlTZXR0aW5nczsKIApAQCAtMjAwLDYgKzIwMSw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGNhbmNlbFByZXBhcmVUb1N1c3BlbmQoKTsKICAgICB2b2lkIHByb2Nlc3NEaWRSZXN1
bWUoKTsKIAorICAgIHZvaWQgc2VuZFByZXdhcm1JbmZvcm1hdGlvbihjb25zdCBTdHJpbmcmIHJl
Z2lzdHJhYmxlRG9tYWluKTsKKwogI2lmIFBMQVRGT1JNKElPUykKICAgICB2b2lkIHJlc2V0QWxs
R2VvbG9jYXRpb25QZXJtaXNzaW9ucygpOwogI2VuZGlmCkBAIC0yNDUsNyArMjQ4LDggQEAgcHJp
dmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMmJik7CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJik7CiAKLSAgICB2b2lkIHByZXdhcm0oKTsKKyAgICB2
b2lkIHByZXdhcm1HbG9iYWxseSgpOworICAgIHZvaWQgcHJld2FybVdpdGhEb21haW5JbmZvcm1h
dGlvbihjb25zdCBXZWJDb3JlOjpQcmV3YXJtSW5mb3JtYXRpb24mKTsKIAogI2lmIFVTRShPU19T
VEFURSkKICAgICB2b2lkIHJlZ2lzdGVyV2l0aFN0YXRlRHVtcGVyKCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24g
MjM2OTExKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMu
aW4JKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDkgQEAgbWVzc2FnZXMgLT4gV2ViUHJvY2Vz
cyBMZWdhY3lSZWNlaXZlciB7CiAgICAgIyBDcmVhdGUgYSBuZXcgcGFnZS4KICAgICBDcmVhdGVX
ZWJQYWdlKHVpbnQ2NF90IG5ld1BhZ2VJRCwgc3RydWN0IFdlYktpdDo6V2ViUGFnZUNyZWF0aW9u
UGFyYW1ldGVycyBwYWdlQ3JlYXRpb25QYXJhbWV0ZXJzKQogCi0gICAgUHJld2FybSgpOwotIAor
ICAgIFByZXdhcm1HbG9iYWxseSgpOworICAgIFByZXdhcm1XaXRoRG9tYWluSW5mb3JtYXRpb24o
c3RydWN0IFdlYkNvcmU6OlByZXdhcm1JbmZvcm1hdGlvbiBwcmV3YXJtSW5mb3JtYXRpb24pCisK
ICAgICAjIEdsb2JhbCBwcmVmZXJlbmNlcy4KICAgICBTZXRDYWNoZU1vZGVsKHVpbnQzMl90IGNh
Y2hlTW9kZWwpCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCShyZXZpc2lvbiAyMzY5MTEpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3Myw5ICsxMTczLDEyIEBA
IHZvaWQgV2ViUGFnZTo6Y2xvc2UoKQogICAgIG1faXNDbG9zZWQgPSB0cnVlOwogCiAgICAgLy8g
SWYgdGhlcmUgaXMgc3RpbGwgbm8gVVJMLCB0aGVuIHdlIG5ldmVyIGxvYWRlZCBhbnl0aGluZyBp
biB0aGlzIHBhZ2UsIHNvIG5vdGhpbmcgdG8gcmVwb3J0LgotICAgIGlmICghbWFpbldlYkZyYW1l
KCktPnVybCgpLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1haW5XZWJGcmFtZSgpLT51cmwoKS5pc0Vt
cHR5KCkpIHsKICAgICAgICAgcmVwb3J0VXNlZEZlYXR1cmVzKCk7CiAKKyAgICAgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuc2VuZFByZXdhcm1JbmZvcm1hdGlvbih0b1JlZ2lzdHJhYmxlRG9t
YWluKG1haW5XZWJGcmFtZSgpLT51cmwoKSkpOworICAgIH0KKwogICAgIGlmIChwYWdlR3JvdXAo
KS0+aXNWaXNpYmxlVG9JbmplY3RlZEJ1bmRsZSgpICYmIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LmluamVjdGVkQnVuZGxlKCkpCiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVj
dGVkQnVuZGxlKCktPndpbGxEZXN0cm95UGFnZSh0aGlzKTsKIApAQCAtMjg3Myw2ICsyODc2LDgg
QEAgdm9pZCBXZWJQYWdlOjpkaWRSZWNlaXZlUG9saWN5RGVjaXNpb24odQogICAgIGlmIChwb2xp
Y3lBY3Rpb24gPT0gUG9saWN5QWN0aW9uOjpTdXNwZW5kKSB7CiAgICAgICAgIEFTU0VSVChmcmFt
ZSA9PSBtX21haW5GcmFtZSk7CiAgICAgICAgIHNldElzU3VzcGVuZGVkKHRydWUpOworCisgICAg
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnNlbmRQcmV3YXJtSW5mb3JtYXRpb24odG9SZWdp
c3RyYWJsZURvbWFpbihtYWluV2ViRnJhbWUoKS0+dXJsKCkpKTsKICAgICB9CiAgICAgZnJhbWUt
PmRpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbihsaXN0ZW5lcklELCBwb2xpY3lBY3Rpb24sIG5hdmln
YXRpb25JRCwgZG93bmxvYWRJRCwgV1RGTW92ZSh3ZWJzaXRlUG9saWNpZXMpKTsKIH0K
</data>
<flag name="review"
          id="369105"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351869</attachid>
            <date>2018-10-09 00:52:57 -0700</date>
            <delta_ts>2018-10-09 02:14:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>prewarm-font-domain-12.patch</filename>
            <type>text/plain</type>
            <size>26808</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNjk1OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDE4LTEwLTA5ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBQcmV3YXJtIEZvbnREYXRhYmFz
ZSBvbiBwcm9jZXNzIHN3YXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5MDMxMgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlzIER1bWV6LgorCisg
ICAgICAgIEltcGxlbWVudCBiYXNpYyBwcmV3YXJtaW5nIG9mIEZvbnREYXRhYmFzZS4gV2hlbiB0
aGUgZG9tYWluIG9mIHRoZSBmaXJzdCBwYWdlIGxvYWQgb24KKyAgICAgICAgYSBuZXcgcHJvY2Vz
cyBpcyBrbm93biB3ZSBwYXNzIHRoZSBsaXN0IG9mIGZvbnQgZmFtaWxpZXMgcHJldmlvdXMgdXNl
ZCBieSB0aGF0IGRvbWFpbiB0byB0aGUKKyAgICAgICAgcHJvY2Vzcy4gVGhpcyBpcyB1c2VkIHRv
IHByZXdhcm0gQ29yZVRleHQgZm9udCBkYXRhYmFzZS4gSW5pdGlhbGl6YXRpb24gKHdoaWNoIGlu
dm9sdmVzIGxvdHMgb2YKKyAgICAgICAgYmxvY2tpbmcgSVBDKSBoYXBwZW5zIG91dHNpZGUgdGhl
IG1haW4gdGhyZWFkIHNvIHRoZSBmb250cyBhcmUgcmVhZHkgdG8gdXNlIHdoZW4gbmVlZGVkLgor
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHBhZ2UvUHJld2FybUluZm9ybWF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UHJl
d2FybUluZm9ybWF0aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UHJld2Fy
bUluZm9ybWF0aW9uOjpkZWNvZGUpOgorCisgICAgICAgIEFkZCBkYXRhIHN0cnVjdHVyZSBmb3Ig
cHJld2FybSBpbmZvcm1hdGlvbiB3aXRoIGVuY29kZS9kZWNvZGUgc3VwcG9ydC4KKworICAgICAg
ICAqIHBhZ2UvUHJvY2Vzc1dhcm1pbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc1dh
cm1pbmc6OmNvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UHJv
Y2Vzc1dhcm1pbmc6OnByZXdhcm1XaXRoSW5mb3JtYXRpb24pOgorCisgICAgICAgIFByZXdhcm1p
bmcgaW50ZXJmYWNlIHRvIGJlIHVzZWQgZnJvbSBXZWJLaXQuCisKKyAgICAgICAgKiBwYWdlL1By
b2Nlc3NXYXJtaW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y29sbGVjdFByZXdhcm1JbmZvcm1hdGlv
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnByZXdhcm0pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnREYXRhYmFzZTo6Y29sbGVjdGlvbkZvckZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
RGF0YWJhc2U6OmZvbnRGb3JQb3N0U2NyaXB0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
RGF0YWJhc2U6OmNsZWFyKToKKworICAgICAgICBBZGQgbXV0ZXggZm9yIHRocmVhZCBzYWZlIGFj
Y2Vzcy4KKworICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1E
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y29sbGVjdFByZXdhcm1JbmZvcm1h
dGlvbiBjb25zdCk6CisKKyAgICAgICAgQ29sbGVjdCBmb250IGZhbWlsaWVzIHNlZW4gYnkgdGhp
cyBwcm9jZXNzLgorCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnByZXdhcm0pOgorCisg
ICAgICAgIFByZXdhcm0gRm9udERhdGFiYXNlIGluIGEgZGlzcGF0Y2ggcXVldWUuCisKIDIwMTgt
MTAtMDggIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAg
W0NvY29hXSBbV0syXSBBZGQgc3VwcG9ydCBmb3IgdGV4dCBhbGlnbm1lbnQgYW5kIHRleHQgbGlz
dHMgaW4gZm9udCBhdHRyaWJ1dGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzY5NTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTQ3NTksNiArNDc1OSw3IEBACiAJCUU0NEI0QkI0MTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxl
Y3RvckNoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0NEI0QkIyMTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCAqLzsgfTsK
IAkJRTQ0RkExODUxQkNBNkI1QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJlZUl0ZXJhdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDRGQTE4NDFCQ0E2
QjVBMDA5MUI2RUYgLyogQ29tcG9zZWRUcmVlSXRlcmF0b3IuaCAqLzsgfTsKIAkJRTQ1MzIyQUMx
NDBDRTI2NzAwNUEwRjkyIC8qIFNlbGVjdG9yUXVlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTMyMkFBMTQwQ0UyNjcwMDVBMEY5MiAvKiBTZWxl
Y3RvclF1ZXJ5LmggKi87IH07CisJCUU0NjA1RkVDMjE2NjQ4MDkwMEU1MzA0NiAvKiBQcmV3YXJt
SW5mb3JtYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0NjA1RkVBMjE2NjQ4MDgwMEU1MzA0NiAvKiBQcmV3YXJtSW5mb3JtYXRpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDYxODAyRDFD
OEREMjkwMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjE4MDJDMUM4REQyOTAwMDI2QzAyQyAvKiBTdHls
ZVJlbGF0aW9ucy5oICovOyB9OwogCQlFNDYxRDY1RjFCQjBDODBEMDBDQjU2NDUgLyogU3R5bGVT
Y29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ2
MUQ2NUUxQkIwQzgwRDAwQ0I1NjQ1IC8qIFN0eWxlU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNDYyQTRBMTExM0U3MUJFMDA0QTQyMjAg
LyogSW50UG9pbnRIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDYyQTRBMDExM0U3MUJFMDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0NTExLDYgKzE0
NTEyLDcgQEAKIAkJRTQ1MzkwMzQwRUFGRDYzNzAwMzY5NUM4IC8qIFNjcm9sbFZpZXdJT1MubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxWaWV3SU9TLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDUzOTAzQzBFQUZENjM3MDAzNjk1Qzgg
LyogV2lkZ2V0SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2lkZ2V0SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDUzOTBBRDBFQUZG
NEI1MDAzNjk1QzggLyogU3lzdGVtTWVtb3J5SU9TLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFN5c3RlbU1lbW9yeUlPUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUU0NjA1RkVBMjE2NjQ4MDgwMEU1MzA0NiAvKiBQcmV3YXJtSW5mb3JtYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJld2FybUluZm9ybWF0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NjE4MDJDMUM4REQyOTAwMDI2QzAyQyAv
KiBTdHlsZVJlbGF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHls
ZVJlbGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDYxODAyRTFDOERE
NEQyMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU3R5bGVSZWxhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNDYxRDY1QzFCQjBDN0YwMDBDQjU2NDUgLyogU3R5bGVTY29wZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZVNjb3BlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5Njg4LDYgKzE5NjkwLDcgQEAKIAkJCQk1Q0ZDNDM0RTE5
MjQwNkE5MDBBMEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9sbGVyLmNwcCAqLywKIAkJCQk1Q0ZD
NDM0RjE5MjQwNkE5MDBBMEQzQjUgLyogUG9pbnRlckxvY2tDb250cm9sbGVyLmggKi8sCiAJCQkJ
Mzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi8sCisJ
CQkJRTQ2MDVGRUEyMTY2NDgwODAwRTUzMDQ2IC8qIFByZXdhcm1JbmZvcm1hdGlvbi5oICovLAog
CQkJCUI3NzZENDNDMTEwNDUyNzUwMEJFQjBFQyAvKiBQcmludENvbnRleHQuY3BwICovLAogCQkJ
CUI3NzZENDNBMTEwNDUyNUQwMEJFQjBFQyAvKiBQcmludENvbnRleHQuaCAqLywKIAkJCQlFNDIw
NTAxNjIxNDE5MDFCMDA2NkVGM0IgLyogUHJvY2Vzc1dhcm1pbmcuY3BwICovLApAQCAtMjc3MzAs
NiArMjc3MzMsNyBAQAogCQkJCUNFNzk5Rjk4MUM2QTQ2QkMwMDk3QjUxOCAvKiBDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2VMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTc5OUZBQzFDNkE1
MDY2MDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDFEMDE1Q0EwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRU
eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNDYwNUZFQzIxNjY0ODA5MDBFNTMwNDYgLyogUHJl
d2FybUluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzYyN0I4RTE0RkIzQ0VFMDAy
Q0RDQTEgLyogQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzQjZBMEU2MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250ZXh0TWVudS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDY1QUQ0RjUwQjBDMkVEQTAwNUEyQjFEIC8qIENvbnRleHRNZW51Q2xpZW50LmggaW4g
SGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJld2FybUluZm9ybWF0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QcmV3YXJtSW5mb3JtYXRpb24u
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByZXdhcm1JbmZvcm1hdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdHJ1Y3QgV0VCQ09SRV9FWFBPUlQgUHJld2FybUluZm9ybWF0aW9uIHsKKyAgICBGb250UHJl
d2FybUluZm9ybWF0aW9uIGZvbnQ7CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lk
IGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8UHJld2FybUluZm9ybWF0aW9uPiBkZWNvZGUoRGVjb2RlciYpOwor
fTsKKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgUHJld2FybUluZm9ybWF0aW9uOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IGZvbnQ7Cit9
CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitzdGQ6Om9wdGlvbmFsPFByZXdhcm1JbmZvcm1h
dGlvbj4gUHJld2FybUluZm9ybWF0aW9uOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBQcmV3YXJtSW5mb3JtYXRpb24gcHJld2FybUluZm87CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShwcmV3YXJtSW5mby5mb250KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBw
cmV3YXJtSW5mbzsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Qcm9jZXNzV2Fy
bWluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Qcm9jZXNzV2FybWlu
Zy5jcHAJKHJldmlzaW9uIDIzNjk1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJvY2Vzc1dh
cm1pbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgUHJvY2Vzc1dh
cm1pbmc6OmluaXRpYWxpemVOYW1lcygpCiAgICAgV2ViS2l0Rm9udEZhbWlseU5hbWVzOjppbml0
KCk7CiB9CiAgICAgCi12b2lkIFByb2Nlc3NXYXJtaW5nOjpwcmV3YXJtKCkKK3ZvaWQgUHJvY2Vz
c1dhcm1pbmc6OnByZXdhcm1HbG9iYWxseSgpCiB7CiAgICAgaW5pdGlhbGl6ZU5hbWVzKCk7CiAg
ICAgCkBAIC03Niw0ICs3NiwxNiBAQCB2b2lkIFByb2Nlc3NXYXJtaW5nOjpwcmV3YXJtKCkKICNl
bmRpZgogfQogCitXZWJDb3JlOjpQcmV3YXJtSW5mb3JtYXRpb24gUHJvY2Vzc1dhcm1pbmc6OmNv
bGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oKQoreworICAgIFByZXdhcm1JbmZvcm1hdGlvbiBpbmZv
OworICAgIGluZm8uZm9udCA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuY29sbGVjdFByZXdhcm1J
bmZvcm1hdGlvbigpOworICAgIHJldHVybiBpbmZvOworfQorCit2b2lkIFByb2Nlc3NXYXJtaW5n
OjpwcmV3YXJtV2l0aEluZm9ybWF0aW9uKGNvbnN0IFByZXdhcm1JbmZvcm1hdGlvbiYgcHJld2Fy
bUluZm8pCit7CisgICAgRm9udENhY2hlOjpzaW5nbGV0b24oKS5wcmV3YXJtKHByZXdhcm1JbmZv
LmZvbnQpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Byb2Nlc3NXYXJtaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Qcm9jZXNzV2FybWluZy5oCShy
ZXZpc2lvbiAyMzY5NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Byb2Nlc3NXYXJtaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDEyICsyNSwxNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIlByZXdhcm1JbmZvcm1hdGlvbi5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFdFQkNPUkVfRVhQT1JUIFByb2Nlc3NXYXJtaW5nIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
dm9pZCBpbml0aWFsaXplTmFtZXMoKTsKLSAgICBzdGF0aWMgdm9pZCBwcmV3YXJtKCk7CisgICAg
c3RhdGljIHZvaWQgcHJld2FybUdsb2JhbGx5KCk7CisKKyAgICBzdGF0aWMgUHJld2FybUluZm9y
bWF0aW9uIGNvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oKTsKKyAgICBzdGF0aWMgdm9pZCBwcmV3
YXJtV2l0aEluZm9ybWF0aW9uKGNvbnN0IFByZXdhcm1JbmZvcm1hdGlvbiYpOwogfTsKIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3Bw
CShyZXZpc2lvbiAyMzY5NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODIsNiArNDgyLDE2IEBAIHZvaWQgRm9u
dENhY2hlOjppbnZhbGlkYXRlKCkKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKKworRm9udFBy
ZXdhcm1JbmZvcm1hdGlvbiBGb250Q2FjaGU6OmNvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oKSBj
b25zdAoreworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgRm9udENhY2hlOjpwcmV3YXJtKGNv
bnN0IEZvbnRQcmV3YXJtSW5mb3JtYXRpb24mKQoreworfQorCiBSZWZQdHI8Rm9udD4gRm9udENh
Y2hlOjpzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJp
bmcmKQogewogICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHJldmlzaW9uIDIzNjk1OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTY3LDYgKzY4LDggQEAgdHlwZWRlZiBJTUxhbmdGb250
TGluayBJTUxhbmdGb250TGlua1R5cAogI2VuZGlmCiAjZW5kaWYKIAordXNpbmcgRm9udFByZXdh
cm1JbmZvcm1hdGlvbiA9IFZlY3RvcjxTdHJpbmc+OworCiAvLyBUaGlzIGtleSBjb250YWlucyB0
aGUgRm9udERlc2NyaXB0aW9uIGZpZWxkcyBvdGhlciB0aGFuIGZhbWlseSB0aGF0IG1hdHRlciB3
aGVuIGZldGNoaW5nIEZvbnREYXRhcyAocGxhdGZvcm0gZm9udHMpLgogc3RydWN0IEZvbnREZXNj
cmlwdGlvbktleSB7CiAgICAgRm9udERlc2NyaXB0aW9uS2V5KCkgPSBkZWZhdWx0OwpAQCAtMjM1
LDYgKzIzOCw5IEBAIHB1YmxpYzoKICAgICBib29sIHNob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZv
ckFjY2Vzc2liaWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE1vY2tCb2xkU3lzdGVtRm9u
dEZvckFjY2Vzc2liaWxpdHk7IH0KICAgICB2b2lkIHNldFNob3VsZE1vY2tCb2xkU3lzdGVtRm9u
dEZvckFjY2Vzc2liaWxpdHkoYm9vbCBzaG91bGRNb2NrQm9sZFN5c3RlbUZvbnRGb3JBY2Nlc3Np
YmlsaXR5KSB7IG1fc2hvdWxkTW9ja0JvbGRTeXN0ZW1Gb250Rm9yQWNjZXNzaWJpbGl0eSA9IHNo
b3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFjY2Vzc2liaWxpdHk7IH0KIAorICAgIEZvbnRQcmV3
YXJtSW5mb3JtYXRpb24gY29sbGVjdFByZXdhcm1JbmZvcm1hdGlvbigpIGNvbnN0OworICAgIHZv
aWQgcHJld2FybShjb25zdCBGb250UHJld2FybUluZm9ybWF0aW9uJik7CisKIHByaXZhdGU6CiAg
ICAgRm9udENhY2hlKCk7CiAgICAgfkZvbnRDYWNoZSgpID0gZGVsZXRlOwpAQCAtMjU4LDYgKzI2
NCw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZE1vY2tCb2xkU3lzdGVtRm9udEZvckFj
Y2Vzc2liaWxpdHkgeyBmYWxzZSB9OwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgSGFzaFNl
dDxTdHJpbmc+IG1fc2VlbkZhbWlsaWVzRm9yUHJld2FybWluZzsKKyAgICBSZWZQdHI8V29ya1F1
ZXVlPiBtX3ByZXdhcm1RdWV1ZTsKKwogICAgIGZyaWVuZCBjbGFzcyBDb21wbGV4VGV4dENvbnRy
b2xsZXI7CiAjZW5kaWYKICAgICBmcmllbmQgY2xhc3MgRm9udDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVD
b3JlVGV4dC5jcHAJKHJldmlzaW9uIDIzNjk1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODg3LDYgKzg4Nyw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEluc3RhbGxlZEZvbnRGYW1pbHkm
IGNvbGxlY3Rpb25Gb3JGYW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKQogICAgIHsKKyAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2tlcihtX2Rlc2NyaXB0b3JNYXBMb2NrKTsK
KwogICAgICAgICBhdXRvIGZvbGRlZCA9IGZhbWlseU5hbWUuZm9sZENhc2UoKTsKICAgICAgICAg
cmV0dXJuIG1fZmFtaWx5TmFtZVRvRm9udERlc2NyaXB0b3JzLmVuc3VyZShmb2xkZWQsIFsmXSB7
CiAgICAgICAgICAgICBhdXRvIGZhbWlseU5hbWVTdHJpbmcgPSBmb2xkZWQuY3JlYXRlQ0ZTdHJp
bmcoKTsKQEAgLTkxMSw2ICs5MTMsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBJbnN0YWxsZWRG
b250JiBmb250Rm9yUG9zdFNjcmlwdE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwb3N0U2NyaXB0
TmFtZSkKICAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrZXIobV9kZXNj
cmlwdG9yTWFwTG9jayk7CisKICAgICAgICAgY29uc3QgYXV0byYgZm9sZGVkID0gRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6Zm9sZGVkRmFtaWx5TmFtZShwb3N0U2NyaXB0TmFtZSk7CiAgICAgICAg
IHJldHVybiBtX3Bvc3RTY3JpcHROYW1lVG9Gb250RGVzY3JpcHRvcnMuZW5zdXJlKGZvbGRlZCwg
WyZdIHsKICAgICAgICAgICAgIGF1dG8gcG9zdFNjcmlwdE5hbWVTdHJpbmcgPSBmb2xkZWQuY3Jl
YXRlQ0ZTdHJpbmcoKTsKQEAgLTkzMiw2ICs5MzYsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNs
ZWFyKCkKICAgICB7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrZXIobV9kZXNj
cmlwdG9yTWFwTG9jayk7CisKICAgICAgICAgbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnMu
Y2xlYXIoKTsKICAgICAgICAgbV9wb3N0U2NyaXB0TmFtZVRvRm9udERlc2NyaXB0b3JzLmNsZWFy
KCk7CiAgICAgfQpAQCAtOTQ0LDYgKzk1MCw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAor
ICAgIExvY2sgbV9kZXNjcmlwdG9yTWFwTG9jazsKICAgICBIYXNoTWFwPFN0cmluZywgSW5zdGFs
bGVkRm9udEZhbWlseT4gbV9mYW1pbHlOYW1lVG9Gb250RGVzY3JpcHRvcnM7CiAgICAgSGFzaE1h
cDxTdHJpbmcsIEluc3RhbGxlZEZvbnQ+IG1fcG9zdFNjcmlwdE5hbWVUb0ZvbnREZXNjcmlwdG9y
czsKICAgICBBbGxvd1VzZXJJbnN0YWxsZWRGb250cyBtX2FsbG93VXNlckluc3RhbGxlZEZvbnRz
OwpAQCAtMTI2NCw2ICsxMjcxLDkgQEAgc3RkOjp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+
IEZvbnRDYQogICAgIGlmICghZm9udCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKKyAgICBp
ZiAoZm9udERlc2NyaXB0aW9uLnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKCkgPT0gQWxs
b3dVc2VySW5zdGFsbGVkRm9udHM6Ok5vKQorICAgICAgICBtX3NlZW5GYW1pbGllc0ZvclByZXdh
cm1pbmcuYWRkKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmZvbGRlZEZhbWlseU5hbWUoZmFtaWx5
KSk7CisKICAgICBib29sIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY09ibGlxdWU7CiAgICAgc3Rk
Ojp0aWUoc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSkgPSBjb21wdXRlTmVjZXNzYXJ5
U3ludGhlc2lzKGZvbnQuZ2V0KCksIGZvbnREZXNjcmlwdGlvbikuYm9sZE9ibGlxdWVQYWlyKCk7
CiAKQEAgLTE1MDIsNCArMTUxMiwyOSBAQCBSZWY8Rm9udD4gRm9udENhY2hlOjpsYXN0UmVzb3J0
RmFsbGJhY2tGCiAgICAgcmV0dXJuIGZvbnRGb3JQbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKTsK
IH0KIAorRm9udFByZXdhcm1JbmZvcm1hdGlvbiBGb250Q2FjaGU6OmNvbGxlY3RQcmV3YXJtSW5m
b3JtYXRpb24oKSBjb25zdAoreworICAgIEZvbnRQcmV3YXJtSW5mb3JtYXRpb24gZm9udFByZXdh
cm1JbmZvcm1hdGlvbjsKKyAgICBmb250UHJld2FybUluZm9ybWF0aW9uID0gY29weVRvVmVjdG9y
KG1fc2VlbkZhbWlsaWVzRm9yUHJld2FybWluZyk7CisgICAgcmV0dXJuIGZvbnRQcmV3YXJtSW5m
b3JtYXRpb247Cit9CisKK3ZvaWQgRm9udENhY2hlOjpwcmV3YXJtKGNvbnN0IEZvbnRQcmV3YXJt
SW5mb3JtYXRpb24mIGZvbnRQcmV3YXJtSW5mb3JtYXRpb24pCit7CisgICAgYXV0byYgZmFtaWxp
ZXMgPSBmb250UHJld2FybUluZm9ybWF0aW9uOworCisgICAgaWYgKGZhbWlsaWVzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3ByZXdhcm1RdWV1ZSkKKyAgICAgICAg
bV9wcmV3YXJtUXVldWUgPSBXb3JrUXVldWU6OmNyZWF0ZSgiV2ViS2l0IGZvbnQgcHJld2FybSBx
dWV1ZSIpOworCisgICAgYXV0byYgZGF0YWJhc2UgPSBGb250RGF0YWJhc2U6OnNpbmdsZXRvbkRp
c2FsbG93aW5nVXNlckluc3RhbGxlZEZvbnRzKCk7CisKKyAgICBtX3ByZXdhcm1RdWV1ZS0+ZGlz
cGF0Y2goWyZkYXRhYmFzZSwgZmFtaWxpZXMgPSBmYW1pbGllcy5pc29sYXRlZENvcHkoKV0gewor
ICAgICAgICBmb3IgKGF1dG8mIGZhbWlseSA6IGZhbWlsaWVzKQorICAgICAgICAgICAgZGF0YWJh
c2UuY29sbGVjdGlvbkZvckZhbWlseShmYW1pbHkpOworICAgIH0pOworfQorCiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwkocmV2aXNpb24gMjM2OTU4KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw0NCBAQAorMjAxOC0xMC0wOSAgQW50dGkgS29pdmlzdG8gIDxh
bnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUHJld2FybSBGb250RGF0YWJhc2Ugb24gcHJvY2Vz
cyBzd2FwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTAzMTIKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICBBZGQg
bWVjaGFuaXNtIGZvciBjYWNoaW5nIHByZXdhcm0gaW5mb3JtYXRpb24gcGVyIGRvbWFpbiBvbiBV
SSBwcm9jZXNzIHNpZGUuIFRoaXMgaW5mb3JtYXRpb24KKyAgICAgICAgaXMgdGhlbiBwYXNzZWQg
dG8gbmV3bHkgaW5pdGlhbGl6ZWQgd2ViIHByb2Nlc3NlcyB0aGF0IGFyZSBiZWluZyB1c2VkIGZv
ciB0aGUgc2FtZSBkb21haW4uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NGb3JOYXZpZ2F0aW9uSW50ZXJuYWwpOgorCisgICAg
ICAgIFBhc3MgcHJld2FybSBpbmZvcm1hdGlvbiBvbiBwcm9jZXNzIHN3YXAgdG8gdGhlIG5ldyBw
cm9jZXNzLgorCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpkaWRDb2xsZWN0UHJl
d2FybUluZm9ybWF0aW9uKToKKworICAgICAgICBVSSBwcm9jZXNzIHNpZGUgY2FjaGUuCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Byb3h5Ojpk
aWRDb2xsZWN0UHJld2FybUluZm9ybWF0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlk
UmVjZWl2ZVBvbGljeURlY2lzaW9uKToKKworICAgICAgICBDb2xsZWN0IGFuZCBjYWNoZSBwcmV3
YXJtIGluZm9ybWF0aW9uIGZvciB0aGUgcHJldmlvdXMgcHJvY2VzcyBvbiBwcm9jZXNzIHN3YXAu
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcm9jZXNzOjpwcmV3YXJtR2xvYmFsbHkpOgorCisgICAgICAgIFJlbmFtZWQgZm9yIGNs
YXJpdHkuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cHJld2FybVdpdGhEb21haW5J
bmZvcm1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnNlbmRQcmV3YXJtSW5m
b3JtYXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKwogMjAxOC0xMC0wOCAgV2Vuc29u
IEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIFtXSzJd
IEFkZCBzdXBwb3J0IGZvciB0ZXh0IGFsaWdubWVudCBhbmQgdGV4dCBsaXN0cyBpbiBmb250IGF0
dHJpYnV0ZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZp
c2lvbiAyMzY5NTgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAko
d29ya2luZyBjb3B5KQpAQCAtMTkwLDYgKzE5MCw3IEBAIHN0cnVjdCBFeGNlcHRpb25EZXRhaWxz
Owogc3RydWN0IEZpbGVDaG9vc2VyU2V0dGluZ3M7CiBzdHJ1Y3QgR2xvYmFsV2luZG93SWRlbnRp
ZmllcjsKIHN0cnVjdCBNZWRpYVN0cmVhbVJlcXVlc3Q7CitzdHJ1Y3QgUHJld2FybUluZm9ybWF0
aW9uOwogc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKIHN0cnVjdCBTaGFyZURhdGE7CiBzdHJ1
Y3QgVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQb29sLmNwcAkocmV2aXNpb24gMjM2OTU4KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4
NSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNz
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzV2FybWluZy5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9VUkxQYXJzZXIuaD4KICNp
bmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CkBAIC03MzYsNyArNzM3LDcgQEAgV2ViUHJvY2Vzc1By
b3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlTgogICAgICAgICBBU1NFUlQoIW1fcHJld2FybWVk
UHJvY2Vzcyk7CiAgICAgICAgIG1fcHJld2FybWVkUHJvY2VzcyA9ICZwcm9jZXNzOwogICAgICAg
ICAKLSAgICAgICAgbV9wcmV3YXJtZWRQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpQcmV3YXJtKCksIDApOworICAgICAgICBtX3ByZXdhcm1lZFByb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OlByZXdhcm1HbG9iYWxseSgpLCAwKTsKICAgICB9CiAKICAgICBpZiAo
bV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzVGVybWluYXRpb25UaW1lci5pc0FjdGl2ZSgpKQpAQCAt
MjE3Myw4ICsyMTc0LDE0IEBAIFJlZjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29sOjpw
cm8KICAgICB9CiAKICAgICBhY3Rpb24gPSBQb2xpY3lBY3Rpb246OlN1c3BlbmQ7Ci0gICAgaWYg
KFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IHByb2Nlc3MgPSB0cnlUYWtlUHJld2FybWVkUHJvY2Vz
cyhwYWdlLndlYnNpdGVEYXRhU3RvcmUoKSkpCisKKyAgICBpZiAoUmVmUHRyPFdlYlByb2Nlc3NQ
cm94eT4gcHJvY2VzcyA9IHRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKHBhZ2Uud2Vic2l0ZURhdGFT
dG9yZSgpKSkgeworICAgICAgICBpZiAoYXV0byogcHJld2FybUluZm9ybWF0aW9uID0gbV9wcmV3
YXJtSW5mb3JtYXRpb25QZXJSZWdpc3RyYWJsZURvbWFpbi5nZXQodG9SZWdpc3RyYWJsZURvbWFp
bih0YXJnZXRVUkwpKSkKKyAgICAgICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlByZXdhcm1XaXRoRG9tYWluSW5mb3JtYXRpb24oKnByZXdhcm1JbmZvcm1hdGlvbiks
IDApOworCiAgICAgICAgIHJldHVybiBwcm9jZXNzLnJlbGVhc2VOb25OdWxsKCk7CisgICAgfQor
CiAgICAgcmV0dXJuIGNyZWF0ZU5ld1dlYlByb2Nlc3MocGFnZS53ZWJzaXRlRGF0YVN0b3JlKCkp
OwogfQogCkBAIC0yMjQ4LDQgKzIyNTUsMTcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZERp
c3BsYXlDb25maWd1cgogI2VuZGlmCiB9CiAKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZENvbGxl
Y3RQcmV3YXJtSW5mb3JtYXRpb24oY29uc3QgU3RyaW5nJiByZWdpc3RyYWJsZURvbWFpbiwgY29u
c3QgV2ViQ29yZTo6UHJld2FybUluZm9ybWF0aW9uJiBwcmV3YXJtSW5mb3JtYXRpb24pCit7Cisg
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhpbXVtU2l6ZVRvUHJldmVudFVubGltaXRlZEdyb3d0
aCA9IDEwMDsKKyAgICBpZiAobV9wcmV3YXJtSW5mb3JtYXRpb25QZXJSZWdpc3RyYWJsZURvbWFp
bi5zaXplKCkgPT0gbWF4aW11bVNpemVUb1ByZXZlbnRVbmxpbWl0ZWRHcm93dGgpCisgICAgICAg
IG1fcHJld2FybUluZm9ybWF0aW9uUGVyUmVnaXN0cmFibGVEb21haW4ucmVtb3ZlKG1fcHJld2Fy
bUluZm9ybWF0aW9uUGVyUmVnaXN0cmFibGVEb21haW4uYmVnaW4oKSk7CisKKyAgICBhdXRvJiB2
YWx1ZSA9IG1fcHJld2FybUluZm9ybWF0aW9uUGVyUmVnaXN0cmFibGVEb21haW4uZW5zdXJlKHJl
Z2lzdHJhYmxlRG9tYWluLCBbXSB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFdl
YkNvcmU6OlByZXdhcm1JbmZvcm1hdGlvbj4oKTsKKyAgICB9KS5pdGVyYXRvci0+dmFsdWU7CisK
KyAgICAqdmFsdWUgPSBwcmV3YXJtSW5mb3JtYXRpb247Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCShyZXZp
c2lvbiAyMzY5NTgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NDQsNiArNDQ0LDggQEAgcHVibGljOgogICAgIHZvaWQgdW5y
ZWdpc3RlclN1c3BlbmRlZFBhZ2VQcm94eShTdXNwZW5kZWRQYWdlUHJveHkmKTsKICAgICB2b2lk
IGRpZFJlYWNoR29vZFRpbWVUb1ByZXdhcm0oKTsKIAorICAgIHZvaWQgZGlkQ29sbGVjdFByZXdh
cm1JbmZvcm1hdGlvbihjb25zdCBTdHJpbmcmIHJlZ2lzdHJhYmxlRG9tYWluLCBjb25zdCBXZWJD
b3JlOjpQcmV3YXJtSW5mb3JtYXRpb24mKTsKKwogICAgIHZvaWQgc2NyZWVuUHJvcGVydGllc1N0
YXRlQ2hhbmdlZCgpOwogCiAgICAgdm9pZCBhZGRNb2NrTWVkaWFEZXZpY2UoY29uc3QgV2ViQ29y
ZTo6TW9ja01lZGlhRGV2aWNlJik7CkBAIC02OTYsNiArNjk4LDggQEAgcHJpdmF0ZToKIAogICAg
IEhhc2hNYXA8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhLCBWZWN0b3I8U3VzcGVuZGVkUGFn
ZVByb3h5Kj4+IG1fc3VzcGVuZGVkUGFnZXM7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxX
ZWJQcm9jZXNzUHJveHk+PiBtX3N3YXBwZWRQcm9jZXNzZXNQZXJSZWdpc3RyYWJsZURvbWFpbjsK
KworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UHJld2FybUlu
Zm9ybWF0aW9uPj4gbV9wcmV3YXJtSW5mb3JtYXRpb25QZXJSZWdpc3RyYWJsZURvbWFpbjsKIH07
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDIzNjk1OCkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUz
LDcgQEAKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhRmV0
Y2hPcHRpb24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUHJld2FybUluZm9ybWF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9QdWJsaWNTdWZmaXguaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N1ZGRlblRlcm1pbmF0aW9uLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4KQEAgLTE0MzMsNiArMTQzNCwxMSBAQCB2b2lkIFdl
YlByb2Nlc3NQcm94eTo6ZGlkQ2hlY2tQcm9jZXNzTG9jCiAgICAgY2FsbGJhY2soaXNMb2NhbGx5
UmVhY2hhYmxlID8gTWVzc2FnZVBvcnRDaGFubmVsUHJvdmlkZXI6Okhhc0FjdGl2aXR5OjpZZXMg
OiBNZXNzYWdlUG9ydENoYW5uZWxQcm92aWRlcjo6SGFzQWN0aXZpdHk6Ok5vKTsKIH0KIAordm9p
ZCBXZWJQcm9jZXNzUHJveHk6OmRpZENvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24oY29uc3QgU3Ry
aW5nJiBkb21haW4sIGNvbnN0IFdlYkNvcmU6OlByZXdhcm1JbmZvcm1hdGlvbiYgcHJld2FybUlu
Zm9ybWF0aW9uKQoreworICAgIHByb2Nlc3NQb29sKCkuZGlkQ29sbGVjdFByZXdhcm1JbmZvcm1h
dGlvbihkb21haW4sIHByZXdhcm1JbmZvcm1hdGlvbik7Cit9CisKICNpZiBQTEFURk9STShXQVRD
SE9TKQogCiB2b2lkIFdlYlByb2Nlc3NQcm94eTo6dGFrZUJhY2tncm91bmRBY3Rpdml0eVRva2Vu
Rm9yRnVsbHNjcmVlbklucHV0KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQcm94eS5oCShyZXZpc2lvbiAyMzY5NTgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzE0LDYgKzMxNCw4IEBAIHBy
aXZhdGU6CiAKICAgICBib29sIGNhblRlcm1pbmF0ZUNoaWxkUHJvY2VzcygpOwogCisgICAgdm9p
ZCBkaWRDb2xsZWN0UHJld2FybUluZm9ybWF0aW9uKGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25z
dCBXZWJDb3JlOjpQcmV3YXJtSW5mb3JtYXRpb24mKTsKKwogICAgIHZvaWQgbG9nRGlhZ25vc3Rp
Y01lc3NhZ2VGb3JSZXNvdXJjZUxpbWl0VGVybWluYXRpb24oY29uc3QgU3RyaW5nJiBsaW1pdEtl
eSk7CiAKICAgICBlbnVtIGNsYXNzIElzV2VhayB7IE5vLCBZZXMgfTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4JKHJl
dmlzaW9uIDIzNjk1OCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBAQCBtZXNzYWdlcyAt
PiBXZWJQcm9jZXNzUHJveHkgTGVnYWN5UmVjZWl2CiAgICAgRGlkRGVsaXZlck1lc3NhZ2VQb3J0
TWVzc2FnZXModWludDY0X3QgbWVzc2FnZUJhdGNoSWRlbnRpZmllcikKICAgICBEaWRDaGVja1By
b2Nlc3NMb2NhbFBvcnRGb3JBY3Rpdml0eSh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIsIGJv
b2wgaXNMb2NhbGx5UmVhY2hhYmxlKQogCisgICAgRGlkQ29sbGVjdFByZXdhcm1JbmZvcm1hdGlv
bihTdHJpbmcgZG9tYWluLCBzdHJ1Y3QgV2ViQ29yZTo6UHJld2FybUluZm9ybWF0aW9uIHByZXdh
cm1JbmZvcm1hdGlvbikKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIENhY2hlTWVkaWFNSU1F
VHlwZXMoVmVjdG9yPFN0cmluZz4gdHlwZXMpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDIzNjk1OCkKKysrIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIwLDkgKzQy
MCwxNCBAQCB2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKFdlCiAgICAgUkVM
RUFTRV9MT0coUHJvY2VzcywgIiVwIC0gV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3M6
IFByZXNlbnRpbmcgcHJvY2VzcyA9ICVkIiwgdGhpcywgV2ViQ29yZTo6cHJlc2VudGluZ0FwcGxp
Y2F0aW9uUElEKCkpOwogfQogCi12b2lkIFdlYlByb2Nlc3M6OnByZXdhcm0oKQordm9pZCBXZWJQ
cm9jZXNzOjpwcmV3YXJtR2xvYmFsbHkoKQogewotICAgIFdlYkNvcmU6OlByb2Nlc3NXYXJtaW5n
OjpwcmV3YXJtKCk7CisgICAgV2ViQ29yZTo6UHJvY2Vzc1dhcm1pbmc6OnByZXdhcm1HbG9iYWxs
eSgpOworfQorCit2b2lkIFdlYlByb2Nlc3M6OnByZXdhcm1XaXRoRG9tYWluSW5mb3JtYXRpb24o
Y29uc3QgV2ViQ29yZTo6UHJld2FybUluZm9ybWF0aW9uJiBwcmV3YXJtSW5mb3JtYXRpb24pCit7
CisgICAgV2ViQ29yZTo6UHJvY2Vzc1dhcm1pbmc6OnByZXdhcm1XaXRoSW5mb3JtYXRpb24ocHJl
d2FybUluZm9ybWF0aW9uKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzOjpyZWdpc3RlclVSTFNjaGVt
ZUFzRW1wdHlEb2N1bWVudChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKQEAgLTE0NTksNiArMTQ2
NCwxMyBAQCB2b2lkIFdlYlByb2Nlc3M6OnByb2Nlc3NEaWRSZXN1bWUoKQogI2VuZGlmCiB9CiAK
K3ZvaWQgV2ViUHJvY2Vzczo6c2VuZFByZXdhcm1JbmZvcm1hdGlvbihjb25zdCBTdHJpbmcmIHJl
Z2lzdHJhYmxlRG9tYWluKQoreworICAgIGlmIChyZWdpc3RyYWJsZURvbWFpbi5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKyAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkRpZENvbGxlY3RQcmV3YXJtSW5mb3JtYXRpb24ocmVn
aXN0cmFibGVEb21haW4sIFdlYkNvcmU6OlByb2Nlc3NXYXJtaW5nOjpjb2xsZWN0UHJld2FybUlu
Zm9ybWF0aW9uKCkpLCAwKTsKK30KKwogdm9pZCBXZWJQcm9jZXNzOjpwYWdlRGlkRW50ZXJXaW5k
b3codWludDY0X3QgcGFnZUlEKQogewogICAgIG1fcGFnZXNJbldpbmRvd3MuYWRkKHBhZ2VJRCk7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHJldmlzaW9uIDIzNjk1
OCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcxLDYgKzcxLDcgQEAgc3RydWN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllcjsKIHN0cnVj
dCBNZXNzYWdlV2l0aE1lc3NhZ2VQb3J0czsKIHN0cnVjdCBNb2NrTWVkaWFEZXZpY2U7CiBzdHJ1
Y3QgUGx1Z2luSW5mbzsKK3N0cnVjdCBQcmV3YXJtSW5mb3JtYXRpb247CiBzdHJ1Y3QgU2VjdXJp
dHlPcmlnaW5EYXRhOwogc3RydWN0IFNvdXBOZXR3b3JrUHJveHlTZXR0aW5nczsKIApAQCAtMjAw
LDYgKzIwMSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbmNlbFByZXBhcmVUb1N1c3BlbmQoKTsK
ICAgICB2b2lkIHByb2Nlc3NEaWRSZXN1bWUoKTsKIAorICAgIHZvaWQgc2VuZFByZXdhcm1JbmZv
cm1hdGlvbihjb25zdCBTdHJpbmcmIHJlZ2lzdHJhYmxlRG9tYWluKTsKKwogI2lmIFBMQVRGT1JN
KElPUykKICAgICB2b2lkIHJlc2V0QWxsR2VvbG9jYXRpb25QZXJtaXNzaW9ucygpOwogI2VuZGlm
CkBAIC0yNDUsNyArMjQ4LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVXZWJQcm9j
ZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJik7CiAgICAgdm9pZCBwbGF0Zm9ybUlu
aXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJik7CiAKLSAg
ICB2b2lkIHByZXdhcm0oKTsKKyAgICB2b2lkIHByZXdhcm1HbG9iYWxseSgpOworICAgIHZvaWQg
cHJld2FybVdpdGhEb21haW5JbmZvcm1hdGlvbihjb25zdCBXZWJDb3JlOjpQcmV3YXJtSW5mb3Jt
YXRpb24mKTsKIAogI2lmIFVTRShPU19TVEFURSkKICAgICB2b2lkIHJlZ2lzdGVyV2l0aFN0YXRl
RHVtcGVyKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5tZXNz
YWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjM2OTU4KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDkg
QEAgbWVzc2FnZXMgLT4gV2ViUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAgIyBDcmVhdGUg
YSBuZXcgcGFnZS4KICAgICBDcmVhdGVXZWJQYWdlKHVpbnQ2NF90IG5ld1BhZ2VJRCwgc3RydWN0
IFdlYktpdDo6V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyBwYWdlQ3JlYXRpb25QYXJhbWV0ZXJz
KQogCi0gICAgUHJld2FybSgpOwotIAorICAgIFByZXdhcm1HbG9iYWxseSgpOworICAgIFByZXdh
cm1XaXRoRG9tYWluSW5mb3JtYXRpb24oc3RydWN0IFdlYkNvcmU6OlByZXdhcm1JbmZvcm1hdGlv
biBwcmV3YXJtSW5mb3JtYXRpb24pCisKICAgICAjIEdsb2JhbCBwcmVmZXJlbmNlcy4KICAgICBT
ZXRDYWNoZU1vZGVsKHVpbnQzMl90IGNhY2hlTW9kZWwpCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyMzY5NTgpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE3Myw5ICsxMTczLDEyIEBAIHZvaWQgV2ViUGFnZTo6Y2xvc2UoKQogICAgIG1faXND
bG9zZWQgPSB0cnVlOwogCiAgICAgLy8gSWYgdGhlcmUgaXMgc3RpbGwgbm8gVVJMLCB0aGVuIHdl
IG5ldmVyIGxvYWRlZCBhbnl0aGluZyBpbiB0aGlzIHBhZ2UsIHNvIG5vdGhpbmcgdG8gcmVwb3J0
LgotICAgIGlmICghbWFpbldlYkZyYW1lKCktPnVybCgpLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1h
aW5XZWJGcmFtZSgpLT51cmwoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgcmVwb3J0VXNlZEZlYXR1
cmVzKCk7CiAKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2VuZFByZXdhcm1JbmZv
cm1hdGlvbih0b1JlZ2lzdHJhYmxlRG9tYWluKG1haW5XZWJGcmFtZSgpLT51cmwoKSkpOworICAg
IH0KKwogICAgIGlmIChwYWdlR3JvdXAoKS0+aXNWaXNpYmxlVG9JbmplY3RlZEJ1bmRsZSgpICYm
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxlKCkpCiAgICAgICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxlKCktPndpbGxEZXN0cm95UGFnZSh0aGlz
KTsKIApAQCAtMjg3Myw2ICsyODc2LDggQEAgdm9pZCBXZWJQYWdlOjpkaWRSZWNlaXZlUG9saWN5
RGVjaXNpb24odQogICAgIGlmIChwb2xpY3lBY3Rpb24gPT0gUG9saWN5QWN0aW9uOjpTdXNwZW5k
KSB7CiAgICAgICAgIEFTU0VSVChmcmFtZSA9PSBtX21haW5GcmFtZSk7CiAgICAgICAgIHNldElz
U3VzcGVuZGVkKHRydWUpOworCisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnNlbmRQ
cmV3YXJtSW5mb3JtYXRpb24odG9SZWdpc3RyYWJsZURvbWFpbihtYWluV2ViRnJhbWUoKS0+dXJs
KCkpKTsKICAgICB9CiAgICAgZnJhbWUtPmRpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbihsaXN0ZW5l
cklELCBwb2xpY3lBY3Rpb24sIG5hdmlnYXRpb25JRCwgZG93bmxvYWRJRCwgV1RGTW92ZSh3ZWJz
aXRlUG9saWNpZXMpKTsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>