<?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>167493</bug_id>
          
          <creation_ts>2017-01-27 01:04:50 -0800</creation_ts>
          <short_desc>[Cocoa] Prepare ComplexTextController for unit testing</short_desc>
          <delta_ts>2017-01-27 15:58:26 -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>New Bugs</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>
          
          <blocked>166013</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1270593</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-01-27 01:04:50 -0800</bug_when>
    <thetext>[Cocoa] Prepare ComplexTextController for unit testing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270600</commentid>
    <comment_count>1</comment_count>
      <attachid>299922</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-01-27 01:13:19 -0800</bug_when>
    <thetext>Created attachment 299922
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270601</commentid>
    <comment_count>2</comment_count>
      <attachid>299923</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-01-27 01:14:12 -0800</bug_when>
    <thetext>Created attachment 299923
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270727</commentid>
    <comment_count>3</comment_count>
      <attachid>299923</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-01-27 12:03:11 -0800</bug_when>
    <thetext>Comment on attachment 299923
Patch

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

&gt; Tools/TestWebKitAPI/Tests/WebCore/ComplexTextController.cpp:111
&gt; +    Vector&lt;CGSize&gt; advances = { CGSizeZero, CGSizeMake(21.640625, 0.0), CGSizeMake(42.3046875, 0.0), CGSizeMake(55.8984375, 0.0), CGSizeMake(22.34375, 0.0) };
&gt; +    Vector&lt;CGPoint&gt; origins = { CGPointMake(-15.15625, 18.046875), CGPointZero, CGPointZero, CGPointZero, CGPointZero };
&gt; +#else
&gt; +    Vector&lt;CGSize&gt; advances = { CGSizeMake(15.15625, -18.046875), CGSizeMake(21.640625, 0.0), CGSizeMake(42.3046875, 0.0), CGSizeMake(55.8984375, 0.0), CGSizeMake(22.34375, 0.0) };

Where do all these numbers come from? It&apos;s probably worth leaving a comment explaining them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270728</commentid>
    <comment_count>4</comment_count>
      <attachid>299923</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-01-27 12:04:21 -0800</bug_when>
    <thetext>Comment on attachment 299923
Patch

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

&gt;&gt; Tools/TestWebKitAPI/Tests/WebCore/ComplexTextController.cpp:111
&gt;&gt; +    Vector&lt;CGSize&gt; advances = { CGSizeMake(15.15625, -18.046875), CGSizeMake(21.640625, 0.0), CGSizeMake(42.3046875, 0.0), CGSizeMake(55.8984375, 0.0), CGSizeMake(22.34375, 0.0) };
&gt; 
&gt; Where do all these numbers come from? It&apos;s probably worth leaving a comment explaining them.

From the ChangeLog: &quot;These metrics
 16        have been gathered from real-world uses; however, a layout test is not appropriate
 17        because the fonts which produced these metrics are not licensed appropriately.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270729</commentid>
    <comment_count>5</comment_count>
      <attachid>299923</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-01-27 12:05:12 -0800</bug_when>
    <thetext>Comment on attachment 299923
Patch

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

&gt; Source/WebCore/ChangeLog:26
&gt; +        No new tests because there is no behavior change.

But you&apos;re adding an API test.

&gt; Source/WebCore/platform/graphics/mac/ComplexTextController.h:94
&gt; +        static Ref&lt;ComplexTextRun&gt; createForTesting(Vector&lt;CGSize&gt; advances, Vector&lt;CGPoint&gt; origins, Vector&lt;CGGlyph&gt; glyphs, Vector&lt;CFIndex&gt; stringIndices, CGSize initialAdvance, const Font&amp; font, const UChar* characters, unsigned stringLocation, size_t stringLength, CFRange runRange, bool ltr)

Do you really want to copy all those vectors by value?

&gt; Source/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.mm:186
&gt; +ComplexTextController::ComplexTextRun::ComplexTextRun(Vector&lt;CGSize&gt; advances, Vector&lt;CGPoint&gt; origins, Vector&lt;CGGlyph&gt; glyphs, Vector&lt;CFIndex&gt; stringIndices, CGSize initialAdvance, const Font&amp; font, const UChar* characters, unsigned stringLocation, size_t stringLength, CFRange runRange, bool ltr)

So much copying.

&gt; Tools/TestWebKitAPI/Tests/WebCore/ComplexTextController.cpp:54
&gt; +    font.update(nullptr);

Maybe update should have a default argument.

&gt; Tools/TestWebKitAPI/Tests/WebCore/ComplexTextController.cpp:57
&gt; +#if USE_LAYOUT_SPECIFIC_ADVANCES

Are you sure that TestWebKitAPI gets the right defines?

&gt; Tools/TestWebKitAPI/Tests/WebCore/ComplexTextController.cpp:70
&gt; +    Ref&lt;ComplexTextController::ComplexTextRun&gt; run1 = ComplexTextController::ComplexTextRun::createForTesting({ CGSizeMake(21.875, 0) }, { CGPointZero }, { 5 }, { 5 }, CGSizeZero, font.primaryFont(), characters, 0, charactersLength, CFRangeMake(5, 1), false);

auto?

&gt; Tools/TestWebKitAPI/Tests/WebCore/ComplexTextController.cpp:71
&gt; +    Ref&lt;ComplexTextController::ComplexTextRun&gt; run2 = ComplexTextController::ComplexTextRun::createForTesting(advances, origins, { 193, 377, 447, 431, 458 }, { 4, 3, 2, 1, 0 }, initialAdvance, font.primaryFont(), characters, 0, charactersLength, CFRangeMake(0, 5), false);

auto?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270734</commentid>
    <comment_count>6</comment_count>
      <attachid>299923</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-27 12:29:32 -0800</bug_when>
    <thetext>Comment on attachment 299923
Patch

Clearing flags on attachment: 299923

Committed r211294: &lt;http://trac.webkit.org/changeset/211294&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270735</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-27 12:29:35 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270778</commentid>
    <comment_count>8</comment_count>
      <attachid>299923</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-01-27 14:35:17 -0800</bug_when>
    <thetext>Comment on attachment 299923
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:26
&gt;&gt; +        No new tests because there is no behavior change.
&gt; 
&gt; But you&apos;re adding an API test.

They are disabled until https://bugs.webkit.org/show_bug.cgi?id=166013

&gt;&gt; Tools/TestWebKitAPI/Tests/WebCore/ComplexTextController.cpp:57
&gt;&gt; +#if USE_LAYOUT_SPECIFIC_ADVANCES
&gt; 
&gt; Are you sure that TestWebKitAPI gets the right defines?

Yes, this is defined in ComplexTextController.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270779</commentid>
    <comment_count>9</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-01-27 14:35:58 -0800</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270780</commentid>
    <comment_count>10</comment_count>
      <attachid>299964</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-01-27 14:36:00 -0800</bug_when>
    <thetext>Created attachment 299964
Follow-up patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1270810</commentid>
    <comment_count>11</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-01-27 15:58:26 -0800</bug_when>
    <thetext>Committed r211308: &lt;http://trac.webkit.org/changeset/211308&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299922</attachid>
            <date>2017-01-27 01:13:19 -0800</date>
            <delta_ts>2017-01-27 01:13:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167493-20170127011115.patch</filename>
            <type>text/plain</type>
            <size>32048</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjExMjAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGIwMzExY2E1MjA4ODRhMGJmOTNmOTBk
MzEyYzdlMWVhZGE0YWI5NGMuLmI2YWFmYTFhNWYzMDg3ZjcxMGRkY2Y1OTY2YzAzNmE5MjlkOTlj
MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTctMDEtMjcgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIFByZXBhcmUgQ29tcGxleFRl
eHRDb250cm9sbGVyIGZvciB1bml0IHRlc3RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzQ5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTctMDEtMjUgIFdl
bnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgSW50cm9kdWNl
IGFuIGl0ZW0tcHJvdmlkZXItYmFzZWQgcGFzdGVib2FyZCB3cmFwcGVyCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YmM0MGM0MDE5ZGE2OTVlZmRiYmNkYWQ1YzUwNzkyMGE4ZDdmYjdjMi4uYTgxMDYyOTY1MTFlOTI0
YmQwYjEyYzgyOWJmMWYyM2ZkYThiYTQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisy
MDE3LTAxLTI3ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAg
ICAgICAgW0NvY29hXSBQcmVwYXJlIENvbXBsZXhUZXh0Q29udHJvbGxlciBmb3IgdW5pdCB0ZXN0
aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc0
OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb21w
bGV4VGV4dENvbnRyb2xsZXIgaGFzIHRocmVlIHBoYXNlczoKKyAgICAgICAgMS4gSW50ZXJyb2dh
dGUgQ29yZSBUZXh0IGFib3V0IHNvbWUgdGV4dAorICAgICAgICAyLiBDb21wdXRlIGxheW91dCBh
ZHZhbmNlcyBhbmQgcGFpbnQgYWR2YW5jZXMgZnJvbSB0aGUgaW5mb3JtYXRpb24gcmV0cmlldmVk
IGZyb20KKyAgICAgICAgQ29yZSBUZXh0CisgICAgICAgIDMuIEl0ZXJhdGUgdGhyb3VnaCB0aGUg
bGF5b3V0IGFkdmFuY2VzIG9yIHBhaW50IGFkdmFuY2VzLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
dGVzdHMgcGhhc2VzIDIgYW5kIDMgYnkgY2hvcHBpbmcgQ29tcGxleFRleHRDb250cm9sbGVyIGJl
dHdlZW4KKyAgICAgICAgcGhhc2VzIDEgYW5kIDIsIGFuZCBpbmplY3RpbmcgZm9yZWlnbiBtZXRy
aWNzIGZyb20gYSB1bml0IHRlc3QuIFRoZXNlIG1ldHJpY3MKKyAgICAgICAgaGF2ZSBiZWVuIGdh
dGhlcmVkIGZyb20gcmVhbC13b3JsZCB1c2VzOyBob3dldmVyLCBhIGxheW91dCB0ZXN0IGlzIG5v
dCBhcHByb3ByaWF0ZQorICAgICAgICBiZWNhdXNlIHRoZSBmb250cyB3aGljaCBwcm9kdWNlZCB0
aGVzZSBtZXRyaWNzIGFyZSBub3QgbGljZW5zZWQgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgVGhl
IHRlc3RzIGNhbiBlbmZvcmNlIHRoZSBjb3JyZWN0IGJlaGF2aW9yIGJ5IHVzaW5nIENvbXBsZXhU
ZXh0Q29udHJvbGxlcidzCisgICAgICAgIHB1YmxpYyBBUEkuCisKKyAgICAgICAgVGhpcyBpcyBp
biBwcmVwYXJhdGlvbiBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NjAxMy4KKyAgICAgICAgSG93ZXZlciwgdGhlIGZpeCBmb3IgdGhhdCBidWcgaXMgcXVpdGUg
bGFyZ2UsIHNvIEkndmUgc3BsaXQgb3V0IHRoaXMgc21hbGxlciBwaWVjZQorICAgICAgICB0byBl
YXNlIHRoZSByZXZpZXdpbmcgYnVyZGVuLiBUaGUgdGVzdHMgSSd2ZSBhZGRlZCBhcmUgZGlzYWJs
ZWQgZm9yIG5vdyAoYmVjYXVzZQorICAgICAgICB0aGV5IGZhaWwpLCBidXQgd2lsbCBiZSBlbmFi
bGVkIGJ5IHRoZSBmaXggdG8gdGhhdCBidWcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1
c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0
Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmZp
bmlzaENvbnN0cnVjdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBs
ZXhUZXh0Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9s
bGVyOjpDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlRm9yVGVzdGluZyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Q29tcGxl
eFRleHRSdW4pOgorCiAyMDE3LTAxLTI1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIENyYXNoIHVuZGVyIERPTVNlbGVjdGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybS5oCmluZGV4IDJlNmMxNjRmNDI5YzU2ODNjMGVmYTJhZjE3ZGRhMGNlMjIzZmZl
MGUuLmQzNWFmYzUyMjJkZGRmYWFkZTAyNDViMWM4ZWYyOWQzNGVjZGI5ZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0u
aApAQCAtMTIxNCw3ICsxMjE0LDcgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBf
X01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTAxMjAxICYmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCi0jZGVmaW5lIEhBVkVfVE9VQ0hfQkFSIDEKKyNk
ZWZpbmUgSEFWRV9UT1VDSF9CQVIgMAogI2RlZmluZSBIQVZFX0FEVkFOQ0VEX1NQRUxMX0NIRUNL
SU5HIDEKIAogI2lmIGRlZmluZWQoX19MUDY0X18pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggY2MyNzc5ZWUwMGM0ODNhYmQzZDZm
ZTcyYjc2ZTAyNDRlMDVhNWE1Mi4uYTE1ZTU5MmY3NDE4MDg3MTBkZjY3MTU1OTM0YmRlOWIxODk2
NTEyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTQ1Miw3ICsxNDUyLDcgQEAKIAkJMzdCMzI3RDMxRDE3MDk2QTAwNTczN0ZB
IC8qIFBJUFNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzdCMzI3RDIxRDE3MDk2QTAwNTczN0ZBIC8qIFBJUFNQSS5oICovOyB9OwogCQkzN0JBQUU1
ODE5ODBEMUREMDA1REZFNzEgLyogUHJvdGVjdGlvblNwYWNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0JBQUU1NzE5ODBEMUREMDA1REZFNzEgLyog
UHJvdGVjdGlvblNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMzdDMjM2MTAxMDk3RUU3NzAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
N0MyMzYwRTEwOTdFRTc3MDBFRjlGNzIgLyogQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCAqLzsg
fTsKLQkJMzdDMjM2MTExMDk3RUU3NzAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdDMjM2MEYx
MDk3RUU3NzAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5oICovOyB9OworCQkzN0My
MzYxMTEwOTdFRTc3MDBFRjlGNzIgLyogQ29tcGxleFRleHRDb250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0MyMzYwRjEwOTdFRTc3MDBF
RjlGNzIgLyogQ29tcGxleFRleHRDb250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzdDMjM4MjIxMDk4Qzg0MjAwRUY5RjcyIC8qIENv
bXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzdDMjM4MjAxMDk4Qzg0MjAwRUY5RjcyIC8qIENvbXBsZXhU
ZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tICovOyB9OwogCQkzN0Q0NTZGRDFBOUE1MEQ4MDAzMzMw
QTEgLyogTG9jYWxpemFibGVTdHJpbmdzLnBtIGluIENvcHkgU2NyaXB0cyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Q0NTZGQjFBOUE1MEI2MDAzMzMwQTEgLyogTG9jYWxp
emFibGVTdHJpbmdzLnBtICovOyB9OwogCQkzN0REQ0Q5NDEzODQ0RkQ1MDAwOEI3OTMgLyogTUlN
RUhlYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzN0REQ0Q5MjEzODQ0RkQ1MDAwOEI3OTMgLyogTUlNRUhlYWRlci5jcHAgKi87IH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAppbmRleCAzMmRl
YzJmM2IyZTY2MjQ1YzRhZWJkNzQ5NzZhODM5MzEyNzgzYmMxLi42Njc1MjgwZDYzYmY2OWFiNDlm
NmZhY2M5NDdhM2MzZjBjYWFkYWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYXNjYWRlLmgKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiBjbGFzcyBG
b250Q2FzY2FkZSB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgRm9udENhc2NhZGUoKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZShjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0
aW9uJiwgZmxvYXQgbGV0dGVyU3BhY2luZywgZmxvYXQgd29yZFNwYWNpbmcpOworICAgIFdFQkNP
UkVfRVhQT1JUIEZvbnRDYXNjYWRlKGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBmbG9h
dCBsZXR0ZXJTcGFjaW5nID0gMCwgZmxvYXQgd29yZFNwYWNpbmcgPSAwKTsKICAgICAvLyBUaGlz
IGNvbnN0cnVjdG9yIGlzIG9ubHkgdXNlZCBpZiB0aGUgcGxhdGZvcm0gd2FudHMgdG8gc3RhcnQg
d2l0aCBhIG5hdGl2ZSBmb250LgogICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmLCBGb250U21vb3RoaW5nTW9kZSA9IEF1dG9TbW9vdGhpbmcpOwog
CkBAIC0xMjksNyArMTI5LDcgQEAgcHVibGljOgogICAgIGludCBwaXhlbFNpemUoKSBjb25zdCB7
IHJldHVybiBmb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFBpeGVsU2l6ZSgpOyB9CiAgICAgZmxv
YXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgp
OyB9CiAKLSAgICB2b2lkIHVwZGF0ZShSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZShSZWZQdHI8Rm9udFNlbGVjdG9yPiYmKSBjb25z
dDsKIAogICAgIGVudW0gQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIHsgRG9Ob3RQYWludElmRm9u
dE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5IH07CiAgICAgV0VCQ09SRV9FWFBP
UlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
dG8gPSBzdGQ6Om51bGxvcHQsIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IERvTm90UGFpbnRJ
ZkZvbnROb3RSZWFkeSkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5oCmluZGV4IGFkNmZlYzQwNGFlZTkyYjBlYWZkNzg4OTRl
MTgyMGExNWU4NTQ4MWYuLmE3ZmRhNDAxMmU5ZjkxMGJhYmUwOGM5MmMxMGE4MjA5MWI4Mzk3MTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlw
dGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlw
dGlvbi5oCkBAIC0xOTcsNyArMTk3LDcgQEAgaW5saW5lIGJvb2wgRm9udERlc2NyaXB0aW9uOjpv
cGVyYXRvcj09KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgb3RoZXIpIGNvbnN0CiAvLyBGSVhNRTog
TW92ZSB0byBhIGZpbGUgb2YgaXRzIG93bi4KIGNsYXNzIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24g
OiBwdWJsaWMgRm9udERlc2NyaXB0aW9uIHsKIHB1YmxpYzoKLSAgICBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgRm9udENhc2NhZGVEZXNjcmlwdGlvbigpOwog
CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25z
dDsKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRy
b2xsZXIuY3BwCmluZGV4IGNmYjU2NzFkNzAzNTlhODkwODEyMThjMzhjNGI4OGJiOWRiOWIzODEu
LmViMTM3NzRkZDI5YzI5YjMwNTIxNmEwOGQwNWE1OTdiNzcyZGVlYTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4
dENvbnRyb2xsZXIuY3BwCkBAIC0xMjgsNiArMTI4LDIzIEBAIENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6Q29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBU
ZXh0CiAgICAgfQogCiAgICAgY29sbGVjdENvbXBsZXhUZXh0UnVucygpOworCisgICAgZmluaXNo
Q29uc3RydWN0aW9uKCk7Cit9CisKK0NvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRD
b250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIFZl
Y3RvcjxSZWY8Q29tcGxleFRleHRSdW4+PiYgcnVucykKKyAgICA6IG1fZm9udChmb250KQorICAg
ICwgbV9ydW4ocnVuKQorICAgICwgbV9lbmQocnVuLmxlbmd0aCgpKQoreworICAgIGZvciAoYXV0
byYgcnVuIDogcnVucykKKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKHJ1bi5wdHIo
KSk7CisKKyAgICBmaW5pc2hDb25zdHJ1Y3Rpb24oKTsKK30KKwordm9pZCBDb21wbGV4VGV4dENv
bnRyb2xsZXI6OmZpbmlzaENvbnN0cnVjdGlvbigpCit7CiAgICAgYWRqdXN0R2x5cGhzQW5kQWR2
YW5jZXMoKTsKIAogICAgIGlmICghbV9pc0xUUk9ubHkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIu
aAppbmRleCBkNGU3MGYzYzI0NzcxYTU5ZDA4NzhiMTdhYjNlMGU3NGJhMjkyZTI5Li4wYjE1NGM2
ZGE0MDNjZThiNDY4OTdlM2E4NGEzZDVkN2MwZmNmMjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ci5oCkBAIC01OCw4ICs1OCwxMSBAQCBjbGFzcyBDb21wbGV4VGV4dENvbnRyb2xsZXIgewogcHVi
bGljOgogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFRleHRSdW4mLCBib29sIG1heVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uID0gZmFsc2UsIEhh
c2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBmb3JUZXh0RW1waGFz
aXMgPSBmYWxzZSk7CiAKKyAgICBjbGFzcyBDb21wbGV4VGV4dFJ1bjsKKyAgICBXRUJDT1JFX0VY
UE9SVCBDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0
UnVuJiwgVmVjdG9yPFJlZjxDb21wbGV4VGV4dFJ1bj4+Jik7CisKICAgICAvLyBBZHZhbmNlIGFu
ZCBlbWl0IGdseXBocyB1cCB0byB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rlci4KLSAgICB2b2lkIGFk
dmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyKiA9IG51bGxwdHIsIEdseXBoSXRlcmF0aW9u
U3R5bGUgPSBJbmNsdWRlUGFydGlhbEdseXBocywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxi
YWNrRm9udHMgPSBudWxscHRyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkdmFuY2UodW5z
aWduZWQgdG8sIEdseXBoQnVmZmVyKiA9IG51bGxwdHIsIEdseXBoSXRlcmF0aW9uU3R5bGUgPSBJ
bmNsdWRlUGFydGlhbEdseXBocywgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMg
PSBudWxscHRyKTsKIAogICAgIC8vIENvbXB1dGUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZm9yIGEg
Z2l2ZW4geCBjb29yZGluYXRlLgogICAgIHVuc2lnbmVkIG9mZnNldEZvclBvc2l0aW9uKGZsb2F0
IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwpAQCAtNzUsOCArNzgsNyBAQCBwdWJsaWM6
CiAgICAgZmxvYXQgbWF4R2x5cGhCb3VuZGluZ0JveFkoKSBjb25zdCB7IHJldHVybiBtX21heEds
eXBoQm91bmRpbmdCb3hZOyB9CiAKICAgICBmbG9hdCBsZWFkaW5nRXhwYW5zaW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9sZWFkaW5nRXhwYW5zaW9uOyB9Ci0gICAgCi1wcml2YXRlOgorCiAgICAgY2xh
c3MgQ29tcGxleFRleHRSdW4gOiBwdWJsaWMgUmVmQ291bnRlZDxDb21wbGV4VGV4dFJ1bj4gewog
ICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFJlZjxDb21wbGV4VGV4dFJ1bj4gY3JlYXRlKENU
UnVuUmVmIGN0UnVuLCBjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVu
UmFuZ2UpCkBAIC04OSw2ICs5MSwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQ29tcGxleFRleHRSdW4oZm9udCwgY2hhcmFjdGVycywgc3RyaW5nTG9jYXRp
b24sIHN0cmluZ0xlbmd0aCwgbHRyKSk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgUmVm
PENvbXBsZXhUZXh0UnVuPiBjcmVhdGVGb3JUZXN0aW5nKFZlY3RvcjxDR1NpemU+IGFkdmFuY2Vz
LCBWZWN0b3I8Q0dQb2ludD4gb3JpZ2lucywgVmVjdG9yPENHR2x5cGg+IGdseXBocywgVmVjdG9y
PENGSW5kZXg+IHN0cmluZ0luZGljZXMsIENHU2l6ZSBpbml0aWFsQWR2YW5jZSwgY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9u
LCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdlLCBib29sIGx0cikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tcGxleFRleHRSdW4oYWR2
YW5jZXMsIG9yaWdpbnMsIGdseXBocywgc3RyaW5nSW5kaWNlcywgaW5pdGlhbEFkdmFuY2UsIGZv
bnQsIGNoYXJhY3RlcnMsIHN0cmluZ0xvY2F0aW9uLCBzdHJpbmdMZW5ndGgsIHJ1blJhbmdlLCBs
dHIpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHVuc2lnbmVkIGdseXBoQ291bnQoKSBjb25zdCB7
IHJldHVybiBtX2dseXBoQ291bnQ7IH0KICAgICAgICAgY29uc3QgRm9udCYgZm9udCgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udDsgfQogICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNv
bnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyczsgfQpAQCAtMTIwLDYgKzEyNyw3IEBAIHByaXZhdGU6
CiAgICAgcHJpdmF0ZToKICAgICAgICAgQ29tcGxleFRleHRSdW4oQ1RSdW5SZWYsIGNvbnN0IEZv
bnQmLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNp
emVfdCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UpOwogICAgICAgICBDb21wbGV4VGV4
dFJ1bihjb25zdCBGb250JiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmlu
Z0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBib29sIGx0cik7CisgICAgICAgIFdFQkNP
UkVfRVhQT1JUIENvbXBsZXhUZXh0UnVuKFZlY3RvcjxDR1NpemU+IGFkdmFuY2VzLCBWZWN0b3I8
Q0dQb2ludD4gb3JpZ2lucywgVmVjdG9yPENHR2x5cGg+IGdseXBocywgVmVjdG9yPENGSW5kZXg+
IHN0cmluZ0luZGljZXMsIENHU2l6ZSBpbml0aWFsQWR2YW5jZSwgY29uc3QgRm9udCYsIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmlu
Z0xlbmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSwgYm9vbCBsdHIpOwogCiAgICAgICAgIFZlY3RvcjxD
R1NpemUsIDY0PiBtX2Jhc2VBZHZhbmNlc1ZlY3RvcjsKICAgICAgICAgVmVjdG9yPENHUG9pbnQs
IDY0PiBtX2dseXBoT3JpZ2luczsKQEAgLTEzOCw4ICsxNDYsMTAgQEAgcHJpdmF0ZToKICAgICAg
ICAgdW5zaWduZWQgbV9nbHlwaENvdW50OwogICAgICAgICB1bnNpZ25lZCBtX3N0cmluZ0xvY2F0
aW9uOwogICAgICAgICBib29sIG1faXNMVFI7Ci0gICAgICAgIGJvb2wgbV9pc01vbm90b25pYzsK
KyAgICAgICAgYm9vbCBtX2lzTW9ub3RvbmljIHsgdHJ1ZSB9OwogICAgIH07Citwcml2YXRlOgor
ICAgIHZvaWQgZmluaXNoQ29uc3RydWN0aW9uKCk7CiAgICAgCiAgICAgc3RhdGljIHVuc2lnbmVk
IHN0cmluZ0JlZ2luKGNvbnN0IENvbXBsZXhUZXh0UnVuJiBydW4pIHsgcmV0dXJuIHJ1bi5zdHJp
bmdMb2NhdGlvbigpICsgcnVuLmluZGV4QmVnaW4oKTsgfQogICAgIHN0YXRpYyB1bnNpZ25lZCBz
dHJpbmdFbmQoY29uc3QgQ29tcGxleFRleHRSdW4mIHJ1bikgeyByZXR1cm4gcnVuLnN0cmluZ0xv
Y2F0aW9uKCkgKyBydW4uaW5kZXhFbmQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ckNvcmVUZXh0Lm1tCmluZGV4IDU4MjE0MjlkNGZkMDliMGE1ZjRlMDAxMWE3NzExMTUwMDU4MDQy
NDMuLmNjNDM2MjEzMmQ2OTg0NDA5OWI2MDU5ZmQxM2ZmYjU5NTkxNGFjNjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xs
ZXJDb3JlVGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Q29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KQEAgLTExMSwyMSArMTExLDIwIEBAIENv
bXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKENUUnVu
UmVmIGN0UnVuLCBjb25zdCBGb250CiAgICAgLCBtX2ZvbnQoZm9udCkKICAgICAsIG1fY2hhcmFj
dGVycyhjaGFyYWN0ZXJzKQogICAgICwgbV9zdHJpbmdMZW5ndGgoc3RyaW5nTGVuZ3RoKQorICAg
ICwgbV9jb3JlVGV4dEluZGljZXMoQ1RSdW5HZXRTdHJpbmdJbmRpY2VzUHRyKGN0UnVuKSkKKyAg
ICAsIG1fZ2x5cGhzKENUUnVuR2V0R2x5cGhzUHRyKGN0UnVuKSkKICAgICAsIG1faW5kZXhCZWdp
bihydW5SYW5nZS5sb2NhdGlvbikKICAgICAsIG1faW5kZXhFbmQocnVuUmFuZ2UubG9jYXRpb24g
KyBydW5SYW5nZS5sZW5ndGgpCisgICAgLCBtX2dseXBoQ291bnQoQ1RSdW5HZXRHbHlwaENvdW50
KGN0UnVuKSkKICAgICAsIG1fc3RyaW5nTG9jYXRpb24oc3RyaW5nTG9jYXRpb24pCiAgICAgLCBt
X2lzTFRSKCEoQ1RSdW5HZXRTdGF0dXMoY3RSdW4pICYga0NUUnVuU3RhdHVzUmlnaHRUb0xlZnQp
KQotICAgICwgbV9pc01vbm90b25pYyh0cnVlKQogewotICAgIG1fZ2x5cGhDb3VudCA9IENUUnVu
R2V0R2x5cGhDb3VudChjdFJ1bik7Ci0gICAgbV9jb3JlVGV4dEluZGljZXMgPSBDVFJ1bkdldFN0
cmluZ0luZGljZXNQdHIoY3RSdW4pOwogICAgIGlmICghbV9jb3JlVGV4dEluZGljZXMpIHsKICAg
ICAgICAgbV9jb3JlVGV4dEluZGljZXNWZWN0b3IuZ3JvdyhtX2dseXBoQ291bnQpOwogICAgICAg
ICBDVFJ1bkdldFN0cmluZ0luZGljZXMoY3RSdW4sIENGUmFuZ2VNYWtlKDAsIDApLCBtX2NvcmVU
ZXh0SW5kaWNlc1ZlY3Rvci5kYXRhKCkpOwogICAgICAgICBtX2NvcmVUZXh0SW5kaWNlcyA9IG1f
Y29yZVRleHRJbmRpY2VzVmVjdG9yLmRhdGEoKTsKICAgICB9CiAKLSAgICBtX2dseXBocyA9IENU
UnVuR2V0R2x5cGhzUHRyKGN0UnVuKTsKICAgICBpZiAoIW1fZ2x5cGhzKSB7CiAgICAgICAgIG1f
Z2x5cGhzVmVjdG9yLmdyb3cobV9nbHlwaENvdW50KTsKICAgICAgICAgQ1RSdW5HZXRHbHlwaHMo
Y3RSdW4sIENGUmFuZ2VNYWtlKDAsIDApLCBtX2dseXBoc1ZlY3Rvci5kYXRhKCkpOwpAQCAtMTYx
LDcgKzE2MCw2IEBAIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBs
ZXhUZXh0UnVuKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDCiAgICAgLCBtX2luZGV4RW5kKHN0
cmluZ0xlbmd0aCkKICAgICAsIG1fc3RyaW5nTG9jYXRpb24oc3RyaW5nTG9jYXRpb24pCiAgICAg
LCBtX2lzTFRSKGx0cikKLSAgICAsIG1faXNNb25vdG9uaWModHJ1ZSkKIHsKICAgICBtX2NvcmVU
ZXh0SW5kaWNlc1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fc3RyaW5nTGVuZ3RoKTsK
ICAgICB1bnNpZ25lZCByID0gMDsKQEAgLTE4NCw2ICsxODIsMjcgQEAgQ29tcGxleFRleHRDb250
cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Q29tcGxleFRleHRSdW4oY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgVUMKICAgICBtX2Jhc2VBZHZhbmNlcyA9IG1fYmFzZUFkdmFuY2VzVmVjdG9yLmRhdGEo
KTsKIH0KIAorCitDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDb21wbGV4
VGV4dFJ1bihWZWN0b3I8Q0dTaXplPiBhZHZhbmNlcywgVmVjdG9yPENHUG9pbnQ+IG9yaWdpbnMs
IFZlY3RvcjxDR0dseXBoPiBnbHlwaHMsIFZlY3RvcjxDRkluZGV4PiBzdHJpbmdJbmRpY2VzLCBD
R1NpemUgaW5pdGlhbEFkdmFuY2UsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZS
YW5nZSBydW5SYW5nZSwgYm9vbCBsdHIpCisgICAgOiBtX2Jhc2VBZHZhbmNlc1ZlY3RvcihhZHZh
bmNlcykKKyAgICAsIG1fZ2x5cGhPcmlnaW5zKG9yaWdpbnMpCisgICAgLCBtX2dseXBoc1ZlY3Rv
cihnbHlwaHMpCisgICAgLCBtX2NvcmVUZXh0SW5kaWNlc1ZlY3RvcihzdHJpbmdJbmRpY2VzKQor
ICAgICwgbV9pbml0aWFsQWR2YW5jZShpbml0aWFsQWR2YW5jZSkKKyAgICAsIG1fZm9udChmb250
KQorICAgICwgbV9jaGFyYWN0ZXJzKGNoYXJhY3RlcnMpCisgICAgLCBtX3N0cmluZ0xlbmd0aChz
dHJpbmdMZW5ndGgpCisgICAgLCBtX2NvcmVUZXh0SW5kaWNlcyhtX2NvcmVUZXh0SW5kaWNlc1Zl
Y3Rvci5kYXRhKCkpCisgICAgLCBtX2dseXBocyhtX2dseXBoc1ZlY3Rvci5kYXRhKCkpCisgICAg
LCBtX2Jhc2VBZHZhbmNlcyhtX2Jhc2VBZHZhbmNlc1ZlY3Rvci5kYXRhKCkpCisgICAgLCBtX2lu
ZGV4QmVnaW4ocnVuUmFuZ2UubG9jYXRpb24pCisgICAgLCBtX2luZGV4RW5kKHJ1blJhbmdlLmxv
Y2F0aW9uICsgcnVuUmFuZ2UubGVuZ3RoKQorICAgICwgbV9nbHlwaENvdW50KGdseXBocy5zaXpl
KCkpCisgICAgLCBtX3N0cmluZ0xvY2F0aW9uKHN0cmluZ0xvY2F0aW9uKQorICAgICwgbV9pc0xU
UihsdHIpCit7Cit9CisKIHN0cnVjdCBQcm92aWRlckluZm8gewogICAgIGNvbnN0IFVDaGFyKiBj
cDsKICAgICB1bnNpZ25lZCBsZW5ndGg7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggNjdkNTkyOGViOWE1YjY4ZDcwZWEyMDBmMDA0NThmMmQ3Zjhh
MzQ2MC4uYmU1ZDU5ZjNkMTBlZjg1ZGI1M2YyODhmNzNmNWNiOTBhNGZlZTM2OSAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBA
CisyMDE3LTAxLTI3ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisK
KyAgICAgICAgW0NvY29hXSBQcmVwYXJlIENvbXBsZXhUZXh0Q29udHJvbGxlciBmb3IgdW5pdCB0
ZXN0aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Njc0OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
cmVhdGUgZm91ciB1bml0IHRlc3RzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6Q29tcGxleFRleHRDb250cm9sbGVyVGVzdDo6U2V0VXApOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKwogMjAxNy0wMS0yNSAgUnlhbiBIYWRkYWQg
IDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByMjExMTkzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmOGY5YzY5OGNiY2I3MWM2NTQ1
ZThiNTFjNGM0M2NhMGYxNDllOTk2Li40ODBmYmViMmMxNWQxN2NiY2ExNmE2Njg0OWI4MzM4Nzgw
Y2I4MGNlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDUsNiArNDUsNyBAQAogCQkxQzJC
ODE4MzFDODkxRjA5MDBBNTUyOUYgLyogQ2FuY2VsRm9udFN1YnJlc291cmNlUGx1Z0luLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMyQjgxODExQzg5
MUVGQTAwQTU1MjlGIC8qIENhbmNlbEZvbnRTdWJyZXNvdXJjZVBsdWdJbi5tbSAqLzsgfTsKIAkJ
MUMyQjgxODYxQzg5MjU5RDAwQTU1MjlGIC8qIHdlYmZvbnQuaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzJCODE4NDFDODkyNEEyMDBB
NTUyOUYgLyogd2ViZm9udC5odG1sICovOyB9OwogCQkxQzJCODE4NzFDODkyNUEwMDBBNTUyOUYg
LyogQWhlbS50dGYgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUMyQjgxODUxQzg5MjUyMzAwQTU1MjlGIC8qIEFoZW0udHRmICovOyB9OworCQkx
QzlFQjg0MTFFMzgwREExMDA1QzY0NDIgLyogQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDOUVCODQwMUUzODBE
QTEwMDVDNjQ0MiAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuY3BwICovOyB9OwogCQkxRjgzNTcx
QjFEM0ZGQjIzMDBFMzk2N0IgLyogV0tCYWNrRm9yd2FyZExpc3QubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjgzNTcxQTFEM0ZGQjBFMDBFMzk2N0Ig
LyogV0tCYWNrRm9yd2FyZExpc3QubW0gKi87IH07CiAJCTI2REY1QTYzMTVBMkEyN0UwMDM2ODlD
MiAvKiBDYW5jZWxMb2FkRnJvbVJlc291cmNlTG9hZERlbGVnYXRlLmh0bWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZERjVBNjExNUEyQTIy
QjAwMzY4OUMyIC8qIENhbmNlbExvYWRGcm9tUmVzb3VyY2VMb2FkRGVsZWdhdGUuaHRtbCAqLzsg
fTsKIAkJMjZGNTJFQUQxODI4ODI3QjAwMjNENDEyIC8qIGdlb2xvY2F0aW9uR2V0Q3VycmVudFBv
c2l0aW9uLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjZGNTJFQUMxODI4ODIwRTAwMjNENDEyIC8qIGdlb2xvY2F0aW9uR2V0Q3VycmVu
dFBvc2l0aW9uLmh0bWwgKi87IH07CkBAIC04MTUsNiArODE2LDcgQEAKIAkJMUMyQjgxODExQzg5
MUVGQTAwQTU1MjlGIC8qIENhbmNlbEZvbnRTdWJyZXNvdXJjZVBsdWdJbi5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENhbmNlbEZvbnRTdWJyZXNvdXJjZVBsdWdJ
bi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMyQjgxODQxQzg5MjRBMjAwQTU1
MjlGIC8qIHdlYmZvbnQuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IHdlYmZvbnQu
aHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMyQjgxODUxQzg5MjUyMzAwQTU1
MjlGIC8qIEFoZW0udHRmICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gZmlsZTsgcGF0aCA9IEFoZW0udHRmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxQzlFQjg0MDFFMzgwREExMDA1QzY0NDIgLyogQ29tcGxleFRleHRDb250cm9sbGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBsZXhUZXh0Q29udHJv
bGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQjlCQzM3MUE2NzQ4MjMw
MEZFNTY3OCAvKiBXZWFrUHRyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdlYWtQdHIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0YwRDM3ODFC
QkYyRjNEMDBCNEVGNTQgLyogV0tSZXRhaW5QdHIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV0tSZXRhaW5QdHIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxRjgzNTcxQTFEM0ZGQjBFMDBFMzk2N0IgLyogV0tCYWNrRm9yd2FyZExpc3QubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS0JhY2tGb3J3YXJkTGlzdC5t
bTsgcGF0aCA9IFRlc3RzL1dlYktpdDIvV0tCYWNrRm9yd2FyZExpc3QubW07IHNvdXJjZVRyZWUg
PSBTT1VSQ0VfUk9PVDsgfTsKQEAgLTE1OTIsNiArMTU5NCw3IEBACiAJCQkJNDQwQTFEMzgxNEEw
MTAzQTAwOEE2NkYyIC8qIFVSTC5jcHAgKi8sCiAJCQkJNUM2RTY1NDExRDVDRUY4NTAwRjc4NjJF
IC8qIFVSTFBhcnNlci5jcHAgKi8sCiAJCQkJOUM2NERDMzExRDc2MTk4QTAwNEI1OThFIC8qIFlv
dVR1YmVQbHVnaW5SZXBsYWNlbWVudC5jcHAgKi8sCisJCQkJMUM5RUI4NDAxRTM4MERBMTAwNUM2
NDQyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9IFdl
YkNvcmU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjY4Niw2ICsyNjg5LDcgQEAK
IAkJCQkyREZGN0I2RDFEQTQ4N0FGMDA4MTQ2MTQgLyogU25hcHNob3RTdG9yZS5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDNkU2NTQ0MUQ1Q0VGRDQwMEY3ODYyRSAvKiBVUkxQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMjcxQTQxMUFGNjAwNDQ3QzRDIC8qIFVzZXJDb250ZW50
Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTFDOUVCODQxMUUzODBEQTEwMDVDNjQ0
MiAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdG
MkQxQTQxMUIxMDAwNDQ3QzRDIC8qIFVzZXJDb250ZW50VGVzdC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTdDODgyRTBBMUM4MEM3NjQwMDZCRjczMSAvKiBVc2VyQ29udGVudFdvcmxkLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0NDQjk5MjExRDNCNDFGNjAwMzkyMkY2IC8qIFVzZXJJbml0aWF0ZWRB
Y3Rpb25Jbk5hdmlnYXRpb25BY3Rpb24ubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjExMWM2NGJjYzcxN2I5MWRiNWJkN2FlN2U2YjhjODg2ODYzNTgy
YgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9D
b21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5pdGlhbGl6
ZVRocmVhZGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29tcGxleFRleHRDb250cm9sbGVyLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworY2xhc3MgQ29tcGxleFRleHRDb250
cm9sbGVyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgp
OworICAgICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyAgICAgICAgUnVuTG9vcDo6
aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7CisgICAgfQorfTsKKworVEVTVF9GKENvbXBsZXhUZXh0
Q29udHJvbGxlclRlc3QsIERJU0FCTEVEX0luaXRpYWxBZHZhbmNlV2l0aExlZnRSdW5JblJUTCkK
K3sKKyAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOworICAgIGRlc2NyaXB0
aW9uLnNldE9uZUZhbWlseSgiVGltZXMiKTsKKyAgICBkZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNp
emUoODApOworICAgIEZvbnRDYXNjYWRlIGZvbnQoZGVzY3JpcHRpb24pOworICAgIGZvbnQudXBk
YXRlKG51bGxwdHIpOworICAgIGF1dG8gc3BhY2VXaWR0aCA9IGZvbnQucHJpbWFyeUZvbnQoKS5z
cGFjZVdpZHRoKCk7CisKKyNpZiBVU0VfTEFZT1VUX1NQRUNJRklDX0FEVkFOQ0VTCisgICAgVmVj
dG9yPENHU2l6ZT4gYWR2YW5jZXMgPSB7IENHU2l6ZVplcm8sIENHU2l6ZU1ha2UoMjEuNjQwNjI1
LCAwLjApLCBDR1NpemVNYWtlKDQyLjMwNDY4NzUsIDAuMCksIENHU2l6ZU1ha2UoNTUuODk4NDM3
NSwgMC4wKSwgQ0dTaXplTWFrZSgyMi4zNDM3NSwgMC4wKSB9OworICAgIFZlY3RvcjxDR1BvaW50
PiBvcmlnaW5zID0geyBDR1BvaW50TWFrZSgtMTUuMTU2MjUsIDE4LjA0Njg3NSksIENHUG9pbnRa
ZXJvLCBDR1BvaW50WmVybywgQ0dQb2ludFplcm8sIENHUG9pbnRaZXJvIH07CisjZWxzZQorICAg
IFZlY3RvcjxDR1NpemU+IGFkdmFuY2VzID0geyBDR1NpemVNYWtlKDE1LjE1NjI1LCAtMTguMDQ2
ODc1KSwgQ0dTaXplTWFrZSgyMS42NDA2MjUsIDAuMCksIENHU2l6ZU1ha2UoNDIuMzA0Njg3NSwg
MC4wKSwgQ0dTaXplTWFrZSg1NS44OTg0Mzc1LCAwLjApLCBDR1NpemVNYWtlKDIyLjM0Mzc1LCAw
LjApIH07CisgICAgVmVjdG9yPENHUG9pbnQ+IG9yaWdpbnMgPSB7IH07CisjZW5kaWYKKworICAg
IENHU2l6ZSBpbml0aWFsQWR2YW5jZSA9IENHU2l6ZU1ha2UoLTE1LjE1NjI1LCAxOC4wNDY4NzUp
OworCisgICAgVUNoYXIgY2hhcmFjdGVyc1tdID0geyAweDY0NCwgMHg2MzcsIDB4NjQxLCAweDYy
NywgMHg2NGIsIDB4MjAgfTsKKyAgICBzaXplX3QgY2hhcmFjdGVyc0xlbmd0aCA9IFdURl9BUlJB
WV9MRU5HVEgoY2hhcmFjdGVycyk7CisgICAgVGV4dFJ1biB0ZXh0UnVuKFN0cmluZ1ZpZXcoY2hh
cmFjdGVycywgY2hhcmFjdGVyc0xlbmd0aCkpOworICAgIFJlZjxDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OkNvbXBsZXhUZXh0UnVuPiBydW4xID0gQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4
VGV4dFJ1bjo6Y3JlYXRlRm9yVGVzdGluZyh7IENHU2l6ZU1ha2UoMjEuODc1LCAwKSB9LCB7IENH
UG9pbnRaZXJvIH0sIHsgNSB9LCB7IDUgfSwgQ0dTaXplWmVybywgZm9udC5wcmltYXJ5Rm9udCgp
LCBjaGFyYWN0ZXJzLCAwLCBjaGFyYWN0ZXJzTGVuZ3RoLCBDRlJhbmdlTWFrZSg1LCAxKSwgZmFs
c2UpOworICAgIFJlZjxDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuPiBydW4y
ID0gQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlRm9yVGVzdGlu
ZyhhZHZhbmNlcywgb3JpZ2lucywgeyAxOTMsIDM3NywgNDQ3LCA0MzEsIDQ1OCB9LCB7IDQsIDMs
IDIsIDEsIDAgfSwgaW5pdGlhbEFkdmFuY2UsIGZvbnQucHJpbWFyeUZvbnQoKSwgY2hhcmFjdGVy
cywgMCwgY2hhcmFjdGVyc0xlbmd0aCwgQ0ZSYW5nZU1ha2UoMCwgNSksIGZhbHNlKTsKKyAgICBW
ZWN0b3I8UmVmPENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW4+PiBydW5zOwor
ICAgIHJ1bnMuYXBwZW5kKFdURk1vdmUocnVuMSkpOworICAgIHJ1bnMuYXBwZW5kKFdURk1vdmUo
cnVuMikpOworICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKGZvbnQsIHRleHRS
dW4sIHJ1bnMpOworCisgICAgQ0dGbG9hdCB0b3RhbFdpZHRoID0gMDsKKyAgICBmb3IgKHNpemVf
dCBpID0gMTsgaSA8IGFkdmFuY2VzLnNpemUoKTsgKytpKQorICAgICAgICB0b3RhbFdpZHRoICs9
IGFkdmFuY2VzW2ldLndpZHRoOworICAgIEVYUEVDVF9ORUFSKGNvbnRyb2xsZXIudG90YWxXaWR0
aCgpLCBzcGFjZVdpZHRoICsgdG90YWxXaWR0aCwgMC4wMDAxKTsKKyAgICBHbHlwaEJ1ZmZlciBn
bHlwaEJ1ZmZlcjsKKyAgICBjb250cm9sbGVyLmFkdmFuY2UoMCwgJmdseXBoQnVmZmVyKTsKKyAg
ICBFWFBFQ1RfTkVBUihjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSwgMCwgMC4wMDAxKTsKKyAg
ICBjb250cm9sbGVyLmFkdmFuY2UoMSwgJmdseXBoQnVmZmVyKTsKKyAgICBFWFBFQ1RfTkVBUihj
b250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSwgYWR2YW5jZXNbNF0ud2lkdGgsIDAuMDAwMSk7Cisg
ICAgY29udHJvbGxlci5hZHZhbmNlKDYsICZnbHlwaEJ1ZmZlcik7CisgICAgRVhQRUNUX05FQVIo
Y29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCksIHNwYWNlV2lkdGggKyB0b3RhbFdpZHRoLCAwLjAw
MDEpOworICAgIEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmluaXRpYWxBZHZhbmNlKCkud2lkdGgo
KSwgMCwgMC4wMDAxKTsKKyAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5j
ZSgpLmhlaWdodCgpLCAwLCAwLjAwMDEpOworICAgIEVYUEVDVF9FUShnbHlwaEJ1ZmZlci5zaXpl
KCksIDZVKTsKKyAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoMCkud2lkdGgo
KSwgYWR2YW5jZXNbNF0ud2lkdGgsIDAuMDAwMSk7CisgICAgRVhQRUNUX05FQVIoZ2x5cGhCdWZm
ZXIuYWR2YW5jZUF0KDEpLndpZHRoKCksIGFkdmFuY2VzWzNdLndpZHRoLCAwLjAwMDEpOworICAg
IEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmFkdmFuY2VBdCgyKS53aWR0aCgpLCBhZHZhbmNlc1sy
XS53aWR0aCwgMC4wMDAxKTsKKyAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5hZHZhbmNlQXQo
Mykud2lkdGgoKSwgYWR2YW5jZXNbMV0ud2lkdGgsIDAuMDAwMSk7CisgICAgRVhQRUNUX05FQVIo
Z2x5cGhCdWZmZXIuYWR2YW5jZUF0KDQpLndpZHRoKCksIC1pbml0aWFsQWR2YW5jZS53aWR0aCwg
MC4wMDAxKTsKKyAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoNSkud2lkdGgo
KSwgc3BhY2VXaWR0aCArIGluaXRpYWxBZHZhbmNlLndpZHRoLCAwLjAwMDEpOworfQorCitURVNU
X0YoQ29tcGxleFRleHRDb250cm9sbGVyVGVzdCwgRElTQUJMRURfSW5pdGlhbEFkdmFuY2VJblJU
TCkKK3sKKyAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOworICAgIGRlc2Ny
aXB0aW9uLnNldE9uZUZhbWlseSgiVGltZXMiKTsKKyAgICBkZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoODApOworICAgIEZvbnRDYXNjYWRlIGZvbnQoZGVzY3JpcHRpb24pOworICAgIGZvbnQu
dXBkYXRlKG51bGxwdHIpOworCisjaWYgVVNFX0xBWU9VVF9TUEVDSUZJQ19BRFZBTkNFUworICAg
IFZlY3RvcjxDR1NpemU+IGFkdmFuY2VzID0geyBDR1NpemVaZXJvLCBDR1NpemVNYWtlKDIxLjY0
MDYyNSwgMC4wKSwgQ0dTaXplTWFrZSg0Mi4zMDQ2ODc1LCAwLjApLCBDR1NpemVNYWtlKDU1Ljg5
ODQzNzUsIDAuMCksIENHU2l6ZU1ha2UoMjIuMzQzNzUsIDAuMCkgfTsKKyAgICBWZWN0b3I8Q0dQ
b2ludD4gb3JpZ2lucyA9IHsgQ0dQb2ludE1ha2UoLTE1LjE1NjI1LCAxOC4wNDY4NzUpLCBDR1Bv
aW50WmVybywgQ0dQb2ludFplcm8sIENHUG9pbnRaZXJvLCBDR1BvaW50WmVybyB9OworI2Vsc2UK
KyAgICBWZWN0b3I8Q0dTaXplPiBhZHZhbmNlcyA9IHsgQ0dTaXplTWFrZSgxNS4xNTYyNSwgLTE4
LjA0Njg3NSksIENHU2l6ZU1ha2UoMjEuNjQwNjI1LCAwLjApLCBDR1NpemVNYWtlKDQyLjMwNDY4
NzUsIDAuMCksIENHU2l6ZU1ha2UoNTUuODk4NDM3NSwgMC4wKSwgQ0dTaXplTWFrZSgyMi4zNDM3
NSwgMC4wKSB9OworICAgIFZlY3RvcjxDR1BvaW50PiBvcmlnaW5zID0geyB9OworI2VuZGlmCisK
KyAgICBDR1NpemUgaW5pdGlhbEFkdmFuY2UgPSBDR1NpemVNYWtlKC0xNS4xNTYyNSwgMTguMDQ2
ODc1KTsKKworICAgIFVDaGFyIGNoYXJhY3RlcnNbXSA9IHsgMHg2NDQsIDB4NjM3LCAweDY0MSwg
MHg2MjcsIDB4NjRiIH07CisgICAgc2l6ZV90IGNoYXJhY3RlcnNMZW5ndGggPSBXVEZfQVJSQVlf
TEVOR1RIKGNoYXJhY3RlcnMpOworICAgIFRleHRSdW4gdGV4dFJ1bihTdHJpbmdWaWV3KGNoYXJh
Y3RlcnMsIGNoYXJhY3RlcnNMZW5ndGgpKTsKKyAgICBSZWY8Q29tcGxleFRleHRDb250cm9sbGVy
OjpDb21wbGV4VGV4dFJ1bj4gcnVuID0gQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4
dFJ1bjo6Y3JlYXRlRm9yVGVzdGluZyhhZHZhbmNlcywgb3JpZ2lucywgeyAxOTMsIDM3NywgNDQ3
LCA0MzEsIDQ1OCB9LCB7IDQsIDMsIDIsIDEsIDAgfSwgaW5pdGlhbEFkdmFuY2UsIGZvbnQucHJp
bWFyeUZvbnQoKSwgY2hhcmFjdGVycywgMCwgY2hhcmFjdGVyc0xlbmd0aCwgQ0ZSYW5nZU1ha2Uo
MCwgNSksIGZhbHNlKTsKKyAgICBWZWN0b3I8UmVmPENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29t
cGxleFRleHRSdW4+PiBydW5zOworICAgIHJ1bnMuYXBwZW5kKFdURk1vdmUocnVuKSk7CisgICAg
Q29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIoZm9udCwgdGV4dFJ1biwgcnVucyk7CisK
KyAgICBDR0Zsb2F0IHRvdGFsV2lkdGggPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwg
YWR2YW5jZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIHRvdGFsV2lkdGggKz0gYWR2YW5jZXNbaV0u
d2lkdGg7CisgICAgRVhQRUNUX05FQVIoY29udHJvbGxlci50b3RhbFdpZHRoKCksIHRvdGFsV2lk
dGgsIDAuMDAwMSk7CisgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CisgICAgY29udHJvbGxl
ci5hZHZhbmNlKDAsICZnbHlwaEJ1ZmZlcik7CisgICAgRVhQRUNUX05FQVIoY29udHJvbGxlci5y
dW5XaWR0aFNvRmFyKCksIDAsIDAuMDAwMSk7CisgICAgY29udHJvbGxlci5hZHZhbmNlKDEsICZn
bHlwaEJ1ZmZlcik7CisgICAgRVhQRUNUX05FQVIoY29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCks
IGFkdmFuY2VzWzRdLndpZHRoLCAwLjAwMDEpOworICAgIGNvbnRyb2xsZXIuYWR2YW5jZSg1LCAm
Z2x5cGhCdWZmZXIpOworICAgIEVYUEVDVF9ORUFSKGNvbnRyb2xsZXIucnVuV2lkdGhTb0Zhcigp
LCB0b3RhbFdpZHRoLCAwLjAwMDEpOworICAgIEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmluaXRp
YWxBZHZhbmNlKCkud2lkdGgoKSwgaW5pdGlhbEFkdmFuY2Uud2lkdGgsIDAuMDAwMSk7CisgICAg
RVhQRUNUX05FQVIoZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQoKSwgaW5pdGlh
bEFkdmFuY2UuaGVpZ2h0LCAwLjAwMDEpOworICAgIEVYUEVDVF9FUShnbHlwaEJ1ZmZlci5zaXpl
KCksIDVVKTsKKyAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoMCkud2lkdGgo
KSwgYWR2YW5jZXNbNF0ud2lkdGgsIDAuMDAwMSk7CisgICAgRVhQRUNUX05FQVIoZ2x5cGhCdWZm
ZXIuYWR2YW5jZUF0KDEpLndpZHRoKCksIGFkdmFuY2VzWzNdLndpZHRoLCAwLjAwMDEpOworICAg
IEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmFkdmFuY2VBdCgyKS53aWR0aCgpLCBhZHZhbmNlc1sy
XS53aWR0aCwgMC4wMDAxKTsKKyAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5hZHZhbmNlQXQo
Mykud2lkdGgoKSwgYWR2YW5jZXNbMV0ud2lkdGgsIDAuMDAwMSk7CisgICAgRVhQRUNUX05FQVIo
Z2x5cGhCdWZmZXIuYWR2YW5jZUF0KDQpLndpZHRoKCksIC1pbml0aWFsQWR2YW5jZS53aWR0aCwg
MC4wMDAxKTsKK30KKworVEVTVF9GKENvbXBsZXhUZXh0Q29udHJvbGxlclRlc3QsIERJU0FCTEVE
X0luaXRpYWxBZHZhbmNlV2l0aExlZnRSdW5JbkxUUikKK3sKKyAgICBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uIGRlc2NyaXB0aW9uOworICAgIGRlc2NyaXB0aW9uLnNldE9uZUZhbWlseSgiTHVjaWRh
R3JhbmRlIik7CisgICAgZGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKDgwKTsKKyAgICBGb250
Q2FzY2FkZSBmb250KGRlc2NyaXB0aW9uKTsKKyAgICBmb250LnVwZGF0ZShudWxscHRyKTsKKyAg
ICBhdXRvIHNwYWNlV2lkdGggPSBmb250LnByaW1hcnlGb250KCkuc3BhY2VXaWR0aCgpOworCisj
aWYgVVNFX0xBWU9VVF9TUEVDSUZJQ19BRFZBTkNFUworICAgIFZlY3RvcjxDR1NpemU+IGFkdmFu
Y2VzID0geyBDR1NpemVNYWtlKDc2LjM0NzY1NiwgMC4wMDAwMDApLCBDR1NpemVNYWtlKDAuMDAw
MDAwLCAwLjAwMDAwMCkgfTsKKyAgICBWZWN0b3I8Q0dQb2ludD4gb3JpZ2lucyA9IHsgQ0dQb2lu
dFplcm8sIENHUG9pbnRNYWtlKC0yMy4yODEyNTAsIC04LjM5ODQzOCkgfTsKKyNlbHNlCisgICAg
VmVjdG9yPENHU2l6ZT4gYWR2YW5jZXMgPSB7IENHU2l6ZU1ha2UoNTMuMDY2NDA2LCAtOC4zOTg0
MzgpLCBDR1NpemVNYWtlKDIzLjI4MTI1MCwgOC4zOTg0MzgpIH07CisgICAgVmVjdG9yPENHUG9p
bnQ+IG9yaWdpbnMgPSB7IH07CisjZW5kaWYKKworICAgIENHU2l6ZSBpbml0aWFsQWR2YW5jZSA9
IENHU2l6ZU1ha2UoMjguMTQ0NTMxLCAwKTsKKworICAgIFVDaGFyIGNoYXJhY3RlcnNbXSA9IHsg
MHgyMCwgMHg2MSwgMHgyMGUzIH07CisgICAgc2l6ZV90IGNoYXJhY3RlcnNMZW5ndGggPSBXVEZf
QVJSQVlfTEVOR1RIKGNoYXJhY3RlcnMpOworICAgIFRleHRSdW4gdGV4dFJ1bihTdHJpbmdWaWV3
KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnNMZW5ndGgpKTsKKyAgICBSZWY8Q29tcGxleFRleHRDb250
cm9sbGVyOjpDb21wbGV4VGV4dFJ1bj4gcnVuMSA9IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29t
cGxleFRleHRSdW46OmNyZWF0ZUZvclRlc3RpbmcoeyBDR1NpemVNYWtlKHNwYWNlV2lkdGgsIDAp
IH0sIHsgQ0dQb2ludFplcm8gfSwgeyA1IH0sIHsgMCB9LCBDR1NpemVaZXJvLCBmb250LnByaW1h
cnlGb250KCksIGNoYXJhY3RlcnMsIDAsIGNoYXJhY3RlcnNMZW5ndGgsIENGUmFuZ2VNYWtlKDAs
IDEpLCB0cnVlKTsKKyAgICBSZWY8Q29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1
bj4gcnVuMiA9IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OmNyZWF0ZUZv
clRlc3RpbmcoYWR2YW5jZXMsIG9yaWdpbnMsIHsgNjgsIDE0NzEgfSwgeyAxLCAyIH0sIGluaXRp
YWxBZHZhbmNlLCBmb250LnByaW1hcnlGb250KCksIGNoYXJhY3RlcnMsIDAsIGNoYXJhY3RlcnNM
ZW5ndGgsIENGUmFuZ2VNYWtlKDEsIDIpLCB0cnVlKTsKKyAgICBWZWN0b3I8UmVmPENvbXBsZXhU
ZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW4+PiBydW5zOworICAgIHJ1bnMuYXBwZW5kKFdU
Rk1vdmUocnVuMSkpOworICAgIHJ1bnMuYXBwZW5kKFdURk1vdmUocnVuMikpOworICAgIENvbXBs
ZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKGZvbnQsIHRleHRSdW4sIHJ1bnMpOworCisgICAg
RVhQRUNUX05FQVIoY29udHJvbGxlci50b3RhbFdpZHRoKCksIHNwYWNlV2lkdGggKyA3Ni4zNDc2
NTYgKyBpbml0aWFsQWR2YW5jZS53aWR0aCwgMC4wMDAxKTsKKyAgICBHbHlwaEJ1ZmZlciBnbHlw
aEJ1ZmZlcjsKKyAgICBjb250cm9sbGVyLmFkdmFuY2UoMCwgJmdseXBoQnVmZmVyKTsKKyAgICBF
WFBFQ1RfTkVBUihjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSwgMCwgMC4wMDAxKTsKKyAgICBj
b250cm9sbGVyLmFkdmFuY2UoMSwgJmdseXBoQnVmZmVyKTsKKyAgICBFWFBFQ1RfTkVBUihjb250
cm9sbGVyLnJ1bldpZHRoU29GYXIoKSwgc3BhY2VXaWR0aCwgMC4wMDAxKTsKKyAgICBjb250cm9s
bGVyLmFkdmFuY2UoMiwgJmdseXBoQnVmZmVyKTsKKyAgICBFWFBFQ1RfTkVBUihjb250cm9sbGVy
LnJ1bldpZHRoU29GYXIoKSwgc3BhY2VXaWR0aCArIGFkdmFuY2VzWzBdLndpZHRoICsgaW5pdGlh
bEFkdmFuY2Uud2lkdGgsIDAuMDAwMSk7CisgICAgY29udHJvbGxlci5hZHZhbmNlKDMsICZnbHlw
aEJ1ZmZlcik7CisgICAgRVhQRUNUX05FQVIoY29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCksIHNw
YWNlV2lkdGggKyA3Ni4zNDc2NTYgKyBpbml0aWFsQWR2YW5jZS53aWR0aCwgMC4wMDAxKTsKKyAg
ICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLndpZHRoKCksIDAsIDAu
MDAwMSk7CisgICAgRVhQRUNUX05FQVIoZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWln
aHQoKSwgMCwgMC4wMDAxKTsKKyAgICBFWFBFQ1RfRVEoZ2x5cGhCdWZmZXIuc2l6ZSgpLCAzVSk7
CisgICAgRVhQRUNUX05FQVIoZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KDApLndpZHRoKCksIHNwYWNl
V2lkdGggKyBpbml0aWFsQWR2YW5jZS53aWR0aCwgMC4wMDAxKTsKKyAgICBFWFBFQ1RfTkVBUihn
bHlwaEJ1ZmZlci5hZHZhbmNlQXQoMSkud2lkdGgoKSwgNTMuMDY2NDA2LCAwLjAwMDEpOworICAg
IEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmFkdmFuY2VBdCgyKS53aWR0aCgpLCAyMy4yODEyNTAs
IDAuMDAwMSk7Cit9CisKK1RFU1RfRihDb21wbGV4VGV4dENvbnRyb2xsZXJUZXN0LCBESVNBQkxF
RF9Jbml0aWFsQWR2YW5jZUluTFRSKQoreworICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZGVz
Y3JpcHRpb247CisgICAgZGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KCJMdWNpZGFHcmFuZGUiKTsK
KyAgICBkZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoODApOworICAgIEZvbnRDYXNjYWRlIGZv
bnQoZGVzY3JpcHRpb24pOworICAgIGZvbnQudXBkYXRlKG51bGxwdHIpOworCisjaWYgVVNFX0xB
WU9VVF9TUEVDSUZJQ19BRFZBTkNFUworICAgIFZlY3RvcjxDR1NpemU+IGFkdmFuY2VzID0geyBD
R1NpemVNYWtlKDc2LjM0NzY1NiwgMC4wMDAwMDApLCBDR1NpemVNYWtlKDAuMDAwMDAwLCAwLjAw
MDAwMCkgfTsKKyAgICBWZWN0b3I8Q0dQb2ludD4gb3JpZ2lucyA9IHsgQ0dQb2ludFplcm8sIENH
UG9pbnRNYWtlKC0yMy4yODEyNTAsIC04LjM5ODQzOCkgfTsKKyNlbHNlCisgICAgVmVjdG9yPENH
U2l6ZT4gYWR2YW5jZXMgPSB7IENHU2l6ZU1ha2UoNTMuMDY2NDA2LCAtOC4zOTg0MzgpLCBDR1Np
emVNYWtlKDIzLjI4MTI1MCwgOC4zOTg0MzgpIH07CisgICAgVmVjdG9yPENHUG9pbnQ+IG9yaWdp
bnMgPSB7IH07CisjZW5kaWYKKworICAgIENHU2l6ZSBpbml0aWFsQWR2YW5jZSA9IENHU2l6ZU1h
a2UoMjguMTQ0NTMxLCAwKTsKKworICAgIFVDaGFyIGNoYXJhY3RlcnNbXSA9IHsgMHg2MSwgMHgy
MGUzIH07CisgICAgc2l6ZV90IGNoYXJhY3RlcnNMZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNo
YXJhY3RlcnMpOworICAgIFRleHRSdW4gdGV4dFJ1bihTdHJpbmdWaWV3KGNoYXJhY3RlcnMsIGNo
YXJhY3RlcnNMZW5ndGgpKTsKKyAgICBSZWY8Q29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4
VGV4dFJ1bj4gcnVuID0gQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Y3Jl
YXRlRm9yVGVzdGluZyhhZHZhbmNlcywgb3JpZ2lucywgeyA2OCwgMTQ3MSB9LCB7IDAsIDEgfSwg
aW5pdGlhbEFkdmFuY2UsIGZvbnQucHJpbWFyeUZvbnQoKSwgY2hhcmFjdGVycywgMCwgY2hhcmFj
dGVyc0xlbmd0aCwgQ0ZSYW5nZU1ha2UoMCwgMiksIHRydWUpOworICAgIFZlY3RvcjxSZWY8Q29t
cGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bj4+IHJ1bnM7CisgICAgcnVucy5hcHBl
bmQoV1RGTW92ZShydW4pKTsKKyAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcihm
b250LCB0ZXh0UnVuLCBydW5zKTsKKworICAgIEVYUEVDVF9ORUFSKGNvbnRyb2xsZXIudG90YWxX
aWR0aCgpLCA3Ni4zNDc2NTYgKyBpbml0aWFsQWR2YW5jZS53aWR0aCwgMC4wMDAxKTsKKyAgICBH
bHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKKyAgICBjb250cm9sbGVyLmFkdmFuY2UoMCwgJmdseXBo
QnVmZmVyKTsKKyAgICBFWFBFQ1RfTkVBUihjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSwgMCwg
MC4wMDAxKTsKKyAgICBjb250cm9sbGVyLmFkdmFuY2UoMSwgJmdseXBoQnVmZmVyKTsKKyAgICBF
WFBFQ1RfTkVBUihjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSwgYWR2YW5jZXNbMF0ud2lkdGgg
KyBpbml0aWFsQWR2YW5jZS53aWR0aCwgMC4wMDAxKTsKKyAgICBjb250cm9sbGVyLmFkdmFuY2Uo
MiwgJmdseXBoQnVmZmVyKTsKKyAgICBFWFBFQ1RfTkVBUihjb250cm9sbGVyLnJ1bldpZHRoU29G
YXIoKSwgNzYuMzQ3NjU2ICsgaW5pdGlhbEFkdmFuY2Uud2lkdGgsIDAuMDAwMSk7CisgICAgRVhQ
RUNUX05FQVIoZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS53aWR0aCgpLCBpbml0aWFsQWR2
YW5jZS53aWR0aCwgMC4wMDAxKTsKKyAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5pbml0aWFs
QWR2YW5jZSgpLmhlaWdodCgpLCBpbml0aWFsQWR2YW5jZS5oZWlnaHQsIDAuMDAwMSk7CisgICAg
RVhQRUNUX0VRKGdseXBoQnVmZmVyLnNpemUoKSwgMlUpOworICAgIEVYUEVDVF9ORUFSKGdseXBo
QnVmZmVyLmFkdmFuY2VBdCgwKS53aWR0aCgpLCA1My4wNjY0MDYsIDAuMDAwMSk7CisgICAgRVhQ
RUNUX05FQVIoZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KDEpLndpZHRoKCksIDIzLjI4MTI1MCwgMC4w
MDAxKTsKK30KKworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299923</attachid>
            <date>2017-01-27 01:14:12 -0800</date>
            <delta_ts>2017-01-27 14:36:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>30979</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjExMjAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmM0MGM0MDE5ZGE2OTVl
ZmRiYmNkYWQ1YzUwNzkyMGE4ZDdmYjdjMi4uYTgxMDYyOTY1MTFlOTI0YmQwYjEyYzgyOWJmMWYy
M2ZkYThiYTQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDE3LTAxLTI3ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBQ
cmVwYXJlIENvbXBsZXhUZXh0Q29udHJvbGxlciBmb3IgdW5pdCB0ZXN0aW5nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc0OTMKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb21wbGV4VGV4dENvbnRyb2xs
ZXIgaGFzIHRocmVlIHBoYXNlczoKKyAgICAgICAgMS4gSW50ZXJyb2dhdGUgQ29yZSBUZXh0IGFi
b3V0IHNvbWUgdGV4dAorICAgICAgICAyLiBDb21wdXRlIGxheW91dCBhZHZhbmNlcyBhbmQgcGFp
bnQgYWR2YW5jZXMgZnJvbSB0aGUgaW5mb3JtYXRpb24gcmV0cmlldmVkIGZyb20KKyAgICAgICAg
Q29yZSBUZXh0CisgICAgICAgIDMuIEl0ZXJhdGUgdGhyb3VnaCB0aGUgbGF5b3V0IGFkdmFuY2Vz
IG9yIHBhaW50IGFkdmFuY2VzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggdGVzdHMgcGhhc2VzIDIg
YW5kIDMgYnkgY2hvcHBpbmcgQ29tcGxleFRleHRDb250cm9sbGVyIGJldHdlZW4KKyAgICAgICAg
cGhhc2VzIDEgYW5kIDIsIGFuZCBpbmplY3RpbmcgZm9yZWlnbiBtZXRyaWNzIGZyb20gYSB1bml0
IHRlc3QuIFRoZXNlIG1ldHJpY3MKKyAgICAgICAgaGF2ZSBiZWVuIGdhdGhlcmVkIGZyb20gcmVh
bC13b3JsZCB1c2VzOyBob3dldmVyLCBhIGxheW91dCB0ZXN0IGlzIG5vdCBhcHByb3ByaWF0ZQor
ICAgICAgICBiZWNhdXNlIHRoZSBmb250cyB3aGljaCBwcm9kdWNlZCB0aGVzZSBtZXRyaWNzIGFy
ZSBub3QgbGljZW5zZWQgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgVGhlIHRlc3RzIGNhbiBlbmZv
cmNlIHRoZSBjb3JyZWN0IGJlaGF2aW9yIGJ5IHVzaW5nIENvbXBsZXhUZXh0Q29udHJvbGxlcidz
CisgICAgICAgIHB1YmxpYyBBUEkuCisKKyAgICAgICAgVGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjAxMy4KKyAgICAg
ICAgSG93ZXZlciwgdGhlIGZpeCBmb3IgdGhhdCBidWcgaXMgcXVpdGUgbGFyZ2UsIHNvIEkndmUg
c3BsaXQgb3V0IHRoaXMgc21hbGxlciBwaWVjZQorICAgICAgICB0byBlYXNlIHRoZSByZXZpZXdp
bmcgYnVyZGVuLiBUaGUgdGVzdHMgSSd2ZSBhZGRlZCBhcmUgZGlzYWJsZWQgZm9yIG5vdyAoYmVj
YXVzZQorICAgICAgICB0aGV5IGZhaWwpLCBidXQgd2lsbCBiZSBlbmFibGVkIGJ5IHRoZSBmaXgg
dG8gdGhhdCBidWcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8g
YmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0Q29udHJvbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmZpbmlzaENvbnN0cnVjdGlv
bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4
dFJ1bjo6Y3JlYXRlRm9yVGVzdGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Q29tcGxleFRleHRSdW4pOgorCiAy
MDE3LTAxLTI1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIENy
YXNoIHVuZGVyIERPTVNlbGVjdGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjYzI3Nzll
ZTAwYzQ4M2FiZDNkNmZlNzJiNzZlMDI0NGUwNWE1YTUyLi5hMTVlNTkyZjc0MTgwODcxMGRmNjcx
NTU5MzRiZGU5YjE4OTY1MTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDUyLDcgKzE0NTIsNyBAQAogCQkzN0IzMjdEMzFE
MTcwOTZBMDA1NzM3RkEgLyogUElQU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzN0IzMjdEMjFEMTcwOTZBMDA1NzM3RkEgLyogUElQU1BJLmggKi87
IH07CiAJCTM3QkFBRTU4MTk4MEQxREQwMDVERkU3MSAvKiBQcm90ZWN0aW9uU3BhY2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QkFBRTU3MTk4MEQx
REQwMDVERkU3MSAvKiBQcm90ZWN0aW9uU3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzN0MyMzYxMDEwOTdFRTc3MDBFRjlGNzIgLyogQ29t
cGxleFRleHRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDM3QzIzNjBFMTA5N0VFNzcwMEVGOUY3MiAvKiBDb21wbGV4VGV4dENvbnRy
b2xsZXIuY3BwICovOyB9OwotCQkzN0MyMzYxMTEwOTdFRTc3MDBFRjlGNzIgLyogQ29tcGxleFRl
eHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzN0MyMzYwRjEwOTdFRTc3MDBFRjlGNzIgLyogQ29tcGxleFRleHRDb250cm9sbGVyLmgg
Ki87IH07CisJCTM3QzIzNjExMTA5N0VFNzcwMEVGOUY3MiAvKiBDb21wbGV4VGV4dENvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QzIz
NjBGMTA5N0VFNzcwMEVGOUY3MiAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzN0MyMzgyMjEwOThDODQy
MDBFRjlGNzIgLyogQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0MyMzgyMDEwOThDODQyMDBFRjlG
NzIgLyogQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0gKi87IH07CiAJCTM3RDQ1NkZE
MUE5QTUwRDgwMDMzMzBBMSAvKiBMb2NhbGl6YWJsZVN0cmluZ3MucG0gaW4gQ29weSBTY3JpcHRz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RDQ1NkZCMUE5QTUwQjYwMDMz
MzBBMSAvKiBMb2NhbGl6YWJsZVN0cmluZ3MucG0gKi87IH07CiAJCTM3RERDRDk0MTM4NDRGRDUw
MDA4Qjc5MyAvKiBNSU1FSGVhZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3RERDRDkyMTM4NDRGRDUwMDA4Qjc5MyAvKiBNSU1FSGVhZGVyLmNw
cCAqLzsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5oCmluZGV4IDMyZGVjMmYzYjJlNjYyNDVjNGFlYmQ3NDk3NmE4MzkzMTI3ODNiYzEuLjY2NzUy
ODBkNjNiZjY5YWI0OWY2ZmFjYzk0N2EzYzNmMGNhYWRhZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaApAQCAtMTE0LDcgKzExNCw3IEBAIHB1
YmxpYzoKIGNsYXNzIEZvbnRDYXNjYWRlIHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBG
b250Q2FzY2FkZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRDYXNjYWRlKGNvbnN0IEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24mLCBmbG9hdCBsZXR0ZXJTcGFjaW5nLCBmbG9hdCB3b3JkU3BhY2lu
Zyk7CisgICAgV0VCQ09SRV9FWFBPUlQgRm9udENhc2NhZGUoY29uc3QgRm9udENhc2NhZGVEZXNj
cmlwdGlvbiYsIGZsb2F0IGxldHRlclNwYWNpbmcgPSAwLCBmbG9hdCB3b3JkU3BhY2luZyA9IDAp
OwogICAgIC8vIFRoaXMgY29uc3RydWN0b3IgaXMgb25seSB1c2VkIGlmIHRoZSBwbGF0Zm9ybSB3
YW50cyB0byBzdGFydCB3aXRoIGEgbmF0aXZlIGZvbnQuCiAgICAgV0VCQ09SRV9FWFBPUlQgRm9u
dENhc2NhZGUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIEZvbnRTbW9vdGhpbmdNb2RlID0gQXV0
b1Ntb290aGluZyk7CiAKQEAgLTEyOSw3ICsxMjksNyBAQCBwdWJsaWM6CiAgICAgaW50IHBpeGVs
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkUGl4ZWxTaXpl
KCk7IH0KICAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9uKCku
Y29tcHV0ZWRTaXplKCk7IH0KIAotICAgIHZvaWQgdXBkYXRlKFJlZlB0cjxGb250U2VsZWN0b3I+
JiYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlKFJlZlB0cjxGb250U2Vs
ZWN0b3I+JiYpIGNvbnN0OwogCiAgICAgZW51bSBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24geyBE
b05vdFBhaW50SWZGb250Tm90UmVhZHksIFVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkgfTsKICAg
ICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBzdGQ6Om9wdGlv
bmFsPHVuc2lnbmVkPiB0byA9IHN0ZDo6bnVsbG9wdCwgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9u
ID0gRG9Ob3RQYWludElmRm9udE5vdFJlYWR5KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgKaW5kZXggYWQ2ZmVjNDA0YWVl
OTJiMGVhZmQ3ODg5NGUxODIwYTE1ZTg1NDgxZi4uYTdmZGE0MDEyZTlmOTEwYmFiZTA4YzkyYzEw
YTgyMDkxYjgzOTcxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udERlc2NyaXB0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udERlc2NyaXB0aW9uLmgKQEAgLTE5Nyw3ICsxOTcsNyBAQCBpbmxpbmUgYm9vbCBGb250
RGVzY3JpcHRpb246Om9wZXJhdG9yPT0oY29uc3QgRm9udERlc2NyaXB0aW9uJiBvdGhlcikgY29u
c3QKIC8vIEZJWE1FOiBNb3ZlIHRvIGEgZmlsZSBvZiBpdHMgb3duLgogY2xhc3MgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiA6IHB1YmxpYyBGb250RGVzY3JpcHRpb24gewogcHVibGljOgotICAgIEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uKCk7CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udENhc2NhZGVEZXNj
cmlwdGlvbiYpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4
dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Nv
bXBsZXhUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggY2ZiNTY3MWQ3MDM1OWE4OTA4MTIxOGMzOGM0
Yjg4YmI5ZGI5YjM4MS4uZWIxMzc3NGRkMjljMjliMzA1MjE2YTA4ZDA1YTU5N2I3NzJkZWVhMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKQEAgLTEyOCw2ICsxMjgsMjMgQEAgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIGNvbnN0IFRleHQKICAgICB9CiAKICAgICBjb2xsZWN0Q29tcGxleFRleHRSdW5zKCk7
CisKKyAgICBmaW5pc2hDb25zdHJ1Y3Rpb24oKTsKK30KKworQ29tcGxleFRleHRDb250cm9sbGVy
OjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgVmVjdG9yPFJlZjxDb21wbGV4VGV4dFJ1bj4+JiBydW5zKQorICAgIDogbV9m
b250KGZvbnQpCisgICAgLCBtX3J1bihydW4pCisgICAgLCBtX2VuZChydW4ubGVuZ3RoKCkpCit7
CisgICAgZm9yIChhdXRvJiBydW4gOiBydW5zKQorICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5h
cHBlbmQocnVuLnB0cigpKTsKKworICAgIGZpbmlzaENvbnN0cnVjdGlvbigpOworfQorCit2b2lk
IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6ZmluaXNoQ29uc3RydWN0aW9uKCkKK3sKICAgICBhZGp1
c3RHbHlwaHNBbmRBZHZhbmNlcygpOwogCiAgICAgaWYgKCFtX2lzTFRST25seSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29u
dHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhU
ZXh0Q29udHJvbGxlci5oCmluZGV4IGQ0ZTcwZjNjMjQ3NzFhNTlkMDg3OGIxN2FiM2UwZTc0YmEy
OTJlMjkuLjBiMTU0YzZkYTQwM2NlOGI0Njg5N2UzYTg0YTNkNWQ3YzBmY2YyNzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRy
b2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxl
eFRleHRDb250cm9sbGVyLmgKQEAgLTU4LDggKzU4LDExIEBAIGNsYXNzIENvbXBsZXhUZXh0Q29u
dHJvbGxlciB7CiBwdWJsaWM6CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRD
YXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGJvb2wgbWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rp
b24gPSBmYWxzZSwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29s
IGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsKIAorICAgIGNsYXNzIENvbXBsZXhUZXh0UnVuOwor
ICAgIFdFQkNPUkVfRVhQT1JUIENvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFRleHRSdW4mLCBWZWN0b3I8UmVmPENvbXBsZXhUZXh0UnVuPj4mKTsKKwogICAg
IC8vIEFkdmFuY2UgYW5kIGVtaXQgZ2x5cGhzIHVwIHRvIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVy
LgotICAgIHZvaWQgYWR2YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqID0gbnVsbHB0ciwg
R2x5cGhJdGVyYXRpb25TdHlsZSA9IEluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBIYXNoU2V0PGNvbnN0
IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IG51bGxwdHIpOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYWR2YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqID0gbnVsbHB0ciwgR2x5cGhJdGVy
YXRpb25TdHlsZSA9IEluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiog
ZmFsbGJhY2tGb250cyA9IG51bGxwdHIpOwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgY2hhcmFjdGVy
IG9mZnNldCBmb3IgYSBnaXZlbiB4IGNvb3JkaW5hdGUuCiAgICAgdW5zaWduZWQgb2Zmc2V0Rm9y
UG9zaXRpb24oZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocyk7CkBAIC03NSw4ICs3
OCw3IEBAIHB1YmxpYzoKICAgICBmbG9hdCBtYXhHbHlwaEJvdW5kaW5nQm94WSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWF4R2x5cGhCb3VuZGluZ0JveFk7IH0KIAogICAgIGZsb2F0IGxlYWRpbmdFeHBh
bnNpb24oKSBjb25zdCB7IHJldHVybiBtX2xlYWRpbmdFeHBhbnNpb247IH0KLSAgICAKLXByaXZh
dGU6CisKICAgICBjbGFzcyBDb21wbGV4VGV4dFJ1biA6IHB1YmxpYyBSZWZDb3VudGVkPENvbXBs
ZXhUZXh0UnVuPiB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgUmVmPENvbXBsZXhUZXh0
UnVuPiBjcmVhdGUoQ1RSdW5SZWYgY3RSdW4sIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0
aCwgQ0ZSYW5nZSBydW5SYW5nZSkKQEAgLTg5LDYgKzkxLDExIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihmb250LCBjaGFyYWN0ZXJz
LCBzdHJpbmdMb2NhdGlvbiwgc3RyaW5nTGVuZ3RoLCBsdHIpKTsKICAgICAgICAgfQogCisgICAg
ICAgIHN0YXRpYyBSZWY8Q29tcGxleFRleHRSdW4+IGNyZWF0ZUZvclRlc3RpbmcoVmVjdG9yPENH
U2l6ZT4gYWR2YW5jZXMsIFZlY3RvcjxDR1BvaW50PiBvcmlnaW5zLCBWZWN0b3I8Q0dHbHlwaD4g
Z2x5cGhzLCBWZWN0b3I8Q0ZJbmRleD4gc3RyaW5nSW5kaWNlcywgQ0dTaXplIGluaXRpYWxBZHZh
bmNlLCBjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQg
c3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UsIGJv
b2wgbHRyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21w
bGV4VGV4dFJ1bihhZHZhbmNlcywgb3JpZ2lucywgZ2x5cGhzLCBzdHJpbmdJbmRpY2VzLCBpbml0
aWFsQWR2YW5jZSwgZm9udCwgY2hhcmFjdGVycywgc3RyaW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0
aCwgcnVuUmFuZ2UsIGx0cikpOworICAgICAgICB9CisKICAgICAgICAgdW5zaWduZWQgZ2x5cGhD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhDb3VudDsgfQogICAgICAgICBjb25zdCBGb250
JiBmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250OyB9CiAgICAgICAgIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJzOyB9CkBAIC0xMjAsNiArMTI3
LDcgQEAgcHJpdmF0ZToKICAgICBwcml2YXRlOgogICAgICAgICBDb21wbGV4VGV4dFJ1bihDVFJ1
blJlZiwgY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJp
bmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSk7CiAgICAg
ICAgIENvbXBsZXhUZXh0UnVuKGNvbnN0IEZvbnQmLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRyKTsK
KyAgICAgICAgV0VCQ09SRV9FWFBPUlQgQ29tcGxleFRleHRSdW4oVmVjdG9yPENHU2l6ZT4gYWR2
YW5jZXMsIFZlY3RvcjxDR1BvaW50PiBvcmlnaW5zLCBWZWN0b3I8Q0dHbHlwaD4gZ2x5cGhzLCBW
ZWN0b3I8Q0ZJbmRleD4gc3RyaW5nSW5kaWNlcywgQ0dTaXplIGluaXRpYWxBZHZhbmNlLCBjb25z
dCBGb250JiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9u
LCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdlLCBib29sIGx0cik7CiAKICAg
ICAgICAgVmVjdG9yPENHU2l6ZSwgNjQ+IG1fYmFzZUFkdmFuY2VzVmVjdG9yOwogICAgICAgICBW
ZWN0b3I8Q0dQb2ludCwgNjQ+IG1fZ2x5cGhPcmlnaW5zOwpAQCAtMTM4LDggKzE0NiwxMCBAQCBw
cml2YXRlOgogICAgICAgICB1bnNpZ25lZCBtX2dseXBoQ291bnQ7CiAgICAgICAgIHVuc2lnbmVk
IG1fc3RyaW5nTG9jYXRpb247CiAgICAgICAgIGJvb2wgbV9pc0xUUjsKLSAgICAgICAgYm9vbCBt
X2lzTW9ub3RvbmljOworICAgICAgICBib29sIG1faXNNb25vdG9uaWMgeyB0cnVlIH07CiAgICAg
fTsKK3ByaXZhdGU6CisgICAgdm9pZCBmaW5pc2hDb25zdHJ1Y3Rpb24oKTsKICAgICAKICAgICBz
dGF0aWMgdW5zaWduZWQgc3RyaW5nQmVnaW4oY29uc3QgQ29tcGxleFRleHRSdW4mIHJ1bikgeyBy
ZXR1cm4gcnVuLnN0cmluZ0xvY2F0aW9uKCkgKyBydW4uaW5kZXhCZWdpbigpOyB9CiAgICAgc3Rh
dGljIHVuc2lnbmVkIHN0cmluZ0VuZChjb25zdCBDb21wbGV4VGV4dFJ1biYgcnVuKSB7IHJldHVy
biBydW4uc3RyaW5nTG9jYXRpb24oKSArIHJ1bi5pbmRleEVuZCgpOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVy
Q29yZVRleHQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxl
eFRleHRDb250cm9sbGVyQ29yZVRleHQubW0KaW5kZXggNTgyMTQyOWQ0ZmQwOWIwYTVmNGUwMDEx
YTc3MTExNTAwNTgwNDI0My4uY2M0MzYyMTMyZDY5ODQ0MDk5YjYwNTlmZDEzZmZiNTk1OTE0YWM2
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBs
ZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQpAQCAtMTExLDIx
ICsxMTEsMjAgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Q29tcGxl
eFRleHRSdW4oQ1RSdW5SZWYgY3RSdW4sIGNvbnN0IEZvbnQKICAgICAsIG1fZm9udChmb250KQog
ICAgICwgbV9jaGFyYWN0ZXJzKGNoYXJhY3RlcnMpCiAgICAgLCBtX3N0cmluZ0xlbmd0aChzdHJp
bmdMZW5ndGgpCisgICAgLCBtX2NvcmVUZXh0SW5kaWNlcyhDVFJ1bkdldFN0cmluZ0luZGljZXNQ
dHIoY3RSdW4pKQorICAgICwgbV9nbHlwaHMoQ1RSdW5HZXRHbHlwaHNQdHIoY3RSdW4pKQogICAg
ICwgbV9pbmRleEJlZ2luKHJ1blJhbmdlLmxvY2F0aW9uKQogICAgICwgbV9pbmRleEVuZChydW5S
YW5nZS5sb2NhdGlvbiArIHJ1blJhbmdlLmxlbmd0aCkKKyAgICAsIG1fZ2x5cGhDb3VudChDVFJ1
bkdldEdseXBoQ291bnQoY3RSdW4pKQogICAgICwgbV9zdHJpbmdMb2NhdGlvbihzdHJpbmdMb2Nh
dGlvbikKICAgICAsIG1faXNMVFIoIShDVFJ1bkdldFN0YXR1cyhjdFJ1bikgJiBrQ1RSdW5TdGF0
dXNSaWdodFRvTGVmdCkpCi0gICAgLCBtX2lzTW9ub3RvbmljKHRydWUpCiB7Ci0gICAgbV9nbHlw
aENvdW50ID0gQ1RSdW5HZXRHbHlwaENvdW50KGN0UnVuKTsKLSAgICBtX2NvcmVUZXh0SW5kaWNl
cyA9IENUUnVuR2V0U3RyaW5nSW5kaWNlc1B0cihjdFJ1bik7CiAgICAgaWYgKCFtX2NvcmVUZXh0
SW5kaWNlcykgewogICAgICAgICBtX2NvcmVUZXh0SW5kaWNlc1ZlY3Rvci5ncm93KG1fZ2x5cGhD
b3VudCk7CiAgICAgICAgIENUUnVuR2V0U3RyaW5nSW5kaWNlcyhjdFJ1biwgQ0ZSYW5nZU1ha2Uo
MCwgMCksIG1fY29yZVRleHRJbmRpY2VzVmVjdG9yLmRhdGEoKSk7CiAgICAgICAgIG1fY29yZVRl
eHRJbmRpY2VzID0gbV9jb3JlVGV4dEluZGljZXNWZWN0b3IuZGF0YSgpOwogICAgIH0KIAotICAg
IG1fZ2x5cGhzID0gQ1RSdW5HZXRHbHlwaHNQdHIoY3RSdW4pOwogICAgIGlmICghbV9nbHlwaHMp
IHsKICAgICAgICAgbV9nbHlwaHNWZWN0b3IuZ3JvdyhtX2dseXBoQ291bnQpOwogICAgICAgICBD
VFJ1bkdldEdseXBocyhjdFJ1biwgQ0ZSYW5nZU1ha2UoMCwgMCksIG1fZ2x5cGhzVmVjdG9yLmRh
dGEoKSk7CkBAIC0xNjEsNyArMTYwLDYgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4
VGV4dFJ1bjo6Q29tcGxleFRleHRSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUMKICAgICAs
IG1faW5kZXhFbmQoc3RyaW5nTGVuZ3RoKQogICAgICwgbV9zdHJpbmdMb2NhdGlvbihzdHJpbmdM
b2NhdGlvbikKICAgICAsIG1faXNMVFIobHRyKQotICAgICwgbV9pc01vbm90b25pYyh0cnVlKQog
ewogICAgIG1fY29yZVRleHRJbmRpY2VzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9z
dHJpbmdMZW5ndGgpOwogICAgIHVuc2lnbmVkIHIgPSAwOwpAQCAtMTg0LDYgKzE4MiwyNyBAQCBD
b21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDb21wbGV4VGV4dFJ1bihjb25z
dCBGb250JiBmb250LCBjb25zdCBVQwogICAgIG1fYmFzZUFkdmFuY2VzID0gbV9iYXNlQWR2YW5j
ZXNWZWN0b3IuZGF0YSgpOwogfQogCisKK0NvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRl
eHRSdW46OkNvbXBsZXhUZXh0UnVuKFZlY3RvcjxDR1NpemU+IGFkdmFuY2VzLCBWZWN0b3I8Q0dQ
b2ludD4gb3JpZ2lucywgVmVjdG9yPENHR2x5cGg+IGdseXBocywgVmVjdG9yPENGSW5kZXg+IHN0
cmluZ0luZGljZXMsIENHU2l6ZSBpbml0aWFsQWR2YW5jZSwgY29uc3QgRm9udCYgZm9udCwgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3Ry
aW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdlLCBib29sIGx0cikKKyAgICA6IG1fYmFzZUFkdmFu
Y2VzVmVjdG9yKGFkdmFuY2VzKQorICAgICwgbV9nbHlwaE9yaWdpbnMob3JpZ2lucykKKyAgICAs
IG1fZ2x5cGhzVmVjdG9yKGdseXBocykKKyAgICAsIG1fY29yZVRleHRJbmRpY2VzVmVjdG9yKHN0
cmluZ0luZGljZXMpCisgICAgLCBtX2luaXRpYWxBZHZhbmNlKGluaXRpYWxBZHZhbmNlKQorICAg
ICwgbV9mb250KGZvbnQpCisgICAgLCBtX2NoYXJhY3RlcnMoY2hhcmFjdGVycykKKyAgICAsIG1f
c3RyaW5nTGVuZ3RoKHN0cmluZ0xlbmd0aCkKKyAgICAsIG1fY29yZVRleHRJbmRpY2VzKG1fY29y
ZVRleHRJbmRpY2VzVmVjdG9yLmRhdGEoKSkKKyAgICAsIG1fZ2x5cGhzKG1fZ2x5cGhzVmVjdG9y
LmRhdGEoKSkKKyAgICAsIG1fYmFzZUFkdmFuY2VzKG1fYmFzZUFkdmFuY2VzVmVjdG9yLmRhdGEo
KSkKKyAgICAsIG1faW5kZXhCZWdpbihydW5SYW5nZS5sb2NhdGlvbikKKyAgICAsIG1faW5kZXhF
bmQocnVuUmFuZ2UubG9jYXRpb24gKyBydW5SYW5nZS5sZW5ndGgpCisgICAgLCBtX2dseXBoQ291
bnQoZ2x5cGhzLnNpemUoKSkKKyAgICAsIG1fc3RyaW5nTG9jYXRpb24oc3RyaW5nTG9jYXRpb24p
CisgICAgLCBtX2lzTFRSKGx0cikKK3sKK30KKwogc3RydWN0IFByb3ZpZGVySW5mbyB7CiAgICAg
Y29uc3QgVUNoYXIqIGNwOwogICAgIHVuc2lnbmVkIGxlbmd0aDsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2N2Q1OTI4ZWI5YTViNjhkNzBlYTIw
MGYwMDQ1OGYyZDdmOGEzNDYwLi5iZTVkNTlmM2QxMGVmODVkYjUzZjI4OGY3M2Y1Y2I5MGE0ZmVl
MzY5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTctMDEtMjcgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxk
QGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIFByZXBhcmUgQ29tcGxleFRleHRDb250cm9s
bGVyIGZvciB1bml0IHRlc3RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NzQ5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIENyZWF0ZSBmb3VyIHVuaXQgdGVzdHMuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcDog
QWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpDb21wbGV4VGV4dENvbnRyb2xsZXJUZXN0
OjpTZXRVcCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorCiAyMDE3LTAxLTI1
ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHIyMTExOTMuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGY4Zjlj
Njk4Y2JjYjcxYzY1NDVlOGI1MWM0YzQzY2EwZjE0OWU5OTYuLjQ4MGZiZWIyYzE1ZDE3Y2JjYTE2
YTY2ODQ5YjgzMzg3ODBjYjgwY2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NSw2ICs0
NSw3IEBACiAJCTFDMkI4MTgzMUM4OTFGMDkwMEE1NTI5RiAvKiBDYW5jZWxGb250U3VicmVzb3Vy
Y2VQbHVnSW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQzJCODE4MTFDODkxRUZBMDBBNTUyOUYgLyogQ2FuY2VsRm9udFN1YnJlc291cmNlUGx1Z0lu
Lm1tICovOyB9OwogCQkxQzJCODE4NjFDODkyNTlEMDBBNTUyOUYgLyogd2ViZm9udC5odG1sIGlu
IENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMkI4
MTg0MUM4OTI0QTIwMEE1NTI5RiAvKiB3ZWJmb250Lmh0bWwgKi87IH07CiAJCTFDMkI4MTg3MUM4
OTI1QTAwMEE1NTI5RiAvKiBBaGVtLnR0ZiBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzJCODE4NTFDODkyNTIzMDBBNTUyOUYgLyogQWhlbS50
dGYgKi87IH07CisJCTFDOUVCODQxMUUzODBEQTEwMDVDNjQ0MiAvKiBDb21wbGV4VGV4dENvbnRy
b2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUM5RUI4NDAxRTM4MERBMTAwNUM2NDQyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgKi87
IH07CiAJCTFGODM1NzFCMUQzRkZCMjMwMEUzOTY3QiAvKiBXS0JhY2tGb3J3YXJkTGlzdC5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGODM1NzFBMUQz
RkZCMEUwMEUzOTY3QiAvKiBXS0JhY2tGb3J3YXJkTGlzdC5tbSAqLzsgfTsKIAkJMjZERjVBNjMx
NUEyQTI3RTAwMzY4OUMyIC8qIENhbmNlbExvYWRGcm9tUmVzb3VyY2VMb2FkRGVsZWdhdGUuaHRt
bCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
NkRGNUE2MTE1QTJBMjJCMDAzNjg5QzIgLyogQ2FuY2VsTG9hZEZyb21SZXNvdXJjZUxvYWREZWxl
Z2F0ZS5odG1sICovOyB9OwogCQkyNkY1MkVBRDE4Mjg4MjdCMDAyM0Q0MTIgLyogZ2VvbG9jYXRp
b25HZXRDdXJyZW50UG9zaXRpb24uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkY1MkVBQzE4Mjg4MjBFMDAyM0Q0MTIgLyogZ2VvbG9j
YXRpb25HZXRDdXJyZW50UG9zaXRpb24uaHRtbCAqLzsgfTsKQEAgLTgxNSw2ICs4MTYsNyBAQAog
CQkxQzJCODE4MTFDODkxRUZBMDBBNTUyOUYgLyogQ2FuY2VsRm9udFN1YnJlc291cmNlUGx1Z0lu
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ2FuY2VsRm9udFN1
YnJlc291cmNlUGx1Z0luLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzJCODE4
NDFDODkyNEEyMDBBNTUyOUYgLyogd2ViZm9udC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBw
YXRoID0gd2ViZm9udC5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzJCODE4
NTFDODkyNTIzMDBBNTUyOUYgLyogQWhlbS50dGYgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBwYXRoID0gQWhlbS50dGY7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFDOUVCODQwMUUzODBEQTEwMDVDNjQ0MiAvKiBDb21wbGV4VGV4
dENvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29t
cGxleFRleHRDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNC
OUJDMzcxQTY3NDgyMzAwRkU1Njc4IC8qIFdlYWtQdHIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2Vha1B0ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFDRjBEMzc4MUJCRjJGM0QwMEI0RUY1NCAvKiBXS1JldGFpblB0ci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1JldGFpblB0ci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFGODM1NzFBMUQzRkZCMEUwMEUzOTY3QiAvKiBXS0JhY2tGb3J3
YXJkTGlzdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLQmFj
a0ZvcndhcmRMaXN0Lm1tOyBwYXRoID0gVGVzdHMvV2ViS2l0Mi9XS0JhY2tGb3J3YXJkTGlzdC5t
bTsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwpAQCAtMTU5Miw2ICsxNTk0LDcgQEAKIAkJ
CQk0NDBBMUQzODE0QTAxMDNBMDA4QTY2RjIgLyogVVJMLmNwcCAqLywKIAkJCQk1QzZFNjU0MTFE
NUNFRjg1MDBGNzg2MkUgLyogVVJMUGFyc2VyLmNwcCAqLywKIAkJCQk5QzY0REMzMTFENzYxOThB
MDA0QjU5OEUgLyogWW91VHViZVBsdWdpblJlcGxhY2VtZW50LmNwcCAqLywKKwkJCQkxQzlFQjg0
MDFFMzgwREExMDA1QzY0NDIgLyogQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCAqLywKIAkJCSk7
CiAJCQlwYXRoID0gV2ViQ29yZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNjg2
LDYgKzI2ODksNyBAQAogCQkJCTJERkY3QjZEMURBNDg3QUYwMDgxNDYxNCAvKiBTbmFwc2hvdFN0
b3JlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM2RTY1NDQxRDVDRUZENDAwRjc4NjJFIC8qIFVS
TFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0YyNzFBNDExQUY2MDA0NDdDNEMg
LyogVXNlckNvbnRlbnRDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMUM5RUI4NDEx
RTM4MERBMTAwNUM2NDQyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3Q0NFN0YyRDFBNDExQjEwMDA0NDdDNEMgLyogVXNlckNvbnRlbnRUZXN0Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0M4ODJFMEExQzgwQzc2NDAwNkJGNzMxIC8qIFVzZXJDb250ZW50
V29ybGQubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NCOTkyMTFEM0I0MUY2MDAzOTIyRjYgLyog
VXNlckluaXRpYXRlZEFjdGlvbkluTmF2aWdhdGlvbkFjdGlvbi5tbSBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0
Q29udHJvbGxlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMTExYzY0YmNjNzE3YjkxZGI1YmQ3YWU3
ZTZiOGM4ODY4NjM1ODJiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwyMzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db21wbGV4VGV4
dENvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZvbnRDYXNjYWRlLmg+CisjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBD
b21wbGV4VGV4dENvbnRyb2xsZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGlj
OgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICBXVEY6OmluaXRpYWxp
emVNYWluVGhyZWFkKCk7CisgICAgICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAg
ICAgICBSdW5Mb29wOjppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKKyAgICB9Cit9OworCitURVNU
X0YoQ29tcGxleFRleHRDb250cm9sbGVyVGVzdCwgRElTQUJMRURfSW5pdGlhbEFkdmFuY2VXaXRo
TGVmdFJ1bkluUlRMKQoreworICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZGVzY3JpcHRpb247
CisgICAgZGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KCJUaW1lcyIpOworICAgIGRlc2NyaXB0aW9u
LnNldENvbXB1dGVkU2l6ZSg4MCk7CisgICAgRm9udENhc2NhZGUgZm9udChkZXNjcmlwdGlvbik7
CisgICAgZm9udC51cGRhdGUobnVsbHB0cik7CisgICAgYXV0byBzcGFjZVdpZHRoID0gZm9udC5w
cmltYXJ5Rm9udCgpLnNwYWNlV2lkdGgoKTsKKworI2lmIFVTRV9MQVlPVVRfU1BFQ0lGSUNfQURW
QU5DRVMKKyAgICBWZWN0b3I8Q0dTaXplPiBhZHZhbmNlcyA9IHsgQ0dTaXplWmVybywgQ0dTaXpl
TWFrZSgyMS42NDA2MjUsIDAuMCksIENHU2l6ZU1ha2UoNDIuMzA0Njg3NSwgMC4wKSwgQ0dTaXpl
TWFrZSg1NS44OTg0Mzc1LCAwLjApLCBDR1NpemVNYWtlKDIyLjM0Mzc1LCAwLjApIH07CisgICAg
VmVjdG9yPENHUG9pbnQ+IG9yaWdpbnMgPSB7IENHUG9pbnRNYWtlKC0xNS4xNTYyNSwgMTguMDQ2
ODc1KSwgQ0dQb2ludFplcm8sIENHUG9pbnRaZXJvLCBDR1BvaW50WmVybywgQ0dQb2ludFplcm8g
fTsKKyNlbHNlCisgICAgVmVjdG9yPENHU2l6ZT4gYWR2YW5jZXMgPSB7IENHU2l6ZU1ha2UoMTUu
MTU2MjUsIC0xOC4wNDY4NzUpLCBDR1NpemVNYWtlKDIxLjY0MDYyNSwgMC4wKSwgQ0dTaXplTWFr
ZSg0Mi4zMDQ2ODc1LCAwLjApLCBDR1NpemVNYWtlKDU1Ljg5ODQzNzUsIDAuMCksIENHU2l6ZU1h
a2UoMjIuMzQzNzUsIDAuMCkgfTsKKyAgICBWZWN0b3I8Q0dQb2ludD4gb3JpZ2lucyA9IHsgfTsK
KyNlbmRpZgorCisgICAgQ0dTaXplIGluaXRpYWxBZHZhbmNlID0gQ0dTaXplTWFrZSgtMTUuMTU2
MjUsIDE4LjA0Njg3NSk7CisKKyAgICBVQ2hhciBjaGFyYWN0ZXJzW10gPSB7IDB4NjQ0LCAweDYz
NywgMHg2NDEsIDB4NjI3LCAweDY0YiwgMHgyMCB9OworICAgIHNpemVfdCBjaGFyYWN0ZXJzTGVu
Z3RoID0gV1RGX0FSUkFZX0xFTkdUSChjaGFyYWN0ZXJzKTsKKyAgICBUZXh0UnVuIHRleHRSdW4o
U3RyaW5nVmlldyhjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzTGVuZ3RoKSk7CisgICAgUmVmPENvbXBs
ZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW4+IHJ1bjEgPSBDb21wbGV4VGV4dENvbnRy
b2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpjcmVhdGVGb3JUZXN0aW5nKHsgQ0dTaXplTWFrZSgyMS44
NzUsIDApIH0sIHsgQ0dQb2ludFplcm8gfSwgeyA1IH0sIHsgNSB9LCBDR1NpemVaZXJvLCBmb250
LnByaW1hcnlGb250KCksIGNoYXJhY3RlcnMsIDAsIGNoYXJhY3RlcnNMZW5ndGgsIENGUmFuZ2VN
YWtlKDUsIDEpLCBmYWxzZSk7CisgICAgUmVmPENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxl
eFRleHRSdW4+IHJ1bjIgPSBDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpj
cmVhdGVGb3JUZXN0aW5nKGFkdmFuY2VzLCBvcmlnaW5zLCB7IDE5MywgMzc3LCA0NDcsIDQzMSwg
NDU4IH0sIHsgNCwgMywgMiwgMSwgMCB9LCBpbml0aWFsQWR2YW5jZSwgZm9udC5wcmltYXJ5Rm9u
dCgpLCBjaGFyYWN0ZXJzLCAwLCBjaGFyYWN0ZXJzTGVuZ3RoLCBDRlJhbmdlTWFrZSgwLCA1KSwg
ZmFsc2UpOworICAgIFZlY3RvcjxSZWY8Q29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4
dFJ1bj4+IHJ1bnM7CisgICAgcnVucy5hcHBlbmQoV1RGTW92ZShydW4xKSk7CisgICAgcnVucy5h
cHBlbmQoV1RGTW92ZShydW4yKSk7CisgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xs
ZXIoZm9udCwgdGV4dFJ1biwgcnVucyk7CisKKyAgICBDR0Zsb2F0IHRvdGFsV2lkdGggPSAwOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgYWR2YW5jZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
IHRvdGFsV2lkdGggKz0gYWR2YW5jZXNbaV0ud2lkdGg7CisgICAgRVhQRUNUX05FQVIoY29udHJv
bGxlci50b3RhbFdpZHRoKCksIHNwYWNlV2lkdGggKyB0b3RhbFdpZHRoLCAwLjAwMDEpOworICAg
IEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOworICAgIGNvbnRyb2xsZXIuYWR2YW5jZSgwLCAmZ2x5
cGhCdWZmZXIpOworICAgIEVYUEVDVF9ORUFSKGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpLCAw
LCAwLjAwMDEpOworICAgIGNvbnRyb2xsZXIuYWR2YW5jZSgxLCAmZ2x5cGhCdWZmZXIpOworICAg
IEVYUEVDVF9ORUFSKGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpLCBhZHZhbmNlc1s0XS53aWR0
aCwgMC4wMDAxKTsKKyAgICBjb250cm9sbGVyLmFkdmFuY2UoNiwgJmdseXBoQnVmZmVyKTsKKyAg
ICBFWFBFQ1RfTkVBUihjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSwgc3BhY2VXaWR0aCArIHRv
dGFsV2lkdGgsIDAuMDAwMSk7CisgICAgRVhQRUNUX05FQVIoZ2x5cGhCdWZmZXIuaW5pdGlhbEFk
dmFuY2UoKS53aWR0aCgpLCAwLCAwLjAwMDEpOworICAgIEVYUEVDVF9ORUFSKGdseXBoQnVmZmVy
LmluaXRpYWxBZHZhbmNlKCkuaGVpZ2h0KCksIDAsIDAuMDAwMSk7CisgICAgRVhQRUNUX0VRKGds
eXBoQnVmZmVyLnNpemUoKSwgNlUpOworICAgIEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmFkdmFu
Y2VBdCgwKS53aWR0aCgpLCBhZHZhbmNlc1s0XS53aWR0aCwgMC4wMDAxKTsKKyAgICBFWFBFQ1Rf
TkVBUihnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoMSkud2lkdGgoKSwgYWR2YW5jZXNbM10ud2lkdGgs
IDAuMDAwMSk7CisgICAgRVhQRUNUX05FQVIoZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KDIpLndpZHRo
KCksIGFkdmFuY2VzWzJdLndpZHRoLCAwLjAwMDEpOworICAgIEVYUEVDVF9ORUFSKGdseXBoQnVm
ZmVyLmFkdmFuY2VBdCgzKS53aWR0aCgpLCBhZHZhbmNlc1sxXS53aWR0aCwgMC4wMDAxKTsKKyAg
ICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoNCkud2lkdGgoKSwgLWluaXRpYWxB
ZHZhbmNlLndpZHRoLCAwLjAwMDEpOworICAgIEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmFkdmFu
Y2VBdCg1KS53aWR0aCgpLCBzcGFjZVdpZHRoICsgaW5pdGlhbEFkdmFuY2Uud2lkdGgsIDAuMDAw
MSk7Cit9CisKK1RFU1RfRihDb21wbGV4VGV4dENvbnRyb2xsZXJUZXN0LCBESVNBQkxFRF9Jbml0
aWFsQWR2YW5jZUluUlRMKQoreworICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZGVzY3JpcHRp
b247CisgICAgZGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KCJUaW1lcyIpOworICAgIGRlc2NyaXB0
aW9uLnNldENvbXB1dGVkU2l6ZSg4MCk7CisgICAgRm9udENhc2NhZGUgZm9udChkZXNjcmlwdGlv
bik7CisgICAgZm9udC51cGRhdGUobnVsbHB0cik7CisKKyNpZiBVU0VfTEFZT1VUX1NQRUNJRklD
X0FEVkFOQ0VTCisgICAgVmVjdG9yPENHU2l6ZT4gYWR2YW5jZXMgPSB7IENHU2l6ZVplcm8sIENH
U2l6ZU1ha2UoMjEuNjQwNjI1LCAwLjApLCBDR1NpemVNYWtlKDQyLjMwNDY4NzUsIDAuMCksIENH
U2l6ZU1ha2UoNTUuODk4NDM3NSwgMC4wKSwgQ0dTaXplTWFrZSgyMi4zNDM3NSwgMC4wKSB9Owor
ICAgIFZlY3RvcjxDR1BvaW50PiBvcmlnaW5zID0geyBDR1BvaW50TWFrZSgtMTUuMTU2MjUsIDE4
LjA0Njg3NSksIENHUG9pbnRaZXJvLCBDR1BvaW50WmVybywgQ0dQb2ludFplcm8sIENHUG9pbnRa
ZXJvIH07CisjZWxzZQorICAgIFZlY3RvcjxDR1NpemU+IGFkdmFuY2VzID0geyBDR1NpemVNYWtl
KDE1LjE1NjI1LCAtMTguMDQ2ODc1KSwgQ0dTaXplTWFrZSgyMS42NDA2MjUsIDAuMCksIENHU2l6
ZU1ha2UoNDIuMzA0Njg3NSwgMC4wKSwgQ0dTaXplTWFrZSg1NS44OTg0Mzc1LCAwLjApLCBDR1Np
emVNYWtlKDIyLjM0Mzc1LCAwLjApIH07CisgICAgVmVjdG9yPENHUG9pbnQ+IG9yaWdpbnMgPSB7
IH07CisjZW5kaWYKKworICAgIENHU2l6ZSBpbml0aWFsQWR2YW5jZSA9IENHU2l6ZU1ha2UoLTE1
LjE1NjI1LCAxOC4wNDY4NzUpOworCisgICAgVUNoYXIgY2hhcmFjdGVyc1tdID0geyAweDY0NCwg
MHg2MzcsIDB4NjQxLCAweDYyNywgMHg2NGIgfTsKKyAgICBzaXplX3QgY2hhcmFjdGVyc0xlbmd0
aCA9IFdURl9BUlJBWV9MRU5HVEgoY2hhcmFjdGVycyk7CisgICAgVGV4dFJ1biB0ZXh0UnVuKFN0
cmluZ1ZpZXcoY2hhcmFjdGVycywgY2hhcmFjdGVyc0xlbmd0aCkpOworICAgIFJlZjxDb21wbGV4
VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuPiBydW4gPSBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OkNvbXBsZXhUZXh0UnVuOjpjcmVhdGVGb3JUZXN0aW5nKGFkdmFuY2VzLCBvcmlnaW5zLCB7
IDE5MywgMzc3LCA0NDcsIDQzMSwgNDU4IH0sIHsgNCwgMywgMiwgMSwgMCB9LCBpbml0aWFsQWR2
YW5jZSwgZm9udC5wcmltYXJ5Rm9udCgpLCBjaGFyYWN0ZXJzLCAwLCBjaGFyYWN0ZXJzTGVuZ3Ro
LCBDRlJhbmdlTWFrZSgwLCA1KSwgZmFsc2UpOworICAgIFZlY3RvcjxSZWY8Q29tcGxleFRleHRD
b250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bj4+IHJ1bnM7CisgICAgcnVucy5hcHBlbmQoV1RGTW92
ZShydW4pKTsKKyAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcihmb250LCB0ZXh0
UnVuLCBydW5zKTsKKworICAgIENHRmxvYXQgdG90YWxXaWR0aCA9IDA7CisgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPCBhZHZhbmNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgdG90YWxXaWR0aCAr
PSBhZHZhbmNlc1tpXS53aWR0aDsKKyAgICBFWFBFQ1RfTkVBUihjb250cm9sbGVyLnRvdGFsV2lk
dGgoKSwgdG90YWxXaWR0aCwgMC4wMDAxKTsKKyAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsK
KyAgICBjb250cm9sbGVyLmFkdmFuY2UoMCwgJmdseXBoQnVmZmVyKTsKKyAgICBFWFBFQ1RfTkVB
Uihjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSwgMCwgMC4wMDAxKTsKKyAgICBjb250cm9sbGVy
LmFkdmFuY2UoMSwgJmdseXBoQnVmZmVyKTsKKyAgICBFWFBFQ1RfTkVBUihjb250cm9sbGVyLnJ1
bldpZHRoU29GYXIoKSwgYWR2YW5jZXNbNF0ud2lkdGgsIDAuMDAwMSk7CisgICAgY29udHJvbGxl
ci5hZHZhbmNlKDUsICZnbHlwaEJ1ZmZlcik7CisgICAgRVhQRUNUX05FQVIoY29udHJvbGxlci5y
dW5XaWR0aFNvRmFyKCksIHRvdGFsV2lkdGgsIDAuMDAwMSk7CisgICAgRVhQRUNUX05FQVIoZ2x5
cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS53aWR0aCgpLCBpbml0aWFsQWR2YW5jZS53aWR0aCwg
MC4wMDAxKTsKKyAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLmhl
aWdodCgpLCBpbml0aWFsQWR2YW5jZS5oZWlnaHQsIDAuMDAwMSk7CisgICAgRVhQRUNUX0VRKGds
eXBoQnVmZmVyLnNpemUoKSwgNVUpOworICAgIEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmFkdmFu
Y2VBdCgwKS53aWR0aCgpLCBhZHZhbmNlc1s0XS53aWR0aCwgMC4wMDAxKTsKKyAgICBFWFBFQ1Rf
TkVBUihnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoMSkud2lkdGgoKSwgYWR2YW5jZXNbM10ud2lkdGgs
IDAuMDAwMSk7CisgICAgRVhQRUNUX05FQVIoZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KDIpLndpZHRo
KCksIGFkdmFuY2VzWzJdLndpZHRoLCAwLjAwMDEpOworICAgIEVYUEVDVF9ORUFSKGdseXBoQnVm
ZmVyLmFkdmFuY2VBdCgzKS53aWR0aCgpLCBhZHZhbmNlc1sxXS53aWR0aCwgMC4wMDAxKTsKKyAg
ICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoNCkud2lkdGgoKSwgLWluaXRpYWxB
ZHZhbmNlLndpZHRoLCAwLjAwMDEpOworfQorCitURVNUX0YoQ29tcGxleFRleHRDb250cm9sbGVy
VGVzdCwgRElTQUJMRURfSW5pdGlhbEFkdmFuY2VXaXRoTGVmdFJ1bkluTFRSKQoreworICAgIEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24gZGVzY3JpcHRpb247CisgICAgZGVzY3JpcHRpb24uc2V0T25l
RmFtaWx5KCJMdWNpZGFHcmFuZGUiKTsKKyAgICBkZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUo
ODApOworICAgIEZvbnRDYXNjYWRlIGZvbnQoZGVzY3JpcHRpb24pOworICAgIGZvbnQudXBkYXRl
KG51bGxwdHIpOworICAgIGF1dG8gc3BhY2VXaWR0aCA9IGZvbnQucHJpbWFyeUZvbnQoKS5zcGFj
ZVdpZHRoKCk7CisKKyNpZiBVU0VfTEFZT1VUX1NQRUNJRklDX0FEVkFOQ0VTCisgICAgVmVjdG9y
PENHU2l6ZT4gYWR2YW5jZXMgPSB7IENHU2l6ZU1ha2UoNzYuMzQ3NjU2LCAwLjAwMDAwMCksIENH
U2l6ZU1ha2UoMC4wMDAwMDAsIDAuMDAwMDAwKSB9OworICAgIFZlY3RvcjxDR1BvaW50PiBvcmln
aW5zID0geyBDR1BvaW50WmVybywgQ0dQb2ludE1ha2UoLTIzLjI4MTI1MCwgLTguMzk4NDM4KSB9
OworI2Vsc2UKKyAgICBWZWN0b3I8Q0dTaXplPiBhZHZhbmNlcyA9IHsgQ0dTaXplTWFrZSg1My4w
NjY0MDYsIC04LjM5ODQzOCksIENHU2l6ZU1ha2UoMjMuMjgxMjUwLCA4LjM5ODQzOCkgfTsKKyAg
ICBWZWN0b3I8Q0dQb2ludD4gb3JpZ2lucyA9IHsgfTsKKyNlbmRpZgorCisgICAgQ0dTaXplIGlu
aXRpYWxBZHZhbmNlID0gQ0dTaXplTWFrZSgyOC4xNDQ1MzEsIDApOworCisgICAgVUNoYXIgY2hh
cmFjdGVyc1tdID0geyAweDIwLCAweDYxLCAweDIwZTMgfTsKKyAgICBzaXplX3QgY2hhcmFjdGVy
c0xlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY2hhcmFjdGVycyk7CisgICAgVGV4dFJ1biB0ZXh0
UnVuKFN0cmluZ1ZpZXcoY2hhcmFjdGVycywgY2hhcmFjdGVyc0xlbmd0aCkpOworICAgIFJlZjxD
b21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuPiBydW4xID0gQ29tcGxleFRleHRD
b250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlRm9yVGVzdGluZyh7IENHU2l6ZU1ha2Uo
c3BhY2VXaWR0aCwgMCkgfSwgeyBDR1BvaW50WmVybyB9LCB7IDUgfSwgeyAwIH0sIENHU2l6ZVpl
cm8sIGZvbnQucHJpbWFyeUZvbnQoKSwgY2hhcmFjdGVycywgMCwgY2hhcmFjdGVyc0xlbmd0aCwg
Q0ZSYW5nZU1ha2UoMCwgMSksIHRydWUpOworICAgIFJlZjxDb21wbGV4VGV4dENvbnRyb2xsZXI6
OkNvbXBsZXhUZXh0UnVuPiBydW4yID0gQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4
dFJ1bjo6Y3JlYXRlRm9yVGVzdGluZyhhZHZhbmNlcywgb3JpZ2lucywgeyA2OCwgMTQ3MSB9LCB7
IDEsIDIgfSwgaW5pdGlhbEFkdmFuY2UsIGZvbnQucHJpbWFyeUZvbnQoKSwgY2hhcmFjdGVycywg
MCwgY2hhcmFjdGVyc0xlbmd0aCwgQ0ZSYW5nZU1ha2UoMSwgMiksIHRydWUpOworICAgIFZlY3Rv
cjxSZWY8Q29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bj4+IHJ1bnM7CisgICAg
cnVucy5hcHBlbmQoV1RGTW92ZShydW4xKSk7CisgICAgcnVucy5hcHBlbmQoV1RGTW92ZShydW4y
KSk7CisgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIoZm9udCwgdGV4dFJ1biwg
cnVucyk7CisKKyAgICBFWFBFQ1RfTkVBUihjb250cm9sbGVyLnRvdGFsV2lkdGgoKSwgc3BhY2VX
aWR0aCArIDc2LjM0NzY1NiArIGluaXRpYWxBZHZhbmNlLndpZHRoLCAwLjAwMDEpOworICAgIEds
eXBoQnVmZmVyIGdseXBoQnVmZmVyOworICAgIGNvbnRyb2xsZXIuYWR2YW5jZSgwLCAmZ2x5cGhC
dWZmZXIpOworICAgIEVYUEVDVF9ORUFSKGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpLCAwLCAw
LjAwMDEpOworICAgIGNvbnRyb2xsZXIuYWR2YW5jZSgxLCAmZ2x5cGhCdWZmZXIpOworICAgIEVY
UEVDVF9ORUFSKGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpLCBzcGFjZVdpZHRoLCAwLjAwMDEp
OworICAgIGNvbnRyb2xsZXIuYWR2YW5jZSgyLCAmZ2x5cGhCdWZmZXIpOworICAgIEVYUEVDVF9O
RUFSKGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpLCBzcGFjZVdpZHRoICsgYWR2YW5jZXNbMF0u
d2lkdGggKyBpbml0aWFsQWR2YW5jZS53aWR0aCwgMC4wMDAxKTsKKyAgICBjb250cm9sbGVyLmFk
dmFuY2UoMywgJmdseXBoQnVmZmVyKTsKKyAgICBFWFBFQ1RfTkVBUihjb250cm9sbGVyLnJ1bldp
ZHRoU29GYXIoKSwgc3BhY2VXaWR0aCArIDc2LjM0NzY1NiArIGluaXRpYWxBZHZhbmNlLndpZHRo
LCAwLjAwMDEpOworICAgIEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmluaXRpYWxBZHZhbmNlKCku
d2lkdGgoKSwgMCwgMC4wMDAxKTsKKyAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5pbml0aWFs
QWR2YW5jZSgpLmhlaWdodCgpLCAwLCAwLjAwMDEpOworICAgIEVYUEVDVF9FUShnbHlwaEJ1ZmZl
ci5zaXplKCksIDNVKTsKKyAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoMCku
d2lkdGgoKSwgc3BhY2VXaWR0aCArIGluaXRpYWxBZHZhbmNlLndpZHRoLCAwLjAwMDEpOworICAg
IEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmFkdmFuY2VBdCgxKS53aWR0aCgpLCA1My4wNjY0MDYs
IDAuMDAwMSk7CisgICAgRVhQRUNUX05FQVIoZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KDIpLndpZHRo
KCksIDIzLjI4MTI1MCwgMC4wMDAxKTsKK30KKworVEVTVF9GKENvbXBsZXhUZXh0Q29udHJvbGxl
clRlc3QsIERJU0FCTEVEX0luaXRpYWxBZHZhbmNlSW5MVFIpCit7CisgICAgRm9udENhc2NhZGVE
ZXNjcmlwdGlvbiBkZXNjcmlwdGlvbjsKKyAgICBkZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoIkx1
Y2lkYUdyYW5kZSIpOworICAgIGRlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZSg4MCk7CisgICAg
Rm9udENhc2NhZGUgZm9udChkZXNjcmlwdGlvbik7CisgICAgZm9udC51cGRhdGUobnVsbHB0cik7
CisKKyNpZiBVU0VfTEFZT1VUX1NQRUNJRklDX0FEVkFOQ0VTCisgICAgVmVjdG9yPENHU2l6ZT4g
YWR2YW5jZXMgPSB7IENHU2l6ZU1ha2UoNzYuMzQ3NjU2LCAwLjAwMDAwMCksIENHU2l6ZU1ha2Uo
MC4wMDAwMDAsIDAuMDAwMDAwKSB9OworICAgIFZlY3RvcjxDR1BvaW50PiBvcmlnaW5zID0geyBD
R1BvaW50WmVybywgQ0dQb2ludE1ha2UoLTIzLjI4MTI1MCwgLTguMzk4NDM4KSB9OworI2Vsc2UK
KyAgICBWZWN0b3I8Q0dTaXplPiBhZHZhbmNlcyA9IHsgQ0dTaXplTWFrZSg1My4wNjY0MDYsIC04
LjM5ODQzOCksIENHU2l6ZU1ha2UoMjMuMjgxMjUwLCA4LjM5ODQzOCkgfTsKKyAgICBWZWN0b3I8
Q0dQb2ludD4gb3JpZ2lucyA9IHsgfTsKKyNlbmRpZgorCisgICAgQ0dTaXplIGluaXRpYWxBZHZh
bmNlID0gQ0dTaXplTWFrZSgyOC4xNDQ1MzEsIDApOworCisgICAgVUNoYXIgY2hhcmFjdGVyc1td
ID0geyAweDYxLCAweDIwZTMgfTsKKyAgICBzaXplX3QgY2hhcmFjdGVyc0xlbmd0aCA9IFdURl9B
UlJBWV9MRU5HVEgoY2hhcmFjdGVycyk7CisgICAgVGV4dFJ1biB0ZXh0UnVuKFN0cmluZ1ZpZXco
Y2hhcmFjdGVycywgY2hhcmFjdGVyc0xlbmd0aCkpOworICAgIFJlZjxDb21wbGV4VGV4dENvbnRy
b2xsZXI6OkNvbXBsZXhUZXh0UnVuPiBydW4gPSBDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBs
ZXhUZXh0UnVuOjpjcmVhdGVGb3JUZXN0aW5nKGFkdmFuY2VzLCBvcmlnaW5zLCB7IDY4LCAxNDcx
IH0sIHsgMCwgMSB9LCBpbml0aWFsQWR2YW5jZSwgZm9udC5wcmltYXJ5Rm9udCgpLCBjaGFyYWN0
ZXJzLCAwLCBjaGFyYWN0ZXJzTGVuZ3RoLCBDRlJhbmdlTWFrZSgwLCAyKSwgdHJ1ZSk7CisgICAg
VmVjdG9yPFJlZjxDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuPj4gcnVuczsK
KyAgICBydW5zLmFwcGVuZChXVEZNb3ZlKHJ1bikpOworICAgIENvbXBsZXhUZXh0Q29udHJvbGxl
ciBjb250cm9sbGVyKGZvbnQsIHRleHRSdW4sIHJ1bnMpOworCisgICAgRVhQRUNUX05FQVIoY29u
dHJvbGxlci50b3RhbFdpZHRoKCksIDc2LjM0NzY1NiArIGluaXRpYWxBZHZhbmNlLndpZHRoLCAw
LjAwMDEpOworICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOworICAgIGNvbnRyb2xsZXIuYWR2
YW5jZSgwLCAmZ2x5cGhCdWZmZXIpOworICAgIEVYUEVDVF9ORUFSKGNvbnRyb2xsZXIucnVuV2lk
dGhTb0ZhcigpLCAwLCAwLjAwMDEpOworICAgIGNvbnRyb2xsZXIuYWR2YW5jZSgxLCAmZ2x5cGhC
dWZmZXIpOworICAgIEVYUEVDVF9ORUFSKGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpLCBhZHZh
bmNlc1swXS53aWR0aCArIGluaXRpYWxBZHZhbmNlLndpZHRoLCAwLjAwMDEpOworICAgIGNvbnRy
b2xsZXIuYWR2YW5jZSgyLCAmZ2x5cGhCdWZmZXIpOworICAgIEVYUEVDVF9ORUFSKGNvbnRyb2xs
ZXIucnVuV2lkdGhTb0ZhcigpLCA3Ni4zNDc2NTYgKyBpbml0aWFsQWR2YW5jZS53aWR0aCwgMC4w
MDAxKTsKKyAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLndpZHRo
KCksIGluaXRpYWxBZHZhbmNlLndpZHRoLCAwLjAwMDEpOworICAgIEVYUEVDVF9ORUFSKGdseXBo
QnVmZmVyLmluaXRpYWxBZHZhbmNlKCkuaGVpZ2h0KCksIGluaXRpYWxBZHZhbmNlLmhlaWdodCwg
MC4wMDAxKTsKKyAgICBFWFBFQ1RfRVEoZ2x5cGhCdWZmZXIuc2l6ZSgpLCAyVSk7CisgICAgRVhQ
RUNUX05FQVIoZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KDApLndpZHRoKCksIDUzLjA2NjQwNiwgMC4w
MDAxKTsKKyAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoMSkud2lkdGgoKSwg
MjMuMjgxMjUwLCAwLjAwMDEpOworfQorCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299964</attachid>
            <date>2017-01-27 14:36:00 -0800</date>
            <delta_ts>2017-01-27 15:58:12 -0800</delta_ts>
            <desc>Follow-up patch</desc>
            <filename>bug-167493-20170127143356.patch</filename>
            <type>text/plain</type>
            <size>11257</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjExMzAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzBiOTE0NDNiMjM3NGE1
OTdiMjE0N2UxOTYyYTE2OWMzY2IyZTVlNy4uMmJkMDdhZWE5MjIzZTljOGFiOWViYjc4NGNkMDFi
MmM1NzY1YWEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE3LTAxLTI3ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBQ
cmVwYXJlIENvbXBsZXhUZXh0Q29udHJvbGxlciBmb3IgdW5pdCB0ZXN0aW5nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc0OTMKKworICAgICAgICBV
bnJldmlld2VkLgorCisgICAgICAgIEFkZHJlc3NpbmcgcG9zdC1yZXZpZXcgY29tbWVudHMgZnJv
bSBTaW1vbiBGcmFzZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRl
eHRSdW46OmNyZWF0ZUZvclRlc3RpbmcpOgorCiAyMDE3LTAxLTI3ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGRpYWdub3N0aWMgbG9nZ2luZyB1bmRlciBs
b2FkZXIvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
aAppbmRleCA2Njc1MjgwZDYzYmY2OWFiNDlmNmZhY2M5NDdhM2MzZjBjYWFkYWZiLi43MzI4NDE1
MmIyZGQ5NjI4NDAxZDRiZWMwMjk4YzJhZjM4MmU1OGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKQEAgLTEyOSw3ICsxMjksNyBAQCBwdWJs
aWM6CiAgICAgaW50IHBpeGVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZvbnREZXNjcmlwdGlvbigp
LmNvbXB1dGVkUGl4ZWxTaXplKCk7IH0KICAgICBmbG9hdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRTaXplKCk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgdXBkYXRlKFJlZlB0cjxGb250U2VsZWN0b3I+JiYpIGNvbnN0OworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgdXBkYXRlKFJlZlB0cjxGb250U2VsZWN0b3I+JiYgPSBudWxscHRyKSBjb25z
dDsKIAogICAgIGVudW0gQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIHsgRG9Ob3RQYWludElmRm9u
dE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5IH07CiAgICAgV0VCQ09SRV9FWFBP
UlQgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
dG8gPSBzdGQ6Om51bGxvcHQsIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IERvTm90UGFpbnRJ
ZkZvbnROb3RSZWFkeSkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgKaW5kZXggMGIxNTRj
NmRhNDAzY2U4YjQ2ODk3ZTNhODRhM2Q1ZDdjMGZjZjI3My4uZWU3MjVkNjhhOGU4OGJlM2YwMzc4
ZWQ0MGJmMGZiMDJjZGE5OGFjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaApAQCAtOTEsNyAr
OTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wbGV4
VGV4dFJ1bihmb250LCBjaGFyYWN0ZXJzLCBzdHJpbmdMb2NhdGlvbiwgc3RyaW5nTGVuZ3RoLCBs
dHIpKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBSZWY8Q29tcGxleFRleHRSdW4+IGNy
ZWF0ZUZvclRlc3RpbmcoVmVjdG9yPENHU2l6ZT4gYWR2YW5jZXMsIFZlY3RvcjxDR1BvaW50PiBv
cmlnaW5zLCBWZWN0b3I8Q0dHbHlwaD4gZ2x5cGhzLCBWZWN0b3I8Q0ZJbmRleD4gc3RyaW5nSW5k
aWNlcywgQ0dTaXplIGluaXRpYWxBZHZhbmNlLCBjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5n
dGgsIENGUmFuZ2UgcnVuUmFuZ2UsIGJvb2wgbHRyKQorICAgICAgICBzdGF0aWMgUmVmPENvbXBs
ZXhUZXh0UnVuPiBjcmVhdGVGb3JUZXN0aW5nKGNvbnN0IFZlY3RvcjxDR1NpemU+JiBhZHZhbmNl
cywgY29uc3QgVmVjdG9yPENHUG9pbnQ+JiBvcmlnaW5zLCBjb25zdCBWZWN0b3I8Q0dHbHlwaD4m
IGdseXBocywgY29uc3QgVmVjdG9yPENGSW5kZXg+JiBzdHJpbmdJbmRpY2VzLCBDR1NpemUgaW5p
dGlhbEFkdmFuY2UsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1
bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5nZSBydW5S
YW5nZSwgYm9vbCBsdHIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IENvbXBsZXhUZXh0UnVuKGFkdmFuY2VzLCBvcmlnaW5zLCBnbHlwaHMsIHN0cmluZ0luZGlj
ZXMsIGluaXRpYWxBZHZhbmNlLCBmb250LCBjaGFyYWN0ZXJzLCBzdHJpbmdMb2NhdGlvbiwgc3Ry
aW5nTGVuZ3RoLCBydW5SYW5nZSwgbHRyKSk7CiAgICAgICAgIH0KQEAgLTEyNyw3ICsxMjcsNyBA
QCBwdWJsaWM6CiAgICAgcHJpdmF0ZToKICAgICAgICAgQ29tcGxleFRleHRSdW4oQ1RSdW5SZWYs
IGNvbnN0IEZvbnQmLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9j
YXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UpOwogICAgICAgICBD
b21wbGV4VGV4dFJ1bihjb25zdCBGb250JiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBib29sIGx0cik7Ci0gICAg
ICAgIFdFQkNPUkVfRVhQT1JUIENvbXBsZXhUZXh0UnVuKFZlY3RvcjxDR1NpemU+IGFkdmFuY2Vz
LCBWZWN0b3I8Q0dQb2ludD4gb3JpZ2lucywgVmVjdG9yPENHR2x5cGg+IGdseXBocywgVmVjdG9y
PENGSW5kZXg+IHN0cmluZ0luZGljZXMsIENHU2l6ZSBpbml0aWFsQWR2YW5jZSwgY29uc3QgRm9u
dCYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6
ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSwgYm9vbCBsdHIpOworICAgICAgICBX
RUJDT1JFX0VYUE9SVCBDb21wbGV4VGV4dFJ1bihjb25zdCBWZWN0b3I8Q0dTaXplPiYgYWR2YW5j
ZXMsIGNvbnN0IFZlY3RvcjxDR1BvaW50PiYgb3JpZ2lucywgY29uc3QgVmVjdG9yPENHR2x5cGg+
JiBnbHlwaHMsIGNvbnN0IFZlY3RvcjxDRkluZGV4PiYgc3RyaW5nSW5kaWNlcywgQ0dTaXplIGlu
aXRpYWxBZHZhbmNlLCBjb25zdCBGb250JiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdl
LCBib29sIGx0cik7CiAKICAgICAgICAgVmVjdG9yPENHU2l6ZSwgNjQ+IG1fYmFzZUFkdmFuY2Vz
VmVjdG9yOwogICAgICAgICBWZWN0b3I8Q0dQb2ludCwgNjQ+IG1fZ2x5cGhPcmlnaW5zOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGVmOTI0YTUz
OGIzZGU3YWUwODQ2ZjQ2YTc0YWQ5NGUwMzBjZWEzMDEuLjY5NDQwNWQxNDFkOGNlM2I1YjJmYTNi
YjExOWVkNzQ4NzEwY2VlNzkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTMsNiArMywxOCBAQAogICAgICAgICBbQ29jb2FdIFByZXBhcmUgQ29t
cGxleFRleHRDb250cm9sbGVyIGZvciB1bml0IHRlc3RpbmcKICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzQ5MwogCisgICAgICAgIFVucmV2aWV3ZWQu
CisKKyAgICAgICAgQWRkcmVzc2luZyBwb3N0LXJldmlldyBjb21tZW50cyBmcm9tIFNpbW9uIEZy
YXNlci4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db21wbGV4VGV4
dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKworMjAx
Ny0wMS0yNyAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAg
ICAgIFtDb2NvYV0gUHJlcGFyZSBDb21wbGV4VGV4dENvbnRyb2xsZXIgZm9yIHVuaXQgdGVzdGlu
ZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3NDkz
CisKICAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgogCiAgICAgICAgIENyZWF0ZSBm
b3VyIHVuaXQgdGVzdHMuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IGIxMTFjNjRiY2M3MTdi
OTFkYjViZDdhZTdlNmI4Yzg4Njg2MzU4MmIuLmY3MGNlY2QyMDc4ZTVhZjYyZjViMmY1NGI5MTg3
YmU1NjNiM2EwYzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCkBAIC01MSw3ICs1MSw3IEBAIFRF
U1RfRihDb21wbGV4VGV4dENvbnRyb2xsZXJUZXN0LCBESVNBQkxFRF9Jbml0aWFsQWR2YW5jZVdp
dGhMZWZ0UnVuSW5SVEwpCiAgICAgZGVzY3JpcHRpb24uc2V0T25lRmFtaWx5KCJUaW1lcyIpOwog
ICAgIGRlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZSg4MCk7CiAgICAgRm9udENhc2NhZGUgZm9u
dChkZXNjcmlwdGlvbik7Ci0gICAgZm9udC51cGRhdGUobnVsbHB0cik7CisgICAgZm9udC51cGRh
dGUoKTsKICAgICBhdXRvIHNwYWNlV2lkdGggPSBmb250LnByaW1hcnlGb250KCkuc3BhY2VXaWR0
aCgpOwogCiAjaWYgVVNFX0xBWU9VVF9TUEVDSUZJQ19BRFZBTkNFUwpAQCAtNjcsOCArNjcsOCBA
QCBURVNUX0YoQ29tcGxleFRleHRDb250cm9sbGVyVGVzdCwgRElTQUJMRURfSW5pdGlhbEFkdmFu
Y2VXaXRoTGVmdFJ1bkluUlRMKQogICAgIFVDaGFyIGNoYXJhY3RlcnNbXSA9IHsgMHg2NDQsIDB4
NjM3LCAweDY0MSwgMHg2MjcsIDB4NjRiLCAweDIwIH07CiAgICAgc2l6ZV90IGNoYXJhY3RlcnNM
ZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNoYXJhY3RlcnMpOwogICAgIFRleHRSdW4gdGV4dFJ1
bihTdHJpbmdWaWV3KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnNMZW5ndGgpKTsKLSAgICBSZWY8Q29t
cGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bj4gcnVuMSA9IENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6Q29tcGxleFRleHRSdW46OmNyZWF0ZUZvclRlc3RpbmcoeyBDR1NpemVNYWtlKDIx
Ljg3NSwgMCkgfSwgeyBDR1BvaW50WmVybyB9LCB7IDUgfSwgeyA1IH0sIENHU2l6ZVplcm8sIGZv
bnQucHJpbWFyeUZvbnQoKSwgY2hhcmFjdGVycywgMCwgY2hhcmFjdGVyc0xlbmd0aCwgQ0ZSYW5n
ZU1ha2UoNSwgMSksIGZhbHNlKTsKLSAgICBSZWY8Q29tcGxleFRleHRDb250cm9sbGVyOjpDb21w
bGV4VGV4dFJ1bj4gcnVuMiA9IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46
OmNyZWF0ZUZvclRlc3RpbmcoYWR2YW5jZXMsIG9yaWdpbnMsIHsgMTkzLCAzNzcsIDQ0NywgNDMx
LCA0NTggfSwgeyA0LCAzLCAyLCAxLCAwIH0sIGluaXRpYWxBZHZhbmNlLCBmb250LnByaW1hcnlG
b250KCksIGNoYXJhY3RlcnMsIDAsIGNoYXJhY3RlcnNMZW5ndGgsIENGUmFuZ2VNYWtlKDAsIDUp
LCBmYWxzZSk7CisgICAgYXV0byBydW4xID0gQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4
VGV4dFJ1bjo6Y3JlYXRlRm9yVGVzdGluZyh7IENHU2l6ZU1ha2UoMjEuODc1LCAwKSB9LCB7IENH
UG9pbnRaZXJvIH0sIHsgNSB9LCB7IDUgfSwgQ0dTaXplWmVybywgZm9udC5wcmltYXJ5Rm9udCgp
LCBjaGFyYWN0ZXJzLCAwLCBjaGFyYWN0ZXJzTGVuZ3RoLCBDRlJhbmdlTWFrZSg1LCAxKSwgZmFs
c2UpOworICAgIGF1dG8gcnVuMiA9IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRS
dW46OmNyZWF0ZUZvclRlc3RpbmcoYWR2YW5jZXMsIG9yaWdpbnMsIHsgMTkzLCAzNzcsIDQ0Nywg
NDMxLCA0NTggfSwgeyA0LCAzLCAyLCAxLCAwIH0sIGluaXRpYWxBZHZhbmNlLCBmb250LnByaW1h
cnlGb250KCksIGNoYXJhY3RlcnMsIDAsIGNoYXJhY3RlcnNMZW5ndGgsIENGUmFuZ2VNYWtlKDAs
IDUpLCBmYWxzZSk7CiAgICAgVmVjdG9yPFJlZjxDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBs
ZXhUZXh0UnVuPj4gcnVuczsKICAgICBydW5zLmFwcGVuZChXVEZNb3ZlKHJ1bjEpKTsKICAgICBy
dW5zLmFwcGVuZChXVEZNb3ZlKHJ1bjIpKTsKQEAgLTEwMiw3ICsxMDIsNyBAQCBURVNUX0YoQ29t
cGxleFRleHRDb250cm9sbGVyVGVzdCwgRElTQUJMRURfSW5pdGlhbEFkdmFuY2VJblJUTCkKICAg
ICBkZXNjcmlwdGlvbi5zZXRPbmVGYW1pbHkoIlRpbWVzIik7CiAgICAgZGVzY3JpcHRpb24uc2V0
Q29tcHV0ZWRTaXplKDgwKTsKICAgICBGb250Q2FzY2FkZSBmb250KGRlc2NyaXB0aW9uKTsKLSAg
ICBmb250LnVwZGF0ZShudWxscHRyKTsKKyAgICBmb250LnVwZGF0ZSgpOwogCiAjaWYgVVNFX0xB
WU9VVF9TUEVDSUZJQ19BRFZBTkNFUwogICAgIFZlY3RvcjxDR1NpemU+IGFkdmFuY2VzID0geyBD
R1NpemVaZXJvLCBDR1NpemVNYWtlKDIxLjY0MDYyNSwgMC4wKSwgQ0dTaXplTWFrZSg0Mi4zMDQ2
ODc1LCAwLjApLCBDR1NpemVNYWtlKDU1Ljg5ODQzNzUsIDAuMCksIENHU2l6ZU1ha2UoMjIuMzQz
NzUsIDAuMCkgfTsKQEAgLTExNyw3ICsxMTcsNyBAQCBURVNUX0YoQ29tcGxleFRleHRDb250cm9s
bGVyVGVzdCwgRElTQUJMRURfSW5pdGlhbEFkdmFuY2VJblJUTCkKICAgICBVQ2hhciBjaGFyYWN0
ZXJzW10gPSB7IDB4NjQ0LCAweDYzNywgMHg2NDEsIDB4NjI3LCAweDY0YiB9OwogICAgIHNpemVf
dCBjaGFyYWN0ZXJzTGVuZ3RoID0gV1RGX0FSUkFZX0xFTkdUSChjaGFyYWN0ZXJzKTsKICAgICBU
ZXh0UnVuIHRleHRSdW4oU3RyaW5nVmlldyhjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzTGVuZ3RoKSk7
Ci0gICAgUmVmPENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW4+IHJ1biA9IENv
bXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OmNyZWF0ZUZvclRlc3RpbmcoYWR2
YW5jZXMsIG9yaWdpbnMsIHsgMTkzLCAzNzcsIDQ0NywgNDMxLCA0NTggfSwgeyA0LCAzLCAyLCAx
LCAwIH0sIGluaXRpYWxBZHZhbmNlLCBmb250LnByaW1hcnlGb250KCksIGNoYXJhY3RlcnMsIDAs
IGNoYXJhY3RlcnNMZW5ndGgsIENGUmFuZ2VNYWtlKDAsIDUpLCBmYWxzZSk7CisgICAgYXV0byBy
dW4gPSBDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpjcmVhdGVGb3JUZXN0
aW5nKGFkdmFuY2VzLCBvcmlnaW5zLCB7IDE5MywgMzc3LCA0NDcsIDQzMSwgNDU4IH0sIHsgNCwg
MywgMiwgMSwgMCB9LCBpbml0aWFsQWR2YW5jZSwgZm9udC5wcmltYXJ5Rm9udCgpLCBjaGFyYWN0
ZXJzLCAwLCBjaGFyYWN0ZXJzTGVuZ3RoLCBDRlJhbmdlTWFrZSgwLCA1KSwgZmFsc2UpOwogICAg
IFZlY3RvcjxSZWY8Q29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bj4+IHJ1bnM7
CiAgICAgcnVucy5hcHBlbmQoV1RGTW92ZShydW4pKTsKICAgICBDb21wbGV4VGV4dENvbnRyb2xs
ZXIgY29udHJvbGxlcihmb250LCB0ZXh0UnVuLCBydW5zKTsKQEAgLTE0OSw3ICsxNDksNyBAQCBU
RVNUX0YoQ29tcGxleFRleHRDb250cm9sbGVyVGVzdCwgRElTQUJMRURfSW5pdGlhbEFkdmFuY2VX
aXRoTGVmdFJ1bkluTFRSKQogICAgIGRlc2NyaXB0aW9uLnNldE9uZUZhbWlseSgiTHVjaWRhR3Jh
bmRlIik7CiAgICAgZGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKDgwKTsKICAgICBGb250Q2Fz
Y2FkZSBmb250KGRlc2NyaXB0aW9uKTsKLSAgICBmb250LnVwZGF0ZShudWxscHRyKTsKKyAgICBm
b250LnVwZGF0ZSgpOwogICAgIGF1dG8gc3BhY2VXaWR0aCA9IGZvbnQucHJpbWFyeUZvbnQoKS5z
cGFjZVdpZHRoKCk7CiAKICNpZiBVU0VfTEFZT1VUX1NQRUNJRklDX0FEVkFOQ0VTCkBAIC0xNjUs
OCArMTY1LDggQEAgVEVTVF9GKENvbXBsZXhUZXh0Q29udHJvbGxlclRlc3QsIERJU0FCTEVEX0lu
aXRpYWxBZHZhbmNlV2l0aExlZnRSdW5JbkxUUikKICAgICBVQ2hhciBjaGFyYWN0ZXJzW10gPSB7
IDB4MjAsIDB4NjEsIDB4MjBlMyB9OwogICAgIHNpemVfdCBjaGFyYWN0ZXJzTGVuZ3RoID0gV1RG
X0FSUkFZX0xFTkdUSChjaGFyYWN0ZXJzKTsKICAgICBUZXh0UnVuIHRleHRSdW4oU3RyaW5nVmll
dyhjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzTGVuZ3RoKSk7Ci0gICAgUmVmPENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6Q29tcGxleFRleHRSdW4+IHJ1bjEgPSBDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNv
bXBsZXhUZXh0UnVuOjpjcmVhdGVGb3JUZXN0aW5nKHsgQ0dTaXplTWFrZShzcGFjZVdpZHRoLCAw
KSB9LCB7IENHUG9pbnRaZXJvIH0sIHsgNSB9LCB7IDAgfSwgQ0dTaXplWmVybywgZm9udC5wcmlt
YXJ5Rm9udCgpLCBjaGFyYWN0ZXJzLCAwLCBjaGFyYWN0ZXJzTGVuZ3RoLCBDRlJhbmdlTWFrZSgw
LCAxKSwgdHJ1ZSk7Ci0gICAgUmVmPENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRS
dW4+IHJ1bjIgPSBDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpjcmVhdGVG
b3JUZXN0aW5nKGFkdmFuY2VzLCBvcmlnaW5zLCB7IDY4LCAxNDcxIH0sIHsgMSwgMiB9LCBpbml0
aWFsQWR2YW5jZSwgZm9udC5wcmltYXJ5Rm9udCgpLCBjaGFyYWN0ZXJzLCAwLCBjaGFyYWN0ZXJz
TGVuZ3RoLCBDRlJhbmdlTWFrZSgxLCAyKSwgdHJ1ZSk7CisgICAgYXV0byBydW4xID0gQ29tcGxl
eFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlRm9yVGVzdGluZyh7IENHU2l6
ZU1ha2Uoc3BhY2VXaWR0aCwgMCkgfSwgeyBDR1BvaW50WmVybyB9LCB7IDUgfSwgeyAwIH0sIENH
U2l6ZVplcm8sIGZvbnQucHJpbWFyeUZvbnQoKSwgY2hhcmFjdGVycywgMCwgY2hhcmFjdGVyc0xl
bmd0aCwgQ0ZSYW5nZU1ha2UoMCwgMSksIHRydWUpOworICAgIGF1dG8gcnVuMiA9IENvbXBsZXhU
ZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OmNyZWF0ZUZvclRlc3RpbmcoYWR2YW5jZXMs
IG9yaWdpbnMsIHsgNjgsIDE0NzEgfSwgeyAxLCAyIH0sIGluaXRpYWxBZHZhbmNlLCBmb250LnBy
aW1hcnlGb250KCksIGNoYXJhY3RlcnMsIDAsIGNoYXJhY3RlcnNMZW5ndGgsIENGUmFuZ2VNYWtl
KDEsIDIpLCB0cnVlKTsKICAgICBWZWN0b3I8UmVmPENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29t
cGxleFRleHRSdW4+PiBydW5zOwogICAgIHJ1bnMuYXBwZW5kKFdURk1vdmUocnVuMSkpOwogICAg
IHJ1bnMuYXBwZW5kKFdURk1vdmUocnVuMikpOwpAQCAtMTk2LDcgKzE5Niw3IEBAIFRFU1RfRihD
b21wbGV4VGV4dENvbnRyb2xsZXJUZXN0LCBESVNBQkxFRF9Jbml0aWFsQWR2YW5jZUluTFRSKQog
ICAgIGRlc2NyaXB0aW9uLnNldE9uZUZhbWlseSgiTHVjaWRhR3JhbmRlIik7CiAgICAgZGVzY3Jp
cHRpb24uc2V0Q29tcHV0ZWRTaXplKDgwKTsKICAgICBGb250Q2FzY2FkZSBmb250KGRlc2NyaXB0
aW9uKTsKLSAgICBmb250LnVwZGF0ZShudWxscHRyKTsKKyAgICBmb250LnVwZGF0ZSgpOwogCiAj
aWYgVVNFX0xBWU9VVF9TUEVDSUZJQ19BRFZBTkNFUwogICAgIFZlY3RvcjxDR1NpemU+IGFkdmFu
Y2VzID0geyBDR1NpemVNYWtlKDc2LjM0NzY1NiwgMC4wMDAwMDApLCBDR1NpemVNYWtlKDAuMDAw
MDAwLCAwLjAwMDAwMCkgfTsKQEAgLTIxMSw3ICsyMTEsNyBAQCBURVNUX0YoQ29tcGxleFRleHRD
b250cm9sbGVyVGVzdCwgRElTQUJMRURfSW5pdGlhbEFkdmFuY2VJbkxUUikKICAgICBVQ2hhciBj
aGFyYWN0ZXJzW10gPSB7IDB4NjEsIDB4MjBlMyB9OwogICAgIHNpemVfdCBjaGFyYWN0ZXJzTGVu
Z3RoID0gV1RGX0FSUkFZX0xFTkdUSChjaGFyYWN0ZXJzKTsKICAgICBUZXh0UnVuIHRleHRSdW4o
U3RyaW5nVmlldyhjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzTGVuZ3RoKSk7Ci0gICAgUmVmPENvbXBs
ZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW4+IHJ1biA9IENvbXBsZXhUZXh0Q29udHJv
bGxlcjo6Q29tcGxleFRleHRSdW46OmNyZWF0ZUZvclRlc3RpbmcoYWR2YW5jZXMsIG9yaWdpbnMs
IHsgNjgsIDE0NzEgfSwgeyAwLCAxIH0sIGluaXRpYWxBZHZhbmNlLCBmb250LnByaW1hcnlGb250
KCksIGNoYXJhY3RlcnMsIDAsIGNoYXJhY3RlcnNMZW5ndGgsIENGUmFuZ2VNYWtlKDAsIDIpLCB0
cnVlKTsKKyAgICBhdXRvIHJ1biA9IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRS
dW46OmNyZWF0ZUZvclRlc3RpbmcoYWR2YW5jZXMsIG9yaWdpbnMsIHsgNjgsIDE0NzEgfSwgeyAw
LCAxIH0sIGluaXRpYWxBZHZhbmNlLCBmb250LnByaW1hcnlGb250KCksIGNoYXJhY3RlcnMsIDAs
IGNoYXJhY3RlcnNMZW5ndGgsIENGUmFuZ2VNYWtlKDAsIDIpLCB0cnVlKTsKICAgICBWZWN0b3I8
UmVmPENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW4+PiBydW5zOwogICAgIHJ1
bnMuYXBwZW5kKFdURk1vdmUocnVuKSk7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRy
b2xsZXIoZm9udCwgdGV4dFJ1biwgcnVucyk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>