<?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>6218</bug_id>
          
          <creation_ts>2005-12-23 06:45:20 -0800</creation_ts>
          <short_desc>CSS1: WebTextRenderer caches and re-uses fallback renderers that are based on family lists</short_desc>
          <delta_ts>2007-01-18 17:25:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Text</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction, InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>6530</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>bdakin</cc>
    
    <cc>darin</cc>
    
    <cc>hyatt</cc>
    
    <cc>ian</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>26430</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2005-12-23 06:45:20 -0800</bug_when>
    <thetext>Summary: A WebTextRenderer will remember the fallback font it used for a character missing in its font 
and will use that font again for the missing character even if the list of families to search has changed. 
This results in the character coming from a different family from the one specified and even worse, 
different fonts for different characters (depending on which were looked up before and which were not).

To reproduce: (Quit and re-)open Safari and load the test case.

Expected: Both &quot;capital L with stroke&quot; on each line to be the in the same font.

Actual: on the Zapfino line, the first letter is in Lucida Grande, the fallback font that was used for that 
character in the Lucida Grande line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26431</commentid>
    <comment_count>1</comment_count>
      <attachid>5249</attachid>
    <who name="">mitz</who>
    <bug_when>2005-12-23 06:46:04 -0800</bug_when>
    <thetext>Created attachment 5249
Testcase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28414</commentid>
    <comment_count>2</comment_count>
    <who name="">mitz</who>
    <bug_when>2006-01-14 06:46:34 -0800</bug_when>
    <thetext>*** Bug 6529 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28428</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-01-14 11:59:14 -0800</bug_when>
    <thetext>Ugh, this is terrible.  This is basic CSS1 compliance issue. :(
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28430</commentid>
    <comment_count>4</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2006-01-14 15:22:31 -0800</bug_when>
    <thetext>Apple bug: &lt;rdar://problem/4409087&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33797</commentid>
    <comment_count>5</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2006-02-23 13:33:48 -0800</bug_when>
    <thetext>I have been talking with Darin and Hyatt about the best way to solve this problem, and there are several solutions. Most of them are architectural and require some reorganization of font families, etc. There is one simple solution, though, which is just to entirely get rid of the updateGlyphMapEntry() function in WebTextRenderer.m. This function caches the new glyph and substitute renderer in the WebTextRenderer&apos;s characterToGlyphMap; the function makes it so that when a glyph needs to be found in the fallback fonts, that particular glyph will only need to be looked up once for the page, and after that, it will be cached. So there is an obvious performance trade-off if we decide not to cache these glyphs anymore. I have done some performance testing, and my patch does not appear to affect the PLT. However, when I run the PLT on the following html, the performance regression becomes noticeable:

&lt;p style=&quot;font-family:&apos;Arabic&apos;;&quot;&gt;
A A A A A A A A A A A A A A A A A A A A A A A A A A A 
A A A A A A A A A A A A A A A A A A A A A A A A A A A 
A A A A A A A A A A A A A A A A A A A A A A A A A A A
A A A A A A A A A A A A A A A A A A A A A A A A A A A
&lt;/p&gt; 

I am not sure what kind of trade-offs we are willing to make. I have attached the patch for now anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33798</commentid>
    <comment_count>6</comment_count>
      <attachid>6683</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2006-02-23 13:35:06 -0800</bug_when>
    <thetext>Created attachment 6683
Obliterate fallback glyph caching</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33824</commentid>
    <comment_count>7</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2006-02-23 16:27:50 -0800</bug_when>
    <thetext>I was talking to Mitz about this patch on #webkit, and I asked him for a couple of Hebrew sites with a lot of text to performance test this is a more real-world environment in terms of real sites that could actually see a performance regression from this change. Here is what I got:

http://benyehuda.org/bialik/hazozra.html
Avg before: 4136.9        Avg after: 4641.25

http://www.haayal.co.il/story_2579
Avg before: 4740.0        Avg after: 6390.1

These are averages of 6 runs of the PLT where in each run, the PLT loaded the site 10 times...which, if I understand this tool correctly, means that each time is the average load time for 60 loads. The regression for the second site seems fairly significant...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33827</commentid>
    <comment_count>8</comment_count>
      <attachid>6683</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2006-02-23 16:34:48 -0800</bug_when>
    <thetext>Comment on attachment 6683
Obliterate fallback glyph caching

I am review-minusing my own patch. I think these regressions are bad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34885</commentid>
    <comment_count>9</comment_count>
      <attachid>6814</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2006-03-02 13:41:59 -0800</bug_when>
    <thetext>Created attachment 6814
Beginning of a HashMap patch

I am attaching this patch here for now for safe keeping, but after a very long discussion with Hyatt and Maciej, I have decided the shelve working on this bug for now until more of the text code is refactored (which Dave has been planning on doing within the next month or so). Basically, this patch has hit a road block, and it seems like there is no easy way around it right now, but there should be after refactoring. Specifically, the road blocker is that the families array in the WebCoreFont needs to be dynamically allocated to work as a hash key. We simply could not figure out a way to do this that would not be a significant performance hit or involve adding a lot of code to WebCoreFont that already exists for other classes like FontDescription. This comes down to the fundamental issue that maybe the WebCoreFont shouldn&apos;t be the key to the hash table at all -- something like FontDescription makes a lot more sense. However, since the hash table needs to be accessed from the WebKit side as well, WebCoreFont is the only real option right now. Dave thinks that after a lot of the refactoring that is going on, the path this bug should take will become more clear. So I am shelving it for now and attaching the patch for future reference and safe keeping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42801</commentid>
    <comment_count>10</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-05-18 01:23:55 -0700</bug_when>
    <thetext>The test case attached to this bug is not valid.  The glyph exists in Verdana.  Need a better test case.


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42810</commentid>
    <comment_count>11</comment_count>
      <attachid>8390</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-05-18 04:16:30 -0700</bug_when>
    <thetext>Created attachment 8390
test case

Test case copied form bug 6529.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35207</commentid>
    <comment_count>12</comment_count>
      <attachid>12418</attachid>
    <who name="">mitz</who>
    <bug_when>2007-01-13 12:08:52 -0800</bug_when>
    <thetext>Created attachment 12418
[WIP] Implement trees of fallback glyph pages

This patch is work in progress. It takes character-to-glyph mapping out of FontData and allows each Font to have its own mapping, using a shared set of glyph page fallback trees.

For each page number there is (at most) one tree. A path from the root to a node in the tree corresponds to a list of FontDatas. The node points to a glyph page (which may be shared with its ancestors) that maps each character to a glyph in the first FontData in the list that has it, or to 0 if none of the FontDatas has a mapping for that character. A special kind of node, that can occur only as a leaf, corresponds to using system fallback fonts after the list has been exhausted. This prevents system fallback from polluting non-leaf nodes.

Nodes and pages are initialized lazily and employ &quot;copy on write&quot; as far as memory usage is concerned. (&quot;Lazily&quot; still means page-at-a-time, not character-at-a-time, except for system fallback, which remains character-at-a-time).

Some very obvious issues:
- Small caps are broken. I don&apos;t know if there should be &quot;small caps&quot; pages in &quot;small caps&quot; trees, where the lowercase characters map to the small caps font, or some way to use the existing trees.

- I did not integrate this into the complex code path.

- Nodes and pages are never destroyed. I think it is generally okay to keep them around, but when fonts are enabled or disabled in the system it may be a good idea (or absolutely necessary) to destroy them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34792</commentid>
    <comment_count>13</comment_count>
      <attachid>12463</attachid>
    <who name="">mitz</who>
    <bug_when>2007-01-15 11:40:37 -0800</bug_when>
    <thetext>Created attachment 12463
[WIP] Implement trees of fallback glyph pages

No layout test regressions and no apparent pixel test regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34799</commentid>
    <comment_count>14</comment_count>
      <attachid>12466</attachid>
    <who name="">mitz</who>
    <bug_when>2007-01-15 13:19:11 -0800</bug_when>
    <thetext>Created attachment 12466
Implement trees of fallback glyph pages

Includes change log. Includes changes to other platforms. The diff is somewhat big due to how moved files are represented by svn-create-patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34756</commentid>
    <comment_count>15</comment_count>
      <attachid>12466</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-01-15 20:29:36 -0800</bug_when>
    <thetext>Comment on attachment 12466
Implement trees of fallback glyph pages

The general approach here looks great. I&apos;m going to review it in more detail later.

My main concern, and what I discussed with Hyatt a while back when we contemplated this sort of design, is to make sure that in common cases we share as much as possible to keep memory use down. We don&apos;t want to trade a lot of additional memory use for a small amount of additional correctness.

It should be quite common to have distinct family lists that in practice have never encountered characters that would be different. I envision a scheme where we would share pages at first, and then copy and split them as we ask for information about characters that must fall back differently than other characters.

I&apos;m also concerned that the code is just as fast as the current code in the common case of no substitution at all. Font::glyphDataForCharacter is a very hot function. I improved performance in the past by making minor tweaks to the logic to reduce the number of branches. It&apos;s important to make sure that Font::glyphDataForCharacter is written with a very fast common/cached case.

The copyrights on new files say 2006, but should say 2007.

It seems to me that Font.h does not need to include GlyphPageTreeNode.h. A forward declaration should suffice, since it only refers to pointers to the nodes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34718</commentid>
    <comment_count>16</comment_count>
      <attachid>12480</attachid>
    <who name="">mitz</who>
    <bug_when>2007-01-16 02:49:09 -0800</bug_when>
    <thetext>Created attachment 12480
Implement trees of fallback glyph pages

Now with self-loops in the tree. In the previous patch, pages were shared by nodes if the child node did not have any characters mapped that its parent did not. Now the child is merged with the parent and a self-loop is added. This prevents duplication of the (A overlay C) page in the case of fallback lists A-&gt;B-&gt;C and A-&gt;C where B has no mappings that A does not have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34494</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-01-17 09:31:56 -0800</bug_when>
    <thetext>How are we going to evaluate the performance impact of this? I&apos;m very excited to get this fix into the tree.

Hyatt, comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34414</commentid>
    <comment_count>18</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2007-01-17 16:12:01 -0800</bug_when>
    <thetext>I think it&apos;s ok to land it and then see if performance regresses.  We should pick a landing time when mitz will be available to respond quickly to feedback though if it does regress perf.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34287</commentid>
    <comment_count>19</comment_count>
      <attachid>12480</attachid>
    <who name="">mitz</who>
    <bug_when>2007-01-17 22:11:38 -0800</bug_when>
    <thetext>Comment on attachment 12480
Implement trees of fallback glyph pages

Going to make a version that addresses Darin&apos;s comments (change the #include to a forward declaration and update copyright notices).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34300</commentid>
    <comment_count>20</comment_count>
      <attachid>12480</attachid>
    <who name="">mitz</who>
    <bug_when>2007-01-18 04:57:22 -0800</bug_when>
    <thetext>Comment on attachment 12480
Implement trees of fallback glyph pages

This was very buggy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34310</commentid>
    <comment_count>21</comment_count>
      <attachid>12531</attachid>
    <who name="">mitz</who>
    <bug_when>2007-01-18 06:39:20 -0800</bug_when>
    <thetext>Created attachment 12531
Implement trees of fallback glyph pages

Abandoned the node-collapsing idea, instead using another technique to share the page in the scenario described in comment #16. Collapsing nodes turned out to be complicated because once you do it a node&apos;s level in the tree no longer corresponds with an index into a FontFallbackList, and my solution for this was kind of messy. It also required special-casing &quot;system fallback&quot;.

Replaced the #include with forward declarations. There are no new files in this patch, only moved (renamed) files, therefore I did not change the years in copyright lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34324</commentid>
    <comment_count>22</comment_count>
      <attachid>12531</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-01-18 07:56:59 -0800</bug_when>
    <thetext>Comment on attachment 12531
Implement trees of fallback glyph pages

This is great!

The patch definitely removes an optimization: needCharTransform combined the smallCaps check and the RTL/mirror check into a single check outside the loop. The change means we now have an additional branch in the loop. But I&apos;m not sure what the impact will be. Since this code is so hot someone will need to profile it again and possibly rearrange things a bit.

+                return data;
+            } else {
+                // Even system fallback can fail.

No need for an else after a return.

+        return floatWidthForSimpleText(run, style, 0, 0);
     else

Same here.

+        node = new GlyphPageTreeNode();

I usually leave out the () in cases like this one.

I agree with Hyatt, we should land this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34271</commentid>
    <comment_count>23</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-01-18 17:25:54 -0800</bug_when>
    <thetext>Landed in r18966.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>5249</attachid>
            <date>2005-12-23 06:46:04 -0800</date>
            <delta_ts>2006-05-18 04:16:30 -0700</delta_ts>
            <desc>Testcase</desc>
            <filename>wrong-fallback.html</filename>
            <type>text/html</type>
            <size>402</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8dGl0bGU+V3JvbmcgZmFsbGJhY2sgZmFtaWx5PC90aXRsZT4KPC9oZWFk
Pgo8Ym9keSBzdHlsZT0iZm9udC1zaXplOiAyMHB4OyI+CkZhbGxiYWNrIGZyb20gVmVyZGFuYS4u
Lgo8cCBzdHlsZT0iZm9udC1mYW1pbHk6ICd2ZXJkYW5hJywgJ0x1Y2lkYSBHcmFuZGUnOyI+Ci4u
LnRvIEx1Y2lkYSBHcmFuZGU6ICYjeDAxNDE7IDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTonTHVj
aWRhIEdyYW5kZSciPiYjeDAxNDE7PC9zcGFuPgo8L3A+CjxwIHN0eWxlPSJmb250LWZhbWlseTog
J3ZlcmRhbmEnLCB6YXBmaW5vOyI+Ci4uLnRvIFphcGZpbm86ICYjeDAxNDE7IDxzcGFuIHN0eWxl
PSJmb250LWZhbWlseTp6YXBmaW5vIj4mI3gwMTQxOzwvc3Bhbj4KPC9wPgo8L2JvZHk+CjwvaHRt
bD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6683</attachid>
            <date>2006-02-23 13:35:06 -0800</date>
            <delta_ts>2006-02-23 16:34:48 -0800</delta_ts>
            <desc>Obliterate fallback glyph caching</desc>
            <filename>noGlyphCaching.txt</filename>
            <type>text/plain</type>
            <size>1815</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmVTdXBwb3J0L1dlYlRleHRSZW5kZXJlci5tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmVTdXBwb3J0L1dlYlRleHRSZW5kZXJlci5tCShyZXZpc2lvbiAxMjk0NikKKysrIFdlYkNv
cmVTdXBwb3J0L1dlYlRleHRSZW5kZXJlci5tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1
LDYgQEAKIAogc3RhdGljIFdpZHRoTWFwICpleHRlbmRXaWR0aE1hcChXZWJUZXh0UmVuZGVyZXIg
KiwgQVRTR2x5cGhSZWYpOwogc3RhdGljIEFUU0dseXBoUmVmIGV4dGVuZEdseXBoTWFwKFdlYlRl
eHRSZW5kZXJlciAqLCBVQ2hhcjMyKTsKLXN0YXRpYyB2b2lkIHVwZGF0ZUdseXBoTWFwRW50cnko
V2ViVGV4dFJlbmRlcmVyICosIFVDaGFyMzIsIEFUU0dseXBoUmVmLCBXZWJUZXh0UmVuZGVyZXIg
KnN1YnN0aXR1dGVSZW5kZXJlcik7CiAKIHN0YXRpYyB2b2lkIGZyZWVXaWR0aE1hcChXaWR0aE1h
cCAqKTsKIHN0YXRpYyB2b2lkIGZyZWVHbHlwaE1hcChHbHlwaE1hcCAqKTsKQEAgLTEwNTYsMjMg
KzEwNTUsNiBAQAogICAgIHJldHVybiBydW5XaWR0aDsKIH0KIAotc3RhdGljIHZvaWQgdXBkYXRl
R2x5cGhNYXBFbnRyeShXZWJUZXh0UmVuZGVyZXIgKnJlbmRlcmVyLCBVQ2hhcjMyIGMsIEFUU0ds
eXBoUmVmIGdseXBoLCBXZWJUZXh0UmVuZGVyZXIgKnN1YnN0aXR1dGVSZW5kZXJlcikKLXsKLSAg
ICBHbHlwaE1hcCAqbWFwOwotICAgIGZvciAobWFwID0gcmVuZGVyZXItPmNoYXJhY3RlclRvR2x5
cGhNYXA7IG1hcDsgbWFwID0gbWFwLT5uZXh0KSB7Ci0gICAgICAgIFVDaGFyMzIgc3RhcnQgPSBt
YXAtPnN0YXJ0UmFuZ2U7Ci0gICAgICAgIGlmIChjID49IHN0YXJ0ICYmIGMgPD0gbWFwLT5lbmRS
YW5nZSkgewotICAgICAgICAgICAgaW50IGkgPSBjIC0gc3RhcnQ7Ci0gICAgICAgICAgICBtYXAt
PmdseXBoc1tpXS5nbHlwaCA9IGdseXBoOwotICAgICAgICAgICAgLy8gVGhpcyByZW5kZXJlciB3
aWxsIGxlYWsuCi0gICAgICAgICAgICAvLyBObyBwcm9ibGVtIHRob3VnaDsgd2Ugd2FudCBpdCB0
byBzdGljayBhcm91bmQgZm9yZXZlci4KLSAgICAgICAgICAgIC8vIE1heCB0aGVvcmV0aWNhbCBy
ZXRhaW4gY291bnRzIGFwcGxpZWQgaGVyZSB3aWxsIGJlIG51bV9mb250c19vbl9zeXN0ZW0gKiBu
dW1fZ2x5cGhzX2luX2ZvbnQuCi0gICAgICAgICAgICBtYXAtPmdseXBoc1tpXS5yZW5kZXJlciA9
IFtzdWJzdGl0dXRlUmVuZGVyZXIgcmV0YWluXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotfQotCiBzdGF0aWMgQVRTR2x5cGhSZWYgZXh0ZW5kR2x5cGhNYXAoV2ViVGV4
dFJlbmRlcmVyICpyZW5kZXJlciwgVUNoYXIzMiBjKQogewogICAgIEdseXBoTWFwICptYXAgPSBt
YWxsb2Moc2l6ZW9mKEdseXBoTWFwKSk7CkBAIC0xOTAzLDcgKzE4ODUsNiBAQAogICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoc3Vic3RpdHV0ZVJlbmRlcmVyID09IGxvY2FsUmVuZGVyZXJCdWZm
ZXJbMF0pOwogICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGxvY2FsV2lkdGhCdWZmZXJbMF07
CiAgICAgICAgICAgICAgICAgICAgIGdseXBoID0gbG9jYWxHbHlwaEJ1ZmZlclswXTsKLSAgICAg
ICAgICAgICAgICAgICAgdXBkYXRlR2x5cGhNYXBFbnRyeShyZW5kZXJlciwgYywgZ2x5cGgsIHN1
YnN0aXR1dGVSZW5kZXJlcik7CiAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyID0gc3Vic3Rp
dHV0ZVJlbmRlcmVyOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
</data>
<flag name="review"
          id="1687"
          type_id="1"
          status="-"
          setter="bdakin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6814</attachid>
            <date>2006-03-02 13:41:59 -0800</date>
            <delta_ts>2006-03-02 13:41:59 -0800</delta_ts>
            <desc>Beginning of a HashMap patch</desc>
            <filename>hashPatch.txt</filename>
            <type>text/plain</type>
            <size>15889</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJUZXh0UmVuZGVyZXJGYWN0b3J5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYlRleHRSZW5kZXJlckZhY3Rvcnku
aAkocmV2aXNpb24gMTMwNjkpCisrKyBXZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViVGV4dFJlbmRl
cmVyRmFjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw2IEBACiAKIC0gKE5TRm9u
dCAqKWNhY2hlZEZvbnRGcm9tRmFtaWx5OihOU1N0cmluZyAqKWZhbWlseSB0cmFpdHM6KE5TRm9u
dFRyYWl0TWFzayl0cmFpdHMgc2l6ZTooZmxvYXQpc2l6ZTsKIAotLSAoV2ViVGV4dFJlbmRlcmVy
ICopcmVuZGVyZXJXaXRoRm9udDooV2ViQ29yZUZvbnQpZm9udDsKKy0gKFdlYlRleHRSZW5kZXJl
ciAqKWNyZWF0ZVJlbmRlcmVyV2l0aEZvbnQ6KFdlYkNvcmVGb250KWZvbnQ7CiAKIEBlbmQKSW5k
ZXg6IFdlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJUZXh0UmVuZGVyZXJGYWN0b3J5Lm0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYlRleHRSZW5kZXJlckZhY3RvcnkubQko
cmV2aXNpb24gMTMwNjkpCisrKyBXZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViVGV4dFJlbmRlcmVy
RmFjdG9yeS5tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsMTAgKzEzOCw2IEBACiAKIC0gKHZvaWQp
Y2xlYXJDYWNoZXMKIHsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgV0VCX1RFWFRf
UkVOREVSRVJfRkFDVE9SWV9OVU1fQ0FDSEVTOyArK2kpCi0gICAgICAgIFtjYWNoZXNbaV0gcmVt
b3ZlQWxsT2JqZWN0c107Ci0KICAgICBpZiAoZm9udENhY2hlKQogICAgICAgICBDRlJlbGVhc2Uo
Zm9udENhY2hlKTsKICAgICBmb250Q2FjaGUgPSAwOwpAQCAtMjI1LDM5ICsyMjEsMTcgQEAKICAg
ICByZXR1cm4gcmV0OyAgICAKIH0KIAotLSBpbml0Ci17Ci0gICAgW3N1cGVyIGluaXRdOwotICAg
IAotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBXRUJfVEVYVF9SRU5ERVJFUl9GQUNU
T1JZX05VTV9DQUNIRVM7ICsraSkKLSAgICAgICAgY2FjaGVzW2ldID0gW1tOU011dGFibGVEaWN0
aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICAKLSAgICByZXR1cm4gc2VsZjsKLX0KLQogLSAodm9p
ZClkZWFsbG9jCiB7Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IFdFQl9URVhUX1JF
TkRFUkVSX0ZBQ1RPUllfTlVNX0NBQ0hFUzsgKytpKQotICAgICAgICBbY2FjaGVzW2ldIHJlbGVh
c2VdOwotCiAgICAgW3ZpZXdCdWZmZXJzIHJlbGVhc2VdOwogICAgIFt2aWV3U3RhY2sgcmVsZWFz
ZV07CiAgICAgCiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQogCi0tIChXZWJUZXh0UmVuZGVyZXIg
KilyZW5kZXJlcldpdGhGb250OihXZWJDb3JlRm9udClmb250CistIChXZWJUZXh0UmVuZGVyZXIg
KiljcmVhdGVSZW5kZXJlcldpdGhGb250OihXZWJDb3JlRm9udClmb250CiB7Ci0gICAgTlNNdXRh
YmxlRGljdGlvbmFyeSAqY2FjaGUgPSBjYWNoZXNbKGZvbnQuc3ludGhldGljQm9sZCA8PCAyKSB8
IChmb250LnN5bnRoZXRpY09ibGlxdWUgPDwgMSkgfCBmb250LmZvclByaW50ZXJdOwotICAgIFdl
YlRleHRSZW5kZXJlciAqcmVuZGVyZXIgPSBbY2FjaGUgb2JqZWN0Rm9yS2V5OmZvbnQuZm9udF07
Ci0gICAgaWYgKHJlbmRlcmVyID09IG5pbCkgewotICAgICAgICByZW5kZXJlciA9IFtbV2ViVGV4
dFJlbmRlcmVyIGFsbG9jXSBpbml0V2l0aEZvbnQ6Zm9udF07Ci0gICAgICAgIFtjYWNoZSBzZXRP
YmplY3Q6cmVuZGVyZXIgZm9yS2V5OmZvbnQuZm9udF07Ci0gICAgICAgIFtyZW5kZXJlciByZWxl
YXNlXTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlbmRlcmVyOworICAgIHJldHVybiBbW1tXZWJUZXh0
UmVuZGVyZXIgYWxsb2NdIGluaXRXaXRoRm9udDpmb250XSBhdXRvcmVsZWFzZV07CiB9CiAKIC0g
KE5TRm9udCAqKWZhbGxiYWNrRm9udFdpdGhUcmFpdHM6KE5TRm9udFRyYWl0TWFzayl0cmFpdHMg
c2l6ZTooZmxvYXQpc2l6ZSAKQEAgLTMyMiw2ICsyOTYsNyBAQAogICAgIAogICAgIFdlYkNvcmVG
b250IHJlc3VsdDsKICAgICByZXN1bHQuZm9udCA9IGZvbnQ7CisgICAgcmVzdWx0LmZhbWlsaWVz
ID0gZmFtaWxpZXM7CiAgICAgcmVzdWx0LnN5bnRoZXRpY0JvbGQgPSAodHJhaXRzICYgTlNCb2xk
Rm9udE1hc2spICYmICEoYWN0dWFsVHJhaXRzICYgTlNCb2xkRm9udE1hc2spOwogICAgIHJlc3Vs
dC5zeW50aGV0aWNPYmxpcXVlID0gKHRyYWl0cyAmIE5TSXRhbGljRm9udE1hc2spICYmICEoYWN0
dWFsVHJhaXRzICYgTlNJdGFsaWNGb250TWFzayk7CiAgICAgcmVzdWx0LmZvclByaW50ZXIgPSBO
TzsKSW5kZXg6IFdlYktpdC9XZWJDb3JlU3VwcG9ydC9XZWJUZXh0UmVuZGVyZXIubQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvV2ViQ29yZVN1cHBvcnQvV2ViVGV4dFJlbmRlcmVyLm0JKHJldmlzaW9u
IDEzMDY5KQorKysgV2ViS2l0L1dlYkNvcmVTdXBwb3J0L1dlYlRleHRSZW5kZXJlci5tCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NjQsNiArNzY0LDcgQEAKICAgICBXZWJDb3JlSW5pdGlhbGl6ZUZvbnQo
JnN1YnN0aXR1dGVGb250KTsKICAgICBOU1N0cmluZyAqc3RyaW5nID0gW1tOU1N0cmluZyBhbGxv
Y10gaW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5Oih1bmljaGFyICopY2hhcmFjdGVycyBsZW5ndGg6
IG51bUNoYXJhY3RlcnMgZnJlZVdoZW5Eb25lOiBOT107CiAgICAgc3Vic3RpdHV0ZUZvbnQuZm9u
dCA9IGZpbmRTdWJzdGl0dXRlRm9udChyZW5kZXJlciwgc3RyaW5nLCBmYW1pbGllcyk7CisgICAg
c3Vic3RpdHV0ZUZvbnQuZmFtaWxpZXMgPSBmYW1pbGllczsKICAgICBbc3RyaW5nIHJlbGVhc2Vd
OwogICAgIHJldHVybiByZW5kZXJlckZvckFsdGVybmF0ZUZvbnQocmVuZGVyZXIsIHN1YnN0aXR1
dGVGb250KTsKIH0KQEAgLTEzNDUsNyArMTM0Niw3IEBACiAgICAgICAgIGxhc3RPZmZzZXQgPSBz
dWJzdGl0dXRlT2Zmc2V0OwogICAgICAgICBzdGF0dXMgPSBBVFNVTWF0Y2hGb250c1RvVGV4dChs
YXlvdXQsIHN1YnN0aXR1dGVPZmZzZXQsIGtBVFNVVG9UZXh0RW5kLCAmQVRTVVN1YnN0aXR1dGVG
b250LCAmc3Vic3RpdHV0ZU9mZnNldCwgJnN1YnN0aXR1dGVMZW5ndGgpOwogICAgICAgICBpZiAo
c3RhdHVzID09IGtBVFNVRm9udHNNYXRjaGVkIHx8IHN0YXR1cyA9PSBrQVRTVUZvbnRzTm90TWF0
Y2hlZCkgewotICAgICAgICAgICAgc3Vic3RpdHV0ZVJlbmRlcmVyID0gZmluZFN1YnN0aXR1dGVS
ZW5kZXJlcihyZW5kZXJlciwgcnVuLT5jaGFyYWN0ZXJzK3N1YnN0aXR1dGVPZmZzZXQsIHN1YnN0
aXR1dGVMZW5ndGgsIHN0eWxlLT5mYW1pbGllcyk7CisgICAgICAgICAgICBzdWJzdGl0dXRlUmVu
ZGVyZXIgPSBmaW5kU3Vic3RpdHV0ZVJlbmRlcmVyKHJlbmRlcmVyLCBydW4tPmNoYXJhY3RlcnMr
c3Vic3RpdHV0ZU9mZnNldCwgc3Vic3RpdHV0ZUxlbmd0aCwgcmVuZGVyZXItPmZvbnQuZmFtaWxp
ZXMpOwogICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGVSZW5kZXJlcikgewogICAgICAgICAgICAg
ICAgIGluaXRpYWxpemVBVFNVU3R5bGUoc3Vic3RpdHV0ZVJlbmRlcmVyKTsKICAgICAgICAgICAg
ICAgICBpZiAoc3Vic3RpdHV0ZVJlbmRlcmVyLT5fQVRTVVN0eWxlKQpAQCAtMTg4Niw3ICsxODg3
LDcgQEAKICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgYSBzdWJzdGl0dXRlIGZvbnQgaWYgdGhpcyBm
b250IGRpZG4ndCBoYXZlIGEgZ2x5cGggZm9yIGEgY2hhcmFjdGVyIGluIHRoZQogICAgICAgICAv
LyBzdHJpbmcuIElmIG9uZSBpc24ndCBmb3VuZCB3ZSBlbmQgdXAgZHJhd2luZyBhbmQgbWVhc3Vy
aW5nIHRoZSAwIGdseXBoLCB1c3VhbGx5IGEgYm94LgogICAgICAgICBpZiAoZ2x5cGggPT0gMCAm
JiBzdHlsZS0+YXR0ZW1wdEZvbnRTdWJzdGl0dXRpb24pIHsKLSAgICAgICAgICAgIFdlYlRleHRS
ZW5kZXJlciAqc3Vic3RpdHV0ZVJlbmRlcmVyID0gZmluZFN1YnN0aXR1dGVSZW5kZXJlcihyZW5k
ZXJlciwgY3AsIGNsdXN0ZXJMZW5ndGgsIHN0eWxlLT5mYW1pbGllcyk7CisgICAgICAgICAgICBX
ZWJUZXh0UmVuZGVyZXIgKnN1YnN0aXR1dGVSZW5kZXJlciA9IGZpbmRTdWJzdGl0dXRlUmVuZGVy
ZXIocmVuZGVyZXIsIGNwLCBjbHVzdGVyTGVuZ3RoLCByZW5kZXJlci0+Zm9udC5mYW1pbGllcyk7
CiAgICAgICAgICAgICBpZiAoc3Vic3RpdHV0ZVJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAg
V2ViQ29yZVRleHRSdW4gY2x1c3RlclJ1biA9IHsgY3AsIGNsdXN0ZXJMZW5ndGgsIDAsIGNsdXN0
ZXJMZW5ndGggfTsKICAgICAgICAgICAgICAgICBXZWJDb3JlVGV4dFN0eWxlIGNsdXN0ZXJTdHls
ZSA9ICpzdHlsZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVUZXh0UmVuZGVy
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlVGV4dFJlbmRl
cmVyLmgJKHJldmlzaW9uIDEzMDY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVRl
eHRSZW5kZXJlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw4IEBACiAKICNpbXBvcnQg
PENvY29hL0NvY29hLmg+CiAKK3N0cnVjdCBXZWJDb3JlRm9udDsKKwogc3RydWN0IFdlYkNvcmVU
ZXh0U3R5bGUKIHsKICAgICBOU0NvbG9yICp0ZXh0Q29sb3I7CkBAIC0zNCw3ICszNiw2IEBACiAg
ICAgaW50IHBhZGRpbmc7CiAgICAgaW50IHRhYldpZHRoOwogICAgIGludCB4cG9zOwotICAgIE5T
U3RyaW5nICoqZmFtaWxpZXM7CiAgICAgYm9vbCBzbWFsbENhcHM7CiAgICAgYm9vbCBydGw7CiAg
ICAgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
V2ViQ29yZVRleHRSZW5kZXJlckZhY3RvcnkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2ViQ29yZVRleHRSZW5kZXJlckZhY3RvcnkubW0JKHJldmlzaW9uIDEzMDY5KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVRleHRSZW5kZXJlckZhY3RvcnkubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI1LDE4ICsyNSw3NyBAQAogCiAjaW1wb3J0ICJjb25maWcuaCIKICNp
bXBvcnQgIldlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5LmgiCisjaW1wb3J0ICJXZWJDb3JlVGV4
dFJlbmRlcmVyLmgiCiAKICNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQg
PGt4bWxjb3JlL0hhc2hNYXAuaD4KKyNpbXBvcnQgPGt4bWxjb3JlL1ZlY3Rvci5oPgogI2ltcG9y
dCAiTWFjRnJhbWUuaCIKICNpbXBvcnQgIktXUUxpc3RCb3guaCIKICNpbXBvcnQgIldlYkNvcmVG
cmFtZUJyaWRnZS5oIgogI2ltcG9ydCAiV2ViQ29yZVRleHRSZW5kZXJlci5oIgorI2ltcG9ydCAi
U3RyaW5nSW1wbC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorbmFtZXNwYWNlIEtY
TUxDb3JlIHsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIERlZmF1bHRIYXNoOwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBIYXNoVHJhaXRzOworICAgIAorICAgIGlu
bGluZSB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBXZWJDb3JlRm9udCogZm9udCkKKyAgICB7
CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgNT4gaGFzaENvZGVzOworICAgICAgICBOU1N0cmlu
ZyAqKmZhbWlsaWVzID0gZm9udC0+ZmFtaWxpZXM7CisgICAgICAgIAorICAgICAgICB1bnNpZ25l
ZCBoYXNoQ29kZSA9IFtmb250LT5mb250IGhhc2hdOworICAgICAgICBoYXNoQ29kZXMuaW5zZXJ0
KDAsIGhhc2hDb2RlKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBmYW1p
bGllcyAmJiBmYW1pbGllc1tpXTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSArIDEgPiBoYXNo
Q29kZXMuY2FwYWNpdHkoKSkKKyAgICAgICAgICAgICAgICBoYXNoQ29kZXMucmVzaXplKGhhc2hD
b2Rlcy5jYXBhY2l0eSgpICogMik7CisgICAgICAgICAgICBoYXNoQ29kZSA9IFtmYW1pbGllc1tp
XSBoYXNoXTsKKyAgICAgICAgICAgIGhhc2hDb2Rlcy5pbnNlcnQoaSArIDEsIGhhc2hDb2RlKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVI
YXNoKHJlaW50ZXJwcmV0X2Nhc3Q8UUNoYXIgKj4oaGFzaENvZGVzLmRhdGEoKSksIGhhc2hDb2Rl
cy5zaXplKCkgKiBzaXplb2YodW5zaWduZWQpIC8gc2l6ZW9mKFFDaGFyKSk7CisgICAgfQorICAg
IAorICAgIHN0cnVjdCBXZWJUZXh0UmVuZGVyZXJIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgV2ViQ29yZUZvbnQqIGZvbnQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBjb21wdXRlSGFzaChmb250KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
c3RhdGljIGJvb2wgZXF1YWwoV2ViQ29yZUZvbnQqIGEsIGNvbnN0IFdlYkNvcmVGb250KiBiKQor
ICAgICAgICB7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKCFbYS0+Zm9udCBpc0VxdWFsOmItPmZvbnRdKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBm
YW1pbGllcyBhbmQgY29tcGFyZSBlYWNoCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBiLT5mYW1p
bGllcyAmJiBiLT5mYW1pbGllc1tpXTsgaSsrKQorICAgICAgICAgICAgICAgIGlmICghKGEtPmZh
bWlsaWVzICYmIGEtPmZhbWlsaWVzW2ldICYmIFthLT5mYW1pbGllc1tpXSBpc0VxdWFsOmItPmZh
bWlsaWVzW2ldXSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gTm93IG1ha2Ugc3VyZSB0aGF0IGYxIGRvZXNuJ3QgaGF2ZSBt
b3JlIGZhbWlsaWVzIGxlZnQKKyAgICAgICAgICAgIGlmIChhLT5mYW1pbGllcyAmJiBhLT5mYW1p
bGllc1tpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRl
PD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNvcmVGb250Kj4geworICAgICAgICB0eXBlZGVmIFdl
YlRleHRSZW5kZXJlckhhc2ggSGFzaDsKKyAgICB9OworfQorCiB2b2lkIFdlYkNvcmVJbml0aWFs
aXplRm9udChXZWJDb3JlRm9udCAqZm9udCkKIHsKICAgICBmb250LT5mb250ID0gbmlsOworICAg
IGZvbnQtPmZhbWlsaWVzID0gbmlsOwogICAgIGZvbnQtPnN5bnRoZXRpY0JvbGQgPSBOTzsKICAg
ICBmb250LT5zeW50aGV0aWNPYmxpcXVlID0gTk87CiAgICAgZm9udC0+Zm9yUHJpbnRlciA9IE5P
OwpAQCAtNTcsNyArMTE2LDYgQEAKICAgICBzdHlsZS0+bGV0dGVyU3BhY2luZyA9IDA7CiAgICAg
c3R5bGUtPndvcmRTcGFjaW5nID0gMDsKICAgICBzdHlsZS0+cGFkZGluZyA9IDA7Ci0gICAgc3R5
bGUtPmZhbWlsaWVzID0gbmlsOwogICAgIHN0eWxlLT5zbWFsbENhcHMgPSBOTzsKICAgICBzdHls
ZS0+cnRsID0gTk87CiAgICAgc3R5bGUtPmRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBOTzsKQEAgLTc1
LDYgKzEzMyw4IEBACiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9y
eQogCit0eXBlZGVmIEhhc2hNYXA8V2ViQ29yZUZvbnQqLCBpZCA8V2ViQ29yZVRleHRSZW5kZXJl
cj4gPiBXZWJUZXh0UmVuZGVyZXJNYXA7CitzdGF0aWMgV2ViVGV4dFJlbmRlcmVyTWFwICp0ZXh0
UmVuZGVyZXJNYXA7CiBzdGF0aWMgV2ViQ29yZVRleHRSZW5kZXJlckZhY3RvcnkgKnNoYXJlZEZh
Y3Rvcnk7CiAKICsgKFdlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5ICopc2hhcmVkRmFjdG9yeQpA
QCAtMTA2LDEyICsxNjYsMjggQEAKICAgICByZXR1cm4gTk87CiB9CiAKLS0gKGlkIDxXZWJDb3Jl
VGV4dFJlbmRlcmVyPilyZW5kZXJlcldpdGhGb250OihXZWJDb3JlRm9udClmb250CistIChpZCA8
V2ViQ29yZVRleHRSZW5kZXJlcj4pY3JlYXRlUmVuZGVyZXJXaXRoRm9udDooV2ViQ29yZUZvbnQp
Zm9udAogewotICAgIExPR19FUlJPUigicmVuZGVyZXJGb3JGb250IG5lZWRzIHRvIGJlIGltcGxl
bWVudGVkIGluIHRleHQgcmVuZGVyZXIgZmFjdG9yeSBzdWJjbGFzcyIpOworICAgIExPR19FUlJP
UigiY3JlYXRlUmVuZGVyZXJXaXRoRm9udCBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZCBpbiB0ZXh0
IHJlbmRlcmVyIGZhY3Rvcnkgc3ViY2xhc3MiKTsKICAgICByZXR1cm4gbmlsOwogfQogCisvLyBV
bmxpa2UgY3JlYXRlUmVuZGVyZXJXaXRoRm9udCwgcmVuZGVyZXJXaXRoRm9udCB0YWtlcyBjYXJl
IG9mIGNhY2hpbmcgYW5kIGlzIHRoZXJlZm9yZSBpbXBsZW1lbnRlZCBoZXJlCistIChpZCA8V2Vi
Q29yZVRleHRSZW5kZXJlcj4pcmVuZGVyZXJXaXRoRm9udDooV2ViQ29yZUZvbnQpZm9udAorewor
ICAgIGlmICghdGV4dFJlbmRlcmVyTWFwKQorICAgICAgICB0ZXh0UmVuZGVyZXJNYXAgPSBuZXcg
V2ViVGV4dFJlbmRlcmVyTWFwOworICAgIAorICAgIGlkIDxXZWJDb3JlVGV4dFJlbmRlcmVyPiBy
ZW5kZXJlciA9IHRleHRSZW5kZXJlck1hcC0+Z2V0KCZmb250KTsKKyAgICBpZiAoIXJlbmRlcmVy
KSB7CisgICAgICAgIFdlYkNvcmVGb250KiBmID0gbmV3IFdlYkNvcmVGb250KGZvbnQpOworICAg
ICAgICByZW5kZXJlciA9IFtzZWxmIGNyZWF0ZVJlbmRlcmVyV2l0aEZvbnQ6KmZdOworICAgICAg
ICB0ZXh0UmVuZGVyZXJNYXAtPnNldChmLCByZW5kZXJlcik7CisgICAgICAgIFtyZW5kZXJlciBy
ZXRhaW5dOworICAgIH0KKyAgICByZXR1cm4gcmVuZGVyZXI7Cit9CisKIC0gKHZvaWQpY2xlYXJD
YWNoZXMKIHsKICAgICBRTGlzdEJveDo6Y2xlYXJDYWNoZWRUZXh0UmVuZGVyZXJzKCk7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCShyZXZpc2lvbiAx
MzA2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNTIyLDggKzUyMiw5IEBACiAKICAgICAvLyBBdm9pZCBhbGxvY2F0aW9u
cywgdXNlIHN0YWNrIGFycmF5IHRvIHBhc3MgZm9udCBmYW1pbGllcy4gIE5vcm1hbGx5IHRoZXNl
CiAgICAgLy8gY3NzIGZhbGxiYWNrIGxpc3RzIGFyZSBzbWFsbCA8PSAzLgotICAgIENSRUFURV9G
QU1JTFlfQVJSQVkobV9kYXRhLT5zdGF0ZS5mb250LCBmYW1pbGllcyk7ICAgIAotCisgICAgQ1JF
QVRFX0ZBTUlMWV9BUlJBWShtX2RhdGEtPnN0YXRlLmZvbnQsIGZhbWlsaWVzKTsKKyAgICBtX2Rh
dGEtPnN0YXRlLmZvbnQuc2V0V2ViQ29yZUZvbnRGYW1pbGllcyhmYW1pbGllcyk7CisgICAgCiAg
ICAgdXBkYXRlVGV4dFJlbmRlcmVyKCk7CiAKICAgICBjb25zdCBVbmlDaGFyKiBzdHIgPSAoY29u
c3QgVW5pQ2hhciopcXN0cmluZy51bmljb2RlKCk7CkBAIC01MzQsNyArNTM1LDYgQEAKICAgICBX
ZWJDb3JlVGV4dFN0eWxlIHN0eWxlOwogICAgIFdlYkNvcmVJbml0aWFsaXplRW1wdHlUZXh0U3R5
bGUoJnN0eWxlKTsKICAgICBzdHlsZS50ZXh0Q29sb3IgPSBuc0NvbG9yKG1fZGF0YS0+c3RhdGUu
cGVuLmNvbG9yKCkpOwotICAgIHN0eWxlLmZhbWlsaWVzID0gZmFtaWxpZXM7CiAgICAgc3R5bGUu
dGFiV2lkdGggPSB0YWJXaWR0aDsKICAgICBzdHlsZS54cG9zID0geHBvczsKICAgICAKQEAgLTU1
Niw3ICs1NTYsOCBAQAogICAgIC8vIEF2b2lkIGFsbG9jYXRpb25zLCB1c2Ugc3RhY2sgYXJyYXkg
dG8gcGFzcyBmb250IGZhbWlsaWVzLiAgTm9ybWFsbHkgdGhlc2UKICAgICAvLyBjc3MgZmFsbGJh
Y2sgbGlzdHMgYXJlIHNtYWxsIDw9IDMuCiAgICAgQ1JFQVRFX0ZBTUlMWV9BUlJBWShtX2RhdGEt
PnN0YXRlLmZvbnQsIGZhbWlsaWVzKTsKLQorICAgIG1fZGF0YS0+c3RhdGUuZm9udC5zZXRXZWJD
b3JlRm9udEZhbWlsaWVzKGZhbWlsaWVzKTsKKyAgICAKICAgICB1cGRhdGVUZXh0UmVuZGVyZXIo
KTsKIAogICAgIGlmIChmcm9tIDwgMCkKQEAgLTU3NSw3ICs1NzYsNiBAQAogICAgIHN0eWxlLmxl
dHRlclNwYWNpbmcgPSBsZXR0ZXJTcGFjaW5nOwogICAgIHN0eWxlLndvcmRTcGFjaW5nID0gd29y
ZFNwYWNpbmc7CiAgICAgc3R5bGUuc21hbGxDYXBzID0gc21hbGxDYXBzOwotICAgIHN0eWxlLmZh
bWlsaWVzID0gZmFtaWxpZXM7CiAgICAgc3R5bGUucGFkZGluZyA9IHRvQWRkOwogICAgIHN0eWxl
LnRhYldpZHRoID0gdGFiV2lkdGg7CiAgICAgc3R5bGUueHBvcyA9IHhwb3M7CkBAIC02MTMsOCAr
NjEzLDcgQEAKICAgICBzdHlsZS5kaXJlY3Rpb25hbE92ZXJyaWRlID0gdmlzdWFsbHlPcmRlcmVk
OwogICAgIHN0eWxlLmxldHRlclNwYWNpbmcgPSBsZXR0ZXJTcGFjaW5nOwogICAgIHN0eWxlLndv
cmRTcGFjaW5nID0gd29yZFNwYWNpbmc7Ci0gICAgc3R5bGUuc21hbGxDYXBzID0gc21hbGxDYXBz
OwotICAgIHN0eWxlLmZhbWlsaWVzID0gZmFtaWxpZXM7ICAgIAorICAgIHN0eWxlLnNtYWxsQ2Fw
cyA9IHNtYWxsQ2FwczsgCiAgICAgc3R5bGUucGFkZGluZyA9IHRvQWRkOwogICAgIHN0eWxlLnRh
YldpZHRoID0gdGFiV2lkdGg7CiAgICAgc3R5bGUueHBvcyA9IHhwb3M7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL21hYy9XZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5LmgJKHJldmlz
aW9uIDEzMDY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVRleHRSZW5kZXJlckZh
Y3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogCiB0eXBlZGVmIHN0cnVj
dCBXZWJDb3JlRm9udCB7CiAgICAgTlNGb250ICpmb250OworICAgIE5TU3RyaW5nICoqZmFtaWxp
ZXM7CiAgICAgYm9vbCBzeW50aGV0aWNCb2xkOwogICAgIGJvb2wgc3ludGhldGljT2JsaXF1ZTsK
ICAgICBib29sIGZvclByaW50ZXI7CkBAIC01NSw2ICs1Niw3IEBACiAKIC0gKFdlYkNvcmVGb250
KWZvbnRXaXRoRmFtaWxpZXM6KE5TU3RyaW5nICoqKWZhbWlsaWVzIHRyYWl0czooTlNGb250VHJh
aXRNYXNrKXRyYWl0cyBzaXplOihmbG9hdClzaXplOwogLSAoQk9PTClpc0ZvbnRGaXhlZFBpdGNo
OihXZWJDb3JlRm9udClmb250OworLSAoaWQgPFdlYkNvcmVUZXh0UmVuZGVyZXI+KWNyZWF0ZVJl
bmRlcmVyV2l0aEZvbnQ6KFdlYkNvcmVGb250KWZvbnQ7CiAtIChpZCA8V2ViQ29yZVRleHRSZW5k
ZXJlcj4pcmVuZGVyZXJXaXRoRm9udDooV2ViQ29yZUZvbnQpZm9udDsKIAogLSAodm9pZCljbGVh
ckNhY2hlczsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vRm9udC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vRm9udC5oCShyZXZpc2lvbiAxMzA2OSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDcgQEAKICAgICBOU1N0cmlu
ZyogZ2V0TlNGYW1pbHkoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5mYW1pbHko
KS5nZXROU0ZhbWlseSgpOyB9ICAgIAogICAgIE5TRm9udCogZ2V0TlNGb250KCkgY29uc3QgeyBy
ZXR1cm4gZ2V0V2ViQ29yZUZvbnQoKS5mb250OyB9CiAgICAgY29uc3QgV2ViQ29yZUZvbnQmIGdl
dFdlYkNvcmVGb250KCkgY29uc3QgeyByZXR1cm4gZm0uZ2V0V2ViQ29yZUZvbnQoKTsgfQorICAg
IHZvaWQgc2V0V2ViQ29yZUZvbnRGYW1pbGllcyhOU1N0cmluZyoqIGZhbWlsaWVzKSBjb25zdCB7
IHJldHVybiBmbS5zZXRXZWJDb3JlRm9udChmYW1pbGllcyk7IH0KICNlbmRpZgogCiBwcml2YXRl
OgpJbmRleDogV2ViQ29yZS9rd3EvS1dRRm9udE1ldHJpY3MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rd3EvS1dRRm9udE1ldHJpY3MubW0JKHJldmlzaW9uIDEzMDY5KQorKysgV2ViQ29yZS9r
d3EvS1dRRm9udE1ldHJpY3MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMSw2ICsxMDEsMTEgQEAK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gbV93ZWJDb3JlRm9udDsKICAgICB9CisgICAgCisg
ICAgdm9pZCBzZXRXZWJDb3JlRm9udEZhbWlsaWVzKE5TU3RyaW5nKiogZmFtaWxpZXMpIGNvbnN0
CisgICAgeworICAgICAgICBtX3dlYkNvcmVGb250LmZhbWlsaWVzID0gZmFtaWxpZXM7CisgICAg
fQogCiAgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdCB7IGlmIChtX3BpdGNoID09IFVua25v
d25QaXRjaCkgZGV0ZXJtaW5lUGl0Y2goKTsgcmV0dXJuIG1fcGl0Y2ggPT0gRml4ZWRQaXRjaDsg
fTsKICAgICB2b2lkIGRldGVybWluZVBpdGNoKCkgY29uc3QgewpAQCAtMjA1LDYgKzIxMCw4IEBA
CiAgICAgfQogICAgIAogICAgIENSRUFURV9GQU1JTFlfQVJSQVkoZGF0YS0+Zm9udERlc2NyaXB0
aW9uKCksIGZhbWlsaWVzKTsKKyAgICBkYXRhLT5zZXRXZWJDb3JlRm9udEZhbWlsaWVzKGZhbWls
aWVzKTsKKyAgICAKIAogICAgIGludCBsZW5ndGggPSBsZW4gPT0gLTEgPyBxc3RyaW5nLmxlbmd0
aCgpIDogbGVuOwogCkBAIC0yMTMsNyArMjIwLDYgQEAKICAgICAKICAgICBXZWJDb3JlVGV4dFN0
eWxlIHN0eWxlOwogICAgIFdlYkNvcmVJbml0aWFsaXplRW1wdHlUZXh0U3R5bGUoJnN0eWxlKTsK
LSAgICBzdHlsZS5mYW1pbGllcyA9IGZhbWlsaWVzOwogICAgIHN0eWxlLnRhYldpZHRoID0gdGFi
V2lkdGg7CiAgICAgc3R5bGUueHBvcyA9IHhwb3M7CiAKQEAgLTIyOCwxMyArMjM0LDEzIEBACiAg
ICAgfQogICAgIAogICAgIENSRUFURV9GQU1JTFlfQVJSQVkoZGF0YS0+Zm9udERlc2NyaXB0aW9u
KCksIGZhbWlsaWVzKTsKKyAgICBkYXRhLT5zZXRXZWJDb3JlRm9udEZhbWlsaWVzKGZhbWlsaWVz
KTsKIAogICAgIFdlYkNvcmVUZXh0UnVuIHJ1bjsKICAgICBXZWJDb3JlSW5pdGlhbGl6ZVRleHRS
dW4oJnJ1biwgKGNvbnN0IFVuaUNoYXIgKil1Y2hhcnMsIGxlbiwgMCwgbGVuKTsKICAgICAKICAg
ICBXZWJDb3JlVGV4dFN0eWxlIHN0eWxlOwogICAgIFdlYkNvcmVJbml0aWFsaXplRW1wdHlUZXh0
U3R5bGUoJnN0eWxlKTsKLSAgICBzdHlsZS5mYW1pbGllcyA9IGZhbWlsaWVzOwogICAgIHN0eWxl
LnRhYldpZHRoID0gdGFiV2lkdGg7CiAgICAgc3R5bGUueHBvcyA9IHhwb3M7CiAKQEAgLTI0OSw2
ICsyNTUsNyBAQAogICAgIH0KIAogICAgIENSRUFURV9GQU1JTFlfQVJSQVkoZGF0YS0+Zm9udERl
c2NyaXB0aW9uKCksIGZhbWlsaWVzKTsKKyAgICBkYXRhLT5zZXRXZWJDb3JlRm9udEZhbWlsaWVz
KGZhbWlsaWVzKTsKIAogICAgIFdlYkNvcmVUZXh0UnVuIHJ1bjsKICAgICBXZWJDb3JlSW5pdGlh
bGl6ZVRleHRSdW4oJnJ1biwgKGNvbnN0IFVuaUNoYXIgKil1Y2hhcnMsIHNsZW4sIHBvcywgcG9z
K2xlbik7CkBAIC0yNjAsNyArMjY3LDYgQEAKICAgICBzdHlsZS5sZXR0ZXJTcGFjaW5nID0gbGV0
dGVyU3BhY2luZzsKICAgICBzdHlsZS53b3JkU3BhY2luZyA9IHdvcmRTcGFjaW5nOwogICAgIHN0
eWxlLnNtYWxsQ2FwcyA9IHNtYWxsQ2FwczsKLSAgICBzdHlsZS5mYW1pbGllcyA9IGZhbWlsaWVz
OwogCiAgICAgcmV0dXJuIFtkYXRhLT5nZXRSZW5kZXJlcigpIGZsb2F0V2lkdGhGb3JSdW46JnJ1
biBzdHlsZTomc3R5bGVdOwogfQpAQCAtMjcwLDYgKzI3Niw3IEBACiAgICAgYm9vbCBydGwsIGJv
b2wgdmlzdWFsbHlPcmRlcmVkLCBpbnQgbGV0dGVyU3BhY2luZywgaW50IHdvcmRTcGFjaW5nLCBi
b29sIHNtYWxsQ2FwcykgY29uc3QKIHsKICAgICBDUkVBVEVfRkFNSUxZX0FSUkFZKGRhdGEtPmZv
bnREZXNjcmlwdGlvbigpLCBmYW1pbGllcyk7CisgICAgZGF0YS0+c2V0V2ViQ29yZUZvbnRGYW1p
bGllcyhmYW1pbGllcyk7CiAKICAgICBpZiAoZnJvbSA8IDApCiAgICAgICAgIGZyb20gPSAwOwpA
QCAtMjg0LDggKzI5MSw3IEBACiAgICAgc3R5bGUuZGlyZWN0aW9uYWxPdmVycmlkZSA9IHZpc3Vh
bGx5T3JkZXJlZDsKICAgICBzdHlsZS5sZXR0ZXJTcGFjaW5nID0gbGV0dGVyU3BhY2luZzsKICAg
ICBzdHlsZS53b3JkU3BhY2luZyA9IHdvcmRTcGFjaW5nOwotICAgIHN0eWxlLnNtYWxsQ2FwcyA9
IHNtYWxsQ2FwczsKLSAgICBzdHlsZS5mYW1pbGllcyA9IGZhbWlsaWVzOyAgICAKKyAgICBzdHls
ZS5zbWFsbENhcHMgPSBzbWFsbENhcHM7ICAKICAgICBzdHlsZS5wYWRkaW5nID0gdG9BZGQ7CiAg
ICAgc3R5bGUudGFiV2lkdGggPSB0YWJXaWR0aDsKICAgICBzdHlsZS54cG9zID0geHBvczsKQEAg
LTMwNiw2ICszMTIsNyBAQAogICAgIH0KICAgICAKICAgICBDUkVBVEVfRkFNSUxZX0FSUkFZKGRh
dGEtPmZvbnREZXNjcmlwdGlvbigpLCBmYW1pbGllcyk7CisgICAgZGF0YS0+c2V0V2ViQ29yZUZv
bnRGYW1pbGllcyhmYW1pbGllcyk7CiAKICAgICBXZWJDb3JlVGV4dFJ1biBydW47CiAgICAgV2Vi
Q29yZUluaXRpYWxpemVUZXh0UnVuKCZydW4sIChjb25zdCBVbmlDaGFyICopcywgc2xlbiwgcG9z
LCBwb3MrbGVuKTsKQEAgLTMxNSw3ICszMjIsNiBAQAogICAgIHN0eWxlLmxldHRlclNwYWNpbmcg
PSBsZXR0ZXJTcGFjaW5nOwogICAgIHN0eWxlLndvcmRTcGFjaW5nID0gd29yZFNwYWNpbmc7CiAg
ICAgc3R5bGUuc21hbGxDYXBzID0gc21hbGxDYXBzOwotICAgIHN0eWxlLmZhbWlsaWVzID0gZmFt
aWxpZXM7CiAgICAgc3R5bGUucGFkZGluZyA9IHRvQWRkOwogICAgIHN0eWxlLnRhYldpZHRoID0g
dGFiV2lkdGg7CiAgICAgc3R5bGUueHBvcyA9IHhwb3M7CkBAIC0zNTEsNiArMzU3LDExIEBACiAg
ICAgcmV0dXJuIGRhdGEtPmdldFdlYkNvcmVGb250KCk7CiB9CiAKK2NvbnN0IHZvaWQgUUZvbnRN
ZXRyaWNzOjpzZXRXZWJDb3JlRm9udChOU1N0cmluZyoqIGZhbWlsaWVzKSBjb25zdAoreworICAg
IHJldHVybiBkYXRhLT5zZXRXZWJDb3JlRm9udEZhbWlsaWVzKGZhbWlsaWVzKTsKK30KKwogYm9v
bCBRRm9udE1ldHJpY3M6OmlzRml4ZWRQaXRjaCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRhdGEt
PmlzRml4ZWRQaXRjaCgpOwpJbmRleDogV2ViQ29yZS9rd3EvS1dRRm9udE1ldHJpY3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2t3cS9LV1FGb250TWV0cmljcy5oCShyZXZpc2lvbiAxMzA2OSkK
KysrIFdlYkNvcmUva3dxL0tXUUZvbnRNZXRyaWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYg
Kzc4LDcgQEAKICAgICAKICNpZiBfX0FQUExFX18KICAgICBjb25zdCBXZWJDb3JlRm9udCYgZ2V0
V2ViQ29yZUZvbnQoKSBjb25zdDsKKyAgICBjb25zdCB2b2lkIHNldFdlYkNvcmVGb250KE5TU3Ry
aW5nKiogZmFtaWxpZXMpIGNvbnN0OwogI2VuZGlmCiAKIHByaXZhdGU6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>8390</attachid>
            <date>2006-05-18 04:16:30 -0700</date>
            <delta_ts>2006-05-18 04:16:30 -0700</delta_ts>
            <desc>test case</desc>
            <filename>cache-font-fallback.html</filename>
            <type>text/html</type>
            <size>256</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">PGh0bWw+Cjxib2R5Pgo8dGFibGU+Cjx0cj4KPHRkPkNvdXJpZXI8L3RkPjx0ZCBzdHlsZT0iZm9u
dC1mYW1pbHk6U3ltYm9sLENvdXJpZXIiPnRlc3Q8L3RkPjwvdHI+Cjx0ZD5UaW1lczwvdGQ+PHRk
IHN0eWxlPSJmb250LWZhbWlseTpTeW1ib2wsVGltZXMiPm1hc3M8L3RkPjwvdHI+Cjx0ZD5Nb25h
Y288L3RkPjx0ZCBzdHlsZT0iZm9udC1mYW1pbHk6U3ltYm9sLE1vbmFjbyI+dGFsbDwvdGQ+PC90
cj4KPC90YWJsZT4KPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12418</attachid>
            <date>2007-01-13 12:08:52 -0800</date>
            <delta_ts>2007-01-15 11:40:37 -0800</delta_ts>
            <desc>[WIP] Implement trees of fallback glyph pages</desc>
            <filename>6218_r2.patch</filename>
            <type>text/plain</type>
            <size>26469</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vRm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9Gb250LmNwcAkocmV2aXNpb24gMTg4MzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL0Zv
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRm9udC5o
IgogCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5j
bHVkZSAiRm9udEZhbGxiYWNrTGlzdC5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVk
ZSAiR2x5cGhCdWZmZXIuaCIKQEAgLTYwLDcgKzYxLDcgQEAgY29uc3QgdWludDhfdCBGb250Ojpn
Um91bmRpbmdIYWNrQ2hhcmFjdAogRm9udDo6Q29kZVBhdGggRm9udDo6Y29kZVBhdGggPSBBdXRv
OwogCiBzdHJ1Y3QgV2lkdGhJdGVyYXRvciB7Ci0gICAgV2lkdGhJdGVyYXRvcihjb25zdCBGb250
KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IFRleHRTdHlsZSYgc3R5bGUsIGNvbnN0
IEZvbnREYXRhKiBzdWJzdGl0dXRlRm9udERhdGEgPSAwKTsKKyAgICBXaWR0aEl0ZXJhdG9yKGNv
bnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgVGV4dFN0eWxlJiBzdHls
ZSk7CiAKICAgICB2b2lkIGFkdmFuY2UoaW50IHRvLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIg
PSAwKTsKICAgICBib29sIGFkdmFuY2VPbmVDaGFyYWN0ZXIoZmxvYXQmIHdpZHRoLCBHbHlwaEJ1
ZmZlciogZ2x5cGhCdWZmZXIgPSAwKTsKQEAgLTcyLDggKzczLDYgQEAgc3RydWN0IFdpZHRoSXRl
cmF0b3IgewogCiAgICAgY29uc3QgVGV4dFN0eWxlJiBtX3N0eWxlOwogICAgIAotICAgIGNvbnN0
IEZvbnREYXRhKiBtX3N1YnN0aXR1dGVGb250RGF0YTsKLQogICAgIHVuc2lnbmVkIG1fY3VycmVu
dENoYXJhY3RlcjsKICAgICBmbG9hdCBtX3J1bldpZHRoU29GYXI7CiAgICAgZmxvYXQgbV93aWR0
aFRvU3RhcnQ7CkBAIC04NSwxMiArODQsMTEgQEAgcHJpdmF0ZToKICAgICBVQ2hhcjMyIG5vcm1h
bGl6ZVZvaWNpbmdNYXJrcyhpbnQgY3VycmVudENoYXJhY3Rlcik7CiB9OwogCi1XaWR0aEl0ZXJh
dG9yOjpXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgVGV4dFN0eWxlJiBzdHlsZSwgY29uc3QgRm9udERhdGEqIHN1YnN0aXR1dGVGb250RGF0
YSkKK1dpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udCogZm9udCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBUZXh0U3R5bGUmIHN0eWxlKQogICAgIDogbV9mb250KGZvbnQp
CiAgICAgLCBtX3J1bihydW4pCiAgICAgLCBtX2VuZChzdHlsZS5ydGwoKSA/IHJ1bi5sZW5ndGgo
KSA6IHJ1bi50bygpKQogICAgICwgbV9zdHlsZShzdHlsZSkKLSAgICAsIG1fc3Vic3RpdHV0ZUZv
bnREYXRhKHN1YnN0aXR1dGVGb250RGF0YSkKICAgICAsIG1fY3VycmVudENoYXJhY3RlcihydW4u
ZnJvbSgpKQogICAgICwgbV9ydW5XaWR0aFNvRmFyKDApCiAgICAgLCBtX2ZpbmFsUm91bmRpbmdX
aWR0aCgwKQpAQCAtMTIwLDcgKzExOCw3IEBAIFdpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3Io
Y29uc3QgRm9udCoKICAgICBlbHNlIHsKICAgICAgICAgVGV4dFJ1biBjb21wbGV0ZVJ1bihydW4p
OwogICAgICAgICBjb21wbGV0ZVJ1bi5tYWtlQ29tcGxldGUoKTsKLSAgICAgICAgV2lkdGhJdGVy
YXRvciBzdGFydFBvc2l0aW9uSXRlcmF0b3IoZm9udCwgY29tcGxldGVSdW4sIHN0eWxlLCBtX3N1
YnN0aXR1dGVGb250RGF0YSk7CisgICAgICAgIFdpZHRoSXRlcmF0b3Igc3RhcnRQb3NpdGlvbkl0
ZXJhdG9yKGZvbnQsIGNvbXBsZXRlUnVuLCBzdHlsZSk7CiAgICAgICAgIHN0YXJ0UG9zaXRpb25J
dGVyYXRvci5hZHZhbmNlKHJ1bi5mcm9tKCkpOwogICAgICAgICBtX3dpZHRoVG9TdGFydCA9IHN0
YXJ0UG9zaXRpb25JdGVyYXRvci5tX3J1bldpZHRoU29GYXI7CiAgICAgfQpAQCAtMTM1LDE0ICsx
MzMsMTIgQEAgdm9pZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKGludCBvZmZzZXQsIAogICAgIGNv
bnN0IFVDaGFyKiBjcCA9IG1fcnVuLmRhdGEoY3VycmVudENoYXJhY3Rlcik7CiAKICAgICBib29s
IHJ0bCA9IG1fc3R5bGUucnRsKCk7Ci0gICAgYm9vbCBuZWVkQ2hhclRyYW5zZm9ybSA9IHJ0bCB8
fCBtX2ZvbnQtPmlzU21hbGxDYXBzKCk7CisgICAgYm9vbCBzbWFsbENhcHMgPSBtX2ZvbnQtPmlz
U21hbGxDYXBzKCk7CiAgICAgYm9vbCBoYXNFeHRyYVNwYWNpbmcgPSBtX2ZvbnQtPmxldHRlclNw
YWNpbmcoKSB8fCBtX2ZvbnQtPndvcmRTcGFjaW5nKCkgfHwgbV9wYWRkaW5nOwogCiAgICAgZmxv
YXQgcnVuV2lkdGhTb0ZhciA9IG1fcnVuV2lkdGhTb0ZhcjsKICAgICBmbG9hdCBsYXN0Um91bmRp
bmdXaWR0aCA9IG1fZmluYWxSb3VuZGluZ1dpZHRoOwogICAgIAotICAgIGNvbnN0IEZvbnREYXRh
KiBwcmltYXJ5Rm9udCA9IG1fZm9udC0+cHJpbWFyeUZvbnQoKTsKLQogICAgIHdoaWxlIChjdXJy
ZW50Q2hhcmFjdGVyIDwgb2Zmc2V0KSB7CiAgICAgICAgIFVDaGFyMzIgYyA9ICpjcDsKICAgICAg
ICAgdW5zaWduZWQgY2x1c3Rlckxlbmd0aCA9IDE7CkBAIC0xNzMsNDQgKzE2OSwyMCBAQCB2b2lk
IFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UoaW50IG9mZnNldCwgCiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIAotICAgICAgICBjb25zdCBGb250RGF0YSogZm9udERhdGEgPSBtX3N1YnN0aXR1dGVG
b250RGF0YSA/IG1fc3Vic3RpdHV0ZUZvbnREYXRhIDogcHJpbWFyeUZvbnQ7Ci0KLSAgICAgICAg
aWYgKG5lZWRDaGFyVHJhbnNmb3JtKSB7Ci0gICAgICAgICAgICBpZiAocnRsKQotICAgICAgICAg
ICAgICAgIGMgPSBtaXJyb3JlZENoYXIoYyk7Ci0KLSAgICAgICAgICAgIC8vIElmIHNtYWxsLWNh
cHMsIGNvbnZlcnQgbG93ZXJjYXNlIHRvIHVwcGVyLgotICAgICAgICAgICAgaWYgKG1fZm9udC0+
aXNTbWFsbENhcHMoKSAmJiAhVW5pY29kZTo6aXNVcHBlcihjKSkgewotICAgICAgICAgICAgICAg
IFVDaGFyMzIgdXBwZXJDID0gVW5pY29kZTo6dG9VcHBlcihjKTsKLSAgICAgICAgICAgICAgICBp
ZiAodXBwZXJDICE9IGMpIHsKLSAgICAgICAgICAgICAgICAgICAgYyA9IHVwcGVyQzsKLSAgICAg
ICAgICAgICAgICAgICAgZm9udERhdGEgPSBmb250RGF0YS0+c21hbGxDYXBzRm9udERhdGEobV9m
b250LT5mb250RGVzY3JpcHRpb24oKSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBpZiAo
c21hbGxDYXBzICYmICFVbmljb2RlOjppc1VwcGVyKGMpKSB7CisgICAgICAgICAgICAvLyBDb252
ZXJ0IGxvd2VyY2FzZSB0byB1cHBlci4KKyAgICAgICAgICAgIFVDaGFyMzIgdXBwZXJDID0gVW5p
Y29kZTo6dG9VcHBlcihjKTsKKyAgICAgICAgICAgIGlmICh1cHBlckMgIT0gYykgeworICAgICAg
ICAgICAgICAgIGMgPSB1cHBlckM7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNtYWxsIGNh
cHMgYXJlIGJyb2tlbiEKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8vIEZJ
WE1FOiBTaG91bGQgZ28gdGhyb3VnaCBmYWxsYmFjayBsaXN0IGV2ZW50dWFsbHkgd2hlbiB3ZSBy
ZXdvcmsgdGhlIGdseXBoIG1hcC4KLSAgICAgICAgY29uc3QgR2x5cGhEYXRhJiBnbHlwaERhdGEg
PSBmb250RGF0YS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBjb25zdCBHbHlw
aERhdGEmIGdseXBoRGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2x1c3RlcihjcCwgY2x1c3Rl
ckxlbmd0aCwgcnRsKTsKICAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlwaERhdGEuZ2x5cGg7Ci0g
ICAgICAgIGZvbnREYXRhID0gZ2x5cGhEYXRhLmZvbnREYXRhOworICAgICAgICBjb25zdCBGb250
RGF0YSogZm9udERhdGEgPSBnbHlwaERhdGEuZm9udERhdGE7CiAKLSAgICAgICAgLy8gVHJ5IHRv
IGZpbmQgYSBzdWJzdGl0dXRlIGZvbnQgaWYgdGhpcyBmb250IGRpZG4ndCBoYXZlIGEgZ2x5cGgg
Zm9yIGEgY2hhcmFjdGVyIGluIHRoZQotICAgICAgICAvLyBzdHJpbmcuIElmIG9uZSBpc24ndCBm
b3VuZCB3ZSBlbmQgdXAgZHJhd2luZyBhbmQgbWVhc3VyaW5nIHRoZSAwIGdseXBoLCB1c3VhbGx5
IGEgYm94LgotICAgICAgICBpZiAoZ2x5cGggPT0gMCAmJiAhbV9zdWJzdGl0dXRlRm9udERhdGEg
JiYgbV9zdHlsZS5hdHRlbXB0Rm9udFN1YnN0aXR1dGlvbigpKSB7Ci0gICAgICAgICAgICBjb25z
dCBGb250RGF0YSogc3Vic3RpdHV0ZUZvbnREYXRhID0gbV9mb250LT5mb250RGF0YUZvckNoYXJh
Y3RlcnMoY3AsIGNsdXN0ZXJMZW5ndGgpOwotICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGVGb250
RGF0YSkgewotICAgICAgICAgICAgICAgIEdseXBoQnVmZmVyIGxvY2FsR2x5cGhCdWZmZXI7Ci0g
ICAgICAgICAgICAgICAgbV9mb250LT5mbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChUZXh0UnVuKChV
Q2hhciopY3AsIGNsdXN0ZXJMZW5ndGgpLCBUZXh0U3R5bGUoMCwgMCwgMCwgbV9zdHlsZS5ydGwo
KSwgbV9zdHlsZS5kaXJlY3Rpb25hbE92ZXJyaWRlKCksIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZhbHNlLCBtX3N0eWxlLmFwcGx5V29yZFJvdW5kaW5nKCkpLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzdGl0dXRlRm9udERhdGEsIDAs
ICZsb2NhbEdseXBoQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBpZiAobG9jYWxHbHlwaEJ1ZmZl
ci5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3Vic3RpdHV0ZUZv
bnREYXRhID09IGxvY2FsR2x5cGhCdWZmZXIuZm9udERhdGFBdCgwKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGdseXBoID0gbG9jYWxHbHlwaEJ1ZmZlci5nbHlwaEF0KDApOwotICAgICAgICAgICAg
ICAgICAgICBmb250RGF0YS0+c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIGdseXBoLCBzdWJz
dGl0dXRlRm9udERhdGEpOwotICAgICAgICAgICAgICAgICAgICBmb250RGF0YSA9IHN1YnN0aXR1
dGVGb250RGF0YTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
KyAgICAgICAgQVNTRVJUKGdseXBoKTsKIAogICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEg
Z2x5cGggYW5kIGZvbnQgZGF0YSwgZ2V0IGl0cyB3aWR0aC4KICAgICAgICAgZmxvYXQgd2lkdGg7
CkBAIC0zMzEsNiArMzAzLDcgQEAgRm9udDo6Rm9udCgpIDptX2ZvbnRMaXN0KDApLCBtX2xldHRl
clNwYQogRm9udDo6Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZkLCBzaG9ydCBsZXR0ZXJT
cGFjaW5nLCBzaG9ydCB3b3JkU3BhY2luZykgCiA6IG1fZm9udERlc2NyaXB0aW9uKGZkKSwKICAg
bV9mb250TGlzdCgwKSwKKyAgbV9wYWdlWmVybygwKSwKICAgbV9sZXR0ZXJTcGFjaW5nKGxldHRl
clNwYWNpbmcpLAogICBtX3dvcmRTcGFjaW5nKHdvcmRTcGFjaW5nKQoge30KQEAgLTM0MSw2ICsz
MTQsOCBAQCBGb250OjpGb250KGNvbnN0IEZvbnQmIG90aGVyKQogICAgIG1fZm9udExpc3QgPSBv
dGhlci5tX2ZvbnRMaXN0OwogICAgIG1fbGV0dGVyU3BhY2luZyA9IG90aGVyLm1fbGV0dGVyU3Bh
Y2luZzsKICAgICBtX3dvcmRTcGFjaW5nID0gb3RoZXIubV93b3JkU3BhY2luZzsKKyAgICBtX3Bh
Z2VzID0gb3RoZXIubV9wYWdlczsKKyAgICBtX3BhZ2VaZXJvID0gb3RoZXIubV9wYWdlWmVybzsK
IH0KIAogRm9udCYgRm9udDo6b3BlcmF0b3I9KGNvbnN0IEZvbnQmIG90aGVyKQpAQCAtMzQ4LDYg
KzMyMyw4IEBAIEZvbnQmIEZvbnQ6Om9wZXJhdG9yPShjb25zdCBGb250JiBvdGhlcikKICAgICBp
ZiAoJm90aGVyICE9IHRoaXMpIHsKICAgICAgICAgbV9mb250RGVzY3JpcHRpb24gPSBvdGhlci5t
X2ZvbnREZXNjcmlwdGlvbjsKICAgICAgICAgbV9mb250TGlzdCA9IG90aGVyLm1fZm9udExpc3Q7
CisgICAgICAgIG1fcGFnZXMgPSBvdGhlci5tX3BhZ2VzOworICAgICAgICBtX3BhZ2VaZXJvID0g
b3RoZXIubV9wYWdlWmVybzsKICAgICAgICAgbV9sZXR0ZXJTcGFjaW5nID0gb3RoZXIubV9sZXR0
ZXJTcGFjaW5nOwogICAgICAgICBtX3dvcmRTcGFjaW5nID0gb3RoZXIubV93b3JkU3BhY2luZzsK
ICAgICB9CkBAIC0zNTgsNiArMzM1LDU0IEBAIEZvbnQ6On5Gb250KCkKIHsKIH0KIAorY29uc3Qg
R2x5cGhEYXRhJiBGb250OjpnbHlwaERhdGFGb3JDbHVzdGVyKGNvbnN0IFVDaGFyKiBjcCwgdW5z
aWduZWQgY2x1c3Rlckxlbmd0aCwgYm9vbCBtaXJyb3IpIGNvbnN0Cit7CisgICAgVUNoYXIzMiBj
ID0gKmNwOworCisgICAgaWYgKG1pcnJvcikKKyAgICAgICAgYyA9IG1pcnJvcmVkQ2hhcihjKTsK
KworICAgIHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSAoYyAvIEdseXBoUGFnZTo6c2l6ZSk7CisKKyAg
ICBHbHlwaFBhZ2VUcmVlTm9kZSogbm9kZSA9IHBhZ2VOdW1iZXIgPyBtX3BhZ2VzLmdldChwYWdl
TnVtYmVyKSA6IG1fcGFnZVplcm87CisgICAgaWYgKCFub2RlKSB7CisgICAgICAgIG5vZGUgPSBH
bHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdChwYWdlTnVtYmVyKTsKKyAgICAgICAgaWYgKHBhZ2VO
dW1iZXIpCisgICAgICAgICAgICBtX3BhZ2VzLnNldChwYWdlTnVtYmVyLCBub2RlKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9wYWdlWmVybyA9IG5vZGU7CisgICAgfQorCisgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgR2x5cGhQYWdlKiBwYWdlID0gbm9kZS0+cGFnZSgpOworCisg
ICAgICAgIGlmIChwYWdlKSB7CisgICAgICAgICAgICBjb25zdCBHbHlwaERhdGEmIGRhdGEgPSBw
YWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CisgICAgICAgICAgICBpZiAoZGF0YS5nbHlw
aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChub2RlLT5pc1N5c3RlbUZhbGxiYWNrKCkpIHsKKyAgICAgICAgICAgIC8vIFN5c3RlbSBmYWxs
YmFjayBpcyBjaGFyYWN0ZXItZGVwZW5kZW50LgorICAgICAgICAgICAgY29uc3QgRm9udERhdGEq
IGNoYXJhY3RlckZvbnREYXRhID0gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMo
KnRoaXMsIGNwLCBjbHVzdGVyTGVuZ3RoKTsKKyAgICAgICAgICAgIEdseXBoUGFnZVRyZWVOb2Rl
KiBmYWxsYmFja05vZGUgPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdChwYWdlTnVtYmVyKS0+
Z2V0Q2hpbGQoY2hhcmFjdGVyRm9udERhdGEsIHBhZ2VOdW1iZXIpOworICAgICAgICAgICAgY29u
c3QgR2x5cGhEYXRhJiBkYXRhID0gZmFsbGJhY2tOb2RlLT5wYWdlKCktPmdseXBoRGF0YUZvckNo
YXJhY3RlcihjKTsKKyAgICAgICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckNoYXJhY3Rlcihj
LCBkYXRhLmdseXBoLCBjaGFyYWN0ZXJGb250RGF0YSk7CisgICAgICAgICAgICByZXR1cm4gZGF0
YTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFByb2NlZWQgd2l0aCB0aGUgZmFsbGJhY2sgbGlz
dC4KKyAgICAgICAgY29uc3QgRm9udERhdGEqIGZvbnREYXRhID0gZm9udERhdGFBdChub2RlLT5s
ZXZlbCgpKTsKKyAgICAgICAgbm9kZSA9IG5vZGUtPmdldENoaWxkKGZvbnREYXRhLCBwYWdlTnVt
YmVyKTsKKworICAgICAgICBpZiAocGFnZU51bWJlcikKKyAgICAgICAgICAgIG1fcGFnZXMuc2V0
KHBhZ2VOdW1iZXIsIG5vZGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3BhZ2VaZXJv
ID0gbm9kZTsKKyAgICB9CisKK30KKwogY29uc3QgRm9udERhdGEqIEZvbnQ6OnByaW1hcnlGb250
KCkgY29uc3QKIHsKICAgICBhc3NlcnQobV9mb250TGlzdCk7CkBAIC0zODYsNiArNDExLDggQEAg
dm9pZCBGb250Ojp1cGRhdGUoKSBjb25zdAogICAgIGlmICghbV9mb250TGlzdCkKICAgICAgICAg
bV9mb250TGlzdCA9IG5ldyBGb250RmFsbGJhY2tMaXN0KCk7CiAgICAgbV9mb250TGlzdC0+aW52
YWxpZGF0ZSgpOworICAgIG1fcGFnZVplcm8gPSAwOworICAgIG1fcGFnZXMuY2xlYXIoKTsKIH0K
IAogaW50IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1bikgY29uc3QKQEAgLTQ5NSw3ICs1
MjIsNyBAQCB2b2lkIEZvbnQ6OmRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4CiAKICAgICAv
LyBPdXIgbWVhc3VyaW5nIGNvZGUgd2lsbCBnZW5lcmF0ZSBnbHlwaHMgYW5kIGFkdmFuY2VzIGZv
ciB1cy4KICAgICBmbG9hdCBzdGFydFg7Ci0gICAgZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVu
LCBzdHlsZSwgMCwgJnN0YXJ0WCwgJmdseXBoQnVmZmVyKTsKKyAgICBmbG9hdFdpZHRoRm9yU2lt
cGxlVGV4dChydW4sIHN0eWxlLCAmc3RhcnRYLCAmZ2x5cGhCdWZmZXIpOwogICAgIAogICAgIC8v
IFdlIGNvdWxkbid0IGdlbmVyYXRlIGFueSBnbHlwaHMgZm9yIHRoZSBydW4uICBHaXZlIHVwLgog
ICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkpCkBAIC01NDEsMTYgKzU2OCwxNSBAQCB2b2lk
IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29uCiBmbG9hdCBGb250OjpmbG9hdFdp
ZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgVGV4dFN0eWxlJiBzdHlsZSkgY29uc3QKIHsK
ICAgICBpZiAoY2FuVXNlR2x5cGhDYWNoZShydW4pKQotICAgICAgICByZXR1cm4gZmxvYXRXaWR0
aEZvclNpbXBsZVRleHQocnVuLCBzdHlsZSwgMCwgMCwgMCk7CisgICAgICAgIHJldHVybiBmbG9h
dFdpZHRoRm9yU2ltcGxlVGV4dChydW4sIHN0eWxlLCAwLCAwKTsKICAgICBlbHNlCiAgICAgICAg
IHJldHVybiBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQocnVuLCBzdHlsZSk7CiB9CiAKLWZsb2F0
IEZvbnQ6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
VGV4dFN0eWxlJiBzdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZvbnREYXRhKiBzdWJzdGl0dXRlRm9udCwgZmxvYXQqIHN0YXJ0UG9zaXRpb24sIEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlcikgY29uc3QKK2Zsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JTaW1w
bGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgVGV4dFN0eWxlJiBzdHlsZSwgZmxvYXQq
IHN0YXJ0UG9zaXRpb24sIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikgY29uc3QKIHsKICAgICAK
LSAgICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1biwgc3R5bGUsIHN1YnN0aXR1dGVGb250KTsK
KyAgICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1biwgc3R5bGUpOwogICAgIGl0LmFkdmFuY2Uo
cnVuLnRvKCksIGdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBydW5XaWR0aCA9IGl0Lm1fcnVuV2lk
dGhTb0ZhcjsKICAgICBpZiAoc3RhcnRQb3NpdGlvbikgewpAQCAtNjA4LDcgKzYzNCw3IEBAIGlu
dCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQKICAgICBHbHlwaEJ1ZmZlciBs
b2NhbEdseXBoQnVmZmVyOwogICAgIHVuc2lnbmVkIG9mZnNldDsKICAgICBpZiAoc3R5bGUucnRs
KCkpIHsKLSAgICAgICAgZGVsdGEgLT0gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVuLCBzdHls
ZSwgMCwgMCwgMCk7CisgICAgICAgIGRlbHRhIC09IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KHJ1
biwgc3R5bGUsIDAsIDApOwogICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgICAgb2Zmc2V0
ID0gaXQubV9jdXJyZW50Q2hhcmFjdGVyOwogICAgICAgICAgICAgZmxvYXQgdzsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vRm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vRm9u
dC5oCShyZXZpc2lvbiAxODgzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vRm9udC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIEZPTlRfSAogCiAjaW5jbHVkZSAiRm9u
dERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiR2x5cGhNYXAuaCIKIAogI2lmIFBMQVRGT1JNKFFU
KQogY2xhc3MgUUZvbnQ7CkBAIC0xNDksNiArMTUwLDcgQEAgcHVibGljOgogICAgIGNvbnN0IEZv
bnREYXRhKiBwcmltYXJ5Rm9udCgpIGNvbnN0OwogICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0
YUF0KHVuc2lnbmVkKSBjb25zdDsKICAgICBjb25zdCBGb250RGF0YSogZm9udERhdGFGb3JDaGFy
YWN0ZXJzKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCkgY29uc3Q7CisgICAgY29uc3QgR2x5cGhE
YXRhJiBnbHlwaERhdGFGb3JDbHVzdGVyKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgY2x1c3Rlckxl
bmd0aCwgYm9vbCBtaXJyb3IpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBUaGlz
IHdpbGwgZXZlbnR1YWxseSBiZSBjcm9zcy1wbGF0Zm9ybSwgYnV0IHdlIHdhbnQgdG8ga2VlcCBX
aW5kb3dzIGNvbXBpbGluZyBmb3Igbm93LgpAQCAtMTU2LDggKzE1OCw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgVGV4dFN0eWxlJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZvaWQgZHJh
d0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGb250RGF0YSosIGNvbnN0IEdseXBoQnVm
ZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZv
aWQgZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBUZXh0U3R5bGUmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgZmxvYXQgZmxvYXRX
aWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGNvbnN0
IEZvbnREYXRhKiBzdWJzdGl0dXRlRm9udERhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQqIHN0YXJ0WCwgR2x5cGhCdWZmZXIqKSBjb25zdDsKKyAgICBmbG9hdCBm
bG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJiwg
ZmxvYXQqIHN0YXJ0WCwgR2x5cGhCdWZmZXIqKSBjb25zdDsKICAgICBmbG9hdCBmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYpIGNvbnN0Owog
ICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIGNv
bnN0IFRleHRTdHlsZSYsIGludCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykg
Y29uc3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGludCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlh
bEdseXBocykgY29uc3Q7CkBAIC0xODIsNiArMTgzLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBGb250RGVzY3JpcHRpb24gbV9mb250RGVzY3JpcHRpb247CiAgICAgbXV0YWJsZSBSZWZQdHI8
Rm9udEZhbGxiYWNrTGlzdD4gbV9mb250TGlzdDsKKyAgICBtdXRhYmxlIEhhc2hNYXA8aW50LCBH
bHlwaFBhZ2VUcmVlTm9kZSo+IG1fcGFnZXM7CisgICAgbXV0YWJsZSBHbHlwaFBhZ2VUcmVlTm9k
ZSogbV9wYWdlWmVybzsKICAgICBzaG9ydCBtX2xldHRlclNwYWNpbmc7CiAgICAgc2hvcnQgbV93
b3JkU3BhY2luZzsKIH07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZvbnREYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZvbnREYXRhLmNwcAkocmV2aXNpb24gMTg4MzAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NyArNDQsNyBAQCBGb250RGF0YTo6Rm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0CiAgICAg
Ly8gTmFzdHkgaGFjayB0byBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHJvdW5kIG9yIGNlaWwgc3Bh
Y2Ugd2lkdGhzLgogICAgIC8vIElmIHRoZSBmb250IGlzIG1vbm9zcGFjZSBvciBmYWtlIG1vbm9z
cGFjZSB3ZSBjZWlsIHRvIGVuc3VyZSB0aGF0IAogICAgIC8vIGV2ZXJ5IGNoYXJhY3RlciBhbmQg
dGhlIHNwYWNlIGFyZSB0aGUgc2FtZSB3aWR0aC4gIE90aGVyd2lzZSB3ZSByb3VuZC4KLSAgICBt
X3NwYWNlR2x5cGggPSBtX2NoYXJhY3RlclRvR2x5cGhNYXAuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KCcgJywgdGhpcykuZ2x5cGg7CisgICAgbV9zcGFjZUdseXBoID0gR2x5cGhQYWdlVHJlZU5vZGU6
OmdldFJvb3QoMCktPmdldENoaWxkKHRoaXMsIDApLT5wYWdlKCktPmdseXBoRGF0YUZvckNoYXJh
Y3RlcignICcpLmdseXBoOwogICAgIGZsb2F0IHdpZHRoID0gd2lkdGhGb3JHbHlwaChtX3NwYWNl
R2x5cGgpOwogICAgIG1fc3BhY2VXaWR0aCA9IHdpZHRoOwogICAgIGRldGVybWluZVBpdGNoKCk7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9Gb250RGF0YS5oCShyZXZpc2lvbiAxODgzMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTAgKzY1LDYgQEAgcHVibGljOgog
CiAgICAgdm9pZCBkZXRlcm1pbmVQaXRjaCgpOwogICAgIFBpdGNoIHBpdGNoKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmVhdEFzRml4ZWRQaXRjaCA/IEZpeGVkUGl0Y2ggOiBWYXJpYWJsZVBpdGNoOyB9
Ci0gICAgCi0gICAgLy8gRklYTUU6IFNob3VsZCBnbyBhd2F5IHdoZW4gd2UgcHVsbCB0aGUgZ2x5
cGggbWFwIG91dCBvZiB0aGUgRm9udERhdGEuCi0gICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNo
YXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyVG9HbHlwaE1hcC5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgdGhpcyk7IH0KLSAgICB2b2lkIHNldEdseXBoRGF0YUZv
ckNoYXJhY3RlcihVQ2hhcjMyIGMsIEdseXBoIGdseXBoLCBjb25zdCBGb250RGF0YSogZm9udERh
dGEpIGNvbnN0IHsgbV9jaGFyYWN0ZXJUb0dseXBoTWFwLnNldEdseXBoRGF0YUZvckNoYXJhY3Rl
cihjLCBnbHlwaCwgZm9udERhdGEpOyB9CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgTlNGb250
KiBnZXROU0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQuZm9udDsgfQpAQCAtOTUsNyArOTEs
NiBAQCBwdWJsaWM6CiAgICAgZmxvYXQgbV94SGVpZ2h0OwogICAgIAogICAgIEZvbnRQbGF0Zm9y
bURhdGEgbV9mb250OwotICAgIG11dGFibGUgR2x5cGhNYXAgbV9jaGFyYWN0ZXJUb0dseXBoTWFw
OwogICAgIG11dGFibGUgR2x5cGhXaWR0aE1hcCBtX2dseXBoVG9XaWR0aE1hcDsKIAogICAgIGJv
b2wgbV90cmVhdEFzRml4ZWRQaXRjaDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhNYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhNYXAuY3BwCShyZXZpc2lv
biAxODgzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhNYXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw5MSArMzUsMTI2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR2x5cGhEYXRh
IEdseXBoTWFwOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250RGF0
YSogZm9udERhdGEpCitHbHlwaFBhZ2VUcmVlTm9kZSogR2x5cGhQYWdlVHJlZU5vZGU6OmdldFJv
b3QodW5zaWduZWQgcGFnZU51bWJlcikKIHsKLSAgICB1bnNpZ25lZCBwYWdlTnVtYmVyID0gKGMg
LyBHbHlwaFBhZ2U6OnNpemUpOwotICAgIEdseXBoUGFnZSogcGFnZSA9IGxvY2F0ZVBhZ2UocGFn
ZU51bWJlciwgZm9udERhdGEpOwotICAgIGlmIChwYWdlKQotICAgICAgICByZXR1cm4gcGFnZS0+
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwotICAgIEdseXBoRGF0YSBkYXRhID0geyAwLCBmb250
RGF0YSB9OwotICAgIHJldHVybiBkYXRhOworICAgIHN0YXRpYyBIYXNoTWFwPGludCwgR2x5cGhQ
YWdlVHJlZU5vZGUqPiByb290czsKKyAgICBzdGF0aWMgR2x5cGhQYWdlVHJlZU5vZGUqIHBhZ2Va
ZXJvUm9vdDsKKyAgICBHbHlwaFBhZ2VUcmVlTm9kZSogbm9kZSA9IHBhZ2VOdW1iZXIgPyByb290
cy5nZXQocGFnZU51bWJlcikgOiBwYWdlWmVyb1Jvb3Q7CisgICAgaWYgKCFub2RlKSB7CisgICAg
ICAgIG5vZGUgPSBuZXcgR2x5cGhQYWdlVHJlZU5vZGUoKTsKKyNpZm5kZWYgTkRFQlVHCisgICAg
ICAgIG5vZGUtPm1fcGFnZU51bWJlciA9IHBhZ2VOdW1iZXI7CisjZW5kaWYKKyAgICAgICAgaWYg
KHBhZ2VOdW1iZXIpCisgICAgICAgICAgICByb290cy5zZXQocGFnZU51bWJlciwgbm9kZSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhZ2VaZXJvUm9vdCA9IG5vZGU7CisgICAgfQorICAg
IHJldHVybiBub2RlOwogfQogCi12b2lkIEdseXBoTWFwOjpzZXRHbHlwaERhdGFGb3JDaGFyYWN0
ZXIoVUNoYXIzMiBjLCBHbHlwaCBnbHlwaCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQordm9p
ZCBHbHlwaFBhZ2VUcmVlTm9kZTo6aW5pdGlhbGl6ZVBhZ2UoY29uc3QgRm9udERhdGEqIGZvbnRE
YXRhLCB1bnNpZ25lZCBwYWdlTnVtYmVyKQogewotICAgIHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSAo
YyAvIEdseXBoUGFnZTo6c2l6ZSk7Ci0gICAgR2x5cGhQYWdlKiBwYWdlID0gbG9jYXRlUGFnZShw
YWdlTnVtYmVyLCBmb250RGF0YSk7Ci0gICAgaWYgKHBhZ2UpCi0gICAgICAgIHBhZ2UtPnNldEds
eXBoRGF0YUZvckNoYXJhY3RlcihjLCBnbHlwaCwgZm9udERhdGEpOwotfQorICAgIEFTU0VSVCgh
bV9wYWdlKTsKIAotaW5saW5lIEdseXBoTWFwOjpHbHlwaFBhZ2UqIEdseXBoTWFwOjpsb2NhdGVQ
YWdlKHVuc2lnbmVkIHBhZ2VOdW1iZXIsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKLXsKLSAg
ICBHbHlwaFBhZ2UqIHBhZ2U7Ci0gICAgaWYgKHBhZ2VOdW1iZXIgPT0gMCkgewotICAgICAgICBp
ZiAobV9maWxsZWRQcmltYXJ5UGFnZSkKLSAgICAgICAgICAgIHJldHVybiAmbV9wcmltYXJ5UGFn
ZTsKLSAgICAgICAgcGFnZSA9ICZtX3ByaW1hcnlQYWdlOyAKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAobV9wYWdlcykgewotICAgICAgICAgICAgR2x5cGhQYWdlKiByZXN1bHQgPSBtX3BhZ2Vz
LT5nZXQocGFnZU51bWJlcik7Ci0gICAgICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgR2x5cGhQYWdlKiBuZXdQYWdlID0gbmV3IEdseXBoUGFn
ZTsKKyAgICBHbHlwaFBhZ2UqIHBhcmVudFBhZ2UgPSBtX3BhcmVudC0+bV9wYWdlOworCisgICAg
aWYgKGZvbnREYXRhKSB7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gcGFnZU51bWJlciAqIEds
eXBoUGFnZTo6c2l6ZTsKKyAgICAgICAgVUNoYXIgYnVmZmVyW0dseXBoUGFnZTo6c2l6ZSAqIDIg
KyAyXTsKKyAgICAgICAgdW5zaWduZWQgYnVmZmVyTGVuZ3RoOworICAgICAgICB1bnNpZ25lZCBp
OworCisgICAgICAgIC8vIEZpbGwgaW4gYSBidWZmZXIgd2l0aCB0aGUgZW50aXJlICJwYWdlIiBv
ZiBjaGFyYWN0ZXJzIHRoYXQgd2Ugd2FudCB0byBsb29rIHVwIGdseXBocyBmb3IuCisgICAgICAg
IGlmIChzdGFydCA8IDB4MTAwMDApIHsKKyAgICAgICAgICAgIGJ1ZmZlckxlbmd0aCA9IEdseXBo
UGFnZTo6c2l6ZTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7
IGkrKykKKyAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSBzdGFydCArIGk7CisKKyAgICAgICAg
ICAgIGlmIChzdGFydCA9PSAwKSB7CisgICAgICAgICAgICAgICAgLy8gQ29udHJvbCBjaGFyYWN0
ZXJzIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsg
aSA8IDB4MjA7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRo
U3BhY2U7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMHg3RjsgaSA8IDB4QTA7IGkrKykKKyAg
ICAgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRoU3BhY2U7CisKKyAgICAgICAg
ICAgICAgICAvLyBcbiwgXHQsIGFuZCBub25icmVha2luZyBzcGFjZSBtdXN0IHJlbmRlciBhcyBh
IHNwYWNlLgorICAgICAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcbiddID0gJyAnOworICAgICAg
ICAgICAgICAgIGJ1ZmZlclsoaW50KSdcdCddID0gJyAnOworICAgICAgICAgICAgICAgIGJ1ZmZl
cltub0JyZWFrU3BhY2VdID0gJyAnOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplICogMjsKKyAgICAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykgeworICAgICAgICAgICAg
ICAgIGludCBjID0gaSArIHN0YXJ0OworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICogMl0gPSBV
MTZfTEVBRChjKTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSAqIDIgKyAxXSA9IFUxNl9UUkFJ
TChjKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBwYWdlID0gbmV3IEdseXBo
UGFnZTsKLSAgICB9Ci0gICAgICAKLSAgICB1bnNpZ25lZCBzdGFydCA9IHBhZ2VOdW1iZXIgKiBH
bHlwaFBhZ2U6OnNpemU7Ci0gICAgVUNoYXIgYnVmZmVyW0dseXBoUGFnZTo6c2l6ZSAqIDIgKyAy
XTsKLSAgICB1bnNpZ25lZCBidWZmZXJMZW5ndGg7Ci0gICAgdW5zaWduZWQgaTsKLQotICAgIC8v
IEZpbGwgaW4gYSBidWZmZXIgd2l0aCB0aGUgZW50aXJlICJwYWdlIiBvZiBjaGFyYWN0ZXJzIHRo
YXQgd2Ugd2FudCB0byBsb29rIHVwIGdseXBocyBmb3IuCi0gICAgaWYgKHN0YXJ0IDwgMHgxMDAw
MCkgewotICAgICAgICBidWZmZXJMZW5ndGggPSBHbHlwaFBhZ2U6OnNpemU7Ci0gICAgICAgIGZv
ciAoaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykKLSAgICAgICAgICAgIGJ1ZmZlcltp
XSA9IHN0YXJ0ICsgaTsKLQotICAgICAgICBpZiAoc3RhcnQgPT0gMCkgewotICAgICAgICAgICAg
Ly8gQ29udHJvbCBjaGFyYWN0ZXJzIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCi0gICAgICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgMHgyMDsgKytpKQotICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9
IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgZm9yIChpID0gMHg3RjsgaSA8IDB4QTA7IGkr
KykKLSAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKLQotICAgICAg
ICAgICAgLy8gXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcgc3BhY2UgbXVzdCByZW5kZXIgYXMgYSBz
cGFjZS4KLSAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcbiddID0gJyAnOwotICAgICAgICAgICAg
YnVmZmVyWyhpbnQpJ1x0J10gPSAnICc7Ci0gICAgICAgICAgICBidWZmZXJbbm9CcmVha1NwYWNl
XSA9ICcgJzsKKyAgICAgICAgCisgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBidWZmZXIg
ZnVsbCBvZiBjaGFyYWN0ZXJzLCB3ZSB3YW50IHRvIGdldCBiYWNrIGFuIGFycmF5CisgICAgICAg
IC8vIG9mIGdseXBoIGluZGljZXMuICBUaGlzIHBhcnQgaW52b2x2ZXMgY2FsbGluZyBpbnRvIHRo
ZSBwbGF0Zm9ybS1zcGVjaWZpYyAKKyAgICAgICAgLy8gcm91dGluZSBvZiBvdXIgZ2x5cGggbWFw
IGZvciBhY3R1YWxseSBmaWxsaW5nIGluIHRoZSBwYWdlIHdpdGggdGhlIGdseXBocy4KKyAgICAg
ICAgYm9vbCBzdWNjZXNzID0gbmV3UGFnZS0+ZmlsbChidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9u
dERhdGEpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKHN1Y2Nlc3MpOworCisgICAgICAgIGJv
b2wgbmV3R2x5cGhzID0gZmFsc2U7CisKKyAgICAgICAgaWYgKCFwYXJlbnRQYWdlKQorICAgICAg
ICAgICAgbmV3R2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAo
cGFyZW50UGFnZS0+bV9nbHlwaHNbaV0uZ2x5cGgpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3
UGFnZS0+bV9nbHlwaHNbaV0gPSBwYXJlbnRQYWdlLT5tX2dseXBoc1tpXTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
ICghbmV3R2x5cGhzICYmIG5ld1BhZ2UtPm1fZ2x5cGhzW2ldLmdseXBoKQorICAgICAgICAgICAg
ICAgICAgICBuZXdHbHlwaHMgPSB0cnVlOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAg
ICAgIGlmICghbmV3R2x5cGhzKSB7CisgICAgICAgICAgICBkZWxldGUgbmV3UGFnZTsKKyAgICAg
ICAgICAgIG1fcGFnZSA9IHBhcmVudFBhZ2U7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
bV9wYWdlID0gbmV3UGFnZTsKICAgICB9IGVsc2UgewotICAgICAgICBidWZmZXJMZW5ndGggPSBH
bHlwaFBhZ2U6OnNpemUgKiAyOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpz
aXplOyBpKyspIHsKLSAgICAgICAgICAgIGludCBjID0gaSArIHN0YXJ0OwotICAgICAgICAgICAg
YnVmZmVyW2kgKiAyXSA9IFUxNl9MRUFEKGMpOwotICAgICAgICAgICAgYnVmZmVyW2kgKiAyICsg
MV0gPSBVMTZfVFJBSUwoYyk7CisgICAgICAgIC8vIFN5c3RlbSBmYWxsYmFjay4gSW5pdGlhbGl6
ZWQgd2l0aCB0aGUgcGFyZW50J3MgcGFnZSBoZXJlLCBhcyBpbmRpdmlkdWFsCisgICAgICAgIC8v
IGVudHJpZXMgbWF5IHVzZSBkaWZmZXJlbnQgZm9udHMgZGVwZW5kaW5nIG9uIGNoYXJhY3Rlci4K
KyAgICAgICAgaWYgKHBhcmVudFBhZ2UpCisgICAgICAgICAgICBtZW1jcHkobmV3UGFnZS0+bV9n
bHlwaHMsIHBhcmVudFBhZ2UtPm1fZ2x5cGhzLCBHbHlwaFBhZ2U6OnNpemUgKiBzaXplb2YobmV3
UGFnZS0+bV9nbHlwaHNbMF0pKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzdGF0aWMg
R2x5cGhEYXRhIGRhdGEgPSB7IDAsIDAgfTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykKKyAgICAgICAgICAgICAgICBuZXdQYWdlLT5t
X2dseXBoc1tpXSA9IGRhdGE7CiAgICAgICAgIH0KKyAgICAgICAgbV9wYWdlID0gbmV3UGFnZTsK
ICAgICB9Ci0gICAgCi0gICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIGJ1ZmZlciBmdWxsIG9mIGNo
YXJhY3RlcnMsIHdlIHdhbnQgdG8gZ2V0IGJhY2sgYW4gYXJyYXkKLSAgICAvLyBvZiBnbHlwaCBp
bmRpY2VzLiAgVGhpcyBwYXJ0IGludm9sdmVzIGNhbGxpbmcgaW50byB0aGUgcGxhdGZvcm0tc3Bl
Y2lmaWMgCi0gICAgLy8gcm91dGluZSBvZiBvdXIgZ2x5cGggbWFwIGZvciBhY3R1YWxseSBmaWxs
aW5nIGluIHRoZSBwYWdlIHdpdGggdGhlIGdseXBocy4KLSAgICBib29sIHN1Y2Nlc3MgPSBmaWxs
UGFnZShwYWdlLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udERhdGEpOwotICAgIGlmICghc3Vj
Y2VzcykgewotICAgICAgICBpZiAocGFnZU51bWJlciAhPSAwKQotICAgICAgICAgICAgZGVsZXRl
IHBhZ2U7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAgICBpZiAocGFnZU51bWJl
ciA9PSAwKQotICAgICAgICBtX2ZpbGxlZFByaW1hcnlQYWdlID0gdHJ1ZTsKLSAgICBlbHNlIHsK
LSAgICAgICAgaWYgKCFtX3BhZ2VzKQotICAgICAgICAgICAgbV9wYWdlcyA9IG5ldyBIYXNoTWFw
PGludCwgR2x5cGhQYWdlKj47Ci0gICAgICAgIG1fcGFnZXMtPnNldChwYWdlTnVtYmVyLCBwYWdl
KTsKLSAgICB9Cit9CisKK0dseXBoUGFnZVRyZWVOb2RlKiBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0
Q2hpbGQoY29uc3QgRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBwYWdlTnVtYmVyKQorewor
ICAgIEFTU0VSVChmb250RGF0YSB8fCAhbV9pc1N5c3RlbUZhbGxiYWNrKTsKKyAgICBBU1NFUlQo
cGFnZU51bWJlciA9PSBtX3BhZ2VOdW1iZXIpOwogCi0gICAgcmV0dXJuIHBhZ2U7CisgICAgR2x5
cGhQYWdlVHJlZU5vZGUqIGNoaWxkID0gZm9udERhdGEgPyBtX2NoaWxkcmVuLmdldChmb250RGF0
YSkgOiBtX3N5c3RlbUZhbGxiYWNrQ2hpbGQ7CisgICAgaWYgKCFjaGlsZCkgeworICAgICAgICBj
aGlsZCA9IG5ldyBHbHlwaFBhZ2VUcmVlTm9kZTsKKyAgICAgICAgY2hpbGQtPm1fcGFyZW50ID0g
dGhpczsKKyAgICAgICAgY2hpbGQtPm1fbGV2ZWwgPSBtX2xldmVsICsgMTsKKyNpZm5kZWYgTkRF
QlVHCisgICAgICAgIGNoaWxkLT5tX3BhZ2VOdW1iZXIgPSBtX3BhZ2VOdW1iZXI7CisjZW5kaWYK
KyAgICAgICAgaWYgKGZvbnREYXRhKQorICAgICAgICAgICAgbV9jaGlsZHJlbi5zZXQoZm9udERh
dGEsIGNoaWxkKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX3N5c3RlbUZhbGxiYWNr
Q2hpbGQgPSBjaGlsZDsKKyAgICAgICAgICAgIGNoaWxkLT5tX2lzU3lzdGVtRmFsbGJhY2sgPSB0
cnVlOworICAgICAgICB9CisgICAgICAgIGNoaWxkLT5pbml0aWFsaXplUGFnZShmb250RGF0YSwg
cGFnZU51bWJlcik7CisgICAgfQorICAgIHJldHVybiBjaGlsZDsKIH0KIAogfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9HbHlwaE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
R2x5cGhNYXAuaAkocmV2aXNpb24gMTg4MzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL0dseXBoTWFw
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDM5ICs0NCw2MSBAQCBzdHJ1Y3QgR2x5cGhEYXRhIHsg
ICAgCiAgICAgY29uc3QgRm9udERhdGEqIGZvbnREYXRhOwogfTsKIAotY2xhc3MgR2x5cGhNYXAg
OiBOb25jb3B5YWJsZSB7CitzdHJ1Y3QgR2x5cGhQYWdlIHsKKyAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IHNpemUgPSAyNTY7IC8vIENvdmVycyBMYXRpbi0xIGluIGEgc2luZ2xlIHBhZ2UuCisgICAg
R2x5cGhEYXRhIG1fZ2x5cGhzW3NpemVdOworCisgICAgY29uc3QgR2x5cGhEYXRhJiBnbHlwaERh
dGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdCB7IHJldHVybiBtX2dseXBoc1tjICUgc2l6
ZV07IH0KKyAgICB2b2lkIHNldEdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIEdseXBo
IGcsIGNvbnN0IEZvbnREYXRhKiBmKQorICAgIHsKKyAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5k
ZXgoYyAlIHNpemUsIGcsIGYpOworICAgIH0KKyAgICB2b2lkIHNldEdseXBoRGF0YUZvckluZGV4
KHVuc2lnbmVkIGluZGV4LCBHbHlwaCBnLCBjb25zdCBGb250RGF0YSogZikKKyAgICB7CisgICAg
ICAgIG1fZ2x5cGhzW2luZGV4XS5nbHlwaCA9IGc7CisgICAgICAgIG1fZ2x5cGhzW2luZGV4XS5m
b250RGF0YSA9IGY7CisgICAgfQorICAgIC8vIEltcGxlbWVudGVkIGJ5IHRoZSBwbGF0Zm9ybS4K
KyAgICBib29sIGZpbGwoVUNoYXIqIGNoYXJhY3RlckJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVu
Z3RoLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpOworfTsKKworY2xhc3MgR2x5cGhQYWdlVHJl
ZU5vZGUgewogcHVibGljOgotICAgIEdseXBoTWFwKCkgOiBtX2ZpbGxlZFByaW1hcnlQYWdlKGZh
bHNlKSwgbV9wYWdlcygwKSB7fQotICAgIH5HbHlwaE1hcCgpIHsgaWYgKG1fcGFnZXMpIHsgZGVs
ZXRlQWxsVmFsdWVzKCptX3BhZ2VzKTsgZGVsZXRlIG1fcGFnZXM7IH0gfQorICAgIEdseXBoUGFn
ZVRyZWVOb2RlKCkKKyAgICAgICAgOiBtX3BhcmVudCgwKQorICAgICAgICAsIG1fcGFnZSgwKQor
ICAgICAgICAsIG1fbGV2ZWwoMCkKKyAgICAgICAgLCBtX2lzU3lzdGVtRmFsbGJhY2soZmFsc2Up
CisgICAgICAgICwgbV9zeXN0ZW1GYWxsYmFja0NoaWxkKDApCisjaWZuZGVmIE5ERUJVRworICAg
ICAgICAsIG1fcGFnZU51bWJlcigwKQorI2VuZGlmCisgICAgeworICAgIH0KKworICAgIHN0YXRp
YyBHbHlwaFBhZ2VUcmVlTm9kZSogZ2V0Um9vdCh1bnNpZ25lZCBwYWdlTnVtYmVyKTsKIAotICAg
IEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERhdGEq
KTsKLSAgICB2b2lkIHNldEdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBHbHlwaCwgY29u
c3QgRm9udERhdGEqKTsKKyAgICBHbHlwaFBhZ2VUcmVlTm9kZSogcGFyZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXJlbnQ7IH0KKyAgICBHbHlwaFBhZ2VUcmVlTm9kZSogZ2V0Q2hpbGQoY29uc3Qg
Rm9udERhdGEqLCB1bnNpZ25lZCBwYWdlTnVtYmVyKTsKKworICAgIEdseXBoUGFnZSogcGFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFnZTsgfQorICAgIHVuc2lnbmVkIGxldmVsKCkgY29uc3QgeyBy
ZXR1cm4gbV9sZXZlbDsgfQorICAgIGJvb2wgaXNTeXN0ZW1GYWxsYmFjaygpIGNvbnN0IHsgcmV0
dXJuIG1faXNTeXN0ZW1GYWxsYmFjazsgfQogCiBwcml2YXRlOgotICAgIHN0cnVjdCBHbHlwaFBh
Z2UgewotICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUgPSAyNTY7IC8vIENvdmVycyBM
YXRpbi0xIGluIGEgc2luZ2xlIHBhZ2UuCi0gICAgICAgIEdseXBoRGF0YSBtX2dseXBoc1tzaXpl
XTsKLQotICAgICAgICBjb25zdCBHbHlwaERhdGEmIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hh
cjMyIGMpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzW2MgJSBzaXplXTsgfQotICAgICAgICB2b2lk
IHNldEdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIEdseXBoIGcsIGNvbnN0IEZvbnRE
YXRhKiBmKQotICAgICAgICB7Ci0gICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChjICUg
c2l6ZSwgZywgZik7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRl
eCh1bnNpZ25lZCBpbmRleCwgR2x5cGggZywgY29uc3QgRm9udERhdGEqIGYpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1fZ2x5cGhzW2luZGV4XS5nbHlwaCA9IGc7Ci0gICAgICAgICAgICBtX2ds
eXBoc1tpbmRleF0uZm9udERhdGEgPSBmOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIEdseXBo
UGFnZSogbG9jYXRlUGFnZSh1bnNpZ25lZCBwYWdlLCBjb25zdCBGb250RGF0YSogZm9udERhdGEp
OwotICAgIGJvb2wgZmlsbFBhZ2UoR2x5cGhQYWdlKiwgVUNoYXIqIGNoYXJhY3RlckJ1ZmZlciwg
dW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpOwotCi0gICAg
Ym9vbCBtX2ZpbGxlZFByaW1hcnlQYWdlOwotICAgIEdseXBoUGFnZSBtX3ByaW1hcnlQYWdlOyAv
LyBXZSBvcHRpbWl6ZSBmb3IgdGhlIHBhZ2UgdGhhdCBjb250YWlucyBMYXRpbi0xLgotICAgIEhh
c2hNYXA8aW50LCBHbHlwaFBhZ2UqPiogbV9wYWdlczsKKyAgICB2b2lkIGluaXRpYWxpemVQYWdl
KGNvbnN0IEZvbnREYXRhKiwgdW5zaWduZWQgcGFnZU51bWJlcik7CisKKyAgICBHbHlwaFBhZ2VU
cmVlTm9kZSogbV9wYXJlbnQ7CisgICAgR2x5cGhQYWdlKiBtX3BhZ2U7CisgICAgdW5zaWduZWQg
bV9sZXZlbDsKKyAgICBib29sIG1faXNTeXN0ZW1GYWxsYmFjazsKKyAgICBIYXNoTWFwPGNvbnN0
IEZvbnREYXRhKiwgR2x5cGhQYWdlVHJlZU5vZGUqPiBtX2NoaWxkcmVuOworICAgIEdseXBoUGFn
ZVRyZWVOb2RlKiBtX3N5c3RlbUZhbGxiYWNrQ2hpbGQ7CisjaWZuZGVmIE5ERUJVRworICAgIHVu
c2lnbmVkIG1fcGFnZU51bWJlcjsKKyNlbmRpZgogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0ZvbnREYXRhTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0ZvbnREYXRhTWFjLm1tCShyZXZp
c2lvbiAxODgzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0ZvbnREYXRhTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBGb250RGF0YTo6cGxhdGZvcm1Jbml0
KCkKICAgICAKICAgICAvLyBNZWFzdXJlIHRoZSBhY3R1YWwgY2hhcmFjdGVyICJ4IiwgYmVjYXVz
ZSBBcHBLaXQgc3ludGhlc2l6ZXMgWCBoZWlnaHQgcmF0aGVyIHRoYW4gZ2V0dGluZyBpdCBmcm9t
IHRoZSBmb250LgogICAgIC8vIFVuZm9ydHVuYXRlbHksIE5TRm9udCB3aWxsIHJvdW5kIHRoaXMg
Zm9yIHVzIHNvIHdlIGRvbid0IHF1aXRlIGdldCB0aGUgcmlnaHQgdmFsdWUuCi0gICAgTlNHbHlw
aCB4R2x5cGggPSBtX2NoYXJhY3RlclRvR2x5cGhNYXAuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCd4
JywgdGhpcykuZ2x5cGg7CisgICAgTlNHbHlwaCB4R2x5cGggPSBHbHlwaFBhZ2VUcmVlTm9kZTo6
Z2V0Um9vdCgwKS0+Z2V0Q2hpbGQodGhpcywgMCktPnBhZ2UoKS0+Z2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKCd4JykuZ2x5cGg7CiAgICAgaWYgKHhHbHlwaCkgewogICAgICAgICBOU1JlY3QgeEJveCA9
IFttX2ZvbnQuZm9udCBib3VuZGluZ1JlY3RGb3JHbHlwaDp4R2x5cGhdOwogICAgICAgICAvLyBV
c2UgdGhlIG1heGltdW0gb2YgZWl0aGVyIHdpZHRoIG9yIGhlaWdodCBiZWNhdXNlICJ4IiBpcyBu
ZWFybHkgc3F1YXJlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9Gb250TWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0ZvbnRNYWMubW0JKHJldmlzaW9uIDE4ODMw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRm9udE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDIxLDcgKzQyMSw5IEBAIHN0YXRpYyB2b2lkIGRpc3Bvc2VBVFNVTGF5b3V0UGFyYW1ldGVycygK
IH0KIAogRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSwgYm9vbCBp
c1ByaW50ZXJGb250KQotOm1fbGV0dGVyU3BhY2luZygwKSwgbV93b3JkU3BhY2luZygwKQorICAg
IDogbV9wYWdlWmVybygwKQorICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCisgICAgLCBtX3dvcmRT
cGFjaW5nKDApCiB7CiAgICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoaXNQ
cmludGVyRm9udCk7CiAgICAgbV9mb250TGlzdCA9IG5ldyBGb250RmFsbGJhY2tMaXN0KCk7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9HbHlwaE1hcE1hYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvR2x5cGhNYXBNYWMuY3BwCShyZXZpc2lvbiAxODgzMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0dseXBoTWFwTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgR2x5cGhNYXA6OmZp
bGxQYWdlKEdseXBoUGFnZSogcGFnZSwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVu
Z3RoLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpCitib29sIEdseXBoUGFnZTo6ZmlsbChVQ2hh
ciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0
YSkKIHsKICAgICAvLyBVc2UgYW4gYXJyYXkgb2YgbG9uZyBzbyB3ZSBnZXQgZ29vZCBlbm91Z2gg
YWxpZ25tZW50LgogICAgIGxvbmcgZ2x5cGhWZWN0b3JbKEdMWVBIX1ZFQ1RPUl9TSVpFICsgc2l6
ZW9mKGxvbmcpIC0gMSkgLyBzaXplb2YobG9uZyldOwpAQCAtNTgsNyArNTgsNyBAQCBib29sIEds
eXBoTWFwOjpmaWxsUGFnZShHbHlwaFBhZ2UqIHBhZ2UsCiAKICAgICBBVFNMYXlvdXRSZWNvcmQq
IGdseXBoUmVjb3JkID0gKEFUU0xheW91dFJlY29yZCopd2tHZXRHbHlwaFZlY3RvckZpcnN0UmVj
b3JkKGdseXBoVmVjdG9yKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdl
OjpzaXplOyBpKyspIHsKLSAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgZ2x5
cGhSZWNvcmQtPmdseXBoSUQsIGZvbnREYXRhKTsKKyAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5k
ZXgoaSwgZ2x5cGhSZWNvcmQtPmdseXBoSUQsIGZvbnREYXRhKTsKICAgICAgICAgZ2x5cGhSZWNv
cmQgPSAoQVRTTGF5b3V0UmVjb3JkICopKChjaGFyICopZ2x5cGhSZWNvcmQgKyB3a0dldEdseXBo
VmVjdG9yUmVjb3JkU2l6ZShnbHlwaFZlY3RvcikpOwogICAgIH0KICAgICB3a0NsZWFyR2x5cGhW
ZWN0b3IoJmdseXBoVmVjdG9yKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12463</attachid>
            <date>2007-01-15 11:40:37 -0800</date>
            <delta_ts>2007-01-15 13:19:11 -0800</delta_ts>
            <desc>[WIP] Implement trees of fallback glyph pages</desc>
            <filename>6218_r3.patch</filename>
            <type>text/plain</type>
            <size>31011</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vRm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9Gb250LmNwcAkocmV2aXNpb24gMTg4NjMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0Zv
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRm9udC5o
IgogCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5j
bHVkZSAiRm9udEZhbGxiYWNrTGlzdC5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVk
ZSAiR2x5cGhCdWZmZXIuaCIKQEAgLTYwLDcgKzYxLDcgQEAgY29uc3QgdWludDhfdCBGb250Ojpn
Um91bmRpbmdIYWNrQ2hhcmFjdAogRm9udDo6Q29kZVBhdGggRm9udDo6Y29kZVBhdGggPSBBdXRv
OwogCiBzdHJ1Y3QgV2lkdGhJdGVyYXRvciB7Ci0gICAgV2lkdGhJdGVyYXRvcihjb25zdCBGb250
KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IFRleHRTdHlsZSYgc3R5bGUsIGNvbnN0
IEZvbnREYXRhKiBzdWJzdGl0dXRlRm9udERhdGEgPSAwKTsKKyAgICBXaWR0aEl0ZXJhdG9yKGNv
bnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgVGV4dFN0eWxlJiBzdHls
ZSk7CiAKICAgICB2b2lkIGFkdmFuY2UoaW50IHRvLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIg
PSAwKTsKICAgICBib29sIGFkdmFuY2VPbmVDaGFyYWN0ZXIoZmxvYXQmIHdpZHRoLCBHbHlwaEJ1
ZmZlciogZ2x5cGhCdWZmZXIgPSAwKTsKQEAgLTcyLDggKzczLDYgQEAgc3RydWN0IFdpZHRoSXRl
cmF0b3IgewogCiAgICAgY29uc3QgVGV4dFN0eWxlJiBtX3N0eWxlOwogICAgIAotICAgIGNvbnN0
IEZvbnREYXRhKiBtX3N1YnN0aXR1dGVGb250RGF0YTsKLQogICAgIHVuc2lnbmVkIG1fY3VycmVu
dENoYXJhY3RlcjsKICAgICBmbG9hdCBtX3J1bldpZHRoU29GYXI7CiAgICAgZmxvYXQgbV93aWR0
aFRvU3RhcnQ7CkBAIC04NSwxMiArODQsMTEgQEAgcHJpdmF0ZToKICAgICBVQ2hhcjMyIG5vcm1h
bGl6ZVZvaWNpbmdNYXJrcyhpbnQgY3VycmVudENoYXJhY3Rlcik7CiB9OwogCi1XaWR0aEl0ZXJh
dG9yOjpXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgVGV4dFN0eWxlJiBzdHlsZSwgY29uc3QgRm9udERhdGEqIHN1YnN0aXR1dGVGb250RGF0
YSkKK1dpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udCogZm9udCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBUZXh0U3R5bGUmIHN0eWxlKQogICAgIDogbV9mb250KGZvbnQp
CiAgICAgLCBtX3J1bihydW4pCiAgICAgLCBtX2VuZChzdHlsZS5ydGwoKSA/IHJ1bi5sZW5ndGgo
KSA6IHJ1bi50bygpKQogICAgICwgbV9zdHlsZShzdHlsZSkKLSAgICAsIG1fc3Vic3RpdHV0ZUZv
bnREYXRhKHN1YnN0aXR1dGVGb250RGF0YSkKICAgICAsIG1fY3VycmVudENoYXJhY3RlcihydW4u
ZnJvbSgpKQogICAgICwgbV9ydW5XaWR0aFNvRmFyKDApCiAgICAgLCBtX2ZpbmFsUm91bmRpbmdX
aWR0aCgwKQpAQCAtMTIwLDcgKzExOCw3IEBAIFdpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3Io
Y29uc3QgRm9udCoKICAgICBlbHNlIHsKICAgICAgICAgVGV4dFJ1biBjb21wbGV0ZVJ1bihydW4p
OwogICAgICAgICBjb21wbGV0ZVJ1bi5tYWtlQ29tcGxldGUoKTsKLSAgICAgICAgV2lkdGhJdGVy
YXRvciBzdGFydFBvc2l0aW9uSXRlcmF0b3IoZm9udCwgY29tcGxldGVSdW4sIHN0eWxlLCBtX3N1
YnN0aXR1dGVGb250RGF0YSk7CisgICAgICAgIFdpZHRoSXRlcmF0b3Igc3RhcnRQb3NpdGlvbkl0
ZXJhdG9yKGZvbnQsIGNvbXBsZXRlUnVuLCBzdHlsZSk7CiAgICAgICAgIHN0YXJ0UG9zaXRpb25J
dGVyYXRvci5hZHZhbmNlKHJ1bi5mcm9tKCkpOwogICAgICAgICBtX3dpZHRoVG9TdGFydCA9IHN0
YXJ0UG9zaXRpb25JdGVyYXRvci5tX3J1bldpZHRoU29GYXI7CiAgICAgfQpAQCAtMTM1LDE0ICsx
MzMsMTIgQEAgdm9pZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKGludCBvZmZzZXQsIAogICAgIGNv
bnN0IFVDaGFyKiBjcCA9IG1fcnVuLmRhdGEoY3VycmVudENoYXJhY3Rlcik7CiAKICAgICBib29s
IHJ0bCA9IG1fc3R5bGUucnRsKCk7Ci0gICAgYm9vbCBuZWVkQ2hhclRyYW5zZm9ybSA9IHJ0bCB8
fCBtX2ZvbnQtPmlzU21hbGxDYXBzKCk7CisgICAgYm9vbCBhdHRlbXB0Rm9udFN1YnN0aXR1dGlv
biA9IG1fc3R5bGUuYXR0ZW1wdEZvbnRTdWJzdGl0dXRpb24oKTsKICAgICBib29sIGhhc0V4dHJh
U3BhY2luZyA9IG1fZm9udC0+bGV0dGVyU3BhY2luZygpIHx8IG1fZm9udC0+d29yZFNwYWNpbmco
KSB8fCBtX3BhZGRpbmc7CiAKICAgICBmbG9hdCBydW5XaWR0aFNvRmFyID0gbV9ydW5XaWR0aFNv
RmFyOwogICAgIGZsb2F0IGxhc3RSb3VuZGluZ1dpZHRoID0gbV9maW5hbFJvdW5kaW5nV2lkdGg7
CiAgICAgCi0gICAgY29uc3QgRm9udERhdGEqIHByaW1hcnlGb250ID0gbV9mb250LT5wcmltYXJ5
Rm9udCgpOwotCiAgICAgd2hpbGUgKGN1cnJlbnRDaGFyYWN0ZXIgPCBvZmZzZXQpIHsKICAgICAg
ICAgVUNoYXIzMiBjID0gKmNwOwogICAgICAgICB1bnNpZ25lZCBjbHVzdGVyTGVuZ3RoID0gMTsK
QEAgLTE3Myw0NCArMTY5LDExIEBAIHZvaWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZShpbnQgb2Zm
c2V0LCAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IEZvbnREYXRh
KiBmb250RGF0YSA9IG1fc3Vic3RpdHV0ZUZvbnREYXRhID8gbV9zdWJzdGl0dXRlRm9udERhdGEg
OiBwcmltYXJ5Rm9udDsKLQotICAgICAgICBpZiAobmVlZENoYXJUcmFuc2Zvcm0pIHsKLSAgICAg
ICAgICAgIGlmIChydGwpCi0gICAgICAgICAgICAgICAgYyA9IG1pcnJvcmVkQ2hhcihjKTsKLQot
ICAgICAgICAgICAgLy8gSWYgc21hbGwtY2FwcywgY29udmVydCBsb3dlcmNhc2UgdG8gdXBwZXIu
Ci0gICAgICAgICAgICBpZiAobV9mb250LT5pc1NtYWxsQ2FwcygpICYmICFVbmljb2RlOjppc1Vw
cGVyKGMpKSB7Ci0gICAgICAgICAgICAgICAgVUNoYXIzMiB1cHBlckMgPSBVbmljb2RlOjp0b1Vw
cGVyKGMpOwotICAgICAgICAgICAgICAgIGlmICh1cHBlckMgIT0gYykgewotICAgICAgICAgICAg
ICAgICAgICBjID0gdXBwZXJDOwotICAgICAgICAgICAgICAgICAgICBmb250RGF0YSA9IGZvbnRE
YXRhLT5zbWFsbENhcHNGb250RGF0YShtX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGSVhN
RTogU2hvdWxkIGdvIHRocm91Z2ggZmFsbGJhY2sgbGlzdCBldmVudHVhbGx5IHdoZW4gd2UgcmV3
b3JrIHRoZSBnbHlwaCBtYXAuCi0gICAgICAgIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRhID0g
Zm9udERhdGEtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgY29uc3QgR2x5cGhE
YXRhJiBnbHlwaERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBjcCwgY2x1
c3Rlckxlbmd0aCwgcnRsLCBhdHRlbXB0Rm9udFN1YnN0aXR1dGlvbik7CiAgICAgICAgIEdseXBo
IGdseXBoID0gZ2x5cGhEYXRhLmdseXBoOwotICAgICAgICBmb250RGF0YSA9IGdseXBoRGF0YS5m
b250RGF0YTsKKyAgICAgICAgY29uc3QgRm9udERhdGEqIGZvbnREYXRhID0gZ2x5cGhEYXRhLmZv
bnREYXRhOwogCi0gICAgICAgIC8vIFRyeSB0byBmaW5kIGEgc3Vic3RpdHV0ZSBmb250IGlmIHRo
aXMgZm9udCBkaWRuJ3QgaGF2ZSBhIGdseXBoIGZvciBhIGNoYXJhY3RlciBpbiB0aGUKLSAgICAg
ICAgLy8gc3RyaW5nLiBJZiBvbmUgaXNuJ3QgZm91bmQgd2UgZW5kIHVwIGRyYXdpbmcgYW5kIG1l
YXN1cmluZyB0aGUgMCBnbHlwaCwgdXN1YWxseSBhIGJveC4KLSAgICAgICAgaWYgKGdseXBoID09
IDAgJiYgIW1fc3Vic3RpdHV0ZUZvbnREYXRhICYmIG1fc3R5bGUuYXR0ZW1wdEZvbnRTdWJzdGl0
dXRpb24oKSkgewotICAgICAgICAgICAgY29uc3QgRm9udERhdGEqIHN1YnN0aXR1dGVGb250RGF0
YSA9IG1fZm9udC0+Zm9udERhdGFGb3JDaGFyYWN0ZXJzKGNwLCBjbHVzdGVyTGVuZ3RoKTsKLSAg
ICAgICAgICAgIGlmIChzdWJzdGl0dXRlRm9udERhdGEpIHsKLSAgICAgICAgICAgICAgICBHbHlw
aEJ1ZmZlciBsb2NhbEdseXBoQnVmZmVyOwotICAgICAgICAgICAgICAgIG1fZm9udC0+ZmxvYXRX
aWR0aEZvclNpbXBsZVRleHQoVGV4dFJ1bigoVUNoYXIqKWNwLCBjbHVzdGVyTGVuZ3RoKSwgVGV4
dFN0eWxlKDAsIDAsIDAsIG1fc3R5bGUucnRsKCksIG1fc3R5bGUuZGlyZWN0aW9uYWxPdmVycmlk
ZSgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgbV9zdHls
ZS5hcHBseVdvcmRSb3VuZGluZygpKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3Vic3RpdHV0ZUZvbnREYXRhLCAwLCAmbG9jYWxHbHlwaEJ1ZmZlcik7Ci0gICAgICAg
ICAgICAgICAgaWYgKGxvY2FsR2x5cGhCdWZmZXIuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAg
ICAgICAgICAgYXNzZXJ0KHN1YnN0aXR1dGVGb250RGF0YSA9PSBsb2NhbEdseXBoQnVmZmVyLmZv
bnREYXRhQXQoMCkpOwotICAgICAgICAgICAgICAgICAgICBnbHlwaCA9IGxvY2FsR2x5cGhCdWZm
ZXIuZ2x5cGhBdCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZm9udERhdGEtPnNldEdseXBoRGF0
YUZvckNoYXJhY3RlcihjLCBnbHlwaCwgc3Vic3RpdHV0ZUZvbnREYXRhKTsKLSAgICAgICAgICAg
ICAgICAgICAgZm9udERhdGEgPSBzdWJzdGl0dXRlRm9udERhdGE7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIEFTU0VSVChmb250RGF0YSk7CiAK
ICAgICAgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIGdseXBoIGFuZCBmb250IGRhdGEsIGdldCBp
dHMgd2lkdGguCiAgICAgICAgIGZsb2F0IHdpZHRoOwpAQCAtMzMxLDYgKzI5NCw3IEBAIEZvbnQ6
OkZvbnQoKSA6bV9mb250TGlzdCgwKSwgbV9sZXR0ZXJTcGEKIEZvbnQ6OkZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmZCwgc2hvcnQgbGV0dGVyU3BhY2luZywgc2hvcnQgd29yZFNwYWNpbmcp
IAogOiBtX2ZvbnREZXNjcmlwdGlvbihmZCksCiAgIG1fZm9udExpc3QoMCksCisgIG1fcGFnZVpl
cm8oMCksCiAgIG1fbGV0dGVyU3BhY2luZyhsZXR0ZXJTcGFjaW5nKSwKICAgbV93b3JkU3BhY2lu
Zyh3b3JkU3BhY2luZykKIHt9CkBAIC0zNDEsNiArMzA1LDggQEAgRm9udDo6Rm9udChjb25zdCBG
b250JiBvdGhlcikKICAgICBtX2ZvbnRMaXN0ID0gb3RoZXIubV9mb250TGlzdDsKICAgICBtX2xl
dHRlclNwYWNpbmcgPSBvdGhlci5tX2xldHRlclNwYWNpbmc7CiAgICAgbV93b3JkU3BhY2luZyA9
IG90aGVyLm1fd29yZFNwYWNpbmc7CisgICAgbV9wYWdlcyA9IG90aGVyLm1fcGFnZXM7CisgICAg
bV9wYWdlWmVybyA9IG90aGVyLm1fcGFnZVplcm87CiB9CiAKIEZvbnQmIEZvbnQ6Om9wZXJhdG9y
PShjb25zdCBGb250JiBvdGhlcikKQEAgLTM0OCw2ICszMTQsOCBAQCBGb250JiBGb250OjpvcGVy
YXRvcj0oY29uc3QgRm9udCYgb3RoZXIpCiAgICAgaWYgKCZvdGhlciAhPSB0aGlzKSB7CiAgICAg
ICAgIG1fZm9udERlc2NyaXB0aW9uID0gb3RoZXIubV9mb250RGVzY3JpcHRpb247CiAgICAgICAg
IG1fZm9udExpc3QgPSBvdGhlci5tX2ZvbnRMaXN0OworICAgICAgICBtX3BhZ2VzID0gb3RoZXIu
bV9wYWdlczsKKyAgICAgICAgbV9wYWdlWmVybyA9IG90aGVyLm1fcGFnZVplcm87CiAgICAgICAg
IG1fbGV0dGVyU3BhY2luZyA9IG90aGVyLm1fbGV0dGVyU3BhY2luZzsKICAgICAgICAgbV93b3Jk
U3BhY2luZyA9IG90aGVyLm1fd29yZFNwYWNpbmc7CiAgICAgfQpAQCAtMzU4LDYgKzMyNiwxMDgg
QEAgRm9udDo6fkZvbnQoKQogewogfQogCisvLyBGSVhNRTogSXQgaXMgdW5mb3J0dW5hdGUgdGhh
dCB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHBhc3NlZCB0aGUgb3JpZ2luYWwgY2x1c3Rlci4K
Ky8vIEl0IGlzIG9ubHkgcmVxdWlyZWQgZm9yIHRoZSBwbGF0Zm9ybSdzIEZvbnRDYWNoZTo6Z2V0
Rm9udERhdGFGb3JDaGFyYWN0ZXJzKCksIGFuZCBpdCBtZWFucworLy8gdGhhdCB0aGlzIGZ1bmN0
aW9uIGlzIG5vdCBjb3JyZWN0IGlmIGl0IHRyYW5zZm9ybXMgdGhlIGNoYXJhY3RlciB0byB1cHBl
cmNhc2UgYW5kIGNhbGxzCisvLyBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycygp
IGFmdGVyd2FyZHMuCitjb25zdCBHbHlwaERhdGEmIEZvbnQ6OmdseXBoRGF0YUZvckNoYXJhY3Rl
cihVQ2hhcjMyIGMsIGNvbnN0IFVDaGFyKiBjbHVzdGVyLCB1bnNpZ25lZCBjbHVzdGVyTGVuZ3Ro
LCBib29sIG1pcnJvciwgYm9vbCBhdHRlbXB0Rm9udFN1YnN0aXR1dGlvbikgY29uc3QKK3sKKyAg
ICBib29sIHNtYWxsQ2FwcyA9IGZhbHNlOworCisgICAgaWYgKG1fZm9udERlc2NyaXB0aW9uLnNt
YWxsQ2FwcygpICYmICFVbmljb2RlOjppc1VwcGVyKGMpKSB7CisgICAgICAgIC8vIENvbnZlcnQg
bG93ZXJjYXNlIHRvIHVwcGVyLgorICAgICAgICBVQ2hhcjMyIHVwcGVyQyA9IFVuaWNvZGU6OnRv
VXBwZXIoYyk7CisgICAgICAgIGlmICh1cHBlckMgIT0gYykgeworICAgICAgICAgICAgYyA9IHVw
cGVyQzsKKyAgICAgICAgICAgIHNtYWxsQ2FwcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAobWlycm9yKQorICAgICAgICBjID0gbWlycm9yZWRDaGFyKGMpOworCisgICAgdW5z
aWduZWQgcGFnZU51bWJlciA9IChjIC8gR2x5cGhQYWdlOjpzaXplKTsKKworICAgIEdseXBoUGFn
ZVRyZWVOb2RlKiBub2RlID0gcGFnZU51bWJlciA/IG1fcGFnZXMuZ2V0KHBhZ2VOdW1iZXIpIDog
bV9wYWdlWmVybzsKKyAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgbm9kZSA9IEdseXBoUGFnZVRy
ZWVOb2RlOjpnZXRSb290Q2hpbGQocHJpbWFyeUZvbnQoKSwgcGFnZU51bWJlcik7CisgICAgICAg
IGlmIChwYWdlTnVtYmVyKQorICAgICAgICAgICAgbV9wYWdlcy5zZXQocGFnZU51bWJlciwgbm9k
ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcGFnZVplcm8gPSBub2RlOworICAgIH0K
KworICAgIGlmICghYXR0ZW1wdEZvbnRTdWJzdGl0dXRpb24gJiYgbm9kZS0+bGV2ZWwoKSAhPSAx
KQorICAgICAgICBub2RlID0gR2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZChwcmltYXJ5
Rm9udCgpLCBwYWdlTnVtYmVyKTsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIEdseXBo
UGFnZSogcGFnZSA9IG5vZGUtPnBhZ2UoKTsKKworICAgICAgICBpZiAocGFnZSkgeworICAgICAg
ICAgICAgY29uc3QgR2x5cGhEYXRhJiBkYXRhID0gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KGMpOworICAgICAgICAgICAgaWYgKGRhdGEuZ2x5cGggfHwgIWF0dGVtcHRGb250U3Vic3RpdHV0
aW9uKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzbWFsbENhcHMpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBkYXRhOworCisgICAgICAgICAgICAgICAgY29uc3QgRm9udERhdGEqIHNtYWxs
Q2Fwc0ZvbnREYXRhID0gZGF0YS5mb250RGF0YS0+c21hbGxDYXBzRm9udERhdGEobV9mb250RGVz
Y3JpcHRpb24pOworCisgICAgICAgICAgICAgICAgaWYgKCFzbWFsbENhcHNGb250RGF0YSkKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYnV0IGlmIGl0IGRv
ZXMsIHdlIHdpbGwgcmV0dXJuIGEgYmlnIGNhcC4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGRhdGE7CisKKyAgICAgICAgICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogc21hbGxDYXBzTm9k
ZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hpbGQoc21hbGxDYXBzRm9udERhdGEsIHBh
Z2VOdW1iZXIpOworICAgICAgICAgICAgICAgIEdseXBoUGFnZSogc21hbGxDYXBzUGFnZSA9IHNt
YWxsQ2Fwc05vZGUtPnBhZ2UoKTsKKworICAgICAgICAgICAgICAgIGlmIChzbWFsbENhcHNQYWdl
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdseXBoRGF0YSYgZGF0YSA9IHNtYWxsQ2Fw
c1BhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGRhdGEuZ2x5cGggfHwgIWF0dGVtcHRGb250U3Vic3RpdHV0aW9uKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IC8vIE5vdCBhdHRlbXB0aW5nIHN5c3RlbSBmYWxsYmFjayBvZmYgdGhlIHNtYWxsQ2Fwc0ZvbnRE
YXRhLiBUaGlzIGlzIHRoZSB2ZXJ5IHVubGlrZWx5IGNhc2UgdGhhdAorICAgICAgICAgICAgICAg
IC8vIGEgZm9udCBoYXMgdGhlIGxvd2VyY2FzZSBjaGFyYWN0ZXIgYnV0IG5vdCBpdHMgdXBwZXJj
YXNlIHZlcnNpb24uCisgICAgICAgICAgICAgICAgcmV0dXJuIHNtYWxsQ2Fwc0ZvbnREYXRhLT5t
aXNzaW5nR2x5cGhEYXRhKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoIWF0
dGVtcHRGb250U3Vic3RpdHV0aW9uKSB7CisgICAgICAgICAgICBpZiAoc21hbGxDYXBzKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNvbnN0IEZvbnREYXRhKiBzbWFsbENhcHNGb250RGF0YSA9IHBy
aW1hcnlGb250KCktPnNtYWxsQ2Fwc0ZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHNtYWxsQ2Fwc0ZvbnREYXRhLT5taXNzaW5nR2x5cGhEYXRh
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcHJpbWFyeUZvbnQoKS0+bWlz
c2luZ0dseXBoRGF0YSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZGUtPmlzU3lzdGVt
RmFsbGJhY2soKSkgeworICAgICAgICAgICAgLy8gU3lzdGVtIGZhbGxiYWNrIGlzIGNoYXJhY3Rl
ci1kZXBlbmRlbnQuCisgICAgICAgICAgICBjb25zdCBGb250RGF0YSogY2hhcmFjdGVyRm9udERh
dGEgPSBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycygqdGhpcywgY2x1c3Rlciwg
Y2x1c3Rlckxlbmd0aCk7CisgICAgICAgICAgICBpZiAoc21hbGxDYXBzKQorICAgICAgICAgICAg
ICAgIGNoYXJhY3RlckZvbnREYXRhID0gY2hhcmFjdGVyRm9udERhdGEtPnNtYWxsQ2Fwc0ZvbnRE
YXRhKG1fZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJGb250RGF0
YSkgeworICAgICAgICAgICAgICAgIEdseXBoUGFnZVRyZWVOb2RlKiBmYWxsYmFja05vZGUgPSBH
bHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKGNoYXJhY3RlckZvbnREYXRhLCBwYWdlTnVt
YmVyKTsKKyAgICAgICAgICAgICAgICBjb25zdCBHbHlwaERhdGEmIGRhdGEgPSBmYWxsYmFja05v
ZGUtPnBhZ2UoKS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOworICAgICAgICAgICAgICAgIGlm
ICghc21hbGxDYXBzKQorICAgICAgICAgICAgICAgICAgICBwYWdlLT5zZXRHbHlwaERhdGFGb3JD
aGFyYWN0ZXIoYywgZGF0YS5nbHlwaCwgY2hhcmFjdGVyRm9udERhdGEpOworICAgICAgICAgICAg
ICAgIHJldHVybiBkYXRhOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAv
LyBFdmVuIHN5c3RlbSBmYWxsYmFjayBjYW4gZmFpbC4KKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogU2hvdWxkIHRoZSBsYXN0IHJlc29ydCBmb250IGJlIHVzZWQ/CisgICAgICAgICAgICAgICAg
Y29uc3QgR2x5cGhEYXRhJiBkYXRhID0gcHJpbWFyeUZvbnQoKS0+bWlzc2luZ0dseXBoRGF0YSgp
OworICAgICAgICAgICAgICAgIGlmICghc21hbGxDYXBzKQorICAgICAgICAgICAgICAgICAgICBw
YWdlLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZGF0YS5nbHlwaCwgZGF0YS5mb250RGF0
YSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyBQcm9jZWVkIHdpdGggdGhlIGZhbGxiYWNrIGxpc3QuCisgICAgICAg
IGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSA9IGZvbnREYXRhQXQobm9kZS0+bGV2ZWwoKSk7Cisg
ICAgICAgIG5vZGUgPSBub2RlLT5nZXRDaGlsZChmb250RGF0YSwgcGFnZU51bWJlcik7CisKKyAg
ICAgICAgaWYgKHBhZ2VOdW1iZXIpCisgICAgICAgICAgICBtX3BhZ2VzLnNldChwYWdlTnVtYmVy
LCBub2RlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9wYWdlWmVybyA9IG5vZGU7Cisg
ICAgfQorCit9CisKIGNvbnN0IEZvbnREYXRhKiBGb250OjpwcmltYXJ5Rm9udCgpIGNvbnN0CiB7
CiAgICAgYXNzZXJ0KG1fZm9udExpc3QpOwpAQCAtMzg2LDYgKzQ1Niw4IEBAIHZvaWQgRm9udDo6
dXBkYXRlKCkgY29uc3QKICAgICBpZiAoIW1fZm9udExpc3QpCiAgICAgICAgIG1fZm9udExpc3Qg
PSBuZXcgRm9udEZhbGxiYWNrTGlzdCgpOwogICAgIG1fZm9udExpc3QtPmludmFsaWRhdGUoKTsK
KyAgICBtX3BhZ2VaZXJvID0gMDsKKyAgICBtX3BhZ2VzLmNsZWFyKCk7CiB9CiAKIGludCBGb250
Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4pIGNvbnN0CkBAIC00OTUsNyArNTY3LDcgQEAgdm9p
ZCBGb250OjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleAogCiAgICAgLy8gT3VyIG1lYXN1
cmluZyBjb2RlIHdpbGwgZ2VuZXJhdGUgZ2x5cGhzIGFuZCBhZHZhbmNlcyBmb3IgdXMuCiAgICAg
ZmxvYXQgc3RhcnRYOwotICAgIGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KHJ1biwgc3R5bGUsIDAs
ICZzdGFydFgsICZnbHlwaEJ1ZmZlcik7CisgICAgZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVu
LCBzdHlsZSwgJnN0YXJ0WCwgJmdseXBoQnVmZmVyKTsKICAgICAKICAgICAvLyBXZSBjb3VsZG4n
dCBnZW5lcmF0ZSBhbnkgZ2x5cGhzIGZvciB0aGUgcnVuLiAgR2l2ZSB1cC4KICAgICBpZiAoZ2x5
cGhCdWZmZXIuaXNFbXB0eSgpKQpAQCAtNTQxLDE2ICs2MTMsMTUgQEAgdm9pZCBGb250OjpkcmF3
VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbgogZmxvYXQgRm9udDo6ZmxvYXRXaWR0aChjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IFRleHRTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKGNh
blVzZUdseXBoQ2FjaGUocnVuKSkKLSAgICAgICAgcmV0dXJuIGZsb2F0V2lkdGhGb3JTaW1wbGVU
ZXh0KHJ1biwgc3R5bGUsIDAsIDAsIDApOworICAgICAgICByZXR1cm4gZmxvYXRXaWR0aEZvclNp
bXBsZVRleHQocnVuLCBzdHlsZSwgMCwgMCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gZmxv
YXRXaWR0aEZvckNvbXBsZXhUZXh0KHJ1biwgc3R5bGUpOwogfQogCi1mbG9hdCBGb250OjpmbG9h
dFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IFRleHRTdHlsZSYg
c3R5bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb250RGF0
YSogc3Vic3RpdHV0ZUZvbnQsIGZsb2F0KiBzdGFydFBvc2l0aW9uLCBHbHlwaEJ1ZmZlciogZ2x5
cGhCdWZmZXIpIGNvbnN0CitmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IFRleHRTdHlsZSYgc3R5bGUsIGZsb2F0KiBzdGFydFBvc2l0
aW9uLCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpIGNvbnN0CiB7CiAgICAgCi0gICAgV2lkdGhJ
dGVyYXRvciBpdCh0aGlzLCBydW4sIHN0eWxlLCBzdWJzdGl0dXRlRm9udCk7CisgICAgV2lkdGhJ
dGVyYXRvciBpdCh0aGlzLCBydW4sIHN0eWxlKTsKICAgICBpdC5hZHZhbmNlKHJ1bi50bygpLCBn
bHlwaEJ1ZmZlcik7CiAgICAgZmxvYXQgcnVuV2lkdGggPSBpdC5tX3J1bldpZHRoU29GYXI7CiAg
ICAgaWYgKHN0YXJ0UG9zaXRpb24pIHsKQEAgLTYwOCw3ICs2NzksNyBAQCBpbnQgRm9udDo6b2Zm
c2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0CiAgICAgR2x5cGhCdWZmZXIgbG9jYWxHbHlwaEJ1
ZmZlcjsKICAgICB1bnNpZ25lZCBvZmZzZXQ7CiAgICAgaWYgKHN0eWxlLnJ0bCgpKSB7Ci0gICAg
ICAgIGRlbHRhIC09IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KHJ1biwgc3R5bGUsIDAsIDAsIDAp
OworICAgICAgICBkZWx0YSAtPSBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChydW4sIHN0eWxlLCAw
LCAwKTsKICAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgIG9mZnNldCA9IGl0Lm1fY3Vy
cmVudENoYXJhY3RlcjsKICAgICAgICAgICAgIGZsb2F0IHc7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZvbnQuaAkocmV2aXNp
b24gMTg4NjMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQAogI2RlZmluZSBGT05UX0gKIAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlv
bi5oIgorI2luY2x1ZGUgIkdseXBoTWFwLmgiCiAKICNpZiBQTEFURk9STShRVCkKIGNsYXNzIFFG
b250OwpAQCAtMTQ4LDYgKzE0OSw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEZvbnREYXRhKiBw
cmltYXJ5Rm9udCgpIGNvbnN0OwogICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YUF0KHVuc2ln
bmVkKSBjb25zdDsKKyAgICBjb25zdCBHbHlwaERhdGEmIGdseXBoRGF0YUZvckNoYXJhY3RlcihV
Q2hhcjMyLCBjb25zdCBVQ2hhciogY2x1c3RlciwgdW5zaWduZWQgY2x1c3Rlckxlbmd0aCwgYm9v
bCBtaXJyb3IsIGJvb2wgYXR0ZW1wdEZvbnRTdWJzdGl0dXRpb24pIGNvbnN0OworICAgIC8vIFVz
ZWQgZm9yIGNvbXBsZXggdGV4dCwgYW5kIGRvZXMgbm90IHV0aWxpemUgdGhlIGdseXBoIG1hcCBj
YWNoZS4KICAgICBjb25zdCBGb250RGF0YSogZm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IFVD
aGFyKiwgaW50IGxlbmd0aCkgY29uc3Q7CiAKIHByaXZhdGU6CkBAIC0xNTYsOCArMTU5LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAg
ICAgdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZvbnREYXRhKiwgY29u
c3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50JikgY29u
c3Q7CiAgICAgdm9pZCBkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICBm
bG9hdCBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0
eWxlJiwgY29uc3QgRm9udERhdGEqIHN1YnN0aXR1dGVGb250RGF0YSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCogc3RhcnRYLCBHbHlwaEJ1ZmZlciopIGNvbnN0Owor
ICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBU
ZXh0U3R5bGUmLCBmbG9hdCogc3RhcnRYLCBHbHlwaEJ1ZmZlciopIGNvbnN0OwogICAgIGZsb2F0
IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxl
JikgY29uc3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBU
ZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJiwgaW50IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKSBjb25zdDsKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJiwgaW50IHBvc2l0aW9uLCBib29sIGlu
Y2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKQEAgLTE4Miw2ICsxODQsOCBAQCBwdWJsaWM6CiBw
cml2YXRlOgogICAgIEZvbnREZXNjcmlwdGlvbiBtX2ZvbnREZXNjcmlwdGlvbjsKICAgICBtdXRh
YmxlIFJlZlB0cjxGb250RmFsbGJhY2tMaXN0PiBtX2ZvbnRMaXN0OworICAgIG11dGFibGUgSGFz
aE1hcDxpbnQsIEdseXBoUGFnZVRyZWVOb2RlKj4gbV9wYWdlczsKKyAgICBtdXRhYmxlIEdseXBo
UGFnZVRyZWVOb2RlKiBtX3BhZ2VaZXJvOwogICAgIHNob3J0IG1fbGV0dGVyU3BhY2luZzsKICAg
ICBzaG9ydCBtX3dvcmRTcGFjaW5nOwogfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vRm9udERh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vRm9udERhdGEuY3BwCShyZXZp
c2lvbiAxODg2MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vRm9udERhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NCwxMSArNDQsMTMgQEAgRm9udERhdGE6OkZvbnREYXRhKGNvbnN0IEZvbnRQbGF0
Zm9ybURhdAogICAgIC8vIE5hc3R5IGhhY2sgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCByb3Vu
ZCBvciBjZWlsIHNwYWNlIHdpZHRocy4KICAgICAvLyBJZiB0aGUgZm9udCBpcyBtb25vc3BhY2Ug
b3IgZmFrZSBtb25vc3BhY2Ugd2UgY2VpbCB0byBlbnN1cmUgdGhhdCAKICAgICAvLyBldmVyeSBj
aGFyYWN0ZXIgYW5kIHRoZSBzcGFjZSBhcmUgdGhlIHNhbWUgd2lkdGguICBPdGhlcndpc2Ugd2Ug
cm91bmQuCi0gICAgbV9zcGFjZUdseXBoID0gbV9jaGFyYWN0ZXJUb0dseXBoTWFwLmdseXBoRGF0
YUZvckNoYXJhY3RlcignICcsIHRoaXMpLmdseXBoOworICAgIG1fc3BhY2VHbHlwaCA9IEdseXBo
UGFnZVRyZWVOb2RlOjpnZXRSb290Q2hpbGQodGhpcywgMCktPnBhZ2UoKS0+Z2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKCcgJykuZ2x5cGg7CiAgICAgZmxvYXQgd2lkdGggPSB3aWR0aEZvckdseXBoKG1f
c3BhY2VHbHlwaCk7CiAgICAgbV9zcGFjZVdpZHRoID0gd2lkdGg7CiAgICAgZGV0ZXJtaW5lUGl0
Y2goKTsKICAgICBtX2FkanVzdGVkU3BhY2VXaWR0aCA9IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBj
ZWlsZih3aWR0aCkgOiByb3VuZGYod2lkdGgpOworICAgIG1fbWlzc2luZ0dseXBoRGF0YS5mb250
RGF0YSA9IHRoaXM7CisgICAgbV9taXNzaW5nR2x5cGhEYXRhLmdseXBoID0gMDsKIH0KIAogRm9u
dERhdGE6On5Gb250RGF0YSgpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZvbnREYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Gb250RGF0YS5oCShyZXZpc2lvbiAxODg2MykK
KysrIFdlYkNvcmUvcGxhdGZvcm0vRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTAg
KzY1LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBkZXRlcm1pbmVQaXRjaCgpOwogICAgIFBpdGNo
IHBpdGNoKCkgY29uc3QgeyByZXR1cm4gbV90cmVhdEFzRml4ZWRQaXRjaCA/IEZpeGVkUGl0Y2gg
OiBWYXJpYWJsZVBpdGNoOyB9Ci0gICAgCi0gICAgLy8gRklYTUU6IFNob3VsZCBnbyBhd2F5IHdo
ZW4gd2UgcHVsbCB0aGUgZ2x5cGggbWFwIG91dCBvZiB0aGUgRm9udERhdGEuCi0gICAgR2x5cGhE
YXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0IHsgcmV0dXJuIG1fY2hh
cmFjdGVyVG9HbHlwaE1hcC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgdGhpcyk7IH0KLSAgICB2
b2lkIHNldEdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIEdseXBoIGdseXBoLCBjb25z
dCBGb250RGF0YSogZm9udERhdGEpIGNvbnN0IHsgbV9jaGFyYWN0ZXJUb0dseXBoTWFwLnNldEds
eXBoRGF0YUZvckNoYXJhY3RlcihjLCBnbHlwaCwgZm9udERhdGEpOyB9CisKKyAgICBjb25zdCBH
bHlwaERhdGEmIG1pc3NpbmdHbHlwaERhdGEoKSBjb25zdCB7IHJldHVybiBtX21pc3NpbmdHbHlw
aERhdGE7IH0KIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBOU0ZvbnQqIGdldE5TRm9udCgpIGNv
bnN0IHsgcmV0dXJuIG1fZm9udC5mb250OyB9CkBAIC05NSw3ICs5Myw2IEBAIHB1YmxpYzoKICAg
ICBmbG9hdCBtX3hIZWlnaHQ7CiAgICAgCiAgICAgRm9udFBsYXRmb3JtRGF0YSBtX2ZvbnQ7Ci0g
ICAgbXV0YWJsZSBHbHlwaE1hcCBtX2NoYXJhY3RlclRvR2x5cGhNYXA7CiAgICAgbXV0YWJsZSBH
bHlwaFdpZHRoTWFwIG1fZ2x5cGhUb1dpZHRoTWFwOwogCiAgICAgYm9vbCBtX3RyZWF0QXNGaXhl
ZFBpdGNoOwpAQCAtMTAzLDYgKzEwMCw4IEBAIHB1YmxpYzoKICAgICBmbG9hdCBtX3NwYWNlV2lk
dGg7CiAgICAgZmxvYXQgbV9hZGp1c3RlZFNwYWNlV2lkdGg7CiAKKyAgICBHbHlwaERhdGEgbV9t
aXNzaW5nR2x5cGhEYXRhOworCiAgICAgbXV0YWJsZSBGb250RGF0YSogbV9zbWFsbENhcHNGb250
RGF0YTsKIAogI2lmIFBMQVRGT1JNKENHKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9HbHlwaE1h
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9HbHlwaE1hcC5jcHAJKHJldmlz
aW9uIDE4ODYzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9HbHlwaE1hcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDkxICszNSwxNDUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1HbHlwaERh
dGEgR2x5cGhNYXA6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGNvbnN0IEZvbnRE
YXRhKiBmb250RGF0YSkKK0dseXBoUGFnZVRyZWVOb2RlKiBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0
Um9vdCh1bnNpZ25lZCBwYWdlTnVtYmVyKQogewotICAgIHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSAo
YyAvIEdseXBoUGFnZTo6c2l6ZSk7Ci0gICAgR2x5cGhQYWdlKiBwYWdlID0gbG9jYXRlUGFnZShw
YWdlTnVtYmVyLCBmb250RGF0YSk7Ci0gICAgaWYgKHBhZ2UpCi0gICAgICAgIHJldHVybiBwYWdl
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7Ci0gICAgR2x5cGhEYXRhIGRhdGEgPSB7IDAsIGZv
bnREYXRhIH07Ci0gICAgcmV0dXJuIGRhdGE7CisgICAgc3RhdGljIEhhc2hNYXA8aW50LCBHbHlw
aFBhZ2VUcmVlTm9kZSo+IHJvb3RzOworICAgIHN0YXRpYyBHbHlwaFBhZ2VUcmVlTm9kZSogcGFn
ZVplcm9Sb290OworICAgIEdseXBoUGFnZVRyZWVOb2RlKiBub2RlID0gcGFnZU51bWJlciA/IHJv
b3RzLmdldChwYWdlTnVtYmVyKSA6IHBhZ2VaZXJvUm9vdDsKKyAgICBpZiAoIW5vZGUpIHsKKyAg
ICAgICAgbm9kZSA9IG5ldyBHbHlwaFBhZ2VUcmVlTm9kZSgpOworI2lmbmRlZiBOREVCVUcKKyAg
ICAgICAgbm9kZS0+bV9wYWdlTnVtYmVyID0gcGFnZU51bWJlcjsKKyNlbmRpZgorICAgICAgICBp
ZiAocGFnZU51bWJlcikKKyAgICAgICAgICAgIHJvb3RzLnNldChwYWdlTnVtYmVyLCBub2RlKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFnZVplcm9Sb290ID0gbm9kZTsKKyAgICB9Cisg
ICAgcmV0dXJuIG5vZGU7CiB9CiAKLXZvaWQgR2x5cGhNYXA6OnNldEdseXBoRGF0YUZvckNoYXJh
Y3RlcihVQ2hhcjMyIGMsIEdseXBoIGdseXBoLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpCit2
b2lkIEdseXBoUGFnZVRyZWVOb2RlOjppbml0aWFsaXplUGFnZShjb25zdCBGb250RGF0YSogZm9u
dERhdGEsIHVuc2lnbmVkIHBhZ2VOdW1iZXIpCiB7Ci0gICAgdW5zaWduZWQgcGFnZU51bWJlciA9
IChjIC8gR2x5cGhQYWdlOjpzaXplKTsKLSAgICBHbHlwaFBhZ2UqIHBhZ2UgPSBsb2NhdGVQYWdl
KHBhZ2VOdW1iZXIsIGZvbnREYXRhKTsKLSAgICBpZiAocGFnZSkKLSAgICAgICAgcGFnZS0+c2V0
R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIGdseXBoLCBmb250RGF0YSk7Ci19CisgICAgQVNTRVJU
KCFtX3BhZ2UpOwogCi1pbmxpbmUgR2x5cGhNYXA6OkdseXBoUGFnZSogR2x5cGhNYXA6OmxvY2F0
ZVBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQotewot
ICAgIEdseXBoUGFnZSogcGFnZTsKLSAgICBpZiAocGFnZU51bWJlciA9PSAwKSB7Ci0gICAgICAg
IGlmIChtX2ZpbGxlZFByaW1hcnlQYWdlKQotICAgICAgICAgICAgcmV0dXJuICZtX3ByaW1hcnlQ
YWdlOwotICAgICAgICBwYWdlID0gJm1fcHJpbWFyeVBhZ2U7IAotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmIChtX3BhZ2VzKSB7Ci0gICAgICAgICAgICBHbHlwaFBhZ2UqIHJlc3VsdCA9IG1fcGFn
ZXMtPmdldChwYWdlTnVtYmVyKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICBwYWdlID0gbmV3IEdseXBo
UGFnZTsKLSAgICB9Ci0gICAgICAKLSAgICB1bnNpZ25lZCBzdGFydCA9IHBhZ2VOdW1iZXIgKiBH
bHlwaFBhZ2U6OnNpemU7Ci0gICAgVUNoYXIgYnVmZmVyW0dseXBoUGFnZTo6c2l6ZSAqIDIgKyAy
XTsKLSAgICB1bnNpZ25lZCBidWZmZXJMZW5ndGg7Ci0gICAgdW5zaWduZWQgaTsKLQotICAgIC8v
IEZpbGwgaW4gYSBidWZmZXIgd2l0aCB0aGUgZW50aXJlICJwYWdlIiBvZiBjaGFyYWN0ZXJzIHRo
YXQgd2Ugd2FudCB0byBsb29rIHVwIGdseXBocyBmb3IuCi0gICAgaWYgKHN0YXJ0IDwgMHgxMDAw
MCkgewotICAgICAgICBidWZmZXJMZW5ndGggPSBHbHlwaFBhZ2U6OnNpemU7Ci0gICAgICAgIGZv
ciAoaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykKLSAgICAgICAgICAgIGJ1ZmZlcltp
XSA9IHN0YXJ0ICsgaTsKLQotICAgICAgICBpZiAoc3RhcnQgPT0gMCkgewotICAgICAgICAgICAg
Ly8gQ29udHJvbCBjaGFyYWN0ZXJzIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCi0gICAgICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgMHgyMDsgKytpKQotICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9
IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgZm9yIChpID0gMHg3RjsgaSA8IDB4QTA7IGkr
KykKLSAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKLQotICAgICAg
ICAgICAgLy8gXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcgc3BhY2UgbXVzdCByZW5kZXIgYXMgYSBz
cGFjZS4KLSAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcbiddID0gJyAnOwotICAgICAgICAgICAg
YnVmZmVyWyhpbnQpJ1x0J10gPSAnICc7Ci0gICAgICAgICAgICBidWZmZXJbbm9CcmVha1NwYWNl
XSA9ICcgJzsKKyAgICBHbHlwaFBhZ2UqIHBhcmVudFBhZ2UgPSBtX3BhcmVudC0+bV9wYWdlOwor
CisgICAgaWYgKGZvbnREYXRhKSB7CisgICAgICAgIGlmIChtX2xldmVsID09IDEpIHsKKyAgICAg
ICAgICAgIC8vIENoaWxkcmVuIG9mIHRoZSByb290IGhvbGQgcHVyZSBwYWdlcy4KKyAgICAgICAg
ICAgIHVuc2lnbmVkIHN0YXJ0ID0gcGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKKyAgICAg
ICAgICAgIFVDaGFyIGJ1ZmZlcltHbHlwaFBhZ2U6OnNpemUgKiAyICsgMl07CisgICAgICAgICAg
ICB1bnNpZ25lZCBidWZmZXJMZW5ndGg7CisgICAgICAgICAgICB1bnNpZ25lZCBpOworCisgICAg
ICAgICAgICAvLyBGaWxsIGluIGEgYnVmZmVyIHdpdGggdGhlIGVudGlyZSAicGFnZSIgb2YgY2hh
cmFjdGVycyB0aGF0IHdlIHdhbnQgdG8gbG9vayB1cCBnbHlwaHMgZm9yLgorICAgICAgICAgICAg
aWYgKHN0YXJ0IDwgMHgxMDAwMCkgeworICAgICAgICAgICAgICAgIGJ1ZmZlckxlbmd0aCA9IEds
eXBoUGFnZTo6c2l6ZTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgR2x5cGhQYWdl
OjpzaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9IHN0YXJ0ICsgaTsK
KworICAgICAgICAgICAgICAgIGlmIChzdGFydCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAgICAgICAg
ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMHgyMDsgKytpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgICAgICAgICAgICAgIGZv
ciAoaSA9IDB4N0Y7IGkgPCAweEEwOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICBidWZm
ZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKKworICAgICAgICAgICAgICAgICAgICAvLyBcbiwgXHQs
IGFuZCBub25icmVha2luZyBzcGFjZSBtdXN0IHJlbmRlciBhcyBhIHNwYWNlLgorICAgICAgICAg
ICAgICAgICAgICBidWZmZXJbKGludCknXG4nXSA9ICcgJzsKKyAgICAgICAgICAgICAgICAgICAg
YnVmZmVyWyhpbnQpJ1x0J10gPSAnICc7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltub0Jy
ZWFrU3BhY2VdID0gJyAnOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplICogMjsKKyAg
ICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgaW50IGMgPSBpICsgc3RhcnQ7CisgICAgICAgICAgICAgICAgICAg
IGJ1ZmZlcltpICogMl0gPSBVMTZfTEVBRChjKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVy
W2kgKiAyICsgMV0gPSBVMTZfVFJBSUwoYyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX3BhZ2UgPSBuZXcgR2x5cGhQYWdlOwor
CisgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgYnVmZmVyIGZ1bGwgb2YgY2hhcmFj
dGVycywgd2Ugd2FudCB0byBnZXQgYmFjayBhbiBhcnJheQorICAgICAgICAgICAgLy8gb2YgZ2x5
cGggaW5kaWNlcy4gIFRoaXMgcGFydCBpbnZvbHZlcyBjYWxsaW5nIGludG8gdGhlIHBsYXRmb3Jt
LXNwZWNpZmljIAorICAgICAgICAgICAgLy8gcm91dGluZSBvZiBvdXIgZ2x5cGggbWFwIGZvciBh
Y3R1YWxseSBmaWxsaW5nIGluIHRoZSBwYWdlIHdpdGggdGhlIGdseXBocy4KKyAgICAgICAgICAg
IC8vIFN1Y2Nlc3MgaXMgbm90IGd1YXJhbnRlZWQuIEZvciBleGFtcGxlLCBUaW1lcyBmYWlscyB0
byBmaWxsIHBhZ2UgMjYwLCBnaXZpbmcgZ2x5cGggZGF0YQorICAgICAgICAgICAgLy8gZm9yIG9u
bHkgMTI4IG91dCBvZiAyNTYgY2hhcmFjdGVycy4KKyAgICAgICAgICAgIGJvb2wgaGF2ZUdseXBo
cyA9IG1fcGFnZS0+ZmlsbChidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udERhdGEpOworCisgICAg
ICAgICAgICBpZiAoIWhhdmVHbHlwaHMpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgbV9wYWdl
OworICAgICAgICAgICAgICAgIG1fcGFnZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBHZXQgdGhlIHB1cmUgcGFnZSBmb3IgdGhlIGZhbGxiYWNr
IGZvbnQuCisgICAgICAgICAgICBHbHlwaFBhZ2UqIGZhbGxiYWNrUGFnZSA9IGdldFJvb3RDaGls
ZChmb250RGF0YSwgcGFnZU51bWJlciktPnBhZ2UoKTsKKyAgICAgICAgICAgIGlmICghcGFyZW50
UGFnZSkKKyAgICAgICAgICAgICAgICBtX3BhZ2UgPSBmYWxsYmFja1BhZ2U7CisgICAgICAgICAg
ICBlbHNlIGlmICghZmFsbGJhY2tQYWdlKSB7CisgICAgICAgICAgICAgICAgbV9wYWdlID0gcGFy
ZW50UGFnZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9wYWdlID0g
bmV3IEdseXBoUGFnZTsKKworICAgICAgICAgICAgICAgIC8vIE92ZXJsYXkgdGhlIHBhcmVudCBw
YWdlIG9uIHRoZSBmYWxsYmFjayBwYWdlLiBDaGVjayBpZiB0aGUgZmFsbGJhY2sgZm9udAorICAg
ICAgICAgICAgICAgIC8vIGhhcyBhZGRlZCBhbnl0aGluZy4KKyAgICAgICAgICAgICAgICBib29s
IG5ld0dseXBocyA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAocGFy
ZW50UGFnZS0+bV9nbHlwaHNbaV0uZ2x5cGgpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3Bh
Z2UtPm1fZ2x5cGhzW2ldID0gcGFyZW50UGFnZS0+bV9nbHlwaHNbaV07CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgIGlmIChmYWxsYmFja1BhZ2UtPm1fZ2x5cGhzW2ldLmdseXBoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX3BhZ2UtPm1fZ2x5cGhzW2ldID0gZmFsbGJhY2tQYWdlLT5t
X2dseXBoc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0dseXBocyA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBHbHlwaERhdGEgZGF0YSA9IHsgMCwgMCB9OworICAgICAgICAgICAgICAgICAgICAgICAgbV9w
YWdlLT5tX2dseXBoc1tpXSA9IGRhdGE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIW5ld0dseXBocykgeworICAgICAgICAg
ICAgICAgICAgICBkZWxldGUgbV9wYWdlOworICAgICAgICAgICAgICAgICAgICBtX3BhZ2UgPSBw
YXJlbnRQYWdlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ1ZmZlckxlbmd0aCA9IEdseXBoUGFnZTo6c2l6ZSAqIDI7
Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykgewotICAgICAg
ICAgICAgaW50IGMgPSBpICsgc3RhcnQ7Ci0gICAgICAgICAgICBidWZmZXJbaSAqIDJdID0gVTE2
X0xFQUQoYyk7Ci0gICAgICAgICAgICBidWZmZXJbaSAqIDIgKyAxXSA9IFUxNl9UUkFJTChjKTsK
KyAgICAgICAgbV9wYWdlID0gbmV3IEdseXBoUGFnZTsKKyAgICAgICAgLy8gU3lzdGVtIGZhbGxi
YWNrLiBJbml0aWFsaXplZCB3aXRoIHRoZSBwYXJlbnQncyBwYWdlIGhlcmUsIGFzIGluZGl2aWR1
YWwKKyAgICAgICAgLy8gZW50cmllcyBtYXkgdXNlIGRpZmZlcmVudCBmb250cyBkZXBlbmRpbmcg
b24gY2hhcmFjdGVyLgorICAgICAgICBpZiAocGFyZW50UGFnZSkKKyAgICAgICAgICAgIG1lbWNw
eShtX3BhZ2UtPm1fZ2x5cGhzLCBwYXJlbnRQYWdlLT5tX2dseXBocywgR2x5cGhQYWdlOjpzaXpl
ICogc2l6ZW9mKG1fcGFnZS0+bV9nbHlwaHNbMF0pKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBjb25zdCBHbHlwaERhdGEgZGF0YSA9IHsgMCwgMCB9OworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKQorICAgICAgICAgICAgICAg
IG1fcGFnZS0+bV9nbHlwaHNbaV0gPSBkYXRhOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAg
IC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBidWZmZXIgZnVsbCBvZiBjaGFyYWN0ZXJzLCB3ZSB3YW50
IHRvIGdldCBiYWNrIGFuIGFycmF5Ci0gICAgLy8gb2YgZ2x5cGggaW5kaWNlcy4gIFRoaXMgcGFy
dCBpbnZvbHZlcyBjYWxsaW5nIGludG8gdGhlIHBsYXRmb3JtLXNwZWNpZmljIAotICAgIC8vIHJv
dXRpbmUgb2Ygb3VyIGdseXBoIG1hcCBmb3IgYWN0dWFsbHkgZmlsbGluZyBpbiB0aGUgcGFnZSB3
aXRoIHRoZSBnbHlwaHMuCi0gICAgYm9vbCBzdWNjZXNzID0gZmlsbFBhZ2UocGFnZSwgYnVmZmVy
LCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKLSAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAg
aWYgKHBhZ2VOdW1iZXIgIT0gMCkKLSAgICAgICAgICAgIGRlbGV0ZSBwYWdlOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHBhZ2VOdW1iZXIgPT0gMCkKLSAgICAgICAg
bV9maWxsZWRQcmltYXJ5UGFnZSA9IHRydWU7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICghbV9w
YWdlcykKLSAgICAgICAgICAgIG1fcGFnZXMgPSBuZXcgSGFzaE1hcDxpbnQsIEdseXBoUGFnZSo+
OwotICAgICAgICBtX3BhZ2VzLT5zZXQocGFnZU51bWJlciwgcGFnZSk7Ci0gICAgfQorfQogCi0g
ICAgcmV0dXJuIHBhZ2U7CitHbHlwaFBhZ2VUcmVlTm9kZSogR2x5cGhQYWdlVHJlZU5vZGU6Omdl
dENoaWxkKGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgcGFnZU51bWJlcikKK3sK
KyAgICBBU1NFUlQoZm9udERhdGEgfHwgIW1faXNTeXN0ZW1GYWxsYmFjayk7CisgICAgQVNTRVJU
KHBhZ2VOdW1iZXIgPT0gbV9wYWdlTnVtYmVyKTsKKworICAgIEdseXBoUGFnZVRyZWVOb2RlKiBj
aGlsZCA9IGZvbnREYXRhID8gbV9jaGlsZHJlbi5nZXQoZm9udERhdGEpIDogbV9zeXN0ZW1GYWxs
YmFja0NoaWxkOworICAgIGlmICghY2hpbGQpIHsKKyAgICAgICAgY2hpbGQgPSBuZXcgR2x5cGhQ
YWdlVHJlZU5vZGU7CisgICAgICAgIGNoaWxkLT5tX3BhcmVudCA9IHRoaXM7CisgICAgICAgIGNo
aWxkLT5tX2xldmVsID0gbV9sZXZlbCArIDE7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBjaGls
ZC0+bV9wYWdlTnVtYmVyID0gbV9wYWdlTnVtYmVyOworI2VuZGlmCisgICAgICAgIGlmIChmb250
RGF0YSkKKyAgICAgICAgICAgIG1fY2hpbGRyZW4uc2V0KGZvbnREYXRhLCBjaGlsZCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgbV9zeXN0ZW1GYWxsYmFja0NoaWxkID0gY2hpbGQ7Cisg
ICAgICAgICAgICBjaGlsZC0+bV9pc1N5c3RlbUZhbGxiYWNrID0gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICBjaGlsZC0+aW5pdGlhbGl6ZVBhZ2UoZm9udERhdGEsIHBhZ2VOdW1iZXIpOworICAg
IH0KKyAgICByZXR1cm4gY2hpbGQ7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vR2x5
cGhNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0dseXBoTWFwLmgJKHJldmlz
aW9uIDE4ODYzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9HbHlwaE1hcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NCwzOSArNDQsNjUgQEAgc3RydWN0IEdseXBoRGF0YSB7ICAgIAogICAgIGNvbnN0IEZv
bnREYXRhKiBmb250RGF0YTsKIH07CiAKLWNsYXNzIEdseXBoTWFwIDogTm9uY29weWFibGUgewor
c3RydWN0IEdseXBoUGFnZSB7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMjU2OyAv
LyBDb3ZlcnMgTGF0aW4tMSBpbiBhIHNpbmdsZSBwYWdlLgorICAgIEdseXBoRGF0YSBtX2dseXBo
c1tzaXplXTsKKworICAgIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVD
aGFyMzIgYykgY29uc3QgeyByZXR1cm4gbV9nbHlwaHNbYyAlIHNpemVdOyB9CisgICAgdm9pZCBz
ZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBHbHlwaCBnLCBjb25zdCBGb250RGF0
YSogZikKKyAgICB7CisgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGMgJSBzaXplLCBnLCBm
KTsKKyAgICB9CisgICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwg
R2x5cGggZywgY29uc3QgRm9udERhdGEqIGYpCisgICAgeworICAgICAgICBtX2dseXBoc1tpbmRl
eF0uZ2x5cGggPSBnOworICAgICAgICBtX2dseXBoc1tpbmRleF0uZm9udERhdGEgPSBmOworICAg
IH0KKyAgICAvLyBJbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCisgICAgYm9vbCBmaWxsKFVD
aGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERh
dGEqIGZvbnREYXRhKTsKK307CisKK2NsYXNzIEdseXBoUGFnZVRyZWVOb2RlIHsKIHB1YmxpYzoK
LSAgICBHbHlwaE1hcCgpIDogbV9maWxsZWRQcmltYXJ5UGFnZShmYWxzZSksIG1fcGFnZXMoMCkg
e30KLSAgICB+R2x5cGhNYXAoKSB7IGlmIChtX3BhZ2VzKSB7IGRlbGV0ZUFsbFZhbHVlcygqbV9w
YWdlcyk7IGRlbGV0ZSBtX3BhZ2VzOyB9IH0KKyAgICBHbHlwaFBhZ2VUcmVlTm9kZSgpCisgICAg
ICAgIDogbV9wYXJlbnQoMCkKKyAgICAgICAgLCBtX3BhZ2UoMCkKKyAgICAgICAgLCBtX2xldmVs
KDApCisgICAgICAgICwgbV9pc1N5c3RlbUZhbGxiYWNrKGZhbHNlKQorICAgICAgICAsIG1fc3lz
dGVtRmFsbGJhY2tDaGlsZCgwKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgLCBtX3BhZ2VOdW1i
ZXIoMCkKKyNlbmRpZgorICAgIHsKKyAgICB9CiAKLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZvbnREYXRhKik7Ci0gICAgdm9pZCBzZXRHbHlwaERh
dGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgR2x5cGgsIGNvbnN0IEZvbnREYXRhKik7CisgICAgc3Rh
dGljIEdseXBoUGFnZVRyZWVOb2RlKiBnZXRSb290KHVuc2lnbmVkIHBhZ2VOdW1iZXIpOworICAg
IHN0YXRpYyBHbHlwaFBhZ2VUcmVlTm9kZSogZ2V0Um9vdENoaWxkKGNvbnN0IEZvbnREYXRhKiBm
b250RGF0YSwgdW5zaWduZWQgcGFnZU51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRS
b290KHBhZ2VOdW1iZXIpLT5nZXRDaGlsZChmb250RGF0YSwgcGFnZU51bWJlcik7CisgICAgfQor
CisgICAgR2x5cGhQYWdlVHJlZU5vZGUqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50
OyB9CisgICAgR2x5cGhQYWdlVHJlZU5vZGUqIGdldENoaWxkKGNvbnN0IEZvbnREYXRhKiwgdW5z
aWduZWQgcGFnZU51bWJlcik7CisKKyAgICBHbHlwaFBhZ2UqIHBhZ2UoKSBjb25zdCB7IHJldHVy
biBtX3BhZ2U7IH0KKyAgICB1bnNpZ25lZCBsZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1fbGV2ZWw7
IH0KKyAgICBib29sIGlzU3lzdGVtRmFsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2lzU3lzdGVt
RmFsbGJhY2s7IH0KIAogcHJpdmF0ZToKLSAgICBzdHJ1Y3QgR2x5cGhQYWdlIHsKLSAgICAgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMjU2OyAvLyBDb3ZlcnMgTGF0aW4tMSBpbiBhIHNp
bmdsZSBwYWdlLgotICAgICAgICBHbHlwaERhdGEgbV9nbHlwaHNbc2l6ZV07Ci0KLSAgICAgICAg
Y29uc3QgR2x5cGhEYXRhJiBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdCB7
IHJldHVybiBtX2dseXBoc1tjICUgc2l6ZV07IH0KLSAgICAgICAgdm9pZCBzZXRHbHlwaERhdGFG
b3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBHbHlwaCBnLCBjb25zdCBGb250RGF0YSogZikKLSAgICAg
ICAgewotICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoYyAlIHNpemUsIGcsIGYpOwot
ICAgICAgICB9Ci0gICAgICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgodW5zaWduZWQgaW5k
ZXgsIEdseXBoIGcsIGNvbnN0IEZvbnREYXRhKiBmKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
X2dseXBoc1tpbmRleF0uZ2x5cGggPSBnOwotICAgICAgICAgICAgbV9nbHlwaHNbaW5kZXhdLmZv
bnREYXRhID0gZjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBHbHlwaFBhZ2UqIGxvY2F0ZVBh
Z2UodW5zaWduZWQgcGFnZSwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKTsKLSAgICBib29sIGZp
bGxQYWdlKEdseXBoUGFnZSosIFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKTsKLQotICAgIGJvb2wgbV9maWxsZWRQ
cmltYXJ5UGFnZTsKLSAgICBHbHlwaFBhZ2UgbV9wcmltYXJ5UGFnZTsgLy8gV2Ugb3B0aW1pemUg
Zm9yIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgTGF0aW4tMS4KLSAgICBIYXNoTWFwPGludCwgR2x5
cGhQYWdlKj4qIG1fcGFnZXM7CisgICAgdm9pZCBpbml0aWFsaXplUGFnZShjb25zdCBGb250RGF0
YSosIHVuc2lnbmVkIHBhZ2VOdW1iZXIpOworCisgICAgR2x5cGhQYWdlVHJlZU5vZGUqIG1fcGFy
ZW50OworICAgIEdseXBoUGFnZSogbV9wYWdlOworICAgIHVuc2lnbmVkIG1fbGV2ZWw7CisgICAg
Ym9vbCBtX2lzU3lzdGVtRmFsbGJhY2s7CisgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEds
eXBoUGFnZVRyZWVOb2RlKj4gbV9jaGlsZHJlbjsKKyAgICBHbHlwaFBhZ2VUcmVlTm9kZSogbV9z
eXN0ZW1GYWxsYmFja0NoaWxkOworI2lmbmRlZiBOREVCVUcKKyAgICB1bnNpZ25lZCBtX3BhZ2VO
dW1iZXI7CisjZW5kaWYKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9Gb250RGF0YU1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL21hYy9Gb250RGF0YU1hYy5tbQkocmV2aXNpb24gMTg4NjMpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL21hYy9Gb250RGF0YU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTgwLDcgKzE4MCw3IEBAIHZvaWQgRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCiAgICAgCiAgICAg
Ly8gTWVhc3VyZSB0aGUgYWN0dWFsIGNoYXJhY3RlciAieCIsIGJlY2F1c2UgQXBwS2l0IHN5bnRo
ZXNpemVzIFggaGVpZ2h0IHJhdGhlciB0aGFuIGdldHRpbmcgaXQgZnJvbSB0aGUgZm9udC4KICAg
ICAvLyBVbmZvcnR1bmF0ZWx5LCBOU0ZvbnQgd2lsbCByb3VuZCB0aGlzIGZvciB1cyBzbyB3ZSBk
b24ndCBxdWl0ZSBnZXQgdGhlIHJpZ2h0IHZhbHVlLgotICAgIE5TR2x5cGggeEdseXBoID0gbV9j
aGFyYWN0ZXJUb0dseXBoTWFwLmdseXBoRGF0YUZvckNoYXJhY3RlcigneCcsIHRoaXMpLmdseXBo
OworICAgIE5TR2x5cGggeEdseXBoID0gR2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZCh0
aGlzLCAwKS0+cGFnZSgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ3gnKS5nbHlwaDsKICAgICBp
ZiAoeEdseXBoKSB7CiAgICAgICAgIE5TUmVjdCB4Qm94ID0gW21fZm9udC5mb250IGJvdW5kaW5n
UmVjdEZvckdseXBoOnhHbHlwaF07CiAgICAgICAgIC8vIFVzZSB0aGUgbWF4aW11bSBvZiBlaXRo
ZXIgd2lkdGggb3IgaGVpZ2h0IGJlY2F1c2UgIngiIGlzIG5lYXJseSBzcXVhcmUKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vbWFjL0ZvbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvRm9udE1hYy5tbQkocmV2aXNpb24gMTg4NjMpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L21hYy9Gb250TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MjEsNyArNDIxLDkgQEAgc3RhdGlj
IHZvaWQgZGlzcG9zZUFUU1VMYXlvdXRQYXJhbWV0ZXJzKAogfQogCiBGb250OjpGb250KGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBib29sIGlzUHJpbnRlckZvbnQpCi06bV9sZXR0
ZXJTcGFjaW5nKDApLCBtX3dvcmRTcGFjaW5nKDApCisgICAgOiBtX3BhZ2VaZXJvKDApCisgICAg
LCBtX2xldHRlclNwYWNpbmcoMCkKKyAgICAsIG1fd29yZFNwYWNpbmcoMCkKIHsKICAgICBtX2Zv
bnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChpc1ByaW50ZXJGb250KTsKICAgICBtX2Zv
bnRMaXN0ID0gbmV3IEZvbnRGYWxsYmFja0xpc3QoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
bWFjL0dseXBoTWFwTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9H
bHlwaE1hcE1hYy5jcHAJKHJldmlzaW9uIDE4ODYzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
R2x5cGhNYXBNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotYm9vbCBHbHlwaE1hcDo6ZmlsbFBhZ2UoR2x5cGhQYWdlKiBwYWdl
LCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnREYXRhKiBm
b250RGF0YSkKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1
ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQogewogICAgIC8vIFVzZSBhbiBh
cnJheSBvZiBsb25nIHNvIHdlIGdldCBnb29kIGVub3VnaCBhbGlnbm1lbnQuCiAgICAgbG9uZyBn
bHlwaFZlY3RvclsoR0xZUEhfVkVDVE9SX1NJWkUgKyBzaXplb2YobG9uZykgLSAxKSAvIHNpemVv
Zihsb25nKV07CkBAIC01NiwxNCArNTYsMTggQEAgYm9vbCBHbHlwaE1hcDo6ZmlsbFBhZ2UoR2x5
cGhQYWdlKiBwYWdlLAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgYm9vbCBo
YXZlR2x5cGhzID0gZmFsc2U7CiAgICAgQVRTTGF5b3V0UmVjb3JkKiBnbHlwaFJlY29yZCA9IChB
VFNMYXlvdXRSZWNvcmQqKXdrR2V0R2x5cGhWZWN0b3JGaXJzdFJlY29yZChnbHlwaFZlY3Rvcik7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7Ci0g
ICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckluZGV4KGksIGdseXBoUmVjb3JkLT5nbHlwaElE
LCBmb250RGF0YSk7CisgICAgICAgIEdseXBoIGdseXBoID0gZ2x5cGhSZWNvcmQtPmdseXBoSUQ7
CisgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGksIGdseXBoLCBmb250RGF0YSk7CisgICAg
ICAgIGlmICghaGF2ZUdseXBocyAmJiBnbHlwaCkKKyAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0
cnVlOwogICAgICAgICBnbHlwaFJlY29yZCA9IChBVFNMYXlvdXRSZWNvcmQgKikoKGNoYXIgKiln
bHlwaFJlY29yZCArIHdrR2V0R2x5cGhWZWN0b3JSZWNvcmRTaXplKGdseXBoVmVjdG9yKSk7CiAg
ICAgfQogICAgIHdrQ2xlYXJHbHlwaFZlY3RvcigmZ2x5cGhWZWN0b3IpOwogCi0gICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIGhhdmVHbHlwaHM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12466</attachid>
            <date>2007-01-15 13:19:11 -0800</date>
            <delta_ts>2007-01-16 02:49:09 -0800</delta_ts>
            <desc>Implement trees of fallback glyph pages</desc>
            <filename>6218_r5.patch</filename>
            <type>text/plain</type>
            <size>87954</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTg4NjYpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC05OTcsNyArOTk3LDcgQEAgc2V0KFdlYkNvcmVfU1JDUwogICAgIHBs
YXRmb3JtL0ZvbnREYXRhLmNwcAogICAgIHBsYXRmb3JtL0ZvbnRGYWxsYmFja0xpc3QuY3BwCiAg
ICAgcGxhdGZvcm0vRm9udEZhbWlseS5jcHAKLSAgICBwbGF0Zm9ybS9HbHlwaE1hcC5jcHAKKyAg
ICBwbGF0Zm9ybS9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKICAgICBwbGF0Zm9ybS9HbHlwaFdpZHRo
TWFwLmNwcAogICAgIHBsYXRmb3JtL0tVUkwuY3BwCiAgICAgcGxhdGZvcm0vTG9nZ2luZy5jcHAK
QEAgLTExNjcsNyArMTE2Nyw3IEBAIHNldChXZWJDb3JlX1NSQ1MKICAgICBwbGF0Zm9ybS9xdC9G
b250UXQuY3BwCiAgICAgcGxhdGZvcm0vcXQvRnJhbWVRdENsaWVudC5jcHAKICAgICBwbGF0Zm9y
bS9xdC9GcmFtZVF0LmNwcAotICAgIHBsYXRmb3JtL3F0L0dseXBoTWFwUXQuY3BwCisgICAgcGxh
dGZvcm0vcXQvR2x5cGhQYWdlVHJlZU5vZGVRdC5jcHAKICAgICBwbGF0Zm9ybS9xdC9Mb2FkZXJG
dW5jdGlvbnNRdC5jcHAKICAgICBwbGF0Zm9ybS9xdC9NaW1lVHlwZVJlZ2lzdHJ5UXQuY3BwCiAg
ICAgcGxhdGZvcm0vcXQvUGFnZVF0LmNwcApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODY2KQorKysgV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4NSBAQAorMjAwNy0wMS0xNSAgTWl0
eiBQZXR0ZWwgIDxtaXR6QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgLSBmaXggaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjIxOAorICAgICAgICAgIENTUzE6IFdlYlRleHRSZW5kZXJlciBjYWNoZXMgYW5k
IHJlLXVzZXMgZmFsbGJhY2sgcmVuZGVyZXJzIHRoYXQgYXJlIGJhc2VkIG9uIGZhbWlseSBsaXN0
cworCisgICAgICAgIFRoaXMgcGF0Y2ggdGFrZXMgY2hhcmFjdGVyLXRvLWdseXBoIG1hcHBpbmcg
b3V0IG9mIEZvbnREYXRhIGFuZCBpbnN0ZWFkIG1ha2VzCisgICAgICAgIGVhY2ggRm9udCBrZWVw
IGl0cyBvd24gbWFwcGluZywgdXNpbmcgYSBzaGFyZWQgc2V0IG9mIGdseXBoIHBhZ2UgZmFsbGJh
Y2sgdHJlZXMuCisKKyAgICAgICAgRm9yIGVhY2ggcGFnZSBudW1iZXIgdGhlcmUgaXMgKGF0IG1v
c3QpIG9uZSB0cmVlLiBBIHBhdGggZnJvbSB0aGUgcm9vdCB0byBhCisgICAgICAgIG5vZGUgaW4g
dGhlIHRyZWUgY29ycmVzcG9uZHMgdG8gYSBmYWxsYmFjayBsaXN0IG9mIEZvbnREYXRhcy4gVGhl
IG5vZGUgcG9pbnRzIHRvCisgICAgICAgIGEgcGFnZSAod2hpY2ggbWF5IGJlIHNoYXJlZCB3aXRo
IGl0cyBhbmNlc3RvcnMpIHRoYXQgbWFwcyBlYWNoIGNoYXJhY3RlciBpbiBpdHMgcmFuZ2UKKyAg
ICAgICAgdG8gYSBnbHlwaCBpbiB0aGUgZmlyc3QgRm9udERhdGEgaW4gdGhlIGZhbGxiYWNrIGxp
c3QgdGhhdCBoYXMgaXQsIG9yIHRvIDAgaWYgbm9uZSBvZgorICAgICAgICB0aGUgRm9udERhdGFz
IGhhcyBhIGdseXBoIGZvciB0aGF0IGNoYXJhY3Rlci4gQSBzcGVjaWFsIGtpbmQgb2Ygbm9kZSwg
dGhhdCBjYW4KKyAgICAgICAgb25seSBvY2N1ciBhcyBhIGxlYWYsIGNvcnJlc3BvbmRzIHRvIHVz
aW5nIHN5c3RlbSBmYWxsYmFjayBmb250cyBhZnRlciB0aGUgbGlzdAorICAgICAgICBoYXMgYmVl
biBleGhhdXN0ZWQuIFRoaXMgcHJldmVudHMgc3lzdGVtIGZhbGxiYWNrIGZyb20gcG9sbHV0aW5n
IG5vbi1sZWFmCisgICAgICAgIG5vZGVzLgorCisgICAgICAgIE5vZGVzIGFuZCBwYWdlcyBhcmUg
aW5pdGlhbGl6ZWQgbGF6aWx5IGFuZCBlbXBsb3kgImNvcHkgb24gd3JpdGUiLgorCisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMuYmtsOgor
ICAgICAgICAqIHBsYXRmb3JtL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVy
YXRvcjo6V2lkdGhJdGVyYXRvcik6IFJlbW92ZWQgc3Vic3RpdHV0ZUZvbnREYXRhLgorICAgICAg
ICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6YWR2YW5jZSk6IE1vdmVkIGFsbCBjaGFyYWN0ZXIt
dG8tZ2x5cGggbWFwcGluZyBsb2dpYyBvdXQKKyAgICAgICAgb2YgaGVyZSBhbmQgcmVwbGFjZWQg
aXQgd2l0aCBhIGNhbGwgdG8gRm9udDo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCkuCisgICAgICAg
IChXZWJDb3JlOjpGb250OjpGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om9wZXJhdG9y
PSk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIpOiBBZGRl
ZC4gVGhpcyBtZXRob2QgcGVyZm9ybXMgdGhlIGxvb2t1cCBpbiB0aGUKKyAgICAgICAgcGFnZSBm
YWxsYmFjayB0cmVlcywgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemF0aW9uIGFzIG5lZWRlZCwg
YW5kIGNhY2hpbmcgcG9pbnRlcnMgdG8KKyAgICAgICAgdGhlIHJldHJpZXZlZCBwYWdlIHRyZWUg
bm9kZXMgaW4gdGhlIGZvbnQuCisgICAgICAgIChXZWJDb3JlOjpGb250Ojp1cGRhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd1NpbXBsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udDo6ZmxvYXRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpmbG9hdFdpZHRoRm9y
U2ltcGxlVGV4dCk6IFJlbW92ZWQgc3Vic3RpdHV0ZUZvbnQgYXJndW1lbnQuCisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQpOgorICAgICAgICAq
IHBsYXRmb3JtL0ZvbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9Gb250RGF0YS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGb250RGF0YTo6Rm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL0Zv
bnREYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250RGF0YTo6bWlzc2luZ0dseXBoRGF0YSk6
IEFkZGVkLiBSZXR1cm5zIHRoZSAibWlzc2luZyBnbHlwaCIgR2x5cGhEYXRhIGZvcgorICAgICAg
ICB0aGlzIEZvbnREYXRhLgorICAgICAgICAqIHBsYXRmb3JtL0dseXBoTWFwLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9HbHlwaE1hcC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL0dseXBoUGFnZVRyZWVOb2RlLmNwcDogUmVuYW1lZCBHbHlwaE1hcC5jcHAgdG8gdGhp
cy4KKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290KTogQWRkZWQu
IFJldHVybnMgdGhlIHJvb3Qgb2YgdGhlIHBhZ2UgZmFsbGJhY2sgdHJlZSBmb3IKKyAgICAgICAg
dGhlIGdpdmVuIHBhZ2UgbnVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5v
ZGU6OmluaXRpYWxpemVQYWdlKTogQWRkZWQuIEhlbHBlciBtZXRob2QgdGhhdCBpbml0aWFsaXpl
cyB0aGUgcGFnZQorICAgICAgICBwb2ludGVyIG9mIGEgbm9kZSwgcG9zc2libHkgdG8gYSBwb2lu
dGVyIHRvIGFub3RoZXIgbm9kZSdzIHBhZ2Ugb3IgdG8gMC4KKyAgICAgICAgKFdlYkNvcmU6Okds
eXBoUGFnZVRyZWVOb2RlOjpnZXRDaGlsZCk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL0ds
eXBoUGFnZVRyZWVOb2RlLmg6IFJlbmFtZWQgR2x5cGhNYXAuaCB0byB0aGlzLgorICAgICAgICAo
V2ViQ29yZTo6R2x5cGhQYWdlOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R2x5cGhQYWdlOjpzZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R2x5cGhQYWdlOjpzZXRHbHlwaERhdGFGb3JJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpHbHlwaFBhZ2VUcmVlTm9kZTo6R2x5cGhQYWdlVHJlZU5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpH
bHlwaFBhZ2VUcmVlTm9kZTo6cGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRy
ZWVOb2RlOjpwYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpsZXZl
bCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6aXNTeXN0ZW1GYWxsYmFj
ayk6IEFkZGVkLiBSZXR1cm5zIHdoZXRoZXIgdGhlIG5vZGUgY29ycmVzcG9uZHMKKyAgICAgICAg
dG8gdGhlIHN5c3RlbSBwcm92aWRpbmcgZmFsbGJhY2sgZm9udHMsIHdoaWNoIGlzIGRvbmUgb24g
YSBjaGFyYWN0ZXItYnktY2hhcmFjdGVyIGJhc2lzLgorICAgICAgICAqIHBsYXRmb3JtL2dkay9H
bHlwaE1hcEdkay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ2RrL0dseXBoUGFn
ZVRyZWVOb2RlR2RrLmNwcDogUmVuYW1lZCBHbHlwaE1hcEdkay5jcHAgdG8gdGhpcy4KKyAgICAg
ICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Zv
bnREYXRhTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGE6OnBsYXRmb3JtSW5pdCk6
CisgICAgICAgICogcGxhdGZvcm0vbWFjL0ZvbnRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpG
b250OjpGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvR2x5cGhNYXBNYWMuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9HbHlwaFBhZ2VUcmVlTm9kZU1hYy5jcHA6IFJl
bmFtZWQgR2x5cE1hcE1hYy5jcHAgdG8gdGhpcy4KKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFn
ZTo6ZmlsbCk6IENoYW5nZWQgdG8gcmV0dXJuIGZhbHNlIGlmIHRoZSBmb250IGhhcyBubyBnbHlw
aHMgaW4gdGhlIHBhZ2UuCisgICAgICAgICogcGxhdGZvcm0vcXQvR2x5cGhNYXBRdC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvR2x5cGhQYWdlVHJlZU5vZGVRdC5jcHA6IFJl
bmFtZWQgR2x5cGhNYXBRdC5jcHAgdG8gdGhpcy4KKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFn
ZTo6ZmlsbCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0dseXBoTWFwV2luLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vR2x5cGhQYWdlVHJlZU5vZGVXaW4uY3BwOiBSZW5h
bWVkIEdseXBoTWFwV2luIHRvIHRoaXMuCisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmZp
bGwpOgorCiAyMDA3LTAxLTE1ICBKb2huIFN1bGxpdmFuICA8c3VsbGl2YW5AYXBwbGUuY29tPgog
CiAgICAgICAgICogcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwOgpJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAxODg2
NikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTU1Niw3ICs1NTYs
NyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9BZmZpbmVUcmFuc2Zv
cm1RdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1N0cmluZ1F0LmNwcCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvQ29sb3JRdC5jcHAgXAotICAgIHBsYXRmb3JtL3F0L0dseXBoTWFwUXQuY3Bw
IFwKKyAgICBwbGF0Zm9ybS9xdC9HbHlwaFBhZ2VUcmVlTm9kZVF0LmNwcCBcCiAgICAgcGxhdGZv
cm0vcXQvQ29va2llSmFyUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9Gb250UGxhdGZvcm1EYXRh
UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwIFwKQEAgLTYwOSw3ICs2
MDksNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9Gb250Q2FjaGUuY3BwIFwKICAgICBw
bGF0Zm9ybS9Gb250RmFsbGJhY2tMaXN0LmNwcCBcCiAgICAgcGxhdGZvcm0vUmVndWxhckV4cHJl
c3Npb24uY3BwIFwKLSAgICBwbGF0Zm9ybS9HbHlwaE1hcC5jcHAgXAorICAgIHBsYXRmb3JtL0ds
eXBoUGFnZVRyZWVOb2RlLmNwcCBcCiAgICAgcGxhdGZvcm0vRm9udC5jcHAgXAogICAgIHBsYXRm
b3JtL0ZvbnREYXRhLmNwcCBcCiAgICAgcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIFwKSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiAxODg2NikKKysrIFdlYkNvcmUvV2ViQ29yZVNvdXJj
ZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICAgICAgcGxhdGZv
cm0vRm9udERhdGEuY3BwCiAgICAgICAgIHBsYXRmb3JtL0ZvbnRGYWxsYmFja0xpc3QuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL0ZvbnRGYW1pbHkuY3BwCi0gICAgICAgIHBsYXRmb3JtL0dseXBoTWFw
LmNwcAorICAgICAgICBwbGF0Zm9ybS9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKICAgICAgICAgcGxh
dGZvcm0vR2x5cGhXaWR0aE1hcC5jcHAKICAgICAgICAgcGxhdGZvcm0vS1VSTC5jcHAKICAgICAg
ICAgcGxhdGZvcm0vTG9nZ2luZy5jcHAKQEAgLTE5MSw3ICsxOTEsNyBAQAogICAgICAgICBwbGF0
Zm9ybS93aW4vRm9udERhdGFXaW4uY3BwCiAgICAgICAgIHBsYXRmb3JtL3dpbi9Gb250UGxhdGZv
cm1EYXRhV2luLmNwcAogICAgICAgICBwbGF0Zm9ybS93aW4vRm9udFdpbi5jcHAKLSAgICAgICAg
cGxhdGZvcm0vd2luL0dseXBoTWFwV2luLmNwcAorICAgICAgICBwbGF0Zm9ybS93aW4vR2x5cGhQ
YWdlVHJlZU5vZGVXaW4uY3BwCiAgICAgICAgIHBsYXRmb3JtL3dpbi9JbnRQb2ludFdpbi5jcHAK
ICAgICAgICAgcGxhdGZvcm0vd2luL0ludFJlY3RXaW4uY3BwCiAgICAgICAgIHBsYXRmb3JtL3dp
bi9JbnRTaXplV2luLmNwcApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTg4NjYpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTE1MjMsMTEgKzE1
MjMsMTEgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5ccGxhdGZvcm1cR2x5cGhNYXAuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccGxh
dGZvcm1cR2x5cGhQYWdlVHJlZU5vZGUuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwbGF0Zm9ybVxHbHlwaE1hcC5oIgorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5ccGxhdGZvcm1cR2x5cGhQYWdlVHJlZU5vZGUuaCIKIAkJCQk+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQpAQCAtMjg1NCw3ICsyODU0LDcgQEAKIAkJCQkJPgogCQkJCTwvRmls
ZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBsYXRmb3JtXHdpblxHbHlw
aE1hcFdpbi5jcHAiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccGxhdGZvcm1cd2luXEdseXBo
UGFnZVRyZWVOb2RlV2luLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4
ODY2KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTI2ODgsOSArMjY4OCw5IEBACiAJCUJDNkRBQkYzMEExOTAxNTcwMEU1Q0Qx
NCAvKiBGb250Q2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkM2REFCRjIwQTE5MDE1NzAwRTVDRDE0IC8qIEZvbnRDYWNoZS5jcHAgKi87IH07
CiAJCUJDNkRBREVGMEExOTVGREYwMEU1Q0QxNCAvKiBXZWJGb250Q2FjaGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNkRBREVFMEExOTVGREYwMEU1
Q0QxNCAvKiBXZWJGb250Q2FjaGUuaCAqLzsgfTsKIAkJQkM2REFERkEwQTE5NjAyQjAwRTVDRDE0
IC8qIFdlYkZvbnRDYWNoZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDNkRBREY5MEExOTYwMkIwMEU1Q0QxNCAvKiBXZWJGb250Q2FjaGUubW0gKi87
IH07Ci0JCUJDNkRCMzY5MEExQTdDQjcwMEU1Q0QxNCAvKiBHbHlwaE1hcC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM2REIzNjgwQTFBN0NCNzAwRTVD
RDE0IC8qIEdseXBoTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJQkM2REI0NzQwQTFBOTBGQjAwRTVDRDE0IC8qIEdseXBoTWFwLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNkRCNDczMEExQTkw
RkIwMEU1Q0QxNCAvKiBHbHlwaE1hcC5jcHAgKi87IH07Ci0JCUJDNkRCNEQ0MEExQUZFRUYwMEU1
Q0QxNCAvKiBHbHlwaE1hcE1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzZEQjREMzBBMUFGRUVGMDBFNUNEMTQgLyogR2x5cGhNYXBNYWMuY3Bw
ICovOyB9OworCQlCQzZEQjM2OTBBMUE3Q0I3MDBFNUNEMTQgLyogR2x5cGhQYWdlVHJlZU5vZGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNkRCMzY4
MEExQTdDQjcwMEU1Q0QxNCAvKiBHbHlwaFBhZ2VUcmVlTm9kZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDNkRCNDc0MEExQTkwRkIwMEU1Q0Qx
NCAvKiBHbHlwaFBhZ2VUcmVlTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzZEQjQ3MzBBMUE5MEZCMDBFNUNEMTQgLyogR2x5cGhQYWdlVHJl
ZU5vZGUuY3BwICovOyB9OworCQlCQzZEQjRENDBBMUFGRUVGMDBFNUNEMTQgLyogR2x5cGhQYWdl
VHJlZU5vZGVNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkM2REI0RDMwQTFBRkVFRjAwRTVDRDE0IC8qIEdseXBoUGFnZVRyZWVOb2RlTWFjLmNw
cCAqLzsgfTsKIAkJQkNBQTkwQzMwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbEJhci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0FBOTBDMjBBN0VC
QTYwMDA4QjEyMjkgLyogU2Nyb2xsQmFyLmNwcCAqLzsgfTsKIAkJQkNCMTZCOEIwOTc5QjAxNDAw
NDY3NzQxIC8qIERlcHJlY2F0ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNCMTZCODgwOTc5QjAxNDAwNDY3NzQxIC8qIERlcHJlY2F0ZWRB
cnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUJDQjE2QjhDMDk3OUIwMTQwMDQ2Nzc0MSAvKiBBcnJheUltcGwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCMTZCODkwOTc5QjAxNDAwNDY3NzQx
IC8qIEFycmF5SW1wbC5jcHAgKi87IH07CkBAIC01ODA5LDkgKzU4MDksOSBAQAogCQlCQzZEQUJG
MjBBMTkwMTU3MDBFNUNEMTQgLyogRm9udENhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGb250Q2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQzZEQURFRTBBMTk1RkRGMDBFNUNEMTQgLyogV2ViRm9udENhY2hlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGb250Q2FjaGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkM2REFERjkwQTE5NjAyQjAwRTVDRDE0IC8qIFdlYkZvbnRDYWNoZS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJGb250Q2FjaGUu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNkRCMzY4MEExQTdDQjcwMEU1Q0Qx
NCAvKiBHbHlwaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2x5cGhN
YXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM2REI0NzMwQTFBOTBGQjAwRTVD
RDE0IC8qIEdseXBoTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHbHlwaE1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNkRCNEQzMEEx
QUZFRUYwMEU1Q0QxNCAvKiBHbHlwaE1hcE1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gR2x5cGhNYXBNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCQzZEQjM2ODBBMUE3Q0I3MDBFNUNEMTQgLyogR2x5cGhQYWdlVHJlZU5vZGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdseXBoUGFnZVRyZWVOb2RlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDNkRCNDczMEExQTkwRkIwMEU1Q0QxNCAvKiBHbHlw
aFBhZ2VUcmVlTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
R2x5cGhQYWdlVHJlZU5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzZE
QjREMzBBMUFGRUVGMDBFNUNEMTQgLyogR2x5cGhQYWdlVHJlZU5vZGVNYWMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdseXBoUGFnZVRyZWVOb2RlTWFjLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8q
IFNjcm9sbEJhci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTY3JvbGxCYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCUJDN0IyQUY5MDQ1MDgyNDEwMEE4MDAwRiAvKiBQbGF0Zm9y
bVNjcm9sbEJhck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFBsYXRmb3JtU2Nyb2xsQmFyTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQkNBQTkwQzIwQTdF
QkE2MDAwOEIxMjI5IC8qIFNjcm9sbEJhci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gU2Nyb2xsQmFyLmNwcDsgcGF0aCA9IHBsYXRmb3JtL1Njcm9sbEJhci5jcHA7
IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKQEAgLTY3MTQsNyArNjcxNCw3IEBACiAJCQkJ
QkNFQjM3NzIwOUI3QkEzOTAwQ0IzOEIxIC8qIEZvbnRNYWMubW0gKi8sCiAJCQkJMTQ4QTAwMTAw
QUY1OUYzRjAwOENDNzAwIC8qIEZvbnRQbGF0Zm9ybURhdGEuaCAqLywKIAkJCQk5MzVDNDc2QzA5
QUM0RDYzMDBBNkFBQjQgLyogRm91bmRhdGlvbkV4dHJhcy5oICovLAotCQkJCUJDNkRCNEQzMEEx
QUZFRUYwMEU1Q0QxNCAvKiBHbHlwaE1hcE1hYy5jcHAgKi8sCisJCQkJQkM2REI0RDMwQTFBRkVF
RjAwRTVDRDE0IC8qIEdseXBoUGFnZVRyZWVOb2RlTWFjLmNwcCAqLywKIAkJCQk5MzVDNDc2RTA5
QUM0RDczMDBBNkFBQjQgLyogS2V5RXZlbnRNYWMubW0gKi8sCiAJCQkJNjU5MzkyMzkwOUFFNDM1
QzAwMkM1MzFGIC8qIEtVUkxNYWMubW0gKi8sCiAJCQkJOTM1MjA4NDQwOUJENDNCOTAwRjIwMzhE
IC8qIExhbmd1YWdlLm1tICovLApAQCAtODkzNCw4ICs4OTM0LDggQEAKIAkJCQlCQ0M0N0UyNDA5
QTNENkYxMDBBREI3NzEgLyogRm9udEZhbWlseS5jcHAgKi8sCiAJCQkJQkNDNDdFMjUwOUEzRDZG
MTAwQURCNzcxIC8qIEZvbnRGYW1pbHkuaCAqLywKIAkJCQlCQ0M3MUExMjBBMEZGOTREMDAxNEVF
NkUgLyogR2x5cGhCdWZmZXIuaCAqLywKLQkJCQlCQzZEQjQ3MzBBMUE5MEZCMDBFNUNEMTQgLyog
R2x5cGhNYXAuY3BwICovLAotCQkJCUJDNkRCMzY4MEExQTdDQjcwMEU1Q0QxNCAvKiBHbHlwaE1h
cC5oICovLAorCQkJCUJDNkRCNDczMEExQTkwRkIwMEU1Q0QxNCAvKiBHbHlwaFBhZ2VUcmVlTm9k
ZS5jcHAgKi8sCisJCQkJQkM2REIzNjgwQTFBN0NCNzAwRTVDRDE0IC8qIEdseXBoUGFnZVRyZWVO
b2RlLmggKi8sCiAJCQkJQkNDMDg5NTUwQTFDNENDOTAwNjE4OUE2IC8qIEdseXBoV2lkdGhNYXAu
Y3BwICovLAogCQkJCUJDQzA4OTI5MEExQzQ5OTEwMDYxODlBNiAvKiBHbHlwaFdpZHRoTWFwLmgg
Ki8sCiAJCQkJNjU5MzkyMzUwOUFFNDM0NjAwMkM1MzFGIC8qIEtVUkwuY3BwICovLApAQCAtMTAw
NDUsNyArMTAwNDUsNyBAQAogCQkJCUE4MEU3MzUwMEExOTlDNzcwMDdGQjhDNSAvKiBTdHlsZUJh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU3MzUxMEExOTlDNzcwMDdGQjhDNSAvKiBTdHls
ZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU3MzUyMEExOTlDNzcwMDdGQjhDNSAvKiBD
U1NTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkM2REIzNjkwQTFBN0NCNzAwRTVDRDE0
IC8qIEdseXBoTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzZEQjM2OTBBMUE3Q0I3MDBFNUNE
MTQgLyogR2x5cGhQYWdlVHJlZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU3QTE4MEEx
OUMzRDYwMDdGQjhDNSAvKiBKU0hUTUxNZXRhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTgwRTdCMEMwQTE5RDYwNjAwN0ZCOEM1IC8qIEpTSFRNTFRpdGxlRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTgwRTdCMEQwQTE5RDYwNjAwN0ZCOEM1IC8qIEpTSFRNTExpbmtFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKQEAgLTExNjE1LDggKzExNjE1LDggQEAKIAkJCQlBODBFN0U5RTBB
MUE4M0UzMDA3RkI4QzUgLyogSlNIVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4MEU3RUEwMEExQTgzRTMwMDdGQjhDNSAvKiBKU0hUTUxCdXR0b25FbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE4MjZFQzQ4MEExQjBDQkUwMENEMUJCNiAvKiBKU0hUTUxP
cHRpb25FbGVtZW50Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkM2REI0NzQw
QTFBOTBGQjAwRTVDRDE0IC8qIEdseXBoTWFwLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUJDNkRC
NEQ0MEExQUZFRUYwMEU1Q0QxNCAvKiBHbHlwaE1hcE1hYy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlCQzZEQjQ3NDBBMUE5MEZCMDBFNUNEMTQgLyogR2x5cGhQYWdlVHJlZU5vZGUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQkM2REI0RDQwQTFBRkVFRjAwRTVDRDE0IC8qIEdseXBoUGFnZVRyZWVO
b2RlTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBOUVGNDU3MEExQjk1N0QwMDMzMkI2MyAv
KiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQ0MwODg4NjBBMUJENzhEMDA2MTg5QTYgLyogRm9udERhdGFNYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQlCQ0MwODkxQTBBMUM0NjUyMDA2MTg5QTYgLyogRm9udERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vRm9udC5jcHAJKHJldmlzaW9uIDE4ODY2KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9Gb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUg
IkZvbnQuaCIKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5o
IgogI2luY2x1ZGUgIkZvbnRGYWxsYmFja0xpc3QuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgog
I2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCkBAIC02MCw3ICs2MSw3IEBAIGNvbnN0IHVpbnQ4X3Qg
Rm9udDo6Z1JvdW5kaW5nSGFja0NoYXJhY3QKIEZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRo
ID0gQXV0bzsKIAogc3RydWN0IFdpZHRoSXRlcmF0b3IgewotICAgIFdpZHRoSXRlcmF0b3IoY29u
c3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBUZXh0U3R5bGUmIHN0eWxl
LCBjb25zdCBGb250RGF0YSogc3Vic3RpdHV0ZUZvbnREYXRhID0gMCk7CisgICAgV2lkdGhJdGVy
YXRvcihjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IFRleHRTdHls
ZSYgc3R5bGUpOwogCiAgICAgdm9pZCBhZHZhbmNlKGludCB0bywgR2x5cGhCdWZmZXIqIGdseXBo
QnVmZmVyID0gMCk7CiAgICAgYm9vbCBhZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwg
R2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyID0gMCk7CkBAIC03Miw4ICs3Myw2IEBAIHN0cnVjdCBX
aWR0aEl0ZXJhdG9yIHsKIAogICAgIGNvbnN0IFRleHRTdHlsZSYgbV9zdHlsZTsKICAgICAKLSAg
ICBjb25zdCBGb250RGF0YSogbV9zdWJzdGl0dXRlRm9udERhdGE7Ci0KICAgICB1bnNpZ25lZCBt
X2N1cnJlbnRDaGFyYWN0ZXI7CiAgICAgZmxvYXQgbV9ydW5XaWR0aFNvRmFyOwogICAgIGZsb2F0
IG1fd2lkdGhUb1N0YXJ0OwpAQCAtODUsMTIgKzg0LDExIEBAIHByaXZhdGU6CiAgICAgVUNoYXIz
MiBub3JtYWxpemVWb2ljaW5nTWFya3MoaW50IGN1cnJlbnRDaGFyYWN0ZXIpOwogfTsKIAotV2lk
dGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcihjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IFRleHRTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnREYXRhKiBzdWJzdGl0dXRl
Rm9udERhdGEpCitXaWR0aEl0ZXJhdG9yOjpXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnQqIGZvbnQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgVGV4dFN0eWxlJiBzdHlsZSkKICAgICA6IG1fZm9u
dChmb250KQogICAgICwgbV9ydW4ocnVuKQogICAgICwgbV9lbmQoc3R5bGUucnRsKCkgPyBydW4u
bGVuZ3RoKCkgOiBydW4udG8oKSkKICAgICAsIG1fc3R5bGUoc3R5bGUpCi0gICAgLCBtX3N1YnN0
aXR1dGVGb250RGF0YShzdWJzdGl0dXRlRm9udERhdGEpCiAgICAgLCBtX2N1cnJlbnRDaGFyYWN0
ZXIocnVuLmZyb20oKSkKICAgICAsIG1fcnVuV2lkdGhTb0ZhcigwKQogICAgICwgbV9maW5hbFJv
dW5kaW5nV2lkdGgoMCkKQEAgLTEyMCw3ICsxMTgsNyBAQCBXaWR0aEl0ZXJhdG9yOjpXaWR0aEl0
ZXJhdG9yKGNvbnN0IEZvbnQqCiAgICAgZWxzZSB7CiAgICAgICAgIFRleHRSdW4gY29tcGxldGVS
dW4ocnVuKTsKICAgICAgICAgY29tcGxldGVSdW4ubWFrZUNvbXBsZXRlKCk7Ci0gICAgICAgIFdp
ZHRoSXRlcmF0b3Igc3RhcnRQb3NpdGlvbkl0ZXJhdG9yKGZvbnQsIGNvbXBsZXRlUnVuLCBzdHls
ZSwgbV9zdWJzdGl0dXRlRm9udERhdGEpOworICAgICAgICBXaWR0aEl0ZXJhdG9yIHN0YXJ0UG9z
aXRpb25JdGVyYXRvcihmb250LCBjb21wbGV0ZVJ1biwgc3R5bGUpOwogICAgICAgICBzdGFydFBv
c2l0aW9uSXRlcmF0b3IuYWR2YW5jZShydW4uZnJvbSgpKTsKICAgICAgICAgbV93aWR0aFRvU3Rh
cnQgPSBzdGFydFBvc2l0aW9uSXRlcmF0b3IubV9ydW5XaWR0aFNvRmFyOwogICAgIH0KQEAgLTEz
NSwxNCArMTMzLDEyIEBAIHZvaWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZShpbnQgb2Zmc2V0LCAK
ICAgICBjb25zdCBVQ2hhciogY3AgPSBtX3J1bi5kYXRhKGN1cnJlbnRDaGFyYWN0ZXIpOwogCiAg
ICAgYm9vbCBydGwgPSBtX3N0eWxlLnJ0bCgpOwotICAgIGJvb2wgbmVlZENoYXJUcmFuc2Zvcm0g
PSBydGwgfHwgbV9mb250LT5pc1NtYWxsQ2FwcygpOworICAgIGJvb2wgYXR0ZW1wdEZvbnRTdWJz
dGl0dXRpb24gPSBtX3N0eWxlLmF0dGVtcHRGb250U3Vic3RpdHV0aW9uKCk7CiAgICAgYm9vbCBo
YXNFeHRyYVNwYWNpbmcgPSBtX2ZvbnQtPmxldHRlclNwYWNpbmcoKSB8fCBtX2ZvbnQtPndvcmRT
cGFjaW5nKCkgfHwgbV9wYWRkaW5nOwogCiAgICAgZmxvYXQgcnVuV2lkdGhTb0ZhciA9IG1fcnVu
V2lkdGhTb0ZhcjsKICAgICBmbG9hdCBsYXN0Um91bmRpbmdXaWR0aCA9IG1fZmluYWxSb3VuZGlu
Z1dpZHRoOwogICAgIAotICAgIGNvbnN0IEZvbnREYXRhKiBwcmltYXJ5Rm9udCA9IG1fZm9udC0+
cHJpbWFyeUZvbnQoKTsKLQogICAgIHdoaWxlIChjdXJyZW50Q2hhcmFjdGVyIDwgb2Zmc2V0KSB7
CiAgICAgICAgIFVDaGFyMzIgYyA9ICpjcDsKICAgICAgICAgdW5zaWduZWQgY2x1c3Rlckxlbmd0
aCA9IDE7CkBAIC0xNzMsNDQgKzE2OSwxMSBAQCB2b2lkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2Uo
aW50IG9mZnNldCwgCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBG
b250RGF0YSogZm9udERhdGEgPSBtX3N1YnN0aXR1dGVGb250RGF0YSA/IG1fc3Vic3RpdHV0ZUZv
bnREYXRhIDogcHJpbWFyeUZvbnQ7Ci0KLSAgICAgICAgaWYgKG5lZWRDaGFyVHJhbnNmb3JtKSB7
Ci0gICAgICAgICAgICBpZiAocnRsKQotICAgICAgICAgICAgICAgIGMgPSBtaXJyb3JlZENoYXIo
Yyk7Ci0KLSAgICAgICAgICAgIC8vIElmIHNtYWxsLWNhcHMsIGNvbnZlcnQgbG93ZXJjYXNlIHRv
IHVwcGVyLgotICAgICAgICAgICAgaWYgKG1fZm9udC0+aXNTbWFsbENhcHMoKSAmJiAhVW5pY29k
ZTo6aXNVcHBlcihjKSkgewotICAgICAgICAgICAgICAgIFVDaGFyMzIgdXBwZXJDID0gVW5pY29k
ZTo6dG9VcHBlcihjKTsKLSAgICAgICAgICAgICAgICBpZiAodXBwZXJDICE9IGMpIHsKLSAgICAg
ICAgICAgICAgICAgICAgYyA9IHVwcGVyQzsKLSAgICAgICAgICAgICAgICAgICAgZm9udERhdGEg
PSBmb250RGF0YS0+c21hbGxDYXBzRm9udERhdGEobV9mb250LT5mb250RGVzY3JpcHRpb24oKSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gRklYTUU6IFNob3VsZCBnbyB0aHJvdWdoIGZhbGxiYWNrIGxpc3QgZXZlbnR1YWxseSB3aGVu
IHdlIHJld29yayB0aGUgZ2x5cGggbWFwLgotICAgICAgICBjb25zdCBHbHlwaERhdGEmIGdseXBo
RGF0YSA9IGZvbnREYXRhLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CisgICAgICAgIGNvbnN0
IEdseXBoRGF0YSYgZ2x5cGhEYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywg
Y3AsIGNsdXN0ZXJMZW5ndGgsIHJ0bCwgYXR0ZW1wdEZvbnRTdWJzdGl0dXRpb24pOwogICAgICAg
ICBHbHlwaCBnbHlwaCA9IGdseXBoRGF0YS5nbHlwaDsKLSAgICAgICAgZm9udERhdGEgPSBnbHlw
aERhdGEuZm9udERhdGE7CisgICAgICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSA9IGdseXBo
RGF0YS5mb250RGF0YTsKIAotICAgICAgICAvLyBUcnkgdG8gZmluZCBhIHN1YnN0aXR1dGUgZm9u
dCBpZiB0aGlzIGZvbnQgZGlkbid0IGhhdmUgYSBnbHlwaCBmb3IgYSBjaGFyYWN0ZXIgaW4gdGhl
Ci0gICAgICAgIC8vIHN0cmluZy4gSWYgb25lIGlzbid0IGZvdW5kIHdlIGVuZCB1cCBkcmF3aW5n
IGFuZCBtZWFzdXJpbmcgdGhlIDAgZ2x5cGgsIHVzdWFsbHkgYSBib3guCi0gICAgICAgIGlmIChn
bHlwaCA9PSAwICYmICFtX3N1YnN0aXR1dGVGb250RGF0YSAmJiBtX3N0eWxlLmF0dGVtcHRGb250
U3Vic3RpdHV0aW9uKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEZvbnREYXRhKiBzdWJzdGl0dXRl
Rm9udERhdGEgPSBtX2ZvbnQtPmZvbnREYXRhRm9yQ2hhcmFjdGVycyhjcCwgY2x1c3Rlckxlbmd0
aCk7Ci0gICAgICAgICAgICBpZiAoc3Vic3RpdHV0ZUZvbnREYXRhKSB7Ci0gICAgICAgICAgICAg
ICAgR2x5cGhCdWZmZXIgbG9jYWxHbHlwaEJ1ZmZlcjsKLSAgICAgICAgICAgICAgICBtX2ZvbnQt
PmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KFRleHRSdW4oKFVDaGFyKiljcCwgY2x1c3Rlckxlbmd0
aCksIFRleHRTdHlsZSgwLCAwLCAwLCBtX3N0eWxlLnJ0bCgpLCBtX3N0eWxlLmRpcmVjdGlvbmFs
T3ZlcnJpZGUoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2Us
IG1fc3R5bGUuYXBwbHlXb3JkUm91bmRpbmcoKSksIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN1YnN0aXR1dGVGb250RGF0YSwgMCwgJmxvY2FsR2x5cGhCdWZmZXIpOwot
ICAgICAgICAgICAgICAgIGlmIChsb2NhbEdseXBoQnVmZmVyLnNpemUoKSA9PSAxKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGFzc2VydChzdWJzdGl0dXRlRm9udERhdGEgPT0gbG9jYWxHbHlwaEJ1
ZmZlci5mb250RGF0YUF0KDApKTsKLSAgICAgICAgICAgICAgICAgICAgZ2x5cGggPSBsb2NhbEds
eXBoQnVmZmVyLmdseXBoQXQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvbnREYXRhLT5zZXRH
bHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGgsIHN1YnN0aXR1dGVGb250RGF0YSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvbnREYXRhID0gc3Vic3RpdHV0ZUZvbnREYXRhOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBBU1NFUlQoZm9udERh
dGEpOwogCiAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBnbHlwaCBhbmQgZm9udCBkYXRh
LCBnZXQgaXRzIHdpZHRoLgogICAgICAgICBmbG9hdCB3aWR0aDsKQEAgLTMzMSw2ICsyOTQsNyBA
QCBGb250OjpGb250KCkgOm1fZm9udExpc3QoMCksIG1fbGV0dGVyU3BhCiBGb250OjpGb250KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIHNob3J0IGxldHRlclNwYWNpbmcsIHNob3J0IHdvcmRT
cGFjaW5nKSAKIDogbV9mb250RGVzY3JpcHRpb24oZmQpLAogICBtX2ZvbnRMaXN0KDApLAorICBt
X3BhZ2VaZXJvKDApLAogICBtX2xldHRlclNwYWNpbmcobGV0dGVyU3BhY2luZyksCiAgIG1fd29y
ZFNwYWNpbmcod29yZFNwYWNpbmcpCiB7fQpAQCAtMzQxLDYgKzMwNSw4IEBAIEZvbnQ6OkZvbnQo
Y29uc3QgRm9udCYgb3RoZXIpCiAgICAgbV9mb250TGlzdCA9IG90aGVyLm1fZm9udExpc3Q7CiAg
ICAgbV9sZXR0ZXJTcGFjaW5nID0gb3RoZXIubV9sZXR0ZXJTcGFjaW5nOwogICAgIG1fd29yZFNw
YWNpbmcgPSBvdGhlci5tX3dvcmRTcGFjaW5nOworICAgIG1fcGFnZXMgPSBvdGhlci5tX3BhZ2Vz
OworICAgIG1fcGFnZVplcm8gPSBvdGhlci5tX3BhZ2VaZXJvOwogfQogCiBGb250JiBGb250Ojpv
cGVyYXRvcj0oY29uc3QgRm9udCYgb3RoZXIpCkBAIC0zNDgsNiArMzE0LDggQEAgRm9udCYgRm9u
dDo6b3BlcmF0b3I9KGNvbnN0IEZvbnQmIG90aGVyKQogICAgIGlmICgmb3RoZXIgIT0gdGhpcykg
ewogICAgICAgICBtX2ZvbnREZXNjcmlwdGlvbiA9IG90aGVyLm1fZm9udERlc2NyaXB0aW9uOwog
ICAgICAgICBtX2ZvbnRMaXN0ID0gb3RoZXIubV9mb250TGlzdDsKKyAgICAgICAgbV9wYWdlcyA9
IG90aGVyLm1fcGFnZXM7CisgICAgICAgIG1fcGFnZVplcm8gPSBvdGhlci5tX3BhZ2VaZXJvOwog
ICAgICAgICBtX2xldHRlclNwYWNpbmcgPSBvdGhlci5tX2xldHRlclNwYWNpbmc7CiAgICAgICAg
IG1fd29yZFNwYWNpbmcgPSBvdGhlci5tX3dvcmRTcGFjaW5nOwogICAgIH0KQEAgLTM1OCw2ICsz
MjYsMTA4IEBAIEZvbnQ6On5Gb250KCkKIHsKIH0KIAorLy8gRklYTUU6IEl0IGlzIHVuZm9ydHVu
YXRlIHRoYXQgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBwYXNzZWQgdGhlIG9yaWdpbmFsIGNs
dXN0ZXIuCisvLyBJdCBpcyBvbmx5IHJlcXVpcmVkIGZvciB0aGUgcGxhdGZvcm0ncyBGb250Q2Fj
aGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycygpLCBhbmQgaXQgbWVhbnMKKy8vIHRoYXQgdGhp
cyBmdW5jdGlvbiBpcyBub3QgY29ycmVjdCBpZiBpdCB0cmFuc2Zvcm1zIHRoZSBjaGFyYWN0ZXIg
dG8gdXBwZXJjYXNlIGFuZCBjYWxscworLy8gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJh
Y3RlcnMoKSBhZnRlcndhcmRzLgorY29uc3QgR2x5cGhEYXRhJiBGb250OjpnbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBVQ2hhciogY2x1c3RlciwgdW5zaWduZWQgY2x1c3Rl
ckxlbmd0aCwgYm9vbCBtaXJyb3IsIGJvb2wgYXR0ZW1wdEZvbnRTdWJzdGl0dXRpb24pIGNvbnN0
Cit7CisgICAgYm9vbCBzbWFsbENhcHMgPSBmYWxzZTsKKworICAgIGlmIChtX2ZvbnREZXNjcmlw
dGlvbi5zbWFsbENhcHMoKSAmJiAhVW5pY29kZTo6aXNVcHBlcihjKSkgeworICAgICAgICAvLyBD
b252ZXJ0IGxvd2VyY2FzZSB0byB1cHBlci4KKyAgICAgICAgVUNoYXIzMiB1cHBlckMgPSBVbmlj
b2RlOjp0b1VwcGVyKGMpOworICAgICAgICBpZiAodXBwZXJDICE9IGMpIHsKKyAgICAgICAgICAg
IGMgPSB1cHBlckM7CisgICAgICAgICAgICBzbWFsbENhcHMgPSB0cnVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKG1pcnJvcikKKyAgICAgICAgYyA9IG1pcnJvcmVkQ2hhcihjKTsKKwor
ICAgIHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSAoYyAvIEdseXBoUGFnZTo6c2l6ZSk7CisKKyAgICBH
bHlwaFBhZ2VUcmVlTm9kZSogbm9kZSA9IHBhZ2VOdW1iZXIgPyBtX3BhZ2VzLmdldChwYWdlTnVt
YmVyKSA6IG1fcGFnZVplcm87CisgICAgaWYgKCFub2RlKSB7CisgICAgICAgIG5vZGUgPSBHbHlw
aFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKHByaW1hcnlGb250KCksIHBhZ2VOdW1iZXIpOwor
ICAgICAgICBpZiAocGFnZU51bWJlcikKKyAgICAgICAgICAgIG1fcGFnZXMuc2V0KHBhZ2VOdW1i
ZXIsIG5vZGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3BhZ2VaZXJvID0gbm9kZTsK
KyAgICB9CisKKyAgICBpZiAoIWF0dGVtcHRGb250U3Vic3RpdHV0aW9uICYmIG5vZGUtPmxldmVs
KCkgIT0gMSkKKyAgICAgICAgbm9kZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hpbGQo
cHJpbWFyeUZvbnQoKSwgcGFnZU51bWJlcik7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICBHbHlwaFBhZ2UqIHBhZ2UgPSBub2RlLT5wYWdlKCk7CisKKyAgICAgICAgaWYgKHBhZ2UpIHsK
KyAgICAgICAgICAgIGNvbnN0IEdseXBoRGF0YSYgZGF0YSA9IHBhZ2UtPmdseXBoRGF0YUZvckNo
YXJhY3RlcihjKTsKKyAgICAgICAgICAgIGlmIChkYXRhLmdseXBoIHx8ICFhdHRlbXB0Rm9udFN1
YnN0aXR1dGlvbikgeworICAgICAgICAgICAgICAgIGlmICghc21hbGxDYXBzKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZGF0YTsKKworICAgICAgICAgICAgICAgIGNvbnN0IEZvbnREYXRh
KiBzbWFsbENhcHNGb250RGF0YSA9IGRhdGEuZm9udERhdGEtPnNtYWxsQ2Fwc0ZvbnREYXRhKG1f
Zm9udERlc2NyaXB0aW9uKTsKKworICAgICAgICAgICAgICAgIGlmICghc21hbGxDYXBzRm9udERh
dGEpCisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGJ1dCBp
ZiBpdCBkb2VzLCB3ZSB3aWxsIHJldHVybiBhIGJpZyBjYXAuCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBkYXRhOworCisgICAgICAgICAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIHNtYWxs
Q2Fwc05vZGUgPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKHNtYWxsQ2Fwc0ZvbnRE
YXRhLCBwYWdlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICBHbHlwaFBhZ2UqIHNtYWxsQ2Fwc1Bh
Z2UgPSBzbWFsbENhcHNOb2RlLT5wYWdlKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoc21hbGxD
YXBzUGFnZSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaERhdGEmIGRhdGEgPSBz
bWFsbENhcHNQYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChkYXRhLmdseXBoIHx8ICFhdHRlbXB0Rm9udFN1YnN0aXR1dGlvbikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAvLyBOb3QgYXR0ZW1wdGluZyBzeXN0ZW0gZmFsbGJhY2sgb2ZmIHRoZSBzbWFsbENh
cHNGb250RGF0YS4gVGhpcyBpcyB0aGUgdmVyeSB1bmxpa2VseSBjYXNlIHRoYXQKKyAgICAgICAg
ICAgICAgICAvLyBhIGZvbnQgaGFzIHRoZSBsb3dlcmNhc2UgY2hhcmFjdGVyIGJ1dCBub3QgaXRz
IHVwcGVyY2FzZSB2ZXJzaW9uLgorICAgICAgICAgICAgICAgIHJldHVybiBzbWFsbENhcHNGb250
RGF0YS0+bWlzc2luZ0dseXBoRGF0YSgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
aWYgKCFhdHRlbXB0Rm9udFN1YnN0aXR1dGlvbikgeworICAgICAgICAgICAgaWYgKHNtYWxsQ2Fw
cykgeworICAgICAgICAgICAgICAgIGlmIChjb25zdCBGb250RGF0YSogc21hbGxDYXBzRm9udERh
dGEgPSBwcmltYXJ5Rm9udCgpLT5zbWFsbENhcHNGb250RGF0YShtX2ZvbnREZXNjcmlwdGlvbikp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0YS0+bWlzc2luZ0ds
eXBoRGF0YSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHByaW1hcnlGb250
KCktPm1pc3NpbmdHbHlwaERhdGEoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChub2RlLT5p
c1N5c3RlbUZhbGxiYWNrKCkpIHsKKyAgICAgICAgICAgIC8vIFN5c3RlbSBmYWxsYmFjayBpcyBj
aGFyYWN0ZXItZGVwZW5kZW50LgorICAgICAgICAgICAgY29uc3QgRm9udERhdGEqIGNoYXJhY3Rl
ckZvbnREYXRhID0gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoKnRoaXMsIGNs
dXN0ZXIsIGNsdXN0ZXJMZW5ndGgpOworICAgICAgICAgICAgaWYgKHNtYWxsQ2FwcykKKyAgICAg
ICAgICAgICAgICBjaGFyYWN0ZXJGb250RGF0YSA9IGNoYXJhY3RlckZvbnREYXRhLT5zbWFsbENh
cHNGb250RGF0YShtX2ZvbnREZXNjcmlwdGlvbik7CisgICAgICAgICAgICBpZiAoY2hhcmFjdGVy
Rm9udERhdGEpIHsKKyAgICAgICAgICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogZmFsbGJhY2tO
b2RlID0gR2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZChjaGFyYWN0ZXJGb250RGF0YSwg
cGFnZU51bWJlcik7CisgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhEYXRhJiBkYXRhID0gZmFs
bGJhY2tOb2RlLT5wYWdlKCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXNtYWxsQ2FwcykKKyAgICAgICAgICAgICAgICAgICAgcGFnZS0+c2V0R2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKGMsIGRhdGEuZ2x5cGgsIGNoYXJhY3RlckZvbnREYXRhKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgLy8gRXZlbiBzeXN0ZW0gZmFsbGJhY2sgY2FuIGZhaWwuCisgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFNob3VsZCB0aGUgbGFzdCByZXNvcnQgZm9udCBiZSB1c2VkPworICAgICAgICAg
ICAgICAgIGNvbnN0IEdseXBoRGF0YSYgZGF0YSA9IHByaW1hcnlGb250KCktPm1pc3NpbmdHbHlw
aERhdGEoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNtYWxsQ2FwcykKKyAgICAgICAgICAgICAg
ICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIGRhdGEuZ2x5cGgsIGRhdGEu
Zm9udERhdGEpOworICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgLy8gUHJvY2VlZCB3aXRoIHRoZSBmYWxsYmFjayBsaXN0Lgor
ICAgICAgICBjb25zdCBGb250RGF0YSogZm9udERhdGEgPSBmb250RGF0YUF0KG5vZGUtPmxldmVs
KCkpOworICAgICAgICBub2RlID0gbm9kZS0+Z2V0Q2hpbGQoZm9udERhdGEsIHBhZ2VOdW1iZXIp
OworCisgICAgICAgIGlmIChwYWdlTnVtYmVyKQorICAgICAgICAgICAgbV9wYWdlcy5zZXQocGFn
ZU51bWJlciwgbm9kZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcGFnZVplcm8gPSBu
b2RlOworICAgIH0KKworfQorCiBjb25zdCBGb250RGF0YSogRm9udDo6cHJpbWFyeUZvbnQoKSBj
b25zdAogewogICAgIGFzc2VydChtX2ZvbnRMaXN0KTsKQEAgLTM4Niw2ICs0NTYsOCBAQCB2b2lk
IEZvbnQ6OnVwZGF0ZSgpIGNvbnN0CiAgICAgaWYgKCFtX2ZvbnRMaXN0KQogICAgICAgICBtX2Zv
bnRMaXN0ID0gbmV3IEZvbnRGYWxsYmFja0xpc3QoKTsKICAgICBtX2ZvbnRMaXN0LT5pbnZhbGlk
YXRlKCk7CisgICAgbV9wYWdlWmVybyA9IDA7CisgICAgbV9wYWdlcy5jbGVhcigpOwogfQogCiBp
bnQgRm9udDo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuKSBjb25zdApAQCAtNDk1LDcgKzU2Nyw3
IEBAIHZvaWQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXgKIAogICAgIC8vIE91
ciBtZWFzdXJpbmcgY29kZSB3aWxsIGdlbmVyYXRlIGdseXBocyBhbmQgYWR2YW5jZXMgZm9yIHVz
LgogICAgIGZsb2F0IHN0YXJ0WDsKLSAgICBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChydW4sIHN0
eWxlLCAwLCAmc3RhcnRYLCAmZ2x5cGhCdWZmZXIpOworICAgIGZsb2F0V2lkdGhGb3JTaW1wbGVU
ZXh0KHJ1biwgc3R5bGUsICZzdGFydFgsICZnbHlwaEJ1ZmZlcik7CiAgICAgCiAgICAgLy8gV2Ug
Y291bGRuJ3QgZ2VuZXJhdGUgYW55IGdseXBocyBmb3IgdGhlIHJ1bi4gIEdpdmUgdXAuCiAgICAg
aWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKQEAgLTU0MSwxNiArNjEzLDE1IEBAIHZvaWQgRm9u
dDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb24KIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGgo
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBUZXh0U3R5bGUmIHN0eWxlKSBjb25zdAogewogICAg
IGlmIChjYW5Vc2VHbHlwaENhY2hlKHJ1bikpCi0gICAgICAgIHJldHVybiBmbG9hdFdpZHRoRm9y
U2ltcGxlVGV4dChydW4sIHN0eWxlLCAwLCAwLCAwKTsKKyAgICAgICAgcmV0dXJuIGZsb2F0V2lk
dGhGb3JTaW1wbGVUZXh0KHJ1biwgc3R5bGUsIDAsIDApOwogICAgIGVsc2UKICAgICAgICAgcmV0
dXJuIGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChydW4sIHN0eWxlKTsKIH0KIAotZmxvYXQgRm9u
dDo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBUZXh0
U3R5bGUmIHN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Rm9udERhdGEqIHN1YnN0aXR1dGVGb250LCBmbG9hdCogc3RhcnRQb3NpdGlvbiwgR2x5cGhCdWZm
ZXIqIGdseXBoQnVmZmVyKSBjb25zdAorZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvclNpbXBsZVRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBUZXh0U3R5bGUmIHN0eWxlLCBmbG9hdCogc3Rh
cnRQb3NpdGlvbiwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKSBjb25zdAogewogICAgIAotICAg
IFdpZHRoSXRlcmF0b3IgaXQodGhpcywgcnVuLCBzdHlsZSwgc3Vic3RpdHV0ZUZvbnQpOworICAg
IFdpZHRoSXRlcmF0b3IgaXQodGhpcywgcnVuLCBzdHlsZSk7CiAgICAgaXQuYWR2YW5jZShydW4u
dG8oKSwgZ2x5cGhCdWZmZXIpOwogICAgIGZsb2F0IHJ1bldpZHRoID0gaXQubV9ydW5XaWR0aFNv
RmFyOwogICAgIGlmIChzdGFydFBvc2l0aW9uKSB7CkBAIC02MDgsNyArNjc5LDcgQEAgaW50IEZv
bnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dAogICAgIEdseXBoQnVmZmVyIGxvY2Fs
R2x5cGhCdWZmZXI7CiAgICAgdW5zaWduZWQgb2Zmc2V0OwogICAgIGlmIChzdHlsZS5ydGwoKSkg
ewotICAgICAgICBkZWx0YSAtPSBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChydW4sIHN0eWxlLCAw
LCAwLCAwKTsKKyAgICAgICAgZGVsdGEgLT0gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVuLCBz
dHlsZSwgMCwgMCk7CiAgICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICAgICBvZmZzZXQgPSBp
dC5tX2N1cnJlbnRDaGFyYWN0ZXI7CiAgICAgICAgICAgICBmbG9hdCB3OwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Gb250LmgJ
KHJldmlzaW9uIDE4ODY2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9Gb250LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgRk9OVF9ICiAKICNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKKyNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgogCiAjaWYgUExBVEZP
Uk0oUVQpCiBjbGFzcyBRRm9udDsKQEAgLTE0OCw2ICsxNDksOCBAQCBwdWJsaWM6CiAKICAgICBj
b25zdCBGb250RGF0YSogcHJpbWFyeUZvbnQoKSBjb25zdDsKICAgICBjb25zdCBGb250RGF0YSog
Zm9udERhdGFBdCh1bnNpZ25lZCkgY29uc3Q7CisgICAgY29uc3QgR2x5cGhEYXRhJiBnbHlwaERh
dGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgVUNoYXIqIGNsdXN0ZXIsIHVuc2lnbmVkIGNs
dXN0ZXJMZW5ndGgsIGJvb2wgbWlycm9yLCBib29sIGF0dGVtcHRGb250U3Vic3RpdHV0aW9uKSBj
b25zdDsKKyAgICAvLyBVc2VkIGZvciBjb21wbGV4IHRleHQsIGFuZCBkb2VzIG5vdCB1dGlsaXpl
IHRoZSBnbHlwaCBtYXAgY2FjaGUuCiAgICAgY29uc3QgRm9udERhdGEqIGZvbnREYXRhRm9yQ2hh
cmFjdGVycyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgpIGNvbnN0OwogCiBwcml2YXRlOgpAQCAt
MTU2LDggKzE1OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3U2ltcGxlVGV4dChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJiwgY29uc3QgRmxvYXRQ
b2ludCYpIGNvbnN0OwogICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3Qg
RmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZvaWQgZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmLCBjb25zdCBGbG9hdFBvaW50
JikgY29uc3Q7Ci0gICAgZmxvYXQgZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1
biYsIGNvbnN0IFRleHRTdHlsZSYsIGNvbnN0IEZvbnREYXRhKiBzdWJzdGl0dXRlRm9udERhdGEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIHN0YXJ0WCwgR2x5cGhC
dWZmZXIqKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBU
ZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJiwgZmxvYXQqIHN0YXJ0WCwgR2x5cGhCdWZmZXIqKSBj
b25zdDsKICAgICBmbG9hdCBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYs
IGNvbnN0IFRleHRTdHlsZSYpIGNvbnN0OwogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclNp
bXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGludCBwb3NpdGlvbiwg
Ym9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0
aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGludCBw
b3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CkBAIC0xODIsNiArMTg0
LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGb250RGVzY3JpcHRpb24gbV9mb250RGVzY3Jp
cHRpb247CiAgICAgbXV0YWJsZSBSZWZQdHI8Rm9udEZhbGxiYWNrTGlzdD4gbV9mb250TGlzdDsK
KyAgICBtdXRhYmxlIEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+IG1fcGFnZXM7Cisg
ICAgbXV0YWJsZSBHbHlwaFBhZ2VUcmVlTm9kZSogbV9wYWdlWmVybzsKICAgICBzaG9ydCBtX2xl
dHRlclNwYWNpbmc7CiAgICAgc2hvcnQgbV93b3JkU3BhY2luZzsKIH07CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL0ZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0Zv
bnREYXRhLmNwcAkocmV2aXNpb24gMTg4NjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZvbnREYXRh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTEgKzQ0LDEzIEBAIEZvbnREYXRhOjpGb250RGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXQKICAgICAvLyBOYXN0eSBoYWNrIHRvIGRldGVybWluZSBp
ZiB3ZSBzaG91bGQgcm91bmQgb3IgY2VpbCBzcGFjZSB3aWR0aHMuCiAgICAgLy8gSWYgdGhlIGZv
bnQgaXMgbW9ub3NwYWNlIG9yIGZha2UgbW9ub3NwYWNlIHdlIGNlaWwgdG8gZW5zdXJlIHRoYXQg
CiAgICAgLy8gZXZlcnkgY2hhcmFjdGVyIGFuZCB0aGUgc3BhY2UgYXJlIHRoZSBzYW1lIHdpZHRo
LiAgT3RoZXJ3aXNlIHdlIHJvdW5kLgotICAgIG1fc3BhY2VHbHlwaCA9IG1fY2hhcmFjdGVyVG9H
bHlwaE1hcC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJyAnLCB0aGlzKS5nbHlwaDsKKyAgICBtX3Nw
YWNlR2x5cGggPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKHRoaXMsIDApLT5wYWdl
KCktPmdseXBoRGF0YUZvckNoYXJhY3RlcignICcpLmdseXBoOwogICAgIGZsb2F0IHdpZHRoID0g
d2lkdGhGb3JHbHlwaChtX3NwYWNlR2x5cGgpOwogICAgIG1fc3BhY2VXaWR0aCA9IHdpZHRoOwog
ICAgIGRldGVybWluZVBpdGNoKCk7CiAgICAgbV9hZGp1c3RlZFNwYWNlV2lkdGggPSBtX3RyZWF0
QXNGaXhlZFBpdGNoID8gY2VpbGYod2lkdGgpIDogcm91bmRmKHdpZHRoKTsKKyAgICBtX21pc3Np
bmdHbHlwaERhdGEuZm9udERhdGEgPSB0aGlzOworICAgIG1fbWlzc2luZ0dseXBoRGF0YS5nbHlw
aCA9IDA7CiB9CiAKIEZvbnREYXRhOjp+Rm9udERhdGEoKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9Gb250RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vRm9udERhdGEuaAko
cmV2aXNpb24gMTg4NjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZvbnREYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNkZWZpbmUgRk9OVERBVEFfSAogCiAjaW5jbHVkZSAi
Rm9udFBsYXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIkdseXBoTWFwLmgiCisjaW5jbHVkZSAiR2x5
cGhQYWdlVHJlZU5vZGUuaCIKICNpbmNsdWRlICJHbHlwaFdpZHRoTWFwLmgiCiAjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAKQEAgLTY1LDEwICs2NSw4IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZGV0ZXJtaW5lUGl0Y2goKTsKICAgICBQaXRjaCBwaXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1f
dHJlYXRBc0ZpeGVkUGl0Y2ggPyBGaXhlZFBpdGNoIDogVmFyaWFibGVQaXRjaDsgfQotICAgIAot
ICAgIC8vIEZJWE1FOiBTaG91bGQgZ28gYXdheSB3aGVuIHdlIHB1bGwgdGhlIGdseXBoIG1hcCBv
dXQgb2YgdGhlIEZvbnREYXRhLgotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIo
VUNoYXIzMiBjKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlclRvR2x5cGhNYXAuZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKGMsIHRoaXMpOyB9Ci0gICAgdm9pZCBzZXRHbHlwaERhdGFGb3JDaGFyYWN0
ZXIoVUNoYXIzMiBjLCBHbHlwaCBnbHlwaCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKSBjb25z
dCB7IG1fY2hhcmFjdGVyVG9HbHlwaE1hcC5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5
cGgsIGZvbnREYXRhKTsgfQorCisgICAgY29uc3QgR2x5cGhEYXRhJiBtaXNzaW5nR2x5cGhEYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9taXNzaW5nR2x5cGhEYXRhOyB9CiAKICNpZiBQTEFURk9STShN
QUMpCiAgICAgTlNGb250KiBnZXROU0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQuZm9udDsg
fQpAQCAtOTUsNyArOTMsNiBAQCBwdWJsaWM6CiAgICAgZmxvYXQgbV94SGVpZ2h0OwogICAgIAog
ICAgIEZvbnRQbGF0Zm9ybURhdGEgbV9mb250OwotICAgIG11dGFibGUgR2x5cGhNYXAgbV9jaGFy
YWN0ZXJUb0dseXBoTWFwOwogICAgIG11dGFibGUgR2x5cGhXaWR0aE1hcCBtX2dseXBoVG9XaWR0
aE1hcDsKIAogICAgIGJvb2wgbV90cmVhdEFzRml4ZWRQaXRjaDsKQEAgLTEwMyw2ICsxMDAsOCBA
QCBwdWJsaWM6CiAgICAgZmxvYXQgbV9zcGFjZVdpZHRoOwogICAgIGZsb2F0IG1fYWRqdXN0ZWRT
cGFjZVdpZHRoOwogCisgICAgR2x5cGhEYXRhIG1fbWlzc2luZ0dseXBoRGF0YTsKKwogICAgIG11
dGFibGUgRm9udERhdGEqIG1fc21hbGxDYXBzRm9udERhdGE7CiAKICNpZiBQTEFURk9STShDRykK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vR2x5cGhNYXAuY3BwCShyZXZpc2lvbiAxODg2NikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vR2x5cGhNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyNSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHbHlwaE1hcC5oIgotCi0j
aW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKLSNpbmNsdWRlICJGb250RGF0YS5oIgotI2luY2x1
ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HbHlw
aERhdGEgR2x5cGhNYXA6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGNvbnN0IEZv
bnREYXRhKiBmb250RGF0YSkKLXsKLSAgICB1bnNpZ25lZCBwYWdlTnVtYmVyID0gKGMgLyBHbHlw
aFBhZ2U6OnNpemUpOwotICAgIEdseXBoUGFnZSogcGFnZSA9IGxvY2F0ZVBhZ2UocGFnZU51bWJl
ciwgZm9udERhdGEpOwotICAgIGlmIChwYWdlKQotICAgICAgICByZXR1cm4gcGFnZS0+Z2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKGMpOwotICAgIEdseXBoRGF0YSBkYXRhID0geyAwLCBmb250RGF0YSB9
OwotICAgIHJldHVybiBkYXRhOwotfQotCi12b2lkIEdseXBoTWFwOjpzZXRHbHlwaERhdGFGb3JD
aGFyYWN0ZXIoVUNoYXIzMiBjLCBHbHlwaCBnbHlwaCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRh
KQotewotICAgIHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSAoYyAvIEdseXBoUGFnZTo6c2l6ZSk7Ci0g
ICAgR2x5cGhQYWdlKiBwYWdlID0gbG9jYXRlUGFnZShwYWdlTnVtYmVyLCBmb250RGF0YSk7Ci0g
ICAgaWYgKHBhZ2UpCi0gICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBn
bHlwaCwgZm9udERhdGEpOwotfQotCi1pbmxpbmUgR2x5cGhNYXA6OkdseXBoUGFnZSogR2x5cGhN
YXA6OmxvY2F0ZVBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgRm9udERhdGEqIGZvbnRE
YXRhKQotewotICAgIEdseXBoUGFnZSogcGFnZTsKLSAgICBpZiAocGFnZU51bWJlciA9PSAwKSB7
Ci0gICAgICAgIGlmIChtX2ZpbGxlZFByaW1hcnlQYWdlKQotICAgICAgICAgICAgcmV0dXJuICZt
X3ByaW1hcnlQYWdlOwotICAgICAgICBwYWdlID0gJm1fcHJpbWFyeVBhZ2U7IAotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmIChtX3BhZ2VzKSB7Ci0gICAgICAgICAgICBHbHlwaFBhZ2UqIHJlc3Vs
dCA9IG1fcGFnZXMtPmdldChwYWdlTnVtYmVyKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICBwYWdlID0g
bmV3IEdseXBoUGFnZTsKLSAgICB9Ci0gICAgICAKLSAgICB1bnNpZ25lZCBzdGFydCA9IHBhZ2VO
dW1iZXIgKiBHbHlwaFBhZ2U6OnNpemU7Ci0gICAgVUNoYXIgYnVmZmVyW0dseXBoUGFnZTo6c2l6
ZSAqIDIgKyAyXTsKLSAgICB1bnNpZ25lZCBidWZmZXJMZW5ndGg7Ci0gICAgdW5zaWduZWQgaTsK
LQotICAgIC8vIEZpbGwgaW4gYSBidWZmZXIgd2l0aCB0aGUgZW50aXJlICJwYWdlIiBvZiBjaGFy
YWN0ZXJzIHRoYXQgd2Ugd2FudCB0byBsb29rIHVwIGdseXBocyBmb3IuCi0gICAgaWYgKHN0YXJ0
IDwgMHgxMDAwMCkgewotICAgICAgICBidWZmZXJMZW5ndGggPSBHbHlwaFBhZ2U6OnNpemU7Ci0g
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykKLSAgICAgICAgICAg
IGJ1ZmZlcltpXSA9IHN0YXJ0ICsgaTsKLQotICAgICAgICBpZiAoc3RhcnQgPT0gMCkgewotICAg
ICAgICAgICAgLy8gQ29udHJvbCBjaGFyYWN0ZXJzIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCi0g
ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMHgyMDsgKytpKQotICAgICAgICAgICAgICAgIGJ1
ZmZlcltpXSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgZm9yIChpID0gMHg3RjsgaSA8
IDB4QTA7IGkrKykKLSAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsK
LQotICAgICAgICAgICAgLy8gXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcgc3BhY2UgbXVzdCByZW5k
ZXIgYXMgYSBzcGFjZS4KLSAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcbiddID0gJyAnOwotICAg
ICAgICAgICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAnICc7Ci0gICAgICAgICAgICBidWZmZXJbbm9C
cmVha1NwYWNlXSA9ICcgJzsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ1ZmZl
ckxlbmd0aCA9IEdseXBoUGFnZTo6c2l6ZSAqIDI7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBH
bHlwaFBhZ2U6OnNpemU7IGkrKykgewotICAgICAgICAgICAgaW50IGMgPSBpICsgc3RhcnQ7Ci0g
ICAgICAgICAgICBidWZmZXJbaSAqIDJdID0gVTE2X0xFQUQoYyk7Ci0gICAgICAgICAgICBidWZm
ZXJbaSAqIDIgKyAxXSA9IFUxNl9UUkFJTChjKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAg
ICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgYnVmZmVyIGZ1bGwgb2YgY2hhcmFjdGVycywgd2Ugd2Fu
dCB0byBnZXQgYmFjayBhbiBhcnJheQotICAgIC8vIG9mIGdseXBoIGluZGljZXMuICBUaGlzIHBh
cnQgaW52b2x2ZXMgY2FsbGluZyBpbnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyAKLSAgICAvLyBy
b3V0aW5lIG9mIG91ciBnbHlwaCBtYXAgZm9yIGFjdHVhbGx5IGZpbGxpbmcgaW4gdGhlIHBhZ2Ug
d2l0aCB0aGUgZ2x5cGhzLgotICAgIGJvb2wgc3VjY2VzcyA9IGZpbGxQYWdlKHBhZ2UsIGJ1ZmZl
ciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSk7Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAg
IGlmIChwYWdlTnVtYmVyICE9IDApCi0gICAgICAgICAgICBkZWxldGUgcGFnZTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIGlmIChwYWdlTnVtYmVyID09IDApCi0gICAgICAg
IG1fZmlsbGVkUHJpbWFyeVBhZ2UgPSB0cnVlOwotICAgIGVsc2UgewotICAgICAgICBpZiAoIW1f
cGFnZXMpCi0gICAgICAgICAgICBtX3BhZ2VzID0gbmV3IEhhc2hNYXA8aW50LCBHbHlwaFBhZ2Uq
PjsKLSAgICAgICAgbV9wYWdlcy0+c2V0KHBhZ2VOdW1iZXIsIHBhZ2UpOwotICAgIH0KLQotICAg
IHJldHVybiBwYWdlOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0dseXBoTWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9HbHlwaE1hcC5oCShyZXZpc2lvbiAxODg2
NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgR0xZUEhfTUFQX0gKLSNkZWZpbmUgR0xZ
UEhfTUFQX0gKLQotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KLSNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEZvbnREYXRhOwotCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IEds
eXBoOwotCi1zdHJ1Y3QgR2x5cGhEYXRhIHsgICAgCi0gICAgR2x5cGggZ2x5cGg7Ci0gICAgY29u
c3QgRm9udERhdGEqIGZvbnREYXRhOwotfTsKLQotY2xhc3MgR2x5cGhNYXAgOiBOb25jb3B5YWJs
ZSB7Ci1wdWJsaWM6Ci0gICAgR2x5cGhNYXAoKSA6IG1fZmlsbGVkUHJpbWFyeVBhZ2UoZmFsc2Up
LCBtX3BhZ2VzKDApIHt9Ci0gICAgfkdseXBoTWFwKCkgeyBpZiAobV9wYWdlcykgeyBkZWxldGVB
bGxWYWx1ZXMoKm1fcGFnZXMpOyBkZWxldGUgbV9wYWdlczsgfSB9Ci0KLSAgICBHbHlwaERhdGEg
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZvbnREYXRhKik7Ci0gICAgdm9p
ZCBzZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgR2x5cGgsIGNvbnN0IEZvbnREYXRh
Kik7Ci0KLXByaXZhdGU6Ci0gICAgc3RydWN0IEdseXBoUGFnZSB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBzaXplX3Qgc2l6ZSA9IDI1NjsgLy8gQ292ZXJzIExhdGluLTEgaW4gYSBzaW5nbGUgcGFn
ZS4KLSAgICAgICAgR2x5cGhEYXRhIG1fZ2x5cGhzW3NpemVdOwotCi0gICAgICAgIGNvbnN0IEds
eXBoRGF0YSYgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QgeyByZXR1cm4g
bV9nbHlwaHNbYyAlIHNpemVdOyB9Ci0gICAgICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKFVDaGFyMzIgYywgR2x5cGggZywgY29uc3QgRm9udERhdGEqIGYpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGMgJSBzaXplLCBnLCBmKTsKLSAgICAgICAg
fQotICAgICAgICB2b2lkIHNldEdseXBoRGF0YUZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBHbHlw
aCBnLCBjb25zdCBGb250RGF0YSogZikKLSAgICAgICAgewotICAgICAgICAgICAgbV9nbHlwaHNb
aW5kZXhdLmdseXBoID0gZzsKLSAgICAgICAgICAgIG1fZ2x5cGhzW2luZGV4XS5mb250RGF0YSA9
IGY7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgR2x5cGhQYWdlKiBsb2NhdGVQYWdlKHVuc2ln
bmVkIHBhZ2UsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSk7Ci0gICAgYm9vbCBmaWxsUGFnZShH
bHlwaFBhZ2UqLCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgs
IGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSk7Ci0KLSAgICBib29sIG1fZmlsbGVkUHJpbWFyeVBh
Z2U7Ci0gICAgR2x5cGhQYWdlIG1fcHJpbWFyeVBhZ2U7IC8vIFdlIG9wdGltaXplIGZvciB0aGUg
cGFnZSB0aGF0IGNvbnRhaW5zIExhdGluLTEuCi0gICAgSGFzaE1hcDxpbnQsIEdseXBoUGFnZSo+
KiBtX3BhZ2VzOwotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vR2x5
cGhQYWdlVHJlZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhQ
YWdlVHJlZU5vZGUuY3BwCShyZXZpc2lvbiAxODg2MykJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9H
bHlwaE1hcC5jcHA6MTg4NjMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0dseXBoUGFnZVRyZWVOb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhNYXAuaCIKKworI2luY2x1ZGUgIkNoYXJh
Y3Rlck5hbWVzLmgiCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29k
ZS9Vbmljb2RlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR2x5cGhEYXRhIEdseXBoTWFw
OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBGb250RGF0YSogZm9udERh
dGEpCit7CisgICAgdW5zaWduZWQgcGFnZU51bWJlciA9IChjIC8gR2x5cGhQYWdlOjpzaXplKTsK
KyAgICBHbHlwaFBhZ2UqIHBhZ2UgPSBsb2NhdGVQYWdlKHBhZ2VOdW1iZXIsIGZvbnREYXRhKTsK
KyAgICBpZiAocGFnZSkKKyAgICAgICAgcmV0dXJuIHBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3Rl
cihjKTsKKyAgICBHbHlwaERhdGEgZGF0YSA9IHsgMCwgZm9udERhdGEgfTsKKyAgICByZXR1cm4g
ZGF0YTsKK30KKwordm9pZCBHbHlwaE1hcDo6c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFy
MzIgYywgR2x5cGggZ2x5cGgsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAgICB1bnNp
Z25lZCBwYWdlTnVtYmVyID0gKGMgLyBHbHlwaFBhZ2U6OnNpemUpOworICAgIEdseXBoUGFnZSog
cGFnZSA9IGxvY2F0ZVBhZ2UocGFnZU51bWJlciwgZm9udERhdGEpOworICAgIGlmIChwYWdlKQor
ICAgICAgICBwYWdlLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGgsIGZvbnREYXRh
KTsKK30KKworaW5saW5lIEdseXBoTWFwOjpHbHlwaFBhZ2UqIEdseXBoTWFwOjpsb2NhdGVQYWdl
KHVuc2lnbmVkIHBhZ2VOdW1iZXIsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAgICBH
bHlwaFBhZ2UqIHBhZ2U7CisgICAgaWYgKHBhZ2VOdW1iZXIgPT0gMCkgeworICAgICAgICBpZiAo
bV9maWxsZWRQcmltYXJ5UGFnZSkKKyAgICAgICAgICAgIHJldHVybiAmbV9wcmltYXJ5UGFnZTsK
KyAgICAgICAgcGFnZSA9ICZtX3ByaW1hcnlQYWdlOyAKKyAgICB9IGVsc2UgeworICAgICAgICBp
ZiAobV9wYWdlcykgeworICAgICAgICAgICAgR2x5cGhQYWdlKiByZXN1bHQgPSBtX3BhZ2VzLT5n
ZXQocGFnZU51bWJlcik7CisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgcGFnZSA9IG5ldyBHbHlwaFBhZ2U7
CisgICAgfQorICAgICAgCisgICAgdW5zaWduZWQgc3RhcnQgPSBwYWdlTnVtYmVyICogR2x5cGhQ
YWdlOjpzaXplOworICAgIFVDaGFyIGJ1ZmZlcltHbHlwaFBhZ2U6OnNpemUgKiAyICsgMl07Cisg
ICAgdW5zaWduZWQgYnVmZmVyTGVuZ3RoOworICAgIHVuc2lnbmVkIGk7CisKKyAgICAvLyBGaWxs
IGluIGEgYnVmZmVyIHdpdGggdGhlIGVudGlyZSAicGFnZSIgb2YgY2hhcmFjdGVycyB0aGF0IHdl
IHdhbnQgdG8gbG9vayB1cCBnbHlwaHMgZm9yLgorICAgIGlmIChzdGFydCA8IDB4MTAwMDApIHsK
KyAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplOworICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspCisgICAgICAgICAgICBidWZmZXJbaV0gPSBz
dGFydCArIGk7CisKKyAgICAgICAgaWYgKHN0YXJ0ID09IDApIHsKKyAgICAgICAgICAgIC8vIENv
bnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5kZXIgYXQgYWxsLgorICAgICAgICAgICAgZm9y
IChpID0gMDsgaSA8IDB4MjA7ICsraSkKKyAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJv
V2lkdGhTcGFjZTsKKyAgICAgICAgICAgIGZvciAoaSA9IDB4N0Y7IGkgPCAweEEwOyBpKyspCisg
ICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRoU3BhY2U7CisKKyAgICAgICAgICAg
IC8vIFxuLCBcdCwgYW5kIG5vbmJyZWFraW5nIHNwYWNlIG11c3QgcmVuZGVyIGFzIGEgc3BhY2Uu
CisgICAgICAgICAgICBidWZmZXJbKGludCknXG4nXSA9ICcgJzsKKyAgICAgICAgICAgIGJ1ZmZl
clsoaW50KSdcdCddID0gJyAnOworICAgICAgICAgICAgYnVmZmVyW25vQnJlYWtTcGFjZV0gPSAn
ICc7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBidWZmZXJMZW5ndGggPSBHbHlw
aFBhZ2U6OnNpemUgKiAyOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXpl
OyBpKyspIHsKKyAgICAgICAgICAgIGludCBjID0gaSArIHN0YXJ0OworICAgICAgICAgICAgYnVm
ZmVyW2kgKiAyXSA9IFUxNl9MRUFEKGMpOworICAgICAgICAgICAgYnVmZmVyW2kgKiAyICsgMV0g
PSBVMTZfVFJBSUwoYyk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gTm93IHRoYXQg
d2UgaGF2ZSBhIGJ1ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMsIHdlIHdhbnQgdG8gZ2V0IGJhY2sg
YW4gYXJyYXkKKyAgICAvLyBvZiBnbHlwaCBpbmRpY2VzLiAgVGhpcyBwYXJ0IGludm9sdmVzIGNh
bGxpbmcgaW50byB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgCisgICAgLy8gcm91dGluZSBvZiBvdXIg
Z2x5cGggbWFwIGZvciBhY3R1YWxseSBmaWxsaW5nIGluIHRoZSBwYWdlIHdpdGggdGhlIGdseXBo
cy4KKyAgICBib29sIHN1Y2Nlc3MgPSBmaWxsUGFnZShwYWdlLCBidWZmZXIsIGJ1ZmZlckxlbmd0
aCwgZm9udERhdGEpOworICAgIGlmICghc3VjY2VzcykgeworICAgICAgICBpZiAocGFnZU51bWJl
ciAhPSAwKQorICAgICAgICAgICAgZGVsZXRlIHBhZ2U7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICAKKyAgICBpZiAocGFnZU51bWJlciA9PSAwKQorICAgICAgICBtX2ZpbGxlZFByaW1h
cnlQYWdlID0gdHJ1ZTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFtX3BhZ2VzKQorICAgICAg
ICAgICAgbV9wYWdlcyA9IG5ldyBIYXNoTWFwPGludCwgR2x5cGhQYWdlKj47CisgICAgICAgIG1f
cGFnZXMtPnNldChwYWdlTnVtYmVyLCBwYWdlKTsKKyAgICB9CisKKyAgICByZXR1cm4gcGFnZTsK
K30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAJKHJldmlz
aW9uIDE4ODYzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiR2x5cGhNYXAuaCIKKyNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgog
CiAjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKICNpbmNsdWRlICJGb250RGF0YS5oIgpAQCAt
MzUsOTEgKzM1LDE0NSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUdseXBoRGF0YSBHbHlw
aE1hcDo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3QgRm9udERhdGEqIGZv
bnREYXRhKQorR2x5cGhQYWdlVHJlZU5vZGUqIEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290KHVu
c2lnbmVkIHBhZ2VOdW1iZXIpCiB7Ci0gICAgdW5zaWduZWQgcGFnZU51bWJlciA9IChjIC8gR2x5
cGhQYWdlOjpzaXplKTsKLSAgICBHbHlwaFBhZ2UqIHBhZ2UgPSBsb2NhdGVQYWdlKHBhZ2VOdW1i
ZXIsIGZvbnREYXRhKTsKLSAgICBpZiAocGFnZSkKLSAgICAgICAgcmV0dXJuIHBhZ2UtPmdseXBo
RGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICBHbHlwaERhdGEgZGF0YSA9IHsgMCwgZm9udERhdGEg
fTsKLSAgICByZXR1cm4gZGF0YTsKKyAgICBzdGF0aWMgSGFzaE1hcDxpbnQsIEdseXBoUGFnZVRy
ZWVOb2RlKj4gcm9vdHM7CisgICAgc3RhdGljIEdseXBoUGFnZVRyZWVOb2RlKiBwYWdlWmVyb1Jv
b3Q7CisgICAgR2x5cGhQYWdlVHJlZU5vZGUqIG5vZGUgPSBwYWdlTnVtYmVyID8gcm9vdHMuZ2V0
KHBhZ2VOdW1iZXIpIDogcGFnZVplcm9Sb290OworICAgIGlmICghbm9kZSkgeworICAgICAgICBu
b2RlID0gbmV3IEdseXBoUGFnZVRyZWVOb2RlKCk7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBu
b2RlLT5tX3BhZ2VOdW1iZXIgPSBwYWdlTnVtYmVyOworI2VuZGlmCisgICAgICAgIGlmIChwYWdl
TnVtYmVyKQorICAgICAgICAgICAgcm9vdHMuc2V0KHBhZ2VOdW1iZXIsIG5vZGUpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBwYWdlWmVyb1Jvb3QgPSBub2RlOworICAgIH0KKyAgICByZXR1
cm4gbm9kZTsKIH0KIAotdm9pZCBHbHlwaE1hcDo6c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVD
aGFyMzIgYywgR2x5cGggZ2x5cGgsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKK3ZvaWQgR2x5
cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSwg
dW5zaWduZWQgcGFnZU51bWJlcikKIHsKLSAgICB1bnNpZ25lZCBwYWdlTnVtYmVyID0gKGMgLyBH
bHlwaFBhZ2U6OnNpemUpOwotICAgIEdseXBoUGFnZSogcGFnZSA9IGxvY2F0ZVBhZ2UocGFnZU51
bWJlciwgZm9udERhdGEpOwotICAgIGlmIChwYWdlKQotICAgICAgICBwYWdlLT5zZXRHbHlwaERh
dGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGgsIGZvbnREYXRhKTsKLX0KKyAgICBBU1NFUlQoIW1fcGFn
ZSk7CiAKLWlubGluZSBHbHlwaE1hcDo6R2x5cGhQYWdlKiBHbHlwaE1hcDo6bG9jYXRlUGFnZSh1
bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpCi17Ci0gICAgR2x5
cGhQYWdlKiBwYWdlOwotICAgIGlmIChwYWdlTnVtYmVyID09IDApIHsKLSAgICAgICAgaWYgKG1f
ZmlsbGVkUHJpbWFyeVBhZ2UpCi0gICAgICAgICAgICByZXR1cm4gJm1fcHJpbWFyeVBhZ2U7Ci0g
ICAgICAgIHBhZ2UgPSAmbV9wcmltYXJ5UGFnZTsgCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KG1fcGFnZXMpIHsKLSAgICAgICAgICAgIEdseXBoUGFnZSogcmVzdWx0ID0gbV9wYWdlcy0+Z2V0
KHBhZ2VOdW1iZXIpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIHBhZ2UgPSBuZXcgR2x5cGhQYWdlOwot
ICAgIH0KLSAgICAgIAotICAgIHVuc2lnbmVkIHN0YXJ0ID0gcGFnZU51bWJlciAqIEdseXBoUGFn
ZTo6c2l6ZTsKLSAgICBVQ2hhciBidWZmZXJbR2x5cGhQYWdlOjpzaXplICogMiArIDJdOwotICAg
IHVuc2lnbmVkIGJ1ZmZlckxlbmd0aDsKLSAgICB1bnNpZ25lZCBpOwotCi0gICAgLy8gRmlsbCBp
biBhIGJ1ZmZlciB3aXRoIHRoZSBlbnRpcmUgInBhZ2UiIG9mIGNoYXJhY3RlcnMgdGhhdCB3ZSB3
YW50IHRvIGxvb2sgdXAgZ2x5cGhzIGZvci4KLSAgICBpZiAoc3RhcnQgPCAweDEwMDAwKSB7Ci0g
ICAgICAgIGJ1ZmZlckxlbmd0aCA9IEdseXBoUGFnZTo6c2l6ZTsKLSAgICAgICAgZm9yIChpID0g
MDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKQotICAgICAgICAgICAgYnVmZmVyW2ldID0gc3Rh
cnQgKyBpOwotCi0gICAgICAgIGlmIChzdGFydCA9PSAwKSB7Ci0gICAgICAgICAgICAvLyBDb250
cm9sIGNoYXJhY3RlcnMgbXVzdCBub3QgcmVuZGVyIGF0IGFsbC4KLSAgICAgICAgICAgIGZvciAo
aSA9IDA7IGkgPCAweDIwOyArK2kpCi0gICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVyb1dp
ZHRoU3BhY2U7Ci0gICAgICAgICAgICBmb3IgKGkgPSAweDdGOyBpIDwgMHhBMDsgaSsrKQotICAg
ICAgICAgICAgICAgIGJ1ZmZlcltpXSA9IHplcm9XaWR0aFNwYWNlOwotCi0gICAgICAgICAgICAv
LyBcbiwgXHQsIGFuZCBub25icmVha2luZyBzcGFjZSBtdXN0IHJlbmRlciBhcyBhIHNwYWNlLgot
ICAgICAgICAgICAgYnVmZmVyWyhpbnQpJ1xuJ10gPSAnICc7Ci0gICAgICAgICAgICBidWZmZXJb
KGludCknXHQnXSA9ICcgJzsKLSAgICAgICAgICAgIGJ1ZmZlcltub0JyZWFrU3BhY2VdID0gJyAn
OworICAgIEdseXBoUGFnZSogcGFyZW50UGFnZSA9IG1fcGFyZW50LT5tX3BhZ2U7CisKKyAgICBp
ZiAoZm9udERhdGEpIHsKKyAgICAgICAgaWYgKG1fbGV2ZWwgPT0gMSkgeworICAgICAgICAgICAg
Ly8gQ2hpbGRyZW4gb2YgdGhlIHJvb3QgaG9sZCBwdXJlIHBhZ2VzLgorICAgICAgICAgICAgdW5z
aWduZWQgc3RhcnQgPSBwYWdlTnVtYmVyICogR2x5cGhQYWdlOjpzaXplOworICAgICAgICAgICAg
VUNoYXIgYnVmZmVyW0dseXBoUGFnZTo6c2l6ZSAqIDIgKyAyXTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGJ1ZmZlckxlbmd0aDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGk7CisKKyAgICAgICAgICAg
IC8vIEZpbGwgaW4gYSBidWZmZXIgd2l0aCB0aGUgZW50aXJlICJwYWdlIiBvZiBjaGFyYWN0ZXJz
IHRoYXQgd2Ugd2FudCB0byBsb29rIHVwIGdseXBocyBmb3IuCisgICAgICAgICAgICBpZiAoc3Rh
cnQgPCAweDEwMDAwKSB7CisgICAgICAgICAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdl
OjpzaXplOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7
IGkrKykKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gc3RhcnQgKyBpOworCisgICAg
ICAgICAgICAgICAgaWYgKHN0YXJ0ID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ29u
dHJvbCBjaGFyYWN0ZXJzIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCisgICAgICAgICAgICAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCAweDIwOyArK2kpCisgICAgICAgICAgICAgICAgICAgICAgICBi
dWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0g
MHg3RjsgaSA8IDB4QTA7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9
IHplcm9XaWR0aFNwYWNlOworCisgICAgICAgICAgICAgICAgICAgIC8vIFxuLCBcdCwgYW5kIG5v
bmJyZWFraW5nIHNwYWNlIG11c3QgcmVuZGVyIGFzIGEgc3BhY2UuCisgICAgICAgICAgICAgICAg
ICAgIGJ1ZmZlclsoaW50KSdcbiddID0gJyAnOworICAgICAgICAgICAgICAgICAgICBidWZmZXJb
KGludCknXHQnXSA9ICcgJzsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyW25vQnJlYWtTcGFj
ZV0gPSAnICc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBidWZmZXJMZW5ndGggPSBHbHlwaFBhZ2U6OnNpemUgKiAyOworICAgICAgICAg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICBpbnQgYyA9IGkgKyBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVy
W2kgKiAyXSA9IFUxNl9MRUFEKGMpOworICAgICAgICAgICAgICAgICAgICBidWZmZXJbaSAqIDIg
KyAxXSA9IFUxNl9UUkFJTChjKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1fcGFnZSA9IG5ldyBHbHlwaFBhZ2U7CisKKyAgICAg
ICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBidWZmZXIgZnVsbCBvZiBjaGFyYWN0ZXJzLCB3
ZSB3YW50IHRvIGdldCBiYWNrIGFuIGFycmF5CisgICAgICAgICAgICAvLyBvZiBnbHlwaCBpbmRp
Y2VzLiAgVGhpcyBwYXJ0IGludm9sdmVzIGNhbGxpbmcgaW50byB0aGUgcGxhdGZvcm0tc3BlY2lm
aWMgCisgICAgICAgICAgICAvLyByb3V0aW5lIG9mIG91ciBnbHlwaCBtYXAgZm9yIGFjdHVhbGx5
IGZpbGxpbmcgaW4gdGhlIHBhZ2Ugd2l0aCB0aGUgZ2x5cGhzLgorICAgICAgICAgICAgLy8gU3Vj
Y2VzcyBpcyBub3QgZ3VhcmFudGVlZC4gRm9yIGV4YW1wbGUsIFRpbWVzIGZhaWxzIHRvIGZpbGwg
cGFnZSAyNjAsIGdpdmluZyBnbHlwaCBkYXRhCisgICAgICAgICAgICAvLyBmb3Igb25seSAxMjgg
b3V0IG9mIDI1NiBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgYm9vbCBoYXZlR2x5cGhzID0gbV9w
YWdlLT5maWxsKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSk7CisKKyAgICAgICAgICAg
IGlmICghaGF2ZUdseXBocykgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BhZ2U7CisgICAg
ICAgICAgICAgICAgbV9wYWdlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIEdldCB0aGUgcHVyZSBwYWdlIGZvciB0aGUgZmFsbGJhY2sgZm9udC4K
KyAgICAgICAgICAgIEdseXBoUGFnZSogZmFsbGJhY2tQYWdlID0gZ2V0Um9vdENoaWxkKGZvbnRE
YXRhLCBwYWdlTnVtYmVyKS0+cGFnZSgpOworICAgICAgICAgICAgaWYgKCFwYXJlbnRQYWdlKQor
ICAgICAgICAgICAgICAgIG1fcGFnZSA9IGZhbGxiYWNrUGFnZTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKCFmYWxsYmFja1BhZ2UpIHsKKyAgICAgICAgICAgICAgICBtX3BhZ2UgPSBwYXJlbnRQYWdl
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX3BhZ2UgPSBuZXcgR2x5
cGhQYWdlOworCisgICAgICAgICAgICAgICAgLy8gT3ZlcmxheSB0aGUgcGFyZW50IHBhZ2Ugb24g
dGhlIGZhbGxiYWNrIHBhZ2UuIENoZWNrIGlmIHRoZSBmYWxsYmFjayBmb250CisgICAgICAgICAg
ICAgICAgLy8gaGFzIGFkZGVkIGFueXRoaW5nLgorICAgICAgICAgICAgICAgIGJvb2wgbmV3R2x5
cGhzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEds
eXBoUGFnZTo6c2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRQYWdl
LT5tX2dseXBoc1tpXS5nbHlwaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFnZS0+bV9n
bHlwaHNbaV0gPSBwYXJlbnRQYWdlLT5tX2dseXBoc1tpXTsKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSAgaWYgKGZhbGxiYWNrUGFnZS0+bV9nbHlwaHNbaV0uZ2x5cGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fcGFnZS0+bV9nbHlwaHNbaV0gPSBmYWxsYmFja1BhZ2UtPm1fZ2x5cGhz
W2ldOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3R2x5cGhzID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdseXBo
RGF0YSBkYXRhID0geyAwLCAwIH07CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BhZ2UtPm1f
Z2x5cGhzW2ldID0gZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGlmICghbmV3R2x5cGhzKSB7CisgICAgICAgICAgICAgICAg
ICAgIGRlbGV0ZSBtX3BhZ2U7CisgICAgICAgICAgICAgICAgICAgIG1fcGFnZSA9IHBhcmVudFBh
Z2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplICogMjsKLSAgICAg
ICAgZm9yIChpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBp
bnQgYyA9IGkgKyBzdGFydDsKLSAgICAgICAgICAgIGJ1ZmZlcltpICogMl0gPSBVMTZfTEVBRChj
KTsKLSAgICAgICAgICAgIGJ1ZmZlcltpICogMiArIDFdID0gVTE2X1RSQUlMKGMpOworICAgICAg
ICBtX3BhZ2UgPSBuZXcgR2x5cGhQYWdlOworICAgICAgICAvLyBTeXN0ZW0gZmFsbGJhY2suIElu
aXRpYWxpemVkIHdpdGggdGhlIHBhcmVudCdzIHBhZ2UgaGVyZSwgYXMgaW5kaXZpZHVhbAorICAg
ICAgICAvLyBlbnRyaWVzIG1heSB1c2UgZGlmZmVyZW50IGZvbnRzIGRlcGVuZGluZyBvbiBjaGFy
YWN0ZXIuCisgICAgICAgIGlmIChwYXJlbnRQYWdlKQorICAgICAgICAgICAgbWVtY3B5KG1fcGFn
ZS0+bV9nbHlwaHMsIHBhcmVudFBhZ2UtPm1fZ2x5cGhzLCBHbHlwaFBhZ2U6OnNpemUgKiBzaXpl
b2YobV9wYWdlLT5tX2dseXBoc1swXSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNv
bnN0IEdseXBoRGF0YSBkYXRhID0geyAwLCAwIH07CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspCisgICAgICAgICAgICAgICAgbV9wYWdl
LT5tX2dseXBoc1tpXSA9IGRhdGE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgLy8gTm93
IHRoYXQgd2UgaGF2ZSBhIGJ1ZmZlciBmdWxsIG9mIGNoYXJhY3RlcnMsIHdlIHdhbnQgdG8gZ2V0
IGJhY2sgYW4gYXJyYXkKLSAgICAvLyBvZiBnbHlwaCBpbmRpY2VzLiAgVGhpcyBwYXJ0IGludm9s
dmVzIGNhbGxpbmcgaW50byB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgCi0gICAgLy8gcm91dGluZSBv
ZiBvdXIgZ2x5cGggbWFwIGZvciBhY3R1YWxseSBmaWxsaW5nIGluIHRoZSBwYWdlIHdpdGggdGhl
IGdseXBocy4KLSAgICBib29sIHN1Y2Nlc3MgPSBmaWxsUGFnZShwYWdlLCBidWZmZXIsIGJ1ZmZl
ckxlbmd0aCwgZm9udERhdGEpOwotICAgIGlmICghc3VjY2VzcykgewotICAgICAgICBpZiAocGFn
ZU51bWJlciAhPSAwKQotICAgICAgICAgICAgZGVsZXRlIHBhZ2U7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLSAgICAKLSAgICBpZiAocGFnZU51bWJlciA9PSAwKQotICAgICAgICBtX2ZpbGxl
ZFByaW1hcnlQYWdlID0gdHJ1ZTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFtX3BhZ2VzKQot
ICAgICAgICAgICAgbV9wYWdlcyA9IG5ldyBIYXNoTWFwPGludCwgR2x5cGhQYWdlKj47Ci0gICAg
ICAgIG1fcGFnZXMtPnNldChwYWdlTnVtYmVyLCBwYWdlKTsKLSAgICB9Cit9CiAKLSAgICByZXR1
cm4gcGFnZTsKK0dseXBoUGFnZVRyZWVOb2RlKiBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Q2hpbGQo
Y29uc3QgRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBwYWdlTnVtYmVyKQoreworICAgIEFT
U0VSVChmb250RGF0YSB8fCAhbV9pc1N5c3RlbUZhbGxiYWNrKTsKKyAgICBBU1NFUlQocGFnZU51
bWJlciA9PSBtX3BhZ2VOdW1iZXIpOworCisgICAgR2x5cGhQYWdlVHJlZU5vZGUqIGNoaWxkID0g
Zm9udERhdGEgPyBtX2NoaWxkcmVuLmdldChmb250RGF0YSkgOiBtX3N5c3RlbUZhbGxiYWNrQ2hp
bGQ7CisgICAgaWYgKCFjaGlsZCkgeworICAgICAgICBjaGlsZCA9IG5ldyBHbHlwaFBhZ2VUcmVl
Tm9kZTsKKyAgICAgICAgY2hpbGQtPm1fcGFyZW50ID0gdGhpczsKKyAgICAgICAgY2hpbGQtPm1f
bGV2ZWwgPSBtX2xldmVsICsgMTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGNoaWxkLT5tX3Bh
Z2VOdW1iZXIgPSBtX3BhZ2VOdW1iZXI7CisjZW5kaWYKKyAgICAgICAgaWYgKGZvbnREYXRhKQor
ICAgICAgICAgICAgbV9jaGlsZHJlbi5zZXQoZm9udERhdGEsIGNoaWxkKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBtX3N5c3RlbUZhbGxiYWNrQ2hpbGQgPSBjaGlsZDsKKyAgICAgICAg
ICAgIGNoaWxkLT5tX2lzU3lzdGVtRmFsbGJhY2sgPSB0cnVlOworICAgICAgICB9CisgICAgICAg
IGNoaWxkLT5pbml0aWFsaXplUGFnZShmb250RGF0YSwgcGFnZU51bWJlcik7CisgICAgfQorICAg
IHJldHVybiBjaGlsZDsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9HbHlwaFBhZ2VU
cmVlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhQYWdlVHJlZU5v
ZGUuaAkocmV2aXNpb24gMTg4NjMpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhNYXAuaDox
ODg2MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhQYWdlVHJlZU5vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR0xZUEhfTUFQX0gK
KyNkZWZpbmUgR0xZUEhfTUFQX0gKKworI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnREYXRhOworCit0eXBlZGVmIHVuc2ln
bmVkIHNob3J0IEdseXBoOworCitzdHJ1Y3QgR2x5cGhEYXRhIHsgICAgCisgICAgR2x5cGggZ2x5
cGg7CisgICAgY29uc3QgRm9udERhdGEqIGZvbnREYXRhOworfTsKKworY2xhc3MgR2x5cGhNYXAg
OiBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgR2x5cGhNYXAoKSA6IG1fZmlsbGVkUHJpbWFy
eVBhZ2UoZmFsc2UpLCBtX3BhZ2VzKDApIHt9CisgICAgfkdseXBoTWFwKCkgeyBpZiAobV9wYWdl
cykgeyBkZWxldGVBbGxWYWx1ZXMoKm1fcGFnZXMpOyBkZWxldGUgbV9wYWdlczsgfSB9CisKKyAg
ICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZvbnREYXRh
Kik7CisgICAgdm9pZCBzZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgR2x5cGgsIGNv
bnN0IEZvbnREYXRhKik7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IEdseXBoUGFnZSB7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDI1NjsgLy8gQ292ZXJzIExhdGluLTEgaW4g
YSBzaW5nbGUgcGFnZS4KKyAgICAgICAgR2x5cGhEYXRhIG1fZ2x5cGhzW3NpemVdOworCisgICAg
ICAgIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29u
c3QgeyByZXR1cm4gbV9nbHlwaHNbYyAlIHNpemVdOyB9CisgICAgICAgIHZvaWQgc2V0R2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgR2x5cGggZywgY29uc3QgRm9udERhdGEqIGYpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGMgJSBzaXplLCBnLCBm
KTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNldEdseXBoRGF0YUZvckluZGV4KHVuc2lnbmVk
IGluZGV4LCBHbHlwaCBnLCBjb25zdCBGb250RGF0YSogZikKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9nbHlwaHNbaW5kZXhdLmdseXBoID0gZzsKKyAgICAgICAgICAgIG1fZ2x5cGhzW2luZGV4
XS5mb250RGF0YSA9IGY7CisgICAgICAgIH0KKyAgICB9OworCisgICAgR2x5cGhQYWdlKiBsb2Nh
dGVQYWdlKHVuc2lnbmVkIHBhZ2UsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSk7CisgICAgYm9v
bCBmaWxsUGFnZShHbHlwaFBhZ2UqLCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNpZ25lZCBi
dWZmZXJMZW5ndGgsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSk7CisKKyAgICBib29sIG1fZmls
bGVkUHJpbWFyeVBhZ2U7CisgICAgR2x5cGhQYWdlIG1fcHJpbWFyeVBhZ2U7IC8vIFdlIG9wdGlt
aXplIGZvciB0aGUgcGFnZSB0aGF0IGNvbnRhaW5zIExhdGluLTEuCisgICAgSGFzaE1hcDxpbnQs
IEdseXBoUGFnZSo+KiBtX3BhZ2VzOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vR2x5cGhQYWdlVHJlZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL0dseXBoUGFnZVRyZWVOb2RlLmgJKHJldmlzaW9uIDE4ODYzKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9HbHlwaFBhZ2VUcmVlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBA
CiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgR0xZUEhfTUFQX0gKLSNkZWZpbmUgR0xZUEhf
TUFQX0gKKyNpZm5kZWYgR2x5cGhQYWdlVHJlZU5vZGVfaAorI2RlZmluZSBHbHlwaFBhZ2VUcmVl
Tm9kZV9oCiAKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CkBAIC00NCwzOSArNDQsNjUgQEAgc3RydWN0IEdseXBoRGF0YSB7ICAg
IAogICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YTsKIH07CiAKLWNsYXNzIEdseXBoTWFwIDog
Tm9uY29weWFibGUgeworc3RydWN0IEdseXBoUGFnZSB7CisgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBzaXplID0gMjU2OyAvLyBDb3ZlcnMgTGF0aW4tMSBpbiBhIHNpbmdsZSBwYWdlLgorICAgIEds
eXBoRGF0YSBtX2dseXBoc1tzaXplXTsKKworICAgIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QgeyByZXR1cm4gbV9nbHlwaHNbYyAlIHNpemVd
OyB9CisgICAgdm9pZCBzZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBHbHlwaCBn
LCBjb25zdCBGb250RGF0YSogZikKKyAgICB7CisgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4
KGMgJSBzaXplLCBnLCBmKTsKKyAgICB9CisgICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1
bnNpZ25lZCBpbmRleCwgR2x5cGggZywgY29uc3QgRm9udERhdGEqIGYpCisgICAgeworICAgICAg
ICBtX2dseXBoc1tpbmRleF0uZ2x5cGggPSBnOworICAgICAgICBtX2dseXBoc1tpbmRleF0uZm9u
dERhdGEgPSBmOworICAgIH0KKyAgICAvLyBJbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCisg
ICAgYm9vbCBmaWxsKFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0
aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKTsKK307CisKK2NsYXNzIEdseXBoUGFnZVRyZWVO
b2RlIHsKIHB1YmxpYzoKLSAgICBHbHlwaE1hcCgpIDogbV9maWxsZWRQcmltYXJ5UGFnZShmYWxz
ZSksIG1fcGFnZXMoMCkge30KLSAgICB+R2x5cGhNYXAoKSB7IGlmIChtX3BhZ2VzKSB7IGRlbGV0
ZUFsbFZhbHVlcygqbV9wYWdlcyk7IGRlbGV0ZSBtX3BhZ2VzOyB9IH0KKyAgICBHbHlwaFBhZ2VU
cmVlTm9kZSgpCisgICAgICAgIDogbV9wYXJlbnQoMCkKKyAgICAgICAgLCBtX3BhZ2UoMCkKKyAg
ICAgICAgLCBtX2xldmVsKDApCisgICAgICAgICwgbV9pc1N5c3RlbUZhbGxiYWNrKGZhbHNlKQor
ICAgICAgICAsIG1fc3lzdGVtRmFsbGJhY2tDaGlsZCgwKQorI2lmbmRlZiBOREVCVUcKKyAgICAg
ICAgLCBtX3BhZ2VOdW1iZXIoMCkKKyNlbmRpZgorICAgIHsKKyAgICB9CiAKLSAgICBHbHlwaERh
dGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZvbnREYXRhKik7Ci0gICAg
dm9pZCBzZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgR2x5cGgsIGNvbnN0IEZvbnRE
YXRhKik7CisgICAgc3RhdGljIEdseXBoUGFnZVRyZWVOb2RlKiBnZXRSb290KHVuc2lnbmVkIHBh
Z2VOdW1iZXIpOworICAgIHN0YXRpYyBHbHlwaFBhZ2VUcmVlTm9kZSogZ2V0Um9vdENoaWxkKGNv
bnN0IEZvbnREYXRhKiBmb250RGF0YSwgdW5zaWduZWQgcGFnZU51bWJlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnZXRSb290KHBhZ2VOdW1iZXIpLT5nZXRDaGlsZChmb250RGF0YSwgcGFnZU51
bWJlcik7CisgICAgfQorCisgICAgR2x5cGhQYWdlVHJlZU5vZGUqIHBhcmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcGFyZW50OyB9CisgICAgR2x5cGhQYWdlVHJlZU5vZGUqIGdldENoaWxkKGNvbnN0
IEZvbnREYXRhKiwgdW5zaWduZWQgcGFnZU51bWJlcik7CisKKyAgICBHbHlwaFBhZ2UqIHBhZ2Uo
KSBjb25zdCB7IHJldHVybiBtX3BhZ2U7IH0KKyAgICB1bnNpZ25lZCBsZXZlbCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGV2ZWw7IH0KKyAgICBib29sIGlzU3lzdGVtRmFsbGJhY2soKSBjb25zdCB7IHJl
dHVybiBtX2lzU3lzdGVtRmFsbGJhY2s7IH0KIAogcHJpdmF0ZToKLSAgICBzdHJ1Y3QgR2x5cGhQ
YWdlIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMjU2OyAvLyBDb3ZlcnMg
TGF0aW4tMSBpbiBhIHNpbmdsZSBwYWdlLgotICAgICAgICBHbHlwaERhdGEgbV9nbHlwaHNbc2l6
ZV07Ci0KLSAgICAgICAgY29uc3QgR2x5cGhEYXRhJiBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNo
YXIzMiBjKSBjb25zdCB7IHJldHVybiBtX2dseXBoc1tjICUgc2l6ZV07IH0KLSAgICAgICAgdm9p
ZCBzZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBHbHlwaCBnLCBjb25zdCBGb250
RGF0YSogZikKLSAgICAgICAgewotICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoYyAl
IHNpemUsIGcsIGYpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5k
ZXgodW5zaWduZWQgaW5kZXgsIEdseXBoIGcsIGNvbnN0IEZvbnREYXRhKiBmKQotICAgICAgICB7
Ci0gICAgICAgICAgICBtX2dseXBoc1tpbmRleF0uZ2x5cGggPSBnOwotICAgICAgICAgICAgbV9n
bHlwaHNbaW5kZXhdLmZvbnREYXRhID0gZjsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBHbHlw
aFBhZ2UqIGxvY2F0ZVBhZ2UodW5zaWduZWQgcGFnZSwgY29uc3QgRm9udERhdGEqIGZvbnREYXRh
KTsKLSAgICBib29sIGZpbGxQYWdlKEdseXBoUGFnZSosIFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIs
IHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKTsKLQotICAg
IGJvb2wgbV9maWxsZWRQcmltYXJ5UGFnZTsKLSAgICBHbHlwaFBhZ2UgbV9wcmltYXJ5UGFnZTsg
Ly8gV2Ugb3B0aW1pemUgZm9yIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgTGF0aW4tMS4KLSAgICBI
YXNoTWFwPGludCwgR2x5cGhQYWdlKj4qIG1fcGFnZXM7CisgICAgdm9pZCBpbml0aWFsaXplUGFn
ZShjb25zdCBGb250RGF0YSosIHVuc2lnbmVkIHBhZ2VOdW1iZXIpOworCisgICAgR2x5cGhQYWdl
VHJlZU5vZGUqIG1fcGFyZW50OworICAgIEdseXBoUGFnZSogbV9wYWdlOworICAgIHVuc2lnbmVk
IG1fbGV2ZWw7CisgICAgYm9vbCBtX2lzU3lzdGVtRmFsbGJhY2s7CisgICAgSGFzaE1hcDxjb25z
dCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVOb2RlKj4gbV9jaGlsZHJlbjsKKyAgICBHbHlwaFBh
Z2VUcmVlTm9kZSogbV9zeXN0ZW1GYWxsYmFja0NoaWxkOworI2lmbmRlZiBOREVCVUcKKyAgICB1
bnNpZ25lZCBtX3BhZ2VOdW1iZXI7CisjZW5kaWYKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gR2x5cGhQYWdlVHJlZU5vZGVfaApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvR2x5cGhNYXBHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL0dseXBoTWFwR2RrLmNwcAkocmV2aXNpb24gMTg4NjYpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9HbHlwaE1hcEdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tIAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhNYXAuaCIKLQotI2luY2x1ZGUgIkZvbnREYXRhLmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBHbHlwaE1hcDo6ZmlsbFBhZ2UoR2x5cGhQ
YWdlKiBwYWdlLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZv
bnREYXRhKiBmb250RGF0YSkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVmZmVy
TGVuZ3RoOyBpKyspCi0gICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckluZGV4KGksIGZvbnRE
YXRhLT5nZXRHbHlwaEluZGV4KGJ1ZmZlcltpXSksIGZvbnREYXRhKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvR2x5cGhQYWdlVHJlZU5vZGVH
ZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0dseXBoUGFnZVRyZWVO
b2RlR2RrLmNwcAkocmV2aXNpb24gMTg4NjMpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ds
eXBoTWFwR2RrLmNwcDoxODg2MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0dseXBoUGFnZVRy
ZWVOb2RlR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5j
b20gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJHbHlwaE1hcC5oIgorCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIEdseXBoTWFwOjpmaWxsUGFnZShHbHlwaFBhZ2UqIHBhZ2UsIFVDaGFy
KiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRh
KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykKKyAg
ICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgZm9udERhdGEtPmdldEdseXBoSW5k
ZXgoYnVmZmVyW2ldKSwgZm9udERhdGEpOworICAgIHJldHVybiB0cnVlOworfQorCit9CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9HbHlwaFBhZ2VUcmVlTm9kZUdkay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvR2x5cGhQYWdlVHJlZU5vZGVHZGsuY3BwCShyZXZp
c2lvbiAxODg2MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0dseXBoUGFnZVRyZWVOb2RlR2Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTYgKzI5LDE2IEBACiAgKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoTWFwLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlVHJl
ZU5vZGUuaCIKIAogI2luY2x1ZGUgIkZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotYm9vbCBHbHlwaE1hcDo6ZmlsbFBhZ2UoR2x5cGhQYWdlKiBwYWdlLCBVQ2hhciogYnVmZmVy
LCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKK2Jvb2wg
R2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29u
c3QgRm9udERhdGEqIGZvbnREYXRhKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
dWZmZXJMZW5ndGg7IGkrKykKLSAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwg
Zm9udERhdGEtPmdldEdseXBoSW5kZXgoYnVmZmVyW2ldKSwgZm9udERhdGEpOworICAgICAgICBz
ZXRHbHlwaERhdGFGb3JJbmRleChpLCBmb250RGF0YS0+Z2V0R2x5cGhJbmRleChidWZmZXJbaV0p
LCBmb250RGF0YSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vbWFjL0ZvbnREYXRhTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFj
L0ZvbnREYXRhTWFjLm1tCShyZXZpc2lvbiAxODg2NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFj
L0ZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBG
b250RGF0YTo6cGxhdGZvcm1Jbml0KCkKICAgICAKICAgICAvLyBNZWFzdXJlIHRoZSBhY3R1YWwg
Y2hhcmFjdGVyICJ4IiwgYmVjYXVzZSBBcHBLaXQgc3ludGhlc2l6ZXMgWCBoZWlnaHQgcmF0aGVy
IHRoYW4gZ2V0dGluZyBpdCBmcm9tIHRoZSBmb250LgogICAgIC8vIFVuZm9ydHVuYXRlbHksIE5T
Rm9udCB3aWxsIHJvdW5kIHRoaXMgZm9yIHVzIHNvIHdlIGRvbid0IHF1aXRlIGdldCB0aGUgcmln
aHQgdmFsdWUuCi0gICAgTlNHbHlwaCB4R2x5cGggPSBtX2NoYXJhY3RlclRvR2x5cGhNYXAuZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKCd4JywgdGhpcykuZ2x5cGg7CisgICAgTlNHbHlwaCB4R2x5cGgg
PSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKHRoaXMsIDApLT5wYWdlKCktPmdseXBo
RGF0YUZvckNoYXJhY3RlcigneCcpLmdseXBoOwogICAgIGlmICh4R2x5cGgpIHsKICAgICAgICAg
TlNSZWN0IHhCb3ggPSBbbV9mb250LmZvbnQgYm91bmRpbmdSZWN0Rm9yR2x5cGg6eEdseXBoXTsK
ICAgICAgICAgLy8gVXNlIHRoZSBtYXhpbXVtIG9mIGVpdGhlciB3aWR0aCBvciBoZWlnaHQgYmVj
YXVzZSAieCIgaXMgbmVhcmx5IHNxdWFyZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRm9u
dE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9Gb250TWFjLm1tCShy
ZXZpc2lvbiAxODg2NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0ZvbnRNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTQyMSw3ICs0MjEsOSBAQCBzdGF0aWMgdm9pZCBkaXNwb3NlQVRTVUxheW91
dFBhcmFtZXRlcnMoCiB9CiAKIEZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9u
dERhdGEsIGJvb2wgaXNQcmludGVyRm9udCkKLTptX2xldHRlclNwYWNpbmcoMCksIG1fd29yZFNw
YWNpbmcoMCkKKyAgICA6IG1fcGFnZVplcm8oMCkKKyAgICAsIG1fbGV0dGVyU3BhY2luZygwKQor
ICAgICwgbV93b3JkU3BhY2luZygwKQogewogICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFVzZVBy
aW50ZXJGb250KGlzUHJpbnRlckZvbnQpOwogICAgIG1fZm9udExpc3QgPSBuZXcgRm9udEZhbGxi
YWNrTGlzdCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvR2x5cGhNYXBNYWMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0dseXBoTWFwTWFjLmNwcAkocmV2aXNp
b24gMTg4NjYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9HbHlwaE1hcE1hYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
IAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
IAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiR2x5cGhNYXAuaCIKLQotI2luY2x1ZGUgIkZvbnREYXRhLmgiCi0jaW5j
bHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2Vy
dmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJv
b2wgR2x5cGhNYXA6OmZpbGxQYWdlKEdseXBoUGFnZSogcGFnZSwgVUNoYXIqIGJ1ZmZlciwgdW5z
aWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpCi17Ci0gICAgLy8g
VXNlIGFuIGFycmF5IG9mIGxvbmcgc28gd2UgZ2V0IGdvb2QgZW5vdWdoIGFsaWdubWVudC4KLSAg
ICBsb25nIGdseXBoVmVjdG9yWyhHTFlQSF9WRUNUT1JfU0laRSArIHNpemVvZihsb25nKSAtIDEp
IC8gc2l6ZW9mKGxvbmcpXTsKLSAgICAKLSAgICBPU1N0YXR1cyBzdGF0dXMgPSB3a0luaXRpYWxp
emVHbHlwaFZlY3RvcihHbHlwaFBhZ2U6OnNpemUsICZnbHlwaFZlY3Rvcik7Ci0gICAgaWYgKHN0
YXR1cyAhPSBub0VycikKLSAgICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBwZXJo
YXBzIGluZGljYXRlcyBhIGJhZCBmb250ISAgSWYgaXQgZG9lcyB0aGUKLSAgICAgICAgLy8gZm9u
dCBzdWJzdGl0dXRpb24gY29kZSB3aWxsIGZpbmQgYW4gYWx0ZXJuYXRlIGZvbnQuCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHdrQ29udmVydENoYXJUb0dseXBocyhmb250RGF0YS0+bV9z
dHlsZUdyb3VwLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgJmdseXBoVmVjdG9yKTsKLQotICAgIHVu
c2lnbmVkIG51bUdseXBocyA9IHdrR2V0R2x5cGhWZWN0b3JOdW1HbHlwaHMoJmdseXBoVmVjdG9y
KTsKLSAgICBpZiAobnVtR2x5cGhzICE9IEdseXBoUGFnZTo6c2l6ZSkgewotICAgICAgICAvLyBU
aGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIHBlcmhhcHMgaW5kaWNhdGVzIGEgYmFkIGZvbnQ/Ci0g
ICAgICAgIC8vIElmIGl0IGRvZXMgaGFwcGVuLCB0aGUgZm9udCBzdWJzdGl0dXRpb24gY29kZSB3
aWxsIGZpbmQgYW4gYWx0ZXJuYXRlIGZvbnQuCi0gICAgICAgIHdrQ2xlYXJHbHlwaFZlY3Rvcigm
Z2x5cGhWZWN0b3IpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQVRTTGF5
b3V0UmVjb3JkKiBnbHlwaFJlY29yZCA9IChBVFNMYXlvdXRSZWNvcmQqKXdrR2V0R2x5cGhWZWN0
b3JGaXJzdFJlY29yZChnbHlwaFZlY3Rvcik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7Ci0gICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvcklu
ZGV4KGksIGdseXBoUmVjb3JkLT5nbHlwaElELCBmb250RGF0YSk7Ci0gICAgICAgIGdseXBoUmVj
b3JkID0gKEFUU0xheW91dFJlY29yZCAqKSgoY2hhciAqKWdseXBoUmVjb3JkICsgd2tHZXRHbHlw
aFZlY3RvclJlY29yZFNpemUoZ2x5cGhWZWN0b3IpKTsKLSAgICB9Ci0gICAgd2tDbGVhckdseXBo
VmVjdG9yKCZnbHlwaFZlY3Rvcik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvR2x5cGhQYWdlVHJlZU5v
ZGVNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0dseXBoUGFnZVRy
ZWVOb2RlTWFjLmNwcAkocmV2aXNpb24gMTg4NjMpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vbWFj
L0dseXBoTWFwTWFjLmNwcDoxODg2MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0dseXBoUGFn
ZVRyZWVOb2RlTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHbHlwaE1hcC5oIgorCisjaW5j
bHVkZSAiRm9udERhdGEuaCIKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisj
aW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBHbHlwaE1hcDo6ZmlsbFBhZ2UoR2x5cGhQYWdlKiBw
YWdlLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnREYXRh
KiBmb250RGF0YSkKK3sKKyAgICAvLyBVc2UgYW4gYXJyYXkgb2YgbG9uZyBzbyB3ZSBnZXQgZ29v
ZCBlbm91Z2ggYWxpZ25tZW50LgorICAgIGxvbmcgZ2x5cGhWZWN0b3JbKEdMWVBIX1ZFQ1RPUl9T
SVpFICsgc2l6ZW9mKGxvbmcpIC0gMSkgLyBzaXplb2YobG9uZyldOworICAgIAorICAgIE9TU3Rh
dHVzIHN0YXR1cyA9IHdrSW5pdGlhbGl6ZUdseXBoVmVjdG9yKEdseXBoUGFnZTo6c2l6ZSwgJmds
eXBoVmVjdG9yKTsKKyAgICBpZiAoc3RhdHVzICE9IG5vRXJyKQorICAgICAgICAvLyBUaGlzIHNo
b3VsZCBuZXZlciBoYXBwZW4sIHBlcmhhcHMgaW5kaWNhdGVzIGEgYmFkIGZvbnQhICBJZiBpdCBk
b2VzIHRoZQorICAgICAgICAvLyBmb250IHN1YnN0aXR1dGlvbiBjb2RlIHdpbGwgZmluZCBhbiBh
bHRlcm5hdGUgZm9udC4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgd2tDb252ZXJ0Q2hh
clRvR2x5cGhzKGZvbnREYXRhLT5tX3N0eWxlR3JvdXAsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCAm
Z2x5cGhWZWN0b3IpOworCisgICAgdW5zaWduZWQgbnVtR2x5cGhzID0gd2tHZXRHbHlwaFZlY3Rv
ck51bUdseXBocygmZ2x5cGhWZWN0b3IpOworICAgIGlmIChudW1HbHlwaHMgIT0gR2x5cGhQYWdl
OjpzaXplKSB7CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgcGVyaGFwcyBp
bmRpY2F0ZXMgYSBiYWQgZm9udD8KKyAgICAgICAgLy8gSWYgaXQgZG9lcyBoYXBwZW4sIHRoZSBm
b250IHN1YnN0aXR1dGlvbiBjb2RlIHdpbGwgZmluZCBhbiBhbHRlcm5hdGUgZm9udC4KKyAgICAg
ICAgd2tDbGVhckdseXBoVmVjdG9yKCZnbHlwaFZlY3Rvcik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBBVFNMYXlvdXRSZWNvcmQqIGdseXBoUmVjb3JkID0gKEFUU0xheW91
dFJlY29yZCopd2tHZXRHbHlwaFZlY3RvckZpcnN0UmVjb3JkKGdseXBoVmVjdG9yKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKKyAgICAgICAg
cGFnZS0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgZ2x5cGhSZWNvcmQtPmdseXBoSUQsIGZvbnRE
YXRhKTsKKyAgICAgICAgZ2x5cGhSZWNvcmQgPSAoQVRTTGF5b3V0UmVjb3JkICopKChjaGFyICop
Z2x5cGhSZWNvcmQgKyB3a0dldEdseXBoVmVjdG9yUmVjb3JkU2l6ZShnbHlwaFZlY3RvcikpOwor
ICAgIH0KKyAgICB3a0NsZWFyR2x5cGhWZWN0b3IoJmdseXBoVmVjdG9yKTsKKworICAgIHJldHVy
biB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL21hYy9HbHlwaFBhZ2VUcmVlTm9kZU1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvR2x5cGhQYWdlVHJlZU5vZGVNYWMuY3BwCShyZXZpc2lvbiAxODg2MykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFjLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNyArMjcsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJHbHlwaE1hcC5oIgorI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCiAKICNpbmNs
dWRlICJGb250RGF0YS5oIgogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKQEAg
LTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEdseXBoTWFwOjpm
aWxsUGFnZShHbHlwaFBhZ2UqIHBhZ2UsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxl
bmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQorYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNo
YXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9udERh
dGEpCiB7CiAgICAgLy8gVXNlIGFuIGFycmF5IG9mIGxvbmcgc28gd2UgZ2V0IGdvb2QgZW5vdWdo
IGFsaWdubWVudC4KICAgICBsb25nIGdseXBoVmVjdG9yWyhHTFlQSF9WRUNUT1JfU0laRSArIHNp
emVvZihsb25nKSAtIDEpIC8gc2l6ZW9mKGxvbmcpXTsKQEAgLTU2LDE0ICs1NiwxOCBAQCBib29s
IEdseXBoTWFwOjpmaWxsUGFnZShHbHlwaFBhZ2UqIHBhZ2UsCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKKyAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKICAgICBBVFNMYXlvdXRS
ZWNvcmQqIGdseXBoUmVjb3JkID0gKEFUU0xheW91dFJlY29yZCopd2tHZXRHbHlwaFZlY3RvckZp
cnN0UmVjb3JkKGdseXBoVmVjdG9yKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5
cGhQYWdlOjpzaXplOyBpKyspIHsKLSAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9ySW5kZXgo
aSwgZ2x5cGhSZWNvcmQtPmdseXBoSUQsIGZvbnREYXRhKTsKKyAgICAgICAgR2x5cGggZ2x5cGgg
PSBnbHlwaFJlY29yZC0+Z2x5cGhJRDsKKyAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwg
Z2x5cGgsIGZvbnREYXRhKTsKKyAgICAgICAgaWYgKCFoYXZlR2x5cGhzICYmIGdseXBoKQorICAg
ICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7CiAgICAgICAgIGdseXBoUmVjb3JkID0gKEFUU0xh
eW91dFJlY29yZCAqKSgoY2hhciAqKWdseXBoUmVjb3JkICsgd2tHZXRHbHlwaFZlY3RvclJlY29y
ZFNpemUoZ2x5cGhWZWN0b3IpKTsKICAgICB9CiAgICAgd2tDbGVhckdseXBoVmVjdG9yKCZnbHlw
aFZlY3Rvcik7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaGF2ZUdseXBoczsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9HbHlw
aE1hcFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0dseXBoTWFwUXQu
Y3BwCShyZXZpc2lvbiAxODg2NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvR2x5cGhNYXBRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAy
MDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA2
IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHbHlwaE1hcC5oIgotCi0jaW5j
bHVkZSAiRm9udERhdGEuaCIKLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+Ci0jaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIEds
eXBoTWFwOjpmaWxsUGFnZShHbHlwaFBhZ2UqIHBhZ2UsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVk
IGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQotewotICAgIGJvb2wgaXNV
dGYxNiA9IGJ1ZmZlckxlbmd0aCAhPSBHbHlwaFBhZ2U6OnNpemU7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKLSAgICAgICAgVUNoYXIzMiBj
aGFyYWN0ZXI7Ci0KLSAgICAgICAgaWYoaXNVdGYxNikgewotICAgICAgICAgICAgVUNoYXIgbGVh
ZCA9IGJ1ZmZlcltpICogMl07Ci0gICAgICAgICAgICBVQ2hhciB0cmFpbCA9IGJ1ZmZlcltpICog
MiArIDFdOwotICAgICAgICAgICAgY2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGxl
YWQsIHRyYWlsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNoYXJhY3RlciA9IGJ1
ZmZlcltpXTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckluZGV4
KGksIGNoYXJhY3RlciwgZm9udERhdGEpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci19Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0ds
eXBoUGFnZVRyZWVOb2RlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQv
R2x5cGhQYWdlVHJlZU5vZGVRdC5jcHAJKHJldmlzaW9uIDE4ODYzKQkoZnJvbSBXZWJDb3JlL3Bs
YXRmb3JtL3F0L0dseXBoTWFwUXQuY3BwOjE4ODYzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9H
bHlwaFBhZ2VUcmVlTm9kZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICoKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkdseXBoTWFwLmgiCisKKyNpbmNsdWRlICJGb250RGF0YS5oIgorI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL1VuaWNvZGUuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2Jvb2wgR2x5cGhNYXA6OmZpbGxQYWdlKEdseXBoUGFnZSogcGFnZSwgVUNo
YXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9udERh
dGEpCit7CisgICAgYm9vbCBpc1V0ZjE2ID0gYnVmZmVyTGVuZ3RoICE9IEdseXBoUGFnZTo6c2l6
ZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykg
eworICAgICAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKKworICAgICAgICBpZihpc1V0ZjE2KSB7Cisg
ICAgICAgICAgICBVQ2hhciBsZWFkID0gYnVmZmVyW2kgKiAyXTsKKyAgICAgICAgICAgIFVDaGFy
IHRyYWlsID0gYnVmZmVyW2kgKiAyICsgMV07CisgICAgICAgICAgICBjaGFyYWN0ZXIgPSBVMTZf
R0VUX1NVUFBMRU1FTlRBUlkobGVhZCwgdHJhaWwpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgY2hhcmFjdGVyID0gYnVmZmVyW2ldOworICAgICAgICB9CisKKyAgICAgICAgcGFnZS0+
c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgY2hhcmFjdGVyLCBmb250RGF0YSk7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vcXQvR2x5cGhQYWdlVHJlZU5vZGVRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9xdC9HbHlwaFBhZ2VUcmVlTm9kZVF0LmNwcAkocmV2aXNpb24gMTg4
NjMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L0dseXBoUGFnZVRyZWVOb2RlUXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkdseXBoTWFwLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKIAog
I2luY2x1ZGUgIkZvbnREYXRhLmgiCiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgpA
QCAtMzYsNyArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgR2x5cGhNYXA6
OmZpbGxQYWdlKEdseXBoUGFnZSogcGFnZSwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVy
TGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpCitib29sIEdseXBoUGFnZTo6ZmlsbChV
Q2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnREYXRhKiBmb250
RGF0YSkKIHsKICAgICBib29sIGlzVXRmMTYgPSBidWZmZXJMZW5ndGggIT0gR2x5cGhQYWdlOjpz
aXplOwogCkBAIC01MSw3ICs1MSw3IEBAIGJvb2wgR2x5cGhNYXA6OmZpbGxQYWdlKEdseXBoUGFn
ZSogcGFnZSwKICAgICAgICAgICAgIGNoYXJhY3RlciA9IGJ1ZmZlcltpXTsKICAgICAgICAgfQog
Ci0gICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckluZGV4KGksIGNoYXJhY3RlciwgZm9udERh
dGEpOworICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpLCBjaGFyYWN0ZXIsIGZvbnREYXRh
KTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2lu
L0dseXBoTWFwV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9HbHlw
aE1hcFdpbi5jcHAJKHJldmlzaW9uIDE4ODY2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vR2x5
cGhNYXBXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoTWFwLmgiCi0jaW5jbHVkZSAi
Rm9udERhdGEuaCIKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlCi17
Ci0KLWJvb2wgR2x5cGhNYXA6OmZpbGxQYWdlKEdseXBoUGFnZSogcGFnZSwgVUNoYXIqIGJ1ZmZl
ciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpCi17Ci0g
ICAgSERDIGRjID0gR2V0REMoKEhXTkQpMCk7Ci0gICAgU2F2ZURDKGRjKTsKLSAgICBTZWxlY3RP
YmplY3QoZGMsIGZvbnREYXRhLT5tX2ZvbnQuaGZvbnQoKSk7Ci0KLSAgICBURVhUTUVUUklDIHRt
OwotICAgIEdldFRleHRNZXRyaWNzKGRjLCAmdG0pOwotICAgIFdPUkQgbG9jYWxHbHlwaEJ1ZmZl
cltHbHlwaFBhZ2U6OnNpemVdOwotICAgIEdldEdseXBoSW5kaWNlcyhkYywgYnVmZmVyLCBidWZm
ZXJMZW5ndGgsIGxvY2FsR2x5cGhCdWZmZXIsIDApOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykKLSAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9y
SW5kZXgoaSwgbG9jYWxHbHlwaEJ1ZmZlcltpXSwgZm9udERhdGEpOwotICAgIFJlc3RvcmVEQyhk
YywgLTEpOwotICAgIFJlbGVhc2VEQygwLCBkYyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9H
bHlwaFBhZ2VUcmVlTm9kZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93
aW4vR2x5cGhQYWdlVHJlZU5vZGVXaW4uY3BwCShyZXZpc2lvbiAxODg2MykJKGZyb20gV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vR2x5cGhNYXBXaW4uY3BwOjE4ODYzKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS93aW4vR2x5cGhQYWdlVHJlZU5vZGVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdseXBo
TWFwLmgiCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlCit7CisKK2Jvb2wgR2x5cGhNYXA6OmZpbGxQYWdlKEdseXBoUGFnZSog
cGFnZSwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0
YSogZm9udERhdGEpCit7CisgICAgSERDIGRjID0gR2V0REMoKEhXTkQpMCk7CisgICAgU2F2ZURD
KGRjKTsKKyAgICBTZWxlY3RPYmplY3QoZGMsIGZvbnREYXRhLT5tX2ZvbnQuaGZvbnQoKSk7CisK
KyAgICBURVhUTUVUUklDIHRtOworICAgIEdldFRleHRNZXRyaWNzKGRjLCAmdG0pOworICAgIFdP
UkQgbG9jYWxHbHlwaEJ1ZmZlcltHbHlwaFBhZ2U6OnNpemVdOworICAgIEdldEdseXBoSW5kaWNl
cyhkYywgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGxvY2FsR2x5cGhCdWZmZXIsIDApOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykKKyAgICAgICAgcGFn
ZS0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgbG9jYWxHbHlwaEJ1ZmZlcltpXSwgZm9udERhdGEp
OworICAgIFJlc3RvcmVEQyhkYywgLTEpOworICAgIFJlbGVhc2VEQygwLCBkYyk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZVdpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS93aW4vR2x5cGhQYWdlVHJlZU5vZGVXaW4uY3BwCShyZXZpc2lvbiAx
ODg2MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0dseXBoUGFnZVRyZWVOb2RlV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsMTQgKzI3LDE1IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkdseXBoTWFwLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUu
aCIKKwogI2luY2x1ZGUgIkZvbnREYXRhLmgiCiAjaW5jbHVkZSA8d2luZG93cy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZQogewogCi1ib29sIEdseXBoTWFwOjpmaWxsUGFnZShHbHlwaFBhZ2UqIHBh
Z2UsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEq
IGZvbnREYXRhKQorYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQg
YnVmZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpCiB7CiAgICAgSERDIGRjID0g
R2V0REMoKEhXTkQpMCk7CiAgICAgU2F2ZURDKGRjKTsKQEAgLTQ1LDcgKzQ2LDcgQEAgYm9vbCBH
bHlwaE1hcDo6ZmlsbFBhZ2UoR2x5cGhQYWdlKiBwYWdlLAogICAgIFdPUkQgbG9jYWxHbHlwaEJ1
ZmZlcltHbHlwaFBhZ2U6OnNpemVdOwogICAgIEdldEdseXBoSW5kaWNlcyhkYywgYnVmZmVyLCBi
dWZmZXJMZW5ndGgsIGxvY2FsR2x5cGhCdWZmZXIsIDApOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykKLSAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRh
Rm9ySW5kZXgoaSwgbG9jYWxHbHlwaEJ1ZmZlcltpXSwgZm9udERhdGEpOworICAgICAgICBzZXRH
bHlwaERhdGFGb3JJbmRleChpLCBsb2NhbEdseXBoQnVmZmVyW2ldLCBmb250RGF0YSk7CiAgICAg
UmVzdG9yZURDKGRjLCAtMSk7CiAgICAgUmVsZWFzZURDKDAsIGRjKTsKICAgICByZXR1cm4gdHJ1
ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12480</attachid>
            <date>2007-01-16 02:49:09 -0800</date>
            <delta_ts>2007-01-18 04:57:22 -0800</delta_ts>
            <desc>Implement trees of fallback glyph pages</desc>
            <filename>6218_r6.patch</filename>
            <type>text/plain</type>
            <size>88168</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTg4ODEpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC05OTcsNyArOTk3LDcgQEAgc2V0KFdlYkNvcmVfU1JDUwogICAgIHBs
YXRmb3JtL0ZvbnREYXRhLmNwcAogICAgIHBsYXRmb3JtL0ZvbnRGYWxsYmFja0xpc3QuY3BwCiAg
ICAgcGxhdGZvcm0vRm9udEZhbWlseS5jcHAKLSAgICBwbGF0Zm9ybS9HbHlwaE1hcC5jcHAKKyAg
ICBwbGF0Zm9ybS9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKICAgICBwbGF0Zm9ybS9HbHlwaFdpZHRo
TWFwLmNwcAogICAgIHBsYXRmb3JtL0tVUkwuY3BwCiAgICAgcGxhdGZvcm0vTG9nZ2luZy5jcHAK
QEAgLTExNjcsNyArMTE2Nyw3IEBAIHNldChXZWJDb3JlX1NSQ1MKICAgICBwbGF0Zm9ybS9xdC9G
b250UXQuY3BwCiAgICAgcGxhdGZvcm0vcXQvRnJhbWVRdENsaWVudC5jcHAKICAgICBwbGF0Zm9y
bS9xdC9GcmFtZVF0LmNwcAotICAgIHBsYXRmb3JtL3F0L0dseXBoTWFwUXQuY3BwCisgICAgcGxh
dGZvcm0vcXQvR2x5cGhQYWdlVHJlZU5vZGVRdC5jcHAKICAgICBwbGF0Zm9ybS9xdC9Mb2FkZXJG
dW5jdGlvbnNRdC5jcHAKICAgICBwbGF0Zm9ybS9xdC9NaW1lVHlwZVJlZ2lzdHJ5UXQuY3BwCiAg
ICAgcGxhdGZvcm0vcXQvUGFnZVF0LmNwcApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODgxKQorKysgV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4OCBAQAorMjAwNy0wMS0xNiAgTWl0
eiBQZXR0ZWwgIDxtaXR6QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgLSBmaXggaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjIxOAorICAgICAgICAgIENTUzE6IFdlYlRleHRSZW5kZXJlciBjYWNoZXMgYW5k
IHJlLXVzZXMgZmFsbGJhY2sgcmVuZGVyZXJzIHRoYXQgYXJlIGJhc2VkIG9uIGZhbWlseSBsaXN0
cworCisgICAgICAgIFRoaXMgcGF0Y2ggdGFrZXMgY2hhcmFjdGVyLXRvLWdseXBoIG1hcHBpbmcg
b3V0IG9mIEZvbnREYXRhIGFuZCBpbnN0ZWFkIG1ha2VzCisgICAgICAgIGVhY2ggRm9udCBrZWVw
IGl0cyBvd24gbWFwcGluZywgdXNpbmcgYSBzaGFyZWQgc2V0IG9mIGdseXBoIHBhZ2UgZmFsbGJh
Y2sgdHJlZXMKKyAgICAgICAgKHdpdGggc2VsZi1sb29wcykuCisKKyAgICAgICAgRm9yIGVhY2gg
cGFnZSBudW1iZXIgdGhlcmUgaXMgKGF0IG1vc3QpIG9uZSB0cmVlLiBBIHBhdGggZnJvbSB0aGUg
cm9vdCB0byBhCisgICAgICAgIG5vZGUgaW4gdGhlIHRyZWUgY29ycmVzcG9uZHMgdG8gYSBmYWxs
YmFjayBsaXN0IG9mIEZvbnREYXRhcy4gVGhlIG5vZGUgcG9pbnRzIHRvCisgICAgICAgIGEgcGFn
ZSB0aGF0IG1hcHMgZWFjaCBjaGFyYWN0ZXIgaW4gaXRzIHJhbmdlIHRvIGEgZ2x5cGggaW4gdGhl
IGZpcnN0IEZvbnREYXRhIGluCisgICAgICAgIHRoZSBmYWxsYmFjayBsaXN0IHRoYXQgaGFzIGl0
LCBvciB0byAwIGlmIG5vbmUgb2YgdGhlIEZvbnREYXRhcyBoYXMgYSBnbHlwaCBmb3IKKyAgICAg
ICAgdGhhdCBjaGFyYWN0ZXIuIEEgc2VsZi1sb29wIGNvcnJlc3BvbmRzIHRvIGEgRm9udERhdGEg
aW4gdGhlIGxpc3QgdGhhdCBkb2VzIG5vdAorICAgICAgICBtYXAgYW55IGNoYXJhY3RlcnMgdGhh
dCBhcmUgbm90IGFscmVhZHkgbWFwcGVkIGluIGFuY2VzdG9yIEZvbnREYXRhcy4KKyAgICAgICAg
CisgICAgICAgIEEgc3BlY2lhbCBraW5kIG9mIG5vZGUsIHRoYXQgY2FuIG9ubHkgb2NjdXIgYXMg
YSBsZWFmLCBjb3JyZXNwb25kcworICAgICAgICB0byB1c2luZyBzeXN0ZW0gZmFsbGJhY2sgZm9u
dHMgYWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZXhoYXVzdGVkLiBUaGlzIHByZXZlbnRzCisgICAg
ICAgIHN5c3RlbSBmYWxsYmFjayBmcm9tIHBvbGx1dGluZyBub24tbGVhZiBub2Rlcy4KKworICAg
ICAgICBOb2RlcyBhbmQgcGFnZXMgYXJlIGluaXRpYWxpemVkIGxhemlseSBhbmQgZW1wbG95ICJj
b3B5IG9uIHdyaXRlIi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFdl
YkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9Gb250LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IpOiBSZW1vdmVkIHN1
YnN0aXR1dGVGb250RGF0YS4KKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OmFkdmFu
Y2UpOiBNb3ZlZCBhbGwgY2hhcmFjdGVyLXRvLWdseXBoIG1hcHBpbmcgbG9naWMgb3V0CisgICAg
ICAgIG9mIGhlcmUgYW5kIHJlcGxhY2VkIGl0IHdpdGggYSBjYWxsIHRvIEZvbnQ6OmdseXBoRGF0
YUZvckNoYXJhY3RlcigpLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Rm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKTogQWRkZWQuIFRoaXMgbWV0aG9kIHBlcmZvcm1zIHRoZSBsb29r
dXAgaW4gdGhlCisgICAgICAgIHBhZ2UgZmFsbGJhY2sgdHJlZXMsIHRyaWdnZXJpbmcgbGF6eSBp
bml0aWFsaXphdGlvbiBhcyBuZWVkZWQsIGFuZCBjYWNoaW5nIHBvaW50ZXJzIHRvCisgICAgICAg
IHRoZSByZXRyaWV2ZWQgcGFnZSB0cmVlIG5vZGVzIGluIHRoZSBmb250LgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdTaW1wbGVU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQpOiBSZW1vdmVkIHN1YnN0aXR1dGVG
b250IGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25G
b3JTaW1wbGVUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9Gb250Lmg6CisgICAgICAgICogcGxh
dGZvcm0vRm9udERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGE6OkZvbnREYXRh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9Gb250RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dERhdGE6Om1pc3NpbmdHbHlwaERhdGEpOiBBZGRlZC4gUmV0dXJucyB0aGUgIm1pc3NpbmcgZ2x5
cGgiIEdseXBoRGF0YSBmb3IKKyAgICAgICAgdGhpcyBGb250RGF0YS4KKyAgICAgICAgKiBwbGF0
Zm9ybS9HbHlwaE1hcC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vR2x5cGhNYXAu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9HbHlwaFBhZ2VUcmVlTm9kZS5jcHA6IFJl
bmFtZWQgR2x5cGhNYXAuY3BwIHRvIHRoaXMuCisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VU
cmVlTm9kZTo6Z2V0Um9vdCk6IEFkZGVkLiBSZXR1cm5zIHRoZSByb290IG9mIHRoZSBwYWdlIGZh
bGxiYWNrIHRyZWUgZm9yCisgICAgICAgIHRoZSBnaXZlbiBwYWdlIG51bWJlci4KKyAgICAgICAg
KFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjppbml0aWFsaXplUGFnZSk6IEFkZGVkLiBIZWxw
ZXIgbWV0aG9kIHRoYXQgaW5pdGlhbGl6ZXMgdGhlIHBhZ2UKKyAgICAgICAgcG9pbnRlciBvZiBh
IG5vZGUsIHBvc3NpYmx5IHRvIGEgcG9pbnRlciB0byBhbm90aGVyIG5vZGUncyBwYWdlIG9yIHRv
IDAuCisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Q2hpbGQpOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9HbHlwaFBhZ2VUcmVlTm9kZS5oOiBSZW5hbWVkIEdseXBo
TWFwLmggdG8gdGhpcy4KKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6Z2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6c2V0R2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6c2V0R2x5cGhEYXRhRm9y
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OkdseXBoUGFnZVRy
ZWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OnBhcmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6cGFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHbHlwaFBhZ2VUcmVlTm9kZTo6bGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdl
VHJlZU5vZGU6OmlzU3lzdGVtRmFsbGJhY2spOiBBZGRlZC4gUmV0dXJucyB3aGV0aGVyIHRoZSBu
b2RlIGNvcnJlc3BvbmRzCisgICAgICAgIHRvIHRoZSBzeXN0ZW0gcHJvdmlkaW5nIGZhbGxiYWNr
IGZvbnRzLCB3aGljaCBpcyBkb25lIG9uIGEgY2hhcmFjdGVyLWJ5LWNoYXJhY3RlciBiYXNpcy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvR2x5cGhNYXBHZGsuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dkay9HbHlwaFBhZ2VUcmVlTm9kZUdkay5jcHA6IFJlbmFtZWQgR2x5cGhN
YXBHZGsuY3BwIHRvIHRoaXMuCisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmZpbGwpOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9Gb250RGF0YU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnREYXRhOjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Gb250TWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Rm9udCk6CisgICAgICAgICogcGxhdGZvcm0v
bWFjL0dseXBoTWFwTWFjLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvR2x5
cGhQYWdlVHJlZU5vZGVNYWMuY3BwOiBSZW5hbWVkIEdseXBNYXBNYWMuY3BwIHRvIHRoaXMuCisg
ICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmZpbGwpOiBDaGFuZ2VkIHRvIHJldHVybiBmYWxz
ZSBpZiB0aGUgZm9udCBoYXMgbm8gZ2x5cGhzIGluIHRoZSBwYWdlLgorICAgICAgICAqIHBsYXRm
b3JtL3F0L0dseXBoTWFwUXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L0ds
eXBoUGFnZVRyZWVOb2RlUXQuY3BwOiBSZW5hbWVkIEdseXBoTWFwUXQuY3BwIHRvIHRoaXMuCisg
ICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmZpbGwpOgorICAgICAgICAqIHBsYXRmb3JtL3dp
bi9HbHlwaE1hcFdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vd2luL0dseXBo
UGFnZVRyZWVOb2RlV2luLmNwcDogUmVuYW1lZCBHbHlwaE1hcFdpbiB0byB0aGlzLgorICAgICAg
ICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpmaWxsKToKKwogMjAwNy0wMS0xNSAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbQpJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShy
ZXZpc2lvbiAxODg4MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAg
LTU1Nyw3ICs1NTcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9B
ZmZpbmVUcmFuc2Zvcm1RdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1N0cmluZ1F0LmNwcCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29sb3JRdC5jcHAgXAotICAgIHBsYXRmb3JtL3F0L0ds
eXBoTWFwUXQuY3BwIFwKKyAgICBwbGF0Zm9ybS9xdC9HbHlwaFBhZ2VUcmVlTm9kZVF0LmNwcCBc
CiAgICAgcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9Gb250
UGxhdGZvcm1EYXRhUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwIFwK
QEAgLTYxMCw3ICs2MTAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9Gb250Q2FjaGUu
Y3BwIFwKICAgICBwbGF0Zm9ybS9Gb250RmFsbGJhY2tMaXN0LmNwcCBcCiAgICAgcGxhdGZvcm0v
UmVndWxhckV4cHJlc3Npb24uY3BwIFwKLSAgICBwbGF0Zm9ybS9HbHlwaE1hcC5jcHAgXAorICAg
IHBsYXRmb3JtL0dseXBoUGFnZVRyZWVOb2RlLmNwcCBcCiAgICAgcGxhdGZvcm0vRm9udC5jcHAg
XAogICAgIHBsYXRmb3JtL0ZvbnREYXRhLmNwcCBcCiAgICAgcmVuZGVyaW5nL0hpdFRlc3RSZXN1
bHQuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiAxODg4MSkKKysrIFdlYkNvcmUv
V2ViQ29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcgQEAKICAg
ICAgICAgcGxhdGZvcm0vRm9udERhdGEuY3BwCiAgICAgICAgIHBsYXRmb3JtL0ZvbnRGYWxsYmFj
a0xpc3QuY3BwCiAgICAgICAgIHBsYXRmb3JtL0ZvbnRGYW1pbHkuY3BwCi0gICAgICAgIHBsYXRm
b3JtL0dseXBoTWFwLmNwcAorICAgICAgICBwbGF0Zm9ybS9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAK
ICAgICAgICAgcGxhdGZvcm0vR2x5cGhXaWR0aE1hcC5jcHAKICAgICAgICAgcGxhdGZvcm0vS1VS
TC5jcHAKICAgICAgICAgcGxhdGZvcm0vTG9nZ2luZy5jcHAKQEAgLTE5MSw3ICsxOTEsNyBAQAog
ICAgICAgICBwbGF0Zm9ybS93aW4vRm9udERhdGFXaW4uY3BwCiAgICAgICAgIHBsYXRmb3JtL3dp
bi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAogICAgICAgICBwbGF0Zm9ybS93aW4vRm9udFdpbi5j
cHAKLSAgICAgICAgcGxhdGZvcm0vd2luL0dseXBoTWFwV2luLmNwcAorICAgICAgICBwbGF0Zm9y
bS93aW4vR2x5cGhQYWdlVHJlZU5vZGVXaW4uY3BwCiAgICAgICAgIHBsYXRmb3JtL3dpbi9JbnRQ
b2ludFdpbi5jcHAKICAgICAgICAgcGxhdGZvcm0vd2luL0ludFJlY3RXaW4uY3BwCiAgICAgICAg
IHBsYXRmb3JtL3dpbi9JbnRTaXplV2luLmNwcApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTg4ODEpCisrKyBXZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAg
LTE1MjMsMTEgKzE1MjMsMTEgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5cLi5ccGxhdGZvcm1cR2x5cGhNYXAuY3BwIgorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5ccGxhdGZvcm1cR2x5cGhQYWdlVHJlZU5vZGUuY3BwIgogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwbGF0Zm9ybVxHbHlwaE1hcC5o
IgorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccGxhdGZvcm1cR2x5cGhQYWdlVHJlZU5vZGUuaCIK
IAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQpAQCAtMjg1NCw3ICsyODU0LDcgQEAKIAkJCQkJ
PgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBsYXRm
b3JtXHdpblxHbHlwaE1hcFdpbi5jcHAiCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccGxhdGZv
cm1cd2luXEdseXBoUGFnZVRyZWVOb2RlV2luLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJ
CQk8RmlsZQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE4ODgxKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI2OTAsOSArMjY5MCw5IEBACiAJCUJDNkRBQkYzMEEx
OTAxNTcwMEU1Q0QxNCAvKiBGb250Q2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkM2REFCRjIwQTE5MDE1NzAwRTVDRDE0IC8qIEZvbnRDYWNo
ZS5jcHAgKi87IH07CiAJCUJDNkRBREVGMEExOTVGREYwMEU1Q0QxNCAvKiBXZWJGb250Q2FjaGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNkRBREVF
MEExOTVGREYwMEU1Q0QxNCAvKiBXZWJGb250Q2FjaGUuaCAqLzsgfTsKIAkJQkM2REFERkEwQTE5
NjAyQjAwRTVDRDE0IC8qIFdlYkZvbnRDYWNoZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNkRBREY5MEExOTYwMkIwMEU1Q0QxNCAvKiBXZWJGb250
Q2FjaGUubW0gKi87IH07Ci0JCUJDNkRCMzY5MEExQTdDQjcwMEU1Q0QxNCAvKiBHbHlwaE1hcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM2REIzNjgw
QTFBN0NCNzAwRTVDRDE0IC8qIEdseXBoTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQkM2REI0NzQwQTFBOTBGQjAwRTVDRDE0IC8qIEdseXBo
TWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
NkRCNDczMEExQTkwRkIwMEU1Q0QxNCAvKiBHbHlwaE1hcC5jcHAgKi87IH07Ci0JCUJDNkRCNEQ0
MEExQUZFRUYwMEU1Q0QxNCAvKiBHbHlwaE1hcE1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzZEQjREMzBBMUFGRUVGMDBFNUNEMTQgLyogR2x5
cGhNYXBNYWMuY3BwICovOyB9OworCQlCQzZEQjM2OTBBMUE3Q0I3MDBFNUNEMTQgLyogR2x5cGhQ
YWdlVHJlZU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDNkRCMzY4MEExQTdDQjcwMEU1Q0QxNCAvKiBHbHlwaFBhZ2VUcmVlTm9kZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDNkRCNDc0MEEx
QTkwRkIwMEU1Q0QxNCAvKiBHbHlwaFBhZ2VUcmVlTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzZEQjQ3MzBBMUE5MEZCMDBFNUNEMTQgLyog
R2x5cGhQYWdlVHJlZU5vZGUuY3BwICovOyB9OworCQlCQzZEQjRENDBBMUFGRUVGMDBFNUNEMTQg
LyogR2x5cGhQYWdlVHJlZU5vZGVNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkM2REI0RDMwQTFBRkVFRjAwRTVDRDE0IC8qIEdseXBoUGFnZVRy
ZWVOb2RlTWFjLmNwcCAqLzsgfTsKIAkJQkNBQTkwQzMwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9s
bEJhci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Q0FBOTBDMjBBN0VCQTYwMDA4QjEyMjkgLyogU2Nyb2xsQmFyLmNwcCAqLzsgfTsKIAkJQkNCMTZC
OEIwOTc5QjAxNDAwNDY3NzQxIC8qIERlcHJlY2F0ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCMTZCODgwOTc5QjAxNDAwNDY3NzQxIC8q
IERlcHJlY2F0ZWRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUJDQjE2QjhDMDk3OUIwMTQwMDQ2Nzc0MSAvKiBBcnJheUltcGwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCMTZCODkwOTc5
QjAxNDAwNDY3NzQxIC8qIEFycmF5SW1wbC5jcHAgKi87IH07CkBAIC01ODEzLDkgKzU4MTMsOSBA
QAogCQlCQzZEQUJGMjBBMTkwMTU3MDBFNUNEMTQgLyogRm9udENhY2hlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q2FjaGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQzZEQURFRTBBMTk1RkRGMDBFNUNEMTQgLyogV2ViRm9udENhY2hl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGb250Q2FjaGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM2REFERjkwQTE5NjAyQjAwRTVDRDE0IC8qIFdl
YkZvbnRDYWNoZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
ZWJGb250Q2FjaGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNkRCMzY4MEEx
QTdDQjcwMEU1Q0QxNCAvKiBHbHlwaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR2x5cGhNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM2REI0NzMw
QTFBOTBGQjAwRTVDRDE0IC8qIEdseXBoTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBHbHlwaE1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUJDNkRCNEQzMEExQUZFRUYwMEU1Q0QxNCAvKiBHbHlwaE1hcE1hYy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2x5cGhNYXBNYWMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCQzZEQjM2ODBBMUE3Q0I3MDBFNUNEMTQgLyogR2x5cGhQYWdlVHJl
ZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdseXBoUGFnZVRyZWVO
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDNkRCNDczMEExQTkwRkIwMEU1
Q0QxNCAvKiBHbHlwaFBhZ2VUcmVlTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR2x5cGhQYWdlVHJlZU5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzZEQjREMzBBMUFGRUVGMDBFNUNEMTQgLyogR2x5cGhQYWdlVHJlZU5vZGVNYWMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdseXBoUGFnZVRyZWVO
b2RlTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM3QjJBRjgwNDUwODI0
MTAwQTgwMDBGIC8qIFNjcm9sbEJhci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxCYXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUJDN0IyQUY5MDQ1MDgyNDEwMEE4MDAw
RiAvKiBQbGF0Zm9ybVNjcm9sbEJhck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXRmb3JtU2Nyb2xsQmFyTWFjLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJ
QkNBQTkwQzIwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbEJhci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU2Nyb2xsQmFyLmNwcDsgcGF0aCA9IHBsYXRmb3JtL1Nj
cm9sbEJhci5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKQEAgLTY3MTgsNyArNjcx
OCw3IEBACiAJCQkJQkNFQjM3NzIwOUI3QkEzOTAwQ0IzOEIxIC8qIEZvbnRNYWMubW0gKi8sCiAJ
CQkJMTQ4QTAwMTAwQUY1OUYzRjAwOENDNzAwIC8qIEZvbnRQbGF0Zm9ybURhdGEuaCAqLywKIAkJ
CQk5MzVDNDc2QzA5QUM0RDYzMDBBNkFBQjQgLyogRm91bmRhdGlvbkV4dHJhcy5oICovLAotCQkJ
CUJDNkRCNEQzMEExQUZFRUYwMEU1Q0QxNCAvKiBHbHlwaE1hcE1hYy5jcHAgKi8sCisJCQkJQkM2
REI0RDMwQTFBRkVFRjAwRTVDRDE0IC8qIEdseXBoUGFnZVRyZWVOb2RlTWFjLmNwcCAqLywKIAkJ
CQk5MzVDNDc2RTA5QUM0RDczMDBBNkFBQjQgLyogS2V5RXZlbnRNYWMubW0gKi8sCiAJCQkJNjU5
MzkyMzkwOUFFNDM1QzAwMkM1MzFGIC8qIEtVUkxNYWMubW0gKi8sCiAJCQkJOTM1MjA4NDQwOUJE
NDNCOTAwRjIwMzhEIC8qIExhbmd1YWdlLm1tICovLApAQCAtODk0MCw4ICs4OTQwLDggQEAKIAkJ
CQlCQ0M0N0UyNDA5QTNENkYxMDBBREI3NzEgLyogRm9udEZhbWlseS5jcHAgKi8sCiAJCQkJQkND
NDdFMjUwOUEzRDZGMTAwQURCNzcxIC8qIEZvbnRGYW1pbHkuaCAqLywKIAkJCQlCQ0M3MUExMjBB
MEZGOTREMDAxNEVFNkUgLyogR2x5cGhCdWZmZXIuaCAqLywKLQkJCQlCQzZEQjQ3MzBBMUE5MEZC
MDBFNUNEMTQgLyogR2x5cGhNYXAuY3BwICovLAotCQkJCUJDNkRCMzY4MEExQTdDQjcwMEU1Q0Qx
NCAvKiBHbHlwaE1hcC5oICovLAorCQkJCUJDNkRCNDczMEExQTkwRkIwMEU1Q0QxNCAvKiBHbHlw
aFBhZ2VUcmVlTm9kZS5jcHAgKi8sCisJCQkJQkM2REIzNjgwQTFBN0NCNzAwRTVDRDE0IC8qIEds
eXBoUGFnZVRyZWVOb2RlLmggKi8sCiAJCQkJQkNDMDg5NTUwQTFDNENDOTAwNjE4OUE2IC8qIEds
eXBoV2lkdGhNYXAuY3BwICovLAogCQkJCUJDQzA4OTI5MEExQzQ5OTEwMDYxODlBNiAvKiBHbHlw
aFdpZHRoTWFwLmggKi8sCiAJCQkJNjU5MzkyMzUwOUFFNDM0NjAwMkM1MzFGIC8qIEtVUkwuY3Bw
ICovLApAQCAtMTAwNTEsNyArMTAwNTEsNyBAQAogCQkJCUE4MEU3MzUwMEExOTlDNzcwMDdGQjhD
NSAvKiBTdHlsZUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU3MzUxMEExOTlDNzcwMDdG
QjhDNSAvKiBTdHlsZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU3MzUyMEExOTlDNzcw
MDdGQjhDNSAvKiBDU1NTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkM2REIzNjkwQTFB
N0NCNzAwRTVDRDE0IC8qIEdseXBoTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzZEQjM2OTBB
MUE3Q0I3MDBFNUNEMTQgLyogR2x5cGhQYWdlVHJlZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4MEU3QTE4MEExOUMzRDYwMDdGQjhDNSAvKiBKU0hUTUxNZXRhRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTgwRTdCMEMwQTE5RDYwNjAwN0ZCOEM1IC8qIEpTSFRNTFRpdGxlRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTdCMEQwQTE5RDYwNjAwN0ZCOEM1IC8qIEpTSFRN
TExpbmtFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTExNjIyLDggKzExNjIyLDggQEAKIAkJ
CQlBODBFN0U5RTBBMUE4M0UzMDA3RkI4QzUgLyogSlNIVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4MEU3RUEwMEExQTgzRTMwMDdGQjhDNSAvKiBKU0hUTUxCdXR0
b25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MjZFQzQ4MEExQjBDQkUwMENEMUJC
NiAvKiBKU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJQkM2REI0NzQwQTFBOTBGQjAwRTVDRDE0IC8qIEdseXBoTWFwLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCUJDNkRCNEQ0MEExQUZFRUYwMEU1Q0QxNCAvKiBHbHlwaE1hcE1hYy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlCQzZEQjQ3NDBBMUE5MEZCMDBFNUNEMTQgLyogR2x5cGhQYWdlVHJlZU5v
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkM2REI0RDQwQTFBRkVFRjAwRTVDRDE0IC8qIEds
eXBoUGFnZVRyZWVOb2RlTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBOUVGNDU3MEExQjk1
N0QwMDMzMkI2MyAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQ0MwODg4NjBBMUJENzhEMDA2MTg5QTYgLyogRm9udERhdGFNYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQlCQ0MwODkxQTBBMUM0NjUyMDA2MTg5QTYgLyogRm9udERhdGEu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZvbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vRm9udC5jcHAJKHJldmlzaW9uIDE4ODgxKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9Gb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgIkZvbnQuaCIKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkZvbnRDYWNoZS5oIgogI2luY2x1ZGUgIkZvbnRGYWxsYmFja0xpc3QuaCIKICNpbmNsdWRlICJJ
bnRQb2ludC5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCkBAIC02MCw3ICs2MSw3IEBAIGNv
bnN0IHVpbnQ4X3QgRm9udDo6Z1JvdW5kaW5nSGFja0NoYXJhY3QKIEZvbnQ6OkNvZGVQYXRoIEZv
bnQ6OmNvZGVQYXRoID0gQXV0bzsKIAogc3RydWN0IFdpZHRoSXRlcmF0b3IgewotICAgIFdpZHRo
SXRlcmF0b3IoY29uc3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBUZXh0
U3R5bGUmIHN0eWxlLCBjb25zdCBGb250RGF0YSogc3Vic3RpdHV0ZUZvbnREYXRhID0gMCk7Cisg
ICAgV2lkdGhJdGVyYXRvcihjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IFRleHRTdHlsZSYgc3R5bGUpOwogCiAgICAgdm9pZCBhZHZhbmNlKGludCB0bywgR2x5cGhC
dWZmZXIqIGdseXBoQnVmZmVyID0gMCk7CiAgICAgYm9vbCBhZHZhbmNlT25lQ2hhcmFjdGVyKGZs
b2F0JiB3aWR0aCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyID0gMCk7CkBAIC03Miw4ICs3Myw2
IEBAIHN0cnVjdCBXaWR0aEl0ZXJhdG9yIHsKIAogICAgIGNvbnN0IFRleHRTdHlsZSYgbV9zdHls
ZTsKICAgICAKLSAgICBjb25zdCBGb250RGF0YSogbV9zdWJzdGl0dXRlRm9udERhdGE7Ci0KICAg
ICB1bnNpZ25lZCBtX2N1cnJlbnRDaGFyYWN0ZXI7CiAgICAgZmxvYXQgbV9ydW5XaWR0aFNvRmFy
OwogICAgIGZsb2F0IG1fd2lkdGhUb1N0YXJ0OwpAQCAtODUsMTIgKzg0LDExIEBAIHByaXZhdGU6
CiAgICAgVUNoYXIzMiBub3JtYWxpemVWb2ljaW5nTWFya3MoaW50IGN1cnJlbnRDaGFyYWN0ZXIp
OwogfTsKIAotV2lkdGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcihjb25zdCBGb250KiBmb250LCBj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IFRleHRTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnREYXRh
KiBzdWJzdGl0dXRlRm9udERhdGEpCitXaWR0aEl0ZXJhdG9yOjpXaWR0aEl0ZXJhdG9yKGNvbnN0
IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgVGV4dFN0eWxlJiBzdHlsZSkK
ICAgICA6IG1fZm9udChmb250KQogICAgICwgbV9ydW4ocnVuKQogICAgICwgbV9lbmQoc3R5bGUu
cnRsKCkgPyBydW4ubGVuZ3RoKCkgOiBydW4udG8oKSkKICAgICAsIG1fc3R5bGUoc3R5bGUpCi0g
ICAgLCBtX3N1YnN0aXR1dGVGb250RGF0YShzdWJzdGl0dXRlRm9udERhdGEpCiAgICAgLCBtX2N1
cnJlbnRDaGFyYWN0ZXIocnVuLmZyb20oKSkKICAgICAsIG1fcnVuV2lkdGhTb0ZhcigwKQogICAg
ICwgbV9maW5hbFJvdW5kaW5nV2lkdGgoMCkKQEAgLTEyMCw3ICsxMTgsNyBAQCBXaWR0aEl0ZXJh
dG9yOjpXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnQqCiAgICAgZWxzZSB7CiAgICAgICAgIFRleHRS
dW4gY29tcGxldGVSdW4ocnVuKTsKICAgICAgICAgY29tcGxldGVSdW4ubWFrZUNvbXBsZXRlKCk7
Ci0gICAgICAgIFdpZHRoSXRlcmF0b3Igc3RhcnRQb3NpdGlvbkl0ZXJhdG9yKGZvbnQsIGNvbXBs
ZXRlUnVuLCBzdHlsZSwgbV9zdWJzdGl0dXRlRm9udERhdGEpOworICAgICAgICBXaWR0aEl0ZXJh
dG9yIHN0YXJ0UG9zaXRpb25JdGVyYXRvcihmb250LCBjb21wbGV0ZVJ1biwgc3R5bGUpOwogICAg
ICAgICBzdGFydFBvc2l0aW9uSXRlcmF0b3IuYWR2YW5jZShydW4uZnJvbSgpKTsKICAgICAgICAg
bV93aWR0aFRvU3RhcnQgPSBzdGFydFBvc2l0aW9uSXRlcmF0b3IubV9ydW5XaWR0aFNvRmFyOwog
ICAgIH0KQEAgLTEzNSwxNCArMTMzLDEyIEBAIHZvaWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZShp
bnQgb2Zmc2V0LCAKICAgICBjb25zdCBVQ2hhciogY3AgPSBtX3J1bi5kYXRhKGN1cnJlbnRDaGFy
YWN0ZXIpOwogCiAgICAgYm9vbCBydGwgPSBtX3N0eWxlLnJ0bCgpOwotICAgIGJvb2wgbmVlZENo
YXJUcmFuc2Zvcm0gPSBydGwgfHwgbV9mb250LT5pc1NtYWxsQ2FwcygpOworICAgIGJvb2wgYXR0
ZW1wdEZvbnRTdWJzdGl0dXRpb24gPSBtX3N0eWxlLmF0dGVtcHRGb250U3Vic3RpdHV0aW9uKCk7
CiAgICAgYm9vbCBoYXNFeHRyYVNwYWNpbmcgPSBtX2ZvbnQtPmxldHRlclNwYWNpbmcoKSB8fCBt
X2ZvbnQtPndvcmRTcGFjaW5nKCkgfHwgbV9wYWRkaW5nOwogCiAgICAgZmxvYXQgcnVuV2lkdGhT
b0ZhciA9IG1fcnVuV2lkdGhTb0ZhcjsKICAgICBmbG9hdCBsYXN0Um91bmRpbmdXaWR0aCA9IG1f
ZmluYWxSb3VuZGluZ1dpZHRoOwogICAgIAotICAgIGNvbnN0IEZvbnREYXRhKiBwcmltYXJ5Rm9u
dCA9IG1fZm9udC0+cHJpbWFyeUZvbnQoKTsKLQogICAgIHdoaWxlIChjdXJyZW50Q2hhcmFjdGVy
IDwgb2Zmc2V0KSB7CiAgICAgICAgIFVDaGFyMzIgYyA9ICpjcDsKICAgICAgICAgdW5zaWduZWQg
Y2x1c3Rlckxlbmd0aCA9IDE7CkBAIC0xNzMsNDQgKzE2OSwxMSBAQCB2b2lkIFdpZHRoSXRlcmF0
b3I6OmFkdmFuY2UoaW50IG9mZnNldCwgCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAg
ICAgICBjb25zdCBGb250RGF0YSogZm9udERhdGEgPSBtX3N1YnN0aXR1dGVGb250RGF0YSA/IG1f
c3Vic3RpdHV0ZUZvbnREYXRhIDogcHJpbWFyeUZvbnQ7Ci0KLSAgICAgICAgaWYgKG5lZWRDaGFy
VHJhbnNmb3JtKSB7Ci0gICAgICAgICAgICBpZiAocnRsKQotICAgICAgICAgICAgICAgIGMgPSBt
aXJyb3JlZENoYXIoYyk7Ci0KLSAgICAgICAgICAgIC8vIElmIHNtYWxsLWNhcHMsIGNvbnZlcnQg
bG93ZXJjYXNlIHRvIHVwcGVyLgotICAgICAgICAgICAgaWYgKG1fZm9udC0+aXNTbWFsbENhcHMo
KSAmJiAhVW5pY29kZTo6aXNVcHBlcihjKSkgewotICAgICAgICAgICAgICAgIFVDaGFyMzIgdXBw
ZXJDID0gVW5pY29kZTo6dG9VcHBlcihjKTsKLSAgICAgICAgICAgICAgICBpZiAodXBwZXJDICE9
IGMpIHsKLSAgICAgICAgICAgICAgICAgICAgYyA9IHVwcGVyQzsKLSAgICAgICAgICAgICAgICAg
ICAgZm9udERhdGEgPSBmb250RGF0YS0+c21hbGxDYXBzRm9udERhdGEobV9mb250LT5mb250RGVz
Y3JpcHRpb24oKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gRklYTUU6IFNob3VsZCBnbyB0aHJvdWdoIGZhbGxiYWNrIGxpc3QgZXZl
bnR1YWxseSB3aGVuIHdlIHJld29yayB0aGUgZ2x5cGggbWFwLgotICAgICAgICBjb25zdCBHbHlw
aERhdGEmIGdseXBoRGF0YSA9IGZvbnREYXRhLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7Cisg
ICAgICAgIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIoYywgY3AsIGNsdXN0ZXJMZW5ndGgsIHJ0bCwgYXR0ZW1wdEZvbnRTdWJzdGl0dXRp
b24pOwogICAgICAgICBHbHlwaCBnbHlwaCA9IGdseXBoRGF0YS5nbHlwaDsKLSAgICAgICAgZm9u
dERhdGEgPSBnbHlwaERhdGEuZm9udERhdGE7CisgICAgICAgIGNvbnN0IEZvbnREYXRhKiBmb250
RGF0YSA9IGdseXBoRGF0YS5mb250RGF0YTsKIAotICAgICAgICAvLyBUcnkgdG8gZmluZCBhIHN1
YnN0aXR1dGUgZm9udCBpZiB0aGlzIGZvbnQgZGlkbid0IGhhdmUgYSBnbHlwaCBmb3IgYSBjaGFy
YWN0ZXIgaW4gdGhlCi0gICAgICAgIC8vIHN0cmluZy4gSWYgb25lIGlzbid0IGZvdW5kIHdlIGVu
ZCB1cCBkcmF3aW5nIGFuZCBtZWFzdXJpbmcgdGhlIDAgZ2x5cGgsIHVzdWFsbHkgYSBib3guCi0g
ICAgICAgIGlmIChnbHlwaCA9PSAwICYmICFtX3N1YnN0aXR1dGVGb250RGF0YSAmJiBtX3N0eWxl
LmF0dGVtcHRGb250U3Vic3RpdHV0aW9uKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEZvbnREYXRh
KiBzdWJzdGl0dXRlRm9udERhdGEgPSBtX2ZvbnQtPmZvbnREYXRhRm9yQ2hhcmFjdGVycyhjcCwg
Y2x1c3Rlckxlbmd0aCk7Ci0gICAgICAgICAgICBpZiAoc3Vic3RpdHV0ZUZvbnREYXRhKSB7Ci0g
ICAgICAgICAgICAgICAgR2x5cGhCdWZmZXIgbG9jYWxHbHlwaEJ1ZmZlcjsKLSAgICAgICAgICAg
ICAgICBtX2ZvbnQtPmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KFRleHRSdW4oKFVDaGFyKiljcCwg
Y2x1c3Rlckxlbmd0aCksIFRleHRTdHlsZSgwLCAwLCAwLCBtX3N0eWxlLnJ0bCgpLCBtX3N0eWxl
LmRpcmVjdGlvbmFsT3ZlcnJpZGUoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmFsc2UsIG1fc3R5bGUuYXBwbHlXb3JkUm91bmRpbmcoKSksIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0aXR1dGVGb250RGF0YSwgMCwgJmxvY2FsR2x5
cGhCdWZmZXIpOwotICAgICAgICAgICAgICAgIGlmIChsb2NhbEdseXBoQnVmZmVyLnNpemUoKSA9
PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChzdWJzdGl0dXRlRm9udERhdGEgPT0g
bG9jYWxHbHlwaEJ1ZmZlci5mb250RGF0YUF0KDApKTsKLSAgICAgICAgICAgICAgICAgICAgZ2x5
cGggPSBsb2NhbEdseXBoQnVmZmVyLmdseXBoQXQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGZv
bnREYXRhLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGgsIHN1YnN0aXR1dGVGb250
RGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvbnREYXRhID0gc3Vic3RpdHV0ZUZvbnREYXRh
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBB
U1NFUlQoZm9udERhdGEpOwogCiAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBnbHlwaCBh
bmQgZm9udCBkYXRhLCBnZXQgaXRzIHdpZHRoLgogICAgICAgICBmbG9hdCB3aWR0aDsKQEAgLTMz
MSw2ICsyOTQsNyBAQCBGb250OjpGb250KCkgOm1fZm9udExpc3QoMCksIG1fbGV0dGVyU3BhCiBG
b250OjpGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZmQsIHNob3J0IGxldHRlclNwYWNpbmcs
IHNob3J0IHdvcmRTcGFjaW5nKSAKIDogbV9mb250RGVzY3JpcHRpb24oZmQpLAogICBtX2ZvbnRM
aXN0KDApLAorICBtX3BhZ2VaZXJvKDApLAogICBtX2xldHRlclNwYWNpbmcobGV0dGVyU3BhY2lu
ZyksCiAgIG1fd29yZFNwYWNpbmcod29yZFNwYWNpbmcpCiB7fQpAQCAtMzQxLDYgKzMwNSw4IEBA
IEZvbnQ6OkZvbnQoY29uc3QgRm9udCYgb3RoZXIpCiAgICAgbV9mb250TGlzdCA9IG90aGVyLm1f
Zm9udExpc3Q7CiAgICAgbV9sZXR0ZXJTcGFjaW5nID0gb3RoZXIubV9sZXR0ZXJTcGFjaW5nOwog
ICAgIG1fd29yZFNwYWNpbmcgPSBvdGhlci5tX3dvcmRTcGFjaW5nOworICAgIG1fcGFnZXMgPSBv
dGhlci5tX3BhZ2VzOworICAgIG1fcGFnZVplcm8gPSBvdGhlci5tX3BhZ2VaZXJvOwogfQogCiBG
b250JiBGb250OjpvcGVyYXRvcj0oY29uc3QgRm9udCYgb3RoZXIpCkBAIC0zNDgsNiArMzE0LDgg
QEAgRm9udCYgRm9udDo6b3BlcmF0b3I9KGNvbnN0IEZvbnQmIG90aGVyKQogICAgIGlmICgmb3Ro
ZXIgIT0gdGhpcykgewogICAgICAgICBtX2ZvbnREZXNjcmlwdGlvbiA9IG90aGVyLm1fZm9udERl
c2NyaXB0aW9uOwogICAgICAgICBtX2ZvbnRMaXN0ID0gb3RoZXIubV9mb250TGlzdDsKKyAgICAg
ICAgbV9wYWdlcyA9IG90aGVyLm1fcGFnZXM7CisgICAgICAgIG1fcGFnZVplcm8gPSBvdGhlci5t
X3BhZ2VaZXJvOwogICAgICAgICBtX2xldHRlclNwYWNpbmcgPSBvdGhlci5tX2xldHRlclNwYWNp
bmc7CiAgICAgICAgIG1fd29yZFNwYWNpbmcgPSBvdGhlci5tX3dvcmRTcGFjaW5nOwogICAgIH0K
QEAgLTM1OCw2ICszMjYsMTA4IEBAIEZvbnQ6On5Gb250KCkKIHsKIH0KIAorLy8gRklYTUU6IEl0
IGlzIHVuZm9ydHVuYXRlIHRoYXQgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBwYXNzZWQgdGhl
IG9yaWdpbmFsIGNsdXN0ZXIuCisvLyBJdCBpcyBvbmx5IHJlcXVpcmVkIGZvciB0aGUgcGxhdGZv
cm0ncyBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycygpLCBhbmQgaXQgbWVhbnMK
Ky8vIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBub3QgY29ycmVjdCBpZiBpdCB0cmFuc2Zvcm1zIHRo
ZSBjaGFyYWN0ZXIgdG8gdXBwZXJjYXNlIGFuZCBjYWxscworLy8gRm9udENhY2hlOjpnZXRGb250
RGF0YUZvckNoYXJhY3RlcnMoKSBhZnRlcndhcmRzLgorY29uc3QgR2x5cGhEYXRhJiBGb250Ojpn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBjb25zdCBVQ2hhciogY2x1c3RlciwgdW5z
aWduZWQgY2x1c3Rlckxlbmd0aCwgYm9vbCBtaXJyb3IsIGJvb2wgYXR0ZW1wdEZvbnRTdWJzdGl0
dXRpb24pIGNvbnN0Cit7CisgICAgYm9vbCBzbWFsbENhcHMgPSBmYWxzZTsKKworICAgIGlmICht
X2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhVW5pY29kZTo6aXNVcHBlcihjKSkgewor
ICAgICAgICAvLyBDb252ZXJ0IGxvd2VyY2FzZSB0byB1cHBlci4KKyAgICAgICAgVUNoYXIzMiB1
cHBlckMgPSBVbmljb2RlOjp0b1VwcGVyKGMpOworICAgICAgICBpZiAodXBwZXJDICE9IGMpIHsK
KyAgICAgICAgICAgIGMgPSB1cHBlckM7CisgICAgICAgICAgICBzbWFsbENhcHMgPSB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1pcnJvcikKKyAgICAgICAgYyA9IG1pcnJvcmVk
Q2hhcihjKTsKKworICAgIHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSAoYyAvIEdseXBoUGFnZTo6c2l6
ZSk7CisKKyAgICBHbHlwaFBhZ2VUcmVlTm9kZSogbm9kZSA9IHBhZ2VOdW1iZXIgPyBtX3BhZ2Vz
LmdldChwYWdlTnVtYmVyKSA6IG1fcGFnZVplcm87CisgICAgaWYgKCFub2RlKSB7CisgICAgICAg
IG5vZGUgPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKHByaW1hcnlGb250KCksIHBh
Z2VOdW1iZXIpOworICAgICAgICBpZiAocGFnZU51bWJlcikKKyAgICAgICAgICAgIG1fcGFnZXMu
c2V0KHBhZ2VOdW1iZXIsIG5vZGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3BhZ2Va
ZXJvID0gbm9kZTsKKyAgICB9CisKKyAgICBpZiAoIWF0dGVtcHRGb250U3Vic3RpdHV0aW9uICYm
IG5vZGUtPmxldmVsKCkgIT0gMSkKKyAgICAgICAgbm9kZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpn
ZXRSb290Q2hpbGQocHJpbWFyeUZvbnQoKSwgcGFnZU51bWJlcik7CisKKyAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICBHbHlwaFBhZ2UqIHBhZ2UgPSBub2RlLT5wYWdlKCk7CisKKyAgICAgICAg
aWYgKHBhZ2UpIHsKKyAgICAgICAgICAgIGNvbnN0IEdseXBoRGF0YSYgZGF0YSA9IHBhZ2UtPmds
eXBoRGF0YUZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgICAgIGlmIChkYXRhLmdseXBoIHx8ICFh
dHRlbXB0Rm9udFN1YnN0aXR1dGlvbikgeworICAgICAgICAgICAgICAgIGlmICghc21hbGxDYXBz
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKKworICAgICAgICAgICAgICAgIGNv
bnN0IEZvbnREYXRhKiBzbWFsbENhcHNGb250RGF0YSA9IGRhdGEuZm9udERhdGEtPnNtYWxsQ2Fw
c0ZvbnREYXRhKG1fZm9udERlc2NyaXB0aW9uKTsKKworICAgICAgICAgICAgICAgIGlmICghc21h
bGxDYXBzRm9udERhdGEpCisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBo
YXBwZW4sIGJ1dCBpZiBpdCBkb2VzLCB3ZSB3aWxsIHJldHVybiBhIGJpZyBjYXAuCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBkYXRhOworCisgICAgICAgICAgICAgICAgR2x5cGhQYWdlVHJl
ZU5vZGUqIHNtYWxsQ2Fwc05vZGUgPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKHNt
YWxsQ2Fwc0ZvbnREYXRhLCBwYWdlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICBHbHlwaFBhZ2Uq
IHNtYWxsQ2Fwc1BhZ2UgPSBzbWFsbENhcHNOb2RlLT5wYWdlKCk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoc21hbGxDYXBzUGFnZSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBHbHlwaERh
dGEmIGRhdGEgPSBzbWFsbENhcHNQYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChkYXRhLmdseXBoIHx8ICFhdHRlbXB0Rm9udFN1YnN0aXR1dGlv
bikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAvLyBOb3QgYXR0ZW1wdGluZyBzeXN0ZW0gZmFsbGJhY2sgb2Zm
IHRoZSBzbWFsbENhcHNGb250RGF0YS4gVGhpcyBpcyB0aGUgdmVyeSB1bmxpa2VseSBjYXNlIHRo
YXQKKyAgICAgICAgICAgICAgICAvLyBhIGZvbnQgaGFzIHRoZSBsb3dlcmNhc2UgY2hhcmFjdGVy
IGJ1dCBub3QgaXRzIHVwcGVyY2FzZSB2ZXJzaW9uLgorICAgICAgICAgICAgICAgIHJldHVybiBz
bWFsbENhcHNGb250RGF0YS0+bWlzc2luZ0dseXBoRGF0YSgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKCFhdHRlbXB0Rm9udFN1YnN0aXR1dGlvbikgeworICAgICAgICAgICAg
aWYgKHNtYWxsQ2FwcykgeworICAgICAgICAgICAgICAgIGlmIChjb25zdCBGb250RGF0YSogc21h
bGxDYXBzRm9udERhdGEgPSBwcmltYXJ5Rm9udCgpLT5zbWFsbENhcHNGb250RGF0YShtX2ZvbnRE
ZXNjcmlwdGlvbikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzbWFsbENhcHNGb250RGF0
YS0+bWlzc2luZ0dseXBoRGF0YSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHByaW1hcnlGb250KCktPm1pc3NpbmdHbHlwaERhdGEoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChub2RlLT5pc1N5c3RlbUZhbGxiYWNrKCkpIHsKKyAgICAgICAgICAgIC8vIFN5c3RlbSBm
YWxsYmFjayBpcyBjaGFyYWN0ZXItZGVwZW5kZW50LgorICAgICAgICAgICAgY29uc3QgRm9udERh
dGEqIGNoYXJhY3RlckZvbnREYXRhID0gRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3Rl
cnMoKnRoaXMsIGNsdXN0ZXIsIGNsdXN0ZXJMZW5ndGgpOworICAgICAgICAgICAgaWYgKHNtYWxs
Q2FwcykKKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXJGb250RGF0YSA9IGNoYXJhY3RlckZvbnRE
YXRhLT5zbWFsbENhcHNGb250RGF0YShtX2ZvbnREZXNjcmlwdGlvbik7CisgICAgICAgICAgICBp
ZiAoY2hhcmFjdGVyRm9udERhdGEpIHsKKyAgICAgICAgICAgICAgICBHbHlwaFBhZ2VUcmVlTm9k
ZSogZmFsbGJhY2tOb2RlID0gR2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZChjaGFyYWN0
ZXJGb250RGF0YSwgcGFnZU51bWJlcik7CisgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhEYXRh
JiBkYXRhID0gZmFsbGJhY2tOb2RlLT5wYWdlKCktPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsK
KyAgICAgICAgICAgICAgICBpZiAoIXNtYWxsQ2FwcykKKyAgICAgICAgICAgICAgICAgICAgcGFn
ZS0+c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIGRhdGEuZ2x5cGgsIGNoYXJhY3RlckZvbnRE
YXRhKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgLy8gRXZlbiBzeXN0ZW0gZmFsbGJhY2sgY2FuIGZhaWwuCisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0aGUgbGFzdCByZXNvcnQgZm9udCBiZSB1c2Vk
PworICAgICAgICAgICAgICAgIGNvbnN0IEdseXBoRGF0YSYgZGF0YSA9IHByaW1hcnlGb250KCkt
Pm1pc3NpbmdHbHlwaERhdGEoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNtYWxsQ2FwcykKKyAg
ICAgICAgICAgICAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIGRhdGEu
Z2x5cGgsIGRhdGEuZm9udERhdGEpOworICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gUHJvY2VlZCB3aXRoIHRoZSBmYWxs
YmFjayBsaXN0LgorICAgICAgICBjb25zdCBGb250RGF0YSogZm9udERhdGEgPSBmb250RGF0YUF0
KG5vZGUtPmxldmVsKCkpOworICAgICAgICBub2RlID0gbm9kZS0+Z2V0Q2hpbGQoZm9udERhdGEs
IHBhZ2VOdW1iZXIpOworCisgICAgICAgIGlmIChwYWdlTnVtYmVyKQorICAgICAgICAgICAgbV9w
YWdlcy5zZXQocGFnZU51bWJlciwgbm9kZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
cGFnZVplcm8gPSBub2RlOworICAgIH0KKworfQorCiBjb25zdCBGb250RGF0YSogRm9udDo6cHJp
bWFyeUZvbnQoKSBjb25zdAogewogICAgIGFzc2VydChtX2ZvbnRMaXN0KTsKQEAgLTM4Niw2ICs0
NTYsOCBAQCB2b2lkIEZvbnQ6OnVwZGF0ZSgpIGNvbnN0CiAgICAgaWYgKCFtX2ZvbnRMaXN0KQog
ICAgICAgICBtX2ZvbnRMaXN0ID0gbmV3IEZvbnRGYWxsYmFja0xpc3QoKTsKICAgICBtX2ZvbnRM
aXN0LT5pbnZhbGlkYXRlKCk7CisgICAgbV9wYWdlWmVybyA9IDA7CisgICAgbV9wYWdlcy5jbGVh
cigpOwogfQogCiBpbnQgRm9udDo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuKSBjb25zdApAQCAt
NDk1LDcgKzU2Nyw3IEBAIHZvaWQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXgK
IAogICAgIC8vIE91ciBtZWFzdXJpbmcgY29kZSB3aWxsIGdlbmVyYXRlIGdseXBocyBhbmQgYWR2
YW5jZXMgZm9yIHVzLgogICAgIGZsb2F0IHN0YXJ0WDsKLSAgICBmbG9hdFdpZHRoRm9yU2ltcGxl
VGV4dChydW4sIHN0eWxlLCAwLCAmc3RhcnRYLCAmZ2x5cGhCdWZmZXIpOworICAgIGZsb2F0V2lk
dGhGb3JTaW1wbGVUZXh0KHJ1biwgc3R5bGUsICZzdGFydFgsICZnbHlwaEJ1ZmZlcik7CiAgICAg
CiAgICAgLy8gV2UgY291bGRuJ3QgZ2VuZXJhdGUgYW55IGdseXBocyBmb3IgdGhlIHJ1bi4gIEdp
dmUgdXAuCiAgICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKQEAgLTU0MSwxNiArNjEzLDE1
IEBAIHZvaWQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb24KIGZsb2F0IEZvbnQ6
OmZsb2F0V2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBUZXh0U3R5bGUmIHN0eWxlKSBj
b25zdAogewogICAgIGlmIChjYW5Vc2VHbHlwaENhY2hlKHJ1bikpCi0gICAgICAgIHJldHVybiBm
bG9hdFdpZHRoRm9yU2ltcGxlVGV4dChydW4sIHN0eWxlLCAwLCAwLCAwKTsKKyAgICAgICAgcmV0
dXJuIGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KHJ1biwgc3R5bGUsIDAsIDApOwogICAgIGVsc2UK
ICAgICAgICAgcmV0dXJuIGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChydW4sIHN0eWxlKTsKIH0K
IAotZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBUZXh0U3R5bGUmIHN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRm9udERhdGEqIHN1YnN0aXR1dGVGb250LCBmbG9hdCogc3RhcnRQb3NpdGlv
biwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKSBjb25zdAorZmxvYXQgRm9udDo6ZmxvYXRXaWR0
aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBUZXh0U3R5bGUmIHN0eWxl
LCBmbG9hdCogc3RhcnRQb3NpdGlvbiwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKSBjb25zdAog
ewogICAgIAotICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywgcnVuLCBzdHlsZSwgc3Vic3RpdHV0
ZUZvbnQpOworICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywgcnVuLCBzdHlsZSk7CiAgICAgaXQu
YWR2YW5jZShydW4udG8oKSwgZ2x5cGhCdWZmZXIpOwogICAgIGZsb2F0IHJ1bldpZHRoID0gaXQu
bV9ydW5XaWR0aFNvRmFyOwogICAgIGlmIChzdGFydFBvc2l0aW9uKSB7CkBAIC02MDgsNyArNjc5
LDcgQEAgaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dAogICAgIEdseXBo
QnVmZmVyIGxvY2FsR2x5cGhCdWZmZXI7CiAgICAgdW5zaWduZWQgb2Zmc2V0OwogICAgIGlmIChz
dHlsZS5ydGwoKSkgewotICAgICAgICBkZWx0YSAtPSBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChy
dW4sIHN0eWxlLCAwLCAwLCAwKTsKKyAgICAgICAgZGVsdGEgLT0gZmxvYXRXaWR0aEZvclNpbXBs
ZVRleHQocnVuLCBzdHlsZSwgMCwgMCk7CiAgICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICAg
ICBvZmZzZXQgPSBpdC5tX2N1cnJlbnRDaGFyYWN0ZXI7CiAgICAgICAgICAgICBmbG9hdCB3OwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9Gb250LmgJKHJldmlzaW9uIDE4ODgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9Gb250LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgRm9udF9oCiAKICNpbmNs
dWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgog
CiAjaWYgUExBVEZPUk0oUVQpCiBjbGFzcyBRRm9udDsKQEAgLTE0OCw2ICsxNDksOCBAQCBwdWJs
aWM6CiAKICAgICBjb25zdCBGb250RGF0YSogcHJpbWFyeUZvbnQoKSBjb25zdDsKICAgICBjb25z
dCBGb250RGF0YSogZm9udERhdGFBdCh1bnNpZ25lZCkgY29uc3Q7CisgICAgY29uc3QgR2x5cGhE
YXRhJiBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgVUNoYXIqIGNsdXN0ZXIs
IHVuc2lnbmVkIGNsdXN0ZXJMZW5ndGgsIGJvb2wgbWlycm9yLCBib29sIGF0dGVtcHRGb250U3Vi
c3RpdHV0aW9uKSBjb25zdDsKKyAgICAvLyBVc2VkIGZvciBjb21wbGV4IHRleHQsIGFuZCBkb2Vz
IG5vdCB1dGlsaXplIHRoZSBnbHlwaCBtYXAgY2FjaGUuCiAgICAgY29uc3QgRm9udERhdGEqIGZv
bnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgpIGNvbnN0OwogCiBw
cml2YXRlOgpAQCAtMTU2LDggKzE1OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3U2ltcGxl
VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJiwg
Y29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGlu
dCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZvaWQgZHJhd0NvbXBsZXhUZXh0
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmLCBjb25z
dCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgZmxvYXQgZmxvYXRXaWR0aEZvclNpbXBsZVRleHQo
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGNvbnN0IEZvbnREYXRhKiBzdWJzdGl0
dXRlRm9udERhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIHN0
YXJ0WCwgR2x5cGhCdWZmZXIqKSBjb25zdDsKKyAgICBmbG9hdCBmbG9hdFdpZHRoRm9yU2ltcGxl
VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJiwgZmxvYXQqIHN0YXJ0WCwgR2x5
cGhCdWZmZXIqKSBjb25zdDsKICAgICBmbG9hdCBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYpIGNvbnN0OwogICAgIGludCBvZmZzZXRGb3JQ
b3NpdGlvbkZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGlu
dCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CiAgICAgaW50IG9m
ZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRT
dHlsZSYsIGludCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7CkBA
IC0xODIsNiArMTg0LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGb250RGVzY3JpcHRpb24g
bV9mb250RGVzY3JpcHRpb247CiAgICAgbXV0YWJsZSBSZWZQdHI8Rm9udEZhbGxiYWNrTGlzdD4g
bV9mb250TGlzdDsKKyAgICBtdXRhYmxlIEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+
IG1fcGFnZXM7CisgICAgbXV0YWJsZSBHbHlwaFBhZ2VUcmVlTm9kZSogbV9wYWdlWmVybzsKICAg
ICBzaG9ydCBtX2xldHRlclNwYWNpbmc7CiAgICAgc2hvcnQgbV93b3JkU3BhY2luZzsKIH07Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL0ZvbnREYXRhLmNwcAkocmV2aXNpb24gMTg4ODEpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL0ZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTEgKzQ0LDEzIEBAIEZvbnRE
YXRhOjpGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXQKICAgICAvLyBOYXN0eSBoYWNrIHRv
IGRldGVybWluZSBpZiB3ZSBzaG91bGQgcm91bmQgb3IgY2VpbCBzcGFjZSB3aWR0aHMuCiAgICAg
Ly8gSWYgdGhlIGZvbnQgaXMgbW9ub3NwYWNlIG9yIGZha2UgbW9ub3NwYWNlIHdlIGNlaWwgdG8g
ZW5zdXJlIHRoYXQgCiAgICAgLy8gZXZlcnkgY2hhcmFjdGVyIGFuZCB0aGUgc3BhY2UgYXJlIHRo
ZSBzYW1lIHdpZHRoLiAgT3RoZXJ3aXNlIHdlIHJvdW5kLgotICAgIG1fc3BhY2VHbHlwaCA9IG1f
Y2hhcmFjdGVyVG9HbHlwaE1hcC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoJyAnLCB0aGlzKS5nbHlw
aDsKKyAgICBtX3NwYWNlR2x5cGggPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKHRo
aXMsIDApLT5wYWdlKCktPmdseXBoRGF0YUZvckNoYXJhY3RlcignICcpLmdseXBoOwogICAgIGZs
b2F0IHdpZHRoID0gd2lkdGhGb3JHbHlwaChtX3NwYWNlR2x5cGgpOwogICAgIG1fc3BhY2VXaWR0
aCA9IHdpZHRoOwogICAgIGRldGVybWluZVBpdGNoKCk7CiAgICAgbV9hZGp1c3RlZFNwYWNlV2lk
dGggPSBtX3RyZWF0QXNGaXhlZFBpdGNoID8gY2VpbGYod2lkdGgpIDogcm91bmRmKHdpZHRoKTsK
KyAgICBtX21pc3NpbmdHbHlwaERhdGEuZm9udERhdGEgPSB0aGlzOworICAgIG1fbWlzc2luZ0ds
eXBoRGF0YS5nbHlwaCA9IDA7CiB9CiAKIEZvbnREYXRhOjp+Rm9udERhdGEoKQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9Gb250RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Rm9udERhdGEuaAkocmV2aXNpb24gMTg4ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZvbnREYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNkZWZpbmUgRm9udERhdGFfaAog
CiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotI2luY2x1ZGUgIkdseXBoTWFwLmgiCisj
aW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKICNpbmNsdWRlICJHbHlwaFdpZHRoTWFwLmgi
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKQEAgLTY1LDEwICs2NSw4IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goKTsKICAgICBQaXRjaCBwaXRjaCgpIGNvbnN0
IHsgcmV0dXJuIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBGaXhlZFBpdGNoIDogVmFyaWFibGVQaXRj
aDsgfQotICAgIAotICAgIC8vIEZJWE1FOiBTaG91bGQgZ28gYXdheSB3aGVuIHdlIHB1bGwgdGhl
IGdseXBoIG1hcCBvdXQgb2YgdGhlIEZvbnREYXRhLgotICAgIEdseXBoRGF0YSBnbHlwaERhdGFG
b3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlclRvR2x5cGhN
YXAuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIHRoaXMpOyB9Ci0gICAgdm9pZCBzZXRHbHlwaERh
dGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBHbHlwaCBnbHlwaCwgY29uc3QgRm9udERhdGEqIGZv
bnREYXRhKSBjb25zdCB7IG1fY2hhcmFjdGVyVG9HbHlwaE1hcC5zZXRHbHlwaERhdGFGb3JDaGFy
YWN0ZXIoYywgZ2x5cGgsIGZvbnREYXRhKTsgfQorCisgICAgY29uc3QgR2x5cGhEYXRhJiBtaXNz
aW5nR2x5cGhEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9taXNzaW5nR2x5cGhEYXRhOyB9CiAKICNp
ZiBQTEFURk9STShNQUMpCiAgICAgTlNGb250KiBnZXROU0ZvbnQoKSBjb25zdCB7IHJldHVybiBt
X2ZvbnQuZm9udDsgfQpAQCAtOTUsNyArOTMsNiBAQCBwdWJsaWM6CiAgICAgZmxvYXQgbV94SGVp
Z2h0OwogICAgIAogICAgIEZvbnRQbGF0Zm9ybURhdGEgbV9mb250OwotICAgIG11dGFibGUgR2x5
cGhNYXAgbV9jaGFyYWN0ZXJUb0dseXBoTWFwOwogICAgIG11dGFibGUgR2x5cGhXaWR0aE1hcCBt
X2dseXBoVG9XaWR0aE1hcDsKIAogICAgIGJvb2wgbV90cmVhdEFzRml4ZWRQaXRjaDsKQEAgLTEw
Myw2ICsxMDAsOCBAQCBwdWJsaWM6CiAgICAgZmxvYXQgbV9zcGFjZVdpZHRoOwogICAgIGZsb2F0
IG1fYWRqdXN0ZWRTcGFjZVdpZHRoOwogCisgICAgR2x5cGhEYXRhIG1fbWlzc2luZ0dseXBoRGF0
YTsKKwogICAgIG11dGFibGUgRm9udERhdGEqIG1fc21hbGxDYXBzRm9udERhdGE7CiAKICNpZiBQ
TEFURk9STShDRykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhNYXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhNYXAuY3BwCShyZXZpc2lvbiAxODg4MSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyNSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHbHlw
aE1hcC5oIgotCi0jaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKLSNpbmNsdWRlICJGb250RGF0
YS5oIgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1HbHlwaERhdGEgR2x5cGhNYXA6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMy
IGMsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKLXsKLSAgICB1bnNpZ25lZCBwYWdlTnVtYmVy
ID0gKGMgLyBHbHlwaFBhZ2U6OnNpemUpOwotICAgIEdseXBoUGFnZSogcGFnZSA9IGxvY2F0ZVBh
Z2UocGFnZU51bWJlciwgZm9udERhdGEpOwotICAgIGlmIChwYWdlKQotICAgICAgICByZXR1cm4g
cGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwotICAgIEdseXBoRGF0YSBkYXRhID0geyAw
LCBmb250RGF0YSB9OwotICAgIHJldHVybiBkYXRhOwotfQotCi12b2lkIEdseXBoTWFwOjpzZXRH
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBHbHlwaCBnbHlwaCwgY29uc3QgRm9udERh
dGEqIGZvbnREYXRhKQotewotICAgIHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSAoYyAvIEdseXBoUGFn
ZTo6c2l6ZSk7Ci0gICAgR2x5cGhQYWdlKiBwYWdlID0gbG9jYXRlUGFnZShwYWdlTnVtYmVyLCBm
b250RGF0YSk7Ci0gICAgaWYgKHBhZ2UpCi0gICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckNo
YXJhY3RlcihjLCBnbHlwaCwgZm9udERhdGEpOwotfQotCi1pbmxpbmUgR2x5cGhNYXA6OkdseXBo
UGFnZSogR2x5cGhNYXA6OmxvY2F0ZVBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgRm9u
dERhdGEqIGZvbnREYXRhKQotewotICAgIEdseXBoUGFnZSogcGFnZTsKLSAgICBpZiAocGFnZU51
bWJlciA9PSAwKSB7Ci0gICAgICAgIGlmIChtX2ZpbGxlZFByaW1hcnlQYWdlKQotICAgICAgICAg
ICAgcmV0dXJuICZtX3ByaW1hcnlQYWdlOwotICAgICAgICBwYWdlID0gJm1fcHJpbWFyeVBhZ2U7
IAotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX3BhZ2VzKSB7Ci0gICAgICAgICAgICBHbHlw
aFBhZ2UqIHJlc3VsdCA9IG1fcGFnZXMtPmdldChwYWdlTnVtYmVyKTsKLSAgICAgICAgICAgIGlm
IChyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAg
ICAgICBwYWdlID0gbmV3IEdseXBoUGFnZTsKLSAgICB9Ci0gICAgICAKLSAgICB1bnNpZ25lZCBz
dGFydCA9IHBhZ2VOdW1iZXIgKiBHbHlwaFBhZ2U6OnNpemU7Ci0gICAgVUNoYXIgYnVmZmVyW0ds
eXBoUGFnZTo6c2l6ZSAqIDIgKyAyXTsKLSAgICB1bnNpZ25lZCBidWZmZXJMZW5ndGg7Ci0gICAg
dW5zaWduZWQgaTsKLQotICAgIC8vIEZpbGwgaW4gYSBidWZmZXIgd2l0aCB0aGUgZW50aXJlICJw
YWdlIiBvZiBjaGFyYWN0ZXJzIHRoYXQgd2Ugd2FudCB0byBsb29rIHVwIGdseXBocyBmb3IuCi0g
ICAgaWYgKHN0YXJ0IDwgMHgxMDAwMCkgewotICAgICAgICBidWZmZXJMZW5ndGggPSBHbHlwaFBh
Z2U6OnNpemU7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykK
LSAgICAgICAgICAgIGJ1ZmZlcltpXSA9IHN0YXJ0ICsgaTsKLQotICAgICAgICBpZiAoc3RhcnQg
PT0gMCkgewotICAgICAgICAgICAgLy8gQ29udHJvbCBjaGFyYWN0ZXJzIG11c3Qgbm90IHJlbmRl
ciBhdCBhbGwuCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMHgyMDsgKytpKQotICAgICAg
ICAgICAgICAgIGJ1ZmZlcltpXSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgZm9yIChp
ID0gMHg3RjsgaSA8IDB4QTA7IGkrKykKLSAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJv
V2lkdGhTcGFjZTsKLQotICAgICAgICAgICAgLy8gXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcgc3Bh
Y2UgbXVzdCByZW5kZXIgYXMgYSBzcGFjZS4KLSAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcbidd
ID0gJyAnOwotICAgICAgICAgICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAnICc7Ci0gICAgICAgICAg
ICBidWZmZXJbbm9CcmVha1NwYWNlXSA9ICcgJzsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGJ1ZmZlckxlbmd0aCA9IEdseXBoUGFnZTo6c2l6ZSAqIDI7Ci0gICAgICAgIGZvciAo
aSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykgewotICAgICAgICAgICAgaW50IGMgPSBp
ICsgc3RhcnQ7Ci0gICAgICAgICAgICBidWZmZXJbaSAqIDJdID0gVTE2X0xFQUQoYyk7Ci0gICAg
ICAgICAgICBidWZmZXJbaSAqIDIgKyAxXSA9IFUxNl9UUkFJTChjKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgYnVmZmVyIGZ1bGwgb2YgY2hhcmFj
dGVycywgd2Ugd2FudCB0byBnZXQgYmFjayBhbiBhcnJheQotICAgIC8vIG9mIGdseXBoIGluZGlj
ZXMuICBUaGlzIHBhcnQgaW52b2x2ZXMgY2FsbGluZyBpbnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZp
YyAKLSAgICAvLyByb3V0aW5lIG9mIG91ciBnbHlwaCBtYXAgZm9yIGFjdHVhbGx5IGZpbGxpbmcg
aW4gdGhlIHBhZ2Ugd2l0aCB0aGUgZ2x5cGhzLgotICAgIGJvb2wgc3VjY2VzcyA9IGZpbGxQYWdl
KHBhZ2UsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0YSk7Ci0gICAgaWYgKCFzdWNjZXNz
KSB7Ci0gICAgICAgIGlmIChwYWdlTnVtYmVyICE9IDApCi0gICAgICAgICAgICBkZWxldGUgcGFn
ZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIGlmIChwYWdlTnVtYmVyID09
IDApCi0gICAgICAgIG1fZmlsbGVkUHJpbWFyeVBhZ2UgPSB0cnVlOwotICAgIGVsc2UgewotICAg
ICAgICBpZiAoIW1fcGFnZXMpCi0gICAgICAgICAgICBtX3BhZ2VzID0gbmV3IEhhc2hNYXA8aW50
LCBHbHlwaFBhZ2UqPjsKLSAgICAgICAgbV9wYWdlcy0+c2V0KHBhZ2VOdW1iZXIsIHBhZ2UpOwot
ICAgIH0KLQotICAgIHJldHVybiBwYWdlOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L0dseXBoTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9HbHlwaE1hcC5oCShy
ZXZpc2lvbiAxODg4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhNYXAuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgR2x5cGhNYXBfaAot
I2RlZmluZSBHbHlwaE1hcF9oCi0KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+Ci0j
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGb250RGF0YTsKLQotdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCBHbHlwaDsKLQotc3RydWN0IEdseXBoRGF0YSB7ICAgIAotICAgIEdseXBoIGdseXBo
OwotICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YTsKLX07Ci0KLWNsYXNzIEdseXBoTWFwIDog
Tm9uY29weWFibGUgewotcHVibGljOgotICAgIEdseXBoTWFwKCkgOiBtX2ZpbGxlZFByaW1hcnlQ
YWdlKGZhbHNlKSwgbV9wYWdlcygwKSB7fQotICAgIH5HbHlwaE1hcCgpIHsgaWYgKG1fcGFnZXMp
IHsgZGVsZXRlQWxsVmFsdWVzKCptX3BhZ2VzKTsgZGVsZXRlIG1fcGFnZXM7IH0gfQotCi0gICAg
R2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBjb25zdCBGb250RGF0YSop
OwotICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIEdseXBoLCBjb25z
dCBGb250RGF0YSopOwotCi1wcml2YXRlOgotICAgIHN0cnVjdCBHbHlwaFBhZ2UgewotICAgICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUgPSAyNTY7IC8vIENvdmVycyBMYXRpbi0xIGluIGEg
c2luZ2xlIHBhZ2UuCi0gICAgICAgIEdseXBoRGF0YSBtX2dseXBoc1tzaXplXTsKLQotICAgICAg
ICBjb25zdCBHbHlwaERhdGEmIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0
IHsgcmV0dXJuIG1fZ2x5cGhzW2MgJSBzaXplXTsgfQotICAgICAgICB2b2lkIHNldEdseXBoRGF0
YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIEdseXBoIGcsIGNvbnN0IEZvbnREYXRhKiBmKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChjICUgc2l6ZSwgZywgZik7
Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1bnNpZ25lZCBp
bmRleCwgR2x5cGggZywgY29uc3QgRm9udERhdGEqIGYpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1fZ2x5cGhzW2luZGV4XS5nbHlwaCA9IGc7Ci0gICAgICAgICAgICBtX2dseXBoc1tpbmRleF0u
Zm9udERhdGEgPSBmOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIEdseXBoUGFnZSogbG9jYXRl
UGFnZSh1bnNpZ25lZCBwYWdlLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpOwotICAgIGJvb2wg
ZmlsbFBhZ2UoR2x5cGhQYWdlKiwgVUNoYXIqIGNoYXJhY3RlckJ1ZmZlciwgdW5zaWduZWQgYnVm
ZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpOwotCi0gICAgYm9vbCBtX2ZpbGxl
ZFByaW1hcnlQYWdlOwotICAgIEdseXBoUGFnZSBtX3ByaW1hcnlQYWdlOyAvLyBXZSBvcHRpbWl6
ZSBmb3IgdGhlIHBhZ2UgdGhhdCBjb250YWlucyBMYXRpbi0xLgotICAgIEhhc2hNYXA8aW50LCBH
bHlwaFBhZ2UqPiogbV9wYWdlczsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL0dseXBoUGFnZVRyZWVOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL0dseXBoUGFnZVRyZWVOb2RlLmNwcAkocmV2aXNpb24gMTg4ODEpCShmcm9tIFdlYkNvcmUv
cGxhdGZvcm0vR2x5cGhNYXAuY3BwOjE4ODgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9HbHlwaFBh
Z2VUcmVlTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdseXBoTWFwLmgiCisKKyNpbmNs
dWRlICJDaGFyYWN0ZXJOYW1lcy5oIgorI2luY2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dseXBoRGF0
YSBHbHlwaE1hcDo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgY29uc3QgRm9udERh
dGEqIGZvbnREYXRhKQoreworICAgIHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSAoYyAvIEdseXBoUGFn
ZTo6c2l6ZSk7CisgICAgR2x5cGhQYWdlKiBwYWdlID0gbG9jYXRlUGFnZShwYWdlTnVtYmVyLCBm
b250RGF0YSk7CisgICAgaWYgKHBhZ2UpCisgICAgICAgIHJldHVybiBwYWdlLT5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoYyk7CisgICAgR2x5cGhEYXRhIGRhdGEgPSB7IDAsIGZvbnREYXRhIH07Cisg
ICAgcmV0dXJuIGRhdGE7Cit9CisKK3ZvaWQgR2x5cGhNYXA6OnNldEdseXBoRGF0YUZvckNoYXJh
Y3RlcihVQ2hhcjMyIGMsIEdseXBoIGdseXBoLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpCit7
CisgICAgdW5zaWduZWQgcGFnZU51bWJlciA9IChjIC8gR2x5cGhQYWdlOjpzaXplKTsKKyAgICBH
bHlwaFBhZ2UqIHBhZ2UgPSBsb2NhdGVQYWdlKHBhZ2VOdW1iZXIsIGZvbnREYXRhKTsKKyAgICBp
ZiAocGFnZSkKKyAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIGdseXBo
LCBmb250RGF0YSk7Cit9CisKK2lubGluZSBHbHlwaE1hcDo6R2x5cGhQYWdlKiBHbHlwaE1hcDo6
bG9jYXRlUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250RGF0YSogZm9udERhdGEp
Cit7CisgICAgR2x5cGhQYWdlKiBwYWdlOworICAgIGlmIChwYWdlTnVtYmVyID09IDApIHsKKyAg
ICAgICAgaWYgKG1fZmlsbGVkUHJpbWFyeVBhZ2UpCisgICAgICAgICAgICByZXR1cm4gJm1fcHJp
bWFyeVBhZ2U7CisgICAgICAgIHBhZ2UgPSAmbV9wcmltYXJ5UGFnZTsgCisgICAgfSBlbHNlIHsK
KyAgICAgICAgaWYgKG1fcGFnZXMpIHsKKyAgICAgICAgICAgIEdseXBoUGFnZSogcmVzdWx0ID0g
bV9wYWdlcy0+Z2V0KHBhZ2VOdW1iZXIpOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHBhZ2UgPSBuZXcg
R2x5cGhQYWdlOworICAgIH0KKyAgICAgIAorICAgIHVuc2lnbmVkIHN0YXJ0ID0gcGFnZU51bWJl
ciAqIEdseXBoUGFnZTo6c2l6ZTsKKyAgICBVQ2hhciBidWZmZXJbR2x5cGhQYWdlOjpzaXplICog
MiArIDJdOworICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aDsKKyAgICB1bnNpZ25lZCBpOworCisg
ICAgLy8gRmlsbCBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBlbnRpcmUgInBhZ2UiIG9mIGNoYXJhY3Rl
cnMgdGhhdCB3ZSB3YW50IHRvIGxvb2sgdXAgZ2x5cGhzIGZvci4KKyAgICBpZiAoc3RhcnQgPCAw
eDEwMDAwKSB7CisgICAgICAgIGJ1ZmZlckxlbmd0aCA9IEdseXBoUGFnZTo6c2l6ZTsKKyAgICAg
ICAgZm9yIChpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKQorICAgICAgICAgICAgYnVm
ZmVyW2ldID0gc3RhcnQgKyBpOworCisgICAgICAgIGlmIChzdGFydCA9PSAwKSB7CisgICAgICAg
ICAgICAvLyBDb250cm9sIGNoYXJhY3RlcnMgbXVzdCBub3QgcmVuZGVyIGF0IGFsbC4KKyAgICAg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCAweDIwOyArK2kpCisgICAgICAgICAgICAgICAgYnVmZmVy
W2ldID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgICAgICBmb3IgKGkgPSAweDdGOyBpIDwgMHhB
MDsgaSsrKQorICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9IHplcm9XaWR0aFNwYWNlOworCisg
ICAgICAgICAgICAvLyBcbiwgXHQsIGFuZCBub25icmVha2luZyBzcGFjZSBtdXN0IHJlbmRlciBh
cyBhIHNwYWNlLgorICAgICAgICAgICAgYnVmZmVyWyhpbnQpJ1xuJ10gPSAnICc7CisgICAgICAg
ICAgICBidWZmZXJbKGludCknXHQnXSA9ICcgJzsKKyAgICAgICAgICAgIGJ1ZmZlcltub0JyZWFr
U3BhY2VdID0gJyAnOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmZmVyTGVu
Z3RoID0gR2x5cGhQYWdlOjpzaXplICogMjsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEdseXBo
UGFnZTo6c2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBpbnQgYyA9IGkgKyBzdGFydDsKKyAgICAg
ICAgICAgIGJ1ZmZlcltpICogMl0gPSBVMTZfTEVBRChjKTsKKyAgICAgICAgICAgIGJ1ZmZlcltp
ICogMiArIDFdID0gVTE2X1RSQUlMKGMpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8v
IE5vdyB0aGF0IHdlIGhhdmUgYSBidWZmZXIgZnVsbCBvZiBjaGFyYWN0ZXJzLCB3ZSB3YW50IHRv
IGdldCBiYWNrIGFuIGFycmF5CisgICAgLy8gb2YgZ2x5cGggaW5kaWNlcy4gIFRoaXMgcGFydCBp
bnZvbHZlcyBjYWxsaW5nIGludG8gdGhlIHBsYXRmb3JtLXNwZWNpZmljIAorICAgIC8vIHJvdXRp
bmUgb2Ygb3VyIGdseXBoIG1hcCBmb3IgYWN0dWFsbHkgZmlsbGluZyBpbiB0aGUgcGFnZSB3aXRo
IHRoZSBnbHlwaHMuCisgICAgYm9vbCBzdWNjZXNzID0gZmlsbFBhZ2UocGFnZSwgYnVmZmVyLCBi
dWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgaWYg
KHBhZ2VOdW1iZXIgIT0gMCkKKyAgICAgICAgICAgIGRlbGV0ZSBwYWdlOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgCisgICAgaWYgKHBhZ2VOdW1iZXIgPT0gMCkKKyAgICAgICAgbV9m
aWxsZWRQcmltYXJ5UGFnZSA9IHRydWU7CisgICAgZWxzZSB7CisgICAgICAgIGlmICghbV9wYWdl
cykKKyAgICAgICAgICAgIG1fcGFnZXMgPSBuZXcgSGFzaE1hcDxpbnQsIEdseXBoUGFnZSo+Owor
ICAgICAgICBtX3BhZ2VzLT5zZXQocGFnZU51bWJlciwgcGFnZSk7CisgICAgfQorCisgICAgcmV0
dXJuIHBhZ2U7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhQYWdlVHJlZU5v
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhQYWdlVHJlZU5vZGUu
Y3BwCShyZXZpc2lvbiAxODg4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhQYWdlVHJlZU5v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAgKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoTWFwLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlVHJl
ZU5vZGUuaCIKIAogI2luY2x1ZGUgIkNoYXJhY3Rlck5hbWVzLmgiCiAjaW5jbHVkZSAiRm9udERh
dGEuaCIKQEAgLTM1LDkxICszNSwxNTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1HbHlw
aERhdGEgR2x5cGhNYXA6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGNvbnN0IEZv
bnREYXRhKiBmb250RGF0YSkKK0dseXBoUGFnZVRyZWVOb2RlKiBHbHlwaFBhZ2VUcmVlTm9kZTo6
Z2V0Um9vdCh1bnNpZ25lZCBwYWdlTnVtYmVyKQogewotICAgIHVuc2lnbmVkIHBhZ2VOdW1iZXIg
PSAoYyAvIEdseXBoUGFnZTo6c2l6ZSk7Ci0gICAgR2x5cGhQYWdlKiBwYWdlID0gbG9jYXRlUGFn
ZShwYWdlTnVtYmVyLCBmb250RGF0YSk7Ci0gICAgaWYgKHBhZ2UpCi0gICAgICAgIHJldHVybiBw
YWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7Ci0gICAgR2x5cGhEYXRhIGRhdGEgPSB7IDAs
IGZvbnREYXRhIH07Ci0gICAgcmV0dXJuIGRhdGE7CisgICAgc3RhdGljIEhhc2hNYXA8aW50LCBH
bHlwaFBhZ2VUcmVlTm9kZSo+IHJvb3RzOworICAgIHN0YXRpYyBHbHlwaFBhZ2VUcmVlTm9kZSog
cGFnZVplcm9Sb290OworICAgIEdseXBoUGFnZVRyZWVOb2RlKiBub2RlID0gcGFnZU51bWJlciA/
IHJvb3RzLmdldChwYWdlTnVtYmVyKSA6IHBhZ2VaZXJvUm9vdDsKKyAgICBpZiAoIW5vZGUpIHsK
KyAgICAgICAgbm9kZSA9IG5ldyBHbHlwaFBhZ2VUcmVlTm9kZSgpOworI2lmbmRlZiBOREVCVUcK
KyAgICAgICAgbm9kZS0+bV9wYWdlTnVtYmVyID0gcGFnZU51bWJlcjsKKyNlbmRpZgorICAgICAg
ICBpZiAocGFnZU51bWJlcikKKyAgICAgICAgICAgIHJvb3RzLnNldChwYWdlTnVtYmVyLCBub2Rl
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFnZVplcm9Sb290ID0gbm9kZTsKKyAgICB9
CisgICAgcmV0dXJuIG5vZGU7CiB9CiAKLXZvaWQgR2x5cGhNYXA6OnNldEdseXBoRGF0YUZvckNo
YXJhY3RlcihVQ2hhcjMyIGMsIEdseXBoIGdseXBoLCBjb25zdCBGb250RGF0YSogZm9udERhdGEp
Citib29sIEdseXBoUGFnZVRyZWVOb2RlOjppbml0aWFsaXplUGFnZShjb25zdCBGb250RGF0YSog
Zm9udERhdGEsIHVuc2lnbmVkIHBhZ2VOdW1iZXIpCiB7Ci0gICAgdW5zaWduZWQgcGFnZU51bWJl
ciA9IChjIC8gR2x5cGhQYWdlOjpzaXplKTsKLSAgICBHbHlwaFBhZ2UqIHBhZ2UgPSBsb2NhdGVQ
YWdlKHBhZ2VOdW1iZXIsIGZvbnREYXRhKTsKLSAgICBpZiAocGFnZSkKLSAgICAgICAgcGFnZS0+
c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIGdseXBoLCBmb250RGF0YSk7Ci19CisgICAgQVNT
RVJUKCFtX3BhZ2UpOwogCi1pbmxpbmUgR2x5cGhNYXA6OkdseXBoUGFnZSogR2x5cGhNYXA6Omxv
Y2F0ZVBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQot
ewotICAgIEdseXBoUGFnZSogcGFnZTsKLSAgICBpZiAocGFnZU51bWJlciA9PSAwKSB7Ci0gICAg
ICAgIGlmIChtX2ZpbGxlZFByaW1hcnlQYWdlKQotICAgICAgICAgICAgcmV0dXJuICZtX3ByaW1h
cnlQYWdlOwotICAgICAgICBwYWdlID0gJm1fcHJpbWFyeVBhZ2U7IAorICAgIEdseXBoUGFnZSog
cGFyZW50UGFnZSA9IG1fcGFyZW50LT5tX3BhZ2U7CisKKyAgICBpZiAoZm9udERhdGEpIHsKKyAg
ICAgICAgaWYgKG1fbGV2ZWwgPT0gMSkgeworICAgICAgICAgICAgLy8gQ2hpbGRyZW4gb2YgdGhl
IHJvb3QgaG9sZCBwdXJlIHBhZ2VzLgorICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBwYWdl
TnVtYmVyICogR2x5cGhQYWdlOjpzaXplOworICAgICAgICAgICAgVUNoYXIgYnVmZmVyW0dseXBo
UGFnZTo6c2l6ZSAqIDIgKyAyXTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aDsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGk7CisKKyAgICAgICAgICAgIC8vIEZpbGwgaW4gYSBidWZm
ZXIgd2l0aCB0aGUgZW50aXJlICJwYWdlIiBvZiBjaGFyYWN0ZXJzIHRoYXQgd2Ugd2FudCB0byBs
b29rIHVwIGdseXBocyBmb3IuCisgICAgICAgICAgICBpZiAoc3RhcnQgPCAweDEwMDAwKSB7Cisg
ICAgICAgICAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplOworICAgICAgICAg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykKKyAgICAgICAgICAg
ICAgICAgICAgYnVmZmVyW2ldID0gc3RhcnQgKyBpOworCisgICAgICAgICAgICAgICAgaWYgKHN0
YXJ0ID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ29udHJvbCBjaGFyYWN0ZXJzIG11
c3Qgbm90IHJlbmRlciBhdCBhbGwuCisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg
PCAweDIwOyArK2kpCisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lk
dGhTcGFjZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMHg3RjsgaSA8IDB4QTA7IGkr
KykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9IHplcm9XaWR0aFNwYWNlOwor
CisgICAgICAgICAgICAgICAgICAgIC8vIFxuLCBcdCwgYW5kIG5vbmJyZWFraW5nIHNwYWNlIG11
c3QgcmVuZGVyIGFzIGEgc3BhY2UuCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdc
biddID0gJyAnOworICAgICAgICAgICAgICAgICAgICBidWZmZXJbKGludCknXHQnXSA9ICcgJzsK
KyAgICAgICAgICAgICAgICAgICAgYnVmZmVyW25vQnJlYWtTcGFjZV0gPSAnICc7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWZmZXJM
ZW5ndGggPSBHbHlwaFBhZ2U6OnNpemUgKiAyOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7
IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpbnQgYyA9
IGkgKyBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2kgKiAyXSA9IFUxNl9MRUFE
KGMpOworICAgICAgICAgICAgICAgICAgICBidWZmZXJbaSAqIDIgKyAxXSA9IFUxNl9UUkFJTChj
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1fcGFnZSA9IG5ldyBHbHlwaFBhZ2U7CisKKyAgICAgICAgICAgIC8vIE5vdyB0aGF0
IHdlIGhhdmUgYSBidWZmZXIgZnVsbCBvZiBjaGFyYWN0ZXJzLCB3ZSB3YW50IHRvIGdldCBiYWNr
IGFuIGFycmF5CisgICAgICAgICAgICAvLyBvZiBnbHlwaCBpbmRpY2VzLiAgVGhpcyBwYXJ0IGlu
dm9sdmVzIGNhbGxpbmcgaW50byB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgCisgICAgICAgICAgICAv
LyByb3V0aW5lIG9mIG91ciBnbHlwaCBtYXAgZm9yIGFjdHVhbGx5IGZpbGxpbmcgaW4gdGhlIHBh
Z2Ugd2l0aCB0aGUgZ2x5cGhzLgorICAgICAgICAgICAgLy8gU3VjY2VzcyBpcyBub3QgZ3VhcmFu
dGVlZC4gRm9yIGV4YW1wbGUsIFRpbWVzIGZhaWxzIHRvIGZpbGwgcGFnZSAyNjAsIGdpdmluZyBn
bHlwaCBkYXRhCisgICAgICAgICAgICAvLyBmb3Igb25seSAxMjggb3V0IG9mIDI1NiBjaGFyYWN0
ZXJzLgorICAgICAgICAgICAgYm9vbCBoYXZlR2x5cGhzID0gbV9wYWdlLT5maWxsKGJ1ZmZlciwg
YnVmZmVyTGVuZ3RoLCBmb250RGF0YSk7CisKKyAgICAgICAgICAgIGlmICghaGF2ZUdseXBocykg
eworICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BhZ2U7CisgICAgICAgICAgICAgICAgbV9wYWdl
ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEdl
dCB0aGUgcHVyZSBwYWdlIGZvciB0aGUgZmFsbGJhY2sgZm9udC4KKyAgICAgICAgICAgIEdseXBo
UGFnZSogZmFsbGJhY2tQYWdlID0gZ2V0Um9vdENoaWxkKGZvbnREYXRhLCBwYWdlTnVtYmVyKS0+
cGFnZSgpOworICAgICAgICAgICAgaWYgKCFwYXJlbnRQYWdlKQorICAgICAgICAgICAgICAgIG1f
cGFnZSA9IGZhbGxiYWNrUGFnZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFmYWxsYmFja1BhZ2Up
IHsKKyAgICAgICAgICAgICAgICBtX3BhZ2UgPSBwYXJlbnRQYWdlOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBtX3BhZ2UgPSBuZXcgR2x5cGhQYWdlOworCisgICAgICAg
ICAgICAgICAgLy8gT3ZlcmxheSB0aGUgcGFyZW50IHBhZ2Ugb24gdGhlIGZhbGxiYWNrIHBhZ2Uu
IENoZWNrIGlmIHRoZSBmYWxsYmFjayBmb250CisgICAgICAgICAgICAgICAgLy8gaGFzIGFkZGVk
IGFueXRoaW5nLgorICAgICAgICAgICAgICAgIGJvb2wgbmV3R2x5cGhzID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRQYWdlLT5tX2dseXBoc1tpXS5nbHlw
aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFnZS0+bV9nbHlwaHNbaV0gPSBwYXJlbnRQ
YWdlLT5tX2dseXBoc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSAgaWYgKGZhbGxiYWNr
UGFnZS0+bV9nbHlwaHNbaV0uZ2x5cGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFn
ZS0+bV9nbHlwaHNbaV0gPSBmYWxsYmFja1BhZ2UtPm1fZ2x5cGhzW2ldOworICAgICAgICAgICAg
ICAgICAgICAgICAgbmV3R2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdseXBoRGF0YSBkYXRhID0geyAwLCAw
IH07CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BhZ2UtPm1fZ2x5cGhzW2ldID0gZGF0YTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmICghbmV3R2x5cGhzKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BhZ2U7
CisgICAgICAgICAgICAgICAgICAgIG1fcGFnZSA9IHBhcmVudFBhZ2U7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KG1fcGFnZXMpIHsKLSAgICAgICAgICAgIEdseXBoUGFnZSogcmVzdWx0ID0gbV9wYWdlcy0+Z2V0
KHBhZ2VOdW1iZXIpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICBtX3BhZ2UgPSBuZXcgR2x5cGhQYWdlOworICAgICAgICAv
LyBTeXN0ZW0gZmFsbGJhY2suIEluaXRpYWxpemVkIHdpdGggdGhlIHBhcmVudCdzIHBhZ2UgaGVy
ZSwgYXMgaW5kaXZpZHVhbAorICAgICAgICAvLyBlbnRyaWVzIG1heSB1c2UgZGlmZmVyZW50IGZv
bnRzIGRlcGVuZGluZyBvbiBjaGFyYWN0ZXIuCisgICAgICAgIGlmIChwYXJlbnRQYWdlKQorICAg
ICAgICAgICAgbWVtY3B5KG1fcGFnZS0+bV9nbHlwaHMsIHBhcmVudFBhZ2UtPm1fZ2x5cGhzLCBH
bHlwaFBhZ2U6OnNpemUgKiBzaXplb2YobV9wYWdlLT5tX2dseXBoc1swXSkpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGNvbnN0IEdseXBoRGF0YSBkYXRhID0geyAwLCAwIH07CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspCisg
ICAgICAgICAgICAgICAgbV9wYWdlLT5tX2dseXBoc1tpXSA9IGRhdGE7CiAgICAgICAgIH0KLSAg
ICAgICAgcGFnZSA9IG5ldyBHbHlwaFBhZ2U7CiAgICAgfQotICAgICAgCi0gICAgdW5zaWduZWQg
c3RhcnQgPSBwYWdlTnVtYmVyICogR2x5cGhQYWdlOjpzaXplOwotICAgIFVDaGFyIGJ1ZmZlcltH
bHlwaFBhZ2U6OnNpemUgKiAyICsgMl07Ci0gICAgdW5zaWduZWQgYnVmZmVyTGVuZ3RoOwotICAg
IHVuc2lnbmVkIGk7Ci0KLSAgICAvLyBGaWxsIGluIGEgYnVmZmVyIHdpdGggdGhlIGVudGlyZSAi
cGFnZSIgb2YgY2hhcmFjdGVycyB0aGF0IHdlIHdhbnQgdG8gbG9vayB1cCBnbHlwaHMgZm9yLgot
ICAgIGlmIChzdGFydCA8IDB4MTAwMDApIHsKLSAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQ
YWdlOjpzaXplOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKysp
Ci0gICAgICAgICAgICBidWZmZXJbaV0gPSBzdGFydCArIGk7Ci0KLSAgICAgICAgaWYgKHN0YXJ0
ID09IDApIHsKLSAgICAgICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCByZW5k
ZXIgYXQgYWxsLgotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDB4MjA7ICsraSkKLSAgICAg
ICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKLSAgICAgICAgICAgIGZvciAo
aSA9IDB4N0Y7IGkgPCAweEEwOyBpKyspCi0gICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVy
b1dpZHRoU3BhY2U7Ci0KLSAgICAgICAgICAgIC8vIFxuLCBcdCwgYW5kIG5vbmJyZWFraW5nIHNw
YWNlIG11c3QgcmVuZGVyIGFzIGEgc3BhY2UuCi0gICAgICAgICAgICBidWZmZXJbKGludCknXG4n
XSA9ICcgJzsKLSAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdcdCddID0gJyAnOwotICAgICAgICAg
ICAgYnVmZmVyW25vQnJlYWtTcGFjZV0gPSAnICc7CisgICAgcmV0dXJuIChtX3BhZ2UgPT0gcGFy
ZW50UGFnZSk7Cit9CisKK0dseXBoUGFnZVRyZWVOb2RlKiBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0
Q2hpbGQoY29uc3QgRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25lZCBwYWdlTnVtYmVyKQorewor
ICAgIEFTU0VSVChmb250RGF0YSB8fCAhbV9pc1N5c3RlbUZhbGxiYWNrKTsKKyAgICBBU1NFUlQo
cGFnZU51bWJlciA9PSBtX3BhZ2VOdW1iZXIpOworCisgICAgR2x5cGhQYWdlVHJlZU5vZGUqIGNo
aWxkID0gZm9udERhdGEgPyBtX2NoaWxkcmVuLmdldChmb250RGF0YSkgOiBtX3N5c3RlbUZhbGxi
YWNrQ2hpbGQ7CisgICAgaWYgKCFjaGlsZCkgeworICAgICAgICBjaGlsZCA9IG5ldyBHbHlwaFBh
Z2VUcmVlTm9kZTsKKyAgICAgICAgY2hpbGQtPm1fcGFyZW50ID0gdGhpczsKKyAgICAgICAgY2hp
bGQtPm1fbGV2ZWwgPSBtX2xldmVsICsgMTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGNoaWxk
LT5tX3BhZ2VOdW1iZXIgPSBtX3BhZ2VOdW1iZXI7CisjZW5kaWYKKyAgICAgICAgaWYgKCFjaGls
ZC0+aW5pdGlhbGl6ZVBhZ2UoZm9udERhdGEsIHBhZ2VOdW1iZXIpKSB7CisgICAgICAgICAgICBk
ZWxldGUgY2hpbGQ7CisgICAgICAgICAgICBjaGlsZCA9IHRoaXM7CiAgICAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgICBidWZmZXJMZW5ndGggPSBHbHlwaFBhZ2U6OnNpemUgKiAyOwotICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKLSAgICAgICAgICAg
IGludCBjID0gaSArIHN0YXJ0OwotICAgICAgICAgICAgYnVmZmVyW2kgKiAyXSA9IFUxNl9MRUFE
KGMpOwotICAgICAgICAgICAgYnVmZmVyW2kgKiAyICsgMV0gPSBVMTZfVFJBSUwoYyk7CisKKyAg
ICAgICAgaWYgKGZvbnREYXRhKQorICAgICAgICAgICAgbV9jaGlsZHJlbi5zZXQoZm9udERhdGEs
IGNoaWxkKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX3N5c3RlbUZhbGxiYWNrQ2hp
bGQgPSBjaGlsZDsKKyAgICAgICAgICAgIGNoaWxkLT5tX2lzU3lzdGVtRmFsbGJhY2sgPSB0cnVl
OwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBidWZm
ZXIgZnVsbCBvZiBjaGFyYWN0ZXJzLCB3ZSB3YW50IHRvIGdldCBiYWNrIGFuIGFycmF5Ci0gICAg
Ly8gb2YgZ2x5cGggaW5kaWNlcy4gIFRoaXMgcGFydCBpbnZvbHZlcyBjYWxsaW5nIGludG8gdGhl
IHBsYXRmb3JtLXNwZWNpZmljIAotICAgIC8vIHJvdXRpbmUgb2Ygb3VyIGdseXBoIG1hcCBmb3Ig
YWN0dWFsbHkgZmlsbGluZyBpbiB0aGUgcGFnZSB3aXRoIHRoZSBnbHlwaHMuCi0gICAgYm9vbCBz
dWNjZXNzID0gZmlsbFBhZ2UocGFnZSwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsK
LSAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgaWYgKHBhZ2VOdW1iZXIgIT0gMCkKLSAgICAg
ICAgICAgIGRlbGV0ZSBwYWdlOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKHBhZ2VOdW1iZXIgPT0gMCkKLSAgICAgICAgbV9maWxsZWRQcmltYXJ5UGFnZSA9IHRydWU7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICghbV9wYWdlcykKLSAgICAgICAgICAgIG1fcGFnZXMg
PSBuZXcgSGFzaE1hcDxpbnQsIEdseXBoUGFnZSo+OwotICAgICAgICBtX3BhZ2VzLT5zZXQocGFn
ZU51bWJlciwgcGFnZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhZ2U7CisgICAgcmV0dXJuIGNo
aWxkOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0dseXBoUGFnZVRyZWVOb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9HbHlwaFBhZ2VUcmVlTm9kZS5oCShyZXZp
c2lvbiAxODg4MSkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9HbHlwaE1hcC5oOjE4ODgxKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9HbHlwaFBhZ2VUcmVlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHbHlwaE1hcF9oCisjZGVmaW5lIEds
eXBoTWFwX2gKKworI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEZvbnREYXRhOworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IEds
eXBoOworCitzdHJ1Y3QgR2x5cGhEYXRhIHsgICAgCisgICAgR2x5cGggZ2x5cGg7CisgICAgY29u
c3QgRm9udERhdGEqIGZvbnREYXRhOworfTsKKworY2xhc3MgR2x5cGhNYXAgOiBOb25jb3B5YWJs
ZSB7CitwdWJsaWM6CisgICAgR2x5cGhNYXAoKSA6IG1fZmlsbGVkUHJpbWFyeVBhZ2UoZmFsc2Up
LCBtX3BhZ2VzKDApIHt9CisgICAgfkdseXBoTWFwKCkgeyBpZiAobV9wYWdlcykgeyBkZWxldGVB
bGxWYWx1ZXMoKm1fcGFnZXMpOyBkZWxldGUgbV9wYWdlczsgfSB9CisKKyAgICBHbHlwaERhdGEg
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZvbnREYXRhKik7CisgICAgdm9p
ZCBzZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgR2x5cGgsIGNvbnN0IEZvbnREYXRh
Kik7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IEdseXBoUGFnZSB7CisgICAgICAgIHN0YXRpYyBj
b25zdCBzaXplX3Qgc2l6ZSA9IDI1NjsgLy8gQ292ZXJzIExhdGluLTEgaW4gYSBzaW5nbGUgcGFn
ZS4KKyAgICAgICAgR2x5cGhEYXRhIG1fZ2x5cGhzW3NpemVdOworCisgICAgICAgIGNvbnN0IEds
eXBoRGF0YSYgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QgeyByZXR1cm4g
bV9nbHlwaHNbYyAlIHNpemVdOyB9CisgICAgICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKFVDaGFyMzIgYywgR2x5cGggZywgY29uc3QgRm9udERhdGEqIGYpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGMgJSBzaXplLCBnLCBmKTsKKyAgICAgICAg
fQorICAgICAgICB2b2lkIHNldEdseXBoRGF0YUZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBHbHlw
aCBnLCBjb25zdCBGb250RGF0YSogZikKKyAgICAgICAgeworICAgICAgICAgICAgbV9nbHlwaHNb
aW5kZXhdLmdseXBoID0gZzsKKyAgICAgICAgICAgIG1fZ2x5cGhzW2luZGV4XS5mb250RGF0YSA9
IGY7CisgICAgICAgIH0KKyAgICB9OworCisgICAgR2x5cGhQYWdlKiBsb2NhdGVQYWdlKHVuc2ln
bmVkIHBhZ2UsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSk7CisgICAgYm9vbCBmaWxsUGFnZShH
bHlwaFBhZ2UqLCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgs
IGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSk7CisKKyAgICBib29sIG1fZmlsbGVkUHJpbWFyeVBh
Z2U7CisgICAgR2x5cGhQYWdlIG1fcHJpbWFyeVBhZ2U7IC8vIFdlIG9wdGltaXplIGZvciB0aGUg
cGFnZSB0aGF0IGNvbnRhaW5zIExhdGluLTEuCisgICAgSGFzaE1hcDxpbnQsIEdseXBoUGFnZSo+
KiBtX3BhZ2VzOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vR2x5
cGhQYWdlVHJlZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0dseXBoUGFn
ZVRyZWVOb2RlLmgJKHJldmlzaW9uIDE4ODgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9HbHlwaFBh
Z2VUcmVlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKLSNpZm5kZWYgR2x5cGhNYXBfaAotI2RlZmluZSBHbHlwaE1hcF9oCisjaWZuZGVm
IEdseXBoUGFnZVRyZWVOb2RlX2gKKyNkZWZpbmUgR2x5cGhQYWdlVHJlZU5vZGVfaAogCiAjaW5j
bHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgpAQCAtNDQsMzkgKzQ0LDY1IEBAIHN0cnVjdCBHbHlwaERhdGEgeyAgICAKICAgICBjb25zdCBG
b250RGF0YSogZm9udERhdGE7CiB9OwogCi1jbGFzcyBHbHlwaE1hcCA6IE5vbmNvcHlhYmxlIHsK
K3N0cnVjdCBHbHlwaFBhZ2UgeworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDI1Njsg
Ly8gQ292ZXJzIExhdGluLTEgaW4gYSBzaW5nbGUgcGFnZS4KKyAgICBHbHlwaERhdGEgbV9nbHlw
aHNbc2l6ZV07CisKKyAgICBjb25zdCBHbHlwaERhdGEmIGdseXBoRGF0YUZvckNoYXJhY3RlcihV
Q2hhcjMyIGMpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzW2MgJSBzaXplXTsgfQorICAgIHZvaWQg
c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgR2x5cGggZywgY29uc3QgRm9udERh
dGEqIGYpCisgICAgeworICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChjICUgc2l6ZSwgZywg
Zik7CisgICAgfQorICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9ySW5kZXgodW5zaWduZWQgaW5kZXgs
IEdseXBoIGcsIGNvbnN0IEZvbnREYXRhKiBmKQorICAgIHsKKyAgICAgICAgbV9nbHlwaHNbaW5k
ZXhdLmdseXBoID0gZzsKKyAgICAgICAgbV9nbHlwaHNbaW5kZXhdLmZvbnREYXRhID0gZjsKKyAg
ICB9CisgICAgLy8gSW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgorICAgIGJvb2wgZmlsbChV
Q2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnRE
YXRhKiBmb250RGF0YSk7Cit9OworCitjbGFzcyBHbHlwaFBhZ2VUcmVlTm9kZSB7CiBwdWJsaWM6
Ci0gICAgR2x5cGhNYXAoKSA6IG1fZmlsbGVkUHJpbWFyeVBhZ2UoZmFsc2UpLCBtX3BhZ2VzKDAp
IHt9Ci0gICAgfkdseXBoTWFwKCkgeyBpZiAobV9wYWdlcykgeyBkZWxldGVBbGxWYWx1ZXMoKm1f
cGFnZXMpOyBkZWxldGUgbV9wYWdlczsgfSB9CisgICAgR2x5cGhQYWdlVHJlZU5vZGUoKQorICAg
ICAgICA6IG1fcGFyZW50KDApCisgICAgICAgICwgbV9wYWdlKDApCisgICAgICAgICwgbV9sZXZl
bCgwKQorICAgICAgICAsIG1faXNTeXN0ZW1GYWxsYmFjayhmYWxzZSkKKyAgICAgICAgLCBtX3N5
c3RlbUZhbGxiYWNrQ2hpbGQoMCkKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICwgbV9wYWdlTnVt
YmVyKDApCisjZW5kaWYKKyAgICB7CisgICAgfQogCi0gICAgR2x5cGhEYXRhIGdseXBoRGF0YUZv
ckNoYXJhY3RlcihVQ2hhcjMyLCBjb25zdCBGb250RGF0YSopOwotICAgIHZvaWQgc2V0R2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIEdseXBoLCBjb25zdCBGb250RGF0YSopOworICAgIHN0
YXRpYyBHbHlwaFBhZ2VUcmVlTm9kZSogZ2V0Um9vdCh1bnNpZ25lZCBwYWdlTnVtYmVyKTsKKyAg
ICBzdGF0aWMgR2x5cGhQYWdlVHJlZU5vZGUqIGdldFJvb3RDaGlsZChjb25zdCBGb250RGF0YSog
Zm9udERhdGEsIHVuc2lnbmVkIHBhZ2VOdW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0
Um9vdChwYWdlTnVtYmVyKS0+Z2V0Q2hpbGQoZm9udERhdGEsIHBhZ2VOdW1iZXIpOworICAgIH0K
KworICAgIEdseXBoUGFnZVRyZWVOb2RlKiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVu
dDsgfQorICAgIEdseXBoUGFnZVRyZWVOb2RlKiBnZXRDaGlsZChjb25zdCBGb250RGF0YSosIHVu
c2lnbmVkIHBhZ2VOdW1iZXIpOworCisgICAgR2x5cGhQYWdlKiBwYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9wYWdlOyB9CisgICAgdW5zaWduZWQgbGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX2xldmVs
OyB9CisgICAgYm9vbCBpc1N5c3RlbUZhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9pc1N5c3Rl
bUZhbGxiYWNrOyB9CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0IEdseXBoUGFnZSB7Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDI1NjsgLy8gQ292ZXJzIExhdGluLTEgaW4gYSBz
aW5nbGUgcGFnZS4KLSAgICAgICAgR2x5cGhEYXRhIG1fZ2x5cGhzW3NpemVdOwotCi0gICAgICAg
IGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3Qg
eyByZXR1cm4gbV9nbHlwaHNbYyAlIHNpemVdOyB9Ci0gICAgICAgIHZvaWQgc2V0R2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgR2x5cGggZywgY29uc3QgRm9udERhdGEqIGYpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGMgJSBzaXplLCBnLCBmKTsK
LSAgICAgICAgfQotICAgICAgICB2b2lkIHNldEdseXBoRGF0YUZvckluZGV4KHVuc2lnbmVkIGlu
ZGV4LCBHbHlwaCBnLCBjb25zdCBGb250RGF0YSogZikKLSAgICAgICAgewotICAgICAgICAgICAg
bV9nbHlwaHNbaW5kZXhdLmdseXBoID0gZzsKLSAgICAgICAgICAgIG1fZ2x5cGhzW2luZGV4XS5m
b250RGF0YSA9IGY7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgR2x5cGhQYWdlKiBsb2NhdGVQ
YWdlKHVuc2lnbmVkIHBhZ2UsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSk7Ci0gICAgYm9vbCBm
aWxsUGFnZShHbHlwaFBhZ2UqLCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNpZ25lZCBidWZm
ZXJMZW5ndGgsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSk7Ci0KLSAgICBib29sIG1fZmlsbGVk
UHJpbWFyeVBhZ2U7Ci0gICAgR2x5cGhQYWdlIG1fcHJpbWFyeVBhZ2U7IC8vIFdlIG9wdGltaXpl
IGZvciB0aGUgcGFnZSB0aGF0IGNvbnRhaW5zIExhdGluLTEuCi0gICAgSGFzaE1hcDxpbnQsIEds
eXBoUGFnZSo+KiBtX3BhZ2VzOworICAgIGJvb2wgaW5pdGlhbGl6ZVBhZ2UoY29uc3QgRm9udERh
dGEqLCB1bnNpZ25lZCBwYWdlTnVtYmVyKTsKKworICAgIEdseXBoUGFnZVRyZWVOb2RlKiBtX3Bh
cmVudDsKKyAgICBHbHlwaFBhZ2UqIG1fcGFnZTsKKyAgICB1bnNpZ25lZCBtX2xldmVsOworICAg
IGJvb2wgbV9pc1N5c3RlbUZhbGxiYWNrOworICAgIEhhc2hNYXA8Y29uc3QgRm9udERhdGEqLCBH
bHlwaFBhZ2VUcmVlTm9kZSo+IG1fY2hpbGRyZW47CisgICAgR2x5cGhQYWdlVHJlZU5vZGUqIG1f
c3lzdGVtRmFsbGJhY2tDaGlsZDsKKyNpZm5kZWYgTkRFQlVHCisgICAgdW5zaWduZWQgbV9wYWdl
TnVtYmVyOworI2VuZGlmCiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRp
ZgorI2VuZGlmIC8vIEdseXBoUGFnZVRyZWVOb2RlX2gKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL0dseXBoTWFwR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9H
bHlwaE1hcEdkay5jcHAJKHJldmlzaW9uIDE4ODgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
R2x5cGhNYXBHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbSAKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkdseXBoTWFwLmgiCi0KLSNpbmNsdWRlICJGb250RGF0YS5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWJvb2wgR2x5cGhNYXA6OmZpbGxQYWdlKEdseXBoUGFnZSogcGFnZSwgVUNo
YXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9udERh
dGEpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1ZmZlckxlbmd0aDsgaSsrKQot
ICAgICAgICBwYWdlLT5zZXRHbHlwaERhdGFGb3JJbmRleChpLCBmb250RGF0YS0+Z2V0R2x5cGhJ
bmRleChidWZmZXJbaV0pLCBmb250RGF0YSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0dseXBoUGFnZVRyZWVOb2RlR2RrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9HbHlwaFBhZ2VUcmVlTm9kZUdkay5jcHAJKHJl
dmlzaW9uIDE4ODgxKQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9HbHlwaE1hcEdkay5jcHA6
MTg4ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9HbHlwaFBhZ2VUcmVlTm9kZUdkay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhNYXAu
aCIKKworI2luY2x1ZGUgIkZvbnREYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9v
bCBHbHlwaE1hcDo6ZmlsbFBhZ2UoR2x5cGhQYWdlKiBwYWdlLCBVQ2hhciogYnVmZmVyLCB1bnNp
Z25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspCisgICAgICAgIHBhZ2UtPnNl
dEdseXBoRGF0YUZvckluZGV4KGksIGZvbnREYXRhLT5nZXRHbHlwaEluZGV4KGJ1ZmZlcltpXSks
IGZvbnREYXRhKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvR2x5cGhQYWdlVHJlZU5vZGVHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL0dseXBoUGFnZVRyZWVOb2RlR2RrLmNwcAkocmV2aXNpb24gMTg4ODEpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dkay9HbHlwaFBhZ2VUcmVlTm9kZUdkay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDE2ICsyOSwxNiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJHbHlwaE1hcC5oIgorI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCiAKICNp
bmNsdWRlICJGb250RGF0YS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgR2x5cGhN
YXA6OmZpbGxQYWdlKEdseXBoUGFnZSogcGFnZSwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVm
ZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpCitib29sIEdseXBoUGFnZTo6Zmls
bChVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnREYXRhKiBm
b250RGF0YSkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBp
KyspCi0gICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckluZGV4KGksIGZvbnREYXRhLT5nZXRH
bHlwaEluZGV4KGJ1ZmZlcltpXSksIGZvbnREYXRhKTsKKyAgICAgICAgc2V0R2x5cGhEYXRhRm9y
SW5kZXgoaSwgZm9udERhdGEtPmdldEdseXBoSW5kZXgoYnVmZmVyW2ldKSwgZm9udERhdGEpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9Gb250RGF0
YU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9Gb250RGF0YU1hYy5t
bQkocmV2aXNpb24gMTg4ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9Gb250RGF0YU1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTgwLDcgKzE4MCw3IEBAIHZvaWQgRm9udERhdGE6OnBsYXRm
b3JtSW5pdCgpCiAgICAgCiAgICAgLy8gTWVhc3VyZSB0aGUgYWN0dWFsIGNoYXJhY3RlciAieCIs
IGJlY2F1c2UgQXBwS2l0IHN5bnRoZXNpemVzIFggaGVpZ2h0IHJhdGhlciB0aGFuIGdldHRpbmcg
aXQgZnJvbSB0aGUgZm9udC4KICAgICAvLyBVbmZvcnR1bmF0ZWx5LCBOU0ZvbnQgd2lsbCByb3Vu
ZCB0aGlzIGZvciB1cyBzbyB3ZSBkb24ndCBxdWl0ZSBnZXQgdGhlIHJpZ2h0IHZhbHVlLgotICAg
IE5TR2x5cGggeEdseXBoID0gbV9jaGFyYWN0ZXJUb0dseXBoTWFwLmdseXBoRGF0YUZvckNoYXJh
Y3RlcigneCcsIHRoaXMpLmdseXBoOworICAgIE5TR2x5cGggeEdseXBoID0gR2x5cGhQYWdlVHJl
ZU5vZGU6OmdldFJvb3RDaGlsZCh0aGlzLCAwKS0+cGFnZSgpLT5nbHlwaERhdGFGb3JDaGFyYWN0
ZXIoJ3gnKS5nbHlwaDsKICAgICBpZiAoeEdseXBoKSB7CiAgICAgICAgIE5TUmVjdCB4Qm94ID0g
W21fZm9udC5mb250IGJvdW5kaW5nUmVjdEZvckdseXBoOnhHbHlwaF07CiAgICAgICAgIC8vIFVz
ZSB0aGUgbWF4aW11bSBvZiBlaXRoZXIgd2lkdGggb3IgaGVpZ2h0IGJlY2F1c2UgIngiIGlzIG5l
YXJseSBzcXVhcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0ZvbnRNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRm9udE1hYy5tbQkocmV2aXNpb24gMTg4ODEp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9Gb250TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00
MjEsNyArNDIxLDkgQEAgc3RhdGljIHZvaWQgZGlzcG9zZUFUU1VMYXlvdXRQYXJhbWV0ZXJzKAog
fQogCiBGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhLCBib29sIGlz
UHJpbnRlckZvbnQpCi06bV9sZXR0ZXJTcGFjaW5nKDApLCBtX3dvcmRTcGFjaW5nKDApCisgICAg
OiBtX3BhZ2VaZXJvKDApCisgICAgLCBtX2xldHRlclNwYWNpbmcoMCkKKyAgICAsIG1fd29yZFNw
YWNpbmcoMCkKIHsKICAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRVc2VQcmludGVyRm9udChpc1By
aW50ZXJGb250KTsKICAgICBtX2ZvbnRMaXN0ID0gbmV3IEZvbnRGYWxsYmFja0xpc3QoKTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0dseXBoTWFwTWFjLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL21hYy9HbHlwaE1hcE1hYy5jcHAJKHJldmlzaW9uIDE4ODgxKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvR2x5cGhNYXBNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkdseXBoTWFwLmgiCi0KLSNpbmNsdWRlICJGb250RGF0YS5oIgotI2luY2x1ZGUgIldlYkNvcmVT
eXN0ZW1JbnRlcmZhY2UuaCIKLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0
aW9uU2VydmljZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIEdseXBoTWFwOjpm
aWxsUGFnZShHbHlwaFBhZ2UqIHBhZ2UsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxl
bmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQotewotICAgIC8vIFVzZSBhbiBhcnJheSBv
ZiBsb25nIHNvIHdlIGdldCBnb29kIGVub3VnaCBhbGlnbm1lbnQuCi0gICAgbG9uZyBnbHlwaFZl
Y3RvclsoR0xZUEhfVkVDVE9SX1NJWkUgKyBzaXplb2YobG9uZykgLSAxKSAvIHNpemVvZihsb25n
KV07Ci0gICAgCi0gICAgT1NTdGF0dXMgc3RhdHVzID0gd2tJbml0aWFsaXplR2x5cGhWZWN0b3Io
R2x5cGhQYWdlOjpzaXplLCAmZ2x5cGhWZWN0b3IpOwotICAgIGlmIChzdGF0dXMgIT0gbm9FcnIp
Ci0gICAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgcGVyaGFwcyBpbmRpY2F0ZXMg
YSBiYWQgZm9udCEgIElmIGl0IGRvZXMgdGhlCi0gICAgICAgIC8vIGZvbnQgc3Vic3RpdHV0aW9u
IGNvZGUgd2lsbCBmaW5kIGFuIGFsdGVybmF0ZSBmb250LgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICB3a0NvbnZlcnRDaGFyVG9HbHlwaHMoZm9udERhdGEtPm1fc3R5bGVHcm91cCwgYnVm
ZmVyLCBidWZmZXJMZW5ndGgsICZnbHlwaFZlY3Rvcik7Ci0KLSAgICB1bnNpZ25lZCBudW1HbHlw
aHMgPSB3a0dldEdseXBoVmVjdG9yTnVtR2x5cGhzKCZnbHlwaFZlY3Rvcik7Ci0gICAgaWYgKG51
bUdseXBocyAhPSBHbHlwaFBhZ2U6OnNpemUpIHsKLSAgICAgICAgLy8gVGhpcyBzaG91bGQgbmV2
ZXIgaGFwcGVuLCBwZXJoYXBzIGluZGljYXRlcyBhIGJhZCBmb250PwotICAgICAgICAvLyBJZiBp
dCBkb2VzIGhhcHBlbiwgdGhlIGZvbnQgc3Vic3RpdHV0aW9uIGNvZGUgd2lsbCBmaW5kIGFuIGFs
dGVybmF0ZSBmb250LgotICAgICAgICB3a0NsZWFyR2x5cGhWZWN0b3IoJmdseXBoVmVjdG9yKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEFUU0xheW91dFJlY29yZCogZ2x5
cGhSZWNvcmQgPSAoQVRTTGF5b3V0UmVjb3JkKil3a0dldEdseXBoVmVjdG9yRmlyc3RSZWNvcmQo
Z2x5cGhWZWN0b3IpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNp
emU7IGkrKykgewotICAgICAgICBwYWdlLT5zZXRHbHlwaERhdGFGb3JJbmRleChpLCBnbHlwaFJl
Y29yZC0+Z2x5cGhJRCwgZm9udERhdGEpOwotICAgICAgICBnbHlwaFJlY29yZCA9IChBVFNMYXlv
dXRSZWNvcmQgKikoKGNoYXIgKilnbHlwaFJlY29yZCArIHdrR2V0R2x5cGhWZWN0b3JSZWNvcmRT
aXplKGdseXBoVmVjdG9yKSk7Ci0gICAgfQotICAgIHdrQ2xlYXJHbHlwaFZlY3RvcigmZ2x5cGhW
ZWN0b3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFjLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9HbHlwaFBhZ2VUcmVlTm9kZU1hYy5jcHAJ
KHJldmlzaW9uIDE4ODgxKQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL21hYy9HbHlwaE1hcE1hYy5j
cHA6MTg4ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9HbHlwaFBhZ2VUcmVlTm9kZU1hYy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhNYXAuaCIKKworI2luY2x1ZGUgIkZvbnREYXRh
LmgiCisjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2luY2x1ZGUgPEFwcGxp
Y2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2Jvb2wgR2x5cGhNYXA6OmZpbGxQYWdlKEdseXBoUGFnZSogcGFnZSwgVUNoYXIqIGJ1
ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpCit7
CisgICAgLy8gVXNlIGFuIGFycmF5IG9mIGxvbmcgc28gd2UgZ2V0IGdvb2QgZW5vdWdoIGFsaWdu
bWVudC4KKyAgICBsb25nIGdseXBoVmVjdG9yWyhHTFlQSF9WRUNUT1JfU0laRSArIHNpemVvZihs
b25nKSAtIDEpIC8gc2l6ZW9mKGxvbmcpXTsKKyAgICAKKyAgICBPU1N0YXR1cyBzdGF0dXMgPSB3
a0luaXRpYWxpemVHbHlwaFZlY3RvcihHbHlwaFBhZ2U6OnNpemUsICZnbHlwaFZlY3Rvcik7Cisg
ICAgaWYgKHN0YXR1cyAhPSBub0VycikKKyAgICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFw
cGVuLCBwZXJoYXBzIGluZGljYXRlcyBhIGJhZCBmb250ISAgSWYgaXQgZG9lcyB0aGUKKyAgICAg
ICAgLy8gZm9udCBzdWJzdGl0dXRpb24gY29kZSB3aWxsIGZpbmQgYW4gYWx0ZXJuYXRlIGZvbnQu
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHdrQ29udmVydENoYXJUb0dseXBocyhmb250
RGF0YS0+bV9zdHlsZUdyb3VwLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgJmdseXBoVmVjdG9yKTsK
KworICAgIHVuc2lnbmVkIG51bUdseXBocyA9IHdrR2V0R2x5cGhWZWN0b3JOdW1HbHlwaHMoJmds
eXBoVmVjdG9yKTsKKyAgICBpZiAobnVtR2x5cGhzICE9IEdseXBoUGFnZTo6c2l6ZSkgeworICAg
ICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIHBlcmhhcHMgaW5kaWNhdGVzIGEgYmFk
IGZvbnQ/CisgICAgICAgIC8vIElmIGl0IGRvZXMgaGFwcGVuLCB0aGUgZm9udCBzdWJzdGl0dXRp
b24gY29kZSB3aWxsIGZpbmQgYW4gYWx0ZXJuYXRlIGZvbnQuCisgICAgICAgIHdrQ2xlYXJHbHlw
aFZlY3RvcigmZ2x5cGhWZWN0b3IpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgQVRTTGF5b3V0UmVjb3JkKiBnbHlwaFJlY29yZCA9IChBVFNMYXlvdXRSZWNvcmQqKXdrR2V0
R2x5cGhWZWN0b3JGaXJzdFJlY29yZChnbHlwaFZlY3Rvcik7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7CisgICAgICAgIHBhZ2UtPnNldEdseXBo
RGF0YUZvckluZGV4KGksIGdseXBoUmVjb3JkLT5nbHlwaElELCBmb250RGF0YSk7CisgICAgICAg
IGdseXBoUmVjb3JkID0gKEFUU0xheW91dFJlY29yZCAqKSgoY2hhciAqKWdseXBoUmVjb3JkICsg
d2tHZXRHbHlwaFZlY3RvclJlY29yZFNpemUoZ2x5cGhWZWN0b3IpKTsKKyAgICB9CisgICAgd2tD
bGVhckdseXBoVmVjdG9yKCZnbHlwaFZlY3Rvcik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvR2x5cGhQ
YWdlVHJlZU5vZGVNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0ds
eXBoUGFnZVRyZWVOb2RlTWFjLmNwcAkocmV2aXNpb24gMTg4ODEpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL21hYy9HbHlwaFBhZ2VUcmVlTm9kZU1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcg
KzI3LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhNYXAu
aCIKKyNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgogCiAjaW5jbHVkZSAiRm9udERhdGEu
aCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCkBAIC0zNSw3ICszNSw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBHbHlwaE1hcDo6ZmlsbFBhZ2UoR2x5cGhQ
YWdlKiBwYWdlLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZv
bnREYXRhKiBmb250RGF0YSkKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVu
c2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQogewogICAgIC8v
IFVzZSBhbiBhcnJheSBvZiBsb25nIHNvIHdlIGdldCBnb29kIGVub3VnaCBhbGlnbm1lbnQuCiAg
ICAgbG9uZyBnbHlwaFZlY3RvclsoR0xZUEhfVkVDVE9SX1NJWkUgKyBzaXplb2YobG9uZykgLSAx
KSAvIHNpemVvZihsb25nKV07CkBAIC01NiwxNCArNTYsMTggQEAgYm9vbCBHbHlwaE1hcDo6Zmls
bFBhZ2UoR2x5cGhQYWdlKiBwYWdlLAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisg
ICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7CiAgICAgQVRTTGF5b3V0UmVjb3JkKiBnbHlwaFJl
Y29yZCA9IChBVFNMYXlvdXRSZWNvcmQqKXdrR2V0R2x5cGhWZWN0b3JGaXJzdFJlY29yZChnbHlw
aFZlY3Rvcik7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsg
aSsrKSB7Ci0gICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckluZGV4KGksIGdseXBoUmVjb3Jk
LT5nbHlwaElELCBmb250RGF0YSk7CisgICAgICAgIEdseXBoIGdseXBoID0gZ2x5cGhSZWNvcmQt
PmdseXBoSUQ7CisgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGksIGdseXBoLCBmb250RGF0
YSk7CisgICAgICAgIGlmICghaGF2ZUdseXBocyAmJiBnbHlwaCkKKyAgICAgICAgICAgIGhhdmVH
bHlwaHMgPSB0cnVlOwogICAgICAgICBnbHlwaFJlY29yZCA9IChBVFNMYXlvdXRSZWNvcmQgKiko
KGNoYXIgKilnbHlwaFJlY29yZCArIHdrR2V0R2x5cGhWZWN0b3JSZWNvcmRTaXplKGdseXBoVmVj
dG9yKSk7CiAgICAgfQogICAgIHdrQ2xlYXJHbHlwaFZlY3RvcigmZ2x5cGhWZWN0b3IpOwogCi0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGhhdmVHbHlwaHM7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvR2x5cGhNYXBRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9HbHlwaE1hcFF0LmNwcAkocmV2aXNpb24g
MTg4ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L0dseXBoTWFwUXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0
YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxs
ZXIgPG11ZWxsZXJAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6
YWNrQGtkZS5vcmc+Ci0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhNYXAuaCIKLQotI2luY2x1ZGUgIkZvbnREYXRh
LmgiCi0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBHbHlwaE1hcDo6ZmlsbFBh
Z2UoR2x5cGhQYWdlKiBwYWdlLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgs
IGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKLXsKLSAgICBib29sIGlzVXRmMTYgPSBidWZmZXJM
ZW5ndGggIT0gR2x5cGhQYWdlOjpzaXplOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7Ci0gICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOwotCi0g
ICAgICAgIGlmKGlzVXRmMTYpIHsKLSAgICAgICAgICAgIFVDaGFyIGxlYWQgPSBidWZmZXJbaSAq
IDJdOwotICAgICAgICAgICAgVUNoYXIgdHJhaWwgPSBidWZmZXJbaSAqIDIgKyAxXTsKLSAgICAg
ICAgICAgIGNoYXJhY3RlciA9IFUxNl9HRVRfU1VQUExFTUVOVEFSWShsZWFkLCB0cmFpbCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjaGFyYWN0ZXIgPSBidWZmZXJbaV07Ci0gICAg
ICAgIH0KLQotICAgICAgICBwYWdlLT5zZXRHbHlwaERhdGFGb3JJbmRleChpLCBjaGFyYWN0ZXIs
IGZvbnREYXRhKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQotCi0vLyB2aW06
IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9HbHlwaFBhZ2VUcmVlTm9k
ZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0dseXBoUGFnZVRyZWVO
b2RlUXQuY3BwCShyZXZpc2lvbiAxODg4MSkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9xdC9HbHlw
aE1hcFF0LmNwcDoxODg4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvR2x5cGhQYWdlVHJlZU5v
ZGVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHbHlwaE1hcC5oIgor
CisjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCiti
b29sIEdseXBoTWFwOjpmaWxsUGFnZShHbHlwaFBhZ2UqIHBhZ2UsIFVDaGFyKiBidWZmZXIsIHVu
c2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQoreworICAgIGJv
b2wgaXNVdGYxNiA9IGJ1ZmZlckxlbmd0aCAhPSBHbHlwaFBhZ2U6OnNpemU7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKKyAgICAgICAgVUNo
YXIzMiBjaGFyYWN0ZXI7CisKKyAgICAgICAgaWYoaXNVdGYxNikgeworICAgICAgICAgICAgVUNo
YXIgbGVhZCA9IGJ1ZmZlcltpICogMl07CisgICAgICAgICAgICBVQ2hhciB0cmFpbCA9IGJ1ZmZl
cltpICogMiArIDFdOworICAgICAgICAgICAgY2hhcmFjdGVyID0gVTE2X0dFVF9TVVBQTEVNRU5U
QVJZKGxlYWQsIHRyYWlsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoYXJhY3Rl
ciA9IGJ1ZmZlcltpXTsKKyAgICAgICAgfQorCisgICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZv
ckluZGV4KGksIGNoYXJhY3RlciwgZm9udERhdGEpOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L3F0L0dseXBoUGFnZVRyZWVOb2RlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vcXQvR2x5cGhQYWdlVHJlZU5vZGVRdC5jcHAJKHJldmlzaW9uIDE4ODgxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9HbHlwaFBhZ2VUcmVlTm9kZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNyArMjgsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHbHlw
aE1hcC5oIgorI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCiAKICNpbmNsdWRlICJGb250
RGF0YS5oIgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KQEAgLTM2LDcgKzM2LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEdseXBoTWFwOjpmaWxsUGFnZShHbHlw
aFBhZ2UqIHBhZ2UsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3Qg
Rm9udERhdGEqIGZvbnREYXRhKQorYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZlciwg
dW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpCiB7CiAgICAg
Ym9vbCBpc1V0ZjE2ID0gYnVmZmVyTGVuZ3RoICE9IEdseXBoUGFnZTo6c2l6ZTsKIApAQCAtNTEs
NyArNTEsNyBAQCBib29sIEdseXBoTWFwOjpmaWxsUGFnZShHbHlwaFBhZ2UqIHBhZ2UsCiAgICAg
ICAgICAgICBjaGFyYWN0ZXIgPSBidWZmZXJbaV07CiAgICAgICAgIH0KIAotICAgICAgICBwYWdl
LT5zZXRHbHlwaERhdGFGb3JJbmRleChpLCBjaGFyYWN0ZXIsIGZvbnREYXRhKTsKKyAgICAgICAg
c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgY2hhcmFjdGVyLCBmb250RGF0YSk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIHRydWU7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9HbHlwaE1hcFdpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vR2x5cGhNYXBXaW4uY3BwCShy
ZXZpc2lvbiAxODg4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0dseXBoTWFwV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJHbHlwaE1hcC5oIgotI2luY2x1ZGUgIkZvbnREYXRhLmgiCi0j
aW5jbHVkZSA8d2luZG93cy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZQotewotCi1ib29sIEdseXBo
TWFwOjpmaWxsUGFnZShHbHlwaFBhZ2UqIHBhZ2UsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1
ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQotewotICAgIEhEQyBkYyA9IEdl
dERDKChIV05EKTApOwotICAgIFNhdmVEQyhkYyk7Ci0gICAgU2VsZWN0T2JqZWN0KGRjLCBmb250
RGF0YS0+bV9mb250Lmhmb250KCkpOwotCi0gICAgVEVYVE1FVFJJQyB0bTsKLSAgICBHZXRUZXh0
TWV0cmljcyhkYywgJnRtKTsKLSAgICBXT1JEIGxvY2FsR2x5cGhCdWZmZXJbR2x5cGhQYWdlOjpz
aXplXTsKLSAgICBHZXRHbHlwaEluZGljZXMoZGMsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBsb2Nh
bEdseXBoQnVmZmVyLCAwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdl
OjpzaXplOyBpKyspCi0gICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckluZGV4KGksIGxvY2Fs
R2x5cGhCdWZmZXJbaV0sIGZvbnREYXRhKTsKLSAgICBSZXN0b3JlREMoZGMsIC0xKTsKLSAgICBS
ZWxlYXNlREMoMCwgZGMpOwotICAgIHJldHVybiB0cnVlOwotfQotCi19ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vR2x5cGhQYWdlVHJlZU5v
ZGVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL0dseXBoUGFnZVRy
ZWVOb2RlV2luLmNwcAkocmV2aXNpb24gMTg4ODEpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vd2lu
L0dseXBoTWFwV2luLmNwcDoxODg4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0dseXBoUGFn
ZVRyZWVOb2RlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHbHlwaE1hcC5oIgorI2luY2x1
ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSA8d2luZG93cy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZQoreworCitib29sIEdseXBoTWFwOjpmaWxsUGFnZShHbHlwaFBhZ2UqIHBhZ2UsIFVDaGFyKiBi
dWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQor
eworICAgIEhEQyBkYyA9IEdldERDKChIV05EKTApOworICAgIFNhdmVEQyhkYyk7CisgICAgU2Vs
ZWN0T2JqZWN0KGRjLCBmb250RGF0YS0+bV9mb250Lmhmb250KCkpOworCisgICAgVEVYVE1FVFJJ
QyB0bTsKKyAgICBHZXRUZXh0TWV0cmljcyhkYywgJnRtKTsKKyAgICBXT1JEIGxvY2FsR2x5cGhC
dWZmZXJbR2x5cGhQYWdlOjpzaXplXTsKKyAgICBHZXRHbHlwaEluZGljZXMoZGMsIGJ1ZmZlciwg
YnVmZmVyTGVuZ3RoLCBsb2NhbEdseXBoQnVmZmVyLCAwKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspCisgICAgICAgIHBhZ2UtPnNldEdseXBoRGF0
YUZvckluZGV4KGksIGxvY2FsR2x5cGhCdWZmZXJbaV0sIGZvbnREYXRhKTsKKyAgICBSZXN0b3Jl
REMoZGMsIC0xKTsKKyAgICBSZWxlYXNlREMoMCwgZGMpOworICAgIHJldHVybiB0cnVlOworfQor
Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93
aW4vR2x5cGhQYWdlVHJlZU5vZGVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vd2luL0dseXBoUGFnZVRyZWVOb2RlV2luLmNwcAkocmV2aXNpb24gMTg4ODEpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZVdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDE0ICsyNywxNSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJHbHlwaE1hcC5oIgorI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCisKICNpbmNsdWRl
ICJGb250RGF0YS5oIgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUK
IHsKIAotYm9vbCBHbHlwaE1hcDo6ZmlsbFBhZ2UoR2x5cGhQYWdlKiBwYWdlLCBVQ2hhciogYnVm
ZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKK2Jv
b2wgR2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwg
Y29uc3QgRm9udERhdGEqIGZvbnREYXRhKQogewogICAgIEhEQyBkYyA9IEdldERDKChIV05EKTAp
OwogICAgIFNhdmVEQyhkYyk7CkBAIC00NSw3ICs0Niw3IEBAIGJvb2wgR2x5cGhNYXA6OmZpbGxQ
YWdlKEdseXBoUGFnZSogcGFnZSwKICAgICBXT1JEIGxvY2FsR2x5cGhCdWZmZXJbR2x5cGhQYWdl
OjpzaXplXTsKICAgICBHZXRHbHlwaEluZGljZXMoZGMsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBs
b2NhbEdseXBoQnVmZmVyLCAwKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQ
YWdlOjpzaXplOyBpKyspCi0gICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckluZGV4KGksIGxv
Y2FsR2x5cGhCdWZmZXJbaV0sIGZvbnREYXRhKTsKKyAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5k
ZXgoaSwgbG9jYWxHbHlwaEJ1ZmZlcltpXSwgZm9udERhdGEpOwogICAgIFJlc3RvcmVEQyhkYywg
LTEpOwogICAgIFJlbGVhc2VEQygwLCBkYyk7CiAgICAgcmV0dXJuIHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12531</attachid>
            <date>2007-01-18 06:39:20 -0800</date>
            <delta_ts>2007-01-18 07:56:59 -0800</delta_ts>
            <desc>Implement trees of fallback glyph pages</desc>
            <filename>6218_r8.patch</filename>
            <type>text/plain</type>
            <size>88611</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTg5MzIpCisrKyBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC05OTcsNyArOTk3LDcgQEAgc2V0KFdlYkNvcmVfU1JDUwogICAgIHBs
YXRmb3JtL0ZvbnREYXRhLmNwcAogICAgIHBsYXRmb3JtL0ZvbnRGYWxsYmFja0xpc3QuY3BwCiAg
ICAgcGxhdGZvcm0vRm9udEZhbWlseS5jcHAKLSAgICBwbGF0Zm9ybS9HbHlwaE1hcC5jcHAKKyAg
ICBwbGF0Zm9ybS9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAKICAgICBwbGF0Zm9ybS9HbHlwaFdpZHRo
TWFwLmNwcAogICAgIHBsYXRmb3JtL0tVUkwuY3BwCiAgICAgcGxhdGZvcm0vTG9nZ2luZy5jcHAK
QEAgLTExNjcsNyArMTE2Nyw3IEBAIHNldChXZWJDb3JlX1NSQ1MKICAgICBwbGF0Zm9ybS9xdC9G
b250UXQuY3BwCiAgICAgcGxhdGZvcm0vcXQvRnJhbWVRdENsaWVudC5jcHAKICAgICBwbGF0Zm9y
bS9xdC9GcmFtZVF0LmNwcAotICAgIHBsYXRmb3JtL3F0L0dseXBoTWFwUXQuY3BwCisgICAgcGxh
dGZvcm0vcXQvR2x5cGhQYWdlVHJlZU5vZGVRdC5jcHAKICAgICBwbGF0Zm9ybS9xdC9Mb2FkZXJG
dW5jdGlvbnNRdC5jcHAKICAgICBwbGF0Zm9ybS9xdC9NaW1lVHlwZVJlZ2lzdHJ5UXQuY3BwCiAg
ICAgcGxhdGZvcm0vcXQvUGFnZVF0LmNwcApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTMyKQorKysgV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4NSBAQAorMjAwNy0wMS0xOCAgTWl0
eiBQZXR0ZWwgIDxtaXR6QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgLSBmaXggaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjIxOAorICAgICAgICAgIENTUzE6IFdlYlRleHRSZW5kZXJlciBjYWNoZXMgYW5k
IHJlLXVzZXMgZmFsbGJhY2sgcmVuZGVyZXJzIHRoYXQgYXJlIGJhc2VkIG9uIGZhbWlseSBsaXN0
cworCisgICAgICAgIFRoaXMgcGF0Y2ggdGFrZXMgY2hhcmFjdGVyLXRvLWdseXBoIG1hcHBpbmcg
b3V0IG9mIEZvbnREYXRhIGFuZCBpbnN0ZWFkIG1ha2VzCisgICAgICAgIGVhY2ggRm9udCBrZWVw
IGl0cyBvd24gbWFwcGluZywgdXNpbmcgYSBzaGFyZWQgc2V0IG9mIGdseXBoIHBhZ2UgZmFsbGJh
Y2sgdHJlZXMuCisKKyAgICAgICAgRm9yIGVhY2ggcGFnZSBudW1iZXIgdGhlcmUgaXMgKGF0IG1v
c3QpIG9uZSB0cmVlLiBBIHBhdGggZnJvbSB0aGUgcm9vdCB0byBhCisgICAgICAgIG5vZGUgaW4g
dGhlIHRyZWUgY29ycmVzcG9uZHMgdG8gYSBmYWxsYmFjayBsaXN0IG9mIEZvbnREYXRhcy4gVGhl
IG5vZGUgcG9pbnRzIHRvCisgICAgICAgIGEgcGFnZSAod2hpY2ggbWF5IGJlIHNoYXJlZCB3aXRo
IG90aGVyIG5vZGVzKSB0aGF0IG1hcHMgZWFjaCBjaGFyYWN0ZXIgaW4gaXRzIHJhbmdlCisgICAg
ICAgIHRvIGEgZ2x5cGggaW4gdGhlIGZpcnN0IEZvbnREYXRhIGluIHRoZSBmYWxsYmFjayBsaXN0
IHRoYXQgaGFzIGl0LCBvciB0byAwIGlmIG5vbmUgb2YKKyAgICAgICAgdGhlIEZvbnREYXRhcyBo
YXMgYSBnbHlwaCBmb3IgdGhhdCBjaGFyYWN0ZXIuIEEgc3BlY2lhbCBraW5kIG9mIG5vZGUsIHRo
YXQgY2FuCisgICAgICAgIG9ubHkgb2NjdXIgYXMgYSBsZWFmLCBjb3JyZXNwb25kcyB0byB1c2lu
ZyBzeXN0ZW0gZmFsbGJhY2sgZm9udHMgYWZ0ZXIgdGhlIGxpc3QKKyAgICAgICAgaGFzIGJlZW4g
ZXhoYXVzdGVkLiBUaGlzIHByZXZlbnRzIHN5c3RlbSBmYWxsYmFjayBmcm9tIHBvbGx1dGluZyBu
b24tbGVhZgorICAgICAgICBub2Rlcy4KKworICAgICAgICBOb2RlcyBhbmQgcGFnZXMgYXJlIGlu
aXRpYWxpemVkIGxhemlseSBhbmQgZW1wbG95ICJjb3B5IG9uIHdyaXRlIi4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNv
cmUudmNwcm9qL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9Gb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0
b3I6OldpZHRoSXRlcmF0b3IpOiBSZW1vdmVkIHN1YnN0aXR1dGVGb250RGF0YS4KKyAgICAgICAg
KFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OmFkdmFuY2UpOiBNb3ZlZCBhbGwgY2hhcmFjdGVyLXRv
LWdseXBoIG1hcHBpbmcgbG9naWMgb3V0CisgICAgICAgIG9mIGhlcmUgYW5kIHJlcGxhY2VkIGl0
IHdpdGggYSBjYWxsIHRvIEZvbnQ6OmdseXBoRGF0YUZvckNoYXJhY3RlcigpLgorICAgICAgICAo
V2ViQ29yZTo6Rm9udDo6Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpvcGVyYXRvcj0p
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKTogQWRkZWQu
IFRoaXMgbWV0aG9kIHBlcmZvcm1zIHRoZSBsb29rdXAgaW4gdGhlCisgICAgICAgIHBhZ2UgZmFs
bGJhY2sgdHJlZXMsIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXphdGlvbiBhcyBuZWVkZWQsIGFu
ZCBjYWNoaW5nIHBvaW50ZXJzIHRvCisgICAgICAgIHRoZSByZXRyaWV2ZWQgcGFnZSB0cmVlIG5v
ZGVzIGluIHRoZSBmb250LgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6dXBkYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdTaW1wbGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmZsb2F0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZmxvYXRXaWR0aEZvclNp
bXBsZVRleHQpOiBSZW1vdmVkIHN1YnN0aXR1dGVGb250IGFyZ3VtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9Gb250Lmg6CisgICAgICAgICogcGxhdGZvcm0vRm9udERhdGEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udERhdGE6OkZvbnREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9Gb250
RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGE6Om1pc3NpbmdHbHlwaERhdGEpOiBB
ZGRlZC4gUmV0dXJucyB0aGUgIm1pc3NpbmcgZ2x5cGgiIEdseXBoRGF0YSBmb3IKKyAgICAgICAg
dGhpcyBGb250RGF0YS4KKyAgICAgICAgKiBwbGF0Zm9ybS9HbHlwaE1hcC5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vR2x5cGhNYXAuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9HbHlwaFBhZ2VUcmVlTm9kZS5jcHA6IFJlbmFtZWQgR2x5cGhNYXAuY3BwIHRvIHRoaXMu
CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdCk6IEFkZGVkLiBS
ZXR1cm5zIHRoZSByb290IG9mIHRoZSBwYWdlIGZhbGxiYWNrIHRyZWUgZm9yCisgICAgICAgIHRo
ZSBnaXZlbiBwYWdlIG51bWJlci4KKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZVRyZWVOb2Rl
Ojppbml0aWFsaXplUGFnZSk6IEFkZGVkLiBIZWxwZXIgbWV0aG9kIHRoYXQgaW5pdGlhbGl6ZXMg
dGhlIHBhZ2UKKyAgICAgICAgcG9pbnRlciBvZiBhIG5vZGUsIHBvc3NpYmx5IHRvIGEgcG9pbnRl
ciB0byBhbm90aGVyIG5vZGUncyBwYWdlIG9yIHRvIDAuCisgICAgICAgIChXZWJDb3JlOjpHbHlw
aFBhZ2VUcmVlTm9kZTo6Z2V0Q2hpbGQpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9HbHlw
aFBhZ2VUcmVlTm9kZS5oOiBSZW5hbWVkIEdseXBoTWFwLmggdG8gdGhpcy4KKyAgICAgICAgKFdl
YkNvcmU6OkdseXBoUGFnZTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdseXBoUGFnZTo6c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdseXBoUGFnZTo6c2V0R2x5cGhEYXRhRm9ySW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
R2x5cGhQYWdlVHJlZU5vZGU6OkdseXBoUGFnZVRyZWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6R2x5
cGhQYWdlVHJlZU5vZGU6OnBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVl
Tm9kZTo6cGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2VUcmVlTm9kZTo6bGV2ZWwp
OgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlVHJlZU5vZGU6OmlzU3lzdGVtRmFsbGJhY2sp
OiBBZGRlZC4gUmV0dXJucyB3aGV0aGVyIHRoZSBub2RlIGNvcnJlc3BvbmRzCisgICAgICAgIHRv
IHRoZSBzeXN0ZW0gcHJvdmlkaW5nIGZhbGxiYWNrIGZvbnRzLCB3aGljaCBpcyBkb25lIG9uIGEg
Y2hhcmFjdGVyLWJ5LWNoYXJhY3RlciBiYXNpcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvR2x5
cGhNYXBHZGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dkay9HbHlwaFBhZ2VU
cmVlTm9kZUdkay5jcHA6IFJlbmFtZWQgR2x5cGhNYXBHZGsuY3BwIHRvIHRoaXMuCisgICAgICAg
IChXZWJDb3JlOjpHbHlwaFBhZ2U6OmZpbGwpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Gb250
RGF0YU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREYXRhOjpwbGF0Zm9ybUluaXQpOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9Gb250TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dDo6Rm9udCk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0dseXBoTWFwTWFjLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvR2x5cGhQYWdlVHJlZU5vZGVNYWMuY3BwOiBSZW5h
bWVkIEdseXBNYXBNYWMuY3BwIHRvIHRoaXMuCisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6
OmZpbGwpOiBDaGFuZ2VkIHRvIHJldHVybiBmYWxzZSBpZiB0aGUgZm9udCBoYXMgbm8gZ2x5cGhz
IGluIHRoZSBwYWdlLgorICAgICAgICAqIHBsYXRmb3JtL3F0L0dseXBoTWFwUXQuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L0dseXBoUGFnZVRyZWVOb2RlUXQuY3BwOiBSZW5h
bWVkIEdseXBoTWFwUXQuY3BwIHRvIHRoaXMuCisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6
OmZpbGwpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9HbHlwaE1hcFdpbi5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vd2luL0dseXBoUGFnZVRyZWVOb2RlV2luLmNwcDogUmVuYW1l
ZCBHbHlwaE1hcFdpbiB0byB0aGlzLgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpmaWxs
KToKKwogMjAwNy0wMS0xNyAgQWxpY2UgTGl1ICA8YWxpY2UubGl1QGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBIYXJyaXNvbi4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gMTg5MzIpCisrKyBXZWJD
b3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC01NjEsNyArNTYxLDcgQEAgU09VUkNF
UyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQWZmaW5lVHJhbnNmb3JtUXQuY3BwIFwK
ICAgICBwbGF0Zm9ybS9xdC9TdHJpbmdRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0NvbG9yUXQuY3BwIFwKLSAgICBwbGF0Zm9ybS9xdC9HbHlwaE1hcFF0LmNwcCBcCisgICAgcGxh
dGZvcm0vcXQvR2x5cGhQYWdlVHJlZU5vZGVRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L0Nvb2tp
ZUphclF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcCBcCiAg
ICAgcGxhdGZvcm0vcXQvU2Nyb2xsVmlld1F0LmNwcCBcCkBAIC02MTQsNyArNjE0LDcgQEAgU09V
UkNFUyArPSBcCiAgICAgcGxhdGZvcm0vRm9udENhY2hlLmNwcCBcCiAgICAgcGxhdGZvcm0vRm9u
dEZhbGxiYWNrTGlzdC5jcHAgXAogICAgIHBsYXRmb3JtL1JlZ3VsYXJFeHByZXNzaW9uLmNwcCBc
Ci0gICAgcGxhdGZvcm0vR2x5cGhNYXAuY3BwIFwKKyAgICBwbGF0Zm9ybS9HbHlwaFBhZ2VUcmVl
Tm9kZS5jcHAgXAogICAgIHBsYXRmb3JtL0ZvbnQuY3BwIFwKICAgICBwbGF0Zm9ybS9Gb250RGF0
YS5jcHAgXAogICAgIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcCBcCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmVTb3VyY2Vz
LmJrbAkocmV2aXNpb24gMTg5MzIpCisrKyBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkod29y
a2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCw3IEBACiAgICAgICAgIHBsYXRmb3JtL0ZvbnREYXRh
LmNwcAogICAgICAgICBwbGF0Zm9ybS9Gb250RmFsbGJhY2tMaXN0LmNwcAogICAgICAgICBwbGF0
Zm9ybS9Gb250RmFtaWx5LmNwcAotICAgICAgICBwbGF0Zm9ybS9HbHlwaE1hcC5jcHAKKyAgICAg
ICAgcGxhdGZvcm0vR2x5cGhQYWdlVHJlZU5vZGUuY3BwCiAgICAgICAgIHBsYXRmb3JtL0dseXBo
V2lkdGhNYXAuY3BwCiAgICAgICAgIHBsYXRmb3JtL0tVUkwuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L0xvZ2dpbmcuY3BwCkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICAgICAgcGxhdGZvcm0vd2luL0Zv
bnREYXRhV2luLmNwcAogICAgICAgICBwbGF0Zm9ybS93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5j
cHAKICAgICAgICAgcGxhdGZvcm0vd2luL0ZvbnRXaW4uY3BwCi0gICAgICAgIHBsYXRmb3JtL3dp
bi9HbHlwaE1hcFdpbi5jcHAKKyAgICAgICAgcGxhdGZvcm0vd2luL0dseXBoUGFnZVRyZWVOb2Rl
V2luLmNwcAogICAgICAgICBwbGF0Zm9ybS93aW4vSW50UG9pbnRXaW4uY3BwCiAgICAgICAgIHBs
YXRmb3JtL3dpbi9JbnRSZWN0V2luLmNwcAogICAgICAgICBwbGF0Zm9ybS93aW4vSW50U2l6ZVdp
bi5jcHAKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2oJKHJldmlzaW9uIDE4OTMyKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIzLDExICsxNTIzLDExIEBACiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBsYXRm
b3JtXEdseXBoTWFwLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBsYXRmb3JtXEdseXBo
UGFnZVRyZWVOb2RlLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5ccGxhdGZvcm1cR2x5cGhNYXAuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XC4uXHBsYXRmb3JtXEdseXBoUGFnZVRyZWVOb2RlLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJ
PEZpbGUKQEAgLTI4NTQsNyArMjg1NCw3IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZp
bGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwbGF0Zm9ybVx3aW5cR2x5cGhNYXBXaW4uY3Bw
IgorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBsYXRmb3JtXHdpblxHbHlwaFBhZ2VUcmVlTm9k
ZVdpbi5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODkzMikKKysrIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjkwLDkgKzI2OTAsOSBAQAogCQlCQzZEQUJGMzBBMTkwMTU3MDBFNUNEMTQgLyogRm9udENh
Y2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
NkRBQkYyMEExOTAxNTcwMEU1Q0QxNCAvKiBGb250Q2FjaGUuY3BwICovOyB9OwogCQlCQzZEQURF
RjBBMTk1RkRGMDBFNUNEMTQgLyogV2ViRm9udENhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzZEQURFRTBBMTk1RkRGMDBFNUNEMTQgLyogV2Vi
Rm9udENhY2hlLmggKi87IH07CiAJCUJDNkRBREZBMEExOTYwMkIwMEU1Q0QxNCAvKiBXZWJGb250
Q2FjaGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzZEQURGOTBBMTk2MDJCMDBFNUNEMTQgLyogV2ViRm9udENhY2hlLm1tICovOyB9OwotCQlCQzZE
QjM2OTBBMUE3Q0I3MDBFNUNEMTQgLyogR2x5cGhNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNkRCMzY4MEExQTdDQjcwMEU1Q0QxNCAvKiBHbHlw
aE1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CUJDNkRCNDc0MEExQTkwRkIwMEU1Q0QxNCAvKiBHbHlwaE1hcC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzZEQjQ3MzBBMUE5MEZCMDBFNUNEMTQg
LyogR2x5cGhNYXAuY3BwICovOyB9OwotCQlCQzZEQjRENDBBMUFGRUVGMDBFNUNEMTQgLyogR2x5
cGhNYXBNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkM2REI0RDMwQTFBRkVFRjAwRTVDRDE0IC8qIEdseXBoTWFwTWFjLmNwcCAqLzsgfTsKKwkJ
QkM2REIzNjkwQTFBN0NCNzAwRTVDRDE0IC8qIEdseXBoUGFnZVRyZWVOb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzZEQjM2ODBBMUE3Q0I3MDBF
NUNEMTQgLyogR2x5cGhQYWdlVHJlZU5vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlCQzZEQjQ3NDBBMUE5MEZCMDBFNUNEMTQgLyogR2x5cGhQ
YWdlVHJlZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkM2REI0NzMwQTFBOTBGQjAwRTVDRDE0IC8qIEdseXBoUGFnZVRyZWVOb2RlLmNwcCAq
LzsgfTsKKwkJQkM2REI0RDQwQTFBRkVFRjAwRTVDRDE0IC8qIEdseXBoUGFnZVRyZWVOb2RlTWFj
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNkRC
NEQzMEExQUZFRUYwMEU1Q0QxNCAvKiBHbHlwaFBhZ2VUcmVlTm9kZU1hYy5jcHAgKi87IH07CiAJ
CUJDQUE5MEMzMEE3RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxCYXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBQTkwQzIwQTdFQkE2MDAwOEIxMjI5
IC8qIFNjcm9sbEJhci5jcHAgKi87IH07CiAJCUJDQjE2QjhCMDk3OUIwMTQwMDQ2Nzc0MSAvKiBE
ZXByZWNhdGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDQjE2Qjg4MDk3OUIwMTQwMDQ2Nzc0MSAvKiBEZXByZWNhdGVkQXJyYXkuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0IxNkI4QzA5
NzlCMDE0MDA0Njc3NDEgLyogQXJyYXlJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQjE2Qjg5MDk3OUIwMTQwMDQ2Nzc0MSAvKiBBcnJheUlt
cGwuY3BwICovOyB9OwpAQCAtNTgxMyw5ICs1ODEzLDkgQEAKIAkJQkM2REFCRjIwQTE5MDE1NzAw
RTVDRDE0IC8qIEZvbnRDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRm9udENhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM2REFE
RUUwQTE5NUZERjAwRTVDRDE0IC8qIFdlYkZvbnRDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViRm9udENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDNkRBREY5MEExOTYwMkIwMEU1Q0QxNCAvKiBXZWJGb250Q2FjaGUubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRm9udENhY2hlLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlCQzZEQjM2ODBBMUE3Q0I3MDBFNUNEMTQgLyogR2x5cGhN
YXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdseXBoTWFwLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNkRCNDczMEExQTkwRkIwMEU1Q0QxNCAvKiBHbHlw
aE1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2x5cGhNYXAu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzZEQjREMzBBMUFGRUVGMDBFNUNE
MTQgLyogR2x5cGhNYXBNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEdseXBoTWFwTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM2REIz
NjgwQTFBN0NCNzAwRTVDRDE0IC8qIEdseXBoUGFnZVRyZWVOb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHbHlwaFBhZ2VUcmVlTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQzZEQjQ3MzBBMUE5MEZCMDBFNUNEMTQgLyogR2x5cGhQYWdlVHJlZU5v
ZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdseXBoUGFnZVRy
ZWVOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM2REI0RDMwQTFBRkVF
RjAwRTVDRDE0IC8qIEdseXBoUGFnZVRyZWVOb2RlTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBHbHlwaFBhZ2VUcmVlTm9kZU1hYy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDN0IyQUY4MDQ1MDgyNDEwMEE4MDAwRiAvKiBTY3JvbGxCYXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Ny
b2xsQmFyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMg
PSAwOyB9OwogCQlCQzdCMkFGOTA0NTA4MjQxMDBBODAwMEYgLyogUGxhdGZvcm1TY3JvbGxCYXJN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGlu
ZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBQbGF0Zm9ybVNjcm9sbEJhck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUJDQUE5MEMyMEE3RUJBNjAwMDhCMTIy
OSAvKiBTY3JvbGxCYXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFNjcm9sbEJhci5jcHA7IHBhdGggPSBwbGF0Zm9ybS9TY3JvbGxCYXIuY3BwOyBzb3VyY2VUcmVl
ID0gU09VUkNFX1JPT1Q7IH07CkBAIC02NzE4LDcgKzY3MTgsNyBAQAogCQkJCUJDRUIzNzcyMDlC
N0JBMzkwMENCMzhCMSAvKiBGb250TWFjLm1tICovLAogCQkJCTE0OEEwMDEwMEFGNTlGM0YwMDhD
QzcwMCAvKiBGb250UGxhdGZvcm1EYXRhLmggKi8sCiAJCQkJOTM1QzQ3NkMwOUFDNEQ2MzAwQTZB
QUI0IC8qIEZvdW5kYXRpb25FeHRyYXMuaCAqLywKLQkJCQlCQzZEQjREMzBBMUFGRUVGMDBFNUNE
MTQgLyogR2x5cGhNYXBNYWMuY3BwICovLAorCQkJCUJDNkRCNEQzMEExQUZFRUYwMEU1Q0QxNCAv
KiBHbHlwaFBhZ2VUcmVlTm9kZU1hYy5jcHAgKi8sCiAJCQkJOTM1QzQ3NkUwOUFDNEQ3MzAwQTZB
QUI0IC8qIEtleUV2ZW50TWFjLm1tICovLAogCQkJCTY1OTM5MjM5MDlBRTQzNUMwMDJDNTMxRiAv
KiBLVVJMTWFjLm1tICovLAogCQkJCTkzNTIwODQ0MDlCRDQzQjkwMEYyMDM4RCAvKiBMYW5ndWFn
ZS5tbSAqLywKQEAgLTg5NDAsOCArODk0MCw4IEBACiAJCQkJQkNDNDdFMjQwOUEzRDZGMTAwQURC
NzcxIC8qIEZvbnRGYW1pbHkuY3BwICovLAogCQkJCUJDQzQ3RTI1MDlBM0Q2RjEwMEFEQjc3MSAv
KiBGb250RmFtaWx5LmggKi8sCiAJCQkJQkNDNzFBMTIwQTBGRjk0RDAwMTRFRTZFIC8qIEdseXBo
QnVmZmVyLmggKi8sCi0JCQkJQkM2REI0NzMwQTFBOTBGQjAwRTVDRDE0IC8qIEdseXBoTWFwLmNw
cCAqLywKLQkJCQlCQzZEQjM2ODBBMUE3Q0I3MDBFNUNEMTQgLyogR2x5cGhNYXAuaCAqLywKKwkJ
CQlCQzZEQjQ3MzBBMUE5MEZCMDBFNUNEMTQgLyogR2x5cGhQYWdlVHJlZU5vZGUuY3BwICovLAor
CQkJCUJDNkRCMzY4MEExQTdDQjcwMEU1Q0QxNCAvKiBHbHlwaFBhZ2VUcmVlTm9kZS5oICovLAog
CQkJCUJDQzA4OTU1MEExQzRDQzkwMDYxODlBNiAvKiBHbHlwaFdpZHRoTWFwLmNwcCAqLywKIAkJ
CQlCQ0MwODkyOTBBMUM0OTkxMDA2MTg5QTYgLyogR2x5cGhXaWR0aE1hcC5oICovLAogCQkJCTY1
OTM5MjM1MDlBRTQzNDYwMDJDNTMxRiAvKiBLVVJMLmNwcCAqLywKQEAgLTEwMDUxLDcgKzEwMDUx
LDcgQEAKIAkJCQlBODBFNzM1MDBBMTk5Qzc3MDA3RkI4QzUgLyogU3R5bGVCYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBODBFNzM1MTBBMTk5Qzc3MDA3RkI4QzUgLyogU3R5bGVMaXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBODBFNzM1MjBBMTk5Qzc3MDA3RkI4QzUgLyogQ1NTU2VsZWN0b3Iu
aCBpbiBIZWFkZXJzICovLAotCQkJCUJDNkRCMzY5MEExQTdDQjcwMEU1Q0QxNCAvKiBHbHlwaE1h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkM2REIzNjkwQTFBN0NCNzAwRTVDRDE0IC8qIEdseXBo
UGFnZVRyZWVOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFN0ExODBBMTlDM0Q2MDA3RkI4
QzUgLyogSlNIVE1MTWV0YUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU3QjBDMEEx
OUQ2MDYwMDdGQjhDNSAvKiBKU0hUTUxUaXRsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4MEU3QjBEMEExOUQ2MDYwMDdGQjhDNSAvKiBKU0hUTUxMaW5rRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0xMTYyMiw4ICsxMTYyMiw4IEBACiAJCQkJQTgwRTdFOUUwQTFBODNFMzAwN0ZC
OEM1IC8qIEpTSFRNTFRleHRBcmVhRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODBF
N0VBMDBBMUE4M0UzMDA3RkI4QzUgLyogSlNIVE1MQnV0dG9uRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBODI2RUM0ODBBMUIwQ0JFMDBDRDFCQjYgLyogSlNIVE1MT3B0aW9uRWxlbWVu
dENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUJDNkRCNDc0MEExQTkwRkIwMEU1
Q0QxNCAvKiBHbHlwaE1hcC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCQzZEQjRENDBBMUFGRUVG
MDBFNUNEMTQgLyogR2x5cGhNYXBNYWMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQkM2REI0NzQw
QTFBOTBGQjAwRTVDRDE0IC8qIEdseXBoUGFnZVRyZWVOb2RlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUJDNkRCNEQ0MEExQUZFRUYwMEU1Q0QxNCAvKiBHbHlwaFBhZ2VUcmVlTm9kZU1hYy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQTlFRjQ1NzBBMUI5NTdEMDAzMzJCNjMgLyogSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDMDg4ODYw
QTFCRDc4RDAwNjE4OUE2IC8qIEZvbnREYXRhTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkND
MDg5MUEwQTFDNDY1MjAwNjE4OUE2IC8qIEZvbnREYXRhLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9Gb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL0ZvbnQuY3BwCShyZXZpc2lvbiAxODkzMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vRm9udC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJGb250LmgiCiAK
ICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRl
ICJGb250RmFsbGJhY2tMaXN0LmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJH
bHlwaEJ1ZmZlci5oIgpAQCAtNjAsNyArNjEsNyBAQCBjb25zdCB1aW50OF90IEZvbnQ6OmdSb3Vu
ZGluZ0hhY2tDaGFyYWN0CiBGb250OjpDb2RlUGF0aCBGb250Ojpjb2RlUGF0aCA9IEF1dG87CiAK
IHN0cnVjdCBXaWR0aEl0ZXJhdG9yIHsKLSAgICBXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnQqIGZv
bnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgVGV4dFN0eWxlJiBzdHlsZSwgY29uc3QgRm9u
dERhdGEqIHN1YnN0aXR1dGVGb250RGF0YSA9IDApOworICAgIFdpZHRoSXRlcmF0b3IoY29uc3Qg
Rm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBUZXh0U3R5bGUmIHN0eWxlKTsK
IAogICAgIHZvaWQgYWR2YW5jZShpbnQgdG8sIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciA9IDAp
OwogICAgIGJvb2wgYWR2YW5jZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVmZmVy
KiBnbHlwaEJ1ZmZlciA9IDApOwpAQCAtNzIsOCArNzMsNiBAQCBzdHJ1Y3QgV2lkdGhJdGVyYXRv
ciB7CiAKICAgICBjb25zdCBUZXh0U3R5bGUmIG1fc3R5bGU7CiAgICAgCi0gICAgY29uc3QgRm9u
dERhdGEqIG1fc3Vic3RpdHV0ZUZvbnREYXRhOwotCiAgICAgdW5zaWduZWQgbV9jdXJyZW50Q2hh
cmFjdGVyOwogICAgIGZsb2F0IG1fcnVuV2lkdGhTb0ZhcjsKICAgICBmbG9hdCBtX3dpZHRoVG9T
dGFydDsKQEAgLTg1LDEyICs4NCwxMSBAQCBwcml2YXRlOgogICAgIFVDaGFyMzIgbm9ybWFsaXpl
Vm9pY2luZ01hcmtzKGludCBjdXJyZW50Q2hhcmFjdGVyKTsKIH07CiAKLVdpZHRoSXRlcmF0b3I6
OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25z
dCBUZXh0U3R5bGUmIHN0eWxlLCBjb25zdCBGb250RGF0YSogc3Vic3RpdHV0ZUZvbnREYXRhKQor
V2lkdGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcihjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IFRleHRTdHlsZSYgc3R5bGUpCiAgICAgOiBtX2ZvbnQoZm9udCkKICAg
ICAsIG1fcnVuKHJ1bikKICAgICAsIG1fZW5kKHN0eWxlLnJ0bCgpID8gcnVuLmxlbmd0aCgpIDog
cnVuLnRvKCkpCiAgICAgLCBtX3N0eWxlKHN0eWxlKQotICAgICwgbV9zdWJzdGl0dXRlRm9udERh
dGEoc3Vic3RpdHV0ZUZvbnREYXRhKQogICAgICwgbV9jdXJyZW50Q2hhcmFjdGVyKHJ1bi5mcm9t
KCkpCiAgICAgLCBtX3J1bldpZHRoU29GYXIoMCkKICAgICAsIG1fZmluYWxSb3VuZGluZ1dpZHRo
KDApCkBAIC0xMjAsNyArMTE4LDcgQEAgV2lkdGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcihjb25z
dCBGb250KgogICAgIGVsc2UgewogICAgICAgICBUZXh0UnVuIGNvbXBsZXRlUnVuKHJ1bik7CiAg
ICAgICAgIGNvbXBsZXRlUnVuLm1ha2VDb21wbGV0ZSgpOwotICAgICAgICBXaWR0aEl0ZXJhdG9y
IHN0YXJ0UG9zaXRpb25JdGVyYXRvcihmb250LCBjb21wbGV0ZVJ1biwgc3R5bGUsIG1fc3Vic3Rp
dHV0ZUZvbnREYXRhKTsKKyAgICAgICAgV2lkdGhJdGVyYXRvciBzdGFydFBvc2l0aW9uSXRlcmF0
b3IoZm9udCwgY29tcGxldGVSdW4sIHN0eWxlKTsKICAgICAgICAgc3RhcnRQb3NpdGlvbkl0ZXJh
dG9yLmFkdmFuY2UocnVuLmZyb20oKSk7CiAgICAgICAgIG1fd2lkdGhUb1N0YXJ0ID0gc3RhcnRQ
b3NpdGlvbkl0ZXJhdG9yLm1fcnVuV2lkdGhTb0ZhcjsKICAgICB9CkBAIC0xMzUsMTQgKzEzMywx
MiBAQCB2b2lkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UoaW50IG9mZnNldCwgCiAgICAgY29uc3Qg
VUNoYXIqIGNwID0gbV9ydW4uZGF0YShjdXJyZW50Q2hhcmFjdGVyKTsKIAogICAgIGJvb2wgcnRs
ID0gbV9zdHlsZS5ydGwoKTsKLSAgICBib29sIG5lZWRDaGFyVHJhbnNmb3JtID0gcnRsIHx8IG1f
Zm9udC0+aXNTbWFsbENhcHMoKTsKKyAgICBib29sIGF0dGVtcHRGb250U3Vic3RpdHV0aW9uID0g
bV9zdHlsZS5hdHRlbXB0Rm9udFN1YnN0aXR1dGlvbigpOwogICAgIGJvb2wgaGFzRXh0cmFTcGFj
aW5nID0gbV9mb250LT5sZXR0ZXJTcGFjaW5nKCkgfHwgbV9mb250LT53b3JkU3BhY2luZygpIHx8
IG1fcGFkZGluZzsKIAogICAgIGZsb2F0IHJ1bldpZHRoU29GYXIgPSBtX3J1bldpZHRoU29GYXI7
CiAgICAgZmxvYXQgbGFzdFJvdW5kaW5nV2lkdGggPSBtX2ZpbmFsUm91bmRpbmdXaWR0aDsKICAg
ICAKLSAgICBjb25zdCBGb250RGF0YSogcHJpbWFyeUZvbnQgPSBtX2ZvbnQtPnByaW1hcnlGb250
KCk7Ci0KICAgICB3aGlsZSAoY3VycmVudENoYXJhY3RlciA8IG9mZnNldCkgewogICAgICAgICBV
Q2hhcjMyIGMgPSAqY3A7CiAgICAgICAgIHVuc2lnbmVkIGNsdXN0ZXJMZW5ndGggPSAxOwpAQCAt
MTczLDQ0ICsxNjksMTEgQEAgdm9pZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKGludCBvZmZzZXQs
IAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgRm9udERhdGEqIGZv
bnREYXRhID0gbV9zdWJzdGl0dXRlRm9udERhdGEgPyBtX3N1YnN0aXR1dGVGb250RGF0YSA6IHBy
aW1hcnlGb250OwotCi0gICAgICAgIGlmIChuZWVkQ2hhclRyYW5zZm9ybSkgewotICAgICAgICAg
ICAgaWYgKHJ0bCkKLSAgICAgICAgICAgICAgICBjID0gbWlycm9yZWRDaGFyKGMpOwotCi0gICAg
ICAgICAgICAvLyBJZiBzbWFsbC1jYXBzLCBjb252ZXJ0IGxvd2VyY2FzZSB0byB1cHBlci4KLSAg
ICAgICAgICAgIGlmIChtX2ZvbnQtPmlzU21hbGxDYXBzKCkgJiYgIVVuaWNvZGU6OmlzVXBwZXIo
YykpIHsKLSAgICAgICAgICAgICAgICBVQ2hhcjMyIHVwcGVyQyA9IFVuaWNvZGU6OnRvVXBwZXIo
Yyk7Ci0gICAgICAgICAgICAgICAgaWYgKHVwcGVyQyAhPSBjKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGMgPSB1cHBlckM7Ci0gICAgICAgICAgICAgICAgICAgIGZvbnREYXRhID0gZm9udERhdGEt
PnNtYWxsQ2Fwc0ZvbnREYXRhKG1fZm9udC0+Zm9udERlc2NyaXB0aW9uKCkpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZJWE1FOiBT
aG91bGQgZ28gdGhyb3VnaCBmYWxsYmFjayBsaXN0IGV2ZW50dWFsbHkgd2hlbiB3ZSByZXdvcmsg
dGhlIGdseXBoIG1hcC4KLSAgICAgICAgY29uc3QgR2x5cGhEYXRhJiBnbHlwaERhdGEgPSBmb250
RGF0YS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOworICAgICAgICBjb25zdCBHbHlwaERhdGEm
IGdseXBoRGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIGNwLCBjbHVzdGVy
TGVuZ3RoLCBydGwsIGF0dGVtcHRGb250U3Vic3RpdHV0aW9uKTsKICAgICAgICAgR2x5cGggZ2x5
cGggPSBnbHlwaERhdGEuZ2x5cGg7Ci0gICAgICAgIGZvbnREYXRhID0gZ2x5cGhEYXRhLmZvbnRE
YXRhOworICAgICAgICBjb25zdCBGb250RGF0YSogZm9udERhdGEgPSBnbHlwaERhdGEuZm9udERh
dGE7CiAKLSAgICAgICAgLy8gVHJ5IHRvIGZpbmQgYSBzdWJzdGl0dXRlIGZvbnQgaWYgdGhpcyBm
b250IGRpZG4ndCBoYXZlIGEgZ2x5cGggZm9yIGEgY2hhcmFjdGVyIGluIHRoZQotICAgICAgICAv
LyBzdHJpbmcuIElmIG9uZSBpc24ndCBmb3VuZCB3ZSBlbmQgdXAgZHJhd2luZyBhbmQgbWVhc3Vy
aW5nIHRoZSAwIGdseXBoLCB1c3VhbGx5IGEgYm94LgotICAgICAgICBpZiAoZ2x5cGggPT0gMCAm
JiAhbV9zdWJzdGl0dXRlRm9udERhdGEgJiYgbV9zdHlsZS5hdHRlbXB0Rm9udFN1YnN0aXR1dGlv
bigpKSB7Ci0gICAgICAgICAgICBjb25zdCBGb250RGF0YSogc3Vic3RpdHV0ZUZvbnREYXRhID0g
bV9mb250LT5mb250RGF0YUZvckNoYXJhY3RlcnMoY3AsIGNsdXN0ZXJMZW5ndGgpOwotICAgICAg
ICAgICAgaWYgKHN1YnN0aXR1dGVGb250RGF0YSkgewotICAgICAgICAgICAgICAgIEdseXBoQnVm
ZmVyIGxvY2FsR2x5cGhCdWZmZXI7Ci0gICAgICAgICAgICAgICAgbV9mb250LT5mbG9hdFdpZHRo
Rm9yU2ltcGxlVGV4dChUZXh0UnVuKChVQ2hhciopY3AsIGNsdXN0ZXJMZW5ndGgpLCBUZXh0U3R5
bGUoMCwgMCwgMCwgbV9zdHlsZS5ydGwoKSwgbV9zdHlsZS5kaXJlY3Rpb25hbE92ZXJyaWRlKCks
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBtX3N0eWxlLmFw
cGx5V29yZFJvdW5kaW5nKCkpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdWJzdGl0dXRlRm9udERhdGEsIDAsICZsb2NhbEdseXBoQnVmZmVyKTsKLSAgICAgICAgICAg
ICAgICBpZiAobG9jYWxHbHlwaEJ1ZmZlci5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAgICAg
ICAgICBhc3NlcnQoc3Vic3RpdHV0ZUZvbnREYXRhID09IGxvY2FsR2x5cGhCdWZmZXIuZm9udERh
dGFBdCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGdseXBoID0gbG9jYWxHbHlwaEJ1ZmZlci5n
bHlwaEF0KDApOwotICAgICAgICAgICAgICAgICAgICBmb250RGF0YS0+c2V0R2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKGMsIGdseXBoLCBzdWJzdGl0dXRlRm9udERhdGEpOwotICAgICAgICAgICAgICAg
ICAgICBmb250RGF0YSA9IHN1YnN0aXR1dGVGb250RGF0YTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGZvbnREYXRhKTsKIAogICAg
ICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgZ2x5cGggYW5kIGZvbnQgZGF0YSwgZ2V0IGl0cyB3
aWR0aC4KICAgICAgICAgZmxvYXQgd2lkdGg7CkBAIC0zMzEsNiArMjk0LDcgQEAgRm9udDo6Rm9u
dCgpIDptX2ZvbnRMaXN0KDApLCBtX2xldHRlclNwYQogRm9udDo6Rm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZkLCBzaG9ydCBsZXR0ZXJTcGFjaW5nLCBzaG9ydCB3b3JkU3BhY2luZykgCiA6
IG1fZm9udERlc2NyaXB0aW9uKGZkKSwKICAgbV9mb250TGlzdCgwKSwKKyAgbV9wYWdlWmVybygw
KSwKICAgbV9sZXR0ZXJTcGFjaW5nKGxldHRlclNwYWNpbmcpLAogICBtX3dvcmRTcGFjaW5nKHdv
cmRTcGFjaW5nKQoge30KQEAgLTM0MSw2ICszMDUsOCBAQCBGb250OjpGb250KGNvbnN0IEZvbnQm
IG90aGVyKQogICAgIG1fZm9udExpc3QgPSBvdGhlci5tX2ZvbnRMaXN0OwogICAgIG1fbGV0dGVy
U3BhY2luZyA9IG90aGVyLm1fbGV0dGVyU3BhY2luZzsKICAgICBtX3dvcmRTcGFjaW5nID0gb3Ro
ZXIubV93b3JkU3BhY2luZzsKKyAgICBtX3BhZ2VzID0gb3RoZXIubV9wYWdlczsKKyAgICBtX3Bh
Z2VaZXJvID0gb3RoZXIubV9wYWdlWmVybzsKIH0KIAogRm9udCYgRm9udDo6b3BlcmF0b3I9KGNv
bnN0IEZvbnQmIG90aGVyKQpAQCAtMzQ4LDYgKzMxNCw4IEBAIEZvbnQmIEZvbnQ6Om9wZXJhdG9y
PShjb25zdCBGb250JiBvdGhlcikKICAgICBpZiAoJm90aGVyICE9IHRoaXMpIHsKICAgICAgICAg
bV9mb250RGVzY3JpcHRpb24gPSBvdGhlci5tX2ZvbnREZXNjcmlwdGlvbjsKICAgICAgICAgbV9m
b250TGlzdCA9IG90aGVyLm1fZm9udExpc3Q7CisgICAgICAgIG1fcGFnZXMgPSBvdGhlci5tX3Bh
Z2VzOworICAgICAgICBtX3BhZ2VaZXJvID0gb3RoZXIubV9wYWdlWmVybzsKICAgICAgICAgbV9s
ZXR0ZXJTcGFjaW5nID0gb3RoZXIubV9sZXR0ZXJTcGFjaW5nOwogICAgICAgICBtX3dvcmRTcGFj
aW5nID0gb3RoZXIubV93b3JkU3BhY2luZzsKICAgICB9CkBAIC0zNTgsNiArMzI2LDEwOCBAQCBG
b250Ojp+Rm9udCgpCiB7CiB9CiAKKy8vIEZJWE1FOiBJdCBpcyB1bmZvcnR1bmF0ZSB0aGF0IHRo
aXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcGFzc2VkIHRoZSBvcmlnaW5hbCBjbHVzdGVyLgorLy8g
SXQgaXMgb25seSByZXF1aXJlZCBmb3IgdGhlIHBsYXRmb3JtJ3MgRm9udENhY2hlOjpnZXRGb250
RGF0YUZvckNoYXJhY3RlcnMoKSwgYW5kIGl0IG1lYW5zCisvLyB0aGF0IHRoaXMgZnVuY3Rpb24g
aXMgbm90IGNvcnJlY3QgaWYgaXQgdHJhbnNmb3JtcyB0aGUgY2hhcmFjdGVyIHRvIHVwcGVyY2Fz
ZSBhbmQgY2FsbHMKKy8vIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKCkgYWZ0
ZXJ3YXJkcy4KK2NvbnN0IEdseXBoRGF0YSYgRm9udDo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVD
aGFyMzIgYywgY29uc3QgVUNoYXIqIGNsdXN0ZXIsIHVuc2lnbmVkIGNsdXN0ZXJMZW5ndGgsIGJv
b2wgbWlycm9yLCBib29sIGF0dGVtcHRGb250U3Vic3RpdHV0aW9uKSBjb25zdAoreworICAgIGJv
b2wgc21hbGxDYXBzID0gZmFsc2U7CisKKyAgICBpZiAobV9mb250RGVzY3JpcHRpb24uc21hbGxD
YXBzKCkgJiYgIVVuaWNvZGU6OmlzVXBwZXIoYykpIHsKKyAgICAgICAgLy8gQ29udmVydCBsb3dl
cmNhc2UgdG8gdXBwZXIuCisgICAgICAgIFVDaGFyMzIgdXBwZXJDID0gVW5pY29kZTo6dG9VcHBl
cihjKTsKKyAgICAgICAgaWYgKHVwcGVyQyAhPSBjKSB7CisgICAgICAgICAgICBjID0gdXBwZXJD
OworICAgICAgICAgICAgc21hbGxDYXBzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChtaXJyb3IpCisgICAgICAgIGMgPSBtaXJyb3JlZENoYXIoYyk7CisKKyAgICB1bnNpZ25l
ZCBwYWdlTnVtYmVyID0gKGMgLyBHbHlwaFBhZ2U6OnNpemUpOworCisgICAgR2x5cGhQYWdlVHJl
ZU5vZGUqIG5vZGUgPSBwYWdlTnVtYmVyID8gbV9wYWdlcy5nZXQocGFnZU51bWJlcikgOiBtX3Bh
Z2VaZXJvOworICAgIGlmICghbm9kZSkgeworICAgICAgICBub2RlID0gR2x5cGhQYWdlVHJlZU5v
ZGU6OmdldFJvb3RDaGlsZChwcmltYXJ5Rm9udCgpLCBwYWdlTnVtYmVyKTsKKyAgICAgICAgaWYg
KHBhZ2VOdW1iZXIpCisgICAgICAgICAgICBtX3BhZ2VzLnNldChwYWdlTnVtYmVyLCBub2RlKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9wYWdlWmVybyA9IG5vZGU7CisgICAgfQorCisg
ICAgaWYgKCFhdHRlbXB0Rm9udFN1YnN0aXR1dGlvbiAmJiBub2RlLT5sZXZlbCgpICE9IDEpCisg
ICAgICAgIG5vZGUgPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKHByaW1hcnlGb250
KCksIHBhZ2VOdW1iZXIpOworCisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgR2x5cGhQYWdl
KiBwYWdlID0gbm9kZS0+cGFnZSgpOworCisgICAgICAgIGlmIChwYWdlKSB7CisgICAgICAgICAg
ICBjb25zdCBHbHlwaERhdGEmIGRhdGEgPSBwYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7
CisgICAgICAgICAgICBpZiAoZGF0YS5nbHlwaCB8fCAhYXR0ZW1wdEZvbnRTdWJzdGl0dXRpb24p
IHsKKyAgICAgICAgICAgICAgICBpZiAoIXNtYWxsQ2FwcykKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGRhdGE7CisKKyAgICAgICAgICAgICAgICBjb25zdCBGb250RGF0YSogc21hbGxDYXBz
Rm9udERhdGEgPSBkYXRhLmZvbnREYXRhLT5zbWFsbENhcHNGb250RGF0YShtX2ZvbnREZXNjcmlw
dGlvbik7CisKKyAgICAgICAgICAgICAgICBpZiAoIXNtYWxsQ2Fwc0ZvbnREYXRhKQorICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgaWYgaXQgZG9lcywg
d2Ugd2lsbCByZXR1cm4gYSBiaWcgY2FwLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0
YTsKKworICAgICAgICAgICAgICAgIEdseXBoUGFnZVRyZWVOb2RlKiBzbWFsbENhcHNOb2RlID0g
R2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZChzbWFsbENhcHNGb250RGF0YSwgcGFnZU51
bWJlcik7CisgICAgICAgICAgICAgICAgR2x5cGhQYWdlKiBzbWFsbENhcHNQYWdlID0gc21hbGxD
YXBzTm9kZS0+cGFnZSgpOworCisgICAgICAgICAgICAgICAgaWYgKHNtYWxsQ2Fwc1BhZ2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhEYXRhJiBkYXRhID0gc21hbGxDYXBzUGFn
ZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGF0
YS5nbHlwaCB8fCAhYXR0ZW1wdEZvbnRTdWJzdGl0dXRpb24pCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8g
Tm90IGF0dGVtcHRpbmcgc3lzdGVtIGZhbGxiYWNrIG9mZiB0aGUgc21hbGxDYXBzRm9udERhdGEu
IFRoaXMgaXMgdGhlIHZlcnkgdW5saWtlbHkgY2FzZSB0aGF0CisgICAgICAgICAgICAgICAgLy8g
YSBmb250IGhhcyB0aGUgbG93ZXJjYXNlIGNoYXJhY3RlciBidXQgbm90IGl0cyB1cHBlcmNhc2Ug
dmVyc2lvbi4KKyAgICAgICAgICAgICAgICByZXR1cm4gc21hbGxDYXBzRm9udERhdGEtPm1pc3Np
bmdHbHlwaERhdGEoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICghYXR0ZW1w
dEZvbnRTdWJzdGl0dXRpb24pIHsKKyAgICAgICAgICAgIGlmIChzbWFsbENhcHMpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY29uc3QgRm9udERhdGEqIHNtYWxsQ2Fwc0ZvbnREYXRhID0gcHJpbWFy
eUZvbnQoKS0+c21hbGxDYXBzRm9udERhdGEobV9mb250RGVzY3JpcHRpb24pKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc21hbGxDYXBzRm9udERhdGEtPm1pc3NpbmdHbHlwaERhdGEoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwcmltYXJ5Rm9udCgpLT5taXNzaW5n
R2x5cGhEYXRhKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZS0+aXNTeXN0ZW1GYWxs
YmFjaygpKSB7CisgICAgICAgICAgICAvLyBTeXN0ZW0gZmFsbGJhY2sgaXMgY2hhcmFjdGVyLWRl
cGVuZGVudC4KKyAgICAgICAgICAgIGNvbnN0IEZvbnREYXRhKiBjaGFyYWN0ZXJGb250RGF0YSA9
IEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKCp0aGlzLCBjbHVzdGVyLCBjbHVz
dGVyTGVuZ3RoKTsKKyAgICAgICAgICAgIGlmIChzbWFsbENhcHMpCisgICAgICAgICAgICAgICAg
Y2hhcmFjdGVyRm9udERhdGEgPSBjaGFyYWN0ZXJGb250RGF0YS0+c21hbGxDYXBzRm9udERhdGEo
bV9mb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgaWYgKGNoYXJhY3RlckZvbnREYXRhKSB7
CisgICAgICAgICAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIGZhbGxiYWNrTm9kZSA9IEdseXBo
UGFnZVRyZWVOb2RlOjpnZXRSb290Q2hpbGQoY2hhcmFjdGVyRm9udERhdGEsIHBhZ2VOdW1iZXIp
OworICAgICAgICAgICAgICAgIGNvbnN0IEdseXBoRGF0YSYgZGF0YSA9IGZhbGxiYWNrTm9kZS0+
cGFnZSgpLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CisgICAgICAgICAgICAgICAgaWYgKCFz
bWFsbENhcHMpCisgICAgICAgICAgICAgICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckNoYXJh
Y3RlcihjLCBkYXRhLmdseXBoLCBjaGFyYWN0ZXJGb250RGF0YSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGRhdGE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEV2
ZW4gc3lzdGVtIGZhbGxiYWNrIGNhbiBmYWlsLgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBT
aG91bGQgdGhlIGxhc3QgcmVzb3J0IGZvbnQgYmUgdXNlZD8KKyAgICAgICAgICAgICAgICBjb25z
dCBHbHlwaERhdGEmIGRhdGEgPSBwcmltYXJ5Rm9udCgpLT5taXNzaW5nR2x5cGhEYXRhKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFzbWFsbENhcHMpCisgICAgICAgICAgICAgICAgICAgIHBhZ2Ut
PnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBkYXRhLmdseXBoLCBkYXRhLmZvbnREYXRhKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIC8vIFByb2NlZWQgd2l0aCB0aGUgZmFsbGJhY2sgbGlzdC4KKyAgICAgICAgY29u
c3QgRm9udERhdGEqIGZvbnREYXRhID0gZm9udERhdGFBdChub2RlLT5sZXZlbCgpKTsKKyAgICAg
ICAgbm9kZSA9IG5vZGUtPmdldENoaWxkKGZvbnREYXRhLCBwYWdlTnVtYmVyKTsKKworICAgICAg
ICBpZiAocGFnZU51bWJlcikKKyAgICAgICAgICAgIG1fcGFnZXMuc2V0KHBhZ2VOdW1iZXIsIG5v
ZGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3BhZ2VaZXJvID0gbm9kZTsKKyAgICB9
CisKK30KKwogY29uc3QgRm9udERhdGEqIEZvbnQ6OnByaW1hcnlGb250KCkgY29uc3QKIHsKICAg
ICBhc3NlcnQobV9mb250TGlzdCk7CkBAIC0zODYsNiArNDU2LDggQEAgdm9pZCBGb250Ojp1cGRh
dGUoKSBjb25zdAogICAgIGlmICghbV9mb250TGlzdCkKICAgICAgICAgbV9mb250TGlzdCA9IG5l
dyBGb250RmFsbGJhY2tMaXN0KCk7CiAgICAgbV9mb250TGlzdC0+aW52YWxpZGF0ZSgpOworICAg
IG1fcGFnZVplcm8gPSAwOworICAgIG1fcGFnZXMuY2xlYXIoKTsKIH0KIAogaW50IEZvbnQ6Ondp
ZHRoKGNvbnN0IFRleHRSdW4mIHJ1bikgY29uc3QKQEAgLTQ5NSw3ICs1NjcsNyBAQCB2b2lkIEZv
bnQ6OmRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4CiAKICAgICAvLyBPdXIgbWVhc3VyaW5n
IGNvZGUgd2lsbCBnZW5lcmF0ZSBnbHlwaHMgYW5kIGFkdmFuY2VzIGZvciB1cy4KICAgICBmbG9h
dCBzdGFydFg7Ci0gICAgZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVuLCBzdHlsZSwgMCwgJnN0
YXJ0WCwgJmdseXBoQnVmZmVyKTsKKyAgICBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChydW4sIHN0
eWxlLCAmc3RhcnRYLCAmZ2x5cGhCdWZmZXIpOwogICAgIAogICAgIC8vIFdlIGNvdWxkbid0IGdl
bmVyYXRlIGFueSBnbHlwaHMgZm9yIHRoZSBydW4uICBHaXZlIHVwLgogICAgIGlmIChnbHlwaEJ1
ZmZlci5pc0VtcHR5KCkpCkBAIC01NDEsMTYgKzYxMywxNSBAQCB2b2lkIEZvbnQ6OmRyYXdUZXh0
KEdyYXBoaWNzQ29udGV4dCogY29uCiBmbG9hdCBGb250OjpmbG9hdFdpZHRoKGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgVGV4dFN0eWxlJiBzdHlsZSkgY29uc3QKIHsKICAgICBpZiAoY2FuVXNl
R2x5cGhDYWNoZShydW4pKQotICAgICAgICByZXR1cm4gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQo
cnVuLCBzdHlsZSwgMCwgMCwgMCk7CisgICAgICAgIHJldHVybiBmbG9hdFdpZHRoRm9yU2ltcGxl
VGV4dChydW4sIHN0eWxlLCAwLCAwKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBmbG9hdFdp
ZHRoRm9yQ29tcGxleFRleHQocnVuLCBzdHlsZSk7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lk
dGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgVGV4dFN0eWxlJiBzdHls
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvbnREYXRhKiBz
dWJzdGl0dXRlRm9udCwgZmxvYXQqIHN0YXJ0UG9zaXRpb24sIEdseXBoQnVmZmVyKiBnbHlwaEJ1
ZmZlcikgY29uc3QKK2Zsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgVGV4dFN0eWxlJiBzdHlsZSwgZmxvYXQqIHN0YXJ0UG9zaXRpb24s
IEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikgY29uc3QKIHsKICAgICAKLSAgICBXaWR0aEl0ZXJh
dG9yIGl0KHRoaXMsIHJ1biwgc3R5bGUsIHN1YnN0aXR1dGVGb250KTsKKyAgICBXaWR0aEl0ZXJh
dG9yIGl0KHRoaXMsIHJ1biwgc3R5bGUpOwogICAgIGl0LmFkdmFuY2UocnVuLnRvKCksIGdseXBo
QnVmZmVyKTsKICAgICBmbG9hdCBydW5XaWR0aCA9IGl0Lm1fcnVuV2lkdGhTb0ZhcjsKICAgICBp
ZiAoc3RhcnRQb3NpdGlvbikgewpAQCAtNjA4LDcgKzY3OSw3IEBAIGludCBGb250OjpvZmZzZXRG
b3JQb3NpdGlvbkZvclNpbXBsZVRleHQKICAgICBHbHlwaEJ1ZmZlciBsb2NhbEdseXBoQnVmZmVy
OwogICAgIHVuc2lnbmVkIG9mZnNldDsKICAgICBpZiAoc3R5bGUucnRsKCkpIHsKLSAgICAgICAg
ZGVsdGEgLT0gZmxvYXRXaWR0aEZvclNpbXBsZVRleHQocnVuLCBzdHlsZSwgMCwgMCwgMCk7Cisg
ICAgICAgIGRlbHRhIC09IGZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KHJ1biwgc3R5bGUsIDAsIDAp
OwogICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgICAgb2Zmc2V0ID0gaXQubV9jdXJyZW50
Q2hhcmFjdGVyOwogICAgICAgICAgICAgZmxvYXQgdzsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Rm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vRm9udC5oCShyZXZpc2lvbiAx
ODkzMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAjZGVmaW5lIEZvbnRfaAogCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogI2lmIFBMQVRGT1JNKFFUKQogY2xhc3MgUUZv
bnQ7CkBAIC00MCwxMCArNDEsMTMgQEAgY2xhc3MgRm9udERhdGE7CiBjbGFzcyBGb250RmFsbGJh
Y2tMaXN0OwogY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNsYXNzIEdseXBoQnVmZmVyOworY2xh
c3MgR2x5cGhQYWdlVHJlZU5vZGU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBJbnRQ
b2ludDsKIGNsYXNzIFRleHRTdHlsZTsKIAorc3RydWN0IEdseXBoRGF0YTsKKwogY2xhc3MgVGV4
dFJ1biB7CiBwdWJsaWM6CiAgICAgVGV4dFJ1bihjb25zdCBVQ2hhciogYywgaW50IGxlbikKQEAg
LTE0OCw2ICsxNTIsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGb250RGF0YSogcHJpbWFyeUZv
bnQoKSBjb25zdDsKICAgICBjb25zdCBGb250RGF0YSogZm9udERhdGFBdCh1bnNpZ25lZCkgY29u
c3Q7CisgICAgY29uc3QgR2x5cGhEYXRhJiBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwg
Y29uc3QgVUNoYXIqIGNsdXN0ZXIsIHVuc2lnbmVkIGNsdXN0ZXJMZW5ndGgsIGJvb2wgbWlycm9y
LCBib29sIGF0dGVtcHRGb250U3Vic3RpdHV0aW9uKSBjb25zdDsKKyAgICAvLyBVc2VkIGZvciBj
b21wbGV4IHRleHQsIGFuZCBkb2VzIG5vdCB1dGlsaXplIHRoZSBnbHlwaCBtYXAgY2FjaGUuCiAg
ICAgY29uc3QgRm9udERhdGEqIGZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIGlu
dCBsZW5ndGgpIGNvbnN0OwogCiBwcml2YXRlOgpAQCAtMTU2LDggKzE2Miw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgVGV4dFN0eWxlJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAgIHZvaWQg
ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGb250RGF0YSosIGNvbnN0IEdseXBo
QnVmZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogICAg
IHZvaWQgZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBUZXh0U3R5bGUmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0gICAgZmxvYXQgZmxv
YXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGNv
bnN0IEZvbnREYXRhKiBzdWJzdGl0dXRlRm9udERhdGEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQqIHN0YXJ0WCwgR2x5cGhCdWZmZXIqKSBjb25zdDsKKyAgICBmbG9h
dCBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxl
JiwgZmxvYXQqIHN0YXJ0WCwgR2x5cGhCdWZmZXIqKSBjb25zdDsKICAgICBmbG9hdCBmbG9hdFdp
ZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYpIGNvbnN0
OwogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYs
IGNvbnN0IFRleHRTdHlsZSYsIGludCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBo
cykgY29uc3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGludCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFy
dGlhbEdseXBocykgY29uc3Q7CkBAIC0xODIsNiArMTg3LDggQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBGb250RGVzY3JpcHRpb24gbV9mb250RGVzY3JpcHRpb247CiAgICAgbXV0YWJsZSBSZWZQ
dHI8Rm9udEZhbGxiYWNrTGlzdD4gbV9mb250TGlzdDsKKyAgICBtdXRhYmxlIEhhc2hNYXA8aW50
LCBHbHlwaFBhZ2VUcmVlTm9kZSo+IG1fcGFnZXM7CisgICAgbXV0YWJsZSBHbHlwaFBhZ2VUcmVl
Tm9kZSogbV9wYWdlWmVybzsKICAgICBzaG9ydCBtX2xldHRlclNwYWNpbmc7CiAgICAgc2hvcnQg
bV93b3JkU3BhY2luZzsKIH07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0ZvbnREYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0ZvbnREYXRhLmNwcAkocmV2aXNpb24gMTg5
MzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0ZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDQsMTEgKzQ0LDEzIEBAIEZvbnREYXRhOjpGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXQK
ICAgICAvLyBOYXN0eSBoYWNrIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGQgcm91bmQgb3IgY2Vp
bCBzcGFjZSB3aWR0aHMuCiAgICAgLy8gSWYgdGhlIGZvbnQgaXMgbW9ub3NwYWNlIG9yIGZha2Ug
bW9ub3NwYWNlIHdlIGNlaWwgdG8gZW5zdXJlIHRoYXQgCiAgICAgLy8gZXZlcnkgY2hhcmFjdGVy
IGFuZCB0aGUgc3BhY2UgYXJlIHRoZSBzYW1lIHdpZHRoLiAgT3RoZXJ3aXNlIHdlIHJvdW5kLgot
ICAgIG1fc3BhY2VHbHlwaCA9IG1fY2hhcmFjdGVyVG9HbHlwaE1hcC5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoJyAnLCB0aGlzKS5nbHlwaDsKKyAgICBtX3NwYWNlR2x5cGggPSBHbHlwaFBhZ2VUcmVl
Tm9kZTo6Z2V0Um9vdENoaWxkKHRoaXMsIDApLT5wYWdlKCktPmdseXBoRGF0YUZvckNoYXJhY3Rl
cignICcpLmdseXBoOwogICAgIGZsb2F0IHdpZHRoID0gd2lkdGhGb3JHbHlwaChtX3NwYWNlR2x5
cGgpOwogICAgIG1fc3BhY2VXaWR0aCA9IHdpZHRoOwogICAgIGRldGVybWluZVBpdGNoKCk7CiAg
ICAgbV9hZGp1c3RlZFNwYWNlV2lkdGggPSBtX3RyZWF0QXNGaXhlZFBpdGNoID8gY2VpbGYod2lk
dGgpIDogcm91bmRmKHdpZHRoKTsKKyAgICBtX21pc3NpbmdHbHlwaERhdGEuZm9udERhdGEgPSB0
aGlzOworICAgIG1fbWlzc2luZ0dseXBoRGF0YS5nbHlwaCA9IDA7CiB9CiAKIEZvbnREYXRhOjp+
Rm9udERhdGEoKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Gb250RGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vRm9udERhdGEuaAkocmV2aXNpb24gMTg5MzIpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL0ZvbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAK
ICNkZWZpbmUgRm9udERhdGFfaAogCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotI2lu
Y2x1ZGUgIkdseXBoTWFwLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKICNpbmNs
dWRlICJHbHlwaFdpZHRoTWFwLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKQEAg
LTY1LDEwICs2NSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goKTsKICAg
ICBQaXRjaCBwaXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPyBGaXhl
ZFBpdGNoIDogVmFyaWFibGVQaXRjaDsgfQotICAgIAotICAgIC8vIEZJWE1FOiBTaG91bGQgZ28g
YXdheSB3aGVuIHdlIHB1bGwgdGhlIGdseXBoIG1hcCBvdXQgb2YgdGhlIEZvbnREYXRhLgotICAg
IEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdCB7IHJldHVy
biBtX2NoYXJhY3RlclRvR2x5cGhNYXAuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIHRoaXMpOyB9
Ci0gICAgdm9pZCBzZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBHbHlwaCBnbHlw
aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKSBjb25zdCB7IG1fY2hhcmFjdGVyVG9HbHlwaE1h
cC5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGgsIGZvbnREYXRhKTsgfQorCisgICAg
Y29uc3QgR2x5cGhEYXRhJiBtaXNzaW5nR2x5cGhEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9taXNz
aW5nR2x5cGhEYXRhOyB9CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgTlNGb250KiBnZXROU0Zv
bnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQuZm9udDsgfQpAQCAtOTUsNyArOTMsNiBAQCBwdWJs
aWM6CiAgICAgZmxvYXQgbV94SGVpZ2h0OwogICAgIAogICAgIEZvbnRQbGF0Zm9ybURhdGEgbV9m
b250OwotICAgIG11dGFibGUgR2x5cGhNYXAgbV9jaGFyYWN0ZXJUb0dseXBoTWFwOwogICAgIG11
dGFibGUgR2x5cGhXaWR0aE1hcCBtX2dseXBoVG9XaWR0aE1hcDsKIAogICAgIGJvb2wgbV90cmVh
dEFzRml4ZWRQaXRjaDsKQEAgLTEwMyw2ICsxMDAsOCBAQCBwdWJsaWM6CiAgICAgZmxvYXQgbV9z
cGFjZVdpZHRoOwogICAgIGZsb2F0IG1fYWRqdXN0ZWRTcGFjZVdpZHRoOwogCisgICAgR2x5cGhE
YXRhIG1fbWlzc2luZ0dseXBoRGF0YTsKKwogICAgIG11dGFibGUgRm9udERhdGEqIG1fc21hbGxD
YXBzRm9udERhdGE7CiAKICNpZiBQTEFURk9STShDRykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
R2x5cGhNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhNYXAuY3Bw
CShyZXZpc2lvbiAxODkzMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhNYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDEyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJHbHlwaE1hcC5oIgotCi0jaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMu
aCIKLSNpbmNsdWRlICJGb250RGF0YS5oIgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HbHlwaERhdGEgR2x5cGhNYXA6OmdseXBoRGF0
YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKLXsKLSAg
ICB1bnNpZ25lZCBwYWdlTnVtYmVyID0gKGMgLyBHbHlwaFBhZ2U6OnNpemUpOwotICAgIEdseXBo
UGFnZSogcGFnZSA9IGxvY2F0ZVBhZ2UocGFnZU51bWJlciwgZm9udERhdGEpOwotICAgIGlmIChw
YWdlKQotICAgICAgICByZXR1cm4gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwotICAg
IEdseXBoRGF0YSBkYXRhID0geyAwLCBmb250RGF0YSB9OwotICAgIHJldHVybiBkYXRhOwotfQot
Ci12b2lkIEdseXBoTWFwOjpzZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBHbHlw
aCBnbHlwaCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQotewotICAgIHVuc2lnbmVkIHBhZ2VO
dW1iZXIgPSAoYyAvIEdseXBoUGFnZTo6c2l6ZSk7Ci0gICAgR2x5cGhQYWdlKiBwYWdlID0gbG9j
YXRlUGFnZShwYWdlTnVtYmVyLCBmb250RGF0YSk7Ci0gICAgaWYgKHBhZ2UpCi0gICAgICAgIHBh
Z2UtPnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBnbHlwaCwgZm9udERhdGEpOwotfQotCi1p
bmxpbmUgR2x5cGhNYXA6OkdseXBoUGFnZSogR2x5cGhNYXA6OmxvY2F0ZVBhZ2UodW5zaWduZWQg
cGFnZU51bWJlciwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQotewotICAgIEdseXBoUGFnZSog
cGFnZTsKLSAgICBpZiAocGFnZU51bWJlciA9PSAwKSB7Ci0gICAgICAgIGlmIChtX2ZpbGxlZFBy
aW1hcnlQYWdlKQotICAgICAgICAgICAgcmV0dXJuICZtX3ByaW1hcnlQYWdlOwotICAgICAgICBw
YWdlID0gJm1fcHJpbWFyeVBhZ2U7IAotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX3BhZ2Vz
KSB7Ci0gICAgICAgICAgICBHbHlwaFBhZ2UqIHJlc3VsdCA9IG1fcGFnZXMtPmdldChwYWdlTnVt
YmVyKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgfQotICAgICAgICBwYWdlID0gbmV3IEdseXBoUGFnZTsKLSAgICB9Ci0g
ICAgICAKLSAgICB1bnNpZ25lZCBzdGFydCA9IHBhZ2VOdW1iZXIgKiBHbHlwaFBhZ2U6OnNpemU7
Ci0gICAgVUNoYXIgYnVmZmVyW0dseXBoUGFnZTo6c2l6ZSAqIDIgKyAyXTsKLSAgICB1bnNpZ25l
ZCBidWZmZXJMZW5ndGg7Ci0gICAgdW5zaWduZWQgaTsKLQotICAgIC8vIEZpbGwgaW4gYSBidWZm
ZXIgd2l0aCB0aGUgZW50aXJlICJwYWdlIiBvZiBjaGFyYWN0ZXJzIHRoYXQgd2Ugd2FudCB0byBs
b29rIHVwIGdseXBocyBmb3IuCi0gICAgaWYgKHN0YXJ0IDwgMHgxMDAwMCkgewotICAgICAgICBi
dWZmZXJMZW5ndGggPSBHbHlwaFBhZ2U6OnNpemU7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBH
bHlwaFBhZ2U6OnNpemU7IGkrKykKLSAgICAgICAgICAgIGJ1ZmZlcltpXSA9IHN0YXJ0ICsgaTsK
LQotICAgICAgICBpZiAoc3RhcnQgPT0gMCkgewotICAgICAgICAgICAgLy8gQ29udHJvbCBjaGFy
YWN0ZXJzIG11c3Qgbm90IHJlbmRlciBhdCBhbGwuCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgMHgyMDsgKytpKQotICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9IHplcm9XaWR0aFNwYWNl
OwotICAgICAgICAgICAgZm9yIChpID0gMHg3RjsgaSA8IDB4QTA7IGkrKykKLSAgICAgICAgICAg
ICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKLQotICAgICAgICAgICAgLy8gXG4sIFx0
LCBhbmQgbm9uYnJlYWtpbmcgc3BhY2UgbXVzdCByZW5kZXIgYXMgYSBzcGFjZS4KLSAgICAgICAg
ICAgIGJ1ZmZlclsoaW50KSdcbiddID0gJyAnOwotICAgICAgICAgICAgYnVmZmVyWyhpbnQpJ1x0
J10gPSAnICc7Ci0gICAgICAgICAgICBidWZmZXJbbm9CcmVha1NwYWNlXSA9ICcgJzsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ1ZmZlckxlbmd0aCA9IEdseXBoUGFnZTo6c2l6
ZSAqIDI7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykgewot
ICAgICAgICAgICAgaW50IGMgPSBpICsgc3RhcnQ7Ci0gICAgICAgICAgICBidWZmZXJbaSAqIDJd
ID0gVTE2X0xFQUQoYyk7Ci0gICAgICAgICAgICBidWZmZXJbaSAqIDIgKyAxXSA9IFUxNl9UUkFJ
TChjKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEg
YnVmZmVyIGZ1bGwgb2YgY2hhcmFjdGVycywgd2Ugd2FudCB0byBnZXQgYmFjayBhbiBhcnJheQot
ICAgIC8vIG9mIGdseXBoIGluZGljZXMuICBUaGlzIHBhcnQgaW52b2x2ZXMgY2FsbGluZyBpbnRv
IHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyAKLSAgICAvLyByb3V0aW5lIG9mIG91ciBnbHlwaCBtYXAg
Zm9yIGFjdHVhbGx5IGZpbGxpbmcgaW4gdGhlIHBhZ2Ugd2l0aCB0aGUgZ2x5cGhzLgotICAgIGJv
b2wgc3VjY2VzcyA9IGZpbGxQYWdlKHBhZ2UsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250RGF0
YSk7Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgIGlmIChwYWdlTnVtYmVyICE9IDApCi0g
ICAgICAgICAgICBkZWxldGUgcGFnZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAot
ICAgIGlmIChwYWdlTnVtYmVyID09IDApCi0gICAgICAgIG1fZmlsbGVkUHJpbWFyeVBhZ2UgPSB0
cnVlOwotICAgIGVsc2UgewotICAgICAgICBpZiAoIW1fcGFnZXMpCi0gICAgICAgICAgICBtX3Bh
Z2VzID0gbmV3IEhhc2hNYXA8aW50LCBHbHlwaFBhZ2UqPjsKLSAgICAgICAgbV9wYWdlcy0+c2V0
KHBhZ2VOdW1iZXIsIHBhZ2UpOwotICAgIH0KLQotICAgIHJldHVybiBwYWdlOwotfQotCi19Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0dseXBoTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9HbHlwaE1hcC5oCShyZXZpc2lvbiAxODkzMikKKysrIFdlYkNvcmUvcGxhdGZvcm0v
R2x5cGhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgR2x5cGhNYXBfaAotI2RlZmluZSBHbHlwaE1hcF9oCi0KLSNpbmNsdWRlIDx3dGYv
dW5pY29kZS9Vbmljb2RlLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGb250RGF0
YTsKLQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBHbHlwaDsKLQotc3RydWN0IEdseXBoRGF0YSB7
ICAgIAotICAgIEdseXBoIGdseXBoOwotICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YTsKLX07
Ci0KLWNsYXNzIEdseXBoTWFwIDogTm9uY29weWFibGUgewotcHVibGljOgotICAgIEdseXBoTWFw
KCkgOiBtX2ZpbGxlZFByaW1hcnlQYWdlKGZhbHNlKSwgbV9wYWdlcygwKSB7fQotICAgIH5HbHlw
aE1hcCgpIHsgaWYgKG1fcGFnZXMpIHsgZGVsZXRlQWxsVmFsdWVzKCptX3BhZ2VzKTsgZGVsZXRl
IG1fcGFnZXM7IH0gfQotCi0gICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hh
cjMyLCBjb25zdCBGb250RGF0YSopOwotICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KFVDaGFyMzIsIEdseXBoLCBjb25zdCBGb250RGF0YSopOwotCi1wcml2YXRlOgotICAgIHN0cnVj
dCBHbHlwaFBhZ2UgewotICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUgPSAyNTY7IC8v
IENvdmVycyBMYXRpbi0xIGluIGEgc2luZ2xlIHBhZ2UuCi0gICAgICAgIEdseXBoRGF0YSBtX2ds
eXBoc1tzaXplXTsKLQotICAgICAgICBjb25zdCBHbHlwaERhdGEmIGdseXBoRGF0YUZvckNoYXJh
Y3RlcihVQ2hhcjMyIGMpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzW2MgJSBzaXplXTsgfQotICAg
ICAgICB2b2lkIHNldEdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIEdseXBoIGcsIGNv
bnN0IEZvbnREYXRhKiBmKQotICAgICAgICB7Ci0gICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJ
bmRleChjICUgc2l6ZSwgZywgZik7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXRHbHlwaERh
dGFGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgR2x5cGggZywgY29uc3QgRm9udERhdGEqIGYpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1fZ2x5cGhzW2luZGV4XS5nbHlwaCA9IGc7Ci0gICAgICAg
ICAgICBtX2dseXBoc1tpbmRleF0uZm9udERhdGEgPSBmOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIEdseXBoUGFnZSogbG9jYXRlUGFnZSh1bnNpZ25lZCBwYWdlLCBjb25zdCBGb250RGF0YSog
Zm9udERhdGEpOwotICAgIGJvb2wgZmlsbFBhZ2UoR2x5cGhQYWdlKiwgVUNoYXIqIGNoYXJhY3Rl
ckJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9udERhdGEp
OwotCi0gICAgYm9vbCBtX2ZpbGxlZFByaW1hcnlQYWdlOwotICAgIEdseXBoUGFnZSBtX3ByaW1h
cnlQYWdlOyAvLyBXZSBvcHRpbWl6ZSBmb3IgdGhlIHBhZ2UgdGhhdCBjb250YWlucyBMYXRpbi0x
LgotICAgIEhhc2hNYXA8aW50LCBHbHlwaFBhZ2UqPiogbV9wYWdlczsKLX07Ci0KLX0KLQotI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0dseXBoUGFnZVRyZWVOb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0dseXBoUGFnZVRyZWVOb2RlLmNwcAkocmV2aXNpb24g
MTg5MzApCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vR2x5cGhNYXAuY3BwOjE4OTMwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9HbHlwaFBhZ2VUcmVlTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkdseXBoTWFwLmgiCisKKyNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgorI2luY2x1ZGUgIkZv
bnREYXRhLmgiCisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0dseXBoRGF0YSBHbHlwaE1hcDo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVD
aGFyMzIgYywgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQoreworICAgIHVuc2lnbmVkIHBhZ2VO
dW1iZXIgPSAoYyAvIEdseXBoUGFnZTo6c2l6ZSk7CisgICAgR2x5cGhQYWdlKiBwYWdlID0gbG9j
YXRlUGFnZShwYWdlTnVtYmVyLCBmb250RGF0YSk7CisgICAgaWYgKHBhZ2UpCisgICAgICAgIHJl
dHVybiBwYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7CisgICAgR2x5cGhEYXRhIGRhdGEg
PSB7IDAsIGZvbnREYXRhIH07CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK3ZvaWQgR2x5cGhNYXA6
OnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIEdseXBoIGdseXBoLCBjb25zdCBG
b250RGF0YSogZm9udERhdGEpCit7CisgICAgdW5zaWduZWQgcGFnZU51bWJlciA9IChjIC8gR2x5
cGhQYWdlOjpzaXplKTsKKyAgICBHbHlwaFBhZ2UqIHBhZ2UgPSBsb2NhdGVQYWdlKHBhZ2VOdW1i
ZXIsIGZvbnREYXRhKTsKKyAgICBpZiAocGFnZSkKKyAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKGMsIGdseXBoLCBmb250RGF0YSk7Cit9CisKK2lubGluZSBHbHlwaE1hcDo6
R2x5cGhQYWdlKiBHbHlwaE1hcDo6bG9jYXRlUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25z
dCBGb250RGF0YSogZm9udERhdGEpCit7CisgICAgR2x5cGhQYWdlKiBwYWdlOworICAgIGlmIChw
YWdlTnVtYmVyID09IDApIHsKKyAgICAgICAgaWYgKG1fZmlsbGVkUHJpbWFyeVBhZ2UpCisgICAg
ICAgICAgICByZXR1cm4gJm1fcHJpbWFyeVBhZ2U7CisgICAgICAgIHBhZ2UgPSAmbV9wcmltYXJ5
UGFnZTsgCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fcGFnZXMpIHsKKyAgICAgICAgICAg
IEdseXBoUGFnZSogcmVzdWx0ID0gbV9wYWdlcy0+Z2V0KHBhZ2VOdW1iZXIpOworICAgICAgICAg
ICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9
CisgICAgICAgIHBhZ2UgPSBuZXcgR2x5cGhQYWdlOworICAgIH0KKyAgICAgIAorICAgIHVuc2ln
bmVkIHN0YXJ0ID0gcGFnZU51bWJlciAqIEdseXBoUGFnZTo6c2l6ZTsKKyAgICBVQ2hhciBidWZm
ZXJbR2x5cGhQYWdlOjpzaXplICogMiArIDJdOworICAgIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aDsK
KyAgICB1bnNpZ25lZCBpOworCisgICAgLy8gRmlsbCBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBlbnRp
cmUgInBhZ2UiIG9mIGNoYXJhY3RlcnMgdGhhdCB3ZSB3YW50IHRvIGxvb2sgdXAgZ2x5cGhzIGZv
ci4KKyAgICBpZiAoc3RhcnQgPCAweDEwMDAwKSB7CisgICAgICAgIGJ1ZmZlckxlbmd0aCA9IEds
eXBoUGFnZTo6c2l6ZTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsg
aSsrKQorICAgICAgICAgICAgYnVmZmVyW2ldID0gc3RhcnQgKyBpOworCisgICAgICAgIGlmIChz
dGFydCA9PSAwKSB7CisgICAgICAgICAgICAvLyBDb250cm9sIGNoYXJhY3RlcnMgbXVzdCBub3Qg
cmVuZGVyIGF0IGFsbC4KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAweDIwOyArK2kpCisg
ICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRoU3BhY2U7CisgICAgICAgICAgICBm
b3IgKGkgPSAweDdGOyBpIDwgMHhBMDsgaSsrKQorICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9
IHplcm9XaWR0aFNwYWNlOworCisgICAgICAgICAgICAvLyBcbiwgXHQsIGFuZCBub25icmVha2lu
ZyBzcGFjZSBtdXN0IHJlbmRlciBhcyBhIHNwYWNlLgorICAgICAgICAgICAgYnVmZmVyWyhpbnQp
J1xuJ10gPSAnICc7CisgICAgICAgICAgICBidWZmZXJbKGludCknXHQnXSA9ICcgJzsKKyAgICAg
ICAgICAgIGJ1ZmZlcltub0JyZWFrU3BhY2VdID0gJyAnOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYnVmZmVyTGVuZ3RoID0gR2x5cGhQYWdlOjpzaXplICogMjsKKyAgICAgICAg
Zm9yIChpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBpbnQg
YyA9IGkgKyBzdGFydDsKKyAgICAgICAgICAgIGJ1ZmZlcltpICogMl0gPSBVMTZfTEVBRChjKTsK
KyAgICAgICAgICAgIGJ1ZmZlcltpICogMiArIDFdID0gVTE2X1RSQUlMKGMpOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBidWZmZXIgZnVsbCBvZiBj
aGFyYWN0ZXJzLCB3ZSB3YW50IHRvIGdldCBiYWNrIGFuIGFycmF5CisgICAgLy8gb2YgZ2x5cGgg
aW5kaWNlcy4gIFRoaXMgcGFydCBpbnZvbHZlcyBjYWxsaW5nIGludG8gdGhlIHBsYXRmb3JtLXNw
ZWNpZmljIAorICAgIC8vIHJvdXRpbmUgb2Ygb3VyIGdseXBoIG1hcCBmb3IgYWN0dWFsbHkgZmls
bGluZyBpbiB0aGUgcGFnZSB3aXRoIHRoZSBnbHlwaHMuCisgICAgYm9vbCBzdWNjZXNzID0gZmls
bFBhZ2UocGFnZSwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKTsKKyAgICBpZiAoIXN1
Y2Nlc3MpIHsKKyAgICAgICAgaWYgKHBhZ2VOdW1iZXIgIT0gMCkKKyAgICAgICAgICAgIGRlbGV0
ZSBwYWdlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgaWYgKHBhZ2VOdW1i
ZXIgPT0gMCkKKyAgICAgICAgbV9maWxsZWRQcmltYXJ5UGFnZSA9IHRydWU7CisgICAgZWxzZSB7
CisgICAgICAgIGlmICghbV9wYWdlcykKKyAgICAgICAgICAgIG1fcGFnZXMgPSBuZXcgSGFzaE1h
cDxpbnQsIEdseXBoUGFnZSo+OworICAgICAgICBtX3BhZ2VzLT5zZXQocGFnZU51bWJlciwgcGFn
ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHBhZ2U7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vR2x5cGhQYWdlVHJlZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vR2x5cGhQYWdlVHJlZU5vZGUuY3BwCShyZXZpc2lvbiAxODkzMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vR2x5cGhQYWdlVHJlZU5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3
IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoTWFwLmgiCisj
aW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKIAogI2luY2x1ZGUgIkNoYXJhY3Rlck5hbWVz
LmgiCiAjaW5jbHVkZSAiRm9udERhdGEuaCIKQEAgLTM1LDkxICszNSwxNDkgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1HbHlwaERhdGEgR2x5cGhNYXA6OmdseXBoRGF0YUZvckNoYXJhY3Rl
cihVQ2hhcjMyIGMsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKK0dseXBoUGFnZVRyZWVOb2Rl
KiBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdCh1bnNpZ25lZCBwYWdlTnVtYmVyKQogewotICAg
IHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSAoYyAvIEdseXBoUGFnZTo6c2l6ZSk7Ci0gICAgR2x5cGhQ
YWdlKiBwYWdlID0gbG9jYXRlUGFnZShwYWdlTnVtYmVyLCBmb250RGF0YSk7Ci0gICAgaWYgKHBh
Z2UpCi0gICAgICAgIHJldHVybiBwYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYyk7Ci0gICAg
R2x5cGhEYXRhIGRhdGEgPSB7IDAsIGZvbnREYXRhIH07Ci0gICAgcmV0dXJuIGRhdGE7CisgICAg
c3RhdGljIEhhc2hNYXA8aW50LCBHbHlwaFBhZ2VUcmVlTm9kZSo+IHJvb3RzOworICAgIHN0YXRp
YyBHbHlwaFBhZ2VUcmVlTm9kZSogcGFnZVplcm9Sb290OworICAgIEdseXBoUGFnZVRyZWVOb2Rl
KiBub2RlID0gcGFnZU51bWJlciA/IHJvb3RzLmdldChwYWdlTnVtYmVyKSA6IHBhZ2VaZXJvUm9v
dDsKKyAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgbm9kZSA9IG5ldyBHbHlwaFBhZ2VUcmVlTm9k
ZSgpOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgbm9kZS0+bV9wYWdlTnVtYmVyID0gcGFnZU51
bWJlcjsKKyNlbmRpZgorICAgICAgICBpZiAocGFnZU51bWJlcikKKyAgICAgICAgICAgIHJvb3Rz
LnNldChwYWdlTnVtYmVyLCBub2RlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFnZVpl
cm9Sb290ID0gbm9kZTsKKyAgICB9CisgICAgcmV0dXJuIG5vZGU7CiB9CiAKLXZvaWQgR2x5cGhN
YXA6OnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIEdseXBoIGdseXBoLCBjb25z
dCBGb250RGF0YSogZm9udERhdGEpCit2b2lkIEdseXBoUGFnZVRyZWVOb2RlOjppbml0aWFsaXpl
UGFnZShjb25zdCBGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIHBhZ2VOdW1iZXIpCiB7Ci0g
ICAgdW5zaWduZWQgcGFnZU51bWJlciA9IChjIC8gR2x5cGhQYWdlOjpzaXplKTsKLSAgICBHbHlw
aFBhZ2UqIHBhZ2UgPSBsb2NhdGVQYWdlKHBhZ2VOdW1iZXIsIGZvbnREYXRhKTsKLSAgICBpZiAo
cGFnZSkKLSAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIGdseXBoLCBm
b250RGF0YSk7Ci19CisgICAgQVNTRVJUKCFtX3BhZ2UpOwogCi1pbmxpbmUgR2x5cGhNYXA6Okds
eXBoUGFnZSogR2x5cGhNYXA6OmxvY2F0ZVBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3Qg
Rm9udERhdGEqIGZvbnREYXRhKQotewotICAgIEdseXBoUGFnZSogcGFnZTsKLSAgICBpZiAocGFn
ZU51bWJlciA9PSAwKSB7Ci0gICAgICAgIGlmIChtX2ZpbGxlZFByaW1hcnlQYWdlKQotICAgICAg
ICAgICAgcmV0dXJuICZtX3ByaW1hcnlQYWdlOwotICAgICAgICBwYWdlID0gJm1fcHJpbWFyeVBh
Z2U7IAotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX3BhZ2VzKSB7Ci0gICAgICAgICAgICBH
bHlwaFBhZ2UqIHJlc3VsdCA9IG1fcGFnZXMtPmdldChwYWdlTnVtYmVyKTsKLSAgICAgICAgICAg
IGlmIChyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQot
ICAgICAgICBwYWdlID0gbmV3IEdseXBoUGFnZTsKLSAgICB9Ci0gICAgICAKLSAgICB1bnNpZ25l
ZCBzdGFydCA9IHBhZ2VOdW1iZXIgKiBHbHlwaFBhZ2U6OnNpemU7Ci0gICAgVUNoYXIgYnVmZmVy
W0dseXBoUGFnZTo6c2l6ZSAqIDIgKyAyXTsKLSAgICB1bnNpZ25lZCBidWZmZXJMZW5ndGg7Ci0g
ICAgdW5zaWduZWQgaTsKLQotICAgIC8vIEZpbGwgaW4gYSBidWZmZXIgd2l0aCB0aGUgZW50aXJl
ICJwYWdlIiBvZiBjaGFyYWN0ZXJzIHRoYXQgd2Ugd2FudCB0byBsb29rIHVwIGdseXBocyBmb3Iu
Ci0gICAgaWYgKHN0YXJ0IDwgMHgxMDAwMCkgewotICAgICAgICBidWZmZXJMZW5ndGggPSBHbHlw
aFBhZ2U6OnNpemU7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkr
KykKLSAgICAgICAgICAgIGJ1ZmZlcltpXSA9IHN0YXJ0ICsgaTsKLQotICAgICAgICBpZiAoc3Rh
cnQgPT0gMCkgewotICAgICAgICAgICAgLy8gQ29udHJvbCBjaGFyYWN0ZXJzIG11c3Qgbm90IHJl
bmRlciBhdCBhbGwuCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMHgyMDsgKytpKQotICAg
ICAgICAgICAgICAgIGJ1ZmZlcltpXSA9IHplcm9XaWR0aFNwYWNlOwotICAgICAgICAgICAgZm9y
IChpID0gMHg3RjsgaSA8IDB4QTA7IGkrKykKLSAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6
ZXJvV2lkdGhTcGFjZTsKLQotICAgICAgICAgICAgLy8gXG4sIFx0LCBhbmQgbm9uYnJlYWtpbmcg
c3BhY2UgbXVzdCByZW5kZXIgYXMgYSBzcGFjZS4KLSAgICAgICAgICAgIGJ1ZmZlclsoaW50KSdc
biddID0gJyAnOwotICAgICAgICAgICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAnICc7Ci0gICAgICAg
ICAgICBidWZmZXJbbm9CcmVha1NwYWNlXSA9ICcgJzsKKyAgICBHbHlwaFBhZ2UqIHBhcmVudFBh
Z2UgPSBtX3BhcmVudC0+bV9wYWdlOworCisgICAgaWYgKGZvbnREYXRhKSB7CisgICAgICAgIGlm
IChtX2xldmVsID09IDEpIHsKKyAgICAgICAgICAgIC8vIENoaWxkcmVuIG9mIHRoZSByb290IGhv
bGQgcHVyZSBwYWdlcy4KKyAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gcGFnZU51bWJlciAq
IEdseXBoUGFnZTo6c2l6ZTsKKyAgICAgICAgICAgIFVDaGFyIGJ1ZmZlcltHbHlwaFBhZ2U6OnNp
emUgKiAyICsgMl07CisgICAgICAgICAgICB1bnNpZ25lZCBidWZmZXJMZW5ndGg7CisgICAgICAg
ICAgICB1bnNpZ25lZCBpOworCisgICAgICAgICAgICAvLyBGaWxsIGluIGEgYnVmZmVyIHdpdGgg
dGhlIGVudGlyZSAicGFnZSIgb2YgY2hhcmFjdGVycyB0aGF0IHdlIHdhbnQgdG8gbG9vayB1cCBn
bHlwaHMgZm9yLgorICAgICAgICAgICAgaWYgKHN0YXJ0IDwgMHgxMDAwMCkgeworICAgICAgICAg
ICAgICAgIGJ1ZmZlckxlbmd0aCA9IEdseXBoUGFnZTo6c2l6ZTsKKyAgICAgICAgICAgICAgICBm
b3IgKGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAg
IGJ1ZmZlcltpXSA9IHN0YXJ0ICsgaTsKKworICAgICAgICAgICAgICAgIGlmIChzdGFydCA9PSAw
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIENvbnRyb2wgY2hhcmFjdGVycyBtdXN0IG5vdCBy
ZW5kZXIgYXQgYWxsLgorICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMHgyMDsg
KytpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gemVyb1dpZHRoU3BhY2U7
CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDB4N0Y7IGkgPCAweEEwOyBpKyspCisgICAg
ICAgICAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSB6ZXJvV2lkdGhTcGFjZTsKKworICAgICAg
ICAgICAgICAgICAgICAvLyBcbiwgXHQsIGFuZCBub25icmVha2luZyBzcGFjZSBtdXN0IHJlbmRl
ciBhcyBhIHNwYWNlLgorICAgICAgICAgICAgICAgICAgICBidWZmZXJbKGludCknXG4nXSA9ICcg
JzsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyWyhpbnQpJ1x0J10gPSAnICc7CisgICAgICAg
ICAgICAgICAgICAgIGJ1ZmZlcltub0JyZWFrU3BhY2VdID0gJyAnOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnVmZmVyTGVuZ3RoID0g
R2x5cGhQYWdlOjpzaXplICogMjsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgR2x5
cGhQYWdlOjpzaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGMgPSBpICsgc3Rh
cnQ7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpICogMl0gPSBVMTZfTEVBRChjKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnVmZmVyW2kgKiAyICsgMV0gPSBVMTZfVFJBSUwoYyk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBt
X3BhZ2UgPSBuZXcgR2x5cGhQYWdlKHRoaXMpOworCisgICAgICAgICAgICAvLyBOb3cgdGhhdCB3
ZSBoYXZlIGEgYnVmZmVyIGZ1bGwgb2YgY2hhcmFjdGVycywgd2Ugd2FudCB0byBnZXQgYmFjayBh
biBhcnJheQorICAgICAgICAgICAgLy8gb2YgZ2x5cGggaW5kaWNlcy4gIFRoaXMgcGFydCBpbnZv
bHZlcyBjYWxsaW5nIGludG8gdGhlIHBsYXRmb3JtLXNwZWNpZmljIAorICAgICAgICAgICAgLy8g
cm91dGluZSBvZiBvdXIgZ2x5cGggbWFwIGZvciBhY3R1YWxseSBmaWxsaW5nIGluIHRoZSBwYWdl
IHdpdGggdGhlIGdseXBocy4KKyAgICAgICAgICAgIC8vIFN1Y2Nlc3MgaXMgbm90IGd1YXJhbnRl
ZWQuIEZvciBleGFtcGxlLCBUaW1lcyBmYWlscyB0byBmaWxsIHBhZ2UgMjYwLCBnaXZpbmcgZ2x5
cGggZGF0YQorICAgICAgICAgICAgLy8gZm9yIG9ubHkgMTI4IG91dCBvZiAyNTYgY2hhcmFjdGVy
cy4KKyAgICAgICAgICAgIGJvb2wgaGF2ZUdseXBocyA9IG1fcGFnZS0+ZmlsbChidWZmZXIsIGJ1
ZmZlckxlbmd0aCwgZm9udERhdGEpOworCisgICAgICAgICAgICBpZiAoIWhhdmVHbHlwaHMpIHsK
KyAgICAgICAgICAgICAgICBkZWxldGUgbV9wYWdlOworICAgICAgICAgICAgICAgIG1fcGFnZSA9
IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocGFyZW50UGFnZSAmJiBwYXJl
bnRQYWdlLT5vd25lcigpICE9IG1fcGFyZW50KQorICAgICAgICAgICAgLy8gRW5zdXJlcyB0aGF0
IHRoZSBvdmVybGF5IHBhZ2UgaXMgb3duZWQgYnkgdGhlIGNoaWxkIG9mIHRoZSBvd25lciBvZiB0
aGUKKyAgICAgICAgICAgIC8vIHBhcmVudCBwYWdlLCBhbmQgdGhlcmVmb3JlIHdpbGwgYmUgc2hh
cmVkLgorICAgICAgICAgICAgbV9wYWdlID0gcGFyZW50UGFnZS0+b3duZXIoKS0+Z2V0Q2hpbGQo
Zm9udERhdGEsIHBhZ2VOdW1iZXIpLT5wYWdlKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgLy8gR2V0IHRoZSBwdXJlIHBhZ2UgZm9yIHRoZSBmYWxsYmFjayBmb250LgorICAgICAgICAg
ICAgR2x5cGhQYWdlKiBmYWxsYmFja1BhZ2UgPSBnZXRSb290Q2hpbGQoZm9udERhdGEsIHBhZ2VO
dW1iZXIpLT5wYWdlKCk7CisgICAgICAgICAgICBpZiAoIXBhcmVudFBhZ2UpCisgICAgICAgICAg
ICAgICAgbV9wYWdlID0gZmFsbGJhY2tQYWdlOworICAgICAgICAgICAgZWxzZSBpZiAoIWZhbGxi
YWNrUGFnZSkgeworICAgICAgICAgICAgICAgIG1fcGFnZSA9IHBhcmVudFBhZ2U7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fcGFnZSA9IG5ldyBHbHlwaFBhZ2UodGhp
cyk7CisKKyAgICAgICAgICAgICAgICAvLyBPdmVybGF5IHRoZSBwYXJlbnQgcGFnZSBvbiB0aGUg
ZmFsbGJhY2sgcGFnZS4gQ2hlY2sgaWYgdGhlIGZhbGxiYWNrIGZvbnQKKyAgICAgICAgICAgICAg
ICAvLyBoYXMgYWRkZWQgYW55dGhpbmcuCisgICAgICAgICAgICAgICAgYm9vbCBuZXdHbHlwaHMg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQ
YWdlOjpzaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFBhZ2UtPm1f
Z2x5cGhzW2ldLmdseXBoKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9wYWdlLT5tX2dseXBo
c1tpXSA9IHBhcmVudFBhZ2UtPm1fZ2x5cGhzW2ldOworICAgICAgICAgICAgICAgICAgICBlbHNl
ICBpZiAoZmFsbGJhY2tQYWdlLT5tX2dseXBoc1tpXS5nbHlwaCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9wYWdlLT5tX2dseXBoc1tpXSA9IGZhbGxiYWNrUGFnZS0+bV9nbHlwaHNbaV07
CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdHbHlwaHMgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR2x5cGhEYXRh
IGRhdGEgPSB7IDAsIDAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFnZS0+bV9nbHlw
aHNbaV0gPSBkYXRhOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgaWYgKCFuZXdHbHlwaHMpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIG1fcGFnZTsKKyAgICAgICAgICAgICAgICAgICAgbV9wYWdlID0gcGFyZW50UGFnZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewotICAgICAgICBidWZmZXJMZW5ndGggPSBHbHlwaFBhZ2U6OnNpemUgKiAyOwotICAgICAgICBm
b3IgKGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKLSAgICAgICAgICAgIGludCBj
ID0gaSArIHN0YXJ0OwotICAgICAgICAgICAgYnVmZmVyW2kgKiAyXSA9IFUxNl9MRUFEKGMpOwot
ICAgICAgICAgICAgYnVmZmVyW2kgKiAyICsgMV0gPSBVMTZfVFJBSUwoYyk7CisgICAgICAgIG1f
cGFnZSA9IG5ldyBHbHlwaFBhZ2UodGhpcyk7CisgICAgICAgIC8vIFN5c3RlbSBmYWxsYmFjay4g
SW5pdGlhbGl6ZWQgd2l0aCB0aGUgcGFyZW50J3MgcGFnZSBoZXJlLCBhcyBpbmRpdmlkdWFsCisg
ICAgICAgIC8vIGVudHJpZXMgbWF5IHVzZSBkaWZmZXJlbnQgZm9udHMgZGVwZW5kaW5nIG9uIGNo
YXJhY3Rlci4KKyAgICAgICAgaWYgKHBhcmVudFBhZ2UpCisgICAgICAgICAgICBtZW1jcHkobV9w
YWdlLT5tX2dseXBocywgcGFyZW50UGFnZS0+bV9nbHlwaHMsIEdseXBoUGFnZTo6c2l6ZSAqIHNp
emVvZihtX3BhZ2UtPm1fZ2x5cGhzWzBdKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
Y29uc3QgR2x5cGhEYXRhIGRhdGEgPSB7IDAsIDAgfTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykKKyAgICAgICAgICAgICAgICBtX3Bh
Z2UtPm1fZ2x5cGhzW2ldID0gZGF0YTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAvLyBO
b3cgdGhhdCB3ZSBoYXZlIGEgYnVmZmVyIGZ1bGwgb2YgY2hhcmFjdGVycywgd2Ugd2FudCB0byBn
ZXQgYmFjayBhbiBhcnJheQotICAgIC8vIG9mIGdseXBoIGluZGljZXMuICBUaGlzIHBhcnQgaW52
b2x2ZXMgY2FsbGluZyBpbnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyAKLSAgICAvLyByb3V0aW5l
IG9mIG91ciBnbHlwaCBtYXAgZm9yIGFjdHVhbGx5IGZpbGxpbmcgaW4gdGhlIHBhZ2Ugd2l0aCB0
aGUgZ2x5cGhzLgotICAgIGJvb2wgc3VjY2VzcyA9IGZpbGxQYWdlKHBhZ2UsIGJ1ZmZlciwgYnVm
ZmVyTGVuZ3RoLCBmb250RGF0YSk7Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgIGlmIChw
YWdlTnVtYmVyICE9IDApCi0gICAgICAgICAgICBkZWxldGUgcGFnZTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIAotICAgIGlmIChwYWdlTnVtYmVyID09IDApCi0gICAgICAgIG1fZmls
bGVkUHJpbWFyeVBhZ2UgPSB0cnVlOwotICAgIGVsc2UgewotICAgICAgICBpZiAoIW1fcGFnZXMp
Ci0gICAgICAgICAgICBtX3BhZ2VzID0gbmV3IEhhc2hNYXA8aW50LCBHbHlwaFBhZ2UqPjsKLSAg
ICAgICAgbV9wYWdlcy0+c2V0KHBhZ2VOdW1iZXIsIHBhZ2UpOwotICAgIH0KK30KIAotICAgIHJl
dHVybiBwYWdlOworR2x5cGhQYWdlVHJlZU5vZGUqIEdseXBoUGFnZVRyZWVOb2RlOjpnZXRDaGls
ZChjb25zdCBGb250RGF0YSogZm9udERhdGEsIHVuc2lnbmVkIHBhZ2VOdW1iZXIpCit7CisgICAg
QVNTRVJUKGZvbnREYXRhIHx8ICFtX2lzU3lzdGVtRmFsbGJhY2spOworICAgIEFTU0VSVChwYWdl
TnVtYmVyID09IG1fcGFnZU51bWJlcik7CisKKyAgICBHbHlwaFBhZ2VUcmVlTm9kZSogY2hpbGQg
PSBmb250RGF0YSA/IG1fY2hpbGRyZW4uZ2V0KGZvbnREYXRhKSA6IG1fc3lzdGVtRmFsbGJhY2tD
aGlsZDsKKyAgICBpZiAoIWNoaWxkKSB7CisgICAgICAgIGNoaWxkID0gbmV3IEdseXBoUGFnZVRy
ZWVOb2RlOworICAgICAgICBjaGlsZC0+bV9wYXJlbnQgPSB0aGlzOworICAgICAgICBjaGlsZC0+
bV9sZXZlbCA9IG1fbGV2ZWwgKyAxOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgY2hpbGQtPm1f
cGFnZU51bWJlciA9IG1fcGFnZU51bWJlcjsKKyNlbmRpZgorICAgICAgICBpZiAoZm9udERhdGEp
CisgICAgICAgICAgICBtX2NoaWxkcmVuLnNldChmb250RGF0YSwgY2hpbGQpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIG1fc3lzdGVtRmFsbGJhY2tDaGlsZCA9IGNoaWxkOworICAgICAg
ICAgICAgY2hpbGQtPm1faXNTeXN0ZW1GYWxsYmFjayA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgY2hpbGQtPmluaXRpYWxpemVQYWdlKGZvbnREYXRhLCBwYWdlTnVtYmVyKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGNoaWxkOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0dseXBoUGFn
ZVRyZWVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9HbHlwaFBhZ2VUcmVl
Tm9kZS5oCShyZXZpc2lvbiAxODkzMCkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9HbHlwaE1hcC5o
OjE4OTMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9HbHlwaFBhZ2VUcmVlTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAK
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHbHlwaE1hcF9o
CisjZGVmaW5lIEdseXBoTWFwX2gKKworI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnREYXRhOworCit0eXBlZGVmIHVuc2ln
bmVkIHNob3J0IEdseXBoOworCitzdHJ1Y3QgR2x5cGhEYXRhIHsgICAgCisgICAgR2x5cGggZ2x5
cGg7CisgICAgY29uc3QgRm9udERhdGEqIGZvbnREYXRhOworfTsKKworY2xhc3MgR2x5cGhNYXAg
OiBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgR2x5cGhNYXAoKSA6IG1fZmlsbGVkUHJpbWFy
eVBhZ2UoZmFsc2UpLCBtX3BhZ2VzKDApIHt9CisgICAgfkdseXBoTWFwKCkgeyBpZiAobV9wYWdl
cykgeyBkZWxldGVBbGxWYWx1ZXMoKm1fcGFnZXMpOyBkZWxldGUgbV9wYWdlczsgfSB9CisKKyAg
ICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGNvbnN0IEZvbnREYXRh
Kik7CisgICAgdm9pZCBzZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgR2x5cGgsIGNv
bnN0IEZvbnREYXRhKik7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IEdseXBoUGFnZSB7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDI1NjsgLy8gQ292ZXJzIExhdGluLTEgaW4g
YSBzaW5nbGUgcGFnZS4KKyAgICAgICAgR2x5cGhEYXRhIG1fZ2x5cGhzW3NpemVdOworCisgICAg
ICAgIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29u
c3QgeyByZXR1cm4gbV9nbHlwaHNbYyAlIHNpemVdOyB9CisgICAgICAgIHZvaWQgc2V0R2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgR2x5cGggZywgY29uc3QgRm9udERhdGEqIGYpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGMgJSBzaXplLCBnLCBm
KTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNldEdseXBoRGF0YUZvckluZGV4KHVuc2lnbmVk
IGluZGV4LCBHbHlwaCBnLCBjb25zdCBGb250RGF0YSogZikKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9nbHlwaHNbaW5kZXhdLmdseXBoID0gZzsKKyAgICAgICAgICAgIG1fZ2x5cGhzW2luZGV4
XS5mb250RGF0YSA9IGY7CisgICAgICAgIH0KKyAgICB9OworCisgICAgR2x5cGhQYWdlKiBsb2Nh
dGVQYWdlKHVuc2lnbmVkIHBhZ2UsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSk7CisgICAgYm9v
bCBmaWxsUGFnZShHbHlwaFBhZ2UqLCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNpZ25lZCBi
dWZmZXJMZW5ndGgsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSk7CisKKyAgICBib29sIG1fZmls
bGVkUHJpbWFyeVBhZ2U7CisgICAgR2x5cGhQYWdlIG1fcHJpbWFyeVBhZ2U7IC8vIFdlIG9wdGlt
aXplIGZvciB0aGUgcGFnZSB0aGF0IGNvbnRhaW5zIExhdGluLTEuCisgICAgSGFzaE1hcDxpbnQs
IEdseXBoUGFnZSo+KiBtX3BhZ2VzOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vR2x5cGhQYWdlVHJlZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL0dseXBoUGFnZVRyZWVOb2RlLmgJKHJldmlzaW9uIDE4OTMwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9HbHlwaFBhZ2VUcmVlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZvbnREYXRhOworY2xhc3MgR2x5cGhQYWdl
VHJlZU5vZGU7CiAKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgR2x5cGg7CiAKQEAgLTQ0LDM5ICs0
NSw3NyBAQCBzdHJ1Y3QgR2x5cGhEYXRhIHsgICAgCiAgICAgY29uc3QgRm9udERhdGEqIGZvbnRE
YXRhOwogfTsKIAotY2xhc3MgR2x5cGhNYXAgOiBOb25jb3B5YWJsZSB7CitzdHJ1Y3QgR2x5cGhQ
YWdlIHsKKyAgICBHbHlwaFBhZ2UoKQorICAgICAgICA6IG1fb3duZXIoMCkKKyAgICB7CisgICAg
fQorCisgICAgR2x5cGhQYWdlKEdseXBoUGFnZVRyZWVOb2RlKiBvd25lcikKKyAgICAgICAgOiBt
X293bmVyKG93bmVyKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNp
emUgPSAyNTY7IC8vIENvdmVycyBMYXRpbi0xIGluIGEgc2luZ2xlIHBhZ2UuCisgICAgR2x5cGhE
YXRhIG1fZ2x5cGhzW3NpemVdOworICAgIEdseXBoUGFnZVRyZWVOb2RlKiBtX293bmVyOworCisg
ICAgY29uc3QgR2x5cGhEYXRhJiBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25z
dCB7IHJldHVybiBtX2dseXBoc1tjICUgc2l6ZV07IH0KKyAgICB2b2lkIHNldEdseXBoRGF0YUZv
ckNoYXJhY3RlcihVQ2hhcjMyIGMsIEdseXBoIGcsIGNvbnN0IEZvbnREYXRhKiBmKQorICAgIHsK
KyAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoYyAlIHNpemUsIGcsIGYpOworICAgIH0KKyAg
ICB2b2lkIHNldEdseXBoRGF0YUZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBHbHlwaCBnLCBjb25z
dCBGb250RGF0YSogZikKKyAgICB7CisgICAgICAgIG1fZ2x5cGhzW2luZGV4XS5nbHlwaCA9IGc7
CisgICAgICAgIG1fZ2x5cGhzW2luZGV4XS5mb250RGF0YSA9IGY7CisgICAgfQorICAgIEdseXBo
UGFnZVRyZWVOb2RlKiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXI7IH0KKyAgICAvLyBJ
bXBsZW1lbnRlZCBieSB0aGUgcGxhdGZvcm0uCisgICAgYm9vbCBmaWxsKFVDaGFyKiBjaGFyYWN0
ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRh
KTsKK307CisKK2NsYXNzIEdseXBoUGFnZVRyZWVOb2RlIHsKIHB1YmxpYzoKLSAgICBHbHlwaE1h
cCgpIDogbV9maWxsZWRQcmltYXJ5UGFnZShmYWxzZSksIG1fcGFnZXMoMCkge30KLSAgICB+R2x5
cGhNYXAoKSB7IGlmIChtX3BhZ2VzKSB7IGRlbGV0ZUFsbFZhbHVlcygqbV9wYWdlcyk7IGRlbGV0
ZSBtX3BhZ2VzOyB9IH0KKyAgICBHbHlwaFBhZ2VUcmVlTm9kZSgpCisgICAgICAgIDogbV9wYXJl
bnQoMCkKKyAgICAgICAgLCBtX3BhZ2UoMCkKKyAgICAgICAgLCBtX2xldmVsKDApCisgICAgICAg
ICwgbV9pc1N5c3RlbUZhbGxiYWNrKGZhbHNlKQorICAgICAgICAsIG1fc3lzdGVtRmFsbGJhY2tD
aGlsZCgwKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgLCBtX3BhZ2VOdW1iZXIoMCkKKyNlbmRp
ZgorICAgIHsKKyAgICB9CiAKLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVD
aGFyMzIsIGNvbnN0IEZvbnREYXRhKik7Ci0gICAgdm9pZCBzZXRHbHlwaERhdGFGb3JDaGFyYWN0
ZXIoVUNoYXIzMiwgR2x5cGgsIGNvbnN0IEZvbnREYXRhKik7CisgICAgc3RhdGljIEdseXBoUGFn
ZVRyZWVOb2RlKiBnZXRSb290Q2hpbGQoY29uc3QgRm9udERhdGEqIGZvbnREYXRhLCB1bnNpZ25l
ZCBwYWdlTnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldFJvb3QocGFnZU51bWJlcikt
PmdldENoaWxkKGZvbnREYXRhLCBwYWdlTnVtYmVyKTsKKyAgICB9CisKKyAgICBHbHlwaFBhZ2VU
cmVlTm9kZSogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KKyAgICBHbHlwaFBh
Z2VUcmVlTm9kZSogZ2V0Q2hpbGQoY29uc3QgRm9udERhdGEqLCB1bnNpZ25lZCBwYWdlTnVtYmVy
KTsKKworICAgIEdseXBoUGFnZSogcGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZTsgfQorICAg
IHVuc2lnbmVkIGxldmVsKCkgY29uc3QgeyByZXR1cm4gbV9sZXZlbDsgfQorICAgIGJvb2wgaXNT
eXN0ZW1GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1faXNTeXN0ZW1GYWxsYmFjazsgfQogCiBw
cml2YXRlOgotICAgIHN0cnVjdCBHbHlwaFBhZ2UgewotICAgICAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IHNpemUgPSAyNTY7IC8vIENvdmVycyBMYXRpbi0xIGluIGEgc2luZ2xlIHBhZ2UuCi0gICAg
ICAgIEdseXBoRGF0YSBtX2dseXBoc1tzaXplXTsKLQotICAgICAgICBjb25zdCBHbHlwaERhdGEm
IGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhz
W2MgJSBzaXplXTsgfQotICAgICAgICB2b2lkIHNldEdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hh
cjMyIGMsIEdseXBoIGcsIGNvbnN0IEZvbnREYXRhKiBmKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBzZXRHbHlwaERhdGFGb3JJbmRleChjICUgc2l6ZSwgZywgZik7Ci0gICAgICAgIH0KLSAgICAg
ICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgR2x5cGggZywgY29u
c3QgRm9udERhdGEqIGYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fZ2x5cGhzW2luZGV4XS5n
bHlwaCA9IGc7Ci0gICAgICAgICAgICBtX2dseXBoc1tpbmRleF0uZm9udERhdGEgPSBmOwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIEdseXBoUGFnZSogbG9jYXRlUGFnZSh1bnNpZ25lZCBwYWdl
LCBjb25zdCBGb250RGF0YSogZm9udERhdGEpOwotICAgIGJvb2wgZmlsbFBhZ2UoR2x5cGhQYWdl
KiwgVUNoYXIqIGNoYXJhY3RlckJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBG
b250RGF0YSogZm9udERhdGEpOwotCi0gICAgYm9vbCBtX2ZpbGxlZFByaW1hcnlQYWdlOwotICAg
IEdseXBoUGFnZSBtX3ByaW1hcnlQYWdlOyAvLyBXZSBvcHRpbWl6ZSBmb3IgdGhlIHBhZ2UgdGhh
dCBjb250YWlucyBMYXRpbi0xLgotICAgIEhhc2hNYXA8aW50LCBHbHlwaFBhZ2UqPiogbV9wYWdl
czsKKyAgICBzdGF0aWMgR2x5cGhQYWdlVHJlZU5vZGUqIGdldFJvb3QodW5zaWduZWQgcGFnZU51
bWJlcik7CisgICAgdm9pZCBpbml0aWFsaXplUGFnZShjb25zdCBGb250RGF0YSosIHVuc2lnbmVk
IHBhZ2VOdW1iZXIpOworCisgICAgR2x5cGhQYWdlVHJlZU5vZGUqIG1fcGFyZW50OworICAgIEds
eXBoUGFnZSogbV9wYWdlOworICAgIHVuc2lnbmVkIG1fbGV2ZWw7CisgICAgYm9vbCBtX2lzU3lz
dGVtRmFsbGJhY2s7CisgICAgSGFzaE1hcDxjb25zdCBGb250RGF0YSosIEdseXBoUGFnZVRyZWVO
b2RlKj4gbV9jaGlsZHJlbjsKKyAgICBHbHlwaFBhZ2VUcmVlTm9kZSogbV9zeXN0ZW1GYWxsYmFj
a0NoaWxkOworI2lmbmRlZiBOREVCVUcKKyAgICB1bnNpZ25lZCBtX3BhZ2VOdW1iZXI7CisjZW5k
aWYKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8g
R2x5cGhQYWdlVHJlZU5vZGVfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvR2x5cGhNYXBH
ZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0dseXBoTWFwR2RrLmNw
cAkocmV2aXNpb24gMTg5MzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9HbHlwaE1hcEdkay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAotICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhN
YXAuaCIKLQotI2luY2x1ZGUgIkZvbnREYXRhLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Ym9vbCBHbHlwaE1hcDo6ZmlsbFBhZ2UoR2x5cGhQYWdlKiBwYWdlLCBVQ2hhciogYnVmZmVyLCB1
bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKLXsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspCi0gICAgICAgIHBhZ2Ut
PnNldEdseXBoRGF0YUZvckluZGV4KGksIGZvbnREYXRhLT5nZXRHbHlwaEluZGV4KGJ1ZmZlcltp
XSksIGZvbnREYXRhKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvR2x5cGhQYWdlVHJlZU5vZGVHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL0dseXBoUGFnZVRyZWVOb2RlR2RrLmNwcAkocmV2aXNpb24gMTg5MzAp
CShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0dseXBoTWFwR2RrLmNwcDoxODkzMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL0dseXBoUGFnZVRyZWVOb2RlR2RrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1p
Y2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHbHlwaE1hcC5oIgorCisjaW5jbHVk
ZSAiRm9udERhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEdseXBoTWFwOjpm
aWxsUGFnZShHbHlwaFBhZ2UqIHBhZ2UsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxl
bmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQoreworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykKKyAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9y
SW5kZXgoaSwgZm9udERhdGEtPmdldEdseXBoSW5kZXgoYnVmZmVyW2ldKSwgZm9udERhdGEpOwor
ICAgIHJldHVybiB0cnVlOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9HbHlw
aFBhZ2VUcmVlTm9kZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
R2x5cGhQYWdlVHJlZU5vZGVHZGsuY3BwCShyZXZpc2lvbiAxODkzMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL0dseXBoUGFnZVRyZWVOb2RlR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
MTYgKzI5LDE2IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBo
TWFwLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKIAogI2luY2x1ZGUgIkZvbnRE
YXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBHbHlwaE1hcDo6ZmlsbFBhZ2Uo
R2x5cGhQYWdlKiBwYWdlLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IEZvbnREYXRhKiBmb250RGF0YSkKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZm
ZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQogewog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykKLSAgICAgICAg
cGFnZS0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgZm9udERhdGEtPmdldEdseXBoSW5kZXgoYnVm
ZmVyW2ldKSwgZm9udERhdGEpOworICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpLCBmb250
RGF0YS0+Z2V0R2x5cGhJbmRleChidWZmZXJbaV0pLCBmb250RGF0YSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0ZvbnREYXRhTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0ZvbnREYXRhTWFjLm1tCShyZXZpc2lvbiAx
ODkzMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0ZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKICAg
ICAKICAgICAvLyBNZWFzdXJlIHRoZSBhY3R1YWwgY2hhcmFjdGVyICJ4IiwgYmVjYXVzZSBBcHBL
aXQgc3ludGhlc2l6ZXMgWCBoZWlnaHQgcmF0aGVyIHRoYW4gZ2V0dGluZyBpdCBmcm9tIHRoZSBm
b250LgogICAgIC8vIFVuZm9ydHVuYXRlbHksIE5TRm9udCB3aWxsIHJvdW5kIHRoaXMgZm9yIHVz
IHNvIHdlIGRvbid0IHF1aXRlIGdldCB0aGUgcmlnaHQgdmFsdWUuCi0gICAgTlNHbHlwaCB4R2x5
cGggPSBtX2NoYXJhY3RlclRvR2x5cGhNYXAuZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCd4JywgdGhp
cykuZ2x5cGg7CisgICAgTlNHbHlwaCB4R2x5cGggPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9v
dENoaWxkKHRoaXMsIDApLT5wYWdlKCktPmdseXBoRGF0YUZvckNoYXJhY3RlcigneCcpLmdseXBo
OwogICAgIGlmICh4R2x5cGgpIHsKICAgICAgICAgTlNSZWN0IHhCb3ggPSBbbV9mb250LmZvbnQg
Ym91bmRpbmdSZWN0Rm9yR2x5cGg6eEdseXBoXTsKICAgICAgICAgLy8gVXNlIHRoZSBtYXhpbXVt
IG9mIGVpdGhlciB3aWR0aCBvciBoZWlnaHQgYmVjYXVzZSAieCIgaXMgbmVhcmx5IHNxdWFyZQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRm9udE1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL21hYy9Gb250TWFjLm1tCShyZXZpc2lvbiAxODkzMikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vbWFjL0ZvbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyMSw3ICs0MjEsOSBA
QCBzdGF0aWMgdm9pZCBkaXNwb3NlQVRTVUxheW91dFBhcmFtZXRlcnMoCiB9CiAKIEZvbnQ6OkZv
bnQoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEsIGJvb2wgaXNQcmludGVyRm9udCkK
LTptX2xldHRlclNwYWNpbmcoMCksIG1fd29yZFNwYWNpbmcoMCkKKyAgICA6IG1fcGFnZVplcm8o
MCkKKyAgICAsIG1fbGV0dGVyU3BhY2luZygwKQorICAgICwgbV93b3JkU3BhY2luZygwKQogewog
ICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KGlzUHJpbnRlckZvbnQpOwog
ICAgIG1fZm9udExpc3QgPSBuZXcgRm9udEZhbGxiYWNrTGlzdCgpOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvR2x5cGhNYXBNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vbWFjL0dseXBoTWFwTWFjLmNwcAkocmV2aXNpb24gMTg5MzIpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL21hYy9HbHlwaE1hcE1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhNYXAuaCIK
LQotI2luY2x1ZGUgIkZvbnREYXRhLmgiCi0jaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFj
ZS5oIgotI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgR2x5cGhNYXA6OmZpbGxQYWdlKEdseXBo
UGFnZSogcGFnZSwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBG
b250RGF0YSogZm9udERhdGEpCi17Ci0gICAgLy8gVXNlIGFuIGFycmF5IG9mIGxvbmcgc28gd2Ug
Z2V0IGdvb2QgZW5vdWdoIGFsaWdubWVudC4KLSAgICBsb25nIGdseXBoVmVjdG9yWyhHTFlQSF9W
RUNUT1JfU0laRSArIHNpemVvZihsb25nKSAtIDEpIC8gc2l6ZW9mKGxvbmcpXTsKLSAgICAKLSAg
ICBPU1N0YXR1cyBzdGF0dXMgPSB3a0luaXRpYWxpemVHbHlwaFZlY3RvcihHbHlwaFBhZ2U6OnNp
emUsICZnbHlwaFZlY3Rvcik7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VycikKLSAgICAgICAgLy8g
VGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBwZXJoYXBzIGluZGljYXRlcyBhIGJhZCBmb250ISAg
SWYgaXQgZG9lcyB0aGUKLSAgICAgICAgLy8gZm9udCBzdWJzdGl0dXRpb24gY29kZSB3aWxsIGZp
bmQgYW4gYWx0ZXJuYXRlIGZvbnQuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHdrQ29u
dmVydENoYXJUb0dseXBocyhmb250RGF0YS0+bV9zdHlsZUdyb3VwLCBidWZmZXIsIGJ1ZmZlckxl
bmd0aCwgJmdseXBoVmVjdG9yKTsKLQotICAgIHVuc2lnbmVkIG51bUdseXBocyA9IHdrR2V0R2x5
cGhWZWN0b3JOdW1HbHlwaHMoJmdseXBoVmVjdG9yKTsKLSAgICBpZiAobnVtR2x5cGhzICE9IEds
eXBoUGFnZTo6c2l6ZSkgewotICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIHBl
cmhhcHMgaW5kaWNhdGVzIGEgYmFkIGZvbnQ/Ci0gICAgICAgIC8vIElmIGl0IGRvZXMgaGFwcGVu
LCB0aGUgZm9udCBzdWJzdGl0dXRpb24gY29kZSB3aWxsIGZpbmQgYW4gYWx0ZXJuYXRlIGZvbnQu
Ci0gICAgICAgIHdrQ2xlYXJHbHlwaFZlY3RvcigmZ2x5cGhWZWN0b3IpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQVRTTGF5b3V0UmVjb3JkKiBnbHlwaFJlY29yZCA9IChB
VFNMYXlvdXRSZWNvcmQqKXdrR2V0R2x5cGhWZWN0b3JGaXJzdFJlY29yZChnbHlwaFZlY3Rvcik7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7Ci0g
ICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckluZGV4KGksIGdseXBoUmVjb3JkLT5nbHlwaElE
LCBmb250RGF0YSk7Ci0gICAgICAgIGdseXBoUmVjb3JkID0gKEFUU0xheW91dFJlY29yZCAqKSgo
Y2hhciAqKWdseXBoUmVjb3JkICsgd2tHZXRHbHlwaFZlY3RvclJlY29yZFNpemUoZ2x5cGhWZWN0
b3IpKTsKLSAgICB9Ci0gICAgd2tDbGVhckdseXBoVmVjdG9yKCZnbHlwaFZlY3Rvcik7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvR2x5cGhQYWdlVHJlZU5vZGVNYWMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFjLmNwcAkocmV2aXNpb24gMTg5
MzApCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0dseXBoTWFwTWFjLmNwcDoxODkzMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0dseXBoUGFnZVRyZWVOb2RlTWFjLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJHbHlwaE1hcC5oIgorCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNsdWRl
ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNl
cy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBH
bHlwaE1hcDo6ZmlsbFBhZ2UoR2x5cGhQYWdlKiBwYWdlLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAgICAvLyBVc2Ug
YW4gYXJyYXkgb2YgbG9uZyBzbyB3ZSBnZXQgZ29vZCBlbm91Z2ggYWxpZ25tZW50LgorICAgIGxv
bmcgZ2x5cGhWZWN0b3JbKEdMWVBIX1ZFQ1RPUl9TSVpFICsgc2l6ZW9mKGxvbmcpIC0gMSkgLyBz
aXplb2YobG9uZyldOworICAgIAorICAgIE9TU3RhdHVzIHN0YXR1cyA9IHdrSW5pdGlhbGl6ZUds
eXBoVmVjdG9yKEdseXBoUGFnZTo6c2l6ZSwgJmdseXBoVmVjdG9yKTsKKyAgICBpZiAoc3RhdHVz
ICE9IG5vRXJyKQorICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIHBlcmhhcHMg
aW5kaWNhdGVzIGEgYmFkIGZvbnQhICBJZiBpdCBkb2VzIHRoZQorICAgICAgICAvLyBmb250IHN1
YnN0aXR1dGlvbiBjb2RlIHdpbGwgZmluZCBhbiBhbHRlcm5hdGUgZm9udC4KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgd2tDb252ZXJ0Q2hhclRvR2x5cGhzKGZvbnREYXRhLT5tX3N0eWxl
R3JvdXAsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCAmZ2x5cGhWZWN0b3IpOworCisgICAgdW5zaWdu
ZWQgbnVtR2x5cGhzID0gd2tHZXRHbHlwaFZlY3Rvck51bUdseXBocygmZ2x5cGhWZWN0b3IpOwor
ICAgIGlmIChudW1HbHlwaHMgIT0gR2x5cGhQYWdlOjpzaXplKSB7CisgICAgICAgIC8vIFRoaXMg
c2hvdWxkIG5ldmVyIGhhcHBlbiwgcGVyaGFwcyBpbmRpY2F0ZXMgYSBiYWQgZm9udD8KKyAgICAg
ICAgLy8gSWYgaXQgZG9lcyBoYXBwZW4sIHRoZSBmb250IHN1YnN0aXR1dGlvbiBjb2RlIHdpbGwg
ZmluZCBhbiBhbHRlcm5hdGUgZm9udC4KKyAgICAgICAgd2tDbGVhckdseXBoVmVjdG9yKCZnbHlw
aFZlY3Rvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBBVFNMYXlvdXRS
ZWNvcmQqIGdseXBoUmVjb3JkID0gKEFUU0xheW91dFJlY29yZCopd2tHZXRHbHlwaFZlY3RvckZp
cnN0UmVjb3JkKGdseXBoVmVjdG9yKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5
cGhQYWdlOjpzaXplOyBpKyspIHsKKyAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9ySW5kZXgo
aSwgZ2x5cGhSZWNvcmQtPmdseXBoSUQsIGZvbnREYXRhKTsKKyAgICAgICAgZ2x5cGhSZWNvcmQg
PSAoQVRTTGF5b3V0UmVjb3JkICopKChjaGFyICopZ2x5cGhSZWNvcmQgKyB3a0dldEdseXBoVmVj
dG9yUmVjb3JkU2l6ZShnbHlwaFZlY3RvcikpOworICAgIH0KKyAgICB3a0NsZWFyR2x5cGhWZWN0
b3IoJmdseXBoVmVjdG9yKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9HbHlwaFBhZ2VUcmVlTm9kZU1h
Yy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvR2x5cGhQYWdlVHJlZU5v
ZGVNYWMuY3BwCShyZXZpc2lvbiAxODkzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0dseXBo
UGFnZVRyZWVOb2RlTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHbHlwaE1hcC5oIgorI2luY2x1ZGUg
IkdseXBoUGFnZVRyZWVOb2RlLmgiCiAKICNpbmNsdWRlICJGb250RGF0YS5oIgogI2luY2x1ZGUg
IldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1ib29sIEdseXBoTWFwOjpmaWxsUGFnZShHbHlwaFBhZ2UqIHBhZ2UsIFVD
aGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnRE
YXRhKQorYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVy
TGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpCiB7CiAgICAgLy8gVXNlIGFuIGFycmF5
IG9mIGxvbmcgc28gd2UgZ2V0IGdvb2QgZW5vdWdoIGFsaWdubWVudC4KICAgICBsb25nIGdseXBo
VmVjdG9yWyhHTFlQSF9WRUNUT1JfU0laRSArIHNpemVvZihsb25nKSAtIDEpIC8gc2l6ZW9mKGxv
bmcpXTsKQEAgLTU2LDE0ICs1NiwxOCBAQCBib29sIEdseXBoTWFwOjpmaWxsUGFnZShHbHlwaFBh
Z2UqIHBhZ2UsCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICBib29sIGhhdmVH
bHlwaHMgPSBmYWxzZTsKICAgICBBVFNMYXlvdXRSZWNvcmQqIGdseXBoUmVjb3JkID0gKEFUU0xh
eW91dFJlY29yZCopd2tHZXRHbHlwaFZlY3RvckZpcnN0UmVjb3JkKGdseXBoVmVjdG9yKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKLSAgICAg
ICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgZ2x5cGhSZWNvcmQtPmdseXBoSUQsIGZv
bnREYXRhKTsKKyAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlwaFJlY29yZC0+Z2x5cGhJRDsKKyAg
ICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgZ2x5cGgsIGZvbnREYXRhKTsKKyAgICAgICAg
aWYgKCFoYXZlR2x5cGhzICYmIGdseXBoKQorICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7
CiAgICAgICAgIGdseXBoUmVjb3JkID0gKEFUU0xheW91dFJlY29yZCAqKSgoY2hhciAqKWdseXBo
UmVjb3JkICsgd2tHZXRHbHlwaFZlY3RvclJlY29yZFNpemUoZ2x5cGhWZWN0b3IpKTsKICAgICB9
CiAgICAgd2tDbGVhckdseXBoVmVjdG9yKCZnbHlwaFZlY3Rvcik7CiAKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gaGF2ZUdseXBoczsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9HbHlwaE1hcFF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3F0L0dseXBoTWFwUXQuY3BwCShyZXZpc2lvbiAxODkzMikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vcXQvR2x5cGhNYXBRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtv
c0BrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBr
ZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4K
LSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJHbHlwaE1hcC5oIgotCi0jaW5jbHVkZSAiRm9udERhdGEuaCIKLSNpbmNsdWRl
IDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29sIEdseXBoTWFwOjpmaWxsUGFnZShHbHlwaFBhZ2Uq
IHBhZ2UsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERh
dGEqIGZvbnREYXRhKQotewotICAgIGJvb2wgaXNVdGYxNiA9IGJ1ZmZlckxlbmd0aCAhPSBHbHlw
aFBhZ2U6OnNpemU7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpz
aXplOyBpKyspIHsKLSAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7Ci0KLSAgICAgICAgaWYoaXNV
dGYxNikgewotICAgICAgICAgICAgVUNoYXIgbGVhZCA9IGJ1ZmZlcltpICogMl07Ci0gICAgICAg
ICAgICBVQ2hhciB0cmFpbCA9IGJ1ZmZlcltpICogMiArIDFdOwotICAgICAgICAgICAgY2hhcmFj
dGVyID0gVTE2X0dFVF9TVVBQTEVNRU5UQVJZKGxlYWQsIHRyYWlsKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGNoYXJhY3RlciA9IGJ1ZmZlcltpXTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckluZGV4KGksIGNoYXJhY3RlciwgZm9udERhdGEpOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi19Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0dseXBoUGFnZVRyZWVOb2RlUXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvR2x5cGhQYWdlVHJlZU5vZGVRdC5jcHAJKHJl
dmlzaW9uIDE4OTMwKQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL3F0L0dseXBoTWFwUXQuY3BwOjE4
OTMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9HbHlwaFBhZ2VUcmVlTm9kZVF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdl
b3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGly
ayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBS
dXNpbiA8emFja0BrZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdseXBoTWFwLmgiCisKKyNpbmNsdWRlICJG
b250RGF0YS5oIgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgR2x5cGhNYXA6
OmZpbGxQYWdlKEdseXBoUGFnZSogcGFnZSwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVy
TGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpCit7CisgICAgYm9vbCBpc1V0ZjE2ID0g
YnVmZmVyTGVuZ3RoICE9IEdseXBoUGFnZTo6c2l6ZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykgeworICAgICAgICBVQ2hhcjMyIGNoYXJhY3Rl
cjsKKworICAgICAgICBpZihpc1V0ZjE2KSB7CisgICAgICAgICAgICBVQ2hhciBsZWFkID0gYnVm
ZmVyW2kgKiAyXTsKKyAgICAgICAgICAgIFVDaGFyIHRyYWlsID0gYnVmZmVyW2kgKiAyICsgMV07
CisgICAgICAgICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkobGVhZCwgdHJh
aWwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2hhcmFjdGVyID0gYnVmZmVyW2ld
OworICAgICAgICB9CisKKyAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgY2hh
cmFjdGVyLCBmb250RGF0YSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKwor
Ly8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvR2x5cGhQYWdl
VHJlZU5vZGVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9HbHlwaFBh
Z2VUcmVlTm9kZVF0LmNwcAkocmV2aXNpb24gMTg5MzApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0
L0dseXBoUGFnZVRyZWVOb2RlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBA
CiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoTWFwLmgiCisjaW5j
bHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKIAogI2luY2x1ZGUgIkZvbnREYXRhLmgiCiAjaW5j
bHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgpAQCAtMzYsNyArMzYsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWJvb2wgR2x5cGhNYXA6OmZpbGxQYWdlKEdseXBoUGFnZSogcGFnZSwg
VUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9u
dERhdGEpCitib29sIEdseXBoUGFnZTo6ZmlsbChVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZm
ZXJMZW5ndGgsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKIHsKICAgICBib29sIGlzVXRmMTYg
PSBidWZmZXJMZW5ndGggIT0gR2x5cGhQYWdlOjpzaXplOwogCkBAIC01MSw3ICs1MSw3IEBAIGJv
b2wgR2x5cGhNYXA6OmZpbGxQYWdlKEdseXBoUGFnZSogcGFnZSwKICAgICAgICAgICAgIGNoYXJh
Y3RlciA9IGJ1ZmZlcltpXTsKICAgICAgICAgfQogCi0gICAgICAgIHBhZ2UtPnNldEdseXBoRGF0
YUZvckluZGV4KGksIGNoYXJhY3RlciwgZm9udERhdGEpOworICAgICAgICBzZXRHbHlwaERhdGFG
b3JJbmRleChpLCBjaGFyYWN0ZXIsIGZvbnREYXRhKTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1
ZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL0dseXBoTWFwV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9HbHlwaE1hcFdpbi5jcHAJKHJldmlzaW9uIDE4OTMy
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vR2x5cGhNYXBXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkdseXBoTWFwLmgiCi0jaW5jbHVkZSAiRm9udERhdGEuaCIKLSNpbmNsdWRlIDx3aW5k
b3dzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlCi17Ci0KLWJvb2wgR2x5cGhNYXA6OmZpbGxQYWdl
KEdseXBoUGFnZSogcGFnZSwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBj
b25zdCBGb250RGF0YSogZm9udERhdGEpCi17Ci0gICAgSERDIGRjID0gR2V0REMoKEhXTkQpMCk7
Ci0gICAgU2F2ZURDKGRjKTsKLSAgICBTZWxlY3RPYmplY3QoZGMsIGZvbnREYXRhLT5tX2ZvbnQu
aGZvbnQoKSk7Ci0KLSAgICBURVhUTUVUUklDIHRtOwotICAgIEdldFRleHRNZXRyaWNzKGRjLCAm
dG0pOwotICAgIFdPUkQgbG9jYWxHbHlwaEJ1ZmZlcltHbHlwaFBhZ2U6OnNpemVdOwotICAgIEdl
dEdseXBoSW5kaWNlcyhkYywgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGxvY2FsR2x5cGhCdWZmZXIs
IDApOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykK
LSAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgbG9jYWxHbHlwaEJ1ZmZlcltp
XSwgZm9udERhdGEpOwotICAgIFJlc3RvcmVEQyhkYywgLTEpOwotICAgIFJlbGVhc2VEQygwLCBk
Yyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZVdpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vR2x5cGhQYWdlVHJlZU5vZGVXaW4uY3Bw
CShyZXZpc2lvbiAxODkzMCkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS93aW4vR2x5cGhNYXBXaW4u
Y3BwOjE4OTMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vR2x5cGhQYWdlVHJlZU5vZGVXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdseXBoTWFwLmgiCisjaW5jbHVkZSAiRm9udERhdGEu
aCIKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlCit7CisKK2Jvb2wg
R2x5cGhNYXA6OmZpbGxQYWdlKEdseXBoUGFnZSogcGFnZSwgVUNoYXIqIGJ1ZmZlciwgdW5zaWdu
ZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9udERhdGEpCit7CisgICAgSERDIGRj
ID0gR2V0REMoKEhXTkQpMCk7CisgICAgU2F2ZURDKGRjKTsKKyAgICBTZWxlY3RPYmplY3QoZGMs
IGZvbnREYXRhLT5tX2ZvbnQuaGZvbnQoKSk7CisKKyAgICBURVhUTUVUUklDIHRtOworICAgIEdl
dFRleHRNZXRyaWNzKGRjLCAmdG0pOworICAgIFdPUkQgbG9jYWxHbHlwaEJ1ZmZlcltHbHlwaFBh
Z2U6OnNpemVdOworICAgIEdldEdseXBoSW5kaWNlcyhkYywgYnVmZmVyLCBidWZmZXJMZW5ndGgs
IGxvY2FsR2x5cGhCdWZmZXIsIDApOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlw
aFBhZ2U6OnNpemU7IGkrKykKKyAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwg
bG9jYWxHbHlwaEJ1ZmZlcltpXSwgZm9udERhdGEpOworICAgIFJlc3RvcmVEQyhkYywgLTEpOwor
ICAgIFJlbGVhc2VEQygwLCBkYyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9HbHlwaFBhZ2VU
cmVlTm9kZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4vR2x5cGhQ
YWdlVHJlZU5vZGVXaW4uY3BwCShyZXZpc2lvbiAxODkzMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
d2luL0dseXBoUGFnZVRyZWVOb2RlV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTQgKzI3
LDE1IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoTWFwLmgi
CisjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKKwogI2luY2x1ZGUgIkZvbnREYXRhLmgi
CiAjaW5jbHVkZSA8d2luZG93cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZQogewogCi1ib29sIEds
eXBoTWFwOjpmaWxsUGFnZShHbHlwaFBhZ2UqIHBhZ2UsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVk
IGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQorYm9vbCBHbHlwaFBhZ2U6
OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0
YSogZm9udERhdGEpCiB7CiAgICAgSERDIGRjID0gR2V0REMoKEhXTkQpMCk7CiAgICAgU2F2ZURD
KGRjKTsKQEAgLTQ1LDcgKzQ2LDcgQEAgYm9vbCBHbHlwaE1hcDo6ZmlsbFBhZ2UoR2x5cGhQYWdl
KiBwYWdlLAogICAgIFdPUkQgbG9jYWxHbHlwaEJ1ZmZlcltHbHlwaFBhZ2U6OnNpemVdOwogICAg
IEdldEdseXBoSW5kaWNlcyhkYywgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGxvY2FsR2x5cGhCdWZm
ZXIsIDApOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkr
KykKLSAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgbG9jYWxHbHlwaEJ1ZmZl
cltpXSwgZm9udERhdGEpOworICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpLCBsb2NhbEds
eXBoQnVmZmVyW2ldLCBmb250RGF0YSk7CiAgICAgUmVzdG9yZURDKGRjLCAtMSk7CiAgICAgUmVs
ZWFzZURDKDAsIGRjKTsKICAgICByZXR1cm4gdHJ1ZTsK
</data>
<flag name="review"
          id="4743"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>