<?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>158243</bug_id>
          
          <creation_ts>2016-05-31 15:46:57 -0700</creation_ts>
          <short_desc>Precache primary font in a secondary thread</short_desc>
          <delta_ts>2016-06-28 14:25:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>158275</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1197996</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-05-31 15:46:57 -0700</bug_when>
    <thetext>Initializing system fonts is expensive. We might improve performance by moving some of the work out of the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198003</commentid>
    <comment_count>1</comment_count>
      <attachid>280195</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-05-31 16:12:47 -0700</bug_when>
    <thetext>Created attachment 280195
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198004</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-31 16:14:51 -0700</bug_when>
    <thetext>Attachment 280195 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/FontCache.h:235:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198007</commentid>
    <comment_count>3</comment_count>
      <attachid>280197</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-05-31 16:33:45 -0700</bug_when>
    <thetext>Created attachment 280197
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198008</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-31 16:38:28 -0700</bug_when>
    <thetext>Attachment 280197 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/FontCache.h:235:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198103</commentid>
    <comment_count>5</comment_count>
      <attachid>280224</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-06-01 02:10:03 -0700</bug_when>
    <thetext>Created attachment 280224
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198105</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-01 02:12:05 -0700</bug_when>
    <thetext>Attachment 280224 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/FontCache.h:235:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198121</commentid>
    <comment_count>7</comment_count>
      <attachid>280224</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2016-06-01 05:16:32 -0700</bug_when>
    <thetext>Comment on attachment 280224
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198131</commentid>
    <comment_count>8</comment_count>
      <attachid>280231</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-06-01 06:48:14 -0700</bug_when>
    <thetext>Created attachment 280231
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198133</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-01 06:50:31 -0700</bug_when>
    <thetext>Attachment 280231 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/FontCache.h:235:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198138</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-06-01 07:28:48 -0700</bug_when>
    <thetext>ttps://trac.webkit.org/r201551</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198140</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-06-01 07:31:44 -0700</bug_when>
    <thetext>https://trac.webkit.org/r201551</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198166</commentid>
    <comment_count>12</comment_count>
      <attachid>280231</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-06-01 09:08:10 -0700</bug_when>
    <thetext>Comment on attachment 280231
patch

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

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:834
&gt; +    queue.dispatch([task = task.release()] {

[Task = WTFMove(task)]() mutable

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:840
&gt; +        RunLoop::main().dispatch([task] {

Task = WTFMove(task)

&gt; Source/WebCore/platform/graphics/cocoa/FontCacheCoreText.cpp:841
&gt; +            std::unique_ptr&lt;PrecacheTask&gt; deleter(task);

No need</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198182</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-01 09:50:07 -0700</bug_when>
    <thetext>I believe this patch has a number of thread safety issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198183</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-01 09:51:32 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; I believe this patch has a number of thread safety issues.

Namely the chunk at the end of FontCacheCoreText.

At the very least there&apos;s one string thread safety issue by passing the family to the work queue not as an isolatedCopy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198185</commentid>
    <comment_count>15</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-01 09:55:21 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; I believe this patch has a number of thread safety issues.
&gt; 
&gt; Namely the chunk at the end of FontCacheCoreText.
&gt; 
&gt; At the very least there&apos;s one string thread safety issue by passing the
&gt; family to the work queue not as an isolatedCopy.

Maybe not, since the Task itself is deleted on the main thread, and an isolated copy is made in work queue.

But it&apos;s not at all obvious at a glance (hence my comment).

Anyways, I&apos;m doing a pass over all RunLoop::dispatch users right now which is why I noticed this - I&apos;ll clean it up a bit like Chris suggested after landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198282</commentid>
    <comment_count>16</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2016-06-01 14:23:21 -0700</bug_when>
    <thetext>This change caused 3 API test failures on iOS-simulator

&lt;https://build.webkit.org/builders/Apple%20iOS%209%20Simulator%20Release%20WK2%20%28Tests%29/builds/6153&gt;

Tests that failed:
  WebCoreNSURLSessionTest.BasicOperation
  WebCoreNSURLSessionTest.InvalidateEmpty
  WebKit1.AudioSessionCategoryIOS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198285</commentid>
    <comment_count>17</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2016-06-01 14:27:55 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; This change caused 3 API test failures on iOS-simulator
&gt; 
&gt; &lt;https://build.webkit.org/builders/
&gt; Apple%20iOS%209%20Simulator%20Release%20WK2%20%28Tests%29/builds/6153&gt;
&gt; 
&gt; Tests that failed:
&gt;   WebCoreNSURLSessionTest.BasicOperation
&gt;   WebCoreNSURLSessionTest.InvalidateEmpty
&gt;   WebKit1.AudioSessionCategoryIOS

hread 3 Crashed:: Dispatch queue: org.webkit.font-precache
0   com.apple.WebCore             	0x000000010d908d9b WTF::NoncopyableFunction&lt;void ()&gt;::CallableWrapper&lt;WebCore::FontCache::platformPrecache(WTF::AtomicString const&amp;, WebCore::FontDescription const&amp;, std::__1::function&lt;void (std::__1::unique_ptr&lt;WebCore::FontPlatformData, std::__1::default_delete&lt;WebCore::FontPlatformData&gt; &gt;, bool)&gt;&amp;&amp;)::$_0&gt;::call() + 219 (NoncopyableFunction.h:88)
1   JavaScriptCore                	0x000000010c6f5a83 ___ZN3WTF9WorkQueue8dispatchEONS_19NoncopyableFunctionIFvvEEE_block_invoke + 35 (WorkQueueCocoa.cpp:37)
2   libdispatch.dylib             	0x00000001116fbc89 _dispatch_call_block_and_release + 12
3   libdispatch.dylib             	0x00000001117173d7 _dispatch_client_callout + 8
4   libdispatch.dylib             	0x0000000111701018 _dispatch_queue_drain + 1048
5   libdispatch.dylib             	0x00000001117009d0 _dispatch_queue_invoke + 595
6   libdispatch.dylib             	0x00000001117022e8 _dispatch_root_queue_drain + 565
7   libdispatch.dylib             	0x00000001117020ac _dispatch_worker_thread3 + 98
8   libsystem_pthread.dylib       	0x0000000111a4f4de _pthread_wqthread + 1129
9   libsystem_pthread.dylib       	0x0000000111a4d341 start_wqthread + 13</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198289</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-01 14:34:46 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 158275</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1206174</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-06-28 14:25:46 -0700</bug_when>
    <thetext>Looks like this was a 0.7% regression on PLT on MacBookPro.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280195</attachid>
            <date>2016-05-31 16:12:47 -0700</date>
            <delta_ts>2016-05-31 16:33:45 -0700</delta_ts>
            <desc>patch</desc>
            <filename>font-precache-6.patch</filename>
            <type>text/plain</type>
            <size>20587</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMTUzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDE2LTA1LTMxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBQcmVjYWNoZSBmb250cyBpbiBh
IHNlY29uZGFyeSB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1ODI0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFdlIGtub3cgdGhlIGZvbnQgZmFtaWxpZXMgYW5kIGRlc2NyaXB0aW9ucyB0byB1
c2Ugb24gc3R5bGUgcmVzb2x1dGlvbi4gVGhlIGFjdHVhbCBmb250cyBhcmUgb25seSBuZWVkZWQg
Zm9yCisgICAgICAgIGxheW91dC4gVGhlcmUgaXMgb2Z0ZW4gdGltZSB0byBsb2FkIGFuZCBjYWNo
ZSBmb250cyBhc3luY2hyb25vdXNseSBiZWZvcmUgdGhleSBhcmUgYWNjZXNzZWQuIFRoaXMgY2Fu
IHN1YnN0YW50aWxseQorICAgICAgICByZWR1Y2UgdGhlIHdvcmtsb2FkIG9mIHRoZSBtYWluIHRo
cmVhZC4KKworICAgICAgICAqIGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGb250RmFjZTo6Zm9udCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6cmVz
b2x2ZUZhbWlsaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpoYXNTVkdGb250
RmFjZVNvdXJjZSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlLmg6CisgICAgICAgICogY3Nz
L0NTU0ZvbnRGYWNlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291
cmNlOjpmb250KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291cmNlOjp1cmwpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTb3VyY2U6OmlzU1ZHRm9udEZhY2VTb3VyY2Up
OgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5oOgorICAgICAgICAqIGNzcy9DU1NG
b250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmYWxs
YmFja0ZvbnRBdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OnJlc29sdmVG
YW1pbGllcyk6CisKKyAgICAgICAgICAgIEFkZCBhIGZ1bmN0aW9uIGZvciByZXNvbHZpbmcgZm9u
dCBmYW1pbGllcyBvZiBhIGNhc2NhZGUgdG8gdGhlaXIgZmluYWwgdmFsdWVzLgorCisgICAgICAg
ICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250
RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFjZTo6Zm9udFJh
bmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFjZTo6cmVzb2x2ZUZh
bWlsaWVzKToKKyAgICAgICAgKiBjc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zm9u
dFBsYXRmb3JtRGF0YUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OnByZWNhY2hlVGFza3NJblBy
b2dyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OmFsdGVybmF0ZUZhbWlseU5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FjaGU6OnByZWNhY2hlKToKKworICAgICAgICAgICAgUHJlY2FjaGUgZm9udHMgYnkgdHJ5
aW5nIHRvIGxvYWQgdGhlbSBhc3luY3Jvbm91c2x5IG9uZSBieSBvbmUuIE9uIHN1Y2Nlc3MgdGhl
IGZvbnQgaXMgY2FjaGVkIHRvIGZvbnQgcGxhdGZvcm0gZGF0YSBjYWNoZS4KKworICAgICAgICAo
V2ViQ29yZTo6Rm9udENhY2hlOjpzaW1pbGFyRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhY2hlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cHJ1bmVTeXN0ZW1GYWxsYmFja0ZvbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnByZWNhY2hlUHJpbWFyeUZhbWlseSk6CisKKyAgICAgICAgICAgIFdo
ZW4gaW5pdGlhbGl6aW5nIGEgbmV3IGZvbnQgY2FzY2FkZSByZXNvbHZlIGFueSBwbGF0Zm9ybSBm
b250cyB0byB0aGVpciBhY3R1YWwgbmFtZXMgdXNpbmcKKyAgICAgICAgICAgIEZvbnRTZWxlY3Rv
ciwgdGhlbiBwcmVjYWNoZSB0aGUgcHJpbWFyeSBmb250IGZvciB0aGUgY2FzY2FkZS4KKworICAg
ICAgICAgICAgV2ViIGZvbnRzIGFyZSBpZ25vcmVkIGZvciBub3cuCisKKyAgICAgICAgKFdlYkNv
cmU6OnJldHJpZXZlT3JBZGRDYWNoZWRGb250cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFNlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250U2VsZWN0b3I6On5Gb250
U2VsZWN0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNv
cmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tG
b3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZvcm1QcmVj
YWNoZSk6CisKKyAgICAgICAgICAgIFRyeSB0byBpbml0aWFsaXplIGZvbnQgYXN5bmNocm9ub3Vz
bHkgaW4gYSBkaXNwYXRjaCBxdWV1ZSwgY2FsbCBjb21wbGV0aW9uIGhhbmRsZXIgb24gc3VjY2Vz
cyBvciBmYWlsdXJlLgorCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRmb3JtQ2Fu
Y2VsUHJlY2FjaGUpOgorCisgICAgICAgICAgICBDYW5jZWwgb25nb2luZyBwcmVjYWNoZSBvcGVy
YXRpb24uCisKIDIwMTYtMDUtMzEgIERhdmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAg
ICAgICAgUkVHUkVTU0lPTihyMjAxMDQwKTogUmVwYWludGluZyBvZiBtb3Zpbmcgb3ZlcmZsb3c6
aGlkZGVuIG9iamVjdHMgaXMgYnJva2VuLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRGYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2Uu
Y3BwCShyZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjAsNiArNTIwLDE5IEBAIFJlZlB0cjxGb250PiBDU1NG
b250RmFjZTo6Zm9udChjb25zdCBGb24KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorVmVjdG9y
PFJlc29sdmVkRm9udEZhbWlseT4gQ1NTRm9udEZhY2U6OnJlc29sdmVGYW1pbGllcygpIGNvbnN0
Cit7CisgICAgVmVjdG9yPFJlc29sdmVkRm9udEZhbWlseT4gcmVzdWx0OworICAgIGZvciAoYXV0
byYgc291cmNlIDogbV9zb3VyY2VzKSB7CisgICAgICAgIGlmIChzb3VyY2UtPmZhbWlseU5hbWVP
clVSSSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoc291
cmNlLT5zdGF0dXMoKSA9PSBDU1NGb250RmFjZVNvdXJjZTo6U3RhdHVzOjpGYWlsdXJlKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoeyBzb3VyY2UtPmZhbWls
eU5hbWVPclVSSSgpLCBzb3VyY2UtPnVybCgpIH0pOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCiAjaWYgRU5BQkxFKFNWR19GT05UUykKIGJvb2wgQ1NTRm9udEZhY2U6Omhhc1NWR0Zv
bnRGYWNlU291cmNlKCkgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
RmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCShy
ZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2VSdWxl
LmgiCiAjaW5jbHVkZSAiRm9udEZlYXR1cmVTZXR0aW5ncy5oIgorI2luY2x1ZGUgIkZvbnRTZWxl
Y3Rvci5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtMTM1LDYgKzEzNiw4IEBAIHB1YmxpYzoKICAgICAvLyBX
ZSBkb24ndCBndWFyYW50ZWUgdGhhdCB0aGUgRm9udEZhY2Ugd3JhcHBlciB3aWxsIGJlIHRoZSBz
YW1lIGV2ZXJ5IHRpbWUgeW91IGFzayBmb3IgaXQuCiAgICAgUmVmPEZvbnRGYWNlPiB3cmFwcGVy
KCk7CiAKKyAgICBWZWN0b3I8UmVzb2x2ZWRGb250RmFtaWx5PiByZXNvbHZlRmFtaWxpZXMoKSBj
b25zdDsKKwogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgYm9vbCBoYXNTVkdGb250RmFjZVNv
dXJjZSgpIGNvbnN0OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFj
ZVNvdXJjZS5jcHAJKHJldmlzaW9uIDIwMTQxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250RmFjZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw2ICsxODgsMTMgQEAgUmVm
UHRyPEZvbnQ+IENTU0ZvbnRGYWNlU291cmNlOjpmb250KGNvbgogICAgIHJldHVybiBudWxscHRy
OwogfQogCitPcHRpb25hbDxVUkw+IENTU0ZvbnRGYWNlU291cmNlOjp1cmwoKSBjb25zdAorewor
ICAgIGlmICghbV9mb250KQorICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICByZXR1cm4gbV9m
b250LT51cmwoKTsKK30KKwogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiBib29sIENTU0ZvbnRGYWNl
U291cmNlOjppc1NWR0ZvbnRGYWNlU291cmNlKCkgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCShyZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkRm9udENsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8cnVudGltZS9BcnJh
eUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIApAQCAt
NzEsNiArNzIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1NWR0ZvbnRGYWNlU291cmNlKCkgY29u
c3Q7CiAjZW5kaWYKIAorICAgIE9wdGlvbmFsPFVSTD4gdXJsKCkgY29uc3Q7CisKIHByaXZhdGU6
CiAgICAgdm9pZCBmb250TG9hZGVkKENhY2hlZEZvbnQmKSBvdmVycmlkZTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDIwMTQxNSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzQsNCArMzM0LDIyIEBAIFJlZlB0cjxGb250PiBDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNrRm8K
ICAgICByZXR1cm4gRm9udENhY2hlOjpzaW5nbGV0b24oKS5mb250Rm9yRmFtaWx5KGZvbnREZXNj
cmlwdGlvbiwgc2V0dGluZ3MtPnBpY3RvZ3JhcGhGb250RmFtaWx5KCkpOwogfQogCitWZWN0b3I8
UmVzb2x2ZWRGb250RmFtaWx5PiBDU1NGb250U2VsZWN0b3I6OnJlc29sdmVGYW1pbGllcyhjb25z
dCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgZmFtaWxpZXMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBVQ2hhcjMyIGNoYXJhY3RlcikKK3sKKyAgICBWZWN0b3I8UmVzb2x2
ZWRGb250RmFtaWx5PiByZXN1bHQ7CisKKyAgICBmb3IgKGF1dG8mIGZhbWlseSA6IGZhbWlsaWVz
KSB7CisgICAgICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGF1dG8qIHNlZ21lbnRlZEZhY2UgPSBtX2Nzc0ZvbnRGYWNlU2V0LT5nZXRGb250
RmFjZShmb250RGVzY3JpcHRpb24udHJhaXRzTWFzaygpLCBmYW1pbHkpOworICAgICAgICBpZiAo
IXNlZ21lbnRlZEZhY2UpIHsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyByZXNvbHZlR2Vu
ZXJpY0ZhbWlseShtX2RvY3VtZW50LCBmb250RGVzY3JpcHRpb24sIGZhbWlseSksIHsgfSB9KTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC5hcHBlbmRW
ZWN0b3Ioc2VnbWVudGVkRmFjZS0+cmVzb2x2ZUZhbWlsaWVzKGNoYXJhY3RlcikpOworICAgIH0K
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250U2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dFNlbGVjdG9yLmgJKHJldmlzaW9uIDIwMTQxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBAQCBwdWJsaWM6CiAg
ICAgc2l6ZV90IGZhbGxiYWNrRm9udENvdW50KCkgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPEZvbnQ+
IGZhbGxiYWNrRm9udEF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgb3ZlcnJpZGU7
CiAKKyAgICBWZWN0b3I8UmVzb2x2ZWRGb250RmFtaWx5PiByZXNvbHZlRmFtaWxpZXMoY29uc3Qg
VmVjdG9yPEF0b21pY1N0cmluZz4mLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBVQ2hhcjMyKSBv
dmVycmlkZTsKKwogICAgIHZvaWQgY2xlYXJEb2N1bWVudCgpOwogCiAgICAgdm9pZCBhZGRGb250
RmFjZVJ1bGUoU3R5bGVSdWxlRm9udEZhY2UmLCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVz
ZXJBZ2VudFNoYWRvd1RyZWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRl
ZEZvbnRGYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVu
dGVkRm9udEZhY2UuY3BwCShyZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNCArMTM4LDIw
IEBAIEZvbnRSYW5nZXMgQ1NTU2VnbWVudGVkRm9udEZhY2U6OmZvbnRSYW4KICAgICByZXR1cm4g
cmVzdWx0OwogfQogCitWZWN0b3I8UmVzb2x2ZWRGb250RmFtaWx5PiBDU1NTZWdtZW50ZWRGb250
RmFjZTo6cmVzb2x2ZUZhbWlsaWVzKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAoreworICAgIGZv
ciAoYXV0byYgZmFjZSA6IG1fZm9udEZhY2VzKSB7CisgICAgICAgIGJvb2wgaW5SYW5nZSA9IGZh
Y2UtPnJhbmdlcygpLmlzRW1wdHkoKTsKKyAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IGZhY2Ut
PnJhbmdlcygpKSB7CisgICAgICAgICAgICBpZiAoY2hhcmFjdGVyID49IHJhbmdlLmZyb20gJiYg
Y2hhcmFjdGVyIDw9IHJhbmdlLnRvKSB7CisgICAgICAgICAgICAgICAgaW5SYW5nZSA9IHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGluUmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gZmFjZS0+cmVzb2x2ZUZhbWlsaWVz
KCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oCShyZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2UuaCIKICNpbmNsdWRlICJGb250Q2Fj
aGUuaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpA
QCAtNTcsNiArNTgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWYoKSBvdmVycmlkZSB7IFJlZkNv
dW50ZWQ8Q1NTU2VnbWVudGVkRm9udEZhY2U+OjpyZWYoKTsgfQogICAgIHZvaWQgZGVyZWYoKSBv
dmVycmlkZSB7IFJlZkNvdW50ZWQ8Q1NTU2VnbWVudGVkRm9udEZhY2U+OjpkZXJlZigpOyB9CiAK
KyAgICBWZWN0b3I8UmVzb2x2ZWRGb250RmFtaWx5PiByZXNvbHZlRmFtaWxpZXMoVUNoYXIzMiBj
aGFyYWN0ZXIpIGNvbnN0OworCiBwcml2YXRlOgogICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKCk7
CiAgICAgdm9pZCBmb250TG9hZGVkKENTU0ZvbnRGYWNlJikgb3ZlcnJpZGU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHJldmlzaW9u
IDIwMTQxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw2ICsxNTksMTQgQEAgc3RhdGljIEZvbnRQbGF0Zm9y
bURhdGFDYWNoZSYgZm9udFBsYXRmbwogICAgIHJldHVybiBjYWNoZTsKIH0KIAordXNpbmcgUHJl
Y2FjaGVNYXAgPSBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSwgRm9udENhY2hlOjpQ
cmVjYWNoZVRhc2sqLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoLCBXVEY6OlNpbXBsZUNs
YXNzSGFzaFRyYWl0czxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXk+PjsKKworc3RhdGljIFByZWNh
Y2hlTWFwJiBwcmVjYWNoZVRhc2tzSW5Qcm9ncmVzcygpCit7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFByZWNhY2hlTWFwPiBtYXA7CisgICAgcmV0dXJuIG1hcDsKK30KKwogc3RhdGljIEF0
b21pY1N0cmluZyBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5
TmFtZSkKIHsKICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkpIHsKQEAgLTI0Myw2ICsy
NTEsMTAgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGbwogCiAgICAg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtleShmYW1pbHlOYW1lLCBmb250RGVzY3JpcHRpb24s
IGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlVmFyaWFudFNldHRpbmdzKTsKIAorICAgIGF1dG8q
IHByZWNhY2hlVGFzayA9IHByZWNhY2hlVGFza3NJblByb2dyZXNzKCkuZ2V0KGtleSk7CisgICAg
aWYgKHByZWNhY2hlVGFzaykKKyAgICAgICAgcGxhdGZvcm1DYW5jZWxQcmVjYWNoZSgqcHJlY2Fj
aGVUYXNrKTsKKwogICAgIGF1dG8gYWRkUmVzdWx0ID0gZm9udFBsYXRmb3JtRGF0YUNhY2hlKCku
YWRkKGtleSwgbnVsbHB0cik7CiAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlOjppdGVyYXRvciBp
dCA9IGFkZFJlc3VsdC5pdGVyYXRvcjsKICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsK
QEAgLTQ4OSw2ICs1MDEsNjggQEAgdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQogICAgIHB1
cmdlSW5hY3RpdmVGb250RGF0YSgpOwogfQogCisjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJM
RShQTEFURk9STV9GT05UX0xPT0tVUCkKK3ZvaWQgRm9udENhY2hlOjpwcmVjYWNoZShjb25zdCBW
ZWN0b3I8QXRvbWljU3RyaW5nPiYgcmVzb2x2ZWRGYW1pbGllcywgY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pCit7CisgICAgaWYgKHJlc29sdmVkRmFtaWxpZXMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisgICAgYXV0byYgZmFtaWx5ID0gcmVzb2x2ZWRGYW1pbGll
cy5maXJzdCgpOworCisgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtleShmYW1pbHksIGZv
bnREZXNjcmlwdGlvbiwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICAvLyBNYXliZSB3ZSBoYXZl
IGl0IGFscmVhZHk/CisgICAgYXV0byBpdCA9IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmZpbmQo
a2V5KTsKKyAgICBpZiAoaXQgIT0gZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuZW5kKCkpIHsKKyAg
ICAgICAgaWYgKGl0LT52YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBX
ZSBhbHJlYWR5IGtub3cgdGhpcyBmb250IGlzbid0IGF2YWlsYWJsZS4gVHJ5IHRoZSBuZXh0Lgor
ICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiByZW1haW5pbmdGYW1pbGllczsKKyAgICAgICAg
cmVtYWluaW5nRmFtaWxpZXMuYXBwZW5kUmFuZ2UocmVzb2x2ZWRGYW1pbGllcy5iZWdpbigpICsg
MSwgcmVzb2x2ZWRGYW1pbGllcy5lbmQoKSk7CisgICAgICAgIHByZWNhY2hlKHJlbWFpbmluZ0Zh
bWlsaWVzLCBmb250RGVzY3JpcHRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
YXV0byB0YXNrQWRkID0gcHJlY2FjaGVUYXNrc0luUHJvZ3Jlc3MoKS5hZGQoa2V5LCBudWxscHRy
KTsKKyAgICBpZiAoIXRhc2tBZGQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byYgdGFzayA9IHBsYXRmb3JtUHJlY2FjaGUoZmFtaWx5LCBmb250RGVzY3JpcHRpb24sIFtr
ZXksIHJlc29sdmVkRmFtaWxpZXMsIGZvbnREZXNjcmlwdGlvbl0gKGF1dG8gcGxhdGZvcm1EYXRh
LCBib29sIHdhc0NhbmNlbGVkKSB7CisgICAgICAgIHByZWNhY2hlVGFza3NJblByb2dyZXNzKCku
cmVtb3ZlKGtleSk7CisKKyAgICAgICAgaWYgKHdhc0NhbmNlbGVkKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGlmICghcGxhdGZvcm1EYXRhKSB7CisgICAgICAgICAgICBWZWN0b3I8
QXRvbWljU3RyaW5nPiByZW1haW5pbmdGYW1pbGllczsKKworICAgICAgICAgICAgYXV0byBhbHRl
cm5hdGVOYW1lID0gYWx0ZXJuYXRlRmFtaWx5TmFtZShyZXNvbHZlZEZhbWlsaWVzLmZpcnN0KCkp
OworICAgICAgICAgICAgaWYgKCFhbHRlcm5hdGVOYW1lLmlzTnVsbCgpKSB7CisgICAgICAgICAg
ICAgICAgcmVtYWluaW5nRmFtaWxpZXMgPSByZXNvbHZlZEZhbWlsaWVzOworICAgICAgICAgICAg
ICAgIHJlbWFpbmluZ0ZhbWlsaWVzLmZpcnN0KCkgPSBhbHRlcm5hdGVOYW1lOworICAgICAgICAg
ICAgICAgIHNpbmdsZXRvbigpLnByZWNhY2hlKHJlbWFpbmluZ0ZhbWlsaWVzLCBmb250RGVzY3Jp
cHRpb24pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuYWRkKGtleSwgbnVsbHB0cik7CisKKyAgICAg
ICAgICAgIHJlbWFpbmluZ0ZhbWlsaWVzLmFwcGVuZFJhbmdlKHJlc29sdmVkRmFtaWxpZXMuYmVn
aW4oKSArIDEsIHJlc29sdmVkRmFtaWxpZXMuZW5kKCkpOworCisgICAgICAgICAgICBzaW5nbGV0
b24oKS5wcmVjYWNoZShyZW1haW5pbmdGYW1pbGllcywgZm9udERlc2NyaXB0aW9uKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZvbnRQbGF0Zm9ybURhdGFDYWNo
ZSgpLmFkZChrZXksIFdURk1vdmUocGxhdGZvcm1EYXRhKSk7CisgICAgfSk7CisKKyAgICB0YXNr
QWRkLml0ZXJhdG9yLT52YWx1ZSA9ICZ0YXNrOworfQorI2Vsc2UKK3ZvaWQgRm9udENhY2hlOjpw
cmVjYWNoZShjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYsIGNvbnN0IEZvbnREZXNjcmlwdGlv
biYpCit7Cit9CisjZW5kaWYKKwogI2lmICFQTEFURk9STShDT0NPQSkKIFJlZlB0cjxGb250PiBG
b250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21p
Y1N0cmluZyYpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuaAkocmV2aXNpb24gMjAxNDE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsOCBAQCBw
dWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmPEZvbnQ+IGZvbnRGb3JQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwogICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKKyAg
ICB2b2lkIHByZWNhY2hlKGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiByZXNvbHZlZEZhbWls
aWVzLCBjb25zdCBGb250RGVzY3JpcHRpb24mKTsKKwogICAgIHZvaWQgYWRkQ2xpZW50KEZvbnRT
ZWxlY3RvciYpOwogICAgIHZvaWQgcmVtb3ZlQ2xpZW50KEZvbnRTZWxlY3RvciYpOwogCkBAIC0y
MTIsNiArMjE0LDggQEAgcHVibGljOgogICAgIFJlZlB0cjxPcGVuVHlwZVZlcnRpY2FsRGF0YT4g
dmVydGljYWxEYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKICNlbmRpZgogCisgICAgc3Ry
dWN0IFByZWNhY2hlVGFzazsKKwogcHJpdmF0ZToKICAgICBGb250Q2FjaGUoKTsKICAgICB+Rm9u
dENhY2hlKCkgPSBkZWxldGU7CkBAIC0yMjcsNiArMjMxLDEyIEBAIHByaXZhdGU6CiAjZW5kaWYK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwg
Y29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywgY29uc3QgRm9udFZh
cmlhbnRTZXR0aW5ncyogZm9udEZhY2VWYXJpYW50U2V0dGluZ3MpOwogCisjaWYgUExBVEZPUk0o
Q09DT0EpICYmIEVOQUJMRShQTEFURk9STV9GT05UX0xPT0tVUCkKKyAgICB1c2luZyBQcmVjYWNo
ZUNvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpmdW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9wdHI8
Rm9udFBsYXRmb3JtRGF0YT4sIGJvb2wgd2FzQ2FuY2VsZWQpPjsKKyAgICBQcmVjYWNoZVRhc2sm
IHBsYXRmb3JtUHJlY2FjaGUoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYsIFByZWNhY2hlQ29tcGxldGlvbkhhbmRsZXImJik7CisgICAgdm9pZCBwbGF0
Zm9ybUNhbmNlbFByZWNhY2hlKFByZWNhY2hlVGFzayYpOworI2VuZGlmCisKICAgICBUaW1lciBt
X3B1cmdlVGltZXI7CiAKICNpZiBQTEFURk9STShDT0NPQSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAJKHJldmlzaW9uIDIwMTQx
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYxLDYgKzI2MSwyOSBAQCB2b2lkIHBydW5lU3lzdGVtRmFsbGJh
Y2tGb250cygpCiAgICAgICAgIGVudHJ5LT5mb250cy0+cHJ1bmVTeXN0ZW1GYWxsYmFja3MoKTsK
IH0KIAorc3RhdGljIHZvaWQgcHJlY2FjaGVQcmltYXJ5RmFtaWx5KGNvbnN0IEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgRm9udFNlbGVjdG9yJiBmb250U2VsZWN0b3Ip
Cit7CisgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gZmFtaWxpZXM7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGZvbnREZXNjcmlwdGlvbi5mYW1pbHlDb3VudCgpOyArK2kpCisgICAgICAg
IGZhbWlsaWVzLmFwcGVuZChmb250RGVzY3JpcHRpb24uZmFtaWx5QXQoaSkpOworCisgICAgLy8g
UHJpbWFyeSBmYW1pbHkgbG9va3VwIGZhbGxzIGJhY2sgdG8gdGhlIHN0YW5kYXJkIGZhbWlseS4K
KyAgICBmYW1pbGllcy5hcHBlbmQoc3RhbmRhcmRGYW1pbHkpOworCisgICAgYXV0byByZXNvbHZl
ZFByaW1hcnlGYW1pbGllcyA9IGZvbnRTZWxlY3Rvci5yZXNvbHZlRmFtaWxpZXMoZmFtaWxpZXMs
IGZvbnREZXNjcmlwdGlvbiwgJyAnKTsKKworICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHJlc29s
dmVkUHJpbWFyeUZhbWlseU5hbWVzOworICAgIGZvciAoYXV0byYgZmFtaWx5IDogcmVzb2x2ZWRQ
cmltYXJ5RmFtaWxpZXMpIHsKKyAgICAgICAgLy8gVGhpcyBkb2Vzbid0IGhhbmRsZSB3ZWIgZm9u
dHMgZm9yIG5vdy4KKyAgICAgICAgaWYgKGZhbWlseS51cmwpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgcmVzb2x2ZWRQcmltYXJ5RmFtaWx5TmFtZXMuYXBwZW5kKGZhbWlseS5uYW1lKTsK
KyAgICB9CisKKyAgICAvLyBBc3luY2hyb25vdXNseSBmaW5kIGZpcnN0IGF2YWlsYWJsZSBmb250
IGFuZCBwcmVjYWNoZSBpdCBzbyBpdCBpcyBsaWtlbHkgdG8gYmUgYXZhaWxhYmxlIHdoZW4gbmVl
ZGVkLgorICAgIEZvbnRDYWNoZTo6c2luZ2xldG9uKCkucHJlY2FjaGUocmVzb2x2ZWRQcmltYXJ5
RmFtaWx5TmFtZXMsIGZvbnREZXNjcmlwdGlvbik7Cit9CisKIHN0YXRpYyBSZWY8Rm9udENhc2Nh
ZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hlZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbiwgUmVmUHRyPEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0
b3IpCiB7CiAgICAgYXV0byBrZXkgPSBtYWtlRm9udENhc2NhZGVDYWNoZUtleShmb250RGVzY3Jp
cHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7CkBAIC0yNzAsNiArMjkzLDkgQEAgc3RhdGljIFJl
ZjxGb250Q2FzY2FkZUZvbnRzPiByZXRyaWV2ZU9yQQogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3
RW50cnkgJiYga2V5c01hdGNoKGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmtleSwga2V5KSkK
ICAgICAgICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmZvbnRzLmdldCgpOwog
CisgICAgaWYgKGZvbnRTZWxlY3RvcikKKyAgICAgICAgcHJlY2FjaGVQcmltYXJ5RmFtaWx5KGZv
bnREZXNjcmlwdGlvbiwgKmZvbnRTZWxlY3Rvcik7CisKICAgICBhdXRvJiBuZXdFbnRyeSA9IGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgbmV3RW50cnkgPSBzdGQ6Om1ha2VfdW5pcXVl
PEZvbnRDYXNjYWRlQ2FjaGVFbnRyeT4oV1RGTW92ZShrZXkpLCBGb250Q2FzY2FkZUZvbnRzOjpj
cmVhdGUoV1RGTW92ZShmb250U2VsZWN0b3IpKSk7CiAgICAgUmVmPEZvbnRDYXNjYWRlRm9udHM+
IGdseXBocyA9IG5ld0VudHJ5LT5mb250cy5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCShyZXZpc2lvbiAyMDE0MTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGb250
UmFuZ2VzLmgiCisjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBA
IC00NCw2ICs0NSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNv
bnN0ID0gMDsKIH07CiAKK3N0cnVjdCBSZXNvbHZlZEZvbnRGYW1pbHkgeworICAgIEF0b21pY1N0
cmluZyBuYW1lOworICAgIE9wdGlvbmFsPFVSTD4gdXJsOworfTsKKwogY2xhc3MgRm9udFNlbGVj
dG9yIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udFNlbGVjdG9yPiB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+Rm9udFNlbGVjdG9yKCkgeyB9CkBAIC01OCw2ICs2NCw4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJbnZhbGlkYXRpb25DYWxsYmFja3MoRm9udFNlbGVjdG9y
Q2xpZW50JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyRm9ySW52YWxpZGF0aW9u
Q2FsbGJhY2tzKEZvbnRTZWxlY3RvckNsaWVudCYpID0gMDsKIAorICAgIHZpcnR1YWwgVmVjdG9y
PFJlc29sdmVkRm9udEZhbWlseT4gcmVzb2x2ZUZhbWlsaWVzKGNvbnN0IFZlY3RvcjxBdG9taWNT
dHJpbmc+JiBmYW1pbGllcywgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgVUNoYXIzMiBjaGFyYWN0
ZXIpID0gMDsKKwogICAgIHZpcnR1YWwgdW5zaWduZWQgdW5pcXVlSWQoKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCB1bnNpZ25lZCB2ZXJzaW9uKCkgY29uc3QgPSAwOwogfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q2FjaGVDb3JlVGV4dC5jcHAJKHJldmlzaW9uIDIwMTQxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC03OTYsNCArNzk4LDcxIEBAIFJlZlB0cjxGb250PiBGb250Q2Fj
aGU6OnN5c3RlbUZhbGxiYWNrRm8KICAgICByZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShhbHRl
cm5hdGVGb250KTsKIH0KIAorI2lmIEVOQUJMRShQTEFURk9STV9GT05UX0xPT0tVUCkKK3N0cnVj
dCBGb250Q2FjaGU6OlByZWNhY2hlVGFzayB7CisgICAgU3RyaW5nIGZhbWlseTsKKyAgICBGb250
RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxh
dGZvcm1EYXRhPiByZXN1bHQ7CisgICAgUHJlY2FjaGVDb21wbGV0aW9uSGFuZGxlciBjb21wbGV0
aW9uSGFuZGxlcjsKKyAgICBzdGQ6OmF0b21pY19ib29sIGlzQ2FuY2VsZWQgeyBmYWxzZSB9Owor
fTsKKworRm9udENhY2hlOjpQcmVjYWNoZVRhc2smIEZvbnRDYWNoZTo6cGxhdGZvcm1QcmVjYWNo
ZShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIFByZWNhY2hlQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBzdGF0aWMgV29ya1F1ZXVlJiBxdWV1ZSA9IFdvcmtRdWV1ZTo6Y3JlYXRlKCJv
cmcud2Via2l0LmZvbnQtcHJlY2FjaGUiLCBXb3JrUXVldWU6OlR5cGU6OlNlcmlhbCwgV29ya1F1
ZXVlOjpRT1M6OlVzZXJJbml0aWF0ZWQpLmxlYWtSZWYoKTsKKworICAgIGF1dG8gdGFzayA9IHN0
ZDo6bWFrZV91bmlxdWU8UHJlY2FjaGVUYXNrPigpOworICAgIHRhc2stPmZhbWlseSA9IGZhbWls
eS5zdHJpbmcoKS5pc29sYXRlZENvcHkoKTsKKyAgICB0YXNrLT5mb250RGVzY3JpcHRpb24gPSBm
b250RGVzY3JpcHRpb247CisgICAgdGFzay0+Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKTsKKworICAgIGF1dG8mIHJlc3VsdFRhc2sgPSAqdGFzazsKKworICAg
IGNvbnN0IGF1dG8mIHdoaXRlbGlzdCA9IGZvbnRXaGl0ZWxpc3QoKTsKKyAgICBpZiAod2hpdGVs
aXN0LnNpemUoKSAmJiAhd2hpdGVsaXN0LmNvbnRhaW5zKGZhbWlseSkpIHsKKyAgICAgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0YXNrID0gdGFzay5yZWxlYXNlKCldIHsKKyAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxQcmVjYWNoZVRhc2s+IGRlbGV0ZXIodGFzayk7CisgICAgICAg
ICAgICB0YXNrLT5jb21wbGV0aW9uSGFuZGxlcihudWxscHRyLCBmYWxzZSk7CisgICAgICAgIH0p
OworICAgICAgICByZXR1cm4gcmVzdWx0VGFzazsKKyAgICB9CisKKyAgICBxdWV1ZS5kaXNwYXRj
aChbdGFzayA9IHRhc2sucmVsZWFzZSgpXSB7CisgICAgICAgIGlmICghdGFzay0+aXNDYW5jZWxl
ZCkgeworICAgICAgICAgICAgYXV0byB0cmFpdHMgPSBjb21wdXRlVHJhaXRzKHRhc2stPmZvbnRE
ZXNjcmlwdGlvbik7CisgICAgICAgICAgICBhdXRvIHNpemUgPSB0YXNrLT5mb250RGVzY3JpcHRp
b24uY29tcHV0ZWRQaXhlbFNpemUoKTsKKyAgICAgICAgICAgIGF1dG8gd2VpZ2h0ID0gdGFzay0+
Zm9udERlc2NyaXB0aW9uLndlaWdodCgpOworICAgICAgICAgICAgYXV0byBmZWF0dXJlU2V0dGlu
Z3MgPSB0YXNrLT5mb250RGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCk7CisgICAgICAgICAg
ICBhdXRvIHZhcmlhbnRTZXR0aW5ncyA9IHRhc2stPmZvbnREZXNjcmlwdGlvbi52YXJpYW50U2V0
dGluZ3MoKTsKKyAgICAgICAgICAgIGF1dG8gdGV4dFJlbmRlcmluZ01vZGUgPSB0YXNrLT5mb250
RGVzY3JpcHRpb24udGV4dFJlbmRlcmluZ01vZGUoKTsKKworICAgICAgICAgICAgYXV0byBjdEZv
bnQgPSBwbGF0Zm9ybUZvbnRXaXRoRmFtaWx5U3BlY2lhbENhc2UodGFzay0+ZmFtaWx5Lmlzb2xh
dGVkQ29weSgpLCB3ZWlnaHQsIHRyYWl0cywgc2l6ZSk7CisgICAgICAgICAgICBpZiAoIWN0Rm9u
dCkKKyAgICAgICAgICAgICAgICBjdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUZvckNTUyh0
YXNrLT5mYW1pbHkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgdG9Db3JlVGV4dEZvbnRXZWlnaHQo
d2VpZ2h0KSwgdHJhaXRzLCBzaXplKSk7CisKKyAgICAgICAgICAgIGN0Rm9udCA9IHByZXBhcmVQ
bGF0Zm9ybUZvbnQoY3RGb250LmdldCgpLCB0ZXh0UmVuZGVyaW5nTW9kZSwgbnVsbHB0ciwgbnVs
bHB0ciwgZmVhdHVyZVNldHRpbmdzLCB2YXJpYW50U2V0dGluZ3MpOworCisgICAgICAgICAgICBp
ZiAoY3RGb250KSB7CisgICAgICAgICAgICAgICAgYm9vbCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNPYmxpcXVlOworICAgICAgICAgICAgICAgIHN0ZDo6dGllKHN5bnRoZXRpY0JvbGQsIHN5bnRo
ZXRpY09ibGlxdWUpID0gY29tcHV0ZU5lY2Vzc2FyeVN5bnRoZXNpcyhjdEZvbnQuZ2V0KCksIHRh
c2stPmZvbnREZXNjcmlwdGlvbikuYm9sZE9ibGlxdWVQYWlyKCk7CisKKyAgICAgICAgICAgICAg
ICB0YXNrLT5yZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEZvbnRQbGF0Zm9ybURhdGE+KGN0Rm9u
dC5nZXQoKSwgc2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgdGFzay0+Zm9u
dERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCksIHRhc2stPmZvbnREZXNjcmlwdGlvbi53aWR0aFZh
cmlhbnQoKSwgdGV4dFJlbmRlcmluZ01vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0YXNrXSB7CisgICAgICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UHJlY2FjaGVUYXNrPiBkZWxldGVyKHRhc2spOworICAgICAgICAgICAg
dGFzay0+Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZSh0YXNrLT5yZXN1bHQpLCB0YXNrLT5pc0Nh
bmNlbGVkKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gcmVzdWx0VGFzazsK
K30KKwordm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtQ2FuY2VsUHJlY2FjaGUoRm9udENhY2hlOjpQ
cmVjYWNoZVRhc2smIHRhc2spCit7CisgICAgdGFzay5pc0NhbmNlbGVkID0gdHJ1ZTsKK30KKyNl
bmRpZgorCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280197</attachid>
            <date>2016-05-31 16:33:45 -0700</date>
            <delta_ts>2016-06-01 02:10:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>font-precache-7.patch</filename>
            <type>text/plain</type>
            <size>20709</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMTUzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDE2LTA1LTMxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBQcmVjYWNoZSBmb250cyBpbiBh
IHNlY29uZGFyeSB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1ODI0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFdlIGtub3cgdGhlIGZvbnQgZmFtaWxpZXMgYW5kIGRlc2NyaXB0aW9ucyB0byB1
c2Ugb24gc3R5bGUgcmVzb2x1dGlvbi4gVGhlIGFjdHVhbCBmb250cyBhcmUgb25seSBuZWVkZWQg
Zm9yCisgICAgICAgIGxheW91dC4gVGhlcmUgaXMgb2Z0ZW4gdGltZSB0byBsb2FkIGFuZCBjYWNo
ZSBmb250cyBhc3luY2hyb25vdXNseSBiZWZvcmUgdGhleSBhcmUgYWNjZXNzZWQuIFRoaXMgY2Fu
IHN1YnN0YW50aWxseQorICAgICAgICByZWR1Y2UgdGhlIHdvcmtsb2FkIG9mIHRoZSBtYWluIHRo
cmVhZC4KKworICAgICAgICAqIGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGb250RmFjZTo6Zm9udCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6cmVz
b2x2ZUZhbWlsaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpoYXNTVkdGb250
RmFjZVNvdXJjZSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlLmg6CisgICAgICAgICogY3Nz
L0NTU0ZvbnRGYWNlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291
cmNlOjpmb250KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291cmNlOjp1cmwpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTb3VyY2U6OmlzU1ZHRm9udEZhY2VTb3VyY2Up
OgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5oOgorICAgICAgICAqIGNzcy9DU1NG
b250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmYWxs
YmFja0ZvbnRBdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OnJlc29sdmVG
YW1pbGllcyk6CisKKyAgICAgICAgICAgIEFkZCBhIGZ1bmN0aW9uIGZvciByZXNvbHZpbmcgZm9u
dCBmYW1pbGllcyBvZiBhIGNhc2NhZGUgdG8gdGhlaXIgZmluYWwgdmFsdWVzLgorCisgICAgICAg
ICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250
RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFjZTo6Zm9udFJh
bmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFjZTo6cmVzb2x2ZUZh
bWlsaWVzKToKKyAgICAgICAgKiBjc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zm9u
dFBsYXRmb3JtRGF0YUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OnByZWNhY2hlVGFza3NJblBy
b2dyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OmFsdGVybmF0ZUZhbWlseU5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FjaGU6OnByZWNhY2hlKToKKworICAgICAgICAgICAgUHJlY2FjaGUgZm9udHMgYnkgdHJ5
aW5nIHRvIGxvYWQgdGhlbSBhc3luY3Jvbm91c2x5IG9uZSBieSBvbmUuIE9uIHN1Y2Nlc3MgdGhl
IGZvbnQgaXMgY2FjaGVkIHRvIGZvbnQgcGxhdGZvcm0gZGF0YSBjYWNoZS4KKworICAgICAgICAo
V2ViQ29yZTo6Rm9udENhY2hlOjpzaW1pbGFyRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhY2hlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cHJ1bmVTeXN0ZW1GYWxsYmFja0ZvbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnByZWNhY2hlUHJpbWFyeUZhbWlseSk6CisKKyAgICAgICAgICAgIFdo
ZW4gaW5pdGlhbGl6aW5nIGEgbmV3IGZvbnQgY2FzY2FkZSByZXNvbHZlIGFueSBwbGF0Zm9ybSBm
b250cyB0byB0aGVpciBhY3R1YWwgbmFtZXMgdXNpbmcKKyAgICAgICAgICAgIEZvbnRTZWxlY3Rv
ciwgdGhlbiBwcmVjYWNoZSB0aGUgcHJpbWFyeSBmb250IGZvciB0aGUgY2FzY2FkZS4KKworICAg
ICAgICAgICAgV2ViIGZvbnRzIGFyZSBpZ25vcmVkIGZvciBub3cuCisKKyAgICAgICAgKFdlYkNv
cmU6OnJldHJpZXZlT3JBZGRDYWNoZWRGb250cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFNlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250U2VsZWN0b3I6On5Gb250
U2VsZWN0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNv
cmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tG
b3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZvcm1QcmVj
YWNoZSk6CisKKyAgICAgICAgICAgIFRyeSB0byBpbml0aWFsaXplIGZvbnQgYXN5bmNocm9ub3Vz
bHkgaW4gYSBkaXNwYXRjaCBxdWV1ZSwgY2FsbCBjb21wbGV0aW9uIGhhbmRsZXIgb24gc3VjY2Vz
cyBvciBmYWlsdXJlLgorCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRmb3JtQ2Fu
Y2VsUHJlY2FjaGUpOgorCisgICAgICAgICAgICBDYW5jZWwgb25nb2luZyBwcmVjYWNoZSBvcGVy
YXRpb24uCisKIDIwMTYtMDUtMzEgIERhdmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAg
ICAgICAgUkVHUkVTU0lPTihyMjAxMDQwKTogUmVwYWludGluZyBvZiBtb3Zpbmcgb3ZlcmZsb3c6
aGlkZGVuIG9iamVjdHMgaXMgYnJva2VuLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRGYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2Uu
Y3BwCShyZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjAsNiArNTIwLDE5IEBAIFJlZlB0cjxGb250PiBDU1NG
b250RmFjZTo6Zm9udChjb25zdCBGb24KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorVmVjdG9y
PFJlc29sdmVkRm9udEZhbWlseT4gQ1NTRm9udEZhY2U6OnJlc29sdmVGYW1pbGllcygpIGNvbnN0
Cit7CisgICAgVmVjdG9yPFJlc29sdmVkRm9udEZhbWlseT4gcmVzdWx0OworICAgIGZvciAoYXV0
byYgc291cmNlIDogbV9zb3VyY2VzKSB7CisgICAgICAgIGlmIChzb3VyY2UtPmZhbWlseU5hbWVP
clVSSSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoc291
cmNlLT5zdGF0dXMoKSA9PSBDU1NGb250RmFjZVNvdXJjZTo6U3RhdHVzOjpGYWlsdXJlKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoeyBzb3VyY2UtPmZhbWls
eU5hbWVPclVSSSgpLCBzb3VyY2UtPnVybCgpIH0pOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCiAjaWYgRU5BQkxFKFNWR19GT05UUykKIGJvb2wgQ1NTRm9udEZhY2U6Omhhc1NWR0Zv
bnRGYWNlU291cmNlKCkgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
RmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCShy
ZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2VSdWxl
LmgiCiAjaW5jbHVkZSAiRm9udEZlYXR1cmVTZXR0aW5ncy5oIgorI2luY2x1ZGUgIkZvbnRTZWxl
Y3Rvci5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtMTM1LDYgKzEzNiw4IEBAIHB1YmxpYzoKICAgICAvLyBX
ZSBkb24ndCBndWFyYW50ZWUgdGhhdCB0aGUgRm9udEZhY2Ugd3JhcHBlciB3aWxsIGJlIHRoZSBz
YW1lIGV2ZXJ5IHRpbWUgeW91IGFzayBmb3IgaXQuCiAgICAgUmVmPEZvbnRGYWNlPiB3cmFwcGVy
KCk7CiAKKyAgICBWZWN0b3I8UmVzb2x2ZWRGb250RmFtaWx5PiByZXNvbHZlRmFtaWxpZXMoKSBj
b25zdDsKKwogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgYm9vbCBoYXNTVkdGb250RmFjZVNv
dXJjZSgpIGNvbnN0OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFj
ZVNvdXJjZS5jcHAJKHJldmlzaW9uIDIwMTQxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250RmFjZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw2ICsxODgsMTMgQEAgUmVm
UHRyPEZvbnQ+IENTU0ZvbnRGYWNlU291cmNlOjpmb250KGNvbgogICAgIHJldHVybiBudWxscHRy
OwogfQogCitPcHRpb25hbDxVUkw+IENTU0ZvbnRGYWNlU291cmNlOjp1cmwoKSBjb25zdAorewor
ICAgIGlmICghbV9mb250KQorICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICByZXR1cm4gbV9m
b250LT51cmwoKTsKK30KKwogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiBib29sIENTU0ZvbnRGYWNl
U291cmNlOjppc1NWR0ZvbnRGYWNlU291cmNlKCkgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCShyZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkRm9udENsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8cnVudGltZS9BcnJh
eUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIApAQCAt
NzEsNiArNzIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1NWR0ZvbnRGYWNlU291cmNlKCkgY29u
c3Q7CiAjZW5kaWYKIAorICAgIE9wdGlvbmFsPFVSTD4gdXJsKCkgY29uc3Q7CisKIHByaXZhdGU6
CiAgICAgdm9pZCBmb250TG9hZGVkKENhY2hlZEZvbnQmKSBvdmVycmlkZTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDIwMTQxNSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzQsNCArMzM0LDIyIEBAIFJlZlB0cjxGb250PiBDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNrRm8K
ICAgICByZXR1cm4gRm9udENhY2hlOjpzaW5nbGV0b24oKS5mb250Rm9yRmFtaWx5KGZvbnREZXNj
cmlwdGlvbiwgc2V0dGluZ3MtPnBpY3RvZ3JhcGhGb250RmFtaWx5KCkpOwogfQogCitWZWN0b3I8
UmVzb2x2ZWRGb250RmFtaWx5PiBDU1NGb250U2VsZWN0b3I6OnJlc29sdmVGYW1pbGllcyhjb25z
dCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgZmFtaWxpZXMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBVQ2hhcjMyIGNoYXJhY3RlcikKK3sKKyAgICBWZWN0b3I8UmVzb2x2
ZWRGb250RmFtaWx5PiByZXN1bHQ7CisKKyAgICBmb3IgKGF1dG8mIGZhbWlseSA6IGZhbWlsaWVz
KSB7CisgICAgICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGF1dG8qIHNlZ21lbnRlZEZhY2UgPSBtX2Nzc0ZvbnRGYWNlU2V0LT5nZXRGb250
RmFjZShmb250RGVzY3JpcHRpb24udHJhaXRzTWFzaygpLCBmYW1pbHkpOworICAgICAgICBpZiAo
IXNlZ21lbnRlZEZhY2UpIHsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyByZXNvbHZlR2Vu
ZXJpY0ZhbWlseShtX2RvY3VtZW50LCBmb250RGVzY3JpcHRpb24sIGZhbWlseSksIHsgfSB9KTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC5hcHBlbmRW
ZWN0b3Ioc2VnbWVudGVkRmFjZS0+cmVzb2x2ZUZhbWlsaWVzKGNoYXJhY3RlcikpOworICAgIH0K
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250U2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dFNlbGVjdG9yLmgJKHJldmlzaW9uIDIwMTQxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBAQCBwdWJsaWM6CiAg
ICAgc2l6ZV90IGZhbGxiYWNrRm9udENvdW50KCkgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPEZvbnQ+
IGZhbGxiYWNrRm9udEF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgb3ZlcnJpZGU7
CiAKKyAgICBWZWN0b3I8UmVzb2x2ZWRGb250RmFtaWx5PiByZXNvbHZlRmFtaWxpZXMoY29uc3Qg
VmVjdG9yPEF0b21pY1N0cmluZz4mLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBVQ2hhcjMyKSBv
dmVycmlkZTsKKwogICAgIHZvaWQgY2xlYXJEb2N1bWVudCgpOwogCiAgICAgdm9pZCBhZGRGb250
RmFjZVJ1bGUoU3R5bGVSdWxlRm9udEZhY2UmLCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVz
ZXJBZ2VudFNoYWRvd1RyZWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRl
ZEZvbnRGYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVu
dGVkRm9udEZhY2UuY3BwCShyZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNCArMTM4LDIw
IEBAIEZvbnRSYW5nZXMgQ1NTU2VnbWVudGVkRm9udEZhY2U6OmZvbnRSYW4KICAgICByZXR1cm4g
cmVzdWx0OwogfQogCitWZWN0b3I8UmVzb2x2ZWRGb250RmFtaWx5PiBDU1NTZWdtZW50ZWRGb250
RmFjZTo6cmVzb2x2ZUZhbWlsaWVzKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAoreworICAgIGZv
ciAoYXV0byYgZmFjZSA6IG1fZm9udEZhY2VzKSB7CisgICAgICAgIGJvb2wgaW5SYW5nZSA9IGZh
Y2UtPnJhbmdlcygpLmlzRW1wdHkoKTsKKyAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IGZhY2Ut
PnJhbmdlcygpKSB7CisgICAgICAgICAgICBpZiAoY2hhcmFjdGVyID49IHJhbmdlLmZyb20gJiYg
Y2hhcmFjdGVyIDw9IHJhbmdlLnRvKSB7CisgICAgICAgICAgICAgICAgaW5SYW5nZSA9IHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGluUmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gZmFjZS0+cmVzb2x2ZUZhbWlsaWVz
KCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oCShyZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2UuaCIKICNpbmNsdWRlICJGb250Q2Fj
aGUuaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpA
QCAtNTcsNiArNTgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWYoKSBvdmVycmlkZSB7IFJlZkNv
dW50ZWQ8Q1NTU2VnbWVudGVkRm9udEZhY2U+OjpyZWYoKTsgfQogICAgIHZvaWQgZGVyZWYoKSBv
dmVycmlkZSB7IFJlZkNvdW50ZWQ8Q1NTU2VnbWVudGVkRm9udEZhY2U+OjpkZXJlZigpOyB9CiAK
KyAgICBWZWN0b3I8UmVzb2x2ZWRGb250RmFtaWx5PiByZXNvbHZlRmFtaWxpZXMoVUNoYXIzMiBj
aGFyYWN0ZXIpIGNvbnN0OworCiBwcml2YXRlOgogICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKCk7
CiAgICAgdm9pZCBmb250TG9hZGVkKENTU0ZvbnRGYWNlJikgb3ZlcnJpZGU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHJldmlzaW9u
IDIwMTQxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw2ICsxNTksMTYgQEAgc3RhdGljIEZvbnRQbGF0Zm9y
bURhdGFDYWNoZSYgZm9udFBsYXRmbwogICAgIHJldHVybiBjYWNoZTsKIH0KIAorI2lmIFBMQVRG
T1JNKENPQ09BKSAmJiBFTkFCTEUoUExBVEZPUk1fRk9OVF9MT09LVVApCit1c2luZyBQcmVjYWNo
ZU1hcCA9IEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5LCBGb250Q2FjaGU6OlByZWNh
Y2hlVGFzayosIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2gsIFdURjo6U2ltcGxlQ2xhc3NI
YXNoVHJhaXRzPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleT4+OworCitzdGF0aWMgUHJlY2FjaGVN
YXAmIHByZWNhY2hlVGFza3NJblByb2dyZXNzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8UHJlY2FjaGVNYXA+IG1hcDsKKyAgICByZXR1cm4gbWFwOworfQorI2VuZGlmCisKIHN0YXRp
YyBBdG9taWNTdHJpbmcgYWx0ZXJuYXRlRmFtaWx5TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIGZh
bWlseU5hbWUpCiB7CiAgICAgc3dpdGNoIChmYW1pbHlOYW1lLmxlbmd0aCgpKSB7CkBAIC0yNDMs
NiArMjUzLDEyIEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm8KIAog
ICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkoZmFtaWx5TmFtZSwgZm9udERlc2NyaXB0
aW9uLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZVZhcmlhbnRTZXR0aW5ncyk7CiAKKyNpZiBQ
TEFURk9STShDT0NPQSkgJiYgRU5BQkxFKFBMQVRGT1JNX0ZPTlRfTE9PS1VQKQorICAgIGF1dG8q
IHByZWNhY2hlVGFzayA9IHByZWNhY2hlVGFza3NJblByb2dyZXNzKCkuZ2V0KGtleSk7CisgICAg
aWYgKHByZWNhY2hlVGFzaykKKyAgICAgICAgcGxhdGZvcm1DYW5jZWxQcmVjYWNoZSgqcHJlY2Fj
aGVUYXNrKTsKKyNlbmRpZgorCiAgICAgYXV0byBhZGRSZXN1bHQgPSBmb250UGxhdGZvcm1EYXRh
Q2FjaGUoKS5hZGQoa2V5LCBudWxscHRyKTsKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0
ZXJhdG9yIGl0ID0gYWRkUmVzdWx0Lml0ZXJhdG9yOwogICAgIGlmIChhZGRSZXN1bHQuaXNOZXdF
bnRyeSkgewpAQCAtNDg5LDYgKzUwNSw2OCBAQCB2b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZSgp
CiAgICAgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCk7CiB9CiAKKyNpZiBQTEFURk9STShDT0NPQSkg
JiYgRU5BQkxFKFBMQVRGT1JNX0ZPTlRfTE9PS1VQKQordm9pZCBGb250Q2FjaGU6OnByZWNhY2hl
KGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiByZXNvbHZlZEZhbWlsaWVzLCBjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKK3sKKyAgICBpZiAocmVzb2x2ZWRGYW1pbGll
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvJiBmYW1pbHkgPSByZXNvbHZl
ZEZhbWlsaWVzLmZpcnN0KCk7CisKKyAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5KGZh
bWlseSwgZm9udERlc2NyaXB0aW9uLCBudWxscHRyLCBudWxscHRyKTsKKworICAgIC8vIE1heWJl
IHdlIGhhdmUgaXQgYWxyZWFkeT8KKyAgICBhdXRvIGl0ID0gZm9udFBsYXRmb3JtRGF0YUNhY2hl
KCkuZmluZChrZXkpOworICAgIGlmIChpdCAhPSBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5lbmQo
KSkgeworICAgICAgICBpZiAoaXQtPnZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIC8vIFdlIGFscmVhZHkga25vdyB0aGlzIGZvbnQgaXNuJ3QgYXZhaWxhYmxlLiBUcnkgdGhl
IG5leHQuCisgICAgICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHJlbWFpbmluZ0ZhbWlsaWVzOwor
ICAgICAgICByZW1haW5pbmdGYW1pbGllcy5hcHBlbmRSYW5nZShyZXNvbHZlZEZhbWlsaWVzLmJl
Z2luKCkgKyAxLCByZXNvbHZlZEZhbWlsaWVzLmVuZCgpKTsKKyAgICAgICAgcHJlY2FjaGUocmVt
YWluaW5nRmFtaWxpZXMsIGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBhdXRvIHRhc2tBZGQgPSBwcmVjYWNoZVRhc2tzSW5Qcm9ncmVzcygpLmFkZChrZXks
IG51bGxwdHIpOworICAgIGlmICghdGFza0FkZC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvJiB0YXNrID0gcGxhdGZvcm1QcmVjYWNoZShmYW1pbHksIGZvbnREZXNjcmlw
dGlvbiwgW2tleSwgcmVzb2x2ZWRGYW1pbGllcywgZm9udERlc2NyaXB0aW9uXSAoYXV0byBwbGF0
Zm9ybURhdGEsIGJvb2wgd2FzQ2FuY2VsZWQpIHsKKyAgICAgICAgcHJlY2FjaGVUYXNrc0luUHJv
Z3Jlc3MoKS5yZW1vdmUoa2V5KTsKKworICAgICAgICBpZiAod2FzQ2FuY2VsZWQpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFwbGF0Zm9ybURhdGEpIHsKKyAgICAgICAgICAg
IFZlY3RvcjxBdG9taWNTdHJpbmc+IHJlbWFpbmluZ0ZhbWlsaWVzOworCisgICAgICAgICAgICBh
dXRvIGFsdGVybmF0ZU5hbWUgPSBhbHRlcm5hdGVGYW1pbHlOYW1lKHJlc29sdmVkRmFtaWxpZXMu
Zmlyc3QoKSk7CisgICAgICAgICAgICBpZiAoIWFsdGVybmF0ZU5hbWUuaXNOdWxsKCkpIHsKKyAg
ICAgICAgICAgICAgICByZW1haW5pbmdGYW1pbGllcyA9IHJlc29sdmVkRmFtaWxpZXM7CisgICAg
ICAgICAgICAgICAgcmVtYWluaW5nRmFtaWxpZXMuZmlyc3QoKSA9IGFsdGVybmF0ZU5hbWU7Cisg
ICAgICAgICAgICAgICAgc2luZ2xldG9uKCkucHJlY2FjaGUocmVtYWluaW5nRmFtaWxpZXMsIGZv
bnREZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5hZGQoa2V5LCBudWxscHRyKTsK
KworICAgICAgICAgICAgcmVtYWluaW5nRmFtaWxpZXMuYXBwZW5kUmFuZ2UocmVzb2x2ZWRGYW1p
bGllcy5iZWdpbigpICsgMSwgcmVzb2x2ZWRGYW1pbGllcy5lbmQoKSk7CisKKyAgICAgICAgICAg
IHNpbmdsZXRvbigpLnByZWNhY2hlKHJlbWFpbmluZ0ZhbWlsaWVzLCBmb250RGVzY3JpcHRpb24p
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZm9udFBsYXRmb3Jt
RGF0YUNhY2hlKCkuYWRkKGtleSwgV1RGTW92ZShwbGF0Zm9ybURhdGEpKTsKKyAgICB9KTsKKwor
ICAgIHRhc2tBZGQuaXRlcmF0b3ItPnZhbHVlID0gJnRhc2s7Cit9CisjZWxzZQordm9pZCBGb250
Q2FjaGU6OnByZWNhY2hlKGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiwgY29uc3QgRm9udERl
c2NyaXB0aW9uJikKK3sKK30KKyNlbmRpZgorCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogUmVmUHRy
PEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgY29u
c3QgQXRvbWljU3RyaW5nJikKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5oCShyZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5
Myw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8Rm9udD4gZm9udEZvclBsYXRm
b3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAgICAgUmVmUHRyPEZvbnQ+IHNpbWls
YXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5
KTsKIAorICAgIHZvaWQgcHJlY2FjaGUoY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIHJlc29s
dmVkRmFtaWxpZXMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpOworCiAgICAgdm9pZCBhZGRDbGll
bnQoRm9udFNlbGVjdG9yJik7CiAgICAgdm9pZCByZW1vdmVDbGllbnQoRm9udFNlbGVjdG9yJik7
CiAKQEAgLTIxMiw2ICsyMTQsOCBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPE9wZW5UeXBlVmVydGlj
YWxEYXRhPiB2ZXJ0aWNhbERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwogI2VuZGlmCiAK
KyAgICBzdHJ1Y3QgUHJlY2FjaGVUYXNrOworCiBwcml2YXRlOgogICAgIEZvbnRDYWNoZSgpOwog
ICAgIH5Gb250Q2FjaGUoKSA9IGRlbGV0ZTsKQEAgLTIyNyw2ICsyMzEsMTIgQEAgcHJpdmF0ZToK
ICNlbmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBjcmVhdGVGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBmb250RmFjZUZlYXR1cmVzLCBjb25z
dCBGb250VmFyaWFudFNldHRpbmdzKiBmb250RmFjZVZhcmlhbnRTZXR0aW5ncyk7CiAKKyNpZiBQ
TEFURk9STShDT0NPQSkgJiYgRU5BQkxFKFBMQVRGT1JNX0ZPTlRfTE9PS1VQKQorICAgIHVzaW5n
IFByZWNhY2hlQ29tcGxldGlvbkhhbmRsZXIgPSBzdGQ6OmZ1bmN0aW9uPHZvaWQgKHN0ZDo6dW5p
cXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiwgYm9vbCB3YXNDYW5jZWxlZCk+OworICAgIFByZWNh
Y2hlVGFzayYgcGxhdGZvcm1QcmVjYWNoZShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgUHJlY2FjaGVDb21wbGV0aW9uSGFuZGxlciYmKTsKKyAgICB2
b2lkIHBsYXRmb3JtQ2FuY2VsUHJlY2FjaGUoUHJlY2FjaGVUYXNrJik7CisjZW5kaWYKKwogICAg
IFRpbWVyIG1fcHVyZ2VUaW1lcjsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkocmV2aXNp
b24gMjAxNDE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNiArMjYxLDI5IEBAIHZvaWQgcHJ1bmVTeXN0
ZW1GYWxsYmFja0ZvbnRzKCkKICAgICAgICAgZW50cnktPmZvbnRzLT5wcnVuZVN5c3RlbUZhbGxi
YWNrcygpOwogfQogCitzdGF0aWMgdm9pZCBwcmVjYWNoZVByaW1hcnlGYW1pbHkoY29uc3QgRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBGb250U2VsZWN0b3ImIGZvbnRT
ZWxlY3RvcikKK3sKKyAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiBmYW1pbGllczsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9udERlc2NyaXB0aW9uLmZhbWlseUNvdW50KCk7ICsraSkK
KyAgICAgICAgZmFtaWxpZXMuYXBwZW5kKGZvbnREZXNjcmlwdGlvbi5mYW1pbHlBdChpKSk7CisK
KyAgICAvLyBQcmltYXJ5IGZhbWlseSBsb29rdXAgZmFsbHMgYmFjayB0byB0aGUgc3RhbmRhcmQg
ZmFtaWx5LgorICAgIGZhbWlsaWVzLmFwcGVuZChzdGFuZGFyZEZhbWlseSk7CisKKyAgICBhdXRv
IHJlc29sdmVkUHJpbWFyeUZhbWlsaWVzID0gZm9udFNlbGVjdG9yLnJlc29sdmVGYW1pbGllcyhm
YW1pbGllcywgZm9udERlc2NyaXB0aW9uLCAnICcpOworCisgICAgVmVjdG9yPEF0b21pY1N0cmlu
Zz4gcmVzb2x2ZWRQcmltYXJ5RmFtaWx5TmFtZXM7CisgICAgZm9yIChhdXRvJiBmYW1pbHkgOiBy
ZXNvbHZlZFByaW1hcnlGYW1pbGllcykgeworICAgICAgICAvLyBUaGlzIGRvZXNuJ3QgaGFuZGxl
IHdlYiBmb250cyBmb3Igbm93LgorICAgICAgICBpZiAoZmFtaWx5LnVybCkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICByZXNvbHZlZFByaW1hcnlGYW1pbHlOYW1lcy5hcHBlbmQoZmFtaWx5
Lm5hbWUpOworICAgIH0KKworICAgIC8vIEFzeW5jaHJvbm91c2x5IGZpbmQgZmlyc3QgYXZhaWxh
YmxlIGZvbnQgYW5kIHByZWNhY2hlIGl0IHNvIGl0IGlzIGxpa2VseSB0byBiZSBhdmFpbGFibGUg
d2hlbiBuZWVkZWQuCisgICAgRm9udENhY2hlOjpzaW5nbGV0b24oKS5wcmVjYWNoZShyZXNvbHZl
ZFByaW1hcnlGYW1pbHlOYW1lcywgZm9udERlc2NyaXB0aW9uKTsKK30KKwogc3RhdGljIFJlZjxG
b250Q2FzY2FkZUZvbnRzPiByZXRyaWV2ZU9yQWRkQ2FjaGVkRm9udHMoY29uc3QgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBSZWZQdHI8Rm9udFNlbGVjdG9yPiYmIGZv
bnRTZWxlY3RvcikKIHsKICAgICBhdXRvIGtleSA9IG1ha2VGb250Q2FzY2FkZUNhY2hlS2V5KGZv
bnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsKQEAgLTI3MCw2ICsyOTMsOSBAQCBz
dGF0aWMgUmVmPEZvbnRDYXNjYWRlRm9udHM+IHJldHJpZXZlT3JBCiAgICAgaWYgKCFhZGRSZXN1
bHQuaXNOZXdFbnRyeSAmJiBrZXlzTWF0Y2goYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+a2V5
LCBrZXkpKQogICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+Zm9udHMu
Z2V0KCk7CiAKKyAgICBpZiAoZm9udFNlbGVjdG9yKQorICAgICAgICBwcmVjYWNoZVByaW1hcnlG
YW1pbHkoZm9udERlc2NyaXB0aW9uLCAqZm9udFNlbGVjdG9yKTsKKwogICAgIGF1dG8mIG5ld0Vu
dHJ5ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICBuZXdFbnRyeSA9IHN0ZDo6bWFr
ZV91bmlxdWU8Rm9udENhc2NhZGVDYWNoZUVudHJ5PihXVEZNb3ZlKGtleSksIEZvbnRDYXNjYWRl
Rm9udHM6OmNyZWF0ZShXVEZNb3ZlKGZvbnRTZWxlY3RvcikpKTsKICAgICBSZWY8Rm9udENhc2Nh
ZGVGb250cz4gZ2x5cGhzID0gbmV3RW50cnktPmZvbnRzLmdldCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgJKHJldmlzaW9uIDIw
MTQxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkZvbnRSYW5nZXMuaCIKKyNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KQEAgLTQ0LDYgKzQ1LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNMb2Fk
aW5nKCkgY29uc3QgPSAwOwogfTsKIAorc3RydWN0IFJlc29sdmVkRm9udEZhbWlseSB7CisgICAg
QXRvbWljU3RyaW5nIG5hbWU7CisgICAgT3B0aW9uYWw8VVJMPiB1cmw7Cit9OworCiBjbGFzcyBG
b250U2VsZWN0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250U2VsZWN0b3I+IHsKIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5Gb250U2VsZWN0b3IoKSB7IH0KQEAgLTU4LDYgKzY0LDggQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZvckludmFsaWRhdGlvbkNhbGxiYWNrcyhGb250
U2VsZWN0b3JDbGllbnQmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJGb3JJbnZh
bGlkYXRpb25DYWxsYmFja3MoRm9udFNlbGVjdG9yQ2xpZW50JikgPSAwOwogCisgICAgdmlydHVh
bCBWZWN0b3I8UmVzb2x2ZWRGb250RmFtaWx5PiByZXNvbHZlRmFtaWxpZXMoY29uc3QgVmVjdG9y
PEF0b21pY1N0cmluZz4mIGZhbWlsaWVzLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBVQ2hhcjMy
IGNoYXJhY3RlcikgPSAwOworCiAgICAgdmlydHVhbCB1bnNpZ25lZCB1bmlxdWVJZCgpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHZlcnNpb24oKSBjb25zdCA9IDA7CiB9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAkocmV2aXNpb24gMjAxNDE1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc5Niw0ICs3OTgsNzEgQEAgUmVmUHRyPEZvbnQ+
IEZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tGbwogICAgIHJldHVybiBmb250Rm9yUGxhdGZvcm1E
YXRhKGFsdGVybmF0ZUZvbnQpOwogfQogCisjaWYgRU5BQkxFKFBMQVRGT1JNX0ZPTlRfTE9PS1VQ
KQorc3RydWN0IEZvbnRDYWNoZTo6UHJlY2FjaGVUYXNrIHsKKyAgICBTdHJpbmcgZmFtaWx5Owor
ICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CisgICAgc3RkOjp1bmlxdWVfcHRy
PEZvbnRQbGF0Zm9ybURhdGE+IHJlc3VsdDsKKyAgICBQcmVjYWNoZUNvbXBsZXRpb25IYW5kbGVy
IGNvbXBsZXRpb25IYW5kbGVyOworICAgIHN0ZDo6YXRvbWljX2Jvb2wgaXNDYW5jZWxlZCB7IGZh
bHNlIH07Cit9OworCitGb250Q2FjaGU6OlByZWNhY2hlVGFzayYgRm9udENhY2hlOjpwbGF0Zm9y
bVByZWNhY2hlKGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbiwgUHJlY2FjaGVDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRp
b25IYW5kbGVyKQoreworICAgIHN0YXRpYyBXb3JrUXVldWUmIHF1ZXVlID0gV29ya1F1ZXVlOjpj
cmVhdGUoIm9yZy53ZWJraXQuZm9udC1wcmVjYWNoZSIsIFdvcmtRdWV1ZTo6VHlwZTo6U2VyaWFs
LCBXb3JrUXVldWU6OlFPUzo6VXNlckluaXRpYXRlZCkubGVha1JlZigpOworCisgICAgYXV0byB0
YXNrID0gc3RkOjptYWtlX3VuaXF1ZTxQcmVjYWNoZVRhc2s+KCk7CisgICAgdGFzay0+ZmFtaWx5
ID0gZmFtaWx5LnN0cmluZygpLmlzb2xhdGVkQ29weSgpOworICAgIHRhc2stPmZvbnREZXNjcmlw
dGlvbiA9IGZvbnREZXNjcmlwdGlvbjsKKyAgICB0YXNrLT5jb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpOworCisgICAgYXV0byYgcmVzdWx0VGFzayA9ICp0YXNr
OworCisgICAgY29uc3QgYXV0byYgd2hpdGVsaXN0ID0gZm9udFdoaXRlbGlzdCgpOworICAgIGlm
ICh3aGl0ZWxpc3Quc2l6ZSgpICYmICF3aGl0ZWxpc3QuY29udGFpbnMoZmFtaWx5KSkgeworICAg
ICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Rhc2sgPSB0YXNrLnJlbGVhc2UoKV0gewor
ICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFByZWNhY2hlVGFzaz4gZGVsZXRlcih0YXNrKTsK
KyAgICAgICAgICAgIHRhc2stPmNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIsIGZhbHNlKTsKKyAg
ICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHRUYXNrOworICAgIH0KKworICAgIHF1ZXVl
LmRpc3BhdGNoKFt0YXNrID0gdGFzay5yZWxlYXNlKCldIHsKKyAgICAgICAgaWYgKCF0YXNrLT5p
c0NhbmNlbGVkKSB7CisgICAgICAgICAgICBhdXRvIHRyYWl0cyA9IGNvbXB1dGVUcmFpdHModGFz
ay0+Zm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIGF1dG8gc2l6ZSA9IHRhc2stPmZvbnRE
ZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpOworICAgICAgICAgICAgYXV0byB3ZWlnaHQg
PSB0YXNrLT5mb250RGVzY3JpcHRpb24ud2VpZ2h0KCk7CisgICAgICAgICAgICBhdXRvIGZlYXR1
cmVTZXR0aW5ncyA9IHRhc2stPmZvbnREZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKTsKKyAg
ICAgICAgICAgIGF1dG8gdmFyaWFudFNldHRpbmdzID0gdGFzay0+Zm9udERlc2NyaXB0aW9uLnZh
cmlhbnRTZXR0aW5ncygpOworICAgICAgICAgICAgYXV0byB0ZXh0UmVuZGVyaW5nTW9kZSA9IHRh
c2stPmZvbnREZXNjcmlwdGlvbi50ZXh0UmVuZGVyaW5nTW9kZSgpOworCisgICAgICAgICAgICBh
dXRvIGN0Rm9udCA9IHBsYXRmb3JtRm9udFdpdGhGYW1pbHlTcGVjaWFsQ2FzZSh0YXNrLT5mYW1p
bHkuaXNvbGF0ZWRDb3B5KCksIHdlaWdodCwgdHJhaXRzLCBzaXplKTsKKyAgICAgICAgICAgIGlm
ICghY3RGb250KQorICAgICAgICAgICAgICAgIGN0Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRl
Rm9yQ1NTKHRhc2stPmZhbWlseS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCB0b0NvcmVUZXh0Rm9u
dFdlaWdodCh3ZWlnaHQpLCB0cmFpdHMsIHNpemUpKTsKKworICAgICAgICAgICAgY3RGb250ID0g
cHJlcGFyZVBsYXRmb3JtRm9udChjdEZvbnQuZ2V0KCksIHRleHRSZW5kZXJpbmdNb2RlLCBudWxs
cHRyLCBudWxscHRyLCBmZWF0dXJlU2V0dGluZ3MsIHZhcmlhbnRTZXR0aW5ncyk7CisKKyAgICAg
ICAgICAgIGlmIChjdEZvbnQpIHsKKyAgICAgICAgICAgICAgICBib29sIHN5bnRoZXRpY0JvbGQs
IHN5bnRoZXRpY09ibGlxdWU7CisgICAgICAgICAgICAgICAgc3RkOjp0aWUoc3ludGhldGljQm9s
ZCwgc3ludGhldGljT2JsaXF1ZSkgPSBjb21wdXRlTmVjZXNzYXJ5U3ludGhlc2lzKGN0Rm9udC5n
ZXQoKSwgdGFzay0+Zm9udERlc2NyaXB0aW9uKS5ib2xkT2JsaXF1ZVBhaXIoKTsKKworICAgICAg
ICAgICAgICAgIHRhc2stPnJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8Rm9udFBsYXRmb3JtRGF0
YT4oY3RGb250LmdldCgpLCBzaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCB0
YXNrLT5mb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSwgdGFzay0+Zm9udERlc2NyaXB0aW9u
LndpZHRoVmFyaWFudCgpLCB0ZXh0UmVuZGVyaW5nTW9kZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Rhc2tdIHsKKyAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQcmVjYWNoZVRhc2s+IGRlbGV0ZXIodGFzayk7CisgICAg
ICAgICAgICB0YXNrLT5jb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHRhc2stPnJlc3VsdCksIHRh
c2stPmlzQ2FuY2VsZWQpOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIHJldHVybiByZXN1
bHRUYXNrOworfQorCit2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1DYW5jZWxQcmVjYWNoZShGb250
Q2FjaGU6OlByZWNhY2hlVGFzayYgdGFzaykKK3sKKyAgICB0YXNrLmlzQ2FuY2VsZWQgPSB0cnVl
OworfQorI2VuZGlmCisKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280224</attachid>
            <date>2016-06-01 02:10:03 -0700</date>
            <delta_ts>2016-06-01 06:48:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>font-precache-8.patch</filename>
            <type>text/plain</type>
            <size>21130</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMTUzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDE2LTA1LTMxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBQcmVjYWNoZSBmb250cyBpbiBh
IHNlY29uZGFyeSB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1ODI0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFdlIGtub3cgdGhlIGZvbnQgZmFtaWxpZXMgYW5kIGRlc2NyaXB0aW9ucyB0byB1
c2Ugb24gc3R5bGUgcmVzb2x1dGlvbi4gVGhlIGFjdHVhbCBmb250cyBhcmUgb25seSBuZWVkZWQg
Zm9yCisgICAgICAgIGxheW91dC4gVGhlcmUgaXMgb2Z0ZW4gdGltZSB0byBsb2FkIGFuZCBjYWNo
ZSBmb250cyBhc3luY2hyb25vdXNseSBiZWZvcmUgdGhleSBhcmUgYWNjZXNzZWQuIFRoaXMgY2Fu
IHN1YnN0YW50aWxseQorICAgICAgICByZWR1Y2UgdGhlIHdvcmtsb2FkIG9mIHRoZSBtYWluIHRo
cmVhZC4KKworICAgICAgICAqIGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGb250RmFjZTo6Zm9udCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZTo6cmVz
b2x2ZUZhbWlsaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpoYXNTVkdGb250
RmFjZVNvdXJjZSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlLmg6CisgICAgICAgICogY3Nz
L0NTU0ZvbnRGYWNlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291
cmNlOjpmb250KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291cmNlOjp1cmwpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTb3VyY2U6OmlzU1ZHRm9udEZhY2VTb3VyY2Up
OgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5oOgorICAgICAgICAqIGNzcy9DU1NG
b250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpmYWxs
YmFja0ZvbnRBdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OnJlc29sdmVG
YW1pbGllcyk6CisKKyAgICAgICAgICAgIEFkZCBhIGZ1bmN0aW9uIGZvciByZXNvbHZpbmcgZm9u
dCBmYW1pbGllcyBvZiBhIGNhc2NhZGUgdG8gdGhlaXIgZmluYWwgdmFsdWVzLgorCisgICAgICAg
ICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIGNzcy9DU1NTZWdtZW50ZWRGb250
RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFjZTo6Zm9udFJh
bmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFjZTo6cmVzb2x2ZUZh
bWlsaWVzKToKKyAgICAgICAgKiBjc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zm9u
dFBsYXRmb3JtRGF0YUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OnByZWNhY2hlVGFza3NJblBy
b2dyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OmFsdGVybmF0ZUZhbWlseU5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FjaGU6OnByZWNhY2hlKToKKworICAgICAgICAgICAgUHJlY2FjaGUgZm9udHMgYnkgdHJ5
aW5nIHRvIGxvYWQgdGhlbSBhc3luY3Jvbm91c2x5IG9uZSBieSBvbmUuIE9uIHN1Y2Nlc3MgdGhl
IGZvbnQgaXMgY2FjaGVkIHRvIGZvbnQgcGxhdGZvcm0gZGF0YSBjYWNoZS4KKworICAgICAgICAo
V2ViQ29yZTo6Rm9udENhY2hlOjpzaW1pbGFyRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhY2hlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cHJ1bmVTeXN0ZW1GYWxsYmFja0ZvbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnByZWNhY2hlUHJpbWFyeUZhbWlseSk6CisKKyAgICAgICAgICAgIFdo
ZW4gaW5pdGlhbGl6aW5nIGEgbmV3IGZvbnQgY2FzY2FkZSByZXNvbHZlIGFueSBwbGF0Zm9ybSBm
b250cyB0byB0aGVpciBhY3R1YWwgbmFtZXMgdXNpbmcKKyAgICAgICAgICAgIEZvbnRTZWxlY3Rv
ciwgdGhlbiBwcmVjYWNoZSB0aGUgcHJpbWFyeSBmb250IGZvciB0aGUgY2FzY2FkZS4KKworICAg
ICAgICAgICAgV2ViIGZvbnRzIGFyZSBpZ25vcmVkIGZvciBub3cuCisKKyAgICAgICAgKFdlYkNv
cmU6OnJldHJpZXZlT3JBZGRDYWNoZWRGb250cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFNlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250U2VsZWN0b3I6On5Gb250
U2VsZWN0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNv
cmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6c3lzdGVtRmFsbGJhY2tG
b3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZvcm1QcmVj
YWNoZSk6CisKKyAgICAgICAgICAgIFRyeSB0byBpbml0aWFsaXplIGZvbnQgYXN5bmNocm9ub3Vz
bHkgaW4gYSBkaXNwYXRjaCBxdWV1ZSwgY2FsbCBjb21wbGV0aW9uIGhhbmRsZXIgb24gc3VjY2Vz
cyBvciBmYWlsdXJlLgorCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRmb3JtQ2Fu
Y2VsUHJlY2FjaGUpOgorCisgICAgICAgICAgICBDYW5jZWwgb25nb2luZyBwcmVjYWNoZSBvcGVy
YXRpb24uCisKIDIwMTYtMDUtMzEgIERhdmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAg
ICAgICAgUkVHUkVTU0lPTihyMjAxMDQwKTogUmVwYWludGluZyBvZiBtb3Zpbmcgb3ZlcmZsb3c6
aGlkZGVuIG9iamVjdHMgaXMgYnJva2VuLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRGYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2Uu
Y3BwCShyZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjAsNiArNTIwLDE5IEBAIFJlZlB0cjxGb250PiBDU1NG
b250RmFjZTo6Zm9udChjb25zdCBGb24KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorVmVjdG9y
PFJlc29sdmVkRm9udEZhbWlseT4gQ1NTRm9udEZhY2U6OnJlc29sdmVGYW1pbGllcygpIGNvbnN0
Cit7CisgICAgVmVjdG9yPFJlc29sdmVkRm9udEZhbWlseT4gcmVzdWx0OworICAgIGZvciAoYXV0
byYgc291cmNlIDogbV9zb3VyY2VzKSB7CisgICAgICAgIGlmIChzb3VyY2UtPmZhbWlseU5hbWVP
clVSSSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoc291
cmNlLT5zdGF0dXMoKSA9PSBDU1NGb250RmFjZVNvdXJjZTo6U3RhdHVzOjpGYWlsdXJlKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoeyBzb3VyY2UtPmZhbWls
eU5hbWVPclVSSSgpLCBzb3VyY2UtPnVybCgpIH0pOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCiAjaWYgRU5BQkxFKFNWR19GT05UUykKIGJvb2wgQ1NTRm9udEZhY2U6Omhhc1NWR0Zv
bnRGYWNlU291cmNlKCkgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250
RmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCShy
ZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2VSdWxl
LmgiCiAjaW5jbHVkZSAiRm9udEZlYXR1cmVTZXR0aW5ncy5oIgorI2luY2x1ZGUgIkZvbnRTZWxl
Y3Rvci5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtMTM1LDYgKzEzNiw4IEBAIHB1YmxpYzoKICAgICAvLyBX
ZSBkb24ndCBndWFyYW50ZWUgdGhhdCB0aGUgRm9udEZhY2Ugd3JhcHBlciB3aWxsIGJlIHRoZSBz
YW1lIGV2ZXJ5IHRpbWUgeW91IGFzayBmb3IgaXQuCiAgICAgUmVmPEZvbnRGYWNlPiB3cmFwcGVy
KCk7CiAKKyAgICBWZWN0b3I8UmVzb2x2ZWRGb250RmFtaWx5PiByZXNvbHZlRmFtaWxpZXMoKSBj
b25zdDsKKwogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgYm9vbCBoYXNTVkdGb250RmFjZVNv
dXJjZSgpIGNvbnN0OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFj
ZVNvdXJjZS5jcHAJKHJldmlzaW9uIDIwMTQxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250RmFjZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw2ICsxODgsMTMgQEAgUmVm
UHRyPEZvbnQ+IENTU0ZvbnRGYWNlU291cmNlOjpmb250KGNvbgogICAgIHJldHVybiBudWxscHRy
OwogfQogCitPcHRpb25hbDxVUkw+IENTU0ZvbnRGYWNlU291cmNlOjp1cmwoKSBjb25zdAorewor
ICAgIGlmICghbV9mb250KQorICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICByZXR1cm4gbV9m
b250LT51cmwoKTsKK30KKwogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiBib29sIENTU0ZvbnRGYWNl
U291cmNlOjppc1NWR0ZvbnRGYWNlU291cmNlKCkgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCShyZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkRm9udENsaWVudC5oIgogI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8cnVudGltZS9BcnJh
eUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIApAQCAt
NzEsNiArNzIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1NWR0ZvbnRGYWNlU291cmNlKCkgY29u
c3Q7CiAjZW5kaWYKIAorICAgIE9wdGlvbmFsPFVSTD4gdXJsKCkgY29uc3Q7CisKIHByaXZhdGU6
CiAgICAgdm9pZCBmb250TG9hZGVkKENhY2hlZEZvbnQmKSBvdmVycmlkZTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDIwMTQxNSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzQsNCArMzM0LDIyIEBAIFJlZlB0cjxGb250PiBDU1NGb250U2VsZWN0b3I6OmZhbGxiYWNrRm8K
ICAgICByZXR1cm4gRm9udENhY2hlOjpzaW5nbGV0b24oKS5mb250Rm9yRmFtaWx5KGZvbnREZXNj
cmlwdGlvbiwgc2V0dGluZ3MtPnBpY3RvZ3JhcGhGb250RmFtaWx5KCkpOwogfQogCitWZWN0b3I8
UmVzb2x2ZWRGb250RmFtaWx5PiBDU1NGb250U2VsZWN0b3I6OnJlc29sdmVGYW1pbGllcyhjb25z
dCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgZmFtaWxpZXMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uLCBVQ2hhcjMyIGNoYXJhY3RlcikKK3sKKyAgICBWZWN0b3I8UmVzb2x2
ZWRGb250RmFtaWx5PiByZXN1bHQ7CisKKyAgICBmb3IgKGF1dG8mIGZhbWlseSA6IGZhbWlsaWVz
KSB7CisgICAgICAgIGlmIChmYW1pbHkuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGF1dG8qIHNlZ21lbnRlZEZhY2UgPSBtX2Nzc0ZvbnRGYWNlU2V0LT5nZXRGb250
RmFjZShmb250RGVzY3JpcHRpb24udHJhaXRzTWFzaygpLCBmYW1pbHkpOworICAgICAgICBpZiAo
IXNlZ21lbnRlZEZhY2UpIHsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyByZXNvbHZlR2Vu
ZXJpY0ZhbWlseShtX2RvY3VtZW50LCBmb250RGVzY3JpcHRpb24sIGZhbWlseSksIHsgfSB9KTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC5hcHBlbmRW
ZWN0b3Ioc2VnbWVudGVkRmFjZS0+cmVzb2x2ZUZhbWlsaWVzKGNoYXJhY3RlcikpOworICAgIH0K
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250U2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dFNlbGVjdG9yLmgJKHJldmlzaW9uIDIwMTQxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
b250U2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsOCBAQCBwdWJsaWM6CiAg
ICAgc2l6ZV90IGZhbGxiYWNrRm9udENvdW50KCkgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPEZvbnQ+
IGZhbGxiYWNrRm9udEF0KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIHNpemVfdCkgb3ZlcnJpZGU7
CiAKKyAgICBWZWN0b3I8UmVzb2x2ZWRGb250RmFtaWx5PiByZXNvbHZlRmFtaWxpZXMoY29uc3Qg
VmVjdG9yPEF0b21pY1N0cmluZz4mLCBjb25zdCBGb250RGVzY3JpcHRpb24mLCBVQ2hhcjMyKSBv
dmVycmlkZTsKKwogICAgIHZvaWQgY2xlYXJEb2N1bWVudCgpOwogCiAgICAgdm9pZCBhZGRGb250
RmFjZVJ1bGUoU3R5bGVSdWxlRm9udEZhY2UmLCBib29sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVz
ZXJBZ2VudFNoYWRvd1RyZWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRl
ZEZvbnRGYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VnbWVu
dGVkRm9udEZhY2UuY3BwCShyZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNCArMTM4LDIw
IEBAIEZvbnRSYW5nZXMgQ1NTU2VnbWVudGVkRm9udEZhY2U6OmZvbnRSYW4KICAgICByZXR1cm4g
cmVzdWx0OwogfQogCitWZWN0b3I8UmVzb2x2ZWRGb250RmFtaWx5PiBDU1NTZWdtZW50ZWRGb250
RmFjZTo6cmVzb2x2ZUZhbWlsaWVzKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAoreworICAgIGZv
ciAoYXV0byYgZmFjZSA6IG1fZm9udEZhY2VzKSB7CisgICAgICAgIGJvb2wgaW5SYW5nZSA9IGZh
Y2UtPnJhbmdlcygpLmlzRW1wdHkoKTsKKyAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IGZhY2Ut
PnJhbmdlcygpKSB7CisgICAgICAgICAgICBpZiAoY2hhcmFjdGVyID49IHJhbmdlLmZyb20gJiYg
Y2hhcmFjdGVyIDw9IHJhbmdlLnRvKSB7CisgICAgICAgICAgICAgICAgaW5SYW5nZSA9IHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGluUmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gZmFjZS0+cmVzb2x2ZUZhbWlsaWVz
KCk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oCShyZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2UuaCIKICNpbmNsdWRlICJGb250Q2Fj
aGUuaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpA
QCAtNTcsNiArNTgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWYoKSBvdmVycmlkZSB7IFJlZkNv
dW50ZWQ8Q1NTU2VnbWVudGVkRm9udEZhY2U+OjpyZWYoKTsgfQogICAgIHZvaWQgZGVyZWYoKSBv
dmVycmlkZSB7IFJlZkNvdW50ZWQ8Q1NTU2VnbWVudGVkRm9udEZhY2U+OjpkZXJlZigpOyB9CiAK
KyAgICBWZWN0b3I8UmVzb2x2ZWRGb250RmFtaWx5PiByZXNvbHZlRmFtaWxpZXMoVUNoYXIzMiBj
aGFyYWN0ZXIpIGNvbnN0OworCiBwcml2YXRlOgogICAgIENTU1NlZ21lbnRlZEZvbnRGYWNlKCk7
CiAgICAgdm9pZCBmb250TG9hZGVkKENTU0ZvbnRGYWNlJikgb3ZlcnJpZGU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHJldmlzaW9u
IDIwMTQxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgICAgICwg
bV9mb250RmFjZUZlYXR1cmVzKGZvbnRGYWNlRmVhdHVyZXMgPyAqZm9udEZhY2VGZWF0dXJlcyA6
IEZvbnRGZWF0dXJlU2V0dGluZ3MoKSkKICAgICAgICAgLCBtX2ZvbnRGYWNlVmFyaWFudFNldHRp
bmdzKGZvbnRGYWNlVmFyaWFudFNldHRpbmdzID8gKmZvbnRGYWNlVmFyaWFudFNldHRpbmdzIDog
Rm9udFZhcmlhbnRTZXR0aW5ncygpKQogICAgIHsgfQorICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleShjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmKSA9IGRlZmF1bHQ7CiAKICAgICBl
eHBsaWNpdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoSGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlw
ZSB0KQogICAgICAgICA6IG1fZm9udERlc2NyaXB0aW9uS2V5KHQpCkBAIC0xNTksNiArMTYwLDE2
IEBAIHN0YXRpYyBGb250UGxhdGZvcm1EYXRhQ2FjaGUmIGZvbnRQbGF0Zm8KICAgICByZXR1cm4g
Y2FjaGU7CiB9CiAKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKFBMQVRGT1JNX0ZPTlRf
TE9PS1VQKQordXNpbmcgUHJlY2FjaGVNYXAgPSBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleSwgRm9udENhY2hlOjpQcmVjYWNoZVRhc2sqLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlI
YXNoLCBXVEY6OlNpbXBsZUNsYXNzSGFzaFRyYWl0czxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXk+
PjsKKworc3RhdGljIFByZWNhY2hlTWFwJiBwcmVjYWNoZVRhc2tzSW5Qcm9ncmVzcygpCit7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFByZWNhY2hlTWFwPiBtYXA7CisgICAgcmV0dXJuIG1h
cDsKK30KKyNlbmRpZgorCiBzdGF0aWMgQXRvbWljU3RyaW5nIGFsdGVybmF0ZUZhbWlseU5hbWUo
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQogewogICAgIHN3aXRjaCAoZmFtaWx5TmFt
ZS5sZW5ndGgoKSkgewpAQCAtMjQzLDYgKzI1NCwxMiBAQCBGb250UGxhdGZvcm1EYXRhKiBGb250
Q2FjaGU6OmdldENhY2hlZEZvCiAKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5KGZh
bWlseU5hbWUsIGZvbnREZXNjcmlwdGlvbiwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VWYXJp
YW50U2V0dGluZ3MpOwogCisjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShQTEFURk9STV9G
T05UX0xPT0tVUCkKKyAgICBhdXRvKiBwcmVjYWNoZVRhc2sgPSBwcmVjYWNoZVRhc2tzSW5Qcm9n
cmVzcygpLmdldChrZXkpOworICAgIGlmIChwcmVjYWNoZVRhc2spCisgICAgICAgIHBsYXRmb3Jt
Q2FuY2VsUHJlY2FjaGUoKnByZWNhY2hlVGFzayk7CisjZW5kaWYKKwogICAgIGF1dG8gYWRkUmVz
dWx0ID0gZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkuYWRkKGtleSwgbnVsbHB0cik7CiAgICAgRm9u
dFBsYXRmb3JtRGF0YUNhY2hlOjppdGVyYXRvciBpdCA9IGFkZFJlc3VsdC5pdGVyYXRvcjsKICAg
ICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKQEAgLTQ4OSw2ICs1MDYsNjggQEAgdm9pZCBG
b250Q2FjaGU6OmludmFsaWRhdGUoKQogICAgIHB1cmdlSW5hY3RpdmVGb250RGF0YSgpOwogfQog
CisjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShQTEFURk9STV9GT05UX0xPT0tVUCkKK3Zv
aWQgRm9udENhY2hlOjpwcmVjYWNoZShjb25zdCBWZWN0b3I8QXRvbWljU3RyaW5nPiYgcmVzb2x2
ZWRGYW1pbGllcywgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCit7Cisg
ICAgaWYgKHJlc29sdmVkRmFtaWxpZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAg
YXV0byYgZmFtaWx5ID0gcmVzb2x2ZWRGYW1pbGllcy5maXJzdCgpOworCisgICAgRm9udFBsYXRm
b3JtRGF0YUNhY2hlS2V5IGtleShmYW1pbHksIGZvbnREZXNjcmlwdGlvbiwgbnVsbHB0ciwgbnVs
bHB0cik7CisKKyAgICAvLyBNYXliZSB3ZSBoYXZlIGl0IGFscmVhZHk/CisgICAgYXV0byBpdCA9
IGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmZpbmQoa2V5KTsKKyAgICBpZiAoaXQgIT0gZm9udFBs
YXRmb3JtRGF0YUNhY2hlKCkuZW5kKCkpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBXZSBhbHJlYWR5IGtub3cgdGhpcyBmb250IGlz
bid0IGF2YWlsYWJsZS4gVHJ5IHRoZSBuZXh0LgorICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5n
PiByZW1haW5pbmdGYW1pbGllczsKKyAgICAgICAgcmVtYWluaW5nRmFtaWxpZXMuYXBwZW5kUmFu
Z2UocmVzb2x2ZWRGYW1pbGllcy5iZWdpbigpICsgMSwgcmVzb2x2ZWRGYW1pbGllcy5lbmQoKSk7
CisgICAgICAgIHByZWNhY2hlKHJlbWFpbmluZ0ZhbWlsaWVzLCBmb250RGVzY3JpcHRpb24pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byB0YXNrQWRkID0gcHJlY2FjaGVUYXNr
c0luUHJvZ3Jlc3MoKS5hZGQoa2V5LCBudWxscHRyKTsKKyAgICBpZiAoIXRhc2tBZGQuaXNOZXdF
bnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgdGFzayA9IHBsYXRmb3JtUHJlY2Fj
aGUoZmFtaWx5LCBmb250RGVzY3JpcHRpb24sIFtrZXksIHJlc29sdmVkRmFtaWxpZXMsIGZvbnRE
ZXNjcmlwdGlvbl0gKGF1dG8gcGxhdGZvcm1EYXRhLCBib29sIHdhc0NhbmNlbGVkKSB7CisgICAg
ICAgIHByZWNhY2hlVGFza3NJblByb2dyZXNzKCkucmVtb3ZlKGtleSk7CisKKyAgICAgICAgaWYg
KHdhc0NhbmNlbGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghcGxhdGZv
cm1EYXRhKSB7CisgICAgICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiByZW1haW5pbmdGYW1p
bGllczsKKworICAgICAgICAgICAgYXV0byBhbHRlcm5hdGVOYW1lID0gYWx0ZXJuYXRlRmFtaWx5
TmFtZShyZXNvbHZlZEZhbWlsaWVzLmZpcnN0KCkpOworICAgICAgICAgICAgaWYgKCFhbHRlcm5h
dGVOYW1lLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgcmVtYWluaW5nRmFtaWxpZXMgPSBy
ZXNvbHZlZEZhbWlsaWVzOworICAgICAgICAgICAgICAgIHJlbWFpbmluZ0ZhbWlsaWVzLmZpcnN0
KCkgPSBhbHRlcm5hdGVOYW1lOworICAgICAgICAgICAgICAgIHNpbmdsZXRvbigpLnByZWNhY2hl
KHJlbWFpbmluZ0ZhbWlsaWVzLCBmb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9udFBsYXRmb3JtRGF0YUNhY2hl
KCkuYWRkKGtleSwgbnVsbHB0cik7CisKKyAgICAgICAgICAgIHJlbWFpbmluZ0ZhbWlsaWVzLmFw
cGVuZFJhbmdlKHJlc29sdmVkRmFtaWxpZXMuYmVnaW4oKSArIDEsIHJlc29sdmVkRmFtaWxpZXMu
ZW5kKCkpOworCisgICAgICAgICAgICBzaW5nbGV0b24oKS5wcmVjYWNoZShyZW1haW5pbmdGYW1p
bGllcywgZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmFkZChrZXksIFdURk1vdmUocGxhdGZv
cm1EYXRhKSk7CisgICAgfSk7CisKKyAgICB0YXNrQWRkLml0ZXJhdG9yLT52YWx1ZSA9ICZ0YXNr
OworfQorI2Vsc2UKK3ZvaWQgRm9udENhY2hlOjpwcmVjYWNoZShjb25zdCBWZWN0b3I8QXRvbWlj
U3RyaW5nPiYsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpCit7Cit9CisjZW5kaWYKKwogI2lmICFQ
TEFURk9STShDT0NPQSkKIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnNpbWlsYXJGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYpCiB7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAkocmV2aXNpb24gMjAxNDE1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE5Myw2ICsxOTMsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
UmVmPEZvbnQ+IGZvbnRGb3JQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwog
ICAgIFJlZlB0cjxGb250PiBzaW1pbGFyRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBjb25z
dCBBdG9taWNTdHJpbmcmIGZhbWlseSk7CiAKKyAgICB2b2lkIHByZWNhY2hlKGNvbnN0IFZlY3Rv
cjxBdG9taWNTdHJpbmc+JiByZXNvbHZlZEZhbWlsaWVzLCBjb25zdCBGb250RGVzY3JpcHRpb24m
KTsKKwogICAgIHZvaWQgYWRkQ2xpZW50KEZvbnRTZWxlY3RvciYpOwogICAgIHZvaWQgcmVtb3Zl
Q2xpZW50KEZvbnRTZWxlY3RvciYpOwogCkBAIC0yMTIsNiArMjE0LDggQEAgcHVibGljOgogICAg
IFJlZlB0cjxPcGVuVHlwZVZlcnRpY2FsRGF0YT4gdmVydGljYWxEYXRhKGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmKTsKICNlbmRpZgogCisgICAgc3RydWN0IFByZWNhY2hlVGFzazsKKwogcHJpdmF0
ZToKICAgICBGb250Q2FjaGUoKTsKICAgICB+Rm9udENhY2hlKCkgPSBkZWxldGU7CkBAIC0yMjcs
NiArMjMxLDEyIEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBs
YXRmb3JtRGF0YT4gY3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyog
Zm9udEZhY2VGZWF0dXJlcywgY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyogZm9udEZhY2VWYXJp
YW50U2V0dGluZ3MpOwogCisjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShQTEFURk9STV9G
T05UX0xPT0tVUCkKKyAgICB1c2luZyBQcmVjYWNoZUNvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpm
dW5jdGlvbjx2b2lkIChzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4sIGJvb2wgd2Fz
Q2FuY2VsZWQpPjsKKyAgICBQcmVjYWNoZVRhc2smIHBsYXRmb3JtUHJlY2FjaGUoY29uc3QgQXRv
bWljU3RyaW5nJiBmYW1pbHksIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIFByZWNhY2hlQ29tcGxl
dGlvbkhhbmRsZXImJik7CisgICAgdm9pZCBwbGF0Zm9ybUNhbmNlbFByZWNhY2hlKFByZWNhY2hl
VGFzayYpOworI2VuZGlmCisKICAgICBUaW1lciBtX3B1cmdlVGltZXI7CiAKICNpZiBQTEFURk9S
TShDT0NPQSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNj
YWRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZS5jcHAJKHJldmlzaW9uIDIwMTQxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDYgKzI2
MSwyOSBAQCB2b2lkIHBydW5lU3lzdGVtRmFsbGJhY2tGb250cygpCiAgICAgICAgIGVudHJ5LT5m
b250cy0+cHJ1bmVTeXN0ZW1GYWxsYmFja3MoKTsKIH0KIAorc3RhdGljIHZvaWQgcHJlY2FjaGVQ
cmltYXJ5RmFtaWx5KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgRm9udFNlbGVjdG9yJiBmb250U2VsZWN0b3IpCit7CisgICAgVmVjdG9yPEF0b21pY1N0cmlu
Zz4gZmFtaWxpZXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvbnREZXNjcmlwdGlv
bi5mYW1pbHlDb3VudCgpOyArK2kpCisgICAgICAgIGZhbWlsaWVzLmFwcGVuZChmb250RGVzY3Jp
cHRpb24uZmFtaWx5QXQoaSkpOworCisgICAgLy8gUHJpbWFyeSBmYW1pbHkgbG9va3VwIGZhbGxz
IGJhY2sgdG8gdGhlIHN0YW5kYXJkIGZhbWlseS4KKyAgICBmYW1pbGllcy5hcHBlbmQoc3RhbmRh
cmRGYW1pbHkpOworCisgICAgYXV0byByZXNvbHZlZFByaW1hcnlGYW1pbGllcyA9IGZvbnRTZWxl
Y3Rvci5yZXNvbHZlRmFtaWxpZXMoZmFtaWxpZXMsIGZvbnREZXNjcmlwdGlvbiwgJyAnKTsKKwor
ICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHJlc29sdmVkUHJpbWFyeUZhbWlseU5hbWVzOworICAg
IGZvciAoYXV0byYgZmFtaWx5IDogcmVzb2x2ZWRQcmltYXJ5RmFtaWxpZXMpIHsKKyAgICAgICAg
Ly8gVGhpcyBkb2Vzbid0IGhhbmRsZSB3ZWIgZm9udHMgZm9yIG5vdy4KKyAgICAgICAgaWYgKGZh
bWlseS51cmwpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmVzb2x2ZWRQcmltYXJ5RmFt
aWx5TmFtZXMuYXBwZW5kKGZhbWlseS5uYW1lKTsKKyAgICB9CisKKyAgICAvLyBBc3luY2hyb25v
dXNseSBmaW5kIGZpcnN0IGF2YWlsYWJsZSBmb250IGFuZCBwcmVjYWNoZSBpdCBzbyBpdCBpcyBs
aWtlbHkgdG8gYmUgYXZhaWxhYmxlIHdoZW4gbmVlZGVkLgorICAgIEZvbnRDYWNoZTo6c2luZ2xl
dG9uKCkucHJlY2FjaGUocmVzb2x2ZWRQcmltYXJ5RmFtaWx5TmFtZXMsIGZvbnREZXNjcmlwdGlv
bik7Cit9CisKIHN0YXRpYyBSZWY8Rm9udENhc2NhZGVGb250cz4gcmV0cmlldmVPckFkZENhY2hl
ZEZvbnRzKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgUmVm
UHRyPEZvbnRTZWxlY3Rvcj4mJiBmb250U2VsZWN0b3IpCiB7CiAgICAgYXV0byBrZXkgPSBtYWtl
Rm9udENhc2NhZGVDYWNoZUtleShmb250RGVzY3JpcHRpb24sIGZvbnRTZWxlY3Rvci5nZXQoKSk7
CkBAIC0yNzAsNiArMjkzLDkgQEAgc3RhdGljIFJlZjxGb250Q2FzY2FkZUZvbnRzPiByZXRyaWV2
ZU9yQQogICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkgJiYga2V5c01hdGNoKGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUtPmtleSwga2V5KSkKICAgICAgICAgcmV0dXJuIGFkZFJlc3VsdC5p
dGVyYXRvci0+dmFsdWUtPmZvbnRzLmdldCgpOwogCisgICAgaWYgKGZvbnRTZWxlY3RvcikKKyAg
ICAgICAgcHJlY2FjaGVQcmltYXJ5RmFtaWx5KGZvbnREZXNjcmlwdGlvbiwgKmZvbnRTZWxlY3Rv
cik7CisKICAgICBhdXRvJiBuZXdFbnRyeSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAg
ICAgbmV3RW50cnkgPSBzdGQ6Om1ha2VfdW5pcXVlPEZvbnRDYXNjYWRlQ2FjaGVFbnRyeT4oV1RG
TW92ZShrZXkpLCBGb250Q2FzY2FkZUZvbnRzOjpjcmVhdGUoV1RGTW92ZShmb250U2VsZWN0b3Ip
KSk7CiAgICAgUmVmPEZvbnRDYXNjYWRlRm9udHM+IGdseXBocyA9IG5ld0VudHJ5LT5mb250cy5n
ZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRT
ZWxlY3Rvci5oCShyZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250U2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGb250UmFuZ2VzLmgiCisjaW5jbHVkZSAiVVJMLmgi
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC00NCw2ICs0NSwxMSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0ID0gMDsKIH07CiAKK3N0cnVjdCBSZXNv
bHZlZEZvbnRGYW1pbHkgeworICAgIEF0b21pY1N0cmluZyBuYW1lOworICAgIE9wdGlvbmFsPFVS
TD4gdXJsOworfTsKKwogY2xhc3MgRm9udFNlbGVjdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9u
dFNlbGVjdG9yPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+Rm9udFNlbGVjdG9yKCkgeyB9CkBA
IC01OCw2ICs2NCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJbnZh
bGlkYXRpb25DYWxsYmFja3MoRm9udFNlbGVjdG9yQ2xpZW50JikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCB1bnJlZ2lzdGVyRm9ySW52YWxpZGF0aW9uQ2FsbGJhY2tzKEZvbnRTZWxlY3RvckNsaWVu
dCYpID0gMDsKIAorICAgIHZpcnR1YWwgVmVjdG9yPFJlc29sdmVkRm9udEZhbWlseT4gcmVzb2x2
ZUZhbWlsaWVzKGNvbnN0IFZlY3RvcjxBdG9taWNTdHJpbmc+JiBmYW1pbGllcywgY29uc3QgRm9u
dERlc2NyaXB0aW9uJiwgVUNoYXIzMiBjaGFyYWN0ZXIpID0gMDsKKwogICAgIHZpcnR1YWwgdW5z
aWduZWQgdW5pcXVlSWQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCB2ZXJzaW9u
KCkgY29uc3QgPSAwOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAJKHJldmlzaW9u
IDIwMTQxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YWNoZUNvcmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1
ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03OTYsNCAr
Nzk4LDcxIEBAIFJlZlB0cjxGb250PiBGb250Q2FjaGU6OnN5c3RlbUZhbGxiYWNrRm8KICAgICBy
ZXR1cm4gZm9udEZvclBsYXRmb3JtRGF0YShhbHRlcm5hdGVGb250KTsKIH0KIAorI2lmIEVOQUJM
RShQTEFURk9STV9GT05UX0xPT0tVUCkKK3N0cnVjdCBGb250Q2FjaGU6OlByZWNhY2hlVGFzayB7
CisgICAgU3RyaW5nIGZhbWlseTsKKyAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiByZXN1bHQ7CisgICAgUHJl
Y2FjaGVDb21wbGV0aW9uSGFuZGxlciBjb21wbGV0aW9uSGFuZGxlcjsKKyAgICBzdGQ6OmF0b21p
Y19ib29sIGlzQ2FuY2VsZWQgeyBmYWxzZSB9OworfTsKKworRm9udENhY2hlOjpQcmVjYWNoZVRh
c2smIEZvbnRDYWNoZTo6cGxhdGZvcm1QcmVjYWNoZShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWls
eSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFByZWNhY2hlQ29tcGxl
dGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBzdGF0aWMgV29ya1F1ZXVl
JiBxdWV1ZSA9IFdvcmtRdWV1ZTo6Y3JlYXRlKCJvcmcud2Via2l0LmZvbnQtcHJlY2FjaGUiLCBX
b3JrUXVldWU6OlR5cGU6OlNlcmlhbCwgV29ya1F1ZXVlOjpRT1M6OlVzZXJJbml0aWF0ZWQpLmxl
YWtSZWYoKTsKKworICAgIGF1dG8gdGFzayA9IHN0ZDo6bWFrZV91bmlxdWU8UHJlY2FjaGVUYXNr
PigpOworICAgIHRhc2stPmZhbWlseSA9IGZhbWlseS5zdHJpbmcoKS5pc29sYXRlZENvcHkoKTsK
KyAgICB0YXNrLT5mb250RGVzY3JpcHRpb24gPSBmb250RGVzY3JpcHRpb247CisgICAgdGFzay0+
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKTsKKworICAgIGF1
dG8mIHJlc3VsdFRhc2sgPSAqdGFzazsKKworICAgIGNvbnN0IGF1dG8mIHdoaXRlbGlzdCA9IGZv
bnRXaGl0ZWxpc3QoKTsKKyAgICBpZiAod2hpdGVsaXN0LnNpemUoKSAmJiAhd2hpdGVsaXN0LmNv
bnRhaW5zKGZhbWlseSkpIHsKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0YXNr
ID0gdGFzay5yZWxlYXNlKCldIHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxQcmVjYWNo
ZVRhc2s+IGRlbGV0ZXIodGFzayk7CisgICAgICAgICAgICB0YXNrLT5jb21wbGV0aW9uSGFuZGxl
cihudWxscHRyLCBmYWxzZSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0VGFz
azsKKyAgICB9CisKKyAgICBxdWV1ZS5kaXNwYXRjaChbdGFzayA9IHRhc2sucmVsZWFzZSgpXSB7
CisgICAgICAgIGlmICghdGFzay0+aXNDYW5jZWxlZCkgeworICAgICAgICAgICAgYXV0byB0cmFp
dHMgPSBjb21wdXRlVHJhaXRzKHRhc2stPmZvbnREZXNjcmlwdGlvbik7CisgICAgICAgICAgICBh
dXRvIHNpemUgPSB0YXNrLT5mb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKTsKKyAg
ICAgICAgICAgIGF1dG8gd2VpZ2h0ID0gdGFzay0+Zm9udERlc2NyaXB0aW9uLndlaWdodCgpOwor
ICAgICAgICAgICAgYXV0byBmZWF0dXJlU2V0dGluZ3MgPSB0YXNrLT5mb250RGVzY3JpcHRpb24u
ZmVhdHVyZVNldHRpbmdzKCk7CisgICAgICAgICAgICBhdXRvIHZhcmlhbnRTZXR0aW5ncyA9IHRh
c2stPmZvbnREZXNjcmlwdGlvbi52YXJpYW50U2V0dGluZ3MoKTsKKyAgICAgICAgICAgIGF1dG8g
dGV4dFJlbmRlcmluZ01vZGUgPSB0YXNrLT5mb250RGVzY3JpcHRpb24udGV4dFJlbmRlcmluZ01v
ZGUoKTsKKworICAgICAgICAgICAgYXV0byBjdEZvbnQgPSBwbGF0Zm9ybUZvbnRXaXRoRmFtaWx5
U3BlY2lhbENhc2UodGFzay0+ZmFtaWx5Lmlzb2xhdGVkQ29weSgpLCB3ZWlnaHQsIHRyYWl0cywg
c2l6ZSk7CisgICAgICAgICAgICBpZiAoIWN0Rm9udCkKKyAgICAgICAgICAgICAgICBjdEZvbnQg
PSBhZG9wdENGKENURm9udENyZWF0ZUZvckNTUyh0YXNrLT5mYW1pbHkuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKSwgdG9Db3JlVGV4dEZvbnRXZWlnaHQod2VpZ2h0KSwgdHJhaXRzLCBzaXplKSk7CisK
KyAgICAgICAgICAgIGN0Rm9udCA9IHByZXBhcmVQbGF0Zm9ybUZvbnQoY3RGb250LmdldCgpLCB0
ZXh0UmVuZGVyaW5nTW9kZSwgbnVsbHB0ciwgbnVsbHB0ciwgZmVhdHVyZVNldHRpbmdzLCB2YXJp
YW50U2V0dGluZ3MpOworCisgICAgICAgICAgICBpZiAoY3RGb250KSB7CisgICAgICAgICAgICAg
ICAgYm9vbCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlOworICAgICAgICAgICAgICAg
IHN0ZDo6dGllKHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY09ibGlxdWUpID0gY29tcHV0ZU5lY2Vz
c2FyeVN5bnRoZXNpcyhjdEZvbnQuZ2V0KCksIHRhc2stPmZvbnREZXNjcmlwdGlvbikuYm9sZE9i
bGlxdWVQYWlyKCk7CisKKyAgICAgICAgICAgICAgICB0YXNrLT5yZXN1bHQgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEZvbnRQbGF0Zm9ybURhdGE+KGN0Rm9udC5nZXQoKSwgc2l6ZSwgc3ludGhldGljQm9s
ZCwgc3ludGhldGljT2JsaXF1ZSwgdGFzay0+Zm9udERlc2NyaXB0aW9uLm9yaWVudGF0aW9uKCks
IHRhc2stPmZvbnREZXNjcmlwdGlvbi53aWR0aFZhcmlhbnQoKSwgdGV4dFJlbmRlcmluZ01vZGUp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFt0YXNrXSB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJlY2FjaGVUYXNr
PiBkZWxldGVyKHRhc2spOworICAgICAgICAgICAgdGFzay0+Y29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZSh0YXNrLT5yZXN1bHQpLCB0YXNrLT5pc0NhbmNlbGVkKTsKKyAgICAgICAgfSk7CisgICAg
fSk7CisKKyAgICByZXR1cm4gcmVzdWx0VGFzazsKK30KKwordm9pZCBGb250Q2FjaGU6OnBsYXRm
b3JtQ2FuY2VsUHJlY2FjaGUoRm9udENhY2hlOjpQcmVjYWNoZVRhc2smIHRhc2spCit7CisgICAg
dGFzay5pc0NhbmNlbGVkID0gdHJ1ZTsKK30KKyNlbmRpZgorCiB9Cg==
</data>
<flag name="review"
          id="304188"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280231</attachid>
            <date>2016-06-01 06:48:14 -0700</date>
            <delta_ts>2016-06-01 06:48:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>font-precache-10.patch</filename>
            <type>text/plain</type>
            <size>26138</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMTU1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBACisyMDE2LTA1LTMxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBQcmVjYWNoZSBmb250cyBpbiBh
IHNlY29uZGFyeSB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1ODI0MworCisgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCisK
KyAgICAgICAgV2Uga25vdyB0aGUgZm9udCBmYW1pbGllcyBhbmQgZGVzY3JpcHRpb25zIHRvIHVz
ZSBvbiBzdHlsZSByZXNvbHV0aW9uLiBUaGUgYWN0dWFsIGZvbnRzIGFyZSBvbmx5IG5lZWRlZCBm
b3IKKyAgICAgICAgbGF5b3V0LiBUaGVyZSBpcyBvZnRlbiB0aW1lIHRvIGxvYWQgYW5kIGNhY2hl
IGZvbnRzIGFzeW5jaHJvbm91c2x5IGJlZm9yZSB0aGV5IGFyZSBhY2Nlc3NlZC4gVGhpcyBjYW4g
c3Vic3RhbnRpYWxseQorICAgICAgICByZWR1Y2UgZm9udCByZWxhdGVkIHdvcmtsb2FkIGluIHRo
ZSBtYWluIHRocmVhZC4KKworICAgICAgICAqIGNzcy9DU1NGb250RmFjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NGb250RmFjZTo6Zm9udCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250
RmFjZTo6cmVzb2x2ZUZhbWlsaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlOjpo
YXNTVkdGb250RmFjZVNvdXJjZSk6CisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlLmg6CisgICAg
ICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zv
bnRGYWNlU291cmNlOjpmb250KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291cmNl
Ojp1cmwpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTb3VyY2U6OmlzU1ZHRm9udEZh
Y2VTb3VyY2UpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5oOgorICAgICAgICAq
IGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVj
dG9yOjpmYWxsYmFja0ZvbnRBdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6
OnJlc29sdmVGYW1pbGllcyk6CisKKyAgICAgICAgICAgIEFkZCBhIGZ1bmN0aW9uIGZvciByZXNv
bHZpbmcgZm9udCBmYW1pbGllcyBvZiBhIGNhc2NhZGUgdG8gdGhlaXIgZmluYWwgdmFsdWVzLgor
CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgorICAgICAgICAqIGNzcy9DU1NTZWdt
ZW50ZWRGb250RmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFj
ZTo6Zm9udFJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWdtZW50ZWRGb250RmFjZTo6
cmVzb2x2ZUZhbWlsaWVzKToKKyAgICAgICAgKiBjc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Zm9udFBsYXRmb3JtRGF0YUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OnByZWNhY2hl
VGFza3NJblByb2dyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OmFsdGVybmF0ZUZhbWlseU5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Q2FjaGU6OnByZWNhY2hlKToKKworICAgICAgICAgICAgUHJlY2FjaGUgZm9u
dHMgYnkgdHJ5aW5nIHRvIGxvYWQgdGhlbSBhc3luY3Jvbm91c2x5IG9uZSBieSBvbmUuIE9uIHN1
Y2Nlc3MgdGhlIGZvbnQgaXMgY2FjaGVkIGludG8gZm9udCBwbGF0Zm9ybSBkYXRhIGNhY2hlLgor
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnNpbWlsYXJGb250KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcnVuZVN5c3RlbUZhbGxiYWNr
Rm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6cHJlY2FjaGVQcmltYXJ5RmFtaWx5KToKKworICAg
ICAgICAgICAgV2hlbiBpbml0aWFsaXppbmcgYSBuZXcgZm9udCBjYXNjYWRlIHJlc29sdmUgYW55
IHBsYXRmb3JtIGZvbnRzIHRvIHRoZWlyIGFjdHVhbCBuYW1lcyB1c2luZyBGb250U2VsZWN0b3Is
CisgICAgICAgICAgICB0aGVuIHByZWNhY2hlIHRoZSBwcmltYXJ5IGZvbnQgZm9yIHRoZSBjYXNj
YWRlLgorCisgICAgICAgICAgICBXZWIgZm9udHMgYXJlIGlnbm9yZWQgZm9yIG5vdy4KKworICAg
ICAgICAoV2ViQ29yZTo6cmV0cmlldmVPckFkZENhY2hlZEZvbnRzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRTZWxl
Y3Rvcjo6fkZvbnRTZWxlY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udENhY2hlQ29yZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpzZXRG
b250V2hpdGVsaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRXaXRoRmFtaWx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmF1dG9BY3RpdmF0ZUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
Rm9udFBsYXRmb3JtRGF0YVRocmVhZFNhZmUpOgorCisgICAgICAgICAgICBGYWN0b3IgdGhyZWFk
IHNhZmUgcGFydCBvZiBjcmVhdGVGb250UGxhdGZvcm1EYXRhIHRvIGEgZnVuY3Rpb24uCisKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YSk6CisKKyAg
ICAgICAgICAgIERvIHRoZSBtYWluIHRocmVhZCBvbmx5IGhhc2ggbG9va3VwcyBoZXJlIHRoZW4g
Y2FsbCB0byBjcmVhdGVGb250UGxhdGZvcm1EYXRhVGhyZWFkU2FmZS4KKworICAgICAgICAoV2Vi
Q29yZTo6ZmFsbGJhY2tEZWR1cFNldCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnN5
c3RlbUZhbGxiYWNrRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OnBsYXRmb3JtUHJlY2FjaGUpOgorCisgICAgICAgICAgICBUcnkgdG8gaW5pdGlhbGl6ZSBmb250
IGFzeW5jaHJvbm91c2x5IGluIGEgZGlzcGF0Y2ggcXVldWUsIGNhbGwgY29tcGxldGlvbiBoYW5k
bGVyIG9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4KKworICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hl
OjpwbGF0Zm9ybUNhbmNlbFByZWNhY2hlKToKKworICAgICAgICAgICAgQ2FuY2VsIG9uZ29pbmcg
cHJlY2FjaGUgb3BlcmF0aW9uLgorCisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9ybUZvbnRMb29r
dXBXaXRoRmFtaWx5KTogRGVsZXRlZC4KKworICAgICAgICAgICAgVGhpcyB3YXMgaW5saW5lZCB0
byB0aGUgb25seSBjbGllbnQsIGZvbnRXaXRoRmFtaWx5LgorCiAyMDE2LTA2LTAxICBBZGFtIEJl
cmdrdmlzdCAgPGFkYW0uYmVyZ2t2aXN0QGVyaWNzc29uLmNvbT4KIAogICAgICAgICBXZWJSVEM6
IEFkZCBSVENSdHBUcmFuc2NlaXZlciBpbnRlcmZhY2UgYW5kIFJUQ1BlZXJDb25uZWN0aW9uLmFk
ZFRyYW5zY2VpdmVyKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAkocmV2aXNp
b24gMjAxNDE1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIwLDYgKzUyMCwxOSBAQCBSZWZQdHI8Rm9udD4gQ1NTRm9udEZhY2U6OmZv
bnQoY29uc3QgRm9uCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK1ZlY3RvcjxSZXNvbHZlZEZv
bnRGYW1pbHk+IENTU0ZvbnRGYWNlOjpyZXNvbHZlRmFtaWxpZXMoKSBjb25zdAoreworICAgIFZl
Y3RvcjxSZXNvbHZlZEZvbnRGYW1pbHk+IHJlc3VsdDsKKyAgICBmb3IgKGF1dG8mIHNvdXJjZSA6
IG1fc291cmNlcykgeworICAgICAgICBpZiAoc291cmNlLT5mYW1pbHlOYW1lT3JVUkkoKS5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHNvdXJjZS0+c3RhdHVz
KCkgPT0gQ1NTRm9udEZhY2VTb3VyY2U6OlN0YXR1czo6RmFpbHVyZSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICByZXN1bHQuYXBwZW5kKHsgc291cmNlLT5mYW1pbHlOYW1lT3JVUkko
KSwgc291cmNlLT51cmwoKSB9KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogI2lm
IEVOQUJMRShTVkdfRk9OVFMpCiBib29sIENTU0ZvbnRGYWNlOjpoYXNTVkdGb250RmFjZVNvdXJj
ZSgpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2UuaAkocmV2aXNpb24gMjAx
NDE1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlUnVsZS5oIgogI2luY2x1
ZGUgIkZvbnRGZWF0dXJlU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNp
bmNsdWRlICJUZXh0RmxhZ3MuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KQEAgLTEzNSw2ICsxMzYsOCBAQCBwdWJsaWM6CiAgICAgLy8gV2UgZG9uJ3QgZ3Vh
cmFudGVlIHRoYXQgdGhlIEZvbnRGYWNlIHdyYXBwZXIgd2lsbCBiZSB0aGUgc2FtZSBldmVyeSB0
aW1lIHlvdSBhc2sgZm9yIGl0LgogICAgIFJlZjxGb250RmFjZT4gd3JhcHBlcigpOwogCisgICAg
VmVjdG9yPFJlc29sdmVkRm9udEZhbWlseT4gcmVzb2x2ZUZhbWlsaWVzKCkgY29uc3Q7CisKICNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIGJvb2wgaGFzU1ZHRm9udEZhY2VTb3VyY2UoKSBjb25z
dDsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3Bw
CShyZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3Vy
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNiArMTg4LDEzIEBAIFJlZlB0cjxGb250PiBD
U1NGb250RmFjZVNvdXJjZTo6Zm9udChjb24KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorT3B0
aW9uYWw8VVJMPiBDU1NGb250RmFjZVNvdXJjZTo6dXJsKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
Zm9udCkKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgcmV0dXJuIG1fZm9udC0+dXJsKCk7
Cit9CisKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogYm9vbCBDU1NGb250RmFjZVNvdXJjZTo6aXNT
VkdGb250RmFjZVNvdXJjZSgpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Rm9udEZhY2VTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dEZhY2VTb3VyY2UuaAkocmV2aXNpb24gMjAxNDE1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lu
Y2x1ZGUgIkNhY2hlZEZvbnRDbGllbnQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUhhbmRs
ZS5oIgorI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKQEAgLTcxLDYgKzcyLDgg
QEAgcHVibGljOgogICAgIGJvb2wgaXNTVkdGb250RmFjZVNvdXJjZSgpIGNvbnN0OwogI2VuZGlm
CiAKKyAgICBPcHRpb25hbDxVUkw+IHVybCgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIHZvaWQg
Zm9udExvYWRlZChDYWNoZWRGb250Jikgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NGb250U2VsZWN0b3IuY3BwCShyZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM0LDQgKzMzNCwy
MiBAQCBSZWZQdHI8Rm9udD4gQ1NTRm9udFNlbGVjdG9yOjpmYWxsYmFja0ZvCiAgICAgcmV0dXJu
IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuZm9udEZvckZhbWlseShmb250RGVzY3JpcHRpb24sIHNl
dHRpbmdzLT5waWN0b2dyYXBoRm9udEZhbWlseSgpKTsKIH0KIAorVmVjdG9yPFJlc29sdmVkRm9u
dEZhbWlseT4gQ1NTRm9udFNlbGVjdG9yOjpyZXNvbHZlRmFtaWxpZXMoY29uc3QgVmVjdG9yPEF0
b21pY1N0cmluZz4mIGZhbWlsaWVzLCBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgVUNoYXIzMiBjaGFyYWN0ZXIpCit7CisgICAgVmVjdG9yPFJlc29sdmVkRm9udEZhbWls
eT4gcmVzdWx0OworCisgICAgZm9yIChhdXRvJiBmYW1pbHkgOiBmYW1pbGllcykgeworICAgICAg
ICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBh
dXRvKiBzZWdtZW50ZWRGYWNlID0gbV9jc3NGb250RmFjZVNldC0+Z2V0Rm9udEZhY2UoZm9udERl
c2NyaXB0aW9uLnRyYWl0c01hc2soKSwgZmFtaWx5KTsKKyAgICAgICAgaWYgKCFzZWdtZW50ZWRG
YWNlKSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHsgcmVzb2x2ZUdlbmVyaWNGYW1pbHko
bV9kb2N1bWVudCwgZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpLCB7IH0gfSk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQuYXBwZW5kVmVjdG9yKHNlZ21l
bnRlZEZhY2UtPnJlc29sdmVGYW1pbGllcyhjaGFyYWN0ZXIpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVj
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5o
CShyZXZpc2lvbiAyMDE0MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDggQEAgcHVibGljOgogICAgIHNpemVfdCBm
YWxsYmFja0ZvbnRDb3VudCgpIG92ZXJyaWRlOwogICAgIFJlZlB0cjxGb250PiBmYWxsYmFja0Zv
bnRBdChjb25zdCBGb250RGVzY3JpcHRpb24mLCBzaXplX3QpIG92ZXJyaWRlOwogCisgICAgVmVj
dG9yPFJlc29sdmVkRm9udEZhbWlseT4gcmVzb2x2ZUZhbWlsaWVzKGNvbnN0IFZlY3RvcjxBdG9t
aWNTdHJpbmc+JiwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgVUNoYXIzMikgb3ZlcnJpZGU7CisK
ICAgICB2b2lkIGNsZWFyRG9jdW1lbnQoKTsKIAogICAgIHZvaWQgYWRkRm9udEZhY2VSdWxlKFN0
eWxlUnVsZUZvbnRGYWNlJiwgYm9vbCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdlbnRTaGFk
b3dUcmVlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNl
LmNwcAkocmV2aXNpb24gMjAxNDE1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlZ21lbnRl
ZEZvbnRGYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDQgKzEzOCwyMCBAQCBGb250UmFu
Z2VzIENTU1NlZ21lbnRlZEZvbnRGYWNlOjpmb250UmFuCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAorVmVjdG9yPFJlc29sdmVkRm9udEZhbWlseT4gQ1NTU2VnbWVudGVkRm9udEZhY2U6OnJlc29s
dmVGYW1pbGllcyhVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIGZh
Y2UgOiBtX2ZvbnRGYWNlcykgeworICAgICAgICBib29sIGluUmFuZ2UgPSBmYWNlLT5yYW5nZXMo
KS5pc0VtcHR5KCk7CisgICAgICAgIGZvciAoYXV0byYgcmFuZ2UgOiBmYWNlLT5yYW5nZXMoKSkg
eworICAgICAgICAgICAgaWYgKGNoYXJhY3RlciA+PSByYW5nZS5mcm9tICYmIGNoYXJhY3RlciA8
PSByYW5nZS50bykgeworICAgICAgICAgICAgICAgIGluUmFuZ2UgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChpblJh
bmdlKQorICAgICAgICAgICAgcmV0dXJuIGZhY2UtPnJlc29sdmVGYW1pbGllcygpOworICAgIH0K
KyAgICByZXR1cm4geyB9OworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2Vn
bWVudGVkRm9udEZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2Vn
bWVudGVkRm9udEZhY2UuaAkocmV2aXNpb24gMjAxNDE1KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2luY2x1ZGUgIkNTU0ZvbnRGYWNlLmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5j
bHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTU3LDYgKzU4
LDggQEAgcHVibGljOgogICAgIHZvaWQgcmVmKCkgb3ZlcnJpZGUgeyBSZWZDb3VudGVkPENTU1Nl
Z21lbnRlZEZvbnRGYWNlPjo6cmVmKCk7IH0KICAgICB2b2lkIGRlcmVmKCkgb3ZlcnJpZGUgeyBS
ZWZDb3VudGVkPENTU1NlZ21lbnRlZEZvbnRGYWNlPjo6ZGVyZWYoKTsgfQogCisgICAgVmVjdG9y
PFJlc29sdmVkRm9udEZhbWlseT4gcmVzb2x2ZUZhbWlsaWVzKFVDaGFyMzIgY2hhcmFjdGVyKSBj
b25zdDsKKwogcHJpdmF0ZToKICAgICBDU1NTZWdtZW50ZWRGb250RmFjZSgpOwogICAgIHZvaWQg
Zm9udExvYWRlZChDU1NGb250RmFjZSYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCShyZXZpc2lvbiAyMDE0MTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDYsNiArMTA2LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fZm9udEZhY2VG
ZWF0dXJlcyhmb250RmFjZUZlYXR1cmVzID8gKmZvbnRGYWNlRmVhdHVyZXMgOiBGb250RmVhdHVy
ZVNldHRpbmdzKCkpCiAgICAgICAgICwgbV9mb250RmFjZVZhcmlhbnRTZXR0aW5ncyhmb250RmFj
ZVZhcmlhbnRTZXR0aW5ncyA/ICpmb250RmFjZVZhcmlhbnRTZXR0aW5ncyA6IEZvbnRWYXJpYW50
U2V0dGluZ3MoKSkKICAgICB7IH0KKyAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JikgPSBkZWZhdWx0OwogCiAgICAgZXhwbGljaXQgRm9u
dFBsYXRmb3JtRGF0YUNhY2hlS2V5KEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUgdCkKICAgICAg
ICAgOiBtX2ZvbnREZXNjcmlwdGlvbktleSh0KQpAQCAtMTU5LDYgKzE2MCwxNiBAQCBzdGF0aWMg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlJiBmb250UGxhdGZvCiAgICAgcmV0dXJuIGNhY2hlOwogfQog
CisjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShQTEFURk9STV9GT05UX0xPT0tVUCkKK3Vz
aW5nIFByZWNhY2hlTWFwID0gSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXksIEZvbnRD
YWNoZTo6UHJlY2FjaGVUYXNrKiwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCwgV1RGOjpT
aW1wbGVDbGFzc0hhc2hUcmFpdHM8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5Pj47CisKK3N0YXRp
YyBQcmVjYWNoZU1hcCYgcHJlY2FjaGVUYXNrc0luUHJvZ3Jlc3MoKQoreworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxQcmVjYWNoZU1hcD4gbWFwOworICAgIHJldHVybiBtYXA7Cit9CisjZW5k
aWYKKwogc3RhdGljIEF0b21pY1N0cmluZyBhbHRlcm5hdGVGYW1pbHlOYW1lKGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5TmFtZSkKIHsKICAgICBzd2l0Y2ggKGZhbWlseU5hbWUubGVuZ3RoKCkp
IHsKQEAgLTI0Myw2ICsyNTQsMTIgQEAgRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRD
YWNoZWRGbwogCiAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtleShmYW1pbHlOYW1lLCBm
b250RGVzY3JpcHRpb24sIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlVmFyaWFudFNldHRpbmdz
KTsKIAorI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFCTEUoUExBVEZPUk1fRk9OVF9MT09LVVAp
CisgICAgYXV0byogcHJlY2FjaGVUYXNrID0gcHJlY2FjaGVUYXNrc0luUHJvZ3Jlc3MoKS5nZXQo
a2V5KTsKKyAgICBpZiAocHJlY2FjaGVUYXNrKQorICAgICAgICBwbGF0Zm9ybUNhbmNlbFByZWNh
Y2hlKCpwcmVjYWNoZVRhc2spOworI2VuZGlmCisKICAgICBhdXRvIGFkZFJlc3VsdCA9IGZvbnRQ
bGF0Zm9ybURhdGFDYWNoZSgpLmFkZChrZXksIG51bGxwdHIpOwogICAgIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBhZGRSZXN1bHQuaXRlcmF0b3I7CiAgICAgaWYgKGFkZFJl
c3VsdC5pc05ld0VudHJ5KSB7CkBAIC00ODksNiArNTA2LDY3IEBAIHZvaWQgRm9udENhY2hlOjpp
bnZhbGlkYXRlKCkKICAgICBwdXJnZUluYWN0aXZlRm9udERhdGEoKTsKIH0KIAorI2lmIFBMQVRG
T1JNKENPQ09BKSAmJiBFTkFCTEUoUExBVEZPUk1fRk9OVF9MT09LVVApCit2b2lkIEZvbnRDYWNo
ZTo6cHJlY2FjaGUoY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIHJlc29sdmVkRmFtaWxpZXMs
IGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKQoreworICAgIGlmIChyZXNv
bHZlZEZhbWlsaWVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIGZhbWls
eSA9IHJlc29sdmVkRmFtaWxpZXMuZmlyc3QoKTsKKworICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleSBrZXkoZmFtaWx5LCBmb250RGVzY3JpcHRpb24sIG51bGxwdHIsIG51bGxwdHIpOworCisg
ICAgLy8gTWF5YmUgd2UgaGF2ZSBpdCBhbHJlYWR5PworICAgIGF1dG8gaXQgPSBmb250UGxhdGZv
cm1EYXRhQ2FjaGUoKS5maW5kKGtleSk7CisgICAgaWYgKGl0ICE9IGZvbnRQbGF0Zm9ybURhdGFD
YWNoZSgpLmVuZCgpKSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgLy8gV2UgYWxyZWFkeSBrbm93IHRoaXMgZm9udCBpc24ndCBhdmFpbGFi
bGUuIFRyeSB0aGUgbmV4dC4KKyAgICAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gcmVtYWluaW5n
RmFtaWxpZXM7CisgICAgICAgIHJlbWFpbmluZ0ZhbWlsaWVzLmFwcGVuZFJhbmdlKHJlc29sdmVk
RmFtaWxpZXMuYmVnaW4oKSArIDEsIHJlc29sdmVkRmFtaWxpZXMuZW5kKCkpOworICAgICAgICBw
cmVjYWNoZShyZW1haW5pbmdGYW1pbGllcywgZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGF1dG8gdGFza0FkZCA9IHByZWNhY2hlVGFza3NJblByb2dyZXNz
KCkuYWRkKGtleSwgbnVsbHB0cik7CisgICAgaWYgKCF0YXNrQWRkLmlzTmV3RW50cnkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8mIHRhc2sgPSBwbGF0Zm9ybVByZWNhY2hlKGZhbWlseSwg
Zm9udERlc2NyaXB0aW9uLCBba2V5LCByZXNvbHZlZEZhbWlsaWVzLCBmb250RGVzY3JpcHRpb25d
IChhdXRvIHBsYXRmb3JtRGF0YSwgYm9vbCB3YXNDYW5jZWxlZCkgeworICAgICAgICBwcmVjYWNo
ZVRhc2tzSW5Qcm9ncmVzcygpLnJlbW92ZShrZXkpOworCisgICAgICAgIGlmICh3YXNDYW5jZWxl
ZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAocGxhdGZvcm1EYXRhKSB7Cisg
ICAgICAgICAgICBhdXRvIHIgPSBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5hZGQoa2V5LCBXVEZN
b3ZlKHBsYXRmb3JtRGF0YSkpOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzdWNjZXNz
ICVkXG4iLCByLmlzTmV3RW50cnkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRGlkbid0IGZpbmQgdGhlIGZvbnQuIFRyeSB0aGUgbmV4dCBvbmUuCisgICAg
ICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHJlbWFpbmluZ0ZhbWlsaWVzOworCisgICAgICAgIGF1
dG8gYWx0ZXJuYXRlTmFtZSA9IGFsdGVybmF0ZUZhbWlseU5hbWUocmVzb2x2ZWRGYW1pbGllcy5m
aXJzdCgpKTsKKyAgICAgICAgaWYgKCFhbHRlcm5hdGVOYW1lLmlzTnVsbCgpKSB7CisgICAgICAg
ICAgICByZW1haW5pbmdGYW1pbGllcyA9IHJlc29sdmVkRmFtaWxpZXM7CisgICAgICAgICAgICBy
ZW1haW5pbmdGYW1pbGllcy5maXJzdCgpID0gYWx0ZXJuYXRlTmFtZTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGZvbnRQbGF0Zm9ybURhdGFDYWNoZSgpLmFkZChrZXksIG51bGxwdHIp
OworICAgICAgICAgICAgcmVtYWluaW5nRmFtaWxpZXMuYXBwZW5kUmFuZ2UocmVzb2x2ZWRGYW1p
bGllcy5iZWdpbigpICsgMSwgcmVzb2x2ZWRGYW1pbGllcy5lbmQoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBzaW5nbGV0b24oKS5wcmVjYWNoZShyZW1haW5pbmdGYW1pbGllcywgZm9udERlc2Ny
aXB0aW9uKTsKKyAgICB9KTsKKworICAgIHRhc2tBZGQuaXRlcmF0b3ItPnZhbHVlID0gJnRhc2s7
Cit9CisjZWxzZQordm9pZCBGb250Q2FjaGU6OnByZWNhY2hlKGNvbnN0IFZlY3RvcjxBdG9taWNT
dHJpbmc+JiwgY29uc3QgRm9udERlc2NyaXB0aW9uJikKK3sKK30KKyNlbmRpZgorCiAjaWYgIVBM
QVRGT1JNKENPQ09BKQogUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6c2ltaWxhckZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJikKIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCShyZXZpc2lvbiAyMDE0MTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTkzLDYgKzE5Myw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBS
ZWY8Rm9udD4gZm9udEZvclBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7CiAg
ICAgUmVmUHRyPEZvbnQ+IHNpbWlsYXJGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0
IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKIAorICAgIHZvaWQgcHJlY2FjaGUoY29uc3QgVmVjdG9y
PEF0b21pY1N0cmluZz4mIHJlc29sdmVkRmFtaWxpZXMsIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYp
OworCiAgICAgdm9pZCBhZGRDbGllbnQoRm9udFNlbGVjdG9yJik7CiAgICAgdm9pZCByZW1vdmVD
bGllbnQoRm9udFNlbGVjdG9yJik7CiAKQEAgLTIxMiw2ICsyMTQsOCBAQCBwdWJsaWM6CiAgICAg
UmVmUHRyPE9wZW5UeXBlVmVydGljYWxEYXRhPiB2ZXJ0aWNhbERhdGEoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYpOwogI2VuZGlmCiAKKyAgICBzdHJ1Y3QgUHJlY2FjaGVUYXNrOworCiBwcml2YXRl
OgogICAgIEZvbnRDYWNoZSgpOwogICAgIH5Gb250Q2FjaGUoKSA9IGRlbGV0ZTsKQEAgLTIyNyw2
ICsyMzEsMTIgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxGb250UGxh
dGZvcm1EYXRhPiBjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBm
b250RmFjZUZlYXR1cmVzLCBjb25zdCBGb250VmFyaWFudFNldHRpbmdzKiBmb250RmFjZVZhcmlh
bnRTZXR0aW5ncyk7CiAKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKFBMQVRGT1JNX0ZP
TlRfTE9PS1VQKQorICAgIHVzaW5nIFByZWNhY2hlQ29tcGxldGlvbkhhbmRsZXIgPSBzdGQ6OmZ1
bmN0aW9uPHZvaWQgKHN0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiwgYm9vbCB3YXND
YW5jZWxlZCk+OworICAgIFByZWNhY2hlVGFzayYgcGxhdGZvcm1QcmVjYWNoZShjb25zdCBBdG9t
aWNTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udERlc2NyaXB0aW9uJiwgUHJlY2FjaGVDb21wbGV0
aW9uSGFuZGxlciYmKTsKKyAgICB2b2lkIHBsYXRmb3JtQ2FuY2VsUHJlY2FjaGUoUHJlY2FjaGVU
YXNrJik7CisjZW5kaWYKKwogICAgIFRpbWVyIG1fcHVyZ2VUaW1lcjsKIAogI2lmIFBMQVRGT1JN
KENPQ09BKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcAkocmV2aXNpb24gMjAxNDE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNiArMjYx
LDI5IEBAIHZvaWQgcHJ1bmVTeXN0ZW1GYWxsYmFja0ZvbnRzKCkKICAgICAgICAgZW50cnktPmZv
bnRzLT5wcnVuZVN5c3RlbUZhbGxiYWNrcygpOwogfQogCitzdGF0aWMgdm9pZCBwcmVjYWNoZVBy
aW1hcnlGYW1pbHkoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBGb250U2VsZWN0b3ImIGZvbnRTZWxlY3RvcikKK3sKKyAgICBWZWN0b3I8QXRvbWljU3RyaW5n
PiBmYW1pbGllczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9udERlc2NyaXB0aW9u
LmZhbWlseUNvdW50KCk7ICsraSkKKyAgICAgICAgZmFtaWxpZXMuYXBwZW5kKGZvbnREZXNjcmlw
dGlvbi5mYW1pbHlBdChpKSk7CisKKyAgICAvLyBQcmltYXJ5IGZhbWlseSBsb29rdXAgZmFsbHMg
YmFjayB0byB0aGUgc3RhbmRhcmQgZmFtaWx5LgorICAgIGZhbWlsaWVzLmFwcGVuZChzdGFuZGFy
ZEZhbWlseSk7CisKKyAgICBhdXRvIHJlc29sdmVkUHJpbWFyeUZhbWlsaWVzID0gZm9udFNlbGVj
dG9yLnJlc29sdmVGYW1pbGllcyhmYW1pbGllcywgZm9udERlc2NyaXB0aW9uLCAnICcpOworCisg
ICAgVmVjdG9yPEF0b21pY1N0cmluZz4gcmVzb2x2ZWRQcmltYXJ5RmFtaWx5TmFtZXM7CisgICAg
Zm9yIChhdXRvJiBmYW1pbHkgOiByZXNvbHZlZFByaW1hcnlGYW1pbGllcykgeworICAgICAgICAv
LyBUaGlzIGRvZXNuJ3QgaGFuZGxlIHdlYiBmb250cyBmb3Igbm93LgorICAgICAgICBpZiAoZmFt
aWx5LnVybCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXNvbHZlZFByaW1hcnlGYW1p
bHlOYW1lcy5hcHBlbmQoZmFtaWx5Lm5hbWUpOworICAgIH0KKworICAgIC8vIEFzeW5jaHJvbm91
c2x5IGZpbmQgZmlyc3QgYXZhaWxhYmxlIGZvbnQgYW5kIHByZWNhY2hlIGl0IHNvIGl0IGlzIGxp
a2VseSB0byBiZSBhdmFpbGFibGUgd2hlbiBuZWVkZWQuCisgICAgRm9udENhY2hlOjpzaW5nbGV0
b24oKS5wcmVjYWNoZShyZXNvbHZlZFByaW1hcnlGYW1pbHlOYW1lcywgZm9udERlc2NyaXB0aW9u
KTsKK30KKwogc3RhdGljIFJlZjxGb250Q2FzY2FkZUZvbnRzPiByZXRyaWV2ZU9yQWRkQ2FjaGVk
Rm9udHMoY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBSZWZQ
dHI8Rm9udFNlbGVjdG9yPiYmIGZvbnRTZWxlY3RvcikKIHsKICAgICBhdXRvIGtleSA9IG1ha2VG
b250Q2FzY2FkZUNhY2hlS2V5KGZvbnREZXNjcmlwdGlvbiwgZm9udFNlbGVjdG9yLmdldCgpKTsK
QEAgLTI3MCw2ICsyOTMsOSBAQCBzdGF0aWMgUmVmPEZvbnRDYXNjYWRlRm9udHM+IHJldHJpZXZl
T3JBCiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSAmJiBrZXlzTWF0Y2goYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS0+a2V5LCBrZXkpKQogICAgICAgICByZXR1cm4gYWRkUmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZS0+Zm9udHMuZ2V0KCk7CiAKKyAgICBpZiAoZm9udFNlbGVjdG9yKQorICAg
ICAgICBwcmVjYWNoZVByaW1hcnlGYW1pbHkoZm9udERlc2NyaXB0aW9uLCAqZm9udFNlbGVjdG9y
KTsKKwogICAgIGF1dG8mIG5ld0VudHJ5ID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAg
ICBuZXdFbnRyeSA9IHN0ZDo6bWFrZV91bmlxdWU8Rm9udENhc2NhZGVDYWNoZUVudHJ5PihXVEZN
b3ZlKGtleSksIEZvbnRDYXNjYWRlRm9udHM6OmNyZWF0ZShXVEZNb3ZlKGZvbnRTZWxlY3Rvcikp
KTsKICAgICBSZWY8Rm9udENhc2NhZGVGb250cz4gZ2x5cGhzID0gbmV3RW50cnktPmZvbnRzLmdl
dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNl
bGVjdG9yLmgJKHJldmlzaW9uIDIwMTQxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkZvbnRSYW5nZXMuaCIKKyNpbmNsdWRlICJVUkwuaCIK
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTQ0LDYgKzQ1LDExIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgPSAwOwogfTsKIAorc3RydWN0IFJlc29s
dmVkRm9udEZhbWlseSB7CisgICAgQXRvbWljU3RyaW5nIG5hbWU7CisgICAgT3B0aW9uYWw8VVJM
PiB1cmw7Cit9OworCiBjbGFzcyBGb250U2VsZWN0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxGb250
U2VsZWN0b3I+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Gb250U2VsZWN0b3IoKSB7IH0KQEAg
LTU4LDYgKzY0LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZvckludmFs
aWRhdGlvbkNhbGxiYWNrcyhGb250U2VsZWN0b3JDbGllbnQmKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHVucmVnaXN0ZXJGb3JJbnZhbGlkYXRpb25DYWxsYmFja3MoRm9udFNlbGVjdG9yQ2xpZW50
JikgPSAwOwogCisgICAgdmlydHVhbCBWZWN0b3I8UmVzb2x2ZWRGb250RmFtaWx5PiByZXNvbHZl
RmFtaWxpZXMoY29uc3QgVmVjdG9yPEF0b21pY1N0cmluZz4mIGZhbWlsaWVzLCBjb25zdCBGb250
RGVzY3JpcHRpb24mLCBVQ2hhcjMyIGNoYXJhY3RlcikgPSAwOworCiAgICAgdmlydHVhbCB1bnNp
Z25lZCB1bmlxdWVJZCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHZlcnNpb24o
KSBjb25zdCA9IDA7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAkocmV2aXNpb24g
MjAxNDE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
Y2hlQ29yZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBACiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVk
ZSA8d3RmL1dvcmtRdWV1ZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY2MCwxOCAr
NjYyLDcgQEAgdm9pZCBGb250Q2FjaGU6OnNldEZvbnRXaGl0ZWxpc3QoY29uc3QgVgogICAgICAg
ICB3aGl0ZWxpc3QuYWRkKGl0ZW0pOwogfQogCi0jaWYgRU5BQkxFKFBMQVRGT1JNX0ZPTlRfTE9P
S1VQKQotc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IHBsYXRmb3JtRm9udExvb2t1cFdpdGhG
YW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIENURm9udFN5bWJvbGljVHJhaXRzIHJl
cXVlc3RlZFRyYWl0cywgRm9udFdlaWdodCB3ZWlnaHQsIGZsb2F0IHNpemUpCi17Ci0gICAgY29u
c3QgYXV0byYgd2hpdGVsaXN0ID0gZm9udFdoaXRlbGlzdCgpOwotICAgIGlmICh3aGl0ZWxpc3Qu
c2l6ZSgpICYmICF3aGl0ZWxpc3QuY29udGFpbnMoZmFtaWx5KSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICByZXR1cm4gYWRvcHRDRihDVEZvbnRDcmVhdGVGb3JDU1MoZmFtaWx5LnN0
cmluZygpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHRvQ29yZVRleHRGb250V2VpZ2h0KHdlaWdo
dCksIHJlcXVlc3RlZFRyYWl0cywgc2l6ZSkpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBSZXRhaW5Q
dHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwg
Q1RGb250U3ltYm9saWNUcmFpdHMgZGVzaXJlZFRyYWl0cywgRm9udFdlaWdodCB3ZWlnaHQsIGNv
bnN0IEZvbnRGZWF0dXJlU2V0dGluZ3MmIGZlYXR1cmVTZXR0aW5ncywgY29uc3QgRm9udFZhcmlh
bnRTZXR0aW5ncyYgdmFyaWFudFNldHRpbmdzLCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdzKiBm
b250RmFjZUZlYXR1cmVzLCBjb25zdCBGb250VmFyaWFudFNldHRpbmdzKiBmb250RmFjZVZhcmlh
bnRTZXR0aW5ncywgY29uc3QgVGV4dFJlbmRlcmluZ01vZGUmIHRleHRSZW5kZXJpbmdNb2RlLCBm
bG9hdCBzaXplKQorc3RhdGljIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnRXaXRoRmFtaWx5KGNv
bnN0IFN0cmluZyYgZmFtaWx5LCBDVEZvbnRTeW1ib2xpY1RyYWl0cyBkZXNpcmVkVHJhaXRzLCBG
b250V2VpZ2h0IHdlaWdodCwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyYgZmVhdHVyZVNldHRp
bmdzLCBjb25zdCBGb250VmFyaWFudFNldHRpbmdzJiB2YXJpYW50U2V0dGluZ3MsIGNvbnN0IEZv
bnRGZWF0dXJlU2V0dGluZ3MqIGZvbnRGYWNlRmVhdHVyZXMsIGNvbnN0IEZvbnRWYXJpYW50U2V0
dGluZ3MqIGZvbnRGYWNlVmFyaWFudFNldHRpbmdzLCBjb25zdCBUZXh0UmVuZGVyaW5nTW9kZSYg
dGV4dFJlbmRlcmluZ01vZGUsIGZsb2F0IHNpemUsIGJvb2wgaXNXaGl0ZWxpc3RlZCkKIHsKICAg
ICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02Nzks
OCArNjcwLDExIEBAIHN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250V2l0aEZhbWkKICAg
ICBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb3VuZEZvbnQgPSBwbGF0Zm9ybUZvbnRXaXRoRmFtaWx5
U3BlY2lhbENhc2UoZmFtaWx5LCB3ZWlnaHQsIGRlc2lyZWRUcmFpdHMsIHNpemUpOwogICAgIGlm
ICghZm91bmRGb250KSB7CiAjaWYgRU5BQkxFKFBMQVRGT1JNX0ZPTlRfTE9PS1VQKQotICAgICAg
ICBmb3VuZEZvbnQgPSBwbGF0Zm9ybUZvbnRMb29rdXBXaXRoRmFtaWx5KGZhbWlseSwgZGVzaXJl
ZFRyYWl0cywgd2VpZ2h0LCBzaXplKTsKKyAgICAgICAgaWYgKCFpc1doaXRlbGlzdGVkKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGZvdW5kRm9udCA9IGFkb3B0Q0YoQ1RG
b250Q3JlYXRlRm9yQ1NTKGZhbWlseS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCB0b0NvcmVUZXh0
Rm9udFdlaWdodCh3ZWlnaHQpLCBkZXNpcmVkVHJhaXRzLCBzaXplKSk7CiAjZWxzZQorICAgICAg
ICBVTlVTRURfUEFSQU0oaXNXaGl0ZWxpc3RlZCk7CiAgICAgICAgIGZvdW5kRm9udCA9IHBsYXRm
b3JtRm9udFdpdGhGYW1pbHkoZmFtaWx5LCBkZXNpcmVkVHJhaXRzLCB3ZWlnaHQsIHRleHRSZW5k
ZXJpbmdNb2RlLCBzaXplKTsKICNlbmRpZgogICAgIH0KQEAgLTcxOSwyNCArNzEzLDI0IEBAIHN0
YXRpYyB2b2lkIGF1dG9BY3RpdmF0ZUZvbnQoY29uc3QgU3RyaW4KIH0KICNlbmRpZgogCi1zdGQ6
OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0
dXJlcywgY29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyogZm9udEZhY2VWYXJpYW50U2V0dGluZ3Mp
CisvLyBUaGlzIGlzIG9ubHkgdGhyZWFkIHNhZmUgd2l0aCBFTkFCTEUoUExBVEZPUk1fRk9OVF9M
T09LVVApIGR1ZSB0byBmb250V2l0aEZhbWlseSgpIGltcGxlbWVudGF0aW9uCitzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGFUaHJl
YWRTYWZlKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBTdHJp
bmcmIGZhbWlseSwgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZm9udEZhY2VGZWF0dXJlcywg
Y29uc3QgRm9udFZhcmlhbnRTZXR0aW5ncyogZm9udEZhY2VWYXJpYW50U2V0dGluZ3MsIGJvb2wg
aXNXaGl0ZWxpc3RlZCwgYm9vbCBzaG91bGRBdXRvQWN0aXZhdGVJZk5lZWRlZCkKIHsKICAgICBD
VEZvbnRTeW1ib2xpY1RyYWl0cyB0cmFpdHMgPSBjb21wdXRlVHJhaXRzKGZvbnREZXNjcmlwdGlv
bik7CiAgICAgZmxvYXQgc2l6ZSA9IGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgp
OwogCi0gICAgUmV0YWluUHRyPENURm9udFJlZj4gZm9udCA9IGZvbnRXaXRoRmFtaWx5KGZhbWls
eSwgdHJhaXRzLCBmb250RGVzY3JpcHRpb24ud2VpZ2h0KCksIGZvbnREZXNjcmlwdGlvbi5mZWF0
dXJlU2V0dGluZ3MoKSwgZm9udERlc2NyaXB0aW9uLnZhcmlhbnRTZXR0aW5ncygpLCBmb250RmFj
ZUZlYXR1cmVzLCBmb250RmFjZVZhcmlhbnRTZXR0aW5ncywgZm9udERlc2NyaXB0aW9uLnRleHRS
ZW5kZXJpbmdNb2RlKCksIHNpemUpOworICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IGZvbnQgPSBm
b250V2l0aEZhbWlseShmYW1pbHksIHRyYWl0cywgZm9udERlc2NyaXB0aW9uLndlaWdodCgpLCBm
b250RGVzY3JpcHRpb24uZmVhdHVyZVNldHRpbmdzKCksIGZvbnREZXNjcmlwdGlvbi52YXJpYW50
U2V0dGluZ3MoKSwgZm9udEZhY2VGZWF0dXJlcywgZm9udEZhY2VWYXJpYW50U2V0dGluZ3MsIGZv
bnREZXNjcmlwdGlvbi50ZXh0UmVuZGVyaW5nTW9kZSgpLCBzaXplLCBpc1doaXRlbGlzdGVkKTsK
IAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoIWZvbnQpIHsKLSAgICAgICAgaWYgKCFzaG91
bGRBdXRvQWN0aXZhdGVGb250SWZOZWVkZWQoZmFtaWx5KSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotCisgICAgaWYgKCFmb250ICYmIHNob3VsZEF1dG9BY3RpdmF0ZUlmTmVlZGVkKSB7
CiAgICAgICAgIC8vIEF1dG8gYWN0aXZhdGUgdGhlIGZvbnQgYmVmb3JlIGxvb2tpbmcgZm9yIGl0
IGEgc2Vjb25kIHRpbWUuCiAgICAgICAgIC8vIElnbm9yZSB0aGUgcmVzdWx0IGJlY2F1c2Ugd2Ug
d2FudCB0byB1c2Ugb3VyIG93biBhbGdvcml0aG0gdG8gYWN0dWFsbHkgZmluZCB0aGUgZm9udC4K
LSAgICAgICAgYXV0b0FjdGl2YXRlRm9udChmYW1pbHkuc3RyaW5nKCksIHNpemUpOworICAgICAg
ICBhdXRvQWN0aXZhdGVGb250KGZhbWlseSwgc2l6ZSk7CiAKLSAgICAgICAgZm9udCA9IGZvbnRX
aXRoRmFtaWx5KGZhbWlseSwgdHJhaXRzLCBmb250RGVzY3JpcHRpb24ud2VpZ2h0KCksIGZvbnRE
ZXNjcmlwdGlvbi5mZWF0dXJlU2V0dGluZ3MoKSwgZm9udERlc2NyaXB0aW9uLnZhcmlhbnRTZXR0
aW5ncygpLCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZVZhcmlhbnRTZXR0aW5ncywgZm9udERl
c2NyaXB0aW9uLnRleHRSZW5kZXJpbmdNb2RlKCksIHNpemUpOworICAgICAgICBmb250ID0gZm9u
dFdpdGhGYW1pbHkoZmFtaWx5LCB0cmFpdHMsIGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSwgZm9u
dERlc2NyaXB0aW9uLmZlYXR1cmVTZXR0aW5ncygpLCBmb250RGVzY3JpcHRpb24udmFyaWFudFNl
dHRpbmdzKCksIGZvbnRGYWNlRmVhdHVyZXMsIGZvbnRGYWNlVmFyaWFudFNldHRpbmdzLCBmb250
RGVzY3JpcHRpb24udGV4dFJlbmRlcmluZ01vZGUoKSwgc2l6ZSwgaXNXaGl0ZWxpc3RlZCk7CiAg
ICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2hvdWxkQXV0b0FjdGl2YXRlSWZOZWVkZWQp
OwogI2VuZGlmCiAKICAgICBpZiAoIWZvbnQpCkBAIC03NDgsNiArNzQyLDE5IEBAIHN0ZDo6dW5p
cXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2EKICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxGb250UGxhdGZvcm1EYXRhPihmb250LmdldCgpLCBzaXplLCBzeW50aGV0aWNCb2xkLCBz
eW50aGV0aWNPYmxpcXVlLCBmb250RGVzY3JpcHRpb24ub3JpZW50YXRpb24oKSwgZm9udERlc2Ny
aXB0aW9uLndpZHRoVmFyaWFudCgpLCBmb250RGVzY3JpcHRpb24udGV4dFJlbmRlcmluZ01vZGUo
KSk7CiB9CiAKK3N0ZDo6dW5pcXVlX3B0cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNy
ZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBjb25zdCBGb250RmVhdHVyZVNldHRpbmdz
KiBmb250RmFjZUZlYXR1cmVzLCBjb25zdCBGb250VmFyaWFudFNldHRpbmdzKiBmb250RmFjZVZh
cmlhbnRTZXR0aW5ncykKK3sKKyAgICBjb25zdCBhdXRvJiB3aGl0ZWxpc3QgPSBmb250V2hpdGVs
aXN0KCk7CisgICAgYm9vbCBpc1doaXRlbGlzdGVkID0gd2hpdGVsaXN0LmlzRW1wdHkoKSB8fCB3
aGl0ZWxpc3QuY29udGFpbnMoZmFtaWx5KTsKKworICAgIGJvb2wgc2hvdWxkQXV0b0FjdGl2YXRl
SWZOZWVkZWQgPSBmYWxzZTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgc2hvdWxkQXV0b0FjdGl2
YXRlSWZOZWVkZWQgPSBzaG91bGRBdXRvQWN0aXZhdGVGb250SWZOZWVkZWQoZmFtaWx5KTsKKyNl
bmRpZgorCisgICAgcmV0dXJuIGNyZWF0ZUZvbnRQbGF0Zm9ybURhdGFUaHJlYWRTYWZlKGZvbnRE
ZXNjcmlwdGlvbiwgZmFtaWx5LCBmb250RmFjZUZlYXR1cmVzLCBmb250RmFjZVZhcmlhbnRTZXR0
aW5ncywgaXNXaGl0ZWxpc3RlZCwgc2hvdWxkQXV0b0FjdGl2YXRlSWZOZWVkZWQpOworfQorCiB0
eXBlZGVmIEhhc2hTZXQ8UmV0YWluUHRyPENURm9udFJlZj4sIFdURjo6UmV0YWluUHRyT2JqZWN0
SGFzaDxDVEZvbnRSZWY+LCBXVEY6OlJldGFpblB0ck9iamVjdEhhc2hUcmFpdHM8Q1RGb250UmVm
Pj4gRmFsbGJhY2tEZWR1cFNldDsKIHN0YXRpYyBGYWxsYmFja0RlZHVwU2V0JiBmYWxsYmFja0Rl
ZHVwU2V0KCkKIHsKQEAgLTc5Niw0ICs4MDMsNTMgQEAgUmVmUHRyPEZvbnQ+IEZvbnRDYWNoZTo6
c3lzdGVtRmFsbGJhY2tGbwogICAgIHJldHVybiBmb250Rm9yUGxhdGZvcm1EYXRhKGFsdGVybmF0
ZUZvbnQpOwogfQogCisjaWYgRU5BQkxFKFBMQVRGT1JNX0ZPTlRfTE9PS1VQKQorc3RydWN0IEZv
bnRDYWNoZTo6UHJlY2FjaGVUYXNrIHsKKyAgICBTdHJpbmcgZmFtaWx5OworICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb247CisgICAgYm9vbCBzaG91bGRBdXRvYWN0aXZlSWZOZWVk
ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgaXNXaGl0ZWxpc3RlZCB7IHRydWUgfTsKKyAgICBQcmVj
YWNoZUNvbXBsZXRpb25IYW5kbGVyIGNvbXBsZXRpb25IYW5kbGVyOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPEZvbnRQbGF0Zm9ybURhdGE+IHJlc3VsdDsKKyAgICBzdGQ6OmF0b21pY19ib29sIGlz
Q2FuY2VsZWQgeyBmYWxzZSB9OworfTsKKworRm9udENhY2hlOjpQcmVjYWNoZVRhc2smIEZvbnRD
YWNoZTo6cGxhdGZvcm1QcmVjYWNoZShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIFByZWNhY2hlQ29tcGxldGlvbkhhbmRs
ZXImJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBzdGF0aWMgV29ya1F1ZXVlJiBxdWV1ZSA9
IFdvcmtRdWV1ZTo6Y3JlYXRlKCJvcmcud2Via2l0LmZvbnQtcHJlY2FjaGUiLCBXb3JrUXVldWU6
OlR5cGU6OlNlcmlhbCwgV29ya1F1ZXVlOjpRT1M6OlVzZXJJbml0aWF0ZWQpLmxlYWtSZWYoKTsK
KworICAgIGF1dG8gdGFzayA9IHN0ZDo6bWFrZV91bmlxdWU8UHJlY2FjaGVUYXNrPigpOworICAg
IHRhc2stPmZhbWlseSA9IGZhbWlseTsKKyAgICB0YXNrLT5mb250RGVzY3JpcHRpb24gPSBmb250
RGVzY3JpcHRpb247CisgICAgY29uc3QgYXV0byYgd2hpdGVsaXN0ID0gZm9udFdoaXRlbGlzdCgp
OworICAgIHRhc2stPmlzV2hpdGVsaXN0ZWQgPSB3aGl0ZWxpc3QuaXNFbXB0eSgpIHx8IHdoaXRl
bGlzdC5jb250YWlucyhmYW1pbHkpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB0YXNrLT5zaG91
bGRBdXRvYWN0aXZlSWZOZWVkZWQgPSBzaG91bGRBdXRvQWN0aXZhdGVGb250SWZOZWVkZWQoZmFt
aWx5KTsKKyNlbmRpZgorICAgIHRhc2stPmNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcik7CisKKyAgICBhdXRvJiByZXN1bHRUYXNrID0gKnRhc2s7CisKKyAgICBx
dWV1ZS5kaXNwYXRjaChbdGFzayA9IHRhc2sucmVsZWFzZSgpXSB7CisgICAgICAgIGlmICghdGFz
ay0+aXNDYW5jZWxlZCkgeworICAgICAgICAgICAgYXV0byBmYW1pbHkgPSB0YXNrLT5mYW1pbHku
aXNvbGF0ZWRDb3B5KCk7CisgICAgICAgICAgICB0YXNrLT5yZXN1bHQgPSBjcmVhdGVGb250UGxh
dGZvcm1EYXRhVGhyZWFkU2FmZSh0YXNrLT5mb250RGVzY3JpcHRpb24sIGZhbWlseSwgbnVsbHB0
ciwgbnVsbHB0ciwgdGFzay0+aXNXaGl0ZWxpc3RlZCwgdGFzay0+c2hvdWxkQXV0b2FjdGl2ZUlm
TmVlZGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
dGFza10geworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFByZWNhY2hlVGFzaz4gZGVsZXRl
cih0YXNrKTsKKyAgICAgICAgICAgIHRhc2stPmNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUodGFz
ay0+cmVzdWx0KSwgdGFzay0+aXNDYW5jZWxlZCk7CisgICAgICAgIH0pOworICAgIH0pOworCisg
ICAgcmV0dXJuIHJlc3VsdFRhc2s7Cit9CisKK3ZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUNhbmNl
bFByZWNhY2hlKEZvbnRDYWNoZTo6UHJlY2FjaGVUYXNrJiB0YXNrKQoreworICAgIHRhc2suaXND
YW5jZWxlZCA9IHRydWU7Cit9CisjZW5kaWYKKwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>