<?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>156141</bug_id>
          
          <creation_ts>2016-04-02 21:57:38 -0700</creation_ts>
          <short_desc>FontFaceSet binding does not handle null correctly</short_desc>
          <delta_ts>2016-04-08 09:40:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>sam</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1180142</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-02 21:57:38 -0700</bug_when>
    <thetext>FontFaceSet binding does not handle null correctly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180143</commentid>
    <comment_count>1</comment_count>
      <attachid>275489</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-02 22:03:53 -0700</bug_when>
    <thetext>Created attachment 275489
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180148</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-04-02 22:38:31 -0700</bug_when>
    <thetext>Hmm, two EWS bots are failing at once, and both seem to have WindowServer in some broken state, so that DumpRenderTree processes freeze in _CGSReenableUpdateForConnection.

Very curious, but almost certainly unrelated to this patch. I&apos;ll reboot the bots for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180284</commentid>
    <comment_count>3</comment_count>
      <attachid>275489</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-04-04 00:43:45 -0700</bug_when>
    <thetext>Comment on attachment 275489
Patch

Sounds good to me.
Some improvement ideas below.

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

&gt; Source/WebCore/css/FontFaceSet.cpp:135
&gt; +    ec = 0;

We might want to remove RaisesException from load FontFaceSet::IDL method declaration.
Instead, in line 138, we can directly reject the promise with ec.

That said, we might want to modify DOMPromise to type the resolve value but not the reject value.
That would be closer to IDL descriptions (like Promise&lt;FontFace&gt;) and remove the need to have RaisesException with DOMPromise.

&gt; Source/WebCore/css/FontFaceSet.cpp:233
&gt; +        if (pendingPromise-&gt;hasReachedTerminalState)

hasReachedTerminalState is probably not useful.
It can be computed from DeferredWrapper/DOMPromise.
Once promise is resolved/rejected, DeferredWrapper::m_globalObject is cleared.

&gt; LayoutTests/ChangeLog:9
&gt; +        * fast/text/font-face-set-javascript.html: Added tests for handling of null, also added tests for

There are some IDL tests in web-platform-tests, see for instance LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces.html
It seems that idlharness.js/WebIDLParser.js does not test passing null to not-nullable parameters.
Maybe it can be improved to cover that. That would handle already tested interfaces like Node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180417</commentid>
    <comment_count>4</comment_count>
      <attachid>275489</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-04 10:56:41 -0700</bug_when>
    <thetext>Comment on attachment 275489
Patch

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

This looks good. Thanks. r=me

&gt;&gt; Source/WebCore/css/FontFaceSet.cpp:135
&gt;&gt; +    ec = 0;
&gt; 
&gt; We might want to remove RaisesException from load FontFaceSet::IDL method declaration.
&gt; Instead, in line 138, we can directly reject the promise with ec.
&gt; 
&gt; That said, we might want to modify DOMPromise to type the resolve value but not the reject value.
&gt; That would be closer to IDL descriptions (like Promise&lt;FontFace&gt;) and remove the need to have RaisesException with DOMPromise.

The spec states that a syntax error synchronously throws an exception (rather than rejecting a promise).

&gt; Source/WebCore/css/FontFaceSet.idl:-34
&gt; -    UsePointersEvenForNonNullableObjectArguments,

👍</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180419</commentid>
    <comment_count>5</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-04-04 11:15:14 -0700</bug_when>
    <thetext>&gt; &gt; We might want to remove RaisesException from load FontFaceSet::IDL method declaration.
&gt; &gt; Instead, in line 138, we can directly reject the promise with ec.
&gt; &gt; 
&gt; &gt; That said, we might want to modify DOMPromise to type the resolve value but not the reject value.
&gt; &gt; That would be closer to IDL descriptions (like Promise&lt;FontFace&gt;) and remove the need to have RaisesException with DOMPromise.
&gt; 
&gt; The spec states that a syntax error synchronously throws an exception
&gt; (rather than rejecting a promise).

That seems inconsistent with the other promise APIs I know.
Is there a rationale or should the spec be updated to reject the promise?

Also, the binding generator is generating code that is checking for exceptions and is rejecting the promise accordingly. It might be good to add a test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182057</commentid>
    <comment_count>6</comment_count>
      <attachid>275489</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-07 21:26:28 -0700</bug_when>
    <thetext>Comment on attachment 275489
Patch

Clearing flags on attachment: 275489

Committed r199216: &lt;http://trac.webkit.org/changeset/199216&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182058</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-07 21:26:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182063</commentid>
    <comment_count>8</comment_count>
      <attachid>275489</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-04-07 21:33:51 -0700</bug_when>
    <thetext>Comment on attachment 275489
Patch

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

&gt; Source/WebCore/css/FontFaceSet.h:102
&gt; +    void startedLoading() final;
&gt; +    void completedLoading() final;
&gt; +    void faceFinished(CSSFontFace&amp;, CSSFontFace::Status) final;

The class itself is marked final! So we could drop all of these inner finals. Not sure if there is a style preference for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182087</commentid>
    <comment_count>9</comment_count>
      <attachid>275489</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-08 00:28:44 -0700</bug_when>
    <thetext>Comment on attachment 275489
Patch

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

&gt;&gt;&gt; Source/WebCore/css/FontFaceSet.cpp:135
&gt;&gt;&gt; +    ec = 0;
&gt;&gt; 
&gt;&gt; We might want to remove RaisesException from load FontFaceSet::IDL method declaration.
&gt;&gt; Instead, in line 138, we can directly reject the promise with ec.
&gt;&gt; 
&gt;&gt; That said, we might want to modify DOMPromise to type the resolve value but not the reject value.
&gt;&gt; That would be closer to IDL descriptions (like Promise&lt;FontFace&gt;) and remove the need to have RaisesException with DOMPromise.
&gt; 
&gt; The spec states that a syntax error synchronously throws an exception (rather than rejecting a promise).

Whatever behavior we chose, this should be covered with test cases, to make sure behavior is consistent across browsers.

&gt;&gt; Source/WebCore/css/FontFaceSet.cpp:233
&gt;&gt; +        if (pendingPromise-&gt;hasReachedTerminalState)
&gt; 
&gt; hasReachedTerminalState is probably not useful.
&gt; It can be computed from DeferredWrapper/DOMPromise.
&gt; Once promise is resolved/rejected, DeferredWrapper::m_globalObject is cleared.

Sounds like nice idea. If we want to do that optimization, then we need to plumb through some functions to expose that state. DeferredWrapper itself will have to publicize something (not sure what to name it), and DOMPromise will probably also have to do the same.

&gt;&gt; Source/WebCore/css/FontFaceSet.h:102
&gt;&gt; +    void faceFinished(CSSFontFace&amp;, CSSFontFace::Status) final;
&gt; 
&gt; The class itself is marked final! So we could drop all of these inner finals. Not sure if there is a style preference for that.

We did discuss this on webkit-dev, and I specifically proposed that we use final on each function even when the class is final. Not everyone loved the idea, but I think we landed on it and even possibly added it to a coding style document?

I prefer that rule because when refactoring to add a derived class, we don’t end up taking final off all the functions in one fell swoop. On the other hand, marking the class final optimizes calls to all the other non-overrider virtual functions as well, and there is no way to preserve some of that optimization when refactoring to add a derived class.

On the other hand, some people don’t think that final is clear enough; doesn’t imply override to them.

&gt;&gt; LayoutTests/ChangeLog:9
&gt;&gt; +        * fast/text/font-face-set-javascript.html: Added tests for handling of null, also added tests for
&gt; 
&gt; There are some IDL tests in web-platform-tests, see for instance LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces.html
&gt; It seems that idlharness.js/WebIDLParser.js does not test passing null to not-nullable parameters.
&gt; Maybe it can be improved to cover that. That would handle already tested interfaces like Node.

I don’t really understand what you are saying.

My intention is not to to test that the IDL generator works properly. I wanted to test this particular class’s DOM binding.

On the other hand, adding more tests is fine with me!

I was adding a test about the particular thing we had wrong that this patch fixes. I didn’t cover, however, the many other cases that also changed behavior, like passing a non-object or an object for the wrong class. I was sort of using &quot;null&quot; to stand in for those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182105</commentid>
    <comment_count>10</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-04-08 01:31:38 -0700</bug_when>
    <thetext>&gt; &gt; There are some IDL tests in web-platform-tests, see for instance LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces.html
&gt; &gt; It seems that idlharness.js/WebIDLParser.js does not test passing null to not-nullable parameters.
&gt; &gt; Maybe it can be improved to cover that. That would handle already tested interfaces like Node.
&gt; 
&gt; I don’t really understand what you are saying.
&gt; 
&gt; My intention is not to to test that the IDL generator works properly. I
&gt; wanted to test this particular class’s DOM binding.
&gt; 
&gt; On the other hand, adding more tests is fine with me!
&gt; 
&gt; I was adding a test about the particular thing we had wrong that this patch
&gt; fixes. I didn’t cover, however, the many other cases that also changed
&gt; behavior, like passing a non-object or an object for the wrong class. I was
&gt; sort of using &quot;null&quot; to stand in for those.

The current added tests are just fine I think.

The IDL tests I mentionned above are regular testharness.js tests.
These tests contain IDL descriptions of some interfaces.
idlharness.js/WebIDLParser.js are processing those IDLs to generate automatically a bunch of tests that run as regular layout tests.
This allows checking for instance that the prototype has the right number of keys.

I am wondering whether the &quot;pass null to non-nullable parameters&quot; test could be generated by idlharness.js/WebIDLParser.js scripts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182173</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-08 09:40:57 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I am wondering whether the &quot;pass null to non-nullable parameters&quot; test could
&gt; be generated by idlharness.js/WebIDLParser.js scripts.

Sounds like a good idea.

We need tests for all sorts of things that we may be handling wrong such as:

- passing undefined
- passing null
- passing non-objects
- passing objects of incorrect type

For various combinations of optional/not and nullable/not parameters.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275489</attachid>
            <date>2016-04-02 22:03:53 -0700</date>
            <delta_ts>2016-04-07 21:26:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156141-20160402220358.patch</filename>
            <type>text/plain</type>
            <size>15635</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4OTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODRlYWE0NWE1MjJiM2Zi
OTgxMTg3Yjc5MDc2OGRjMGFiMmJjYzMyNy4uMjU3YTMzYjg5N2M2NGQwNzczMTc5NDllZWY0OTU4
ODczZjg3OGRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE2LTA0LTAyICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBGb250RmFjZVNldCBiaW5kaW5n
IGRvZXMgbm90IGhhbmRsZSBudWxsIGNvcnJlY3RseQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MTQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjc3MvRm9udEZhY2VTZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udEZhY2VTZXQ6OkZvbnRGYWNlU2V0KTogUGFzcyBhIHJlZmVyZW5jZSB0byBh
ZGQgcmF0aGVyIHRoYW4gYSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6
Omhhcyk6IFRha2UgYSByZWZlcmVuY2UgcmF0aGVyIHRoYW4gYSBwb2ludGVyLgorICAgICAgICAo
V2ViQ29yZTo6Rm9udEZhY2VTZXQ6OmFkZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dEZhY2VTZXQ6OnJlbW92ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6
OmxvYWQpOiBJbml0aWFsaXplIGVjIHNpbmNlIHdlIGNoZWNrIGl0LiBDYWxsZXIgaXMgbm90IHJl
cXVpcmVkCisgICAgICAgIHRvIGRvIHRoaXMsIG5vciBpcyB0aGUgbWF0Y2hpbmdGYWNlcyBmdW5j
dGlvbi4gUmVhcnJhbmdlZCBmdW5jdGlvbiB0byBhdm9pZCBuZWVkbGVzcworICAgICAgICBjcmVh
dGlvbi9kZXN0cnVjdGlvbiBvZiBQZW5kaW5nUHJvbWlzZSBmb3IgdGhlIGltbWVkaWF0ZSBmYWls
dXJlIGNhc2UuIFJlbW92ZWQgc29tZQorICAgICAgICB1bm5lZWRlZCB0eXBlIGNhc3RzIGFuZCBs
b2NhbCB2YXJpYWJsZXMuCisgICAgICAgIChXZWJDb3JlOjpGb250RmFjZVNldDo6c3RhdHVzKTog
VXNlIEFTQ0lJTGl0ZXJhbCBpbnN0ZWFkIG9mIENvbnN0cnVjdEZyb21MaXRlcmFsLgorICAgICAg
ICBObyByZWFzb24gdG8gdXNlIHRoZSBtb3JlIGFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9uLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6OmZhY2VGaW5pc2hlZCk6IEZhY3RvcmVkIG91dCBh
IGNvbW1vbiBoYXNSZWFjaGVkVGVybWluYWxTdGF0ZQorICAgICAgICBjaGVjayB0byBzdHJlYW1s
aW5lIHRoZSBsb2dpYyBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWNlU2V0Ojpsb2Fk
KTogTW92ZWQgb3ZlcmxvYWQgd2l0aG91dCBhIHN0cmluZyBpbiBoZXJlOyBub3QgY3JpdGljYWwK
KyAgICAgICAgdG8gaW5saW5lIGl0LgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhY2VTZXQ6OmNo
ZWNrKTogRGl0dG8uCisKKyAgICAgICAgKiBjc3MvRm9udEZhY2VTZXQuaDogUmVtb3ZlZCBtYW55
IHVubmVlZGVkIGluY2x1ZGVzIGFuZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyAgICAgICAgQ2hh
bmdlZCBmdW5jdGlvbnMgdG8gdGFrZSBGb250RmFjZSYgaW5zdGVhZCBvZiBSZWZQdHI8Rm9udEZh
Y2U+LiBSZW1vdmVkIHVubmVlZGVkCisgICAgICAgIFdlYkNvcmUgbmFtZXNwYWNlIHByZWZpeGVz
LiBVc2UgZmluYWwgaW5zdGVhZCBvZiBvdmVycmlkZSBmb3IgdmlydHVhbCBmdW5jdGlvbnMuCisK
KyAgICAgICAgKiBjc3MvRm9udEZhY2VTZXQuaWRsOiBSZW1vdmVkIFVzZVBvaW50ZXJzRXZlbkZv
ck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzLCB3aGljaAorICAgICAgICB3YXMgcHJlc2Vydmlu
ZyBpbmNvcnJlY3QgYmVoYXZpb3IgZm9yIG51bGwgYXMgZGVtb25zdHJhdGVkIGJ5IHRoZSB0ZXN0
IGNhc2VzLgorCiAyMDE2LTA0LTAyICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgQ2xlYW51cCBEYXRhRGV0ZWN0aW9uLm1tIGEgbGl0dGxlIGJpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9G
b250RmFjZVNldC5jcHAKaW5kZXggM2Y5ZjU4YjhjNWI5OTI2N2NkYTU5OWQwMDU2ZDg0YWI5NDll
ZThkOS4uZDgwY2M5YWQwYmZmZjhmNWRlMjk4MjEzYWMzYTlhOWI3NmQ5NWQ5OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvRm9udEZhY2VTZXQuY3BwCkBAIC02Miw3ICs2Miw3IEBAIEZvbnRGYWNlU2V0OjpGb250
RmFjZVNldChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+
PiYgaW5pCiB7CiAgICAgbV9iYWNraW5nLT5hZGRDbGllbnQoKnRoaXMpOwogICAgIGZvciAoYXV0
byYgZmFjZSA6IGluaXRpYWxGYWNlcykKLSAgICAgICAgYWRkKGZhY2UuZ2V0KCkpOworICAgICAg
ICBhZGQoKmZhY2UpOwogfQogCiBGb250RmFjZVNldDo6Rm9udEZhY2VTZXQoRG9jdW1lbnQmIGRv
Y3VtZW50LCBDU1NGb250RmFjZVNldCYgYmFja2luZykKQEAgLTk5LDExICs5OSw5IEBAIEZvbnRG
YWNlU2V0OjpQZW5kaW5nUHJvbWlzZTo6flBlbmRpbmdQcm9taXNlKCkKIHsKIH0KIAotYm9vbCBG
b250RmFjZVNldDo6aGFzKFJlZlB0cjxXZWJDb3JlOjpGb250RmFjZT4gZmFjZSkgY29uc3QKK2Jv
b2wgRm9udEZhY2VTZXQ6OmhhcyhGb250RmFjZSYgZmFjZSkgY29uc3QKIHsKLSAgICBpZiAoIWZh
Y2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9iYWNraW5nLT5oYXNGYWNl
KGZhY2UtPmJhY2tpbmcoKSk7CisgICAgcmV0dXJuIG1fYmFja2luZy0+aGFzRmFjZShmYWNlLmJh
Y2tpbmcoKSk7CiB9CiAKIHNpemVfdCBGb250RmFjZVNldDo6c2l6ZSgpIGNvbnN0CkBAIC0xMTEs
MjEgKzEwOSwxOCBAQCBzaXplX3QgRm9udEZhY2VTZXQ6OnNpemUoKSBjb25zdAogICAgIHJldHVy
biBtX2JhY2tpbmctPmZhY2VDb3VudCgpOwogfQogCi1Gb250RmFjZVNldCYgRm9udEZhY2VTZXQ6
OmFkZChSZWZQdHI8V2ViQ29yZTo6Rm9udEZhY2U+IGZhY2UpCitGb250RmFjZVNldCYgRm9udEZh
Y2VTZXQ6OmFkZChGb250RmFjZSYgZmFjZSkKIHsKLSAgICBpZiAoZmFjZSAmJiAhbV9iYWNraW5n
LT5oYXNGYWNlKGZhY2UtPmJhY2tpbmcoKSkpCi0gICAgICAgIG1fYmFja2luZy0+YWRkKGZhY2Ut
PmJhY2tpbmcoKSk7CisgICAgaWYgKCFtX2JhY2tpbmctPmhhc0ZhY2UoZmFjZS5iYWNraW5nKCkp
KQorICAgICAgICBtX2JhY2tpbmctPmFkZChmYWNlLmJhY2tpbmcoKSk7CiAgICAgcmV0dXJuICp0
aGlzOwogfQogCi1ib29sIEZvbnRGYWNlU2V0OjpyZW1vdmUoUmVmUHRyPFdlYkNvcmU6OkZvbnRG
YWNlPiBmYWNlKQorYm9vbCBGb250RmFjZVNldDo6cmVtb3ZlKEZvbnRGYWNlJiBmYWNlKQogewot
ICAgIGlmICghZmFjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCByZXN1bHQg
PSBtX2JhY2tpbmctPmhhc0ZhY2UoZmFjZS0+YmFja2luZygpKTsKKyAgICBib29sIHJlc3VsdCA9
IG1fYmFja2luZy0+aGFzRmFjZShmYWNlLmJhY2tpbmcoKSk7CiAgICAgaWYgKHJlc3VsdCkKLSAg
ICAgICAgbV9iYWNraW5nLT5yZW1vdmUoZmFjZS0+YmFja2luZygpKTsKKyAgICAgICAgbV9iYWNr
aW5nLT5yZW1vdmUoZmFjZS5iYWNraW5nKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAg
LTEzNyw2ICsxMzIsNyBAQCB2b2lkIEZvbnRGYWNlU2V0OjpjbGVhcigpCiAKIHZvaWQgRm9udEZh
Y2VTZXQ6OmxvYWQoSlNDOjpFeGVjU3RhdGUmIGV4ZWNTdGF0ZSwgY29uc3QgU3RyaW5nJiBmb250
LCBjb25zdCBTdHJpbmcmIHRleHQsIERlZmVycmVkV3JhcHBlciYmIHByb21pc2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogeworICAgIGVjID0gMDsKICAgICBhdXRvIG1hdGNoaW5nRmFjZXMgPSBtX2Jh
Y2tpbmctPm1hdGNoaW5nRmFjZXMoZm9udCwgdGV4dCwgZWMpOwogICAgIGlmIChlYykKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTQ5LDIzICsxNDUsMjIgQEAgdm9pZCBGb250RmFjZVNldDo6bG9hZChK
U0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBjb25zdCBTdHJpbmcmIGZvbnQsIGNvbnN0IFN0cmkK
ICAgICBmb3IgKGF1dG8mIGZhY2UgOiBtYXRjaGluZ0ZhY2VzKQogICAgICAgICBmYWNlLmdldCgp
LmxvYWQoKTsKIAotICAgIGF1dG8gcGVuZGluZ1Byb21pc2UgPSBQZW5kaW5nUHJvbWlzZTo6Y3Jl
YXRlKFdURk1vdmUocHJvbWlzZSkpOwotICAgIGJvb2wgd2FpdGluZyA9IGZhbHNlOwotCiAgICAg
Zm9yIChhdXRvJiBmYWNlIDogbWF0Y2hpbmdGYWNlcykgewogICAgICAgICBpZiAoZmFjZS5nZXQo
KS5zdGF0dXMoKSA9PSBDU1NGb250RmFjZTo6U3RhdHVzOjpGYWlsdXJlKSB7Ci0gICAgICAgICAg
ICBwZW5kaW5nUHJvbWlzZS0+cHJvbWlzZS5yZWplY3QoRE9NQ29yZUV4Y2VwdGlvbjo6Y3JlYXRl
KEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbihORVRXT1JLX0VSUikpKTsKKyAgICAgICAgICAgIHBy
b21pc2UucmVqZWN0KERPTUNvcmVFeGNlcHRpb246OmNyZWF0ZShFeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24oTkVUV09SS19FUlIpKS5wdHIoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICB9CiAKKyAgICBhdXRvIHBlbmRpbmdQcm9taXNlID0gUGVuZGluZ1Byb21pc2U6OmNy
ZWF0ZShXVEZNb3ZlKHByb21pc2UpKTsKKyAgICBib29sIHdhaXRpbmcgPSBmYWxzZTsKKwogICAg
IGZvciAoYXV0byYgZmFjZSA6IG1hdGNoaW5nRmFjZXMpIHsKICAgICAgICAgcGVuZGluZ1Byb21p
c2UtPmZhY2VzLmFwcGVuZChmYWNlLmdldCgpLndyYXBwZXIoZXhlY1N0YXRlKSk7CiAgICAgICAg
IGlmIChmYWNlLmdldCgpLnN0YXR1cygpID09IENTU0ZvbnRGYWNlOjpTdGF0dXM6OlN1Y2Nlc3Mp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgd2FpdGluZyA9IHRydWU7Ci0gICAgICAg
IGF1dG8mIHZlY3RvciA9IG1fcGVuZGluZ1Byb21pc2VzLmFkZChSZWZQdHI8Q1NTRm9udEZhY2U+
KCZmYWNlLmdldCgpKSwgVmVjdG9yPFJlZjxQZW5kaW5nUHJvbWlzZT4+KCkpLml0ZXJhdG9yLT52
YWx1ZTsKLSAgICAgICAgdmVjdG9yLmFwcGVuZChwZW5kaW5nUHJvbWlzZS5jb3B5UmVmKCkpOwor
ICAgICAgICBtX3BlbmRpbmdQcm9taXNlcy5hZGQoJmZhY2UuZ2V0KCksIFZlY3RvcjxSZWY8UGVu
ZGluZ1Byb21pc2U+PigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHBlbmRpbmdQcm9taXNlLmNv
cHlSZWYoKSk7CiAgICAgfQogCiAgICAgaWYgKCF3YWl0aW5nKQpAQCAtMTkxLDEyICsxODYsMTIg
QEAgU3RyaW5nIEZvbnRGYWNlU2V0OjpzdGF0dXMoKSBjb25zdAogewogICAgIHN3aXRjaCAobV9i
YWNraW5nLT5zdGF0dXMoKSkgewogICAgIGNhc2UgQ1NTRm9udEZhY2VTZXQ6OlN0YXR1czo6TG9h
ZGluZzoKLSAgICAgICAgcmV0dXJuIFN0cmluZygibG9hZGluZyIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpOworICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJsb2FkaW5nIik7CiAg
ICAgY2FzZSBDU1NGb250RmFjZVNldDo6U3RhdHVzOjpMb2FkZWQ6Ci0gICAgICAgIHJldHVybiBT
dHJpbmcoImxvYWRlZCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBy
ZXR1cm4gQVNDSUlMaXRlcmFsKCJsb2FkZWQiKTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIFN0cmluZygibG9hZGVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibG9hZGVkIik7CiB9CiAKIGJvb2wg
Rm9udEZhY2VTZXQ6OmNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdApAQCAt
MjM1LDIxICsyMzAsMzEgQEAgdm9pZCBGb250RmFjZVNldDo6ZmFjZUZpbmlzaGVkKENTU0ZvbnRG
YWNlJiBmYWNlLCBDU1NGb250RmFjZTo6U3RhdHVzIG5ld1N0YXR1cykKICAgICAgICAgcmV0dXJu
OwogCiAgICAgZm9yIChhdXRvJiBwZW5kaW5nUHJvbWlzZSA6IGl0ZXJhdG9yLT52YWx1ZSkgewor
ICAgICAgICBpZiAocGVuZGluZ1Byb21pc2UtPmhhc1JlYWNoZWRUZXJtaW5hbFN0YXRlKQorICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChuZXdTdGF0dXMgPT0gQ1NTRm9udEZhY2U6
OlN0YXR1czo6U3VjY2VzcykgewotICAgICAgICAgICAgaWYgKHBlbmRpbmdQcm9taXNlLT5oYXNP
bmVSZWYoKSAmJiAhcGVuZGluZ1Byb21pc2UtPmhhc1JlYWNoZWRUZXJtaW5hbFN0YXRlKSB7Cisg
ICAgICAgICAgICBpZiAocGVuZGluZ1Byb21pc2UtPmhhc09uZVJlZigpKSB7CiAgICAgICAgICAg
ICAgICAgcGVuZGluZ1Byb21pc2UtPnByb21pc2UucmVzb2x2ZShwZW5kaW5nUHJvbWlzZS0+ZmFj
ZXMpOwogICAgICAgICAgICAgICAgIHBlbmRpbmdQcm9taXNlLT5oYXNSZWFjaGVkVGVybWluYWxT
dGF0ZSA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBBU1NFUlQobmV3U3RhdHVzID09IENTU0ZvbnRGYWNlOjpTdGF0dXM6OkZhaWx1cmUpOwotICAg
ICAgICAgICAgaWYgKCFwZW5kaW5nUHJvbWlzZS0+aGFzUmVhY2hlZFRlcm1pbmFsU3RhdGUpIHsK
LSAgICAgICAgICAgICAgICBwZW5kaW5nUHJvbWlzZS0+cHJvbWlzZS5yZWplY3QoRE9NQ29yZUV4
Y2VwdGlvbjo6Y3JlYXRlKEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbihORVRXT1JLX0VSUikpKTsK
LSAgICAgICAgICAgICAgICBwZW5kaW5nUHJvbWlzZS0+aGFzUmVhY2hlZFRlcm1pbmFsU3RhdGUg
PSB0cnVlOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcGVuZGluZ1Byb21pc2UtPnByb21p
c2UucmVqZWN0KERPTUNvcmVFeGNlcHRpb246OmNyZWF0ZShFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24oTkVUV09SS19FUlIpKSk7CisgICAgICAgICAgICBwZW5kaW5nUHJvbWlzZS0+aGFzUmVhY2hl
ZFRlcm1pbmFsU3RhdGUgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgbV9wZW5kaW5n
UHJvbWlzZXMucmVtb3ZlKGl0ZXJhdG9yKTsKIH0KIAordm9pZCBGb250RmFjZVNldDo6bG9hZChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgZm9udCwgRGVmZXJyZWRXcmFwcGVy
JiYgcHJvbWlzZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgbG9hZChzdGF0ZSwgZm9udCwg
QVNDSUlMaXRlcmFsKCIgIiksIFdURk1vdmUocHJvbWlzZSksIGVjKTsKK30KKworYm9vbCBGb250
RmFjZVNldDo6Y2hlY2soY29uc3QgU3RyaW5nJiBmb250LCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICByZXR1cm4gY2hlY2soZm9udCwgQVNDSUlMaXRlcmFsKCIgIiksIGVjKTsKK30KKwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvRm9udEZhY2VTZXQuaAppbmRleCA4NzBkMTMzNWViZDJjYjU3YmNlOWI0M2FlY2M4
YjEzNzliMGE2YmQzLi5kY2VhNzY2YTg3ODhlNzY5MWZkNDY2NTEwYzA5ZmNiZDE3MzM0OGUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaApAQCAtMjgsNDEgKzI4LDI4IEBACiAKICNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJDU1NGb250RmFjZVNldC5oIgotI2luY2x1
ZGUgIkRPTUNvcmVFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1
ZGUgIkpTRE9NUHJvbWlzZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+Ci0jaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZi5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEpTQyB7
Ci1jbGFzcyBFeGVjU3RhdGU7Ci19CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9j
dW1lbnQ7Ci1jbGFzcyBGb250RmFjZTsKK2NsYXNzIERPTUNvcmVFeGNlcHRpb247CiAKLWNsYXNz
IEZvbnRGYWNlU2V0IGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8Rm9udEZhY2VTZXQ+LCBwdWJs
aWMgQ1NTRm9udEZhY2VTZXRDbGllbnQsIHB1YmxpYyBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRh
LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKK2NsYXNzIEZvbnRGYWNlU2V0IGZpbmFsIDogcHVi
bGljIFJlZkNvdW50ZWQ8Rm9udEZhY2VTZXQ+LCBwcml2YXRlIENTU0ZvbnRGYWNlU2V0Q2xpZW50
LCBwdWJsaWMgRXZlbnRUYXJnZXRXaXRoSW5saW5lRGF0YSwgcHJpdmF0ZSBBY3RpdmVET01PYmpl
Y3QgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Rm9udEZhY2VTZXQ+IGNyZWF0ZShEb2N1bWVu
dCYsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Rm9udEZhY2U+PiYgaW5pdGlhbEZhY2VzKTsKICAgICBz
dGF0aWMgUmVmPEZvbnRGYWNlU2V0PiBjcmVhdGUoRG9jdW1lbnQmLCBDU1NGb250RmFjZVNldCYg
YmFja2luZyk7CiAgICAgdmlydHVhbCB+Rm9udEZhY2VTZXQoKTsKIAotICAgIGJvb2wgaGFzKFJl
ZlB0cjxXZWJDb3JlOjpGb250RmFjZT4pIGNvbnN0OworICAgIGJvb2wgaGFzKEZvbnRGYWNlJikg
Y29uc3Q7CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdDsKLSAgICBGb250RmFjZVNldCYgYWRkKFJl
ZlB0cjxXZWJDb3JlOjpGb250RmFjZT4pOwotICAgIGJvb2wgcmVtb3ZlKFJlZlB0cjxXZWJDb3Jl
OjpGb250RmFjZT4pOworICAgIEZvbnRGYWNlU2V0JiBhZGQoRm9udEZhY2UmKTsKKyAgICBib29s
IHJlbW92ZShGb250RmFjZSYpOwogICAgIHZvaWQgY2xlYXIoKTsKIAotICAgIHZvaWQgbG9hZChK
U0M6OkV4ZWNTdGF0ZSYgZXhlY1N0YXRlLCBjb25zdCBTdHJpbmcmIGZvbnQsIERlZmVycmVkV3Jh
cHBlciYmIHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IGxvYWQoZXhlY1N0YXRlLCBmb250
LCBTdHJpbmcoIiAiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwcm9t
aXNlKSwgZWMpOyB9CisgICAgdm9pZCBsb2FkKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgU3RyaW5n
JiBmb250LCBEZWZlcnJlZFdyYXBwZXImJiBwcm9taXNlLCBFeGNlcHRpb25Db2RlJik7CiAgICAg
dm9pZCBsb2FkKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJp
bmcmIHRleHQsIERlZmVycmVkV3JhcHBlciYmIHByb21pc2UsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICBib29sIGNoZWNrKGNvbnN0IFN0cmluZyYgZm9udCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0
dXJuIGNoZWNrKGZvbnQsIFN0cmluZygiICIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
LCBlYyk7IH0KKyAgICBib29sIGNoZWNrKGNvbnN0IFN0cmluZyYgZm9udCwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIGJvb2wgY2hlY2soY29uc3QgU3RyaW5nJiBmb250LCBjb25zdCBTdHJpbmcmIHRl
eHQsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIFN0cmluZyBzdGF0dXMoKSBjb25zdDsKQEAgLTgz
LDExICs3MCwxMSBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBJdGVyYXRvciBjcmVhdGVJdGVyYXRv
cigpIHsgcmV0dXJuIEl0ZXJhdG9yKCp0aGlzKTsgfQogCi0gICAgdXNpbmcgUmVmQ291bnRlZDxG
b250RmFjZVNldD46OnJlZjsKLSAgICB1c2luZyBSZWZDb3VudGVkPEZvbnRGYWNlU2V0Pjo6ZGVy
ZWY7CisgICAgdXNpbmcgUmVmQ291bnRlZDo6cmVmOworICAgIHVzaW5nIFJlZkNvdW50ZWQ6OmRl
cmVmOwogCiBwcml2YXRlOgotICAgIHN0cnVjdCBQZW5kaW5nUHJvbWlzZSA6IHB1YmxpYyBSZWZD
b3VudGVkPFBlbmRpbmdQcm9taXNlPiB7CisgICAgc3RydWN0IFBlbmRpbmdQcm9taXNlIDogUmVm
Q291bnRlZDxQZW5kaW5nUHJvbWlzZT4gewogICAgICAgICB0eXBlZGVmIERPTVByb21pc2U8VmVj
dG9yPFJlZlB0cjxGb250RmFjZT4+JiwgRE9NQ29yZUV4Y2VwdGlvbiY+IFByb21pc2U7CiAgICAg
ICAgIHN0YXRpYyBSZWY8UGVuZGluZ1Byb21pc2U+IGNyZWF0ZShQcm9taXNlJiYgcHJvbWlzZSkK
ICAgICAgICAgewpAQCAtMTEwLDE5ICs5NywxOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZnVsZmls
bFByb21pc2UoKTsKIAogICAgIC8vIENTU0ZvbnRGYWNlU2V0Q2xpZW50Ci0gICAgdm9pZCBzdGFy
dGVkTG9hZGluZygpIG92ZXJyaWRlOwotICAgIHZvaWQgY29tcGxldGVkTG9hZGluZygpIG92ZXJy
aWRlOwotICAgIHZvaWQgZmFjZUZpbmlzaGVkKENTU0ZvbnRGYWNlJiwgQ1NTRm9udEZhY2U6OlN0
YXR1cykgb3ZlcnJpZGU7CisgICAgdm9pZCBzdGFydGVkTG9hZGluZygpIGZpbmFsOworICAgIHZv
aWQgY29tcGxldGVkTG9hZGluZygpIGZpbmFsOworICAgIHZvaWQgZmFjZUZpbmlzaGVkKENTU0Zv
bnRGYWNlJiwgQ1NTRm9udEZhY2U6OlN0YXR1cykgZmluYWw7CiAKICAgICAvLyBBY3RpdmVET01P
YmplY3QKLSAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gIkZvbnRGYWNlU2V0IjsgfQotICAgIGJvb2wgY2FuU3VzcGVuZEZvckRvY3Vt
ZW50U3VzcGVuc2lvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURP
TU9iamVjdE5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiRm9udEZhY2VTZXQiOyB9CisgICAg
Ym9vbCBjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkgY29uc3QgZmluYWw7CiAKICAg
ICAvLyBFdmVudFRhcmdldAotICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50
ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRm9udEZhY2VTZXRFdmVudFRhcmdldElu
dGVyZmFjZVR5cGU7IH0KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7IH0KLSAgICB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJp
ZGUgeyByZWYoKTsgfQotICAgIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIHsgZGVy
ZWYoKTsgfQorICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gRm9udEZhY2VTZXRFdmVudFRhcmdldEludGVyZmFjZVR5cGU7
IH0KKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7IH0KKyAgICB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgZmluYWwgeyByZWYoKTsgfQorICAg
IHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIGZpbmFsIHsgZGVyZWYoKTsgfQogCiAgICAgUmVmPENT
U0ZvbnRGYWNlU2V0PiBtX2JhY2tpbmc7CiAgICAgSGFzaE1hcDxSZWZQdHI8Q1NTRm9udEZhY2U+
LCBWZWN0b3I8UmVmPFBlbmRpbmdQcm9taXNlPj4+IG1fcGVuZGluZ1Byb21pc2VzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9Gb250RmFjZVNldC5pZGwKaW5kZXggYmY3MTQzYWEzNTU0YmJlMDE0NWIyOTAzOTg5MTlj
Y2E2MTI4Yjg5ZS4uYjE5MjI5YTUyZjBkNGU2YmZmMDQ4NzVjY2E5N2UzY2I2MjU2YzJmZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlU2V0LmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvRm9udEZhY2VTZXQuaWRsCkBAIC0zMSw3ICszMSw2IEBAIGVudW0gRm9udEZh
Y2VTZXRMb2FkU3RhdHVzIHsKIFsKICAgICBDb25zdHJ1Y3RvckNhbGxXaXRoPURvY3VtZW50LAog
ICAgIENvbnN0cnVjdG9yKHNlcXVlbmNlPEZvbnRGYWNlPiBpbml0aWFsRmFjZXMpLAotICAgIFVz
ZVBvaW50ZXJzRXZlbkZvck5vbk51bGxhYmxlT2JqZWN0QXJndW1lbnRzLAogXSBpbnRlcmZhY2Ug
Rm9udEZhY2VTZXQgOiBFdmVudFRhcmdldCB7CiAgICAgYm9vbGVhbiBoYXMoRm9udEZhY2UgZm9u
dCk7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCA3Y2MzNjRkNjEzOTZmNzM3ZDdkODU1MzU4ODVkMDQwMmYzMWRjMzBkLi41
YjhmMDljZGZlNjIzZTMxMmZiNWQ0ZjRkMDNmOGVhNDRjNjkxMDY1IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTYtMDQtMDIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIEZvbnRGYWNlU2V0IGJpbmRpbmcgZG9lcyBub3QgaGFuZGxlIG51bGwgY29ycmVjdGx5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYxNDEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvdGV4
dC9mb250LWZhY2Utc2V0LWphdmFzY3JpcHQtZXhwZWN0ZWQudHh0OiBBZGRlZCBleHBlY3RlZCBy
ZXN1bHRzIGZvciBuZXcgdGVzdHMuCisgICAgICAgICogZmFzdC90ZXh0L2ZvbnQtZmFjZS1zZXQt
amF2YXNjcmlwdC5odG1sOiBBZGRlZCB0ZXN0cyBmb3IgaGFuZGxpbmcgb2YgbnVsbCwgYWxzbyBh
ZGRlZCB0ZXN0cyBmb3IKKyAgICAgICAgdGhlIGhhcyBmdW5jdGlvbi4KKwogMjAxNi0wNC0wMiAg
U2thY2hrb3YgT2xla3NhbmRyICA8Z3NrYWNoa292QGdtYWlsLmNvbT4KIAogICAgICAgICBbRVM2
XSBBcnJvdyBmdW5jdGlvbiBzeW50YXguIEFkZCBtaXNzZWQgdGVzdCBmb3IgdXNpbmcgJ3dpdGgn
IGFuZCAndGhpcycgaW4gYXJyb3cgZnVuY3Rpb24uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L3RleHQvZm9udC1mYWNlLXNldC1qYXZhc2NyaXB0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvdGV4dC9mb250LWZhY2Utc2V0LWphdmFzY3JpcHQtZXhwZWN0ZWQudHh0CmluZGV4
IGVjODhlZjNkN2VmOTkzNTU4MDJmYTFhM2JhOGYyOWFkYjQ4NjRhYjUuLjM4YTQxYWM0N2Y1OGI3
YWEwMzljODdiODQ2ZmQzNWI5NGY2MDZmMjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
dGV4dC9mb250LWZhY2Utc2V0LWphdmFzY3JpcHQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvdGV4dC9mb250LWZhY2Utc2V0LWphdmFzY3JpcHQtZXhwZWN0ZWQudHh0CkBAIC0x
Myw2ICsxMyw3IEBAIFBBU1MgaXRlbS52YWx1ZSBpcyBmb250RmFjZTEKIFBBU1MgaXRlbS5kb25l
IGlzIHRydWUKIFBBU1MgZm9udEZhY2VTZXQuYWRkKGZvbnRGYWNlMikgaXMgZm9udEZhY2VTZXQK
IFBBU1MgZm9udEZhY2VTZXQuc2l6ZSBpcyAyCitQQVNTIGZvbnRGYWNlU2V0LmFkZChudWxsKSB0
aHJldyBleGNlcHRpb24gRXJyb3I6IFR5cGVNaXNtYXRjaEVycm9yOiBET00gRXhjZXB0aW9uIDE3
LgogUEFTUyBpdGVtLmRvbmUgaXMgZmFsc2UKIFBBU1MgaXRlbS52YWx1ZSBpcyBmb250RmFjZTEK
IFBBU1MgaXRlbS5kb25lIGlzIGZhbHNlCkBAIC0yMCw2ICsyMSwxMCBAQCBQQVNTIGl0ZW0udmFs
dWUgaXMgZm9udEZhY2UyCiBQQVNTIGl0ZW0uZG9uZSBpcyB0cnVlCiBQQVNTIGZvbnRGYWNlU2V0
LmRlbGV0ZShmb250RmFjZTEpIGlzIHRydWUKIFBBU1MgZm9udEZhY2VTZXQuZGVsZXRlKGZvbnRG
YWNlMykgaXMgZmFsc2UKK1BBU1MgZm9udEZhY2VTZXQuZGVsZXRlKG51bGwpIHRocmV3IGV4Y2Vw
dGlvbiBFcnJvcjogVHlwZU1pc21hdGNoRXJyb3I6IERPTSBFeGNlcHRpb24gMTcuCitQQVNTIGZv
bnRGYWNlU2V0Lmhhcyhmb250RmFjZTEpIGlzIGZhbHNlCitQQVNTIGZvbnRGYWNlU2V0Lmhhcyhm
b250RmFjZTIpIGlzIHRydWUKK1BBU1MgZm9udEZhY2VTZXQuaGFzKG51bGwpIHRocmV3IGV4Y2Vw
dGlvbiBFcnJvcjogVHlwZU1pc21hdGNoRXJyb3I6IERPTSBFeGNlcHRpb24gMTcuCiBQQVNTIGZv
bnRGYWNlU2V0LnNpemUgaXMgMAogUEFTUyBmb250RmFjZVNldC52YWx1ZXMoKS5uZXh0KCkuZG9u
ZSBpcyB0cnVlCiBQQVNTIGZvbnRGYWNlU2V0LmNoZWNrKCdnYXJiYWdlJykgdGhyZXcgZXhjZXB0
aW9uIEVycm9yOiBTeW50YXhFcnJvcjogRE9NIEV4Y2VwdGlvbiAxMi4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvdGV4dC9mb250LWZhY2Utc2V0LWphdmFzY3JpcHQuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvdGV4dC9mb250LWZhY2Utc2V0LWphdmFzY3JpcHQuaHRtbAppbmRleCA5MWZh
M2I5NzYwZjVhNTY2YjIxYmE1OGRjMGI4ZTRkNWFjYTQzMzIxLi41NDg5YTJkNGM3NDkwOTAzYjE3
ZTA0M2EwNjk1Mzc5Yjg2MTM5ODIxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQv
Zm9udC1mYWNlLXNldC1qYXZhc2NyaXB0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0
L2ZvbnQtZmFjZS1zZXQtamF2YXNjcmlwdC5odG1sCkBAIC01LDcgKzUsNyBAQAogPGJvZHk+CiA8
c2NyaXB0PgogaWYgKHdpbmRvdy5pbnRlcm5hbHMpCi0gICAgd2luZG93LmludGVybmFscy5jbGVh
ck1lbW9yeUNhY2hlKCk7CisgICAgaW50ZXJuYWxzLmNsZWFyTWVtb3J5Q2FjaGUoKTsKIAogdmFy
IGZvbnRGYWNlMSA9IG5ldyBGb250RmFjZSgiZmFtaWx5MSIsICJ1cmwoJ2FzZGYnKSIsIHt9KTsK
IHZhciBmb250RmFjZTIgPSBuZXcgRm9udEZhY2UoImZhbWlseTIiLCAidXJsKCdhc2RmJykiLCB7
fSk7CkBAIC00NCw2ICs0NCw4IEBAIHNob3VsZEJlVHJ1ZSgiaXRlbS5kb25lIik7CiBzaG91bGRC
ZSgiZm9udEZhY2VTZXQuYWRkKGZvbnRGYWNlMikiLCAiZm9udEZhY2VTZXQiKTsKIHNob3VsZEJl
KCJmb250RmFjZVNldC5zaXplIiwgIjIiKTsKIAorc2hvdWxkVGhyb3coImZvbnRGYWNlU2V0LmFk
ZChudWxsKSIpOworCiBpdGVyYXRvciA9IGZvbnRGYWNlU2V0LmtleXMoKTsKIGl0ZW0gPSBpdGVy
YXRvci5uZXh0KCk7CiBzaG91bGRCZUZhbHNlKCJpdGVtLmRvbmUiKTsKQEAgLTU2LDcgKzU4LDE1
IEBAIHNob3VsZEJlVHJ1ZSgiaXRlbS5kb25lIik7CiAKIHNob3VsZEJlKCJmb250RmFjZVNldC5k
ZWxldGUoZm9udEZhY2UxKSIsICJ0cnVlIik7CiBzaG91bGRCZSgiZm9udEZhY2VTZXQuZGVsZXRl
KGZvbnRGYWNlMykiLCAiZmFsc2UiKTsKKworc2hvdWxkVGhyb3coImZvbnRGYWNlU2V0LmRlbGV0
ZShudWxsKSIpOworCitzaG91bGRCZUZhbHNlKCJmb250RmFjZVNldC5oYXMoZm9udEZhY2UxKSIp
Oworc2hvdWxkQmVUcnVlKCJmb250RmFjZVNldC5oYXMoZm9udEZhY2UyKSIpOworc2hvdWxkVGhy
b3coImZvbnRGYWNlU2V0LmhhcyhudWxsKSIpOworCiBmb250RmFjZVNldC5jbGVhcigpOworCiBz
aG91bGRCZSgiZm9udEZhY2VTZXQuc2l6ZSIsICIwIik7CiBzaG91bGRCZVRydWUoImZvbnRGYWNl
U2V0LnZhbHVlcygpLm5leHQoKS5kb25lIik7CiBzaG91bGRUaHJvdygiZm9udEZhY2VTZXQuY2hl
Y2soJ2dhcmJhZ2UnKSIpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>